From 165124d54216cf0177a3298c666f2fa7a2f8dee8 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 19:19:55 +1000 Subject: [PATCH 1/2] STU-386: restyle magic-link sign-in and preserve return-to-task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Applies the redesign's design tokens and accessible-modal contract (STU-374's shared sharedControls.js primitive) to the sign-in modal's markup and styles, and fixes two behavioral gaps in the underlying magic-link flow: - The submit button was permanently disabled after a successful send, so a user who wanted to resend or use a different address had no way back in. It now always re-enables, with a transient "Sent!" label. - Sign-in requests from the composer, plans, or billing surfaces had no memory of where they came from. openSignInModal() now records the current view (via the existing hash-based switchView router) in localStorage before opening, and a successful magic-link verification restores that surface and refreshes usage/plan state — without triggering checkout or deploy. - A failed/expired token now reopens the sign-in modal with the error shown inline (in addition to the existing toast), so retry is a click away instead of a dead end. - STU-149's alias-policy error already had a message path; it now also marks the input aria-invalid and preserves the rejected address. Existing auth endpoints, request/response contracts, and token stripping are unchanged. Scope is limited to sign-in markup/styles and the UI state adapter, per file ownership. Adds e2e/stu386-magic-link-signin.spec.js covering valid/invalid email, send failure + retry, sent + resend, alias-policy rejection, token failure, successful session refresh, and the Plans return-to-task round trip, plus new deterministic fixtures in e2e/fixtures/apiFixtures.js. Linear: STU-386 --- app.js | 93 +++++++- .../{index-DBT7sHov.js => index-D6csqwUm.js} | 128 +++++------ dist/index.html | 97 ++++++++- e2e/fixtures/apiFixtures.js | 17 ++ e2e/stu386-magic-link-signin.spec.js | 198 ++++++++++++++++++ index.html | 95 ++++++++- 6 files changed, 534 insertions(+), 94 deletions(-) rename dist/assets/{index-DBT7sHov.js => index-D6csqwUm.js} (68%) create mode 100644 e2e/stu386-magic-link-signin.spec.js diff --git a/app.js b/app.js index 3d7cd2f..b75b5e4 100644 --- a/app.js +++ b/app.js @@ -98,6 +98,11 @@ const STRIPE_PRICE_IDS = { } const AUTH_SESSION_STORAGE_KEY = 'ccc_auth_session' +// Where the user asked to sign in from (composer, plans, billing…), so a +// magic-link round trip — which reloads the page with no memory of the DOM — +// can return them to that surface instead of always landing on home. +const SIGNIN_RETURN_STORAGE_KEY = 'ccc_signin_return' +const SIGNIN_RETURN_TTL_MS = 30 * 60 * 1000 const proGateAttachedSet = new WeakSet() @@ -4264,8 +4269,19 @@ async function initializeAuth() { try { const { email, sessionToken } = await verifyMagicLink(magicToken) saveSession(email, sessionToken) + closeSignInModal() + // Land back on whichever surface (composer, plans, billing) the user + // asked to sign in from, unless the link itself already carried a hash. + const returnHash = consumeSignInReturnSurface() + if (returnHash && !window.location.hash) window.location.hash = returnHash } catch (err) { - showToast(err.message || 'Sign-in link invalid or expired.', 'error') + consumeSignInReturnSurface() + const message = err.message || 'Sign-in link invalid or expired.' + showToast(message, 'error') + // Surface the failure inline too, with the retry control right there, + // instead of leaving the user to hunt for a way back in. + openSignInModal() + setSignInMessage(message, 'error') } } else { const { email, sessionToken } = getStoredSession() @@ -4282,9 +4298,43 @@ async function initializeAuth() { updateAuthUI() } +// Records which surface (home/composer, plans, or account/billing) the user +// was on when they opened the sign-in modal, so a magic-link click — which +// lands as a fresh page load — can return them there. Keyed by URL hash, +// which is how switchView() already tracks the current surface. +function rememberSignInReturnSurface() { + try { + localStorage.setItem(SIGNIN_RETURN_STORAGE_KEY, JSON.stringify({ + hash: window.location.hash || '#home', + ts: Date.now(), + })) + } catch (err) { + console.warn('rememberSignInReturnSurface: failed to persist return surface:', err) + } +} + +function consumeSignInReturnSurface() { + try { + const raw = localStorage.getItem(SIGNIN_RETURN_STORAGE_KEY) + localStorage.removeItem(SIGNIN_RETURN_STORAGE_KEY) + if (!raw) return null + const { hash, ts } = JSON.parse(raw) + if (!hash || typeof ts !== 'number' || Date.now() - ts > SIGNIN_RETURN_TTL_MS) return null + return hash + } catch (err) { + console.warn('consumeSignInReturnSurface: failed to read return surface:', err) + return null + } +} + function openSignInModal() { const modal = document.getElementById('signin-modal') - if (modal) openModal(modal) + if (!modal) return + rememberSignInReturnSurface() + const input = document.getElementById('signin-email-input') + input?.removeAttribute('aria-invalid') + setSignInMessage('') + openModal(modal) } function closeSignInModal(event) { @@ -4293,17 +4343,26 @@ function closeSignInModal(event) { if (modal) closeModal(modal) } +function setSignInMessage(text, variant) { + const msg = document.getElementById('signin-message') + if (!msg) return + msg.textContent = text || '' + msg.classList.remove('signin-message-success', 'signin-message-error') + if (variant) msg.classList.add(`signin-message-${variant}`) +} + async function handleMagicLinkRequest() { const input = document.getElementById('signin-email-input') const btn = document.getElementById('signin-submit-btn') - const msg = document.getElementById('signin-message') const email = trimEmail(input?.value) const emailRegex = /^[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])?)*$/ if (!email || !emailRegex.test(email) || email.length > 254) { - if (msg) msg.textContent = 'Please enter a valid email address.' + input?.setAttribute('aria-invalid', 'true') + setSignInMessage('Please enter a valid email address.', 'error') return } + input?.removeAttribute('aria-invalid') if (btn) { btn.disabled = true; btn.textContent = 'Sending…' } @@ -4311,18 +4370,30 @@ async function handleMagicLinkRequest() { // Existing accounts on plus-tagged addresses are still allowed to recover // because the server performs the authoritative check. const plusAliasHint = explainPlusAliasRule(email) - if (msg && plusAliasHint) msg.textContent = plusAliasHint + if (plusAliasHint) setSignInMessage(plusAliasHint, 'error') try { const data = await sendMagicLink(email) - if (input && data?.code !== PLUS_ALIAS_REJECTED_CODE) input.value = '' - if (msg) msg.textContent = getMagicLinkResultMessage(data, email) - if (btn) btn.textContent = data?.code === PLUS_ALIAS_REJECTED_CODE ? 'Send Link' : 'Sent!' - if (btn && data?.code === PLUS_ALIAS_REJECTED_CODE) btn.disabled = false + const isAliasRejected = data?.code === PLUS_ALIAS_REJECTED_CODE + if (input && !isAliasRejected) input.value = '' + input?.setAttribute('aria-invalid', String(isAliasRejected)) + setSignInMessage(getMagicLinkResultMessage(data, email), isAliasRejected ? 'error' : 'success') + // A successful send must stay retryable — the user may want to resend to + // a different address, or send another link if the first one expires — + // so the button is re-enabled either way, never left permanently disabled. + // "Sent!" is shown briefly for confirmation, then reverts so the control + // clearly reads as usable again. + if (btn) { + btn.disabled = false + btn.textContent = isAliasRejected ? 'Send Sign-in Link' : 'Sent!' + if (!isAliasRejected) { + setTimeout(() => { if (btn.textContent === 'Sent!') btn.textContent = 'Send Sign-in Link' }, 2500) + } + } } catch (err) { console.error('handleMagicLinkRequest: sendMagicLink failed', { email, err }) - if (msg) msg.textContent = 'Something went wrong. Please try again.' - if (btn) { btn.disabled = false; btn.textContent = 'Send Link' } + setSignInMessage('Something went wrong. Please try again.', 'error') + if (btn) { btn.disabled = false; btn.textContent = 'Send Sign-in Link' } } } diff --git a/dist/assets/index-DBT7sHov.js b/dist/assets/index-D6csqwUm.js similarity index 68% rename from dist/assets/index-DBT7sHov.js rename to dist/assets/index-D6csqwUm.js index ac31fd9..869b2fe 100644 --- a/dist/assets/index-DBT7sHov.js +++ b/dist/assets/index-D6csqwUm.js @@ -1,7 +1,7 @@ -(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 s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,Jo=we?.fetch,Ws=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ja=we?.AbortController,Ch=we?.CompressionStream,Ae=ke?.userAgent;function Dc(){return!(!v||v.navigator.onLine===!1)}var Tn=typeof globalThis<"u"?globalThis:v;Tn&&typeof self>"u"&&(Tn.self=Tn),Tn&&typeof File>"u"&&(Tn.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Ya(t,e,n,r,i,s,o){try{var a=t[s](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var s=t.apply(e,n);function o(l){Ya(s,r,i,o,a,"next",l)}function a(l){Ya(s,r,i,o,a,"throw",l)}o(void 0)}))}}function E(){return E=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},E.apply(null,arguments)}function jc(t,e){if(t==null)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;n[r]=t[r]}return n}var Za=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Xa(t){return typeof t=="string"||t}function Qa(t){return typeof t=="string"?t:void 0}var Mn,Fh=["$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"],pt=(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})({}),el=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),Ah=["$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"],Ph=["token"],Uc="NativeGzipValidationError",zs=t=>t.length>=2&&t[0]===31&&t[1]===139,tl=(t,e)=>t===el.GZipJS||e===el.GZipJS||e==="gzip",nl=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",Ir=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Uc,e},$h=(function(){var t=X((function*(e,n){18>e.size&&Ir("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());zs(r)&&r[2]===8||Ir("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Mn)return Mn;Mn=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Mn[c]=d>>>0}return Mn})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Ir("invalid-crc");var s=n.length>>>0;i.getUint32(4,!0)!==s&&Ir("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function qs(){return qs=X((function*(t,e,n){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),s=i.writable.getWriter(),o=s.write(r).then((()=>s.close())).catch((function(){var u=X((function*(c){try{yield s.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 $h(l,r),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),qs.apply(this,arguments)}var Rh=["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"],rl=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var n=t.toLowerCase();return Rh.concat(e).some((r=>{var i=r.toLowerCase();return n.indexOf(i)!==-1}))};function N(t,e){return t.indexOf(e)!==-1}var Bi=function(t){return t.trim()},Vs=function(t){return t.replace(/^\$/,"")};function Hc(t){var e,n=[];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(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(i))return"[Circular]";n.push(i)}return i}})))!==null&&e!==void 0?e:"null"}var Wc=Object.prototype,zc=Wc.hasOwnProperty,Di=Wc.toString,L=Array.isArray||function(t){return Di.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),yt=t=>{if(te(t)){for(var e in t)if(zc.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Di.call(t)=="[object String]",Gs=t=>W(t)&&t.trim().length===0,$e=t=>t===null,B=t=>x(t)||$e(t),he=t=>Di.call(t)=="[object Number]"&&t==t,dt=t=>he(t)&&t>0,Ye=t=>Di.call(t)==="[object Boolean]",Th=t=>t instanceof FormData,Mh=t=>N(Ah,t),Nh=t=>N(Ph,t);function qc(t){return t===null||typeof t!="object"}function ti(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Yo(t){return typeof Event<"u"&&Vc(t,Event)}function Vc(t,e){try{return t instanceof e}catch{return!1}}var Lh=[!0,"true",1,"1","yes"],cs=t=>N(Lh,t),Oh=[!1,"false",0,"0","no"];function ot(t,e,n,r,i){return e>n&&(r.warn("min cannot be greater than max."),e=n),he(t)?t>n?(r.warn(" cannot be greater than max: "+n+". Using max value instead."),n):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: "+n+", fallback: "+i),ot(i||n,e,n,r))}class Bh{constructor(e){this.tt={},this.et=e.et,this.it=ot(e.bucketSize,0,100,e.rt),this.nt=ot(e.refillRate,0,this.it,e.rt),this.st=ot(e.refillInterval,0,864e5,e.rt)}ot(e,n){var r=Math.floor((n-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 n,r=Date.now(),i=String(e),s=this.tt[i];return s?this.ot(s,r):this.tt[i]=s={tokens:this.it,lastAccess:r},s.tokens===0||(s.tokens--,s.tokens===0&&((n=this.et)==null||n.call(this,e)),s.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",ni="iOS",wt="Android",_n="Tablet",Gc=wt+" "+_n,Kc="iPad",Jc="Apple",Yc=Jc+" Watch",Zn="Safari",yn="BlackBerry",Zc="Samsung",Xc=Zc+"Browser",Qc=Zc+" Internet",Zt="Chrome",Dh=Zt+" OS",eu=Zt+" "+ni,Zo="Internet Explorer",tu=Zo+" "+Oe,Xo="Opera",jh=Xo+" Mini",Qo="Edge",nu="Microsoft "+Qo,gn="Firefox",ru=gn+" "+ni,or="Nintendo",ar="PlayStation",mn="Xbox",iu=wt+" "+Oe,su=Oe+" "+Zn,zn="Windows",Ks=zn+" Phone",il="Nokia",Js="Ouya",ou="Generic",Uh=ou+" "+Oe.toLowerCase(),au=ou+" "+_n.toLowerCase(),Ys="Konqueror",lu="Oculus Browser",ri="Vivaldi",cu="Yandex",ii="Whale",Zs="DuckDuckGo",uu="Pale Moon",si="Waterfox",Xn="Brave",du="Google Search App",le="(\\d+(\\.\\d+)?)",us=new RegExp("Version/"+le),Hh=new RegExp(mn,"i"),Wh=new RegExp(ar+" \\w+","i"),zh=new RegExp(or+" \\w+","i"),ea=new RegExp(yn+"|PlayBook|BB10","i"),qh={"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"},hu=function(t,e,n,r){e=e||"";var i=(function(s){return s!=null&&s.brave?Xn:null})(n);return i||(r!=null&&r.detectGoogleSearchApp&&N(t,"GSA/")?du:N(t," OPR/")&&N(t,"Mini")?jh:N(t," OPR/")?Xo:ea.test(t)?yn:N(t,"IE"+Oe)||N(t,"WPDesktop")?tu:N(t,"OculusBrowser")?lu:N(t,Xc)?Qc:N(t,Qo)||N(t,"Edg/")?nu:N(t,ri+"/")?ri:N(t,"YaBrowser/")?cu:N(t,ii+"/")?ii:N(t,Zs+"/")||N(t,"Ddg/")?Zs:N(t,"FBIOS")?"Facebook "+Oe:N(t,"UCWEB")||N(t,"UCBrowser")?"UC Browser":N(t,"CriOS")?eu:N(t,"CrMo")||N(t,Zt)?Zt:N(t,wt)&&N(t,Zn)?iu:N(t,"FxiOS")?ru:N(t.toLowerCase(),Ys.toLowerCase())?Ys:N(t,Xn+"/")?Xn:((s,o)=>o&&N(o,Jc)||(function(a){return N(a,Zn)&&!N(a,Zt)&&!N(a,wt)})(s))(t,e)?N(t,Oe)?su:Zn:N(t,"PaleMoon/")?uu:N(t,si+"/")?si:N(t,gn)?gn:N(t,"MSIE")||N(t,"Trident/")?Zo:N(t,"Gecko")?gn:"")},Vh={[tu]:[new RegExp("rv:"+le)],[nu]:[new RegExp(Qo+"?\\/"+le)],[Zt]:[new RegExp("("+Zt+"|CrMo)\\/"+le)],[eu]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Zn]:[us],[su]:[us],[Xo]:[new RegExp("(Opera|OPR)\\/"+le)],[gn]:[new RegExp(gn+"\\/"+le)],[ru]:[new RegExp("FxiOS\\/"+le)],[Ys]:[new RegExp("Konqueror[:/]?"+le,"i")],[yn]:[new RegExp(yn+" "+le),us],[iu]:[new RegExp("android\\s"+le,"i")],[Qc]:[new RegExp(Xc+"\\/"+le)],[lu]:[new RegExp("OculusBrowser\\/"+le)],[ri]:[new RegExp(ri+"\\/"+le)],[cu]:[new RegExp("YaBrowser\\/"+le)],[ii]:[new RegExp(ii+"\\/"+le)],[Xn]:[new RegExp(Xn+"\\/"+le)],[Zs]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[uu]:[new RegExp("PaleMoon\\/"+le)],[si]:[new RegExp(si+"\\/"+le)],[du]:[new RegExp("GSA\\/"+le)],[Zo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Gh=function(t,e,n,r){var i=hu(t,e,n,r),s=Vh[i];if(x(s))return null;for(var o=0;s.length>o;o++){var a=t.match(s[o]);if(a)return parseFloat(a[a.length-2])}return null},sl=[[new RegExp(mn+"; "+mn+" (.*?)[);]","i"),t=>[mn,t&&t[1]||""]],[new RegExp(or,"i"),[or,""]],[new RegExp(ar,"i"),[ar,""]],[ea,[yn,""]],[new RegExp(zn,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Ks,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[zn+" "+Oe,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var r=qh[n[1]]||"";return/arm/i.test(e)&&(r="RT"),[zn,r]}return[zn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[ni,[t[3],t[4],t[5]||"0"].join(".")]:[ni,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+wt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+wt+")","i"),t=>t&&t[2]?[wt,[t[2],t[3],t[4]||"0"].join(".")]:[wt,""]],[/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/,[Dh,""]],[/Linux|debian/i,["Linux",""]]],ol=function(t){return zh.test(t)?or:Wh.test(t)?ar:Hh.test(t)?mn:new RegExp(Js,"i").test(t)?Js:new RegExp("("+Ks+"|WPDesktop)","i").test(t)?Ks:/iPad/.test(t)?Kc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Yc:ea.test(t)?yn:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(il,"i").test(t)?il:/(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(Oe).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)?wt:Gc:new RegExp("(pda|"+Oe+")","i").test(t)?Uh:new RegExp(_n,"i").test(t)&&!new RegExp(_n+" pc","i").test(t)?au:""},Kh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function al(t,e){return typeof(n=t)=="string"&&Kh.test(n)?t:e();var n}function Pt(t){return t&&t.split("#")[0]}function ta(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function ll(t,e,n){return pu.apply(this,arguments)}function pu(){return(pu=X((function*(t,e,n){var r;try{return yield Promise.race([t,new Promise(((i,s)=>{r=ta((()=>{try{n?.(),i()}catch(o){s(o)}}),e)}))])}finally{clearTimeout(r)}}))).apply(this,arguments)}var Jh=t=>t instanceof Error,fu={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}},Yh=fu.info;function gu(t){if(Ye(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(L(t))return{arrayValue:{values:t.map((e=>gu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function oi(t){var e=[];for(var n in t){var r=t[n];$e(r)||x(r)||e.push({key:n,value:gu(r)})}return e}function Zh(t,e){var n=fu[t.level||"info"]||Yh,r=n.text,i=n.number,s=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),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=E({},o,t.attributes||{}),l={timeUnixNano:s,observedTimeUnixNano:s,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:oi(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function mu(t,e,n){return E({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function vu(t,e,n,r){return{resourceLogs:[{resource:{attributes:oi(e)},scopeLogs:[{scope:{name:n,version:r},logRecords:t}]}]}}let Xh=class{constructor(t,e,n,r,i,s,o){var a;s===void 0&&(s=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=r,this.ht=i,this.dt=s,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Zh(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],r=t;for(var i of n)try{var s=i(r);if(!s)return this.rt.info("Log was rejected in beforeSend function"),null;r=s}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 n=(e=t._instance.getPersistedProperty(pt.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var r=n.length,i=0;n.length>0&&r>i;){var s,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=vu(l.map((d=>d.record)),t.Lt(),(s=t.vt)!==null&&s!==void 0?s:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(pt.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var n,r=Math.max(0,t-e.ft),i=(n=e._instance.getPersistedProperty(pt.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(pt.LogsQueue,i.slice(r)),yield e.dt()}))()}Lt(){return mu(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(pt.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(pt.LogsQueue,n),this.kt>n.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=ta((()=>{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(pt.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X((function*(){e.Et();var n=e.flush().catch((()=>{}));t!==void 0?yield ll(n,t):yield n}))()}flushWithTimeout(t){var e=this;return X((function*(){var n=e.flush();yield ll(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var ds=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function cl(t){return String(t)+"000000"}function ul(t,e,n,r){var i="";return r&&(i=Object.keys(r).sort().map((s=>JSON.stringify(s)+":"+JSON.stringify(r[s]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+i}let Qh=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var i=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return i.apply(this,arguments)}})(),r=n().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 n,r;try{n=e.attributes?E({},e.attributes):void 0,r=ul(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(r,i)}var s=this.Ut.get(e.name);s===void 0?this.Ut.set(e.name,e.type):s===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+s+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(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 n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(ds.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,s){for(var o=0;s.length>o;o++)if(s[o]>=i)return o;return s.length})(e,ds)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],r=t;for(var i of n)try{var s=i(r);if(!s)return this.rt.info("Metric was rejected in beforeSend function"),null;r=s}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=ta((()=>{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 n=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(n===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),n=(function(s,o,a){return E({},s.resourceAttributes,{"service.name":s.serviceName||"unknown_service"},s.environment&&{"deployment.environment":s.environment},s.serviceVersion&&{"service.version":s.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:oi(n)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,n,r,i}Xt(t){var e=cl(Date.now()),n=new Map;for(var r of t.values()){var i,s=ul(r.type,r.name,r.unit,void 0),o=n.get(s);o||(o=E({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:[]},n.set(s,o));var a=oi((i=r.attributes)!==null&&i!==void 0?i:{}),l=cl(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:ds})}return Array.from(n.values())}Yt(t){var e,n;for(var r of t){var i=r[0],s=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,s.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=s.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(s.hist)if(o.hist){o.hist.count+=s.hist.count,o.hist.sum+=s.hist.sum,o.hist.min=Math.min(o.hist.min,s.hist.min),o.hist.max=Math.max(o.hist.max,s.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=s.hist.bucketCounts[a]}else o.hist=s.hist}else this.Qt()&&this.Bt.set(i,s)}}};var Cr,dl,hs;function ep(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return hs&&n.length===dl||(dl=n.length,hs=n.reduce(((r,i)=>{Cr||(Cr={});var s=Cr[i];if(s)r[s[0]]=s[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[i];if(u&&c){r[u]=c,Cr[i]=[u,c];break}}return r}),{})),hs}}class tp{constructor(e,n,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=n,this.modifiers=r}buildFromUnknown(e,n){n===void 0&&(n={});var r=n&&n.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,n,0).apply(e),s=this.buildParsingContext(n),o=this.parseStacktrace(i,s);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var n=this;return X((function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&L(r.stacktrace.frames)&&(r.stacktrace.frames=yield n.applyModifiers(r.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),E({},e,{cause:r,stack:i})}applyChunkIds(e,n){return e.map((r=>(r.filename&&n&&(r.chunk_id=n[r.filename]),r)))}applyCoercers(e,n){for(var r of this.coercers)if(r.match(e))return r.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return X((function*(){var r=e;for(var i of n.modifiers)r=yield i(r);return r}))()}convertToExceptionList(e,n){var r,i,s,o={type:e.type,value:e.value,mechanism:{type:(r=n.type)!==null&&r!==void 0?r:"generic",handled:(i=n.handled)===null||i===void 0||i,synthetic:(s=e.synthetic)!==null&&s!==void 0&&s}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,E({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:ep(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,r){r===void 0&&(r=0);var i=(s,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(s,a)}};return E({},n,{syntheticException:r==0?n.syntheticException:void 0,mechanism:e,apply:s=>i(s,r),next:s=>i(s,r+1)})}}var wn="?";function Xs(t,e,n,r,i){var s={platform:t,filename:e,function:n===""?wn:n,in_app:!0};return x(r)||(s.lineno=r),x(i)||(s.colno=i),s}var _u=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:wn,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},np=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,rp=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,ip=/\((\S*)(?::(\d+))(?::(\d+))\)/,sp=(t,e)=>{var n=np.exec(t);if(n)return Xs(e,n[1],wn,+n[2],+n[3]);var r=rp.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=ip.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var s=_u(r[1]||wn,r[2]);return Xs(e,s[1],s[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},op=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,ap=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,lp=(t,e)=>{var n=op.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var r=ap.exec(n[3]);r&&(n[1]=n[1]||"eval",n[3]=r[1],n[4]=r[2],n[5]="")}var i=n[3],s=n[1]||wn,o=_u(s,i);return Xs(e,i=o[1],s=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},hl=/\(error: (.*)\)/;class cp{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var r=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return ti(e,"DOMException")}isDOMError(e){return ti(e,"DOMError")}}class up{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Vc(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var 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 dp{constructor(){}match(e){return!!ti(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var r;if(e.error!=null)return n.apply(e.error);var i=n.apply(e.message);return E({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var n=e;if(W(n.filename)&&n.filename.length>0){var r,i,s=(r=n.lineno)!==null&&r!==void 0?r:0,o=(i=n.colno)!==null&&i!==void 0?i:0;return`Error - at `+n.filename+":"+s+":"+o}}}var hp=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class pp{match(e){return typeof e=="string"}coerce(e,n){var r,i=this.getInfos(e),s=i[0],o=i[1];return{type:s??"Error",value:o??e,stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var n="Error",r=e,i=e.match(hp);return i&&(n=i[1],r=i[2]),[n,r]}}var fp=["fatal","error","warning","log","info","debug"];function yu(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var r=n.length;r>0;r--){var i=n.slice(0,r).join(", ");if(e>=i.length)return r===n.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class gp{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var r,i,s=this.getErrorPropertyFromObject(e);return s?n.apply(s):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=n.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Yo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+yu(e)}isSeverityLevel(e){return W(e)&&!Gs(e)&&fp.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var r=e[n];if(Jh(r))return r}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class mp{match(e){return Yo(e)}coerce(e,n){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+yu(e),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class vp{match(e){return qc(e)}coerce(e,n){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class _p{match(e){return ti(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Yo(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var r,i=this.getUnhandledRejectionReason(e);return qc(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}:n.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 ai="$message",li="$timestamp",yp=new Set([ai,li]),ps={enabled:!0,max_bytes:32768};function ci(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ps.enabled,max_bytes:bp(t.max_bytes,ps.max_bytes)}:E({},ps)}class wp{constructor(e){this.Ke=[],this.Je=0,this.Ne=ci(e)}setConfig(e){this.Ne=ci(e),this.Xe()}add(e){var n=(function(i){var s;try{s=Hc(i)}catch{return}try{var o=JSON.parse(s);if(!te(o))return;var a=o,l=a[ai],u=a[li];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:s}}catch{return}})(e);if(n){var r=(function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var s=encodeURIComponent(i),o=0,a=0;s.length>a;a++)s[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);r>this.Ne.max_bytes||(this.Ke.push({step:n.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 bp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var wu=function(t,e){var n=(e===void 0?{}:e).debugEnabled,r={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||n)&&!x(v.console)&&v.console){for(var s=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];s(t,...a)}},debug(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("debug",...s)},info(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("log",...s)},warn(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("warn",...s)},error(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("error",...s)},critical(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];console.error(t,...s)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,s)=>wu(t+" "+i,s)};return r},k=wu("[PostHog.js]"),ne=k.createLogger,Ep=ne("[ExternalScriptsLoader]"),fs=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return Ep.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var r=C?.querySelectorAll("script");if(r){for(var i,s=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;r.length>o;o++)if(i=s())return i.v}var a=()=>{if(!C)return n("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{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 s=3e5;i=i+"&t="+Math.floor(Date.now()/s)*s}r=t.requestRouter.endpointFor("assets",i)}fs(t,r,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");fs(t,o,n)}},$.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var r=t.requestRouter.endpointFor("api",e);fs(t,r,n)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var bu="$people_distinct_id",lr="$device_id",gs="$device_model",qn="__alias",Vn="__timers",Qs="$autocapture_disabled_server_side",eo="$heatmaps_enabled_server_side",to="$exception_capture_enabled_server_side",no="$error_tracking_suppression_rules",ro="$error_tracking_capture_extension_exceptions",io="$web_vitals_enabled_server_side",na="$dead_clicks_enabled_server_side",ra="$product_tours_enabled_server_side",so="$web_vitals_allowed_metrics",Yt="$session_recording_remote_config",Eu="$replay_sample_rate",Su="$replay_override_sampling",xu="$replay_override_linked_flag",ku="$replay_override_url_trigger",Iu="$replay_override_event_trigger",pn="$sesid",ia="$session_is_sampled",Wt="$enabled_feature_flags",Gn="$active_feature_flags",Ur="$early_access_features",oo="$feature_flag_details",Kn="$feature_flag_payloads",Hr="$feature_flag_request_id",ui="$minimal_flag_called_events",rt="$override_feature_flags",zt="$override_feature_flag_payloads",ht="$stored_person_properties",qt="$stored_group_properties",ao="$surveys",di="$surveys_loaded_at",lo="$surveys_activated",Wr="$surveys_activated_session",zr="$surveys_activated_timestamps",Jn="ph_product_tours",Gt="$flag_call_reported",Yn="$flag_call_reported_session_id",qr="$feature_flag_errors",Qn="$feature_flag_evaluated_at",He="$user_state",co="$client_session_props",uo="$capture_rate_limit",ho="$initial_campaign_params",po="$initial_referrer_info",hi="$initial_person_info",pi="$epp",Fr="$posthog_cookieless",Cu="$cookieless_mode",Fu="$sdk_debug_extensions_init_method",Au="$sdk_debug_extensions_init_time_ms",Pu="$sdk_debug_recording_script_not_loaded",sa="PostHog loadExternalDependency extension not found.",Vt="on_reject",gt="always",sn="anonymous",Ot="identified",fo="identified_only",fi="visibilitychange",gi="beforeunload",un="$pageview",ms="$pageleave",vs="$identify",pl="$groupidentify";function Ar(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!B(t))if(L(t))t.forEach(e);else if(Th(t))t.forEach(((r,i)=>e(r,i)));else for(var n in t)zc.call(t,n)&&e(t[n],n)}var ee=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var i of n)for(var s in i)i[s]!==void 0&&(t[s]=i[s]);return t};function Vr(t){for(var e=Object.keys(t),n=e.length,r=new Array(n);n--;)r[n]=[e[n],t[e[n]]];return r}var fl=function(t){try{return t()}catch{return}},Sp=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),r=0;e>r;r++)n[r]=arguments[r];return t.apply(this,n)}catch(i){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},oa=function(t){var e={};return Z(t,(function(n,r){(W(n)&&n.length>0||he(n))&&(e[r]=n)})),e},xp=["herokuapp.com","vercel.app","netlify.app"];function kp(t){var e=t?.hostname;if(!W(e))return!1;var n=e.split(".").slice(-2).join(".");for(var r of xp)if(n===r)return!1;return!0}function ie(t,e,n,r){var i=r??{},s=i.capture,o=i.passive;t?.addEventListener(e,n,{capture:s!==void 0&&s,passive:o===void 0||o})}function go(t){return t.name==="ph_toolbar_internal"}var $u=t=>{if(C){try{for(var e=t+"=",n=C.cookie.split(";").filter((s=>s.length)),r=0;n.length>r;r++){for(var i=n[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 he(t)&&isFinite(t)&&Math.floor(t)===t});class mi{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,r,i){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>n||0>r||0>i||e>0xffffffffffff||n>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=e/Math.pow(2,40),s[1]=e/Math.pow(2,32),s[2]=e/Math.pow(2,24),s[3]=e/Math.pow(2,16),s[4]=e/256,s[5]=e,s[6]=112|n>>>8,s[7]=n,s[8]=128|r>>>24,s[9]=r>>>16,s[10]=r>>>8,s[11]=r,s[12]=i>>>24,s[13]=i>>>16,s[14]=i>>>8,s[15]=i,new mi(s)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new mi(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var r=this.bytes[n]-e.bytes[n];if(r!==0)return Math.sign(r)}return 0}}class Ip{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var n=this.generateOrAbort();if(x(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return mi.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 Cp}}var gl,Ru=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};v&&!x(v.crypto)&&crypto.getRandomValues&&(Ru=t=>crypto.getRandomValues(t));class Cp{nextUint32(){return this.R.length>this.O||(Ru(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var ft=()=>Fp().toString(),Fp=()=>(gl||(gl=new Ip)).generate(),Nn="",Ap=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,mt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:$u,H(t){var e;try{e=JSON.parse(mt.P(t))||{}}catch{}return e},F(t,e,n,r,i){if(!C)return!1;try{var s="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),Nn)return Nn;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),w="dmn_chk_"+ft();!Nn&&_--;){var b=m.slice(_).join("."),I=w+"=1;domain=."+b+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(w)&&(g.cookie=I+";max-age=0",Nn=b)}return Nn})(c);if(!h){var p=(f=>{var g=f.match(Ap);return g?g[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,r);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),s="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+s+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{mt.F(t,"",-1,e)}catch{return}}},_s=null,Q={N(){if(!$e(_s))return _s;var t=!0;if(x(v))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||k.error("localStorage unsupported; falling back to cookie store"),_s=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.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 v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){Q.j(n)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},Pp=[lr,"distinct_id",pn,ia,pi,hi,He],Pr={},$p={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Pr[t]||null,H:t=>Pr[t]||null,F:(t,e)=>(Pr[t]=e,!0),q(t){delete Pr[t]}},Bt=null,ce={N(){if(!$e(Bt))return Bt;if(Bt=!0,x(v))Bt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Bt=!1),ce.q(t)}catch{Bt=!1}return Bt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.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 v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){ce.j(n)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class Rp{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===gt||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Vt}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,n=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return cs(e)?1:N(Oh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?Q:mt;if(!this.ni||this.ni!==n){this.ni=n;var r=e==="localStorage"?mt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(cs(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>cs(e)))}}function Tu(t,e){var n,r=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!Se(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(s){return k.error("Error in get_current_url, falling back to window.location.href",s),e}}var Mu="__POSTHOG_TOOLBAR__",Tp=1,Mp=3,Np=11;function ml(t){return t instanceof Element&&(t.id===Mu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function $t(t){return!!t&&t.nodeType===Tp}function Ne(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Nu(t){return!!t&&t.nodeType===Mp}function Lu(t){return!!t&&t.nodeType===Np&&$t(t.host)}var Ou=1e3;function aa(t){return t?Bi(t).split(/\s+/):[]}function vl(t,e){var n=(function(r){var i,s=v==null||(i=v.location)==null?void 0:i.href;return x(s)?void 0:Tu(r,s)})(e);return!!(n&&t&&t.some((r=>n.match(r))))}function vi(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 aa(e)}function Bu(t){return B(t)?null:Bi(t).split(/(\s+)/).filter((e=>er(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function cr(t){var e="";return vo(t)&&!Hu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var r;Nu(n)&&n.textContent&&(e+=(r=Bu(n.textContent))!==null&&r!==void 0?r:"")})),Bi(e)}function ys(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var la=["a","button","form","input","select","textarea","label"];function mo(t,e){if(x(e))return!0;var n,r=function(s){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(s,o))))return{v:!0}};for(var i of t)if(n=r(i))return n.v;return!1}function Du(t){var e=t.parentNode;return!(!e||!$t(e))&&e}var Lp=[".ph-no-autocapture","[data-ph-no-autocapture]"],ju=["next","previous","prev",">","<"],Op=[...ju,"+","-","−","–"],_l=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,yl=[".ph-no-rageclick",".ph-no-capture"],Bp=["","text","search","email","password","url","tel","number"];function wl(t,e){if(!v||ca(t))return!1;var n,r,i,s,o;if(Ye(e)?(n=!!e&&yl,r=void 0,i=!1):(n=(s=e?.css_selector_ignorelist)!==null&&s!==void 0?s:yl,r=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||i&&(function(l){return!(!l||!$t(l))&&(!!Ne(l,"textarea")||(Ne(l,"input")?N(Bp,(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=Uu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=ju;else{if(!L(l))return!1;if(l.length>10)return k.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,p=d.ariaLabel;return c.some((f=>_l(h,f)||_l(p,f)))}))})(r,a.map((l=>{var u;return{safeText:cr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!mo(a,n)}var ca=t=>!t||Ne(t,"html")||!$t(t),Uu=(t,e)=>{if(!v||ca(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,r=[t],i=t;i.parentNode&&!Ne(i,"body");)if(Lu(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var s=Du(i);if(!s)break;if(e||la.indexOf(s.tagName.toLowerCase())>-1)n=!0;else try{var o=v.getComputedStyle(s);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}r.push(s),i=s}return{parentIsUsefulElement:n,targetElementList:r}};function vo(t){for(var e=new Set,n=0,r=t;r.parentNode&&!Ne(r,"body");r=r.parentNode){if(n++>=Ou||e.has(r))return!1;e.add(r);var i=vi(r);if(N(i,"ph-sensitive")||N(i,"ph-no-capture"))return!1}if(N(vi(t),"ph-include"))return!0;var s=t.type||"";if(W(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!W(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 Hu(t){return!!(Ne(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Ne(t,"select")||Ne(t,"textarea")||t.getAttribute("contenteditable")==="true")}var bl=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}))$"),El=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Dp=[16,15,14,13],jp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),Sl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),xl=/[0-9A-Za-z_]/;function Up(t){for(var e=0,n=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;n&&(i*=2)>9&&(i-=9),e+=i,n=!n}return e%10==0}function er(t,e){if(e===void 0&&(e=!0),B(t))return!1;if(W(t)){t=Bi(t);var n=e?bl.test((t||"").replace(/[- ]/g,"")):(function(i){var s;for(El.lastIndex=0;s=El.exec(i);){var o=s[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Dp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(bl.test(d)&&Up(d))return!0}}}return!1})(t);if(n)return!1;var r=e?jp.test(t):(function(i){var s;for(Sl.lastIndex=0;s=Sl.exec(i);){var o=s[1],a=s[3];if(!(o&&a&&xl.test(o)&&xl.test(a)))return!0}return!1})(t);if(r)return!1}return!0}function kl(t){var e=cr(t);return er(e=(e+" "+Wu(t)).trim())?e:""}function Wu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var r;if(n&&((r=n.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=cr(n);e=(e+" "+i).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+Wu(n)).trim())}catch(s){k.error("[AutoCapture]",s)}})),e}function Il(t){return t.replace(/"|\\"/g,'\\"')}function Hp(t){var e=t.attr__class;if(e)return L(e)?e:aa(e)}var $r=ne("[Dead Clicks]"),Wp=()=>!0,zp=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(na)),r=t.instance.config.capture_dead_clicks;return Ye(r)?r:!!te(r)||n};class Cl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,r){this.instance=e,this.isEnabled=n,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[na]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,r;(n=$.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?$r.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=te(this.instance.config.capture_dead_clicks)?E({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(C),$r.info("starting...")}}else $r.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,$r.info("stopping..."))}}var ws=ne("[SegmentIntegration]"),zu="posthog-js";function qu(t,e){var n=e===void 0?{}:e,r=n.organization,i=n.projectId,s=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],b=w.map((F=>E({},F,{stacktrace:F.stacktrace?E({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((A=>E({},A,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=w[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&i&&(I.$sentry_url=(s||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class qp{constructor(e,n,r,i,s,o){this.name=zu,this.setupOnce=function(a){a(qu(e,{organization:n,projectId:r,prefix:i,severityAllowList:s,sendExceptionsToPostHog:o==null||o}))}}}class Fl{constructor(e){this.li=(n,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,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,n){var r,i=this.vi(e,n);return this.ui={pathname:(r=v?.location.pathname)!==null&&r!==void 0?r:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var r=this.ui;if(!r)return{$pageview_id:n};var i={$pageview_id:n,$prev_pageview_id:r.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var o=s.maxScrollHeight,a=s.lastScrollY,l=s.maxScrollY,u=s.maxContentHeight,c=s.lastContentY,d=s.maxContentY;if(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(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?ot(a/o,0,1,k):1,p=o>1?ot(l/o,0,1,k):1,f=u>1?ot(c/u,0,1,k):1,g=u>1?ot(d/u,0,1,k):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:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return r.pathname&&(i.$prev_pageview_pathname=r.pathname),r.timestamp&&(i.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),i}}var bs=["flags","surveys"],Vp={[bu]:{exposure:"hidden"},[qn]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Vn]:{exposure:"hidden"},[Qs]:{exposure:"event"},[eo]:{exposure:"hidden"},[to]:{exposure:"event"},[no]:{exposure:"hidden"},[ro]:{exposure:"event"},[io]:{exposure:"event"},[na]:{exposure:"event"},[ra]:{exposure:"hidden"},[so]:{exposure:"event"},[Yt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[pn]:{exposure:"hidden"},[ia]:{exposure:"event"},[Eu]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(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"},[Wt]:{exposure:"hidden",storageGroup:"flags"},[Gn]:{exposure:"hidden",storageGroup:"flags"},[Ur]:{exposure:"hidden"},[oo]:{exposure:"hidden",storageGroup:"flags"},[Kn]:{exposure:"hidden",storageGroup:"flags"},[Hr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ui]:{exposure:"hidden",storageGroup:"flags"},[rt]:{exposure:"hidden"},[zt]:{exposure:"hidden"},[ht]:{exposure:"hidden"},[qt]:{exposure:"hidden"},[ao]:{exposure:"hidden",storageGroup:"surveys"},[di]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[lo]:{exposure:"event"},[Wr]:{exposure:"hidden"},[zr]:{exposure:"hidden"},[Jn]:{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"},[Gt]:{exposure:"hidden"},[Yn]:{exposure:"hidden"},[qr]:{exposure:"hidden"},[Qn]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[co]:{exposure:"hidden"},[uo]:{exposure:"hidden"},[ho]:{exposure:"hidden"},[po]:{exposure:"hidden"},[hi]:{exposure:"hidden"},[pi]:{exposure:"hidden"},[Su]:{exposure:"event"},[xu]:{exposure:"event"},[ku]:{exposure:"event"},[Iu]:{exposure:"event"},[Fu]:{exposure:"event"},[Au]:{exposure:"event"},[Pu]:{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"}},Gp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Dt=t=>{var e=Vp[t];if(e)return e;for(var n of Gp){var r=n[1];if(t.indexOf(n[0])===0)return r}},fn=(t,e)=>{try{return JSON.stringify(t,((n,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Hc(t)}},_i=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},bn=function(t,e){for(var n,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var s=r[i].split("=");if(s[0]===e){n=s;break}}if(!L(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},ur=function(t,e,n){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],s=(r[0]||"").split("?"),o=s[1],a=s[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},yi=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Vu=(t,e)=>t>=e&&Dc(),Gu=(t,e,n,r)=>{if(t===0){if(Dc()){var i=e+1;return i===n&&r(),i}return e}return 0},Rr="https?://(.*)",En=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Kp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...En],dr="",Jp=["li_fat_id"];function Ku(t,e,n){if(!C)return{};var r,i=e?[...En,...n||[]]:[],s=Ju(ur(C.URL,i,dr),t),o=(r={},Z(Jp,(function(a){var l=$u(a);r[a]=l||null})),r);return ee(o,s)}function Ju(t,e){var n=Kp.concat(e||[]),r={};return Z(n,(function(i){var s=bn(t,i);r[i]=s||null})),r}function Yu(t){var e=(function(s){return s?s.search(Rr+"google.([^/?]*)")===0?"google":s.search(Rr+"bing.com")===0?"bing":s.search(Rr+"yahoo.com")===0?"yahoo":s.search(Rr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var i=C?bn(C.referrer,n):"";i.length&&(r.ph_keyword=i)}return r}function Al(){return navigator.language||navigator.userLanguage}var wi="$direct";function Zu(){return C?.referrer||wi}function Xu(t,e,n){n===void 0&&(n=!1);var r=t?[...En,...e||[]]:[],i=n?Pt(re?.href):re?.href,s=i?.substring(0,1e3);return{r:Zu().substring(0,1e3),u:s?ur(s,r,dr):void 0}}function Qu(t,e){var n;e===void 0&&(e=!1);var r=t.r,i=t.u,s=e?Pt(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==wi?wi:(n=_i(r))==null?void 0:n.host};if(s){o.$current_url=s;var a=_i(s);o.$host=a?.host,o.$pathname=a?.pathname;var l=Ju(s);ee(o,l)}if(r){var u=Yu(r);ee(o,u)}return o}function ed(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Yp(){try{return new Date().getTimezoneOffset()}catch{return}}var Zp={flags:Qn,surveys:di},Xp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],on="main";class Es{constructor(e,n,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=(s=>{var o="";return s.token&&(o=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&k.info("Persistence loaded",e.persistence,E({},this.props)),this.update_config(e,e,n),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){Xp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,r=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Pp,...o];return E({},Q,{H(u){try{var c={};try{c=mt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$e(g)||g===""||(p[f]=g)}d=ee(h,p)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,p,f){var g=Q.F(u,c,void 0,void 0,f);try{var m={};l.forEach((_=>{c[_]&&(m[_]=c[_])})),Object.keys(m).length&&mt.F(u,m,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{v?.localStorage.removeItem(u),mt.q(u,c)}catch(d){Q.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,s=e.persistence.toLowerCase();return s==="localstorage"&&Q.N()?(n=Q,i=!0):s==="localstorage+cookie"&&r.N()?(n=r,i=!0):s==="sessionstorage"&&ce.N()?n=ce:s==="memory"?n=$p:s==="cookie"?n=mt:r.N()?(n=r,i=!0):n=mt,this.fi=i,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((n,r)=>{var i=Dt(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(n))return;e[r]=n}})),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 bs){var n=Q.H(this.Si(e));if(n&&!yt(n)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(n,e)),this.Ii(e,n)||ee(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var r;return((r=Dt(n))==null?void 0:r.storageGroup)===e}))}Ii(e,n){var r=Zp[e];if(!r)return!1;var i=n[r],s=this.props[r];return he(i)&&he(s)&&s>i}refreshKey(e){var n;if(!this.xi){var r=this.pi?(n=Dt(e))==null?void 0:n.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 s=this.ii.H(this.yi);if(s&&e in s)return void this.Pi(e,s[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(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,on))}Li(){var e=this.Di(),n=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,n,on),bs)){var s,o=r[i];(!yt(o)||(s=this.ci[i])!=null&&s.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},n={flags:{},surveys:{}};return Z(this.props,((r,i)=>{var s,o=(s=Dt(i))==null?void 0:s.storageGroup;o?n[o][i]=r:e[i]=r})),{main:e,groups:n}}Ei(e,n){if(n===on)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((i,s)=>{var o;r[s]=(o=Dt(s))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(r)}Oi(e,n,r,i){var s=this.Mi(i);if(i===on||s.dirty||x(s.fingerprint)){var o;try{if((o=this.Ei(r,i))===s.fingerprint)return void(s.dirty=!1)}catch{o=void 0}e.F(n,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(s.dirty=!1,i!==on&&(s.persisted=!0),x(o)||(s.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,r=n!==void 0&&n;if(x(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 bs)Q.q(this.Si(i));r?delete this.ci[on]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,r){if(te(e)){x(n)&&(n="None"),this.$i=x(r)?this.ji:r;var i=!1;if(Z(e,((s,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,s),i=!0)})),i)return this.save(),!0}return!1}register(e,n){if(te(e)){this.$i=x(n)?this.ji:n;var r=!1;if(Z(e,((i,s)=>{e.hasOwnProperty(s)&&(this.props[s]!==i||te(i)||L(i))&&(this.Pi(s,i),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,r=!1;for(var i of n)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var n=Ku(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);yt(oa(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Yu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Zu(),$referring_domain:C!=null&&C.referrer&&((e=_i(C.referrer))==null?void 0:e.host)||wi},void 0)}set_initial_person_info(){this.props[ho]||this.props[po]||this.register_once({[hi]:Xu(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([po,ho],(i=>{var s=this.props[i];s&&Z(s,(function(o,a){e["$initial_"+Vs(a)]=o}))}));var n=this.props[hi];if(n){var r=(function(i,s){s===void 0&&(s=!1);var o=Qu(i,s),a={};return Z(o,(function(l,u){a["$initial_"+Vs(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,(function(n,r){r in e||(e[r]=n)})),e}update_config(e,n,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!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),s=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=s,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var r=this.props[Vn]||{};r[e]=n,this.Pi(Vn,r),this.save()}remove_event_timer(e){var n=this.props[Vn]||{},r=n[e];return x(r)||(delete n[e],this.Pi(Vn,n),this.save()),r}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var r;this.props[e]=n,(r=Dt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,r=(n=Dt(e))==null?void 0:n.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Tr(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&Se(n.then)&&n.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},Ln={Activation:"events",Cancellation:"cancelEvents"},Ss={Popover:"popover",API:"api",Widget:"widget"},vt={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},xs={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},_o={Popover:"popover",Inline:"inline"},Qp={SHOWN:"product tour shown"},Pl={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},$l=ne("[RateLimiter]");class ef{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var r=n.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach((i=>{$l.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void $l.warn('could not rate limit - continuing. Error: "'+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 n,r,i;e===void 0&&(e=!1);var s=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(r=this.instance.persistence)==null?void 0:r.get_property(uo))!==null&&n!==void 0?n:{tokens:s,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>s&&(l.tokens=s);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(he(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(uo,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!L(n)||!n.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 n,r,i=this.captureEventsBurstLimit,s=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(r=this.instance).get_session_id)==null?void 0:n.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 "+s+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return Ct.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void Ct.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return Ct.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((n=>{this.Zi(n.json,n),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){Ct.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&C&&C.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||Ct.warn("Failed to fetch remote config from PostHog."):Ct.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){Ct.error("Error applying remote config",i)}if(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){Ct.error("Error loading feature flags",i)}}}var qe=Uint8Array,Pe=Uint16Array,Sn=Uint32Array,ua=new qe([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]),da=new qe([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]),Rl=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),nd=function(t,e){for(var n=new Pe(31),r=0;31>r;++r)n[r]=e+=1<r;++r)for(var s=n[r];n[r+1]>s;++s)i[s]=s-n[r]<<5|r;return[n,i]},rd=nd(ua,2),yo=rd[1];rd[0][28]=258,yo[258]=28;for(var Tl=nd(da,0)[1],id=new Pe(32768),se=0;32768>se;++se){var an=(43690&se)>>>1|(21845&se)<<1;id[se]=((65280&(an=(61680&(an=(52428&an)>>>2|(13107&an)<<2))>>>4|(3855&an)<<4))>>>8|(255&an)<<8)>>>1}var tr=function(t,e,n){for(var r=t.length,i=0,s=new Pe(e);r>i;++i)++s[t[i]-1];var o,a=new Pe(e);for(i=0;e>i;++i)a[i]=a[i-1]+s[i-1]<<1;for(o=new Pe(r),i=0;r>i;++i)o[i]=id[a[t[i]-1]++]>>>15-t[i];return o},Qt=new qe(288);for(se=0;144>se;++se)Qt[se]=8;for(se=144;256>se;++se)Qt[se]=9;for(se=256;280>se;++se)Qt[se]=7;for(se=280;288>se;++se)Qt[se]=8;var bi=new qe(32);for(se=0;32>se;++se)bi[se]=5;var tf=tr(Qt,9),nf=tr(bi,5),sd=function(t){return(t/8>>0)+(7&t&&1)},od=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var r=new(t instanceof Pe?Pe:t instanceof Sn?Sn:qe)(n-e);return r.set(t.subarray(e,n)),r},ct=function(t,e,n){var r=e/8>>0;t[r]|=n<<=7&e,t[r+1]|=n>>>8},On=function(t,e,n){var r=e/8>>0;t[r]|=n<<=7&e,t[r+1]|=n>>>8,t[r+2]|=n>>>16},ks=function(t,e){for(var n=[],r=0;t.length>r;++r)t[r]&&n.push({s:r,f:t[r]});var i=n.length,s=n.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(F,A){return F.f-A.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=s[0].s;for(r=1;i>r;++r)s[r].s>h&&(h=s[r].s);var p=new Pe(h+1),f=wo(n[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var w=s[r].s;if(e>=p[w])break;g+=_-(1<>>=m;g>0;){var b=s[r].s;e>p[b]?g-=1<=0&&g;--r){var I=s[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},wo=function(t,e,n){return t.s==-1?Math.max(wo(t.l,e,n+1),wo(t.r,e,n+1)):e[t.s]=n},Ml=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Pe(++e),r=0,i=t[0],s=1,o=function(l){n[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return[n.subarray(0,r),e]},Bn=function(t,e){for(var n=0,r=0;e.length>r;++r)n+=t[r]*e[r];return n},bo=function(t,e,n){var r=n.length,i=sd(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 s=0;r>s;++s)t[i+s+4]=n[s];return 8*(i+4+r)},Nl=function(t,e,n,r,i,s,o,a,l,u,c){ct(e,c++,n),++i[256];for(var d=ks(i,15),h=d[0],p=d[1],f=ks(s,15),g=f[0],m=f[1],_=Ml(h),w=_[0],b=_[1],I=Ml(g),F=I[0],A=I[1],j=new Pe(19),S=0;w.length>S;++S)j[31&w[S]]++;for(S=0;F.length>S;++S)j[31&F[S]]++;for(var P=ks(j,7),R=P[0],M=P[1],T=19;T>4&&!R[Rl[T-1]];--T);var O,J,q,H,oe=u+5<<3,fe=Bn(i,Qt)+Bn(s,bi)+o,Ie=Bn(i,h)+Bn(s,g)+o+14+3*T+Bn(j,R)+(2*j[16]+3*j[17]+7*j[18]);if(fe>=oe&&Ie>=oe)return bo(e,c,t.subarray(l,l+u));if(ct(e,c,1+(fe>Ie)),c+=2,fe>Ie){O=tr(h,p),J=h,q=tr(g,m),H=g;var _e=tr(R,M);for(ct(e,c,b-257),ct(e,c+5,A-1),ct(e,c+10,T-4),c+=14,S=0;T>S;++S)ct(e,c+3*S,R[Rl[S]]);c+=3*T;for(var Ce=[w,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ct(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ct(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=tf,J=Qt,q=nf,H=bi;for(S=0;a>S;++S)if(r[S]>255){var me;On(e,c,O[257+(me=r[S]>>>18&31)]),c+=J[me+257],me>7&&(ct(e,c,r[S]>>>23&31),c+=ua[me]);var ge=31&r[S];On(e,c,q[ge]),c+=H[ge],ge>3&&(On(e,c,r[S]>>>5&8191),c+=da[ge])}else On(e,c,O[r[S]]),c+=J[r[S]];return On(e,c,O[256]),c+J[256]},rf=new Sn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),sf=(function(){for(var t=new Sn(256),e=0;256>e;++e){for(var n=e,r=9;--r;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Is=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function of(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=sf[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),r=t.length;n.p(t);var i,s,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,(function(d,h,p,f,g,m){var _=d.length,w=new qe(f+_+5*(1+Math.floor(_/7e3))+g),b=w.subarray(f,w.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var A=F+65535;_>A?I=bo(b,I,d.subarray(F,A)):(b[F]=!0,I=bo(b,I,d.subarray(F,_)))}else{for(var j=rf[h-1],S=j>>>13,P=8191&j,R=(1<F;++F){var me=q(F),ge=32767&F,Qe=T[me];if(M[ge]=Qe,T[me]=ge,F>=Re){var Lt=_-F;if((Ie>7e3||Ce>24576)&&Lt>423){I=Nl(d,b,0,H,oe,fe,_e,Ce,ae,F-ae,I),Ce=Ie=_e=0,ae=F;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)fe[de]=0}var Ge=2,It=0,$n=P,De=ge-Qe&32767;if(Lt>2&&me==q(F-De))for(var Fe=Math.min(S,Lt)-1,Sr=Math.min(32767,F),xr=Math.min(258,Lt);Sr>=De&&--$n&&ge!=Qe;){if(d[F+Ge]==d[F+Ge-De]){for(var je=0;xr>je&&d[F+je]==d[F+je-De];++je);if(je>Ge){if(Ge=je,It=De,je>Fe)break;var kr=Math.min(De,je-2),nn=0;for(de=0;kr>de;++de){var rn=F-De+de+32768&32767,Rn=rn-M[rn]+32768&32767;Rn>nn&&(nn=Rn,Qe=rn)}}}De+=(ge=Qe)-(Qe=M[ge])+32768&32767}if(It){H[Ce++]=268435456|yo[Ge]<<18|Tl[It];var Ga=31&yo[Ge],Ka=31&Tl[It];_e+=ua[Ga]+da[Ka],++oe[257+Ga],++fe[Ka],Re=F+Ge,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=Nl(d,b,!0,H,oe,fe,_e,Ce,ae,F-ae,I)}return od(w,0,f+sd(I)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,h){var p=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&&Is(d,4,Math.floor(new Date(h.mtime||Date.now())/1e3)),p){d[3]=8;for(var f=0;p.length>=f;++f)d[f+10]=p.charCodeAt(f)}})(u,e),Is(u,c-8,n.d()),Is(u,c-4,r),u}var af=!!Ws||!!Jo,ad="text/plain",Gr=!1,ld=(t,e)=>{var n=t.split("#"),r=n[1],i=n[0].split("?"),s=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(r?"#"+r:"")},ji=function(t,e,n){var r;n===void 0&&(n=!0);var i=t.split("?"),s=i[0],o=i[1],a=E({},e),l=(r=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=n&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&r!==void 0?r:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(g,m){x(g)||x(m)||m==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Cs=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===xe.GZipJS){var r=of((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var f=new qe(d+8+(u-p<<1));f.set(c),c=f}var g=a.charCodeAt(p);128>g?h(g):2048>g?(h(192|g>>>6),h(128|63&g)):g>55295&&57344>g?(h(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),h(128|g>>>12&63),h(128|g>>>6&63),h(128|63&g)):(h(224|g>>>12),h(128|g>>>6&63),h(128|63&g))}return od(c,0,d)})(fn(e)),{mtime:0});return{contentType:ad,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(n===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(fn(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:fn(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=fn(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},cd=t=>{var e,n,r=()=>t.transport==="sendBeacon"?{url:ji(t.url,{compression:xe.Base64}),encodedBody:Cs(E({},t,{compression:xe.Base64,Ji:void 0}))}:{url:ld(t.url,"compression"),encodedBody:Cs(E({},t,{compression:void 0,Ji:void 0}))};try{e=Cs(t)}catch(i){if(tl(t.compression,bn(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&tl(t.compression,bn(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?zs(new Uint8Array(n)):ArrayBuffer.isView(n)&&zs(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Gr=!0,r()):{url:t.url,encodedBody:e}},ud=t=>{try{return cd(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},lf=(function(){var t=X((function*(e){var n=fn(e.data),r=yield(function(s,o,a){return qs.apply(this,arguments)})(n,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return E({},e,{Ji:{contentType:ad,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),cf=/Failed to fetch|NetworkError|Load failed/i,dd=t=>t?.name==="TypeError"&&cf.test(t?.message||""),hd=t=>{var e=ud(t);if(e){var n=e.url,r=e.encodedBody,i=r??{},s=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(Ja){var d=new Ja;u={signal:d.signal,timeout:setTimeout((()=>{var f,g;c=!0,d.abort((f=t.timeout,(g=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",g))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||dd(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Jo(n,E({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((g=>{var m={statusCode:f.status,text:g};if(f.status===200)try{m.json=JSON.parse(g)}catch(_){k.error(_)}t.callback==null||t.callback(m)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},Eo=t=>{try{var e,n=cd(t),r=n.url,i=n.encodedBody,s=i??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(ke.sendBeacon(r,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:E({},t.data,{batch:h});return Eo(E({},t,{data:d(u.slice(0,c))})),void Eo(E({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),hd(E({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},Ll=(t,e,n,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return ji(n===xe.GZipJS?ld(t,"compression"):t,E({},i?{[i]:Date.now().toString()}:{},n===xe.GZipJS?{}:{compression:n}))},Kr=[];Jo&&Kr.push({transport:"fetch",method:hd}),Ws&&Kr.push({transport:"XHR",method(t){var e=ud(t);if(e){var n=new Ws,r=e.encodedBody;n.open(t.method||"GET",e.url,!0);var i=r??{},s=i.contentType,o=i.body;Z(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ke!=null&&ke.sendBeacon&&Kr.push({transport:"sendBeacon",method:Eo});var So=3e3;class uf{constructor(e,n){this.Xi=!0,this.tr=[],this.er=ot(n?.flush_interval_ms||So,250,5e3,k.createLogger("flush interval"),So),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((r=>r.url.indexOf("/e")===0)),...n.filter((r=>r.url.indexOf("/e")!==0))].map((r=>{this.lr(E({},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 n=this.ar(),r=function(){var s=n[i],o=new Date().getTime();s.data&&L(s.data)&&Z(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var i in n)r()}}),this.er))}lr(e){try{this.ir(e)}catch(n){k.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(n=>{var r,i=n,s=(i?i.batchKey:null)||i.url;x(e[s])&&(e[s]=E({},i,{data:[]})),(r=e[s].data)==null||r.push(i.data)})),this.tr=[],e}}var df=["retriesPerformedSoFar"];class hf{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,r=jc(e,df);dt(n)&&(r.url=ji(r.url,{retry_count:n})),this._instance._send_request(E({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(n??0))return void this.At(E({retriesPerformedSoFar:n},r));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+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))})(n),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var s="Enqueued failed request for retry in "+r;navigator.onLine||(s+=" (Browser is offline)"),k.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],r=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,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,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(E({},n,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class pf{constructor(e){this.yr=()=>{var n,r,i,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(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,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var n of e){var r=v?.document.querySelector(n);if(r)return r}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[n]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var ff=t=>Xu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Ol{constructor(e,n,r,i){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[co]:a})}},this._instance=e,this.Tr=n,this.Mr=r,this.Cr=i||ff,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[co]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?Qu(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return Z(oa(this.getSetOnceProps()),((n,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Vs(r)]=n})),e}}class ha{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((r=>r!==n))}}emit(e,n){for(var r of this.Er[e]||[])r(n);for(var i of this.Er["*"]||[])i(e,n)}constructor(){this.Er={}}}var Dn=ne("[SessionId]");class Bl{on(e,n){return this.Ir.on(e,n)}constructor(e,n,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new ha,this.Lr=(u,c)=>!(!dt(u)||!dt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===gt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||ft,this.Nr=r||ft;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*ot(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Dn.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=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){Dn.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&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 n=this.Pr;return!$e(n)&&!$e(e)&&5e3>Math.abs(e-n)}Ur(e,n,r){var i=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=n,this.Dr=e,s&&!i||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[pn]:[n,e,r]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return dt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(pn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[pn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=dt(e)?e:0,r=dt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[pn];return L(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&&v&&(v.removeEventListener(gi,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,gi,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===gt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=n||new Date().getTime(),i=this.Jr(),s=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=dt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!s,p=s,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Dn.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}h||f||u?(s=this.$r(),l=this.Nr(),Dn.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(Dn.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=dt(a)&&e&&!u?a:r,_=dt(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(s,l,w))),{sessionId:s,windowId:l,sessionStartTimestamp:_,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 pd=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&rl(n,e))return!0;try{var r=t?.userAgentData;if(r!=null&&r.brands&&r.brands.some((i=>rl(i?.brand,e))))return!0}catch{}return!!t.webdriver};function fd(){return(fd=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return W(n)&&n.length>0?n:void 0}catch(r){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}}))).apply(this,arguments)}var Ei=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function Fs(t,e,n){return fn({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var gd={exact:(t,e)=>e.some((n=>t.some((r=>n===r)))),is_not:(t,e)=>e.every((n=>t.every((r=>n!==r)))),regex:(t,e)=>e.some((n=>t.some((r=>Ei(n,r))))),not_regex:(t,e)=>e.every((n=>t.every((r=>!Ei(n,r))))),icontains:(t,e)=>e.map(Mr).some((n=>t.map(Mr).some((r=>n.includes(r))))),not_icontains:(t,e)=>e.map(Mr).every((n=>t.map(Mr).every((r=>!n.includes(r))))),gt:(t,e)=>e.some((n=>{var r=parseFloat(n);return!isNaN(r)&&t.some((i=>r>parseFloat(i)))})),lt:(t,e)=>e.some((n=>{var r=parseFloat(n);return!isNaN(r)&&t.some((i=>rt.toLowerCase();function md(t,e){return!t||Object.entries(t).every((n=>{var r=n[1],i=e?.[n[0]];if(x(i)||$e(i))return!1;var s=[String(i)],o=gd[r.operator];return!!o&&o(r.values,s)}))}var xo="custom",Dl="i.posthog.com",gf=/^\/static\//;class mf{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+Dl,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":xo),this.en[this.apiHost]}rn(e){if(gf.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var r=this.rn(n);if(r)return""+r+n}if(this.region===xo)return this.apiHost+n;var i=Dl+n;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function vd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var V=ne("[Surveys]"),_d="seenSurvey_",yd=t=>{try{var e=(n=>((r,i)=>""+_d+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(i))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){V.error("Failed to persist survey seen state",n)}},vf=[Ss.Popover,Ss.Widget,Ss.API],_f={ignoreConditions:!1,ignoreDelay:!1,displayType:_o.Popover},yf=ne("[PostHog ExternalIntegrations]"),wf={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class bf{constructor(e){this._instance=e}ai(e,n){var r;(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,(i=>{if(i)return yf.error("failed to load script",i);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=r[0],u=r[1];!u||(s=$.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(wf[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__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;n()}}}class Ef{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return X((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var r=e.setup(n.nn);r&&(yield r)}catch(s){var i=n.sn.get(e.name)===e;i&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),i&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&Se(n.then)&&n.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 Sf{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var r={};for(var i of e){var s=n?.get_property(i);x(s)||(r[i]=s)}return r}set(e,n){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var jl="extensionsRemoteConfig";class xf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new Sf(e),this.onEvent=n=>Tr(this.instance.on("eventCaptured",(r=>{try{n({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}}))),this.onRemoteConfig=n=>{if(this.an)return Tr((()=>{}));var r=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(jl,r);return this.un&&r(this.un),Tr(i)},this.vn=new Ef(k.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(lr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(lr);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,r,i,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(r=s?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=s?.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,n,r){var i=this;return X((function*(){r?i.instance.capture(e,n,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Tr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(jl,e))}sendRequest(e,n){var r=this;return X((function*(){var i;n===void 0&&(n={});var s=r.instance.requestRouter.endpointFor((i=n.target)!==null&&i!==void 0?i:"api",e),o={method:n.method,url:n.query?ji(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(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 nr={},As=0,Si=()=>{},Ul='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',jn="Surveys module not available",Hl="sanitize_properties is deprecated. Use before_send instead",wd="Invalid value for property_denylist config: ",kf=["token","distinct_id",Cu],dn="posthog",bd=!af&&Ae?.indexOf("MSIE")===-1&&Ae?.indexOf("Mozilla")===-1,Ps=t=>{var e;return E({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:kp(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:Si,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&&W(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:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){k.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:fo,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:So},error_tracking:{},_onCapture:Si},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:Op,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},If=[["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"]],Wl=t=>{var e={};for(var n of If){var r=n[0],i=n[1];x(t[r])||(e[i]=t[r])}var s=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(s.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?s.property_denylist=t.property_blacklist:L(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(wd+t.property_denylist)),s};class Cf{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,n){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===gt||this.config.cookieless_mode===Vt&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Cf,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new ha,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Ps(),this.SentryIntegration=qp,this.sentryIntegration=r=>(function(i,s){var o=qu(i,s);return{name:zu,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 pf(this),this.pageViewManager=new Fl(this),this.rateLimiter=new ef(this),this.requestRouter=new mf(this),this.consent=new Rp(this),this.externalIntegrations=new bf(this);var n=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(r,i,s)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(o),s?.({})},set_once:(r,i,s)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,n,r){if(r&&r!==dn){var i,s=(i=nr[r])!==null&&i!==void 0?i:new Te;return s._init(e,n,r),nr[r]=s,nr[dn][r]=s,s}return this._init(e,n,r)}_init(e,n,r){var i,s;n===void 0&&(n={});var o,a=W(e)?e.trim():"";if(!a)return k.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=Ps(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Ps(n.defaults),u=Wl(n),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&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new Es(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Es(E({},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);L(h)&&h.forEach((A=>{W(A)&&this.yn.add(A)}))}else ce.q(this.bn);var p=E({},this.persistence.props),f=E({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new uf((A=>this.Pn(A)),this.config.request_queue_config),this.Rn=new hf(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new Bl(this),this.sessionPropsManager=new Ol(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((A,j,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:n,thisC:E({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=n.bootstrap)!=null&&i.distinctID||(n.bootstrap=E({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===sn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===Ot)k.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 b=this.config.get_device_id(ft()),I=n.bootstrap.isIdentifiedID?b:m;this.persistence.set_property(He,n.bootstrap.isIdentifiedID?Ot:sn),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:Fr,$device_id:null},"");else if(!this.get_distinct_id()){var F=this.config.get_device_id(ft());this.register_once({distinct_id:F,$device_id:F},""),this.persistence.set_property(He,sn)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(A,j){var S=A.config.segment;if(!S)return j();(function(P,R){var M=P.config.segment;if(!M)return R();var T=J=>{var q=()=>J.anonymousId()||ft();P.config.get_device_id=q,J.id()&&(P.register({distinct_id:J.id(),$device_id:q()}),P.persistence.set_property(He,Ot)),R()},O=M.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(A,(()=>{S.register((P=>{typeof Promise<"u"&&Promise.resolve||ws.warn("This browser does not have Promise support, and can not use the segment integration");var R=(M,T)=>{if(!T)return M;M.event.userId||M.event.anonymousId===P.get_distinct_id()||(ws.info("No userId set, resetting PostHog"),P.reset()),M.event.userId&&M.event.userId!==P.get_distinct_id()&&(ws.info("UserId set, identifying with PostHog"),P.identify(M.event.userId));var O=P.calculateEventProperties(T,M.event.properties);return M.event.properties=Object.assign({},O,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,un),identify:M=>R(M,vs),screen:M=>R(M,"$screen")}})(A)).then((()=>{j()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==Si&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(A=>this.config._onCapture(A.event,A)))),this.config.ip&&k.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 fd.apply(this,arguments)})().then((A=>{A&&this.register({[gs]:A})})).catch(Si),this}Fn(){var e,n,r,i,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(r=Te.__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)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,r,i,s,o,a,l,u=performance.now(),c=E({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(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=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,zp)),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((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var r=e.shift();if(r)try{r()}catch(s){k.error("Error initializing extension:",s)}}var i=Math.round(performance.now()-n);this.register_for_session({[Fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Au]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var n;if(!C||!C.body)return k.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=N(i.supportedCompression,xe.GZipJS)?xe.GZipJS:N(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:fo}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(r){k.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new td(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()&&Ar(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,r,i,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ms),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(ms,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?bd?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=E({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var r,i,s,o=E({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((w=>E({},w,{sent_at:_}))):E({},m,{sent_at:_})})(o.data))),o.url=Ll(o.url,o.method,o.compression,o.timestampMode);var p=Kr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(i=(s=(function(m,_){for(var w=0;m.length>w;w++)if(m[w].transport===h)return m[w]})(p))==null?void 0:s.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){dd(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&Ch&&typeof Promise<"u"&&!Gr?lf(o).then((m=>{g(m)})).catch((m=>{if(nl(m))return Gr=!0,void g(E({},o,{compression:void 0,url:Ll(n.url,n.method,void 0,n.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return nl(_)||w===Uc})(m)&&(Gr=!0),g(o)})):f(o)})(E({},e,{callback:n=>{var r,i;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){As++;try{var n,r=[],i=[],s=[];Ar(e,(a=>{if(a)if(L(n=a[0]))s.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&n==="alias"?r.push(a):L(a)&&n.indexOf("capture")!==-1&&Se(this[n])?s.push(a):i.push(a)}));var o=function(a,l){Ar(a,(function(u){try{if(L(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){k.error("Error executing queued PostHog call",u,d)}}))};o(r,this),o(i,this),o(s,this)}finally{As--}}push(e){if(As>0&&L(e)&&W(e[0])){var n=Te.prototype[e[0]];Se(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,r){var i,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!x(e)&&W(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){n!=null&&n.$current_url&&!W(n?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||r!=null&&r.Wn||k.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?.timestamp||d,p=al(r?.uuid,ft),f={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},h,p)};e===un&&this.config.__preview_capture_bot_pageviews&&u&&(f.event="$bot_pageview",f.properties.$browser_type="bot"),c&&(f.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&f.properties.$feature_flag_has_experiment===!1&&this.get_property(ui)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,w,b,I=g?void 0:this.Vn(r?.$set_once,e!==pl,e===vs);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(s=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,s):T,l=new Set,f=(function T(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var q;if(l.add(O),L(O))q=[],Ar(O,(oe=>{q.push(T(oe))}));else{var H={};Z(O,((oe,fe)=>{l.has(oe)||(H[fe]=T(oe))})),q=H}return q}})(o)),f.timestamp=h,x(r?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},q=H=>{T[H]!==void 0&&(J[H]=T[H])};return Fh.forEach(q),O.forEach(q),J})(f.properties,kf)),e===vt.DISMISSED||e===vt.SENT){var F=n?.[xs.SURVEY_ID],A=n?.[xs.SURVEY_ITERATION];yd({id:F,current_iteration:A}),f.$set=E({},f.$set,{[(_={id:F,current_iteration:A},w=e===vt.SENT?"responded":"dismissed",b="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+w+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===vt.SHOWN&&(f.$set=E({},f.$set,{[xs.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Qp.SHOWN){var j=n?.[Pl.TOUR_TYPE];j&&(f.$set=E({},f.$set,{[Pl.TOUR_LAST_SEEN_DATE+"/"+j]:new Date().toISOString()}))}var S=E({},f.properties.$set,f.$set);if(yt(S)||this.setPersonPropertiesForFlags(S),!B(this.config.before_send)){var P=this.Pt(f);if(!P)return;(f=P).uuid=al(f.uuid,ft)}this.dn.emit("eventCaptured",f);var R=(i=r?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:R,data:f,compression:"best-available",timestampMode:r?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r?._batchKey,transport:r?.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(M):this.In.enqueue(M),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new xf(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,n,r,i,s){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=E({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Cu]=!0),e==="$snapshot"){var l=E({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Gs(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(F,A,j,S){var P,R,M,T;if(S===void 0&&(S=!1),!Ae)return{};var O,J=F?[...En,...A||[]]:[],q=(function(xr){for(var je=0;sl.length>je;je++){var kr=sl[je],nn=kr[1],rn=kr[0].exec(xr),Rn=rn&&(Se(nn)?nn(rn,xr):nn);if(Rn)return Rn}return["",""]})(Ae),H=q[0],oe=q[1],fe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(j)||(Ie.detectGoogleSearchApp=j);var _e={},Ce=(P=navigator)==null||(P=P.userAgentData)==null?void 0:P.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(M=v.screen)==null?void 0:M.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Qe,Lt,de,Ge,It,$n,De,Fe,Sr=ee(oa({$os:H,$os_version:oe,$browser:hu(Ae,navigator.vendor,fe,Ie),$device:ol(Ae),$device_type:(Lt=Ae,de=_e,Fe=ol(Lt),Fe===Kc||Fe===Gc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===au?_n:Fe===or||Fe===mn||Fe===ar||Fe===Js?"Console":Fe===Yc?"Wearable":Fe?Oe:de?.userAgentDataPlatform==="Android"&&((Ge=de?.maxTouchPoints)!==null&&Ge!==void 0?Ge:0)>0?600>Math.min((It=de?.screenWidth)!==null&&It!==void 0?It:0,($n=de?.screenHeight)!==null&&$n!==void 0?$n:0)/((De=de?.devicePixelRatio)!==null&&De!==void 0?De:1)?Oe:_n:"Desktop"),$timezone:ed(),$timezone_offset:Yp()}),{$current_url:ur(S?Pt(re?.href):re?.href,J,dr),$host:re?.host,$pathname:re?.pathname,$raw_user_agent:Ae.length>1e3?Ae.substring(0,997)+"...":Ae,$browser_version:Gh(Ae,navigator.vendor,fe,Ie),$browser_language:Al(),$browser_language_prefix:(Qe=Al(),typeof Qe=="string"?Qe.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.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&&(Sr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),Sr})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(F){a.$sdk_debug_error_capturing_properties=String(F)}if(this.requestRouter.region===xo&&(a.$lib_custom_api_host=this.config.api_host),u=e!==un||s?e!==ms||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===un&&C&&(a.title=C.title),!x(o)){var f=r.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Ae&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(F=>{F in g&&delete m[F]}));var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,E({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(wd+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Hl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,r){var i;if(n===void 0&&(n=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var s=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Hl),a=l(a,"$set_once")),n&&(this.mn=!0),yt(a)?void 0:a}register(e,n){var r;(r=this.persistence)==null||r.register(e,n)}register_once(e,n,r){var i;(i=this.persistence)==null||i.register_once(e,n,r)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((r=>this.yn.add(r))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var n=[];this.yn.forEach((r=>n.push(r))),n.length>0?ce.F(this.bn,n):ce.q(this.bn)}}getFeatureFlag(e,n){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,n))!==null&&r!==void 0?r:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,n,r)}updateEarlyAccessFeatureEnrollment(e,n,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,n,r)}getEarlyAccessFeatures(e,n,r){var i;return n===void 0&&(n=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,n,r)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:jn}),()=>{})}onSessionId(e){var n,r;return(n=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:jn})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:jn})}renderSurvey(e,n){var r;(r=this.surveys)==null||r.renderSurvey(e,n)}displaySurvey(e,n){var r;n===void 0&&(n=_f),(r=this.surveys)==null||r.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,r;return(n=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:jn}}canRenderSurveyAsync(e,n){var r,i;return n===void 0&&(n=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,n))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:jn})}Jn(e){return!e||Gs(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===Fr?(k.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())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,r){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.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(lr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(qn)&&(this.unregister(qn),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(He)||sn)===sn,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Ot),this.setPersonPropertiesForFlags({$set:n||{},$set_once:r||{}},!1),this.capture(vs,{distinct_id:e,$anon_distinct_id:i},{$set:n||{},$set_once:r||{}}),this.Sn=Fs(e,n,r),(s=this.featureFlags)==null||s.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Ot);var u=n||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=Fs(e,n,r)}else(n||r)&&this.setPersonProperties(n,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Gt)):l&&(n||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var r=Fs(this.get_distinct_id(),e,n);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=r):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,r=(L(e)?e:[e]).filter((i=>W(i)&&i.length>0));r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,n,r){if(e&&n){var i=this.getGroups(),s=i[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:E({},i,{[e]:n})}),s||r){var o={$group_type:e,$group_key:n};r&&(o.$group_set=r),this.capture(pl,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),s&&!r&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var r;n===void 0&&(n=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var r;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var r,i,s,o,a,l,u,c,d,h;if(n===void 0&&(n=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(lr),g=this.get_property(gs),m=this.get_property(Yt),_=this.is_capturing();if(this.consent.reset(),n||!_||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(),x(m)||(p=this.persistence)==null||p.register({[Yt]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,sn),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===gt)this.register_once({distinct_id:Fr,$device_id:null},"");else{var w=this.config.get_device_id(ft());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||x(g)||this.register({[gs]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return X((function*(){var r,i,s,o,a,l,u;if(n.__loaded){(r=n.Un)==null||r.stop(),(i=n.jn)==null||i.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var r;this.config.identity_distinct_id=e,this.config.identity_hash=n,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,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=n.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&r){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,n){return e===this.get_property(bu)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(qn,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=E({},this.config);if(te(e)){var r,i,s,o,a,l,u,c,d,h,p,f;ee(this.config,Wl(e));var g=this.En();(r=this.persistence)==null||r.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Es(E({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);Ye(m)&&(this.config.debug=m),Ye(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:n,newConfig:E({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){Y.LIB_NAME=e,Y.LIB_VERSION=n}startSessionRecording(e){var n,r,i,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(E({},i,n))}}addExceptionStep(e,n){var r;(r=this.exceptions)==null||r.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,r;return(n=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:dn;return n!==dn&&(n=dn+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(He))===Ot||((n=this.sessionPersistence)==null?void 0:n.get_property(He))===Ot}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===fo&&!this._isIdentified()&&yt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[qn])&&((n=this.persistence)==null||(n=n.props)==null||!n[pi]))}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"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(pi,!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!==Vt)}es(){var e,n,r,i,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((r=this.persistence)==null||r.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((i=this.sessionPersistence)==null||i.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==gt){if(this.gn()){var r,i,s,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new Bl(this),this.pageViewManager=new Fl(this),this.persistence&&(this.sessionPropsManager=new Ol(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Vt&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Ul)}opt_out_capturing(){var e,n,r;this.config.cookieless_mode!==gt?(this.config.cookieless_mode===Vt&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Vt&&(this.register({distinct_id:Fr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):k.warn(Ul)}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===gt||(this.config.cookieless_mode===Vt?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?pd(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(un,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(fi,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,fi,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.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?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,r,i,s,o){var a=r in n&&!B(n[r]),l=i in n&&!B(n[i]);return a?n[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."),n[i])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var n;if(B(this.config.before_send))return e;var r=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(Nh),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of i){if(s=o(s),B(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return Mh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}s.properties&&!yt(s.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(s.properties&&B(s.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(r)})}Cn(e){var n=Ye(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!n&&(!!r||e)}}Te.__defaultExtensionClasses={},Te.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=Sp(t.prototype[e[n]])})(Te,["identify"]);class zl{constructor(e){this.disabled=e===!1;var n=te(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(n-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:n,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:r}];return!1}}var $s="$copy_autocapture",Rs=ne("[AutoCapture]");function Ts(t,e){return e.length>t?e.slice(0,t)+"...":e}function Ff(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!$t(e));return e}function Af(t,e){var n,r,i=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!$t(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Ne(h,"body")&&Ou>c.length;)if(Lu(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!$t(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,m=[],_={},w=!1,b=!1;if(Z(c,(S=>{var P=vo(S);if(Ne(S,"a")){var R=S.getAttribute("href");w=!!(P&&R&&er(R))&&(u?Pt(R):R)}N(vi(S),"ph-no-capture")&&(b=!0),m.push((function(T,O,J,q,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),fe={tag_name:oe};la.indexOf(oe)>-1&&!J&&(fe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?Ts(1024,kl(T)):Ts(1024,cr(T)));var Ie=vi(T);Ie.length>0&&(fe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Hu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(q==null||!q.includes(ae.name))&&!O&&er(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=aa(ge).join(" ")),fe["attr__"+ae.name]=Ts(1024,ae.name==="href"&&H?Pt(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=Ff(Re);)_e++,Re.tagName===T.tagName&&Ce++;return fe.nth_child=_e,fe.nth_of_type=Ce,fe})(S,s,o,a,u));var M=(function(T){if(!vo(T))return{};var O={};return Z(T.attributes,(function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var q=J.name.replace("data-ph-capture-attribute-",""),H=J.value;q&&H&&er(H)&&(O[q]=H)}})),O})(S);ee(_,M)})),b)return{props:{},explicitNoCapture:b};if(o||(m[0].$el_text=Ne(t,"a")||Ne(t,"button")?kl(t):cr(t)),w){var I,F;m[0].attr__href=w;var A=(I=_i(w))==null?void 0:I.host,j=v==null||(F=v.location)==null?void 0:F.host;A&&j&&A!==j&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(S){return S.map((P=>{var R,M,T="";if(P.tag_name&&(T+=P.tag_name),P.attr_class)for(var O of(P.attr_class.sort(),P.attr_class))T+="."+O.replace(/"/g,"");var J=E({},P.text?{text:P.text}:{},{"nth-child":(R=P.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(M=P.nth_of_type)!==null&&M!==void 0?M:0},P.href?{href:P.href}:{},P.attr_id?{attr_id:P.attr_id}:{},P.attributes),q={};return Vr(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return q[Il(H[0].toString())]=Il(oe.toString())})),(T+=":")+Vr(q).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((P=>{var R,M,T={text:(R=P.$el_text)==null?void 0:R.slice(0,400),tag_name:P.tag_name,href:(M=P.attr__href)==null?void 0:M.slice(0,2048),attr_class:Hp(P),attr_id:P.attr__id,nth_child:P.nth_child,nth_of_type:P.nth_of_type,attributes:{}};return Vr(P).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(r=m[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Un=ne("[ExceptionAutocapture]"),ql=()=>{},Pf=ne("[TracingHeaders]"),jt=ne("[Web Vitals]"),Vl=9e5,Gl="disabled",Kl="lazy_loading",Hn="awaiting_config",Nr="missing_config";ne("[SessionRecording]"),ne("[SessionRecording]");var ko="[SessionRecording]",ut=ne(ko),$f=ne("[Heatmaps]");function Ms(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Lr=ne("[Product Tours]"),Ns=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(ra))},Rf=["$set_once","$set"],et=ne("[SiteApps]"),Jl="Error while initializing PostHog app with config id ";function ln(t,e,n){if(B(t))return!1;switch(n){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 Tf{constructor(e){this.ns=new ha,this.ss=(n,r)=>this.os(n,r)&&this.ls(n,r)&&this.us(n,r)&&this.hs(n,r),this.os=(n,r)=>r==null||!r.event||n?.event===r?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;x((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((r,i)=>{this.on(r,i)}))}register(e){var n,r;if(!x((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(r=this._instance)!=null&&r.autocapture)){var i,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(i=this._instance)==null||i.autocapture.setElementSelectors(s)}}on(e,n){var r;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach((i=>{this.cs(n,i)&&this.ns.emit("actionCaptured",i.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var r of n.steps)if(this.ss(e,r))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!ln(i,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var r;if(n==null||!n.href)return!0;var i=this.bs(e);if(i.length>0)return i.some((a=>ln(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&ln((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var r;if(n==null||!n.text)return!0;var i=this.bs(e);if(i.length>0)return i.some((u=>ln(u.text,n.text,n.text_matching||"exact")||ln(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(s=(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=n.text,a=n.text_matching||"exact",s.some((u=>ln(u,o,a))))}ys(e,n){var r,i;if(n==null||!n.selector)return!0;var s=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||md(n.properties.reduce(((r,i)=>{var s=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:s,operator:i.operator||"exact"},r}),{}),e?.properties)}}class Mf{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((r=>this.Ss(r)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&md(e.propertyFilters,n?.properties)}Ps(e,n){var r=new Map;return e.forEach((i=>{var s;(s=i.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.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,n,r){var i=(r===Ln.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>i?.includes(a.id)))})),s.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,n)}))}register(e){var n;x((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((r=>{var i,s;return((i=r.conditions)==null?void 0:i.actions)&&((s=r.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new Tf(this._instance),this.Os.init(),this.Os.fs((r=>{this.onAction(r)}))),n.forEach((r=>{var i,s,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(s=r.conditions)!=null&&(s=s.actions)!=null&&s.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 n,r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&i.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Ln.Activation),this.ks=this.Ps(e,Ln.Cancellation))}onEvent(e,n){var r,i,s=this.Ds(),o=(n==null||(r=n.properties)==null?void 0:r.$survey_id)||(n==null||(i=n.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Ln.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Ln.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var r=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),i=[];for(var s of e)r&&this.Cs(s)?this.qs(s)&&this.Us(s):i.push(s);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 n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var r=this.Zs(),i=r.filter((s=>!n.has(s)));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(E({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),r={},i=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?i=!0:r[o]=a}i&&(yt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return he(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&i===s?r:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,r=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),s=this.Qs();i.length>0&&(this.Ws([]),i.filter((o=>he(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class Nf extends Mf{constructor(e){super(e)}Js(){return lo}Ys(){return Wr}Ms(){return zr}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[zr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(zr)}Cs(e){var n,r;this.As((s=>{r=s.find((o=>o.id===e))}));var i=(n=r)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return he(i)&&i>0}ra(){return vt.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return V}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[lo]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Wr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Wr)}ea(){return!1}$s(e,n){var r;this.As((s=>{r=s.find((o=>o.id===n))}));var i=!r||(function(s){var o;return vd(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(r);return i?e===vt.SHOWN?"consume":"ignore":e===vt.SHOWN?"persist":e===vt.DISMISSED||e===vt.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Or="SDK is not enabled or survey functionality is not yet loaded",Yl="Disabled. Not loading surveys.",Lf=v!=null&&v.location?yi(v.location.hash,"__posthog")||yi(location.hash,"state"):null,Zl="_postHogToolbarParams",Xl=ne("[Toolbar]"),Ql=ne("[FeatureFlags]");class Of{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((r,i)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=r.bootstrap)==null?void 0:s.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:L(r.flag_keys)?r.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(Ql.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Ql.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var ec=ne("[FeatureFlags]"),Ut=ne("[FeatureFlags]",{debugEnabled:!0}),Ls=`" failed. Feature flags didn't load in time.`,tc="connection_error",nc=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},rc=t=>{var e={};for(var n of Vr(t||{})){var r=n[1];r&&(e[n[0]]=r)}return e},tt=ne("[Error tracking]"),ic="Refusing to render web experiment since the viewer is a likely bot",Bf={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>Ei(e,t),not_regex:(t,e)=>!Ei(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),n.getWebExperiments((i=>{ye.aa("retrieved web experiments from the server"),n.oa=new Map,i.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(ye.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);W(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];ye.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),r)},this._instance=e,this._instance.onFeatureFlags((r=>{this.onFeatureFlags(r)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(ic);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((n=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(n)){var i,s=this._instance.getFeatureFlag(n),o=(i=this.oa)==null?void 0:i.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var n=bn(e?.search,"__experiment_id"),r=bn(e?.search,"__experiment_variant");n&&r&&(ye.aa("previewing web experiments "+n+" && "+r),this.getWebExperiments((i=>{this.ha(parseInt(n),r,i)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!n)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:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,r){var i=r.filter((s=>s.id===e));i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+n+"]"),this.la(i[0].name,n,i[0].variants[n].transforms))}static ua(e,n){return!B(e.conditions)&&ye.da(e,n)&&ye.va(e)}static da(e,n){var r;if(B(e.conditions)||B((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var s,o,a,l=Tu(n,i.href);return(s=e.conditions)==null||!s.url||Bf[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var n;if(B(e.conditions)||B((n=e.conditions)==null?void 0:n.utm))return!0;var r=Ku();if(r.utm_source){var i,s,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==r.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==r.utm_source,f=(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,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==r.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;n>i;i++)r[i-1]=arguments[i];k.info("[WebExperiments] "+e,r)}la(e,n,r){this._is_bot()?ye.aa(ic):n!=="control"?r.forEach((i=>{if(i.selector){var s;ye.aa("applying transform of variant "+n+" for experiment "+e+" ",i);var o=(s=document)==null?void 0:s.querySelectorAll(i.selector);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 ke&&this._instance?pd(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=ne("[Conversations]"),Ht="Conversations not available yet.",sc="console",Ed="__posthogHandledLogsRequestError",Os=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[Ed]=!0,n},oc=t=>!!t&&typeof t=="object"&&t[Ed]===!0,Ui={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=ec,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 Of(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.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=[],v?.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[Gn,Kn,Hr,rt]){var n=this.Oa(e);x(n)||(t[e]=n)}this.fa=t;var r=E({},t),i=this.Oa(Wt);if(i)for(var s of Object.entries(i))r["$feature/"+s[0]]=s[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Qn);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,r=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,s,o=(i=(s=n.bootstrap)==null?void 0:s.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,n){var r,i,s=n!=null&&n.merge&&(r=this.Oa(Wt))!==null&&r!==void 0?r:{},o=n!=null&&n.merge&&(i=this.Oa(Kn))!==null&&i!==void 0?i:{},a=E({},s,t),l=E({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Xa(h),variant:Qa(h),reason:void 0,metadata:x(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(oo),e=this.Oa(rt),n=this.Oa(zt);if(!n&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of i){var o,a,l=r[s],u=e?.[s],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=n?.[s],p=E({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=E({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var r=t[n];return{key:n,enabled:Xa(r),variant:Qa(r),payload:Za(e[n])}}))}getFlagVariants(){var t=this.Oa(Wt),e=this.Oa(rt);if(!e)return t||{};for(var n=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)n[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Kn),e=this.Oa(zt);if(!e)return t||{};for(var n=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)n[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Gt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:E({},e.initialPersonProperties,this.Oa(ht)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(qt),timezone:ed()};x(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var r=this.Na();r.length&&(n.evaluation_contexts=r);var i=this.qa();x(i)||(n.flag_keys=i);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[qr]:[tc]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?tc:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[qr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,f,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Vu(this.Sa,3)}Ua(t){this.Sa=Gu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(n=r?.variant)!==null&&n!==void 0?n:r?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+Ls)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,r=this.getFlagVariants(),i=t in r,s=r[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(Hr)||void 0,u=this.Oa(Qn)||void 0,c=this.Oa(Gt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Yn);h&&h!==p&&(c={},n=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Gt]:c,[Yn]:n});else{var f,g,m,_,w,b,I,F,A,j;L(c[t])?c[t].push(a):c[t]=[a],this.F(E({[Gt]:c},n?{[Yn]:n}:{}));var S=this.getFeatureFlagDetails(t),P=[...(f=this.Oa(qr))!==null&&f!==void 0?f:[]];x(s)&&P.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(w=S.metadata)==null?void 0:w.version)||(R.$feature_flag_version=S.metadata.version);var M,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(F=S.reason)==null?void 0:F.code;T&&(R.$feature_flag_reason=T),S!=null&&(A=S.metadata)!=null&&A.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(j=S.metadata)!=null&&j.original_payload&&(R.$feature_flag_original_payload=S==null||(M=S.metadata)==null?void 0:M.original_payload),P.length&&(R.$feature_flag_error=P.join(",")),this.za(R)}else n&&this.F({[Gt]:c,[Yn]:n});if(i)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:Za(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+Ls)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return X((function*(){var r=n.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},s=n.Na();s.length&&(i.evaluation_contexts=s);var o,a=n.qa();x(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:n.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+Ls),e.defaultValue;var n=this.getFeatureFlag(t,e);return x(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var r=(function(i,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=ec);var c=((A,j)=>{var S=A.flags;return S?E({},A,{featureFlags:Object.fromEntries(Object.keys(S).map((P=>{var R;return[P,(R=S[P].variant)!==null&&R!==void 0?R:S[P].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((P=>S[P].enabled)).filter((P=>{var R;return(R=S[P].metadata)==null?void 0:R.payload})).map((P=>{var R;return[P,(R=S[P].metadata)==null?void 0:R.payload]})))}):(A.featureFlags&&j.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),A)})(i,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=i.requestId,g=i.evaluatedAt;if(L(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(h)for(var _=0;h.length>_;_++)m[h[_]]=!0;return{[Gn]:h,[Wt]:m,[ui]:!1}}var w=h,b=p,I=d;if(l!=null&&l.partialResponse)w=E({},s,w),b=E({},o,b),I=E({},a,I);else if(i.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((A=>{var j;return!((j=d[A])!=null&&j.failed)})));w=E({},s,Object.fromEntries(Object.entries(w).filter((A=>F.has(A[0]))))),b=E({},o,Object.fromEntries(Object.entries(b||{}).filter((A=>F.has(A[0]))))),I=E({},a,Object.fromEntries(Object.entries(I||{}).filter((A=>F.has(A[0])))))}else w=E({},s,w),b=E({},o,b),I=E({},a,I);return E({[Gn]:Object.keys(rc(w)),[Wt]:w||{},[Kn]:b||{},[oo]:I||{},[ui]:i.minimalFlagCalledEvents===!0},f?{[Hr]:f}:{},g?{[Qn]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,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([rt,zt]),this.Va(),void Ut.info("All overrides cleared");if(L(t))return this.F({[rt]:nc(t)}),this.Va(),void Ut.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var r={},i=n.flags,s=n.payloads;return i&&(r[rt]=L(i)?nc(i):i),s&&(r[zt]=s),Object.keys(r).length&&this.F(r),i===!1&&s===!1?this.q([rt,zt]):i===!1?this.q(rt):s===!1&&this.q(zt),this.Va(),i===!1?Ut.info("Flag overrides cleared"):i&&Ut.info("Flag overrides set",{flags:i}),void(s===!1?Ut.info("Payload overrides cleared"):s&&Ut.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[rt]:t}),this.Va(),void Ut.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,r=e.flagVariants;try{t(n,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var r=(this.Oa(Ur)||[]).find((l=>l.flagKey===t)),i={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(s.$early_access_feature_name=r.name),n&&(s.$feature_enrollment_stage=n);var o=E({},this.getFlagVariants(),{[t]:e});this.F({[Gn]:Object.keys(rc(o)),[Wt]:o,[ht]:E({},this.Oa(ht)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var r=this.Oa(Ur);!r||e?this.Qa(t,n):t(r)}Qa(t,e){var n=this;return X((function*(){var r=n.nn;if(r){var i,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Ur]:i=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,r)=>(n[r]=e[r],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach((i=>{try{i(n,r,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(ht)||{},r=t?.$set||(t!=null&&t.$set_once?{}:t),i=t?.$set_once,s={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in n||(s[o]=i[o]));this.F({[ht]:E({},n,s,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=E({},this.Oa(ht)||{});t.forEach((r=>{delete n[r]})),this.F({[ht]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ht),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(qt)||{},r=E({},n);for(var i of Object.keys(t))r[i]=E({},n[i],t[i]);this.F({[qt]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(qt)||{};this.F({[qt]:E({},e,{[t]:{}})})}else this.q(qt)}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}}},Df={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===Hn||this.Ya===Nr?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=Gl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var n=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((r=>r.name==="visible"))})(),this.Ie=()=>{var e;C?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw ut.error("started without valid sessionManager"),new Error(ko+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===gt)throw new Error(ko+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Yt))==null||!t.enabled),n=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&n&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!x(Object.assign)&&!x(Array.from);this.ro&&n?(this.no(t),ut.info("starting")):(this.Ya=Gl,this.stopRecording())}}no(t){var e,n,r;this.ro&&(this.Ya!==Hn&&this.Ya!==Nr&&(this.Ya=Kl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=$.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,(i=>{if(i)return ut.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(ia),(e=this.Mr)==null||e.unregister(Eu)}uo(t,e){if(B(t))return null;var n,r=he(t)?t:parseFloat(t);return typeof(n=r)!="number"||!Number.isFinite(n)||0>n||n>1?(ut.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,n,r=this.Mr,i=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;B(u)&&this.lo();var c=o?.minimumDurationMilliseconds;r.register({[Yt]:E({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:E({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.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===Hn&&(this.Ya=Nr,ut.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):ut.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Yt);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Yt);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return ut.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!B(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,r;if(!this.eo){if((e=$.__PosthogExtensions__)==null||!e.initSessionRecording)return ut.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[Pu]:!0});var i;if(this.Ja||(this.Ja=(i=$.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Nr||this.Ya===Hn?void 0:(this.Ya=Hn,ut.info("persisted remote config is stale, requesting fresh config before starting"),void new td(this._instance).load());this.Ya=Kl,(n=(r=this.Ja).setDocumentWasEverVisible)==null||n.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({[xu]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[Su]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?ku:Iu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},jf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new zl(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((r=>new RegExp(r))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((r=>new RegExp(r))),n}yo(){if(this.isBrowserSupported()){if(v&&C){var t=n=>{n=n||v?.event;try{this.bo(n)}catch(r){Rs.error("Failed to capture event",r)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||v?.event;try{this.bo(n,$s)}catch(r){Rs.error("Failed to capture copy/cut event",r)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else Rs.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;Ye(n)&&(this.instance.persistence&&this.instance.persistence.register({[Qs]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((r=>{var i=C?.querySelectorAll(r);i?.forEach((s=>{t===s&&n.push(r)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[Qs],r=this.co,i=this.instance.Qi()&&!this.fo;if($e(r)&&!Ye(n)&&!i)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,r=ys(t);Nu(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&wl(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===$s;if(r&&(function(d,h,p,f,g,m){var _;if(!v||ca(d)||p!=null&&p.url_allowlist&&!vl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&vl(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var b=Uu(d,f),I=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,P){var R=P?.element_allowlist;if(x(R))return!0;var M,T=function(J){if(R.some((q=>J.tagName.toLowerCase()===q)))return{v:!0}};for(var O of S)if(M=T(O))return M.v;return!1})(F,p)||!mo(F,p?.css_selector_allowlist)||mo(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:Lp))return!1;try{var A=v.getComputedStyle(d);if(A&&A.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var j=d.tagName.toLowerCase();switch(j){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return I?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(la.indexOf(j)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var s=Af(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=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===$s){var l,u=Bu(v==null||(l=v.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 Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(r,i,s){try{if(!(i in r))return ql;var o={next:r[i]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return Se(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];Se(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 ql}})(v.history,t,(r=>function(i,s,o){r.call(this,i,s,o),n.So(t)}))}}So(t){try{var e,n=v==null||(e=v.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(un,{navigation_type:t}),this._o=n}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.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[eo]),this.rageclicks=new zl(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;$f.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[eo]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ms(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,gi,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new Cl(this.instance,Wp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,fi,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(gi,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(fi,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&$t(u)&&!Ne(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(N(a,c))return!0;u=Du(u)}return!1})(ys(t),["fixed","sticky"],i);return{x:t.clientX+(s?0:r),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!ml(t.target)&&Ms(t)){var r=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&wl(ys(t),this.instance.config.rageclick)&&this.Vt(E({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!ml(t.target)&&Ms(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Pt(v.location.href):v.location.href,n=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[...En,...n||[]]:[],i=ur(e,r,dr);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!yt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Cl,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",E({$current_url:this.R.url},this.R.metrics.reduce(((n,r)=>E({},n,{["$web_vitals_"+r.name+"_event"]:E({},r),["$web_vitals_"+r.name+"_value"]:r.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},B(n?.name)||B(n?.value))jt.error("Invalid metric received",n);else{var i=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(i);if(!x(s)){var o=he(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=E({},n,i?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});x(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 jt.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,r,i,s,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(n=l.onLCP,r=l.onCLS,i=l.onFCP,s=l.onINP),n&&r&&i&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(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&&s(this.jo.bind(this),u),this.vo=!0}else jt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[io]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return B(n)?((e=this._instance.persistence)==null?void 0:e.props[so])||["CLS","FCP","INP","LCP"]:n}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)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Vl;return t>0&&6e4>=t?Vl:t}get isEnabled(){var t=re?.protocol;if(t!=="http:"&&t!=="https:")return jt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ye(this.Wo)?this.Wo:void 0;return Ye(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(jt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=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({[io]:n}),this._instance.persistence.register({[so]:r})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,n=this.zo,r=e?.postHogWebVitalsCallbacksByFlavor;r!=null&&r[n]||n==="web-vitals"&&x(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(i=>{i?jt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?Pt(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...En,...r||[]]:[];return ur(n,i,dr)}jt.error("Could not determine current URL")}}},Uf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(v&&this.isEnabled&&(n=$.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var r=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=$.__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=s(this.captureException.bind(this)))}catch(o){Un.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[to]),this.Jo=new Bh(E({},(function(n){var r,i,s,o;return n===void 0&&(n={}),{refillRate:(r=(i=n.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:n.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Un})),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=E({},e,t):(x(t)?this.Ko:t)&&(e=E({},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?(Un.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(r=>{if(r)return Un.error("failed to load script",r);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[to]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,r,i=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Un.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,n;this.Xo=[],this.tl=new tp([new cp,new _p,new dp,new up,new mp,new gp,new pp,new vp],(function(r){for(var i=arguments.length,s=new Array(i>1?i-1:0),o=1;i>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` -`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=hl.test(h)?h.replace(hl,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of s){var g=f(p,r);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var _=Array.from(m);return _.reverse(),_.slice(0,50).map((w=>{return E({},w,{filename:w.filename||(b=_,b[b.length-1]||{}).filename,function:w.function||wn});var b}))})(u)}})("web:javascript",sp,lp)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(no))!==null&&e!==void 0?e:[],this.el=ci(this.il()),this.rl=new wp(this.el)}onConfigChange(){this.el=ci(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,r;if(t.ok){var i=t.config;if("errorTracking"in i){var s=(e=(n=i.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[no]:this.Xo,[ro]:o})}}}get nl(){var t,e=!!this._instance.get_property(ro),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void tt.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>yp.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=n.sanitizedProperties,i=n.droppedKeys;i.length>0&&tt.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(E({[ai]:t,[li]:new Date().toISOString()},r))}catch(s){tt.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void tt.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 tt.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 tt.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&B(t.$exception_steps)?this.dl(t):t,r=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;r&&(n.$release_id=r);try{var i=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return tt.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void tt.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:E({},t,{$exception_steps:e})}catch(n){return tt.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[ai]:t,[li]:new Date().toISOString()})}sl(t){return te(t)?E({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,r)=>{var i=r.type,s=r.value;return W(i)&&i.length>0&&n.$exception_types.push(i),W(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var r=n.values.map((i=>{var s=gd[i.operator],o=e[i.key];if(!s||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&s(a,o)}));return n.type==="OR"?r.some(Boolean):r.every(Boolean)}))}catch(n){return tt.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,r;return(n=(r=e.stacktrace)==null?void 0:r.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,r,i,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.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)&&L(t)}}},Hf=E({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,r;if(this.Mr&&this.Mr.register({[ra]:!!e.productTours}),!Ns(this._instance))return!this.vl&&B((n=this.Mr)==null?void 0:n.props[Jn])||Lr.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&&Ns(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(r=>{r?Lr.error("Could not load product tours script",r):t()}))}fl(){var t;!this.vl&&(t=$.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=$.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!L(this.cl)||e){var n=this.Mr;if(n){var r=n.props[Jn];if(L(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(Ns(this._instance)){var s=i.statusCode;if(s!==200||!i.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?i.error||Lr.warn(o):Lr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,n&&n.register({[Jn]: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(Jn)}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)}}},Ui),Wf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,r,i,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:E({},jc(t,Rf),{properties:E({},t.properties,f?{$set:E({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:E({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(et.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(et.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,r,i,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=C?.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,p=(m,_,w)=>{if(m!=null&&m[_]){var b=m[_];m[_]=w(b),c.push((()=>{m[_]=b}))}},f=m=>{if(h.has(m))return m;var _=d.bl(m);return _&&h.add(_),_},g=m=>m.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(m=>function(_){var w=f(_);return w?m.call(this,w):_})),p(u,"insertBefore",(m=>function(_,w){var b=f(_);return b?m.call(this,b,w):_})),p(u,"replaceChild",(m=>function(_,w){var b=f(_);return b?m.call(this,b,w):w})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"prepend",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))}))})),[(i=l.Element)==null?void 0:i.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"after",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"replaceWith",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];var F=g(b);return b.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,w){var b=f(w);return b?m.call(this,_,b):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var r=t(n);return e&&n(),r}catch(i){throw n(),i}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(et.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},r=!1,i=o=>{e.errored=!o,e.loaded=!0,et.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),i(a)}})),!1).processEvent;s&&(e.processEvent=s),r=!0}catch(o){et.error(Jl+t.id,o),i(!1)}if(r&&e.loaded)try{n()}catch(o){et.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),r=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){et.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,n,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 et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((r=s.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,(d=>{if(d)return et.error(Jl+u,d)}))};for(var a of s.siteApps)o()}else et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},zf={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,r=this.Il();r?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(n=$.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(r=>{if(r)return Pf.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 L(t)?(L(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(L(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()}}},qf=E({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 n=L(e);this.Rl=n?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=[],n=0;nlocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)V.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)V.info(Yl);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())V.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var r=t.loadExternalDependency;if(!r)return void this.$l(sa);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 Nf(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(Yl),t([]);var n,r=this._instance.get_property(ao);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=>{n=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 s;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(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter((p=>(function(f){return!(!f.start_date||f.end_date)})(p)&&(vd(p)||(function(f){var g;return!((g=f.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[ao]:c,[di]:Date.now()});var h={isLoaded:!0};t(c,h),n?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(di);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,r={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};yd(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(n){V.error("Error in survey callback",n)}}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((n=>{var r;e=(r=n.find((i=>i.id===t)))!==null&&r!==void 0?r:null})),e}Ul(t){if(B(this._surveyManager))return{eligible:!1,reason:Or};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:Or};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:Or};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:Or})):new Promise((n=>{this.getSurveys((r=>{var i,s=(i=r.find((a=>a.id===t)))!==null&&i!==void 0?i:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var 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(vf.includes(i.type)){var s=C?.querySelector(e);if(s)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,s,n),V.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,s,n);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 n;if(B(this._surveyManager))V.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((n=r.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=E({},r,{appearance:E({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==_o.Popover&&e.initialResponses&&V.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(r);if(!s.eligible)return void V.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==_o.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()}}},Ui),Vf={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),go(this.instance.config)||!v||!C)return!1;t=t??v.location,n=n??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var r,i=Lf||yi(t.hash,"__posthog")||yi(t.hash,"state"),s=i?fl((()=>JSON.parse(atob(decodeURIComponent(i)))))||fl((()=>JSON.parse(decodeURIComponent(i)))):null;return s&&s.action==="ph_authorize"?((r=s).source="url",r&&Object.keys(r).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(Zl)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token||(this.loadToolbar(r),0))}catch{return!1}}Zl(t){var e=$.ph_load_toolbar||$.ph_load_editor;!B(e)&&Se(e)?e(t,this.instance):Xl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(Mu));if(!v||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=E({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(v.localStorage.setItem(Zl,JSON.stringify(E({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var i;this.Wl(1),(i=$.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return Xl.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(r)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(r)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},Gf=E({experiments:ye},Ui),Kf={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)||(Ye(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||go(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(sa);n(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 Ue.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,Ue.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else Ue.error("Cannot complete initialization: remote config is null")}eu(t,e){Ue.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():Ue.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":go(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?B(this.Jl)||!this.Jl.token?"missing_token":$!=null&&$.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var r=this;return X((function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,n):(Ue.warn(Ht),null)}))()}getMessages(t,e){var n=this;return X((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(Ue.warn(Ht),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Ht),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Ht),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Ht),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Ht),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Ht),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()}}},Jf={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ne("[logs]"),this.nu=E({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),s=0;r>s;s++)i[s]=arguments[s];i.some(oc)||n.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),v&&ie(v,"online",this.au)}uu(t,e,n,r){var i,s=(function(o,a){var l,u,c,d,h,p,f,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=x(_)?Math.max(m,2048):Math.max(m,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,n);return[new Xh(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,r),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var 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 n;(n=this.lu)==null||n.reset(),this.gu=e;var r=this.uu((()=>this.su),(i=>{this.su=i}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},sc);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!B(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){oc(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var r;n||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(sa)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:r=>r===pt.LogsQueue?t():void 0,setPersistedProperty(r,i){var s;r===pt.LogsQueue&&e((s=i)!==null&&s!==void 0?s:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Vu(this.Sa,3))e({kind:"fatal",error:Os(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,r=s=>{n||(n=!0,clearTimeout(i),e(s))},i=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:Os(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)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?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:Os(s.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Gu(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,sc,(e=>{this.su=e}))}xu(t,e,n,r,i){if(e.length!==0){var s=e.map((a=>a.record));i([]);var o=vu(s,mu(n,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 n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=n.windowId,i=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=r,B(i)||(e.sessionStartTimestamp=i),B(s)||(e.lastActivityTimestamp=s)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Pt($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Yf={metrics:class{constructor(t){this.rt=ne("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new Qh(this.hu(),(function(r){var i,s,o,a,l,u=r?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:r?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:r?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:r?.environment,resourceAttributes:u,beforeSend:r?.beforeSend,flushIntervalMs:(a=r?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(s),n(o))},s=setTimeout((()=>i({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(E({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)}}},Zf=E({},Ui,Df,jf,Uf,Hf,Wf,qf,zf,Vf,Gf,Kf,Jf,Yf);Te.__defaultExtensionClasses=E({},Zf);var Sd=(function(){Y.SDK_DIST_CHANNEL="npm";var t=nr[dn]=new Te;return(function(){function e(){e.done||(e.done=!0,bd=!1,Z(nr,(function(n){n._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const Xf=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Je=null,Io=null,xd="";const Co=new Map;function kd(t){return[...t.querySelectorAll(Xf)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function Qf(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Co.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function eg(){for(const[t,e]of Co)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Co.clear()}function Id(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function Ve(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;Je&&Je!==n&&Xe(Je,{restoreFocus:!1,force:!0}),Io=e.trigger||document.activeElement,Je=n,xd=document.body.style.overflow,Qf(n),document.body.style.overflow="hidden",n.classList.add("open"),n.setAttribute("aria-hidden","false");const r=n.querySelector(".modal-content");r&&(r.style.transform="scale(1) translateY(0)");const i=()=>{if(Je!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||kd(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(i),setTimeout(i,260),!0}function Xe(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!Id(n))return!1;n.classList.remove("open"),n.setAttribute("aria-hidden","true"),eg(),document.body.style.overflow=xd,Je=null;const r=Io;return Io=null,e.restoreFocus!==!1&&r?.isConnected&&r.focus({preventScroll:!0}),!0}function ac(t,e,n="Operation in progress"){const r=typeof t=="string"?document.getElementById(t):t;r&&(r.dataset.modalDismissible=e?"false":"true",r.setAttribute("aria-busy",String(!!e)),e?r.setAttribute("aria-label",n):r.removeAttribute("aria-label"))}function tg(t){if(!Id(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():Xe(t)}document.addEventListener("keydown",t=>{if(!Je)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),tg(Je);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=kd(Je);if(!e.length){t.preventDefault(),(Je.querySelector(".modal-content")||Je).focus();return}const n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())},!0);function ng(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(r=>{r.getAttribute("aria-label")||r.setAttribute("aria-label","Close dialog")})})}const Cd="CodeFile",Fd="GeneratedCode",rg={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function Ft(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Fo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function ig(t={},e=0){const n=Fo(t.artifactType||t.type||Cd),r=Fo(t.artifactName||t.name||t.fileName||`${Fd}-${e+1}`);return`${n||"artifact"}-${r||e+1}`}function Ad(t={},e=0){const n=Ft(t),r=n.artifactType||n.type||Cd,i=n.artifactName||n.name||Fd;let s=n.fileName||i;return s.endsWith(".dart")||(s+=".dart"),{id:Fo(n.id)||ig({...n,artifactType:r,artifactName:i,fileName:s},e),artifactType:r,artifactName:i,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:Pd(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:$d(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:Ft(n.metadata),codeType:n.codeType||rg[r]||"O"}}function Pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=Ft(e),r=n.name||n.package;return r?{name:r,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(Ft(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function $d(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=Ft(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Ao(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function hr(t,e={}){const n=[],r=typeof t=="string"?Ao(t):t,s=Ft(r||{});!r&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>Ad(d,h)),l=new Map(o.map((d,h)=>[Ft(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=$d(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:Pd(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:Ft(s.metadata)}}function xi(t){return hr(t).artifacts[0]||Ad()}function Et(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function xn(t){return JSON.stringify(t,null,2)}function sg(t){return xn({task:"architect",userRequest:String(t??"")})}function og(t){const e=Et(t);return e&&typeof e=="object"&&typeof e.task=="string"?xn(e):xn({task:"generate_bundle",bundleSpec:e})}function ag(t){return xn({task:"review_bundle",generatedBundle:Et(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function pa(t,e=null){const n={stage:t};return e!=null&&(n.bundle=Et(e)),n}function lg({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:r,userFeedback:i}){return xn({task:"regenerate_artifact",artifactId:r,bundleSpec:Et(t),artifactBundle:Et(e),bundleReview:Et(n),userFeedback:String(i)})}function Rd({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:r}){return xn({task:"regenerate_bundle",bundleSpec:Et(t),artifactBundle:Et(e),bundleReview:Et(n),userFeedback:String(r??"")})}const lc={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"},cg=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function ug(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function Td(t,e=0){if(!Le(t)||e>3)return null;if(ug(t))return t;for(const n of cg){const r=t[n];if(Le(r)){const i=Td(r,e+1);if(i)return i}}return null}function ki(t){return Array.isArray(t)?t.some(ki):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(ki):!1}function Po(t){return Array.isArray(t)?t.some(Po):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(Po):!1}function Md(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function dg(t,e){if(Le(t))for(const[n,r]of Object.entries(t)){if(!Le(r))continue;const i=Le(r.categories)?r.categories:{},s=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):r.matched===!0&&e.add(Md(n))}}function hg(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(r=>Le(r)?Object.entries(r):[]):Object.entries(t);for(const[r,i]of n){if(!ki(i))continue;const s=Md(r),o=i?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>ki(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function pg(t){return lc[t]?lc[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function cc(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 fg(t){const e=Td(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);dg(e.filterSummary,n),hg(e.filterResults,n);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,i=e.invocationResult||null,s=Po(e.filterSummary||e.filterResults);return!r&&!s&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...n]}}function gg(t,e){const n=fg(t);if(!n)return null;const r=[...new Set(n.matchedFilters.map(pg))],i=n.kind==="blocked",s=new Error(i?`Safety screening blocked this pipeline step for ${cc(r)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=i?"Request blocked for safety":"Safety check unavailable",s.userMessage=i?`The safety check detected ${cc(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.",s.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function mg(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function uc(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const r of mg(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&&n.push(i[1])}return n}function fa(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(r,i,s)=>s.toUpperCase());if(e==="A"){const r=n.replace(/(^|_)(\w)/g,(i,s,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function dc(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),r=>r.toString(16).padStart(2,"0")).join("")}async function vg(t,e=new Map){const n={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=fa(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await dc(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await dc(c)),n[o]=u,a.type==="F"){const d=uc(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(uc(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const _g=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),hc={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},yg=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),wg=["Struct","Record"],bg=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>Bs(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } +(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 s of i)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const s={};return i.integrity&&(s.integrity=i.integrity),i.referrerPolicy&&(s.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?s.credentials="include":i.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(i){if(i.ep)return;i.ep=!0;const s=n(i);fetch(i.href,s)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,Yo=we?.fetch,Ws=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ja=we?.AbortController,Fh=we?.CompressionStream,Fe=ke?.userAgent;function jc(){return!(!v||v.navigator.onLine===!1)}var Tn=typeof globalThis<"u"?globalThis:v;Tn&&typeof self>"u"&&(Tn.self=Tn),Tn&&typeof File>"u"&&(Tn.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Ya(t,e,n,r,i,s,o){try{var a=t[s](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var s=t.apply(e,n);function o(l){Ya(s,r,i,o,a,"next",l)}function a(l){Ya(s,r,i,o,a,"throw",l)}o(void 0)}))}}function E(){return E=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var r in n)({}).hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},E.apply(null,arguments)}function Uc(t,e){if(t==null)return{};var n={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;n[r]=t[r]}return n}var Za=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Xa(t){return typeof t=="string"||t}function Qa(t){return typeof t=="string"?t:void 0}var Nn,Ph=["$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"],pt=(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})({}),el=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),$h=["$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"],Rh=["token"],Hc="NativeGzipValidationError",zs=t=>t.length>=2&&t[0]===31&&t[1]===139,tl=(t,e)=>t===el.GZipJS||e===el.GZipJS||e==="gzip",nl=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",Ir=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Hc,e},Th=(function(){var t=X((function*(e,n){18>e.size&&Ir("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());zs(r)&&r[2]===8||Ir("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Nn)return Nn;Nn=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Nn[c]=d>>>0}return Nn})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Ir("invalid-crc");var s=n.length>>>0;i.getUint32(4,!0)!==s&&Ir("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function qs(){return qs=X((function*(t,e,n){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),s=i.writable.getWriter(),o=s.write(r).then((()=>s.close())).catch((function(){var u=X((function*(c){try{yield s.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 Th(l,r),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),qs.apply(this,arguments)}var Nh=["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"],rl=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var n=t.toLowerCase();return Nh.concat(e).some((r=>{var i=r.toLowerCase();return n.indexOf(i)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Oi=function(t){return t.trim()},Vs=function(t){return t.replace(/^\$/,"")};function Wc(t){var e,n=[];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(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(i))return"[Circular]";n.push(i)}return i}})))!==null&&e!==void 0?e:"null"}var zc=Object.prototype,qc=zc.hasOwnProperty,Bi=zc.toString,L=Array.isArray||function(t){return Bi.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),yt=t=>{if(te(t)){for(var e in t)if(qc.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Bi.call(t)=="[object String]",Gs=t=>W(t)&&t.trim().length===0,$e=t=>t===null,B=t=>x(t)||$e(t),he=t=>Bi.call(t)=="[object Number]"&&t==t,dt=t=>he(t)&&t>0,Ye=t=>Bi.call(t)==="[object Boolean]",Mh=t=>t instanceof FormData,Lh=t=>M($h,t),Oh=t=>M(Rh,t);function Vc(t){return t===null||typeof t!="object"}function ei(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Zo(t){return typeof Event<"u"&&Gc(t,Event)}function Gc(t,e){try{return t instanceof e}catch{return!1}}var Bh=[!0,"true",1,"1","yes"],cs=t=>M(Bh,t),Dh=[!1,"false",0,"0","no"];function ot(t,e,n,r,i){return e>n&&(r.warn("min cannot be greater than max."),e=n),he(t)?t>n?(r.warn(" cannot be greater than max: "+n+". Using max value instead."),n):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: "+n+", fallback: "+i),ot(i||n,e,n,r))}class jh{constructor(e){this.tt={},this.et=e.et,this.it=ot(e.bucketSize,0,100,e.rt),this.nt=ot(e.refillRate,0,this.it,e.rt),this.st=ot(e.refillInterval,0,864e5,e.rt)}ot(e,n){var r=Math.floor((n-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 n,r=Date.now(),i=String(e),s=this.tt[i];return s?this.ot(s,r):this.tt[i]=s={tokens:this.it,lastAccess:r},s.tokens===0||(s.tokens--,s.tokens===0&&((n=this.et)==null||n.call(this,e)),s.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",ti="iOS",wt="Android",_n="Tablet",Kc=wt+" "+_n,Jc="iPad",Yc="Apple",Zc=Yc+" Watch",Zn="Safari",yn="BlackBerry",Xc="Samsung",Qc=Xc+"Browser",eu=Xc+" Internet",Yt="Chrome",Uh=Yt+" OS",tu=Yt+" "+ti,Xo="Internet Explorer",nu=Xo+" "+Oe,Qo="Opera",Hh=Qo+" Mini",ea="Edge",ru="Microsoft "+ea,gn="Firefox",iu=gn+" "+ti,or="Nintendo",ar="PlayStation",mn="Xbox",su=wt+" "+Oe,ou=Oe+" "+Zn,zn="Windows",Ks=zn+" Phone",il="Nokia",Js="Ouya",au="Generic",Wh=au+" "+Oe.toLowerCase(),lu=au+" "+_n.toLowerCase(),Ys="Konqueror",cu="Oculus Browser",ni="Vivaldi",uu="Yandex",ri="Whale",Zs="DuckDuckGo",du="Pale Moon",ii="Waterfox",Xn="Brave",hu="Google Search App",le="(\\d+(\\.\\d+)?)",us=new RegExp("Version/"+le),zh=new RegExp(mn,"i"),qh=new RegExp(ar+" \\w+","i"),Vh=new RegExp(or+" \\w+","i"),ta=new RegExp(yn+"|PlayBook|BB10","i"),Gh={"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"},pu=function(t,e,n,r){e=e||"";var i=(function(s){return s!=null&&s.brave?Xn:null})(n);return i||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?hu:M(t," OPR/")&&M(t,"Mini")?Hh:M(t," OPR/")?Qo:ta.test(t)?yn:M(t,"IE"+Oe)||M(t,"WPDesktop")?nu:M(t,"OculusBrowser")?cu:M(t,Qc)?eu:M(t,ea)||M(t,"Edg/")?ru:M(t,ni+"/")?ni:M(t,"YaBrowser/")?uu:M(t,ri+"/")?ri:M(t,Zs+"/")||M(t,"Ddg/")?Zs:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?tu:M(t,"CrMo")||M(t,Yt)?Yt:M(t,wt)&&M(t,Zn)?su:M(t,"FxiOS")?iu:M(t.toLowerCase(),Ys.toLowerCase())?Ys:M(t,Xn+"/")?Xn:((s,o)=>o&&M(o,Yc)||(function(a){return M(a,Zn)&&!M(a,Yt)&&!M(a,wt)})(s))(t,e)?M(t,Oe)?ou:Zn:M(t,"PaleMoon/")?du:M(t,ii+"/")?ii:M(t,gn)?gn:M(t,"MSIE")||M(t,"Trident/")?Xo:M(t,"Gecko")?gn:"")},Kh={[nu]:[new RegExp("rv:"+le)],[ru]:[new RegExp(ea+"?\\/"+le)],[Yt]:[new RegExp("("+Yt+"|CrMo)\\/"+le)],[tu]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Zn]:[us],[ou]:[us],[Qo]:[new RegExp("(Opera|OPR)\\/"+le)],[gn]:[new RegExp(gn+"\\/"+le)],[iu]:[new RegExp("FxiOS\\/"+le)],[Ys]:[new RegExp("Konqueror[:/]?"+le,"i")],[yn]:[new RegExp(yn+" "+le),us],[su]:[new RegExp("android\\s"+le,"i")],[eu]:[new RegExp(Qc+"\\/"+le)],[cu]:[new RegExp("OculusBrowser\\/"+le)],[ni]:[new RegExp(ni+"\\/"+le)],[uu]:[new RegExp("YaBrowser\\/"+le)],[ri]:[new RegExp(ri+"\\/"+le)],[Xn]:[new RegExp(Xn+"\\/"+le)],[Zs]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[du]:[new RegExp("PaleMoon\\/"+le)],[ii]:[new RegExp(ii+"\\/"+le)],[hu]:[new RegExp("GSA\\/"+le)],[Xo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Jh=function(t,e,n,r){var i=pu(t,e,n,r),s=Kh[i];if(x(s))return null;for(var o=0;s.length>o;o++){var a=t.match(s[o]);if(a)return parseFloat(a[a.length-2])}return null},sl=[[new RegExp(mn+"; "+mn+" (.*?)[);]","i"),t=>[mn,t&&t[1]||""]],[new RegExp(or,"i"),[or,""]],[new RegExp(ar,"i"),[ar,""]],[ta,[yn,""]],[new RegExp(zn,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Ks,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[zn+" "+Oe,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var r=Gh[n[1]]||"";return/arm/i.test(e)&&(r="RT"),[zn,r]}return[zn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[ti,[t[3],t[4],t[5]||"0"].join(".")]:[ti,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+wt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+wt+")","i"),t=>t&&t[2]?[wt,[t[2],t[3],t[4]||"0"].join(".")]:[wt,""]],[/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/,[Uh,""]],[/Linux|debian/i,["Linux",""]]],ol=function(t){return Vh.test(t)?or:qh.test(t)?ar:zh.test(t)?mn:new RegExp(Js,"i").test(t)?Js:new RegExp("("+Ks+"|WPDesktop)","i").test(t)?Ks:/iPad/.test(t)?Jc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Zc:ta.test(t)?yn:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(il,"i").test(t)?il:/(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(Oe).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)?wt:Kc:new RegExp("(pda|"+Oe+")","i").test(t)?Wh:new RegExp(_n,"i").test(t)&&!new RegExp(_n+" pc","i").test(t)?lu:""},Yh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function al(t,e){return typeof(n=t)=="string"&&Yh.test(n)?t:e();var n}function Pt(t){return t&&t.split("#")[0]}function na(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function ll(t,e,n){return fu.apply(this,arguments)}function fu(){return(fu=X((function*(t,e,n){var r;try{return yield Promise.race([t,new Promise(((i,s)=>{r=na((()=>{try{n?.(),i()}catch(o){s(o)}}),e)}))])}finally{clearTimeout(r)}}))).apply(this,arguments)}var Zh=t=>t instanceof Error,gu={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}},Xh=gu.info;function mu(t){if(Ye(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(L(t))return{arrayValue:{values:t.map((e=>mu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function si(t){var e=[];for(var n in t){var r=t[n];$e(r)||x(r)||e.push({key:n,value:mu(r)})}return e}function Qh(t,e){var n=gu[t.level||"info"]||Xh,r=n.text,i=n.number,s=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),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=E({},o,t.attributes||{}),l={timeUnixNano:s,observedTimeUnixNano:s,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:si(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function vu(t,e,n){return E({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function _u(t,e,n,r){return{resourceLogs:[{resource:{attributes:si(e)},scopeLogs:[{scope:{name:n,version:r},logRecords:t}]}]}}let ep=class{constructor(t,e,n,r,i,s,o){var a;s===void 0&&(s=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=r,this.ht=i,this.dt=s,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Qh(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],r=t;for(var i of n)try{var s=i(r);if(!s)return this.rt.info("Log was rejected in beforeSend function"),null;r=s}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 n=(e=t._instance.getPersistedProperty(pt.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var r=n.length,i=0;n.length>0&&r>i;){var s,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=_u(l.map((d=>d.record)),t.Lt(),(s=t.vt)!==null&&s!==void 0?s:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(pt.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var n,r=Math.max(0,t-e.ft),i=(n=e._instance.getPersistedProperty(pt.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(pt.LogsQueue,i.slice(r)),yield e.dt()}))()}Lt(){return vu(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(pt.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(pt.LogsQueue,n),this.kt>n.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=na((()=>{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(pt.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X((function*(){e.Et();var n=e.flush().catch((()=>{}));t!==void 0?yield ll(n,t):yield n}))()}flushWithTimeout(t){var e=this;return X((function*(){var n=e.flush();yield ll(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var ds=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function cl(t){return String(t)+"000000"}function ul(t,e,n,r){var i="";return r&&(i=Object.keys(r).sort().map((s=>JSON.stringify(s)+":"+JSON.stringify(r[s]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+i}let tp=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var i=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return i.apply(this,arguments)}})(),r=n().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 n,r;try{n=e.attributes?E({},e.attributes):void 0,r=ul(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(r,i)}var s=this.Ut.get(e.name);s===void 0?this.Ut.set(e.name,e.type):s===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+s+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(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 n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(ds.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,s){for(var o=0;s.length>o;o++)if(s[o]>=i)return o;return s.length})(e,ds)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],r=t;for(var i of n)try{var s=i(r);if(!s)return this.rt.info("Metric was rejected in beforeSend function"),null;r=s}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=na((()=>{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 n=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(n===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),n=(function(s,o,a){return E({},s.resourceAttributes,{"service.name":s.serviceName||"unknown_service"},s.environment&&{"deployment.environment":s.environment},s.serviceVersion&&{"service.version":s.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:si(n)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,n,r,i}Xt(t){var e=cl(Date.now()),n=new Map;for(var r of t.values()){var i,s=ul(r.type,r.name,r.unit,void 0),o=n.get(s);o||(o=E({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:[]},n.set(s,o));var a=si((i=r.attributes)!==null&&i!==void 0?i:{}),l=cl(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:ds})}return Array.from(n.values())}Yt(t){var e,n;for(var r of t){var i=r[0],s=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,s.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=s.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(s.hist)if(o.hist){o.hist.count+=s.hist.count,o.hist.sum+=s.hist.sum,o.hist.min=Math.min(o.hist.min,s.hist.min),o.hist.max=Math.max(o.hist.max,s.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=s.hist.bucketCounts[a]}else o.hist=s.hist}else this.Qt()&&this.Bt.set(i,s)}}};var Cr,dl,hs;function np(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return hs&&n.length===dl||(dl=n.length,hs=n.reduce(((r,i)=>{Cr||(Cr={});var s=Cr[i];if(s)r[s[0]]=s[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[i];if(u&&c){r[u]=c,Cr[i]=[u,c];break}}return r}),{})),hs}}class rp{constructor(e,n,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=n,this.modifiers=r}buildFromUnknown(e,n){n===void 0&&(n={});var r=n&&n.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,n,0).apply(e),s=this.buildParsingContext(n),o=this.parseStacktrace(i,s);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var n=this;return X((function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&L(r.stacktrace.frames)&&(r.stacktrace.frames=yield n.applyModifiers(r.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),E({},e,{cause:r,stack:i})}applyChunkIds(e,n){return e.map((r=>(r.filename&&n&&(r.chunk_id=n[r.filename]),r)))}applyCoercers(e,n){for(var r of this.coercers)if(r.match(e))return r.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return X((function*(){var r=e;for(var i of n.modifiers)r=yield i(r);return r}))()}convertToExceptionList(e,n){var r,i,s,o={type:e.type,value:e.value,mechanism:{type:(r=n.type)!==null&&r!==void 0?r:"generic",handled:(i=n.handled)===null||i===void 0||i,synthetic:(s=e.synthetic)!==null&&s!==void 0&&s}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,E({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:np(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,r){r===void 0&&(r=0);var i=(s,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(s,a)}};return E({},n,{syntheticException:r==0?n.syntheticException:void 0,mechanism:e,apply:s=>i(s,r),next:s=>i(s,r+1)})}}var wn="?";function Xs(t,e,n,r,i){var s={platform:t,filename:e,function:n===""?wn:n,in_app:!0};return x(r)||(s.lineno=r),x(i)||(s.colno=i),s}var yu=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return n||r?[t.indexOf("@")!==-1?t.split("@")[0]:wn,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},ip=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,sp=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,op=/\((\S*)(?::(\d+))(?::(\d+))\)/,ap=(t,e)=>{var n=ip.exec(t);if(n)return Xs(e,n[1],wn,+n[2],+n[3]);var r=sp.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=op.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var s=yu(r[1]||wn,r[2]);return Xs(e,s[1],s[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},lp=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,cp=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,up=(t,e)=>{var n=lp.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var r=cp.exec(n[3]);r&&(n[1]=n[1]||"eval",n[3]=r[1],n[4]=r[2],n[5]="")}var i=n[3],s=n[1]||wn,o=yu(s,i);return Xs(e,i=o[1],s=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},hl=/\(error: (.*)\)/;class dp{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var r=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return ei(e,"DOMException")}isDOMError(e){return ei(e,"DOMError")}}class hp{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Gc(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var 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 pp{constructor(){}match(e){return!!ei(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var r;if(e.error!=null)return n.apply(e.error);var i=n.apply(e.message);return E({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var n=e;if(W(n.filename)&&n.filename.length>0){var r,i,s=(r=n.lineno)!==null&&r!==void 0?r:0,o=(i=n.colno)!==null&&i!==void 0?i:0;return`Error + at `+n.filename+":"+s+":"+o}}}var fp=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class gp{match(e){return typeof e=="string"}coerce(e,n){var r,i=this.getInfos(e),s=i[0],o=i[1];return{type:s??"Error",value:o??e,stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var n="Error",r=e,i=e.match(fp);return i&&(n=i[1],r=i[2]),[n,r]}}var mp=["fatal","error","warning","log","info","debug"];function wu(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var r=n.length;r>0;r--){var i=n.slice(0,r).join(", ");if(e>=i.length)return r===n.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class vp{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var r,i,s=this.getErrorPropertyFromObject(e);return s?n.apply(s):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=n.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Zo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+wu(e)}isSeverityLevel(e){return W(e)&&!Gs(e)&&mp.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var r=e[n];if(Zh(r))return r}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class _p{match(e){return Zo(e)}coerce(e,n){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+wu(e),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class yp{match(e){return Vc(e)}coerce(e,n){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class wp{match(e){return ei(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Zo(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var r,i=this.getUnhandledRejectionReason(e);return Vc(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=n.syntheticException)==null?void 0:r.stack,synthetic:!0}:n.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 oi="$message",ai="$timestamp",bp=new Set([oi,ai]),ps={enabled:!0,max_bytes:32768};function li(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ps.enabled,max_bytes:Sp(t.max_bytes,ps.max_bytes)}:E({},ps)}class Ep{constructor(e){this.Ke=[],this.Je=0,this.Ne=li(e)}setConfig(e){this.Ne=li(e),this.Xe()}add(e){var n=(function(i){var s;try{s=Wc(i)}catch{return}try{var o=JSON.parse(s);if(!te(o))return;var a=o,l=a[oi],u=a[ai];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:s}}catch{return}})(e);if(n){var r=(function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var s=encodeURIComponent(i),o=0,a=0;s.length>a;a++)s[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);r>this.Ne.max_bytes||(this.Ke.push({step:n.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 Sp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var bu=function(t,e){var n=(e===void 0?{}:e).debugEnabled,r={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||n)&&!x(v.console)&&v.console){for(var s=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];s(t,...a)}},debug(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("debug",...s)},info(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("log",...s)},warn(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("warn",...s)},error(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];r.k("error",...s)},critical(){for(var i=arguments.length,s=new Array(i),o=0;i>o;o++)s[o]=arguments[o];console.error(t,...s)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,s)=>bu(t+" "+i,s)};return r},k=bu("[PostHog.js]"),ne=k.createLogger,xp=ne("[ExternalScriptsLoader]"),fs=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return xp.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var r=C?.querySelectorAll("script");if(r){for(var i,s=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;r.length>o;o++)if(i=s())return i.v}var a=()=>{if(!C)return n("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{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 s=3e5;i=i+"&t="+Math.floor(Date.now()/s)*s}r=t.requestRouter.endpointFor("assets",i)}fs(t,r,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");fs(t,o,n)}},$.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var r=t.requestRouter.endpointFor("api",e);fs(t,r,n)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var Eu="$people_distinct_id",lr="$device_id",gs="$device_model",qn="__alias",Vn="__timers",Qs="$autocapture_disabled_server_side",eo="$heatmaps_enabled_server_side",to="$exception_capture_enabled_server_side",no="$error_tracking_suppression_rules",ro="$error_tracking_capture_extension_exceptions",io="$web_vitals_enabled_server_side",ra="$dead_clicks_enabled_server_side",ia="$product_tours_enabled_server_side",so="$web_vitals_allowed_metrics",Jt="$session_recording_remote_config",Su="$replay_sample_rate",xu="$replay_override_sampling",ku="$replay_override_linked_flag",Iu="$replay_override_url_trigger",Cu="$replay_override_event_trigger",hn="$sesid",sa="$session_is_sampled",Wt="$enabled_feature_flags",Gn="$active_feature_flags",Ur="$early_access_features",oo="$feature_flag_details",Kn="$feature_flag_payloads",Hr="$feature_flag_request_id",ci="$minimal_flag_called_events",rt="$override_feature_flags",zt="$override_feature_flag_payloads",ht="$stored_person_properties",qt="$stored_group_properties",ao="$surveys",ui="$surveys_loaded_at",lo="$surveys_activated",Wr="$surveys_activated_session",zr="$surveys_activated_timestamps",Jn="ph_product_tours",Gt="$flag_call_reported",Yn="$flag_call_reported_session_id",qr="$feature_flag_errors",Qn="$feature_flag_evaluated_at",He="$user_state",co="$client_session_props",uo="$capture_rate_limit",ho="$initial_campaign_params",po="$initial_referrer_info",di="$initial_person_info",hi="$epp",Ar="$posthog_cookieless",Au="$cookieless_mode",Fu="$sdk_debug_extensions_init_method",Pu="$sdk_debug_extensions_init_time_ms",$u="$sdk_debug_recording_script_not_loaded",oa="PostHog loadExternalDependency extension not found.",Vt="on_reject",gt="always",rn="anonymous",Ot="identified",fo="identified_only",pi="visibilitychange",fi="beforeunload",cn="$pageview",ms="$pageleave",vs="$identify",pl="$groupidentify";function Fr(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!B(t))if(L(t))t.forEach(e);else if(Mh(t))t.forEach(((r,i)=>e(r,i)));else for(var n in t)qc.call(t,n)&&e(t[n],n)}var ee=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var i of n)for(var s in i)i[s]!==void 0&&(t[s]=i[s]);return t};function Vr(t){for(var e=Object.keys(t),n=e.length,r=new Array(n);n--;)r[n]=[e[n],t[e[n]]];return r}var fl=function(t){try{return t()}catch{return}},kp=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),r=0;e>r;r++)n[r]=arguments[r];return t.apply(this,n)}catch(i){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},aa=function(t){var e={};return Z(t,(function(n,r){(W(n)&&n.length>0||he(n))&&(e[r]=n)})),e},Ip=["herokuapp.com","vercel.app","netlify.app"];function Cp(t){var e=t?.hostname;if(!W(e))return!1;var n=e.split(".").slice(-2).join(".");for(var r of Ip)if(n===r)return!1;return!0}function ie(t,e,n,r){var i=r??{},s=i.capture,o=i.passive;t?.addEventListener(e,n,{capture:s!==void 0&&s,passive:o===void 0||o})}function go(t){return t.name==="ph_toolbar_internal"}var Ru=t=>{if(C){try{for(var e=t+"=",n=C.cookie.split(";").filter((s=>s.length)),r=0;n.length>r;r++){for(var i=n[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 he(t)&&isFinite(t)&&Math.floor(t)===t});class gi{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,r,i){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>n||0>r||0>i||e>0xffffffffffff||n>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var s=new Uint8Array(16);return s[0]=e/Math.pow(2,40),s[1]=e/Math.pow(2,32),s[2]=e/Math.pow(2,24),s[3]=e/Math.pow(2,16),s[4]=e/256,s[5]=e,s[6]=112|n>>>8,s[7]=n,s[8]=128|r>>>24,s[9]=r>>>16,s[10]=r>>>8,s[11]=r,s[12]=i>>>24,s[13]=i>>>16,s[14]=i>>>8,s[15]=i,new gi(s)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new gi(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var r=this.bytes[n]-e.bytes[n];if(r!==0)return Math.sign(r)}return 0}}class Ap{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var n=this.generateOrAbort();if(x(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return gi.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 Fp}}var gl,Tu=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};v&&!x(v.crypto)&&crypto.getRandomValues&&(Tu=t=>crypto.getRandomValues(t));class Fp{nextUint32(){return this.R.length>this.O||(Tu(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var ft=()=>Pp().toString(),Pp=()=>(gl||(gl=new Ap)).generate(),Mn="",$p=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,mt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:Ru,H(t){var e;try{e=JSON.parse(mt.P(t))||{}}catch{}return e},F(t,e,n,r,i){if(!C)return!1;try{var s="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),Mn)return Mn;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),w="dmn_chk_"+ft();!Mn&&_--;){var b=m.slice(_).join("."),I=w+"=1;domain=."+b+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(w)&&(g.cookie=I+";max-age=0",Mn=b)}return Mn})(c);if(!h){var p=(f=>{var g=f.match($p);return g?g[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,r);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),s="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+s+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{mt.F(t,"",-1,e)}catch{return}}},_s=null,Q={N(){if(!$e(_s))return _s;var t=!0;if(x(v))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||k.error("localStorage unsupported; falling back to cookie store"),_s=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.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 v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){Q.j(n)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},Rp=[lr,"distinct_id",hn,sa,hi,di,He],Pr={},Tp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Pr[t]||null,H:t=>Pr[t]||null,F:(t,e)=>(Pr[t]=e,!0),q(t){delete Pr[t]}},Bt=null,ce={N(){if(!$e(Bt))return Bt;if(Bt=!0,x(v))Bt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Bt=!1),ce.q(t)}catch{Bt=!1}return Bt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.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 v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){ce.j(n)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class Np{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===gt||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Vt}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,n=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return cs(e)?1:M(Dh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?Q:mt;if(!this.ni||this.ni!==n){this.ni=n;var r=e==="localStorage"?mt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(cs(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>cs(e)))}}function Nu(t,e){var n,r=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!Se(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(s){return k.error("Error in get_current_url, falling back to window.location.href",s),e}}var Mu="__POSTHOG_TOOLBAR__",Mp=1,Lp=3,Op=11;function ml(t){return t instanceof Element&&(t.id===Mu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function $t(t){return!!t&&t.nodeType===Mp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Lu(t){return!!t&&t.nodeType===Lp}function Ou(t){return!!t&&t.nodeType===Op&&$t(t.host)}var Bu=1e3;function la(t){return t?Oi(t).split(/\s+/):[]}function vl(t,e){var n=(function(r){var i,s=v==null||(i=v.location)==null?void 0:i.href;return x(s)?void 0:Nu(r,s)})(e);return!!(n&&t&&t.some((r=>n.match(r))))}function mi(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 la(e)}function Du(t){return B(t)?null:Oi(t).split(/(\s+)/).filter((e=>er(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function cr(t){var e="";return vo(t)&&!Wu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var r;Lu(n)&&n.textContent&&(e+=(r=Du(n.textContent))!==null&&r!==void 0?r:"")})),Oi(e)}function ys(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var ca=["a","button","form","input","select","textarea","label"];function mo(t,e){if(x(e))return!0;var n,r=function(s){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(s,o))))return{v:!0}};for(var i of t)if(n=r(i))return n.v;return!1}function ju(t){var e=t.parentNode;return!(!e||!$t(e))&&e}var Bp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Uu=["next","previous","prev",">","<"],Dp=[...Uu,"+","-","−","–"],_l=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,yl=[".ph-no-rageclick",".ph-no-capture"],jp=["","text","search","email","password","url","tel","number"];function wl(t,e){if(!v||ua(t))return!1;var n,r,i,s,o;if(Ye(e)?(n=!!e&&yl,r=void 0,i=!1):(n=(s=e?.css_selector_ignorelist)!==null&&s!==void 0?s:yl,r=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||i&&(function(l){return!(!l||!$t(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(jp,(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=Hu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Uu;else{if(!L(l))return!1;if(l.length>10)return k.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,p=d.ariaLabel;return c.some((f=>_l(h,f)||_l(p,f)))}))})(r,a.map((l=>{var u;return{safeText:cr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!mo(a,n)}var ua=t=>!t||Me(t,"html")||!$t(t),Hu=(t,e)=>{if(!v||ua(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,r=[t],i=t;i.parentNode&&!Me(i,"body");)if(Ou(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var s=ju(i);if(!s)break;if(e||ca.indexOf(s.tagName.toLowerCase())>-1)n=!0;else try{var o=v.getComputedStyle(s);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}r.push(s),i=s}return{parentIsUsefulElement:n,targetElementList:r}};function vo(t){for(var e=new Set,n=0,r=t;r.parentNode&&!Me(r,"body");r=r.parentNode){if(n++>=Bu||e.has(r))return!1;e.add(r);var i=mi(r);if(M(i,"ph-sensitive")||M(i,"ph-no-capture"))return!1}if(M(mi(t),"ph-include"))return!0;var s=t.type||"";if(W(s))switch(s.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!W(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 Wu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var bl=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}))$"),El=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Up=[16,15,14,13],Hp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),Sl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),xl=/[0-9A-Za-z_]/;function Wp(t){for(var e=0,n=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;n&&(i*=2)>9&&(i-=9),e+=i,n=!n}return e%10==0}function er(t,e){if(e===void 0&&(e=!0),B(t))return!1;if(W(t)){t=Oi(t);var n=e?bl.test((t||"").replace(/[- ]/g,"")):(function(i){var s;for(El.lastIndex=0;s=El.exec(i);){var o=s[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Up){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(bl.test(d)&&Wp(d))return!0}}}return!1})(t);if(n)return!1;var r=e?Hp.test(t):(function(i){var s;for(Sl.lastIndex=0;s=Sl.exec(i);){var o=s[1],a=s[3];if(!(o&&a&&xl.test(o)&&xl.test(a)))return!0}return!1})(t);if(r)return!1}return!0}function kl(t){var e=cr(t);return er(e=(e+" "+zu(t)).trim())?e:""}function zu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var r;if(n&&((r=n.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=cr(n);e=(e+" "+i).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+zu(n)).trim())}catch(s){k.error("[AutoCapture]",s)}})),e}function Il(t){return t.replace(/"|\\"/g,'\\"')}function zp(t){var e=t.attr__class;if(e)return L(e)?e:la(e)}var $r=ne("[Dead Clicks]"),qp=()=>!0,Vp=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(ra)),r=t.instance.config.capture_dead_clicks;return Ye(r)?r:!!te(r)||n};class Cl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,r){this.instance=e,this.isEnabled=n,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[ra]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,r;(n=$.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?$r.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=te(this.instance.config.capture_dead_clicks)?E({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(C),$r.info("starting...")}}else $r.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,$r.info("stopping..."))}}var ws=ne("[SegmentIntegration]"),qu="posthog-js";function Vu(t,e){var n=e===void 0?{}:e,r=n.organization,i=n.projectId,s=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],b=w.map((A=>E({},A,{stacktrace:A.stacktrace?E({},A.stacktrace,{type:"raw",frames:(A.stacktrace.frames||[]).map((F=>E({},F,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=w[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&i&&(I.$sentry_url=(s||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Gp{constructor(e,n,r,i,s,o){this.name=qu,this.setupOnce=function(a){a(Vu(e,{organization:n,projectId:r,prefix:i,severityAllowList:s,sendExceptionsToPostHog:o==null||o}))}}}class Al{constructor(e){this.li=(n,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,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,n){var r,i=this.vi(e,n);return this.ui={pathname:(r=v?.location.pathname)!==null&&r!==void 0?r:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var r=this.ui;if(!r)return{$pageview_id:n};var i={$pageview_id:n,$prev_pageview_id:r.pageViewId},s=this._instance.scrollManager.getContext();if(s&&!this._instance.config.disable_scroll_properties){var o=s.maxScrollHeight,a=s.lastScrollY,l=s.maxScrollY,u=s.maxContentHeight,c=s.lastContentY,d=s.maxContentY;if(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(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?ot(a/o,0,1,k):1,p=o>1?ot(l/o,0,1,k):1,f=u>1?ot(c/u,0,1,k):1,g=u>1?ot(d/u,0,1,k):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:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return r.pathname&&(i.$prev_pageview_pathname=r.pathname),r.timestamp&&(i.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),i}}var bs=["flags","surveys"],Kp={[Eu]:{exposure:"hidden"},[qn]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Vn]:{exposure:"hidden"},[Qs]:{exposure:"event"},[eo]:{exposure:"hidden"},[to]:{exposure:"event"},[no]:{exposure:"hidden"},[ro]:{exposure:"event"},[io]:{exposure:"event"},[ra]:{exposure:"event"},[ia]:{exposure:"hidden"},[so]:{exposure:"event"},[Jt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[hn]:{exposure:"hidden"},[sa]:{exposure:"event"},[Su]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(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"},[Wt]:{exposure:"hidden",storageGroup:"flags"},[Gn]:{exposure:"hidden",storageGroup:"flags"},[Ur]:{exposure:"hidden"},[oo]:{exposure:"hidden",storageGroup:"flags"},[Kn]:{exposure:"hidden",storageGroup:"flags"},[Hr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ci]:{exposure:"hidden",storageGroup:"flags"},[rt]:{exposure:"hidden"},[zt]:{exposure:"hidden"},[ht]:{exposure:"hidden"},[qt]:{exposure:"hidden"},[ao]:{exposure:"hidden",storageGroup:"surveys"},[ui]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[lo]:{exposure:"event"},[Wr]:{exposure:"hidden"},[zr]:{exposure:"hidden"},[Jn]:{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"},[Gt]:{exposure:"hidden"},[Yn]:{exposure:"hidden"},[qr]:{exposure:"hidden"},[Qn]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[co]:{exposure:"hidden"},[uo]:{exposure:"hidden"},[ho]:{exposure:"hidden"},[po]:{exposure:"hidden"},[di]:{exposure:"hidden"},[hi]:{exposure:"hidden"},[xu]:{exposure:"event"},[ku]:{exposure:"event"},[Iu]:{exposure:"event"},[Cu]:{exposure:"event"},[Fu]:{exposure:"event"},[Pu]:{exposure:"event"},[$u]:{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"}},Jp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Dt=t=>{var e=Kp[t];if(e)return e;for(var n of Jp){var r=n[1];if(t.indexOf(n[0])===0)return r}},pn=(t,e)=>{try{return JSON.stringify(t,((n,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Wc(t)}},vi=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},bn=function(t,e){for(var n,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var s=r[i].split("=");if(s[0]===e){n=s;break}}if(!L(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},ur=function(t,e,n){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],s=(r[0]||"").split("?"),o=s[1],a=s[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},_i=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Gu=(t,e)=>t>=e&&jc(),Ku=(t,e,n,r)=>{if(t===0){if(jc()){var i=e+1;return i===n&&r(),i}return e}return 0},Rr="https?://(.*)",En=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Yp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...En],dr="",Zp=["li_fat_id"];function Ju(t,e,n){if(!C)return{};var r,i=e?[...En,...n||[]]:[],s=Yu(ur(C.URL,i,dr),t),o=(r={},Z(Zp,(function(a){var l=Ru(a);r[a]=l||null})),r);return ee(o,s)}function Yu(t,e){var n=Yp.concat(e||[]),r={};return Z(n,(function(i){var s=bn(t,i);r[i]=s||null})),r}function Zu(t){var e=(function(s){return s?s.search(Rr+"google.([^/?]*)")===0?"google":s.search(Rr+"bing.com")===0?"bing":s.search(Rr+"yahoo.com")===0?"yahoo":s.search(Rr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var i=C?bn(C.referrer,n):"";i.length&&(r.ph_keyword=i)}return r}function Fl(){return navigator.language||navigator.userLanguage}var yi="$direct";function Xu(){return C?.referrer||yi}function Qu(t,e,n){n===void 0&&(n=!1);var r=t?[...En,...e||[]]:[],i=n?Pt(re?.href):re?.href,s=i?.substring(0,1e3);return{r:Xu().substring(0,1e3),u:s?ur(s,r,dr):void 0}}function ed(t,e){var n;e===void 0&&(e=!1);var r=t.r,i=t.u,s=e?Pt(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==yi?yi:(n=vi(r))==null?void 0:n.host};if(s){o.$current_url=s;var a=vi(s);o.$host=a?.host,o.$pathname=a?.pathname;var l=Yu(s);ee(o,l)}if(r){var u=Zu(r);ee(o,u)}return o}function td(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Xp(){try{return new Date().getTimezoneOffset()}catch{return}}var Qp={flags:Qn,surveys:ui},ef=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],sn="main";class Es{constructor(e,n,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=(s=>{var o="";return s.token&&(o=s.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),s.persistence_name?"ph_"+s.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&k.info("Persistence loaded",e.persistence,E({},this.props)),this.update_config(e,e,n),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){ef.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,r=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Rp,...o];return E({},Q,{H(u){try{var c={};try{c=mt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$e(g)||g===""||(p[f]=g)}d=ee(h,p)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,p,f){var g=Q.F(u,c,void 0,void 0,f);try{var m={};l.forEach((_=>{c[_]&&(m[_]=c[_])})),Object.keys(m).length&&mt.F(u,m,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{v?.localStorage.removeItem(u),mt.q(u,c)}catch(d){Q.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,s=e.persistence.toLowerCase();return s==="localstorage"&&Q.N()?(n=Q,i=!0):s==="localstorage+cookie"&&r.N()?(n=r,i=!0):s==="sessionstorage"&&ce.N()?n=ce:s==="memory"?n=Tp:s==="cookie"?n=mt:r.N()?(n=r,i=!0):n=mt,this.fi=i,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((n,r)=>{var i=Dt(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(n))return;e[r]=n}})),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 bs){var n=Q.H(this.Si(e));if(n&&!yt(n)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(n,e)),this.Ii(e,n)||ee(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var r;return((r=Dt(n))==null?void 0:r.storageGroup)===e}))}Ii(e,n){var r=Qp[e];if(!r)return!1;var i=n[r],s=this.props[r];return he(i)&&he(s)&&s>i}refreshKey(e){var n;if(!this.xi){var r=this.pi?(n=Dt(e))==null?void 0:n.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 s=this.ii.H(this.yi);if(s&&e in s)return void this.Pi(e,s[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(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,sn))}Li(){var e=this.Di(),n=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,n,sn),bs)){var s,o=r[i];(!yt(o)||(s=this.ci[i])!=null&&s.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},n={flags:{},surveys:{}};return Z(this.props,((r,i)=>{var s,o=(s=Dt(i))==null?void 0:s.storageGroup;o?n[o][i]=r:e[i]=r})),{main:e,groups:n}}Ei(e,n){if(n===sn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((i,s)=>{var o;r[s]=(o=Dt(s))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(r)}Oi(e,n,r,i){var s=this.Mi(i);if(i===sn||s.dirty||x(s.fingerprint)){var o;try{if((o=this.Ei(r,i))===s.fingerprint)return void(s.dirty=!1)}catch{o=void 0}e.F(n,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(s.dirty=!1,i!==sn&&(s.persisted=!0),x(o)||(s.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,r=n!==void 0&&n;if(x(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 bs)Q.q(this.Si(i));r?delete this.ci[sn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,r){if(te(e)){x(n)&&(n="None"),this.$i=x(r)?this.ji:r;var i=!1;if(Z(e,((s,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,s),i=!0)})),i)return this.save(),!0}return!1}register(e,n){if(te(e)){this.$i=x(n)?this.ji:n;var r=!1;if(Z(e,((i,s)=>{e.hasOwnProperty(s)&&(this.props[s]!==i||te(i)||L(i))&&(this.Pi(s,i),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,r=!1;for(var i of n)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var n=Ju(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);yt(aa(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Zu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Xu(),$referring_domain:C!=null&&C.referrer&&((e=vi(C.referrer))==null?void 0:e.host)||yi},void 0)}set_initial_person_info(){this.props[ho]||this.props[po]||this.register_once({[di]:Qu(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([po,ho],(i=>{var s=this.props[i];s&&Z(s,(function(o,a){e["$initial_"+Vs(a)]=o}))}));var n=this.props[di];if(n){var r=(function(i,s){s===void 0&&(s=!1);var o=ed(i,s),a={};return Z(o,(function(l,u){a["$initial_"+Vs(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,(function(n,r){r in e||(e[r]=n)})),e}update_config(e,n,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!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),s=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=s,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var r=this.props[Vn]||{};r[e]=n,this.Pi(Vn,r),this.save()}remove_event_timer(e){var n=this.props[Vn]||{},r=n[e];return x(r)||(delete n[e],this.Pi(Vn,n),this.save()),r}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var r;this.props[e]=n,(r=Dt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,r=(n=Dt(e))==null?void 0:n.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Tr(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&Se(n.then)&&n.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},Ln={Activation:"events",Cancellation:"cancelEvents"},Ss={Popover:"popover",API:"api",Widget:"widget"},vt={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},xs={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},_o={Popover:"popover",Inline:"inline"},tf={SHOWN:"product tour shown"},Pl={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},$l=ne("[RateLimiter]");class nf{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var r=n.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach((i=>{$l.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void $l.warn('could not rate limit - continuing. Error: "'+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 n,r,i;e===void 0&&(e=!1);var s=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(r=this.instance.persistence)==null?void 0:r.get_property(uo))!==null&&n!==void 0?n:{tokens:s,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>s&&(l.tokens=s);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(he(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(uo,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!L(n)||!n.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 n,r,i=this.captureEventsBurstLimit,s=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(r=this.instance).get_session_id)==null?void 0:n.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 "+s+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return Ct.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void Ct.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return Ct.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((n=>{this.Zi(n.json,n),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){Ct.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&C&&C.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||Ct.warn("Failed to fetch remote config from PostHog."):Ct.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){Ct.error("Error applying remote config",i)}if(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){Ct.error("Error loading feature flags",i)}}}var qe=Uint8Array,Pe=Uint16Array,Sn=Uint32Array,da=new qe([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]),ha=new qe([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]),Rl=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),rd=function(t,e){for(var n=new Pe(31),r=0;31>r;++r)n[r]=e+=1<r;++r)for(var s=n[r];n[r+1]>s;++s)i[s]=s-n[r]<<5|r;return[n,i]},id=rd(da,2),yo=id[1];id[0][28]=258,yo[258]=28;for(var Tl=rd(ha,0)[1],sd=new Pe(32768),se=0;32768>se;++se){var on=(43690&se)>>>1|(21845&se)<<1;sd[se]=((65280&(on=(61680&(on=(52428&on)>>>2|(13107&on)<<2))>>>4|(3855&on)<<4))>>>8|(255&on)<<8)>>>1}var tr=function(t,e,n){for(var r=t.length,i=0,s=new Pe(e);r>i;++i)++s[t[i]-1];var o,a=new Pe(e);for(i=0;e>i;++i)a[i]=a[i-1]+s[i-1]<<1;for(o=new Pe(r),i=0;r>i;++i)o[i]=sd[a[t[i]-1]++]>>>15-t[i];return o},Xt=new qe(288);for(se=0;144>se;++se)Xt[se]=8;for(se=144;256>se;++se)Xt[se]=9;for(se=256;280>se;++se)Xt[se]=7;for(se=280;288>se;++se)Xt[se]=8;var wi=new qe(32);for(se=0;32>se;++se)wi[se]=5;var rf=tr(Xt,9),sf=tr(wi,5),od=function(t){return(t/8>>0)+(7&t&&1)},ad=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var r=new(t instanceof Pe?Pe:t instanceof Sn?Sn:qe)(n-e);return r.set(t.subarray(e,n)),r},ct=function(t,e,n){var r=e/8>>0;t[r]|=n<<=7&e,t[r+1]|=n>>>8},On=function(t,e,n){var r=e/8>>0;t[r]|=n<<=7&e,t[r+1]|=n>>>8,t[r+2]|=n>>>16},ks=function(t,e){for(var n=[],r=0;t.length>r;++r)t[r]&&n.push({s:r,f:t[r]});var i=n.length,s=n.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(A,F){return A.f-F.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=s[0].s;for(r=1;i>r;++r)s[r].s>h&&(h=s[r].s);var p=new Pe(h+1),f=wo(n[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var w=s[r].s;if(e>=p[w])break;g+=_-(1<>>=m;g>0;){var b=s[r].s;e>p[b]?g-=1<=0&&g;--r){var I=s[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},wo=function(t,e,n){return t.s==-1?Math.max(wo(t.l,e,n+1),wo(t.r,e,n+1)):e[t.s]=n},Nl=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Pe(++e),r=0,i=t[0],s=1,o=function(l){n[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return[n.subarray(0,r),e]},Bn=function(t,e){for(var n=0,r=0;e.length>r;++r)n+=t[r]*e[r];return n},bo=function(t,e,n){var r=n.length,i=od(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 s=0;r>s;++s)t[i+s+4]=n[s];return 8*(i+4+r)},Ml=function(t,e,n,r,i,s,o,a,l,u,c){ct(e,c++,n),++i[256];for(var d=ks(i,15),h=d[0],p=d[1],f=ks(s,15),g=f[0],m=f[1],_=Nl(h),w=_[0],b=_[1],I=Nl(g),A=I[0],F=I[1],j=new Pe(19),S=0;w.length>S;++S)j[31&w[S]]++;for(S=0;A.length>S;++S)j[31&A[S]]++;for(var P=ks(j,7),R=P[0],N=P[1],T=19;T>4&&!R[Rl[T-1]];--T);var O,J,q,H,oe=u+5<<3,fe=Bn(i,Xt)+Bn(s,wi)+o,Ie=Bn(i,h)+Bn(s,g)+o+14+3*T+Bn(j,R)+(2*j[16]+3*j[17]+7*j[18]);if(fe>=oe&&Ie>=oe)return bo(e,c,t.subarray(l,l+u));if(ct(e,c,1+(fe>Ie)),c+=2,fe>Ie){O=tr(h,p),J=h,q=tr(g,m),H=g;var _e=tr(R,N);for(ct(e,c,b-257),ct(e,c+5,F-1),ct(e,c+10,T-4),c+=14,S=0;T>S;++S)ct(e,c+3*S,R[Rl[S]]);c+=3*T;for(var Ce=[w,A],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ct(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ct(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=rf,J=Xt,q=sf,H=wi;for(S=0;a>S;++S)if(r[S]>255){var me;On(e,c,O[257+(me=r[S]>>>18&31)]),c+=J[me+257],me>7&&(ct(e,c,r[S]>>>23&31),c+=da[me]);var ge=31&r[S];On(e,c,q[ge]),c+=H[ge],ge>3&&(On(e,c,r[S]>>>5&8191),c+=ha[ge])}else On(e,c,O[r[S]]),c+=J[r[S]];return On(e,c,O[256]),c+J[256]},of=new Sn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),af=(function(){for(var t=new Sn(256),e=0;256>e;++e){for(var n=e,r=9;--r;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),Is=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function lf(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=af[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),r=t.length;n.p(t);var i,s,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,(function(d,h,p,f,g,m){var _=d.length,w=new qe(f+_+5*(1+Math.floor(_/7e3))+g),b=w.subarray(f,w.length-g),I=0;if(!h||8>_)for(var A=0;_>=A;A+=65535){var F=A+65535;_>F?I=bo(b,I,d.subarray(A,F)):(b[A]=!0,I=bo(b,I,d.subarray(A,_)))}else{for(var j=of[h-1],S=j>>>13,P=8191&j,R=(1<A;++A){var me=q(A),ge=32767&A,Qe=T[me];if(N[ge]=Qe,T[me]=ge,A>=Re){var Lt=_-A;if((Ie>7e3||Ce>24576)&&Lt>423){I=Ml(d,b,0,H,oe,fe,_e,Ce,ae,A-ae,I),Ce=Ie=_e=0,ae=A;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)fe[de]=0}var Ge=2,It=0,$n=P,De=ge-Qe&32767;if(Lt>2&&me==q(A-De))for(var Ae=Math.min(S,Lt)-1,Sr=Math.min(32767,A),xr=Math.min(258,Lt);Sr>=De&&--$n&&ge!=Qe;){if(d[A+Ge]==d[A+Ge-De]){for(var je=0;xr>je&&d[A+je]==d[A+je-De];++je);if(je>Ge){if(Ge=je,It=De,je>Ae)break;var kr=Math.min(De,je-2),tn=0;for(de=0;kr>de;++de){var nn=A-De+de+32768&32767,Rn=nn-N[nn]+32768&32767;Rn>tn&&(tn=Rn,Qe=nn)}}}De+=(ge=Qe)-(Qe=N[ge])+32768&32767}if(It){H[Ce++]=268435456|yo[Ge]<<18|Tl[It];var Ga=31&yo[Ge],Ka=31&Tl[It];_e+=da[Ga]+ha[Ka],++oe[257+Ga],++fe[Ka],Re=A+Ge,++Ie}else H[Ce++]=d[A],++oe[d[A]]}}I=Ml(d,b,!0,H,oe,fe,_e,Ce,ae,A-ae,I)}return ad(w,0,f+od(I)+g)})(s=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):12+o.mem,a,l)),c=u.length;return(function(d,h){var p=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&&Is(d,4,Math.floor(new Date(h.mtime||Date.now())/1e3)),p){d[3]=8;for(var f=0;p.length>=f;++f)d[f+10]=p.charCodeAt(f)}})(u,e),Is(u,c-8,n.d()),Is(u,c-4,r),u}var cf=!!Ws||!!Yo,ld="text/plain",Gr=!1,cd=(t,e)=>{var n=t.split("#"),r=n[1],i=n[0].split("?"),s=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return s+(a?"?"+a:"")+(r?"#"+r:"")},Di=function(t,e,n){var r;n===void 0&&(n=!0);var i=t.split("?"),s=i[0],o=i[1],a=E({},e),l=(r=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=n&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&r!==void 0?r:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(g,m){x(g)||x(m)||m==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?s+"?"+l.join("&"):s},Cs=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===xe.GZipJS){var r=lf((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var f=new qe(d+8+(u-p<<1));f.set(c),c=f}var g=a.charCodeAt(p);128>g?h(g):2048>g?(h(192|g>>>6),h(128|63&g)):g>55295&&57344>g?(h(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),h(128|g>>>12&63),h(128|g>>>6&63),h(128|63&g)):(h(224|g>>>12),h(128|g>>>6&63),h(128|63&g))}return ad(c,0,d)})(pn(e)),{mtime:0});return{contentType:ld,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(n===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(pn(e)),s=(a=>"data="+encodeURIComponent(typeof a=="string"?a:pn(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:s,estimatedSize:new Blob([s]).size}}var o=pn(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},ud=t=>{var e,n,r=()=>t.transport==="sendBeacon"?{url:Di(t.url,{compression:xe.Base64}),encodedBody:Cs(E({},t,{compression:xe.Base64,Ji:void 0}))}:{url:cd(t.url,"compression"),encodedBody:Cs(E({},t,{compression:void 0,Ji:void 0}))};try{e=Cs(t)}catch(i){if(tl(t.compression,bn(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&tl(t.compression,bn(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?zs(new Uint8Array(n)):ArrayBuffer.isView(n)&&zs(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Gr=!0,r()):{url:t.url,encodedBody:e}},dd=t=>{try{return ud(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},uf=(function(){var t=X((function*(e){var n=pn(e.data),r=yield(function(s,o,a){return qs.apply(this,arguments)})(n,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return E({},e,{Ji:{contentType:ld,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),df=/Failed to fetch|NetworkError|Load failed/i,hd=t=>t?.name==="TypeError"&&df.test(t?.message||""),pd=t=>{var e=dd(t);if(e){var n=e.url,r=e.encodedBody,i=r??{},s=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),s&&l.append("Content-Type",s);var u=null,c=!1;if(Ja){var d=new Ja;u={signal:d.signal,timeout:setTimeout((()=>{var f,g;c=!0,d.abort((f=t.timeout,(g=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",g))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||hd(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Yo(n,E({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((g=>{var m={statusCode:f.status,text:g};if(f.status===200)try{m.json=JSON.parse(g)}catch(_){k.error(_)}t.callback==null||t.callback(m)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},Eo=t=>{try{var e,n=ud(t),r=n.url,i=n.encodedBody,s=i??{},o=s.body,a=s.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:s.contentType});if(ke.sendBeacon(r,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:E({},t.data,{batch:h});return Eo(E({},t,{data:d(u.slice(0,c))})),void Eo(E({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),pd(E({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},Ll=(t,e,n,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return Di(n===xe.GZipJS?cd(t,"compression"):t,E({},i?{[i]:Date.now().toString()}:{},n===xe.GZipJS?{}:{compression:n}))},Kr=[];Yo&&Kr.push({transport:"fetch",method:pd}),Ws&&Kr.push({transport:"XHR",method(t){var e=dd(t);if(e){var n=new Ws,r=e.encodedBody;n.open(t.method||"GET",e.url,!0);var i=r??{},s=i.contentType,o=i.body;Z(t.headers,(function(a,l){n.setRequestHeader(l,a)})),s&&n.setRequestHeader("Content-Type",s),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ke!=null&&ke.sendBeacon&&Kr.push({transport:"sendBeacon",method:Eo});var So=3e3;class hf{constructor(e,n){this.Xi=!0,this.tr=[],this.er=ot(n?.flush_interval_ms||So,250,5e3,k.createLogger("flush interval"),So),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},n=Object.values(e);[...n.filter((r=>r.url.indexOf("/e")===0)),...n.filter((r=>r.url.indexOf("/e")!==0))].map((r=>{this.lr(E({},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 n=this.ar(),r=function(){var s=n[i],o=new Date().getTime();s.data&&L(s.data)&&Z(s.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(s)};for(var i in n)r()}}),this.er))}lr(e){try{this.ir(e)}catch(n){k.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(n=>{var r,i=n,s=(i?i.batchKey:null)||i.url;x(e[s])&&(e[s]=E({},i,{data:[]})),(r=e[s].data)==null||r.push(i.data)})),this.tr=[],e}}var pf=["retriesPerformedSoFar"];class ff{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,r=Uc(e,pf);dt(n)&&(r.url=Di(r.url,{retry_count:n})),this._instance._send_request(E({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(n??0))return void this.At(E({retriesPerformedSoFar:n},r));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+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))})(n),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var s="Enqueued failed request for retry in "+r;navigator.onLine||(s+=" (Browser is offline)"),k.warn(s),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],r=this.tr.filter((s=>e>s.retryAt||(n.push(s),!1)));if(this.tr=n,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,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(E({},n,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class gf{constructor(e){this.yr=()=>{var n,r,i,s;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(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,(s=this.br.maxContentHeight)!==null&&s!==void 0?s:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var n of e){var r=v?.document.querySelector(n);if(r)return r}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[n]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var mf=t=>Qu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Ol{constructor(e,n,r,i){this.kr=s=>{var o=this.Sr();if(!o||o.sessionId!==s){var a={sessionId:s,props:this.Cr(this._instance)};this.Mr.register({[co]:a})}},this._instance=e,this.Tr=n,this.Mr=r,this.Cr=i||mf,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[co]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?ed(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return Z(aa(this.getSetOnceProps()),((n,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Vs(r)]=n})),e}}class pa{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((r=>r!==n))}}emit(e,n){for(var r of this.Er[e]||[])r(n);for(var i of this.Er["*"]||[])i(e,n)}constructor(){this.Er={}}}var Dn=ne("[SessionId]");class Bl{on(e,n){return this.Ir.on(e,n)}constructor(e,n,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new pa,this.Lr=(u,c)=>!(!dt(u)||!dt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===gt)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=n||ft,this.Nr=r||ft;var s=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*ot(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Dn.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+s+"_window_id",this.Br="ph_"+s+"_primary_window_exists",this.Hr()){var o=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){Dn.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&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 n=this.Pr;return!$e(n)&&!$e(e)&&5e3>Math.abs(e-n)}Ur(e,n,r){var i=n!==this._sessionActivityTimestamp,s=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=n,this.Dr=e,s&&!i||s&&this.Zr(n)||(this.Pr=n,this.Mr.register({[hn]:[n,e,r]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return dt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(hn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[hn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=dt(e)?e:0,r=dt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[hn];return L(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&&v&&(v.removeEventListener(fi,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,fi,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===gt)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=n||new Date().getTime(),i=this.Jr(),s=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=dt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!s,p=s,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Dn.info("cross-tab refresh kept the session alive",{sessionId:s});var g=this.Jr();s=g[1],o=g[2]}h||f||u?(s=this.$r(),l=this.Nr(),Dn.info("new session ID generated",{sessionId:s,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=s!==p)&&(Dn.info("adopted cross-tab session id",{sessionId:s,windowId:l}),c=!0));var m=dt(a)&&e&&!u?a:r,_=dt(o)?o:new Date().getTime();this.Wr(l),this.Ur(s,m,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(s,l,w))),{sessionId:s,windowId:l,sessionStartTimestamp:_,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 fd=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&rl(n,e))return!0;try{var r=t?.userAgentData;if(r!=null&&r.brands&&r.brands.some((i=>rl(i?.brand,e))))return!0}catch{}return!!t.webdriver};function gd(){return(gd=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return W(n)&&n.length>0?n:void 0}catch(r){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}}))).apply(this,arguments)}var bi=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function As(t,e,n){return pn({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var md={exact:(t,e)=>e.some((n=>t.some((r=>n===r)))),is_not:(t,e)=>e.every((n=>t.every((r=>n!==r)))),regex:(t,e)=>e.some((n=>t.some((r=>bi(n,r))))),not_regex:(t,e)=>e.every((n=>t.every((r=>!bi(n,r))))),icontains:(t,e)=>e.map(Nr).some((n=>t.map(Nr).some((r=>n.includes(r))))),not_icontains:(t,e)=>e.map(Nr).every((n=>t.map(Nr).every((r=>!n.includes(r))))),gt:(t,e)=>e.some((n=>{var r=parseFloat(n);return!isNaN(r)&&t.some((i=>r>parseFloat(i)))})),lt:(t,e)=>e.some((n=>{var r=parseFloat(n);return!isNaN(r)&&t.some((i=>rt.toLowerCase();function vd(t,e){return!t||Object.entries(t).every((n=>{var r=n[1],i=e?.[n[0]];if(x(i)||$e(i))return!1;var s=[String(i)],o=md[r.operator];return!!o&&o(r.values,s)}))}var xo="custom",Dl="i.posthog.com",vf=/^\/static\//;class _f{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+Dl,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":xo),this.en[this.apiHost]}rn(e){if(vf.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var r=this.rn(n);if(r)return""+r+n}if(this.region===xo)return this.apiHost+n;var i=Dl+n;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function _d(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var V=ne("[Surveys]"),yd="seenSurvey_",wd=t=>{try{var e=(n=>((r,i)=>""+yd+(function(s){return s.current_iteration&&s.current_iteration>0?s.id+"_"+s.current_iteration:s.id})(i))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){V.error("Failed to persist survey seen state",n)}},yf=[Ss.Popover,Ss.Widget,Ss.API],wf={ignoreConditions:!1,ignoreDelay:!1,displayType:_o.Popover},bf=ne("[PostHog ExternalIntegrations]"),Ef={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Sf{constructor(e){this._instance=e}ai(e,n){var r;(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,(i=>{if(i)return bf.error("failed to load script",i);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var s,o,a,l=r[0],u=r[1];!u||(s=$.__PosthogExtensions__)!=null&&(s=s.integrations)!=null&&s[l]||e.ai(Ef[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__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;n()}}}class xf{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return X((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var r=e.setup(n.nn);r&&(yield r)}catch(s){var i=n.sn.get(e.name)===e;i&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',s),i&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&Se(n.then)&&n.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 kf{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var r={};for(var i of e){var s=n?.get_property(i);x(s)||(r[i]=s)}return r}set(e,n){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var jl="extensionsRemoteConfig";class If{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new kf(e),this.onEvent=n=>Tr(this.instance.on("eventCaptured",(r=>{try{n({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}}))),this.onRemoteConfig=n=>{if(this.an)return Tr((()=>{}));var r=s=>{try{n(s)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(jl,r);return this.un&&r(this.un),Tr(i)},this.vn=new xf(k.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(lr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(lr);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,r,i,s=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=s?.sessionId)!==null&&n!==void 0?n:"",windowId:(r=s?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=s?.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,n,r){var i=this;return X((function*(){r?i.instance.capture(e,n,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Tr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(jl,e))}sendRequest(e,n){var r=this;return X((function*(){var i;n===void 0&&(n={});var s=r.instance.requestRouter.endpointFor((i=n.target)!==null&&i!==void 0?i:"api",e),o={method:n.method,url:n.query?Di(s,n.query):s,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.transport==="sendBeacon"?(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 nr={},Fs=0,Ei=()=>{},Ul='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',jn="Surveys module not available",Hl="sanitize_properties is deprecated. Use before_send instead",bd="Invalid value for property_denylist config: ",Cf=["token","distinct_id",Au],un="posthog",Ed=!cf&&Fe?.indexOf("MSIE")===-1&&Fe?.indexOf("Mozilla")===-1,Ps=t=>{var e;return E({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:Cp(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:Ei,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&&W(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:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(n){k.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:fo,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:So},error_tracking:{},_onCapture:Ei},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:Dp,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},Af=[["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"]],Wl=t=>{var e={};for(var n of Af){var r=n[0],i=n[1];x(t[r])||(e[i]=t[r])}var s=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(s.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(s.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?s.property_denylist=t.property_blacklist:L(t.property_denylist)?s.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(bd+t.property_denylist)),s};class Ff{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,n){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===gt||this.config.cookieless_mode===Vt&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Ff,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new pa,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=Ps(),this.SentryIntegration=Gp,this.sentryIntegration=r=>(function(i,s){var o=Vu(i,s);return{name:qu,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 gf(this),this.pageViewManager=new Al(this),this.rateLimiter=new nf(this),this.requestRouter=new _f(this),this.consent=new Np(this),this.externalIntegrations=new Sf(this);var n=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(r,i,s)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(o),s?.({})},set_once:(r,i,s)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),s?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,n,r){if(r&&r!==un){var i,s=(i=nr[r])!==null&&i!==void 0?i:new Te;return s._init(e,n,r),nr[r]=s,nr[un][r]=s,s}return this._init(e,n,r)}_init(e,n,r){var i,s;n===void 0&&(n={});var o,a=W(e)?e.trim():"";if(!a)return k.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=Ps(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=Ps(n.defaults),u=Wl(n),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&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new Es(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Es(E({},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);L(h)&&h.forEach((F=>{W(F)&&this.yn.add(F)}))}else ce.q(this.bn);var p=E({},this.persistence.props),f=E({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new hf((F=>this.Pn(F)),this.config.request_queue_config),this.Rn=new ff(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new Bl(this),this.sessionPropsManager=new Ol(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((F,j,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:n,thisC:E({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=n.bootstrap)!=null&&i.distinctID||(n.bootstrap=E({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((s=n.bootstrap)==null?void 0:s.distinctID)!==void 0){var m=n.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===rn)this.identify(m);else if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===Ot)k.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 b=this.config.get_device_id(ft()),I=n.bootstrap.isIdentifiedID?b:m;this.persistence.set_property(He,n.bootstrap.isIdentifiedID?Ot:rn),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:Ar,$device_id:null},"");else if(!this.get_distinct_id()){var A=this.config.get_device_id(ft());this.register_once({distinct_id:A,$device_id:A},""),this.persistence.set_property(He,rn)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.segment?(function(F,j){var S=F.config.segment;if(!S)return j();(function(P,R){var N=P.config.segment;if(!N)return R();var T=J=>{var q=()=>J.anonymousId()||ft();P.config.get_device_id=q,J.id()&&(P.register({distinct_id:J.id(),$device_id:q()}),P.persistence.set_property(He,Ot)),R()},O=N.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(F,(()=>{S.register((P=>{typeof Promise<"u"&&Promise.resolve||ws.warn("This browser does not have Promise support, and can not use the segment integration");var R=(N,T)=>{if(!T)return N;N.event.userId||N.event.anonymousId===P.get_distinct_id()||(ws.info("No userId set, resetting PostHog"),P.reset()),N.event.userId&&N.event.userId!==P.get_distinct_id()&&(ws.info("UserId set, identifying with PostHog"),P.identify(N.event.userId));var O=P.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},O,N.event.properties),N};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:N=>R(N,N.event.event),page:N=>R(N,cn),identify:N=>R(N,vs),screen:N=>R(N,"$screen")}})(F)).then((()=>{j()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==Ei&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(F=>this.config._onCapture(F.event,F)))),this.config.ip&&k.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 gd.apply(this,arguments)})().then((F=>{F&&this.register({[gs]:F})})).catch(Ei),this}Fn(){var e,n,r,i,s,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(r=Te.__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)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(s=(o=this.featureFlags).initialize)==null||s.call(o))}Ln(e){var n,r,i,s,o,a,l,u=performance.now(),c=E({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(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=(s=this.metrics)!==null&&s!==void 0?s:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,Vp)),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((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var r=e.shift();if(r)try{r()}catch(s){k.error("Error initializing extension:",s)}}var i=Math.round(performance.now()-n);this.register_for_session({[Fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Pu]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var n;if(!C||!C.body)return k.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=M(i.supportedCompression,xe.GZipJS)?xe.GZipJS:M(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:fo}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((s=>s.onRemoteConfig==null?void 0:s.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(r){k.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new nd(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()&&Fr(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,r,i,s;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ms),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(s=this.Rn)==null||s.unload()):this.zn()&&this.capture(ms,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?Ed?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=E({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var r,i,s,o=E({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((w=>E({},w,{sent_at:_}))):E({},m,{sent_at:_})})(o.data))),o.url=Ll(o.url,o.method,o.compression,o.timestampMode);var p=Kr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(i=(s=(function(m,_){for(var w=0;m.length>w;w++)if(m[w].transport===h)return m[w]})(p))==null?void 0:s.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){hd(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&Fh&&typeof Promise<"u"&&!Gr?uf(o).then((m=>{g(m)})).catch((m=>{if(nl(m))return Gr=!0,void g(E({},o,{compression:void 0,url:Ll(n.url,n.method,void 0,n.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return nl(_)||w===Hc})(m)&&(Gr=!0),g(o)})):f(o)})(E({},e,{callback:n=>{var r,i;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){Fs++;try{var n,r=[],i=[],s=[];Fr(e,(a=>{if(a)if(L(n=a[0]))s.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&n==="alias"?r.push(a):L(a)&&n.indexOf("capture")!==-1&&Se(this[n])?s.push(a):i.push(a)}));var o=function(a,l){Fr(a,(function(u){try{if(L(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){k.error("Error executing queued PostHog call",u,d)}}))};o(r,this),o(i,this),o(s,this)}finally{Fs--}}push(e){if(Fs>0&&L(e)&&W(e[0])){var n=Te.prototype[e[0]];Se(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,r){var i,s,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!x(e)&&W(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){n!=null&&n.$current_url&&!W(n?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||r!=null&&r.Wn||k.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?.timestamp||d,p=al(r?.uuid,ft),f={uuid:p,event:e,properties:this.calculateEventProperties(e,n||{},h,p)};e===cn&&this.config.__preview_capture_bot_pageviews&&u&&(f.event="$bot_pageview",f.properties.$browser_type="bot"),c&&(f.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&f.properties.$feature_flag_has_experiment===!1&&this.get_property(ci)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,w,b,I=g?void 0:this.Vn(r?.$set_once,e!==pl,e===vs);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(s=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,s):T,l=new Set,f=(function T(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var q;if(l.add(O),L(O))q=[],Fr(O,(oe=>{q.push(T(oe))}));else{var H={};Z(O,((oe,fe)=>{l.has(oe)||(H[fe]=T(oe))})),q=H}return q}})(o)),f.timestamp=h,x(r?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},q=H=>{T[H]!==void 0&&(J[H]=T[H])};return Ph.forEach(q),O.forEach(q),J})(f.properties,Cf)),e===vt.DISMISSED||e===vt.SENT){var A=n?.[xs.SURVEY_ID],F=n?.[xs.SURVEY_ITERATION];wd({id:A,current_iteration:F}),f.$set=E({},f.$set,{[(_={id:A,current_iteration:F},w=e===vt.SENT?"responded":"dismissed",b="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+w+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===vt.SHOWN&&(f.$set=E({},f.$set,{[xs.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===tf.SHOWN){var j=n?.[Pl.TOUR_TYPE];j&&(f.$set=E({},f.$set,{[Pl.TOUR_LAST_SEEN_DATE+"/"+j]:new Date().toISOString()}))}var S=E({},f.properties.$set,f.$set);if(yt(S)||this.setPersonPropertiesForFlags(S),!B(this.config.before_send)){var P=this.Pt(f);if(!P)return;(f=P).uuid=al(f.uuid,ft)}this.dn.emit("eventCaptured",f);var R=(i=r?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),N={method:"POST",url:R,data:f,compression:"best-available",timestampMode:r?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r?._batchKey,transport:r?.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(N):this.In.enqueue(N),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new If(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,n,r,i,s){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return n;var o=s?void 0:this.persistence.remove_event_timer(e),a=E({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Au]=!0),e==="$snapshot"){var l=E({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Gs(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(A,F,j,S){var P,R,N,T;if(S===void 0&&(S=!1),!Fe)return{};var O,J=A?[...En,...F||[]]:[],q=(function(xr){for(var je=0;sl.length>je;je++){var kr=sl[je],tn=kr[1],nn=kr[0].exec(xr),Rn=nn&&(Se(tn)?tn(nn,xr):tn);if(Rn)return Rn}return["",""]})(Fe),H=q[0],oe=q[1],fe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(j)||(Ie.detectGoogleSearchApp=j);var _e={},Ce=(P=navigator)==null||(P=P.userAgentData)==null?void 0:P.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(N=v.screen)==null?void 0:N.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Qe,Lt,de,Ge,It,$n,De,Ae,Sr=ee(aa({$os:H,$os_version:oe,$browser:pu(Fe,navigator.vendor,fe,Ie),$device:ol(Fe),$device_type:(Lt=Fe,de=_e,Ae=ol(Lt),Ae===Jc||Ae===Kc||Ae==="Kobo"||Ae==="Kindle Fire"||Ae===lu?_n:Ae===or||Ae===mn||Ae===ar||Ae===Js?"Console":Ae===Zc?"Wearable":Ae?Oe:de?.userAgentDataPlatform==="Android"&&((Ge=de?.maxTouchPoints)!==null&&Ge!==void 0?Ge:0)>0?600>Math.min((It=de?.screenWidth)!==null&&It!==void 0?It:0,($n=de?.screenHeight)!==null&&$n!==void 0?$n:0)/((De=de?.devicePixelRatio)!==null&&De!==void 0?De:1)?Oe:_n:"Desktop"),$timezone:td(),$timezone_offset:Xp()}),{$current_url:ur(S?Pt(re?.href):re?.href,J,dr),$host:re?.host,$pathname:re?.pathname,$raw_user_agent:Fe.length>1e3?Fe.substring(0,997)+"...":Fe,$browser_version:Jh(Fe,navigator.vendor,fe,Ie),$browser_language:Fl(),$browser_language_prefix:(Qe=Fl(),typeof Qe=="string"?Qe.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.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&&(Sr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),Sr})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(s,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(A){a.$sdk_debug_error_capturing_properties=String(A)}if(this.requestRouter.region===xo&&(a.$lib_custom_api_host=this.config.api_host),u=e!==cn||s?e!==ms||s?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===cn&&C&&(a.title=C.title),!x(o)){var f=r.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Fe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(A=>{A in g&&delete m[A]}));var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(A){k.error("Failed to produce browser extension event properties",A)}(a=ee({},c,g,m,E({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(A){delete a[A]})):k.error(bd+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Hl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!s&&this.Gn("_calculate_event_properties"),a}Vn(e,n,r){var i;if(n===void 0&&(n=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var s=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},s,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Hl),a=l(a,"$set_once")),n&&(this.mn=!0),yt(a)?void 0:a}register(e,n){var r;(r=this.persistence)==null||r.register(e,n)}register_once(e,n,r){var i;(i=this.persistence)==null||i.register_once(e,n,r)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((r=>this.yn.add(r))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var n=[];this.yn.forEach((r=>n.push(r))),n.length>0?ce.F(this.bn,n):ce.q(this.bn)}}getFeatureFlag(e,n){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,n))!==null&&r!==void 0?r:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,n,r)}updateEarlyAccessFeatureEnrollment(e,n,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,n,r)}getEarlyAccessFeatures(e,n,r){var i;return n===void 0&&(n=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,n,r)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:jn}),()=>{})}onSessionId(e){var n,r;return(n=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:jn})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:jn})}renderSurvey(e,n){var r;(r=this.surveys)==null||r.renderSurvey(e,n)}displaySurvey(e,n){var r;n===void 0&&(n=wf),(r=this.surveys)==null||r.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,r;return(n=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:jn}}canRenderSurveyAsync(e,n){var r,i;return n===void 0&&(n=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,n))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:jn})}Jn(e){return!e||Gs(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===Ar?(k.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())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,r){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.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(lr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(qn)&&(this.unregister(qn),this.register({distinct_id:e}));var s,o=(this.persistence.get_property(He)||rn)===rn,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Ot),this.setPersonPropertiesForFlags({$set:n||{},$set_once:r||{}},!1),this.capture(vs,{distinct_id:e,$anon_distinct_id:i},{$set:n||{},$set_once:r||{}}),this.Sn=As(e,n,r),(s=this.featureFlags)==null||s.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Ot);var u=n||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=As(e,n,r)}else(n||r)&&this.setPersonProperties(n,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Gt)):l&&(n||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var r=As(this.get_distinct_id(),e,n);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=r):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,r=(L(e)?e:[e]).filter((i=>W(i)&&i.length>0));r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,n,r){if(e&&n){var i=this.getGroups(),s=i[e]!==n;if(s&&this.resetGroupPropertiesForFlags(e),this.register({$groups:E({},i,{[e]:n})}),s||r){var o={$group_type:e,$group_key:n};r&&(o.$group_set=r),this.capture(pl,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),s&&!r&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var r;n===void 0&&(n=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var r;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var r,i,s,o,a,l,u,c,d,h;if(n===void 0&&(n=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(lr),g=this.get_property(gs),m=this.get_property(Jt),_=this.is_capturing();if(this.consent.reset(),n||!_||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(),x(m)||(p=this.persistence)==null||p.register({[Jt]:m}),(s=this.surveys)==null||s.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,rn),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===gt)this.register_once({distinct_id:Ar,$device_id:null},"");else{var w=this.config.get_device_id(ft());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||x(g)||this.register({[gs]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return X((function*(){var r,i,s,o,a,l,u;if(n.__loaded){(r=n.Un)==null||r.stop(),(i=n.jn)==null||i.dispose(),(s=n.sessionRecording)==null||s.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var r;this.config.identity_distinct_id=e,this.config.identity_hash=n,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,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=n.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&r){var s,o=(s=e.timestampLookBack)!==null&&s!==void 0?s:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,n){return e===this.get_property(Eu)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(qn,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=E({},this.config);if(te(e)){var r,i,s,o,a,l,u,c,d,h,p,f;ee(this.config,Wl(e));var g=this.En();(r=this.persistence)==null||r.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new Es(E({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);Ye(m)&&(this.config.debug=m),Ye(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:n,newConfig:E({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(s=this.exceptionObserver)==null||s.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){Y.LIB_NAME=e,Y.LIB_VERSION=n}startSessionRecording(e){var n,r,i,s,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((s=this.sessionRecording)==null||s.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(E({},i,n))}}addExceptionStep(e,n){var r;(r=this.exceptions)==null||r.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,r;return(n=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:un;return n!==un&&(n=un+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(He))===Ot||((n=this.sessionPersistence)==null?void 0:n.get_property(He))===Ot}Zn(){var e,n;return!(this.config.person_profiles==="never"||this.config.person_profiles===fo&&!this._isIdentified()&&yt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[qn])&&((n=this.persistence)==null||(n=n.props)==null||!n[hi]))}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"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(hi,!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!==Vt)}es(){var e,n,r,i,s=this.En();return((e=this.persistence)==null?void 0:e.xi)!==s&&((r=this.persistence)==null||r.set_disabled(s)),((n=this.sessionPersistence)==null?void 0:n.xi)!==s&&((i=this.sessionPersistence)==null||i.set_disabled(s)),s&&(this.yn.clear(),this.Qn()),s}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==gt){if(this.gn()){var r,i,s,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new Bl(this),this.pageViewManager=new Al(this),this.persistence&&(this.sessionPropsManager=new Ol(this,this.sessionManager,this.persistence));var l,u=(s=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&s!==void 0?s:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Vt&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Ul)}opt_out_capturing(){var e,n,r;this.config.cookieless_mode!==gt?(this.config.cookieless_mode===Vt&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Vt&&(this.register({distinct_id:Ar,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):k.warn(Ul)}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===gt||(this.config.cookieless_mode===Vt?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?fd(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(cn,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(pi,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,pi,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.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?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,r,i,s,o){var a=r in n&&!B(n[r]),l=i in n&&!B(n[i]);return a?n[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."),n[i])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var n;if(B(this.config.before_send))return e;var r=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(Oh),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],s=e;for(var o of i){if(s=o(s),B(s)){var a="Event '"+e.event+"' was rejected in beforeSend function";return Lh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}s.properties&&!yt(s.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(s.properties&&B(s.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return s}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(r)})}Cn(e){var n=Ye(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!n&&(!!r||e)}}Te.__defaultExtensionClasses={},Te.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var n=0;e.length>n;n++)t.prototype[e[n]]=kp(t.prototype[e[n]])})(Te,["identify"]);class zl{constructor(e){this.disabled=e===!1;var n=te(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(n-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:n,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:r}];return!1}}var $s="$copy_autocapture",Rs=ne("[AutoCapture]");function Ts(t,e){return e.length>t?e.slice(0,t)+"...":e}function Pf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!$t(e));return e}function $f(t,e){var n,r,i=e.e,s=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!$t(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Bu>c.length;)if(Ou(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!$t(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,m=[],_={},w=!1,b=!1;if(Z(c,(S=>{var P=vo(S);if(Me(S,"a")){var R=S.getAttribute("href");w=!!(P&&R&&er(R))&&(u?Pt(R):R)}M(mi(S),"ph-no-capture")&&(b=!0),m.push((function(T,O,J,q,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),fe={tag_name:oe};ca.indexOf(oe)>-1&&!J&&(fe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?Ts(1024,kl(T)):Ts(1024,cr(T)));var Ie=mi(T);Ie.length>0&&(fe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Wu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(q==null||!q.includes(ae.name))&&!O&&er(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=la(ge).join(" ")),fe["attr__"+ae.name]=Ts(1024,ae.name==="href"&&H?Pt(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=Pf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return fe.nth_child=_e,fe.nth_of_type=Ce,fe})(S,s,o,a,u));var N=(function(T){if(!vo(T))return{};var O={};return Z(T.attributes,(function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var q=J.name.replace("data-ph-capture-attribute-",""),H=J.value;q&&H&&er(H)&&(O[q]=H)}})),O})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?kl(t):cr(t)),w){var I,A;m[0].attr__href=w;var F=(I=vi(w))==null?void 0:I.host,j=v==null||(A=v.location)==null?void 0:A.host;F&&j&&F!==j&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(S){return S.map((P=>{var R,N,T="";if(P.tag_name&&(T+=P.tag_name),P.attr_class)for(var O of(P.attr_class.sort(),P.attr_class))T+="."+O.replace(/"/g,"");var J=E({},P.text?{text:P.text}:{},{"nth-child":(R=P.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(N=P.nth_of_type)!==null&&N!==void 0?N:0},P.href?{href:P.href}:{},P.attr_id?{attr_id:P.attr_id}:{},P.attributes),q={};return Vr(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return q[Il(H[0].toString())]=Il(oe.toString())})),(T+=":")+Vr(q).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((P=>{var R,N,T={text:(R=P.$el_text)==null?void 0:R.slice(0,400),tag_name:P.tag_name,href:(N=P.attr__href)==null?void 0:N.slice(0,2048),attr_class:zp(P),attr_id:P.attr__id,nth_child:P.nth_child,nth_of_type:P.nth_of_type,attributes:{}};return Vr(P).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(r=m[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Un=ne("[ExceptionAutocapture]"),ql=()=>{},Rf=ne("[TracingHeaders]"),jt=ne("[Web Vitals]"),Vl=9e5,Gl="disabled",Kl="lazy_loading",Hn="awaiting_config",Mr="missing_config";ne("[SessionRecording]"),ne("[SessionRecording]");var ko="[SessionRecording]",ut=ne(ko),Tf=ne("[Heatmaps]");function Ns(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Lr=ne("[Product Tours]"),Ms=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(ia))},Nf=["$set_once","$set"],et=ne("[SiteApps]"),Jl="Error while initializing PostHog app with config id ";function an(t,e,n){if(B(t))return!1;switch(n){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 Mf{constructor(e){this.ns=new pa,this.ss=(n,r)=>this.os(n,r)&&this.ls(n,r)&&this.us(n,r)&&this.hs(n,r),this.os=(n,r)=>r==null||!r.event||n?.event===r?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;x((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((r,i)=>{this.on(r,i)}))}register(e){var n,r;if(!x((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(r=this._instance)!=null&&r.autocapture)){var i,s=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&s.add(l?.selector)}))})),(i=this._instance)==null||i.autocapture.setElementSelectors(s)}}on(e,n){var r;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach((i=>{this.cs(n,i)&&this.ns.emit("actionCaptured",i.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var r of n.steps)if(this.ss(e,r))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!an(i,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var r;if(n==null||!n.href)return!0;var i=this.bs(e);if(i.length>0)return i.some((a=>an(a.href,n.href,n.href_matching||"exact")));var s,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&an((s=o.match(/(?::|")href="(.*?)"/))?s[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var r;if(n==null||!n.text)return!0;var i=this.bs(e);if(i.length>0)return i.some((u=>an(u.text,n.text,n.text_matching||"exact")||an(u.$el_text,n.text,n.text_matching||"exact")));var s,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(s=(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=n.text,a=n.text_matching||"exact",s.some((u=>an(u,o,a))))}ys(e,n){var r,i;if(n==null||!n.selector)return!0;var s=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(s!=null&&s.includes(n.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||vd(n.properties.reduce(((r,i)=>{var s=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:s,operator:i.operator||"exact"},r}),{}),e?.properties)}}class Lf{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((r=>this.Ss(r)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&vd(e.propertyFilters,n?.properties)}Ps(e,n){var r=new Map;return e.forEach((i=>{var s;(s=i.conditions)==null||(s=s[n])==null||(s=s.values)==null||s.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,n,r){var i=(r===Ln.Activation?this.ws:this.ks).get(e),s=[];return this.As((o=>{s=o.filter((a=>i?.includes(a.id)))})),s.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,n)}))}register(e){var n;x((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((r=>{var i,s;return((i=r.conditions)==null?void 0:i.actions)&&((s=r.conditions)==null||(s=s.actions)==null||(s=s.values)==null?void 0:s.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new Mf(this._instance),this.Os.init(),this.Os.fs((r=>{this.onAction(r)}))),n.forEach((r=>{var i,s,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(s=r.conditions)!=null&&(s=s.actions)!=null&&s.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 n,r=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.events)&&((a=s.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),i=e.filter((s=>{var o,a;return((o=s.conditions)==null?void 0:o.cancelEvents)&&((a=s.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&i.length===0||((n=this._instance)==null||n._addCaptureHook(((s,o)=>{this.onEvent(s,o)})),this.ws=this.Ps(e,Ln.Activation),this.ks=this.Ps(e,Ln.Cancellation))}onEvent(e,n){var r,i,s=this.Ds(),o=(n==null||(r=n.properties)==null?void 0:r.$survey_id)||(n==null||(i=n.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return s.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return s.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,Ln.Cancellation);l.length>0&&(s.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){s.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,Ln.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var r=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),i=[];for(var s of e)r&&this.Cs(s)?this.qs(s)&&this.Us(s):i.push(s);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 n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((s=>!n.has(s)));var r=this.Zs(),i=r.filter((s=>!n.has(s)));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(E({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),r={},i=!1;for(var s of Object.entries(n)){var o=s[0],a=s[1];e.includes(o)?i=!0:r[o]=a}i&&(yt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return he(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],s=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return s&&i===s?r:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,r=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),s=this.Qs();i.length>0&&(this.Ws([]),i.filter((o=>he(s[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class Of extends Lf{constructor(e){super(e)}Js(){return lo}Ys(){return Wr}Ms(){return zr}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[zr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(zr)}Cs(e){var n,r;this.As((s=>{r=s.find((o=>o.id===e))}));var i=(n=r)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return he(i)&&i>0}ra(){return vt.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return V}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[lo]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Wr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Wr)}ea(){return!1}$s(e,n){var r;this.As((s=>{r=s.find((o=>o.id===n))}));var i=!r||(function(s){var o;return _d(s)&&!((o=s.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||s.schedule==="always"})(r);return i?e===vt.SHOWN?"consume":"ignore":e===vt.SHOWN?"persist":e===vt.DISMISSED||e===vt.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Or="SDK is not enabled or survey functionality is not yet loaded",Yl="Disabled. Not loading surveys.",Bf=v!=null&&v.location?_i(v.location.hash,"__posthog")||_i(location.hash,"state"):null,Zl="_postHogToolbarParams",Xl=ne("[Toolbar]"),Ql=ne("[FeatureFlags]");class Df{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((r,i)=>{var s,o,a,l;return{bootstrap:{featureFlags:(s=r.bootstrap)==null?void 0:s.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:L(r.flag_keys)?r.flag_keys:void 0}})(e,n),!e.evaluation_environments||e.evaluation_contexts||this.na||(Ql.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Ql.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var ec=ne("[FeatureFlags]"),Ut=ne("[FeatureFlags]",{debugEnabled:!0}),Ls=`" failed. Feature flags didn't load in time.`,tc="connection_error",nc=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},rc=t=>{var e={};for(var n of Vr(t||{})){var r=n[1];r&&(e[n[0]]=r)}return e},tt=ne("[Error tracking]"),ic="Refusing to render web experiment since the viewer is a likely bot",jf={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>bi(e,t),not_regex:(t,e)=>!bi(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),n.getWebExperiments((i=>{ye.aa("retrieved web experiments from the server"),n.oa=new Map,i.forEach((s=>{if(s.feature_flag_key){var o;n.oa&&(ye.aa("setting flag key ",s.feature_flag_key," to web experiment ",s),(o=n.oa)==null||o.set(s.feature_flag_key,s));var a=n._instance.getFeatureFlag(s.feature_flag_key);W(a)&&s.variants[a]&&n.la(s.name,a,s.variants[a].transforms)}else if(s.variants)for(var l in s.variants){var u=s.variants[l];ye.ua(u,n._instance)&&n.la(s.name,l,u.transforms)}}))}),r)},this._instance=e,this._instance.onFeatureFlags((r=>{this.onFeatureFlags(r)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(ic);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((n=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(n)){var i,s=this._instance.getFeatureFlag(n),o=(i=this.oa)==null?void 0:i.get(n);s&&o!=null&&o.variants[s]&&this.la(o.name,s,o.variants[s].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var n=bn(e?.search,"__experiment_id"),r=bn(e?.search,"__experiment_variant");n&&r&&(ye.aa("previewing web experiments "+n+" && "+r),this.getWebExperiments((i=>{this.ha(parseInt(n),r,i)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!n)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:s=>e(s.statusCode===200&&s.json&&s.json.experiments||[])})}ha(e,n,r){var i=r.filter((s=>s.id===e));i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+n+"]"),this.la(i[0].name,n,i[0].variants[n].transforms))}static ua(e,n){return!B(e.conditions)&&ye.da(e,n)&&ye.va(e)}static da(e,n){var r;if(B(e.conditions)||B((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var s,o,a,l=Nu(n,i.href);return(s=e.conditions)==null||!s.url||jf[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var n;if(B(e.conditions)||B((n=e.conditions)==null?void 0:n.utm))return!0;var r=Ju();if(r.utm_source){var i,s,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((s=e.conditions)==null||(s=s.utm)==null?void 0:s.utm_campaign)==r.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==r.utm_source,f=(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,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==r.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;n>i;i++)r[i-1]=arguments[i];k.info("[WebExperiments] "+e,r)}la(e,n,r){this._is_bot()?ye.aa(ic):n!=="control"?r.forEach((i=>{if(i.selector){var s;ye.aa("applying transform of variant "+n+" for experiment "+e+" ",i);var o=(s=document)==null?void 0:s.querySelectorAll(i.selector);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 ke&&this._instance?fd(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=ne("[Conversations]"),Ht="Conversations not available yet.",sc="console",Sd="__posthogHandledLogsRequestError",Os=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[Sd]=!0,n},oc=t=>!!t&&typeof t=="object"&&t[Sd]===!0,ji={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=ec,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 Df(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.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=[],v?.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[Gn,Kn,Hr,rt]){var n=this.Oa(e);x(n)||(t[e]=n)}this.fa=t;var r=E({},t),i=this.Oa(Wt);if(i)for(var s of Object.entries(i))r["$feature/"+s[0]]=s[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Qn);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,r=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,s,o=(i=(s=n.bootstrap)==null?void 0:s.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,n){var r,i,s=n!=null&&n.merge&&(r=this.Oa(Wt))!==null&&r!==void 0?r:{},o=n!=null&&n.merge&&(i=this.Oa(Kn))!==null&&i!==void 0?i:{},a=E({},s,t),l=E({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Xa(h),variant:Qa(h),reason:void 0,metadata:x(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(oo),e=this.Oa(rt),n=this.Oa(zt);if(!n&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var s of i){var o,a,l=r[s],u=e?.[s],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=n?.[s],p=E({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=E({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[s]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var r=t[n];return{key:n,enabled:Xa(r),variant:Qa(r),payload:Za(e[n])}}))}getFlagVariants(){var t=this.Oa(Wt),e=this.Oa(rt);if(!e)return t||{};for(var n=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)n[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Kn),e=this.Oa(zt);if(!e)return t||{};for(var n=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)n[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Gt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:E({},e.initialPersonProperties,this.Oa(ht)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(qt),timezone:td()};x(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var r=this.Na();r.length&&(n.evaluation_contexts=r);var i=this.qa();x(i)||(n.flag_keys=i);var s=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(s?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[qr]:[tc]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?tc:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[qr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,f,{partialResponse:s}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Gu(this.Sa,3)}Ua(t){this.Sa=Ku(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(n=r?.variant)!==null&&n!==void 0?n:r?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+Ls)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,r=this.getFlagVariants(),i=t in r,s=r[t],o=this.getFlagPayloads()[t],a=String(s),l=this.Oa(Hr)||void 0,u=this.Oa(Qn)||void 0,c=this.Oa(Gt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Yn);h&&h!==p&&(c={},n=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Gt]:c,[Yn]:n});else{var f,g,m,_,w,b,I,A,F,j;L(c[t])?c[t].push(a):c[t]=[a],this.F(E({[Gt]:c},n?{[Yn]:n}:{}));var S=this.getFeatureFlagDetails(t),P=[...(f=this.Oa(qr))!==null&&f!==void 0?f:[]];x(s)&&P.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:s,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(w=S.metadata)==null?void 0:w.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(A=S.reason)==null?void 0:A.code;T&&(R.$feature_flag_reason=T),S!=null&&(F=S.metadata)!=null&&F.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(j=S.metadata)!=null&&j.original_payload&&(R.$feature_flag_original_payload=S==null||(N=S.metadata)==null?void 0:N.original_payload),P.length&&(R.$feature_flag_error=P.join(",")),this.za(R)}else n&&this.F({[Gt]:c,[Yn]:n});if(i)return{key:t,enabled:!!s,variant:typeof s=="string"?s:void 0,payload:Za(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+Ls)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return X((function*(){var r=n.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},s=n.Na();s.length&&(i.evaluation_contexts=s);var o,a=n.qa();x(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:n.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+Ls),e.defaultValue;var n=this.getFeatureFlag(t,e);return x(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var r=(function(i,s,o,a,l,u){s===void 0&&(s={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=ec);var c=((F,j)=>{var S=F.flags;return S?E({},F,{featureFlags:Object.fromEntries(Object.keys(S).map((P=>{var R;return[P,(R=S[P].variant)!==null&&R!==void 0?R:S[P].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((P=>S[P].enabled)).filter((P=>{var R;return(R=S[P].metadata)==null?void 0:R.payload})).map((P=>{var R;return[P,(R=S[P].metadata)==null?void 0:R.payload]})))}):(F.featureFlags&&j.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),F)})(i,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=i.requestId,g=i.evaluatedAt;if(L(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(h)for(var _=0;h.length>_;_++)m[h[_]]=!0;return{[Gn]:h,[Wt]:m,[ci]:!1}}var w=h,b=p,I=d;if(l!=null&&l.partialResponse)w=E({},s,w),b=E({},o,b),I=E({},a,I);else if(i.errorsWhileComputingFlags)if(d){var A=new Set(Object.keys(d).filter((F=>{var j;return!((j=d[F])!=null&&j.failed)})));w=E({},s,Object.fromEntries(Object.entries(w).filter((F=>A.has(F[0]))))),b=E({},o,Object.fromEntries(Object.entries(b||{}).filter((F=>A.has(F[0]))))),I=E({},a,Object.fromEntries(Object.entries(I||{}).filter((F=>A.has(F[0])))))}else w=E({},s,w),b=E({},o,b),I=E({},a,I);return E({[Gn]:Object.keys(rc(w)),[Wt]:w||{},[Kn]:b||{},[oo]:I||{},[ci]:i.minimalFlagCalledEvents===!0},f?{[Hr]:f}:{},g?{[Qn]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,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([rt,zt]),this.Va(),void Ut.info("All overrides cleared");if(L(t))return this.F({[rt]:nc(t)}),this.Va(),void Ut.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var r={},i=n.flags,s=n.payloads;return i&&(r[rt]=L(i)?nc(i):i),s&&(r[zt]=s),Object.keys(r).length&&this.F(r),i===!1&&s===!1?this.q([rt,zt]):i===!1?this.q(rt):s===!1&&this.q(zt),this.Va(),i===!1?Ut.info("Flag overrides cleared"):i&&Ut.info("Flag overrides set",{flags:i}),void(s===!1?Ut.info("Payload overrides cleared"):s&&Ut.info("Payload overrides set",{payloads:s}))}if(t&&typeof t=="object")return this.F({[rt]:t}),this.Va(),void Ut.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,r=e.flagVariants;try{t(n,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var r=(this.Oa(Ur)||[]).find((l=>l.flagKey===t)),i={["$feature_enrollment/"+t]:e},s={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(s.$early_access_feature_name=r.name),n&&(s.$feature_enrollment_stage=n);var o=E({},this.getFlagVariants(),{[t]:e});this.F({[Gn]:Object.keys(rc(o)),[Wt]:o,[ht]:E({},this.Oa(ht)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",s).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var r=this.Oa(Ur);!r||e?this.Qa(t,n):t(r)}Qa(t,e){var n=this;return X((function*(){var r=n.nn;if(r){var i,s=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+s,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Ur]:i=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,r)=>(n[r]=e[r],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach((i=>{try{i(n,r,{errorsLoading:t})}catch(s){this.rt.error("Error while running feature flags callback",s)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(ht)||{},r=t?.$set||(t!=null&&t.$set_once?{}:t),i=t?.$set_once,s={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in n||(s[o]=i[o]));this.F({[ht]:E({},n,s,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=E({},this.Oa(ht)||{});t.forEach((r=>{delete n[r]})),this.F({[ht]:n}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ht),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=this.Oa(qt)||{},r=E({},n);for(var i of Object.keys(t))r[i]=E({},n[i],t[i]);this.F({[qt]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(qt)||{};this.F({[qt]:E({},e,{[t]:{}})})}else this.q(qt)}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}}},Uf={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===Hn||this.Ya===Mr?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=Gl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var n=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.some((r=>r.name==="visible"))})(),this.Ie=()=>{var e;C?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw ut.error("started without valid sessionManager"),new Error(ko+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===gt)throw new Error(ko+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Jt))==null||!t.enabled),n=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&n&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!x(Object.assign)&&!x(Array.from);this.ro&&n?(this.no(t),ut.info("starting")):(this.Ya=Gl,this.stopRecording())}}no(t){var e,n,r;this.ro&&(this.Ya!==Hn&&this.Ya!==Mr&&(this.Ya=Kl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=$.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,(i=>{if(i)return ut.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(sa),(e=this.Mr)==null||e.unregister(Su)}uo(t,e){if(B(t))return null;var n,r=he(t)?t:parseFloat(t);return typeof(n=r)!="number"||!Number.isFinite(n)||0>n||n>1?(ut.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,n,r=this.Mr,i=()=>{var s,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((s=this.Ne.session_recording)==null?void 0:s.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;B(u)&&this.lo();var c=o?.minimumDurationMilliseconds;r.register({[Jt]:E({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:E({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.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===Hn&&(this.Ya=Mr,ut.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):ut.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Jt);return(n==null||(e=n.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Jt);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(n){return ut.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!B(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,r;if(!this.eo){if((e=$.__PosthogExtensions__)==null||!e.initSessionRecording)return ut.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[$u]:!0});var i;if(this.Ja||(this.Ja=(i=$.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Mr||this.Ya===Hn?void 0:(this.Ya=Hn,ut.info("persisted remote config is stale, requesting fresh config before starting"),void new nd(this._instance).load());this.Ya=Kl,(n=(r=this.Ja).setDocumentWasEverVisible)==null||n.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({[ku]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[xu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?Iu:Cu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},Hf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new zl(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,n=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((r=>new RegExp(r))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((r=>new RegExp(r))),n}yo(){if(this.isBrowserSupported()){if(v&&C){var t=n=>{n=n||v?.event;try{this.bo(n)}catch(r){Rs.error("Failed to capture event",r)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||v?.event;try{this.bo(n,$s)}catch(r){Rs.error("Failed to capture copy/cut event",r)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else Rs.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;Ye(n)&&(this.instance.persistence&&this.instance.persistence.register({[Qs]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((r=>{var i=C?.querySelectorAll(r);i?.forEach((s=>{t===s&&n.push(r)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[Qs],r=this.co,i=this.instance.Qi()&&!this.fo;if($e(r)&&!Ye(n)&&!i)return!1;var s=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!s}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,r=ys(t);Lu(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&wl(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===$s;if(r&&(function(d,h,p,f,g,m){var _;if(!v||ua(d)||p!=null&&p.url_allowlist&&!vl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&vl(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var b=Hu(d,f),I=b.parentIsUsefulElement,A=b.targetElementList;if(!(function(S,P){var R=P?.element_allowlist;if(x(R))return!0;var N,T=function(J){if(R.some((q=>J.tagName.toLowerCase()===q)))return{v:!0}};for(var O of S)if(N=T(O))return N.v;return!1})(A,p)||!mo(A,p?.css_selector_allowlist)||mo(A,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:Bp))return!1;try{var F=v.getComputedStyle(d);if(F&&F.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var j=d.tagName.toLowerCase();switch(j){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return I?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(ca.indexOf(j)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var s=$f(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=s.props;if(s.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===$s){var l,u=Du(v==null||(l=v.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 Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(r,i,s){try{if(!(i in r))return ql;var o={next:r[i]},a=s((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return Se(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];Se(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 ql}})(v.history,t,(r=>function(i,s,o){r.call(this,i,s,o),n.So(t)}))}}So(t){try{var e,n=v==null||(e=v.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(cn,{navigation_type:t}),this._o=n}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.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[eo]),this.rageclicks=new zl(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;Tf.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[eo]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ns(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,fi,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new Cl(this.instance,qp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,pi,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(fi,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(pi,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),s=(function(o,a,l){for(var u=o;u&&$t(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(M(a,c))return!0;u=ju(u)}return!1})(ys(t),["fixed","sticky"],i);return{x:t.clientX+(s?0:r),y:t.clientY+(s?0:n),target_fixed:s,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!ml(t.target)&&Ns(t)){var r=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&wl(ys(t),this.instance.config.rageclick)&&this.Vt(E({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!ml(t.target)&&Ns(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Pt(v.location.href):v.location.href,n=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[...En,...n||[]]:[],i=ur(e,r,dr);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!yt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Cl,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",E({$current_url:this.R.url},this.R.metrics.reduce(((n,r)=>E({},n,{["$web_vitals_"+r.name+"_event"]:E({},r),["$web_vitals_"+r.name+"_value"]:r.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},B(n?.name)||B(n?.value))jt.error("Invalid metric received",n);else{var i=typeof n.navigationURL=="string"?n.navigationURL:void 0,s=this.Bo(i);if(!x(s)){var o=he(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+s;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=s),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=E({},n,i?{navigationURL:s}:{},{$current_url:s,timestamp:Date.now()});x(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 jt.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,r,i,s,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(n=l.onLCP,r=l.onCLS,i=l.onFCP,s=l.onINP),n&&r&&i&&s){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(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&&s(this.jo.bind(this),u),this.vo=!0}else jt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[io]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return B(n)?((e=this._instance.persistence)==null?void 0:e.props[so])||["CLS","FCP","INP","LCP"]:n}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)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Vl;return t>0&&6e4>=t?Vl:t}get isEnabled(){var t=re?.protocol;if(t!=="http:"&&t!=="https:")return jt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ye(this.Wo)?this.Wo:void 0;return Ye(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(jt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=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({[io]:n}),this._instance.persistence.register({[so]:r})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,n=this.zo,r=e?.postHogWebVitalsCallbacksByFlavor;r!=null&&r[n]||n==="web-vitals"&&x(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(i=>{i?jt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?Pt(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...En,...r||[]]:[];return ur(n,i,dr)}jt.error("Could not determine current URL")}}},Wf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(v&&this.isEnabled&&(n=$.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var r=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,s=$.__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=s(this.captureException.bind(this)))}catch(o){Un.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[to]),this.Jo=new jh(E({},(function(n){var r,i,s,o;return n===void 0&&(n={}),{refillRate:(r=(i=n.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:n.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(s=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&s!==void 0?s:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Un})),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=E({},e,t):(x(t)?this.Ko:t)&&(e=E({},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?(Un.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(r=>{if(r)return Un.error("failed to load script",r);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[to]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,r,i=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Un.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,n;this.Xo=[],this.tl=new rp([new dp,new wp,new pp,new hp,new _p,new vp,new gp,new yp],(function(r){for(var i=arguments.length,s=new Array(i>1?i-1:0),o=1;i>o;o++)s[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` +`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=hl.test(h)?h.replace(hl,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of s){var g=f(p,r);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var _=Array.from(m);return _.reverse(),_.slice(0,50).map((w=>{return E({},w,{filename:w.filename||(b=_,b[b.length-1]||{}).filename,function:w.function||wn});var b}))})(u)}})("web:javascript",ap,up)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(no))!==null&&e!==void 0?e:[],this.el=li(this.il()),this.rl=new Ep(this.el)}onConfigChange(){this.el=li(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,r;if(t.ok){var i=t.config;if("errorTracking"in i){var s=(e=(n=i.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=s,this._instance.persistence&&this._instance.persistence.register({[no]:this.Xo,[ro]:o})}}}get nl(){var t,e=!!this._instance.get_property(ro),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void tt.warn("Ignoring exception step because message must be a non-empty string");var n=(function(s){if(!s)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(s).reduce(((a,l)=>bp.has(l)?(o.push(l),a):(a[l]=s[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=n.sanitizedProperties,i=n.droppedKeys;i.length>0&&tt.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(E({[oi]:t,[ai]:new Date().toISOString()},r))}catch(s){tt.error("Failed to add exception step. Ignoring breadcrumb.",s)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void tt.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 tt.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 tt.info("Skipping exception capture because it was thrown by the PostHog SDK")}var n=this.el.enabled&&B(t.$exception_steps)?this.dl(t):t,r=typeof(s=globalThis._posthogReleaseId)=="string"&&s.length>0?s:void 0;r&&(n.$release_id=r);try{var i=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return tt.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void tt.error("Failed to process exception event. Ignoring this exception.",o)}var s}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:E({},t,{$exception_steps:e})}catch(n){return tt.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[oi]:t,[ai]:new Date().toISOString()})}sl(t){return te(t)?E({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,r)=>{var i=r.type,s=r.value;return W(i)&&i.length>0&&n.$exception_types.push(i),W(s)&&s.length>0&&n.$exception_values.push(s),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var r=n.values.map((i=>{var s=md[i.operator],o=e[i.key];if(!s||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&s(a,o)}));return n.type==="OR"?r.some(Boolean):r.every(Boolean)}))}catch(n){return tt.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,r;return(n=(r=e.stacktrace)==null?void 0:r.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,r,i,s=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=s[s.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)&&L(t)}}},zf=E({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,r;if(this.Mr&&this.Mr.register({[ia]:!!e.productTours}),!Ms(this._instance))return!this.vl&&B((n=this.Mr)==null?void 0:n.props[Jn])||Lr.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&&Ms(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(r=>{r?Lr.error("Could not load product tours script",r):t()}))}fl(){var t;!this.vl&&(t=$.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=$.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!L(this.cl)||e){var n=this.Mr;if(n){var r=n.props[Jn];if(L(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(Ms(this._instance)){var s=i.statusCode;if(s!==200||!i.json){var o="Product Tours API could not be loaded, status: "+s;return s===0?i.error||Lr.warn(o):Lr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,n&&n.register({[Jn]: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(Jn)}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)}}},ji),qf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,r,i,s,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:E({},Uc(t,Nf),{properties:E({},t.properties,f?{$set:E({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:E({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(s=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&s!==void 0?s:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(et.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(et.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,r,i,s,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=C?.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,p=(m,_,w)=>{if(m!=null&&m[_]){var b=m[_];m[_]=w(b),c.push((()=>{m[_]=b}))}},f=m=>{if(h.has(m))return m;var _=d.bl(m);return _&&h.add(_),_},g=m=>m.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(m=>function(_){var w=f(_);return w?m.call(this,w):_})),p(u,"insertBefore",(m=>function(_,w){var b=f(_);return b?m.call(this,b,w):_})),p(u,"replaceChild",(m=>function(_,w){var b=f(_);return b?m.call(this,b,w):w})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"prepend",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))}))})),[(i=l.Element)==null?void 0:i.prototype,(s=l.CharacterData)==null?void 0:s.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"after",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"replaceWith",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];var A=g(b);return b.length&&!A.length?void 0:_.apply(this,A)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,w){var b=f(w);return b?m.call(this,_,b):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var r=t(n);return e&&n(),r}catch(i){throw n(),i}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{var o;!e.errored&&this.gl.length&&(et.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},r=!1,i=o=>{e.errored=!o,e.loaded=!0,et.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&n()};try{var s=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),i(a)}})),!1).processEvent;s&&(e.processEvent=s),r=!0}catch(o){et.error(Jl+t.id,o),i(!1)}if(r&&e.loaded)try{n()}catch(o){et.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),r=function(s){try{e.xl((()=>s.processEvent==null?void 0:s.processEvent(n)))}catch(o){et.error("Error while processing event "+t.event+" for site app "+s.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,n,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 et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((n=this.yl)==null||n.call(this),t.ok){var s=t.config;if((r=s.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,(d=>{if(d)return et.error(Jl+u,d)}))};for(var a of s.siteApps)o()}else et.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Vf={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,r=this.Il();r?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(n=$.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(r=>{if(r)return Rf.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 L(t)?(L(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(L(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()}}},Gf=E({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 n=L(e);this.Rl=n?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=[],n=0;nlocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)V.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)V.info(Yl);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())V.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var r=t.loadExternalDependency;if(!r)return void this.$l(oa);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 Of(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(Yl),t([]);var n,r=this._instance.get_property(ao);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=>{n=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 s;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(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter((p=>(function(f){return!(!f.start_date||f.end_date)})(p)&&(_d(p)||(function(f){var g;return!((g=f.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(s=this._instance.persistence)==null||s.register({[ao]:c,[ui]:Date.now()});var h={isLoaded:!0};t(c,h),n?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ui);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,r={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};wd(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(n){V.error("Error in survey callback",n)}}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((n=>{var r;e=(r=n.find((i=>i.id===t)))!==null&&r!==void 0?r:null})),e}Ul(t){if(B(this._surveyManager))return{eligible:!1,reason:Or};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:Or};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:Or};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:Or})):new Promise((n=>{this.getSurveys((r=>{var i,s=(i=r.find((a=>a.id===t)))!==null&&i!==void 0?i:null;if(s){var o=this.zl(s);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var 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(yf.includes(i.type)){var s=C?.querySelector(e);if(s)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,s,n),V.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,s,n);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 n;if(B(this._surveyManager))V.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((n=r.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=E({},r,{appearance:E({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==_o.Popover&&e.initialResponses&&V.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var s=this.Ul(r);if(!s.eligible)return void V.warn("Survey is not eligible to be displayed: ",s.reason)}e.displayType!==_o.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()}}},ji),Kf={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),go(this.instance.config)||!v||!C)return!1;t=t??v.location,n=n??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var r,i=Bf||_i(t.hash,"__posthog")||_i(t.hash,"state"),s=i?fl((()=>JSON.parse(atob(decodeURIComponent(i)))))||fl((()=>JSON.parse(decodeURIComponent(i)))):null;return s&&s.action==="ph_authorize"?((r=s).source="url",r&&Object.keys(r).length>0&&(s.desiredHash?t.hash=s.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(Zl)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token||(this.loadToolbar(r),0))}catch{return!1}}Zl(t){var e=$.ph_load_toolbar||$.ph_load_editor;!B(e)&&Se(e)?e(t,this.instance):Xl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(Mu));if(!v||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=E({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(v.localStorage.setItem(Zl,JSON.stringify(E({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var i;this.Wl(1),(i=$.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",(s=>{if(s)return Xl.error("[Toolbar] Failed to load",s),void this.Wl(0);this.Wl(2),this.Zl(r)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(r)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},Jf=E({experiments:ye},ji),Yf={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)||(Ye(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||go(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(oa);n(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 Ue.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,Ue.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else Ue.error("Cannot complete initialization: remote config is null")}eu(t,e){Ue.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():Ue.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":go(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?B(this.Jl)||!this.Jl.token?"missing_token":$!=null&&$.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,n){var r=this;return X((function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,n):(Ue.warn(Ht),null)}))()}getMessages(t,e){var n=this;return X((function*(){return n._conversationsManager?n._conversationsManager.getMessages(t,e):(Ue.warn(Ht),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Ht),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Ht),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Ht),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Ht),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Ht),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()}}},Zf={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ne("[logs]"),this.nu=E({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),s=0;r>s;s++)i[s]=arguments[s];i.some(oc)||n.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),v&&ie(v,"online",this.au)}uu(t,e,n,r){var i,s=(function(o,a){var l,u,c,d,h,p,f,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=x(_)?Math.max(m,2048):Math.max(m,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,n);return[new ep(this.hu(t,e),s,this.nu,(()=>this.du()),(o=>o()),void 0,r),s]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var 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 n;(n=this.lu)==null||n.reset(),this.gu=e;var r=this.uu((()=>this.su),(i=>{this.su=i}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},sc);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!B(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){oc(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(n=>{var r;n||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(oa)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:r=>r===pt.LogsQueue?t():void 0,setPersistedProperty(r,i){var s;r===pt.LogsQueue&&e((s=i)!==null&&s!==void 0?s:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Gu(this.Sa,3))e({kind:"fatal",error:Os(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,r=s=>{n||(n=!0,clearTimeout(i),e(s))},i=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:Os(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:s=>{var o=s.statusCode;if(this.ku(o),o>=200&&300>o)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?(s.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:Os(s.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=s.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Ku(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,sc,(e=>{this.su=e}))}xu(t,e,n,r,i){if(e.length!==0){var s=e.map((a=>a.record));i([]);var o=_u(s,vu(n,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 n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=n.windowId,i=n.sessionStartTimestamp,s=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=r,B(i)||(e.sessionStartTimestamp=i),B(s)||(e.lastActivityTimestamp=s)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Pt($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Xf={metrics:class{constructor(t){this.rt=ne("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new tp(this.hu(),(function(r){var i,s,o,a,l,u=r?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:r?.serviceName,serviceVersion:(s=u?.["service.version"])!==null&&s!==void 0?s:r?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:r?.environment,resourceAttributes:u,beforeSend:r?.beforeSend,flushIntervalMs:(a=r?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(s),n(o))},s=setTimeout((()=>i({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(E({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)}}},Qf=E({},ji,Uf,Hf,Wf,zf,qf,Gf,Vf,Kf,Jf,Yf,Zf,Xf);Te.__defaultExtensionClasses=E({},Qf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=nr[un]=new Te;return(function(){function e(){e.done||(e.done=!0,Ed=!1,Z(nr,(function(n){n._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const eg=["a[href]","button:not([disabled])","input:not([disabled]):not([type='hidden'])","select:not([disabled])","textarea:not([disabled])","[tabindex]:not([tabindex='-1'])"].join(",");let Je=null,Io=null,xd="";const Co=new Map;function kd(t){return[...t.querySelectorAll(eg)].filter(e=>!e.hidden&&e.getAttribute("aria-hidden")!=="true"&&e.getClientRects().length>0)}function tg(t){for(const e of document.body.children)e===t||e.tagName==="SCRIPT"||(Co.set(e,{inert:e.inert,ariaHidden:e.getAttribute("aria-hidden")}),e.inert=!0,e.setAttribute("aria-hidden","true"))}function ng(){for(const[t,e]of Co)t.inert=e.inert,e.ariaHidden===null?t.removeAttribute("aria-hidden"):t.setAttribute("aria-hidden",e.ariaHidden);Co.clear()}function Id(t){return t?.dataset.modalDismissible!=="false"&&t?.getAttribute("aria-busy")!=="true"}function Ve(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n)return!1;Je&&Je!==n&&Xe(Je,{restoreFocus:!1,force:!0}),Io=e.trigger||document.activeElement,Je=n,xd=document.body.style.overflow,tg(n),document.body.style.overflow="hidden",n.classList.add("open"),n.setAttribute("aria-hidden","false");const r=n.querySelector(".modal-content");r&&(r.style.transform="scale(1) translateY(0)");const i=()=>{if(Je!==n)return;((e.initialFocus?n.querySelector(e.initialFocus):n.querySelector("[data-modal-initial-focus]"))||kd(n)[0]||n.querySelector(".modal-content")||n).focus({preventScroll:!0})};return requestAnimationFrame(i),setTimeout(i,260),!0}function Xe(t,e={}){const n=typeof t=="string"?document.getElementById(t):t;if(!n||!e.force&&!Id(n))return!1;n.classList.remove("open"),n.setAttribute("aria-hidden","true"),ng(),document.body.style.overflow=xd,Je=null;const r=Io;return Io=null,e.restoreFocus!==!1&&r?.isConnected&&r.focus({preventScroll:!0}),!0}function ac(t,e,n="Operation in progress"){const r=typeof t=="string"?document.getElementById(t):t;r&&(r.dataset.modalDismissible=e?"false":"true",r.setAttribute("aria-busy",String(!!e)),e?r.setAttribute("aria-label",n):r.removeAttribute("aria-label"))}function rg(t){if(!Id(t))return;const e=t.dataset.modalCloseHandler;e&&typeof window[e]=="function"?window[e]():Xe(t)}document.addEventListener("keydown",t=>{if(!Je)return;if(t.key==="Escape"){t.preventDefault(),t.stopImmediatePropagation(),rg(Je);return}if(t.key!=="Tab"){t.stopPropagation();return}const e=kd(Je);if(!e.length){t.preventDefault(),(Je.querySelector(".modal-content")||Je).focus();return}const n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())},!0);function ig(){document.querySelectorAll(".modal-overlay").forEach(t=>{t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-hidden",t.classList.contains("open")?"false":"true");const e=t.querySelector(".modal-content");e&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1);const n=t.querySelector("h1, h2, h3");n&&(n.id||(n.id=`${t.id}-title`),t.setAttribute("aria-labelledby",n.id)),t.querySelectorAll(".modal-close").forEach(r=>{r.getAttribute("aria-label")||r.setAttribute("aria-label","Close dialog")})})}const Cd="CodeFile",Ad="GeneratedCode",sg={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function At(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function Ao(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function og(t={},e=0){const n=Ao(t.artifactType||t.type||Cd),r=Ao(t.artifactName||t.name||t.fileName||`${Ad}-${e+1}`);return`${n||"artifact"}-${r||e+1}`}function Fd(t={},e=0){const n=At(t),r=n.artifactType||n.type||Cd,i=n.artifactName||n.name||Ad;let s=n.fileName||i;return s.endsWith(".dart")||(s+=".dart"),{id:Ao(n.id)||og({...n,artifactType:r,artifactName:i,fileName:s},e),artifactType:r,artifactName:i,fileName:s,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:Pd(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:$d(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:At(n.metadata),codeType:n.codeType||sg[r]||"O"}}function Pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=At(e),r=n.name||n.package;return r?{name:r,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(At(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function $d(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=At(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function Fo(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function hr(t,e={}){const n=[],r=typeof t=="string"?Fo(t):t,s=At(r||{});!r&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(s.artifacts)?s.artifacts:[{artifactType:s.artifactType||e.artifactType,artifactName:s.artifactName||e.artifactName,fileName:s.fileName||e.fileName,description:s.description,code:s.code||e.code||(typeof t=="string"?t:""),dependencies:s.dependencies||e.dependencies,relationships:s.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>Fd(d,h)),l=new Map(o.map((d,h)=>[At(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=$d(s.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:s.schemaVersion||e.schemaVersion||null,id:s.id||e.id||"bundle-current",title:s.title||s.name||e.title||"Generated artifact bundle",description:s.description||e.description||"",artifacts:a,dependencies:Pd(s.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(s.deployOrder)?s.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(s.warnings)?s.warnings:[]],metadata:At(s.metadata)}}function Si(t){return hr(t).artifacts[0]||Fd()}function Et(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function xn(t){return JSON.stringify(t,null,2)}function ag(t){return xn({task:"architect",userRequest:String(t??"")})}function lg(t){const e=Et(t);return e&&typeof e=="object"&&typeof e.task=="string"?xn(e):xn({task:"generate_bundle",bundleSpec:e})}function cg(t){return xn({task:"review_bundle",generatedBundle:Et(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function fa(t,e=null){const n={stage:t};return e!=null&&(n.bundle=Et(e)),n}function ug({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:r,userFeedback:i}){return xn({task:"regenerate_artifact",artifactId:r,bundleSpec:Et(t),artifactBundle:Et(e),bundleReview:Et(n),userFeedback:String(i)})}function Rd({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:r}){return xn({task:"regenerate_bundle",bundleSpec:Et(t),artifactBundle:Et(e),bundleReview:Et(n),userFeedback:String(r??"")})}const lc={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"},dg=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function hg(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function Td(t,e=0){if(!Le(t)||e>3)return null;if(hg(t))return t;for(const n of dg){const r=t[n];if(Le(r)){const i=Td(r,e+1);if(i)return i}}return null}function xi(t){return Array.isArray(t)?t.some(xi):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(xi):!1}function Po(t){return Array.isArray(t)?t.some(Po):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(Po):!1}function Nd(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function pg(t,e){if(Le(t))for(const[n,r]of Object.entries(t)){if(!Le(r))continue;const i=Le(r.categories)?r.categories:{},s=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);s.length>0?s.forEach(o=>e.add(o)):r.matched===!0&&e.add(Nd(n))}}function fg(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(r=>Le(r)?Object.entries(r):[]):Object.entries(t);for(const[r,i]of n){if(!xi(i))continue;const s=Nd(r),o=i?.raiFilterResult?.raiFilterTypeResults||(s==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>xi(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(s)}}function gg(t){return lc[t]?lc[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function cc(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 mg(t){const e=Td(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);pg(e.filterSummary,n),fg(e.filterResults,n);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,i=e.invocationResult||null,s=Po(e.filterSummary||e.filterResults);return!r&&!s&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...n]}}function vg(t,e){const n=mg(t);if(!n)return null;const r=[...new Set(n.matchedFilters.map(gg))],i=n.kind==="blocked",s=new Error(i?`Safety screening blocked this pipeline step for ${cc(r)}.`:"Safety screening could not be completed. Please try again.");return s.name="ModelArmorError",s.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",s.isModelArmor=!0,s.pipelineStep=e,s.userTitle=i?"Request blocked for safety":"Safety check unavailable",s.userMessage=i?`The safety check detected ${cc(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.",s.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",s.matchedFilters=n.matchedFilters,s}function _g(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function uc(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,n=[];for(const r of _g(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&&n.push(i[1])}return n}function ga(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(r,i,s)=>s.toUpperCase());if(e==="A"){const r=n.replace(/(^|_)(\w)/g,(i,s,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function dc(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),r=>r.toString(16).padStart(2,"0")).join("")}async function yg(t,e=new Map){const n={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=ga(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await dc(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await dc(c)),n[o]=u,a.type==="F"){const d=uc(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(uc(e.get("lib/flutter_flow/custom_functions.dart")||"")),s={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(s)}}const wg=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),hc={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},bg=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Eg=["Struct","Record"],Sg=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>Bs(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>Bs(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let r;for(;(r=n.exec(e))!==null;){const i=r[1];if(!(new RegExp(`this\\.${i}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${i}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { const W({required this.value}); final double value; @@ -25,44 +25,44 @@ class _S extends State { @override Widget build(BuildContext c) => const Size @override _S createState() => _S(); } class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function nt(t,e,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function pr(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,r),end:r+1};return null}function Sg(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let r=0;for(let i=n.index+n[0].length-1;ixg(t).usable);function Ig(t=""){const e=pr(t);return kg.filter(n=>n.detect(e)).map(({id:n,severity:r,message:i})=>({id:n,severity:r,message:i}))}function Cg(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const r of n){let i=r.index+6,s=null;const o=i;for(;io;if(t[i]==="<"){const u=Eg(t,i);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;ipc(o.functionName)===r);if(i)return i;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Hi(t=""){return Array.from(pr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function Fg(t="",e=""){return ga(t,e)?.returnType||null}function fc(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 Ag(t,e){const n=Hi(e);if(n.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>fc(l)===i)||n.length>1)return null;const[o]=n,a=`${fc(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function ma(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function Pg(t,e,n=""){const r=ga(e,n)?.functionName;if(!r)return null;const i=String(t||"").split("/").pop(),s=fa(i,"A");if(s===r)return null;const o=`${ma(r)}.dart`;return`File name "${i}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function $g(t="",e=""){return ga(t,e)!==null}function Rg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>yg.has(r)?!1:!wg.some(s=>r.endsWith(s))||e.has(r))}function Tg(t,{functionName:e="",declaredTypes:n=new Set}={}){const r=Fg(t,e),i=Rg(r,n);if(i.length===0)return null;const[s]=i;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:r===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", 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 Mg(t,e={}){const n=[],r=t.fileName||"",i=t.code||"";if(_g.has(t.artifactType)||n.push(nt(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||n.push(nt(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return n.push(nt(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||n.push(nt(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of Ig(i))n.push(nt(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!$g(i,t.artifactName)&&n.push(nt(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Hi(i)),o=Tg(i,{functionName:t.artifactName,declaredTypes:s});o&&n.push(nt(t,"error",o));const a=Pg(r,i,t.artifactName);a&&n.push(nt(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&n.push(nt(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=Ag(r,i);s&&n.push(nt(t,"info",s))}return n}function Ng(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Hi(s.code||""))),r=e.flatMap(s=>Mg(s,{declaredTypes:n})),i=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:hc[s.artifactType]||hc.CodeFile}));return{valid:r.every(s=>s.severity!=="error"),findings:r,deployHints:i}}const gc="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function mc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Lg(t=""){const e=t.indexOf(gc);return e===-1?t:t.slice(e+gc.length).replace(/^\s*\n/,"")}const Og=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function Bg(t="",e=""){const n=Lg(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(mc).filter(Boolean)),i=n.split(` -`).filter(s=>{const o=mc(s);return o===null||!r.has(o)?!0:!Og.test(s)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const Dg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function Nd(t){let e="",n=0;for(;n{const r=n.name||n.package;if(!r||r==="flutter")return e;const i=n.versionRequired||n.required;return e[r]=i&&n.version||"",e},{})}function zg(t){const e=new Map,n=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),n.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${n.get(i.path)}" and "${i.artifactId}".`):n.set(i.path,i.artifactId);return r}function qg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=Wg(p),g=p.fixedCode||p.code||"",m=p.codeType||Ug[p.artifactType]||Me.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:f,content:g,type:m,path:p.deployPath||Hg(f,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Me.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} +`;)n++;e+=" "}else if(r==="/*"){for(n+=2;n"&&(n--,n===0))return{inner:t.slice(e+1,r),end:r+1};return null}function kg(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let r=0;for(let i=n.index+n[0].length-1;iIg(t).usable);function Ag(t=""){const e=pr(t);return Cg.filter(n=>n.detect(e)).map(({id:n,severity:r,message:i})=>({id:n,severity:r,message:i}))}function Fg(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const r of n){let i=r.index+6,s=null;const o=i;for(;io;if(t[i]==="<"){const u=xg(t,i);if(!u||(s=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;ipc(o.functionName)===r);if(i)return i;const s=o=>!o.functionName.startsWith("_");return n.find(s)||n[0]}function Ui(t=""){return Array.from(pr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function Pg(t="",e=""){return ma(t,e)?.returnType||null}function fc(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 $g(t,e){const n=Ui(e);if(n.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>fc(l)===i)||n.length>1)return null;const[o]=n,a=`${fc(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function va(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function Rg(t,e,n=""){const r=ma(e,n)?.functionName;if(!r)return null;const i=String(t||"").split("/").pop(),s=ga(i,"A");if(s===r)return null;const o=`${va(r)}.dart`;return`File name "${i}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${s}" and reports Action "${s}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${s}".`}function Tg(t="",e=""){return ma(t,e)!==null}function Ng(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>bg.has(r)?!1:!Eg.some(s=>r.endsWith(s))||e.has(r))}function Mg(t,{functionName:e="",declaredTypes:n=new Set}={}){const r=Pg(t,e),i=Ng(r,n);if(i.length===0)return null;const[s]=i;let o;return n.has(s)?o=`uses Code File type "${s}", which FlutterFlow cannot process as an Action Return Value`:r===s?o="is not a FlutterFlow Action Return Value":o=`uses type "${s}", 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 Lg(t,e={}){const n=[],r=t.fileName||"",i=t.code||"";if(wg.has(t.artifactType)||n.push(nt(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||n.push(nt(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return n.push(nt(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||n.push(nt(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const s of Ag(i))n.push(nt(t,s.severity,s.message))}if(t.artifactType==="CustomAction"&&!Tg(i,t.artifactName)&&n.push(nt(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const s=e.declaredTypes||new Set(Ui(i)),o=Mg(i,{functionName:t.artifactName,declaredTypes:s});o&&n.push(nt(t,"error",o));const a=Rg(r,i,t.artifactName);a&&n.push(nt(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&n.push(nt(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const s=$g(r,i);s&&n.push(nt(t,"info",s))}return n}function Og(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(s=>Ui(s.code||""))),r=e.flatMap(s=>Lg(s,{declaredTypes:n})),i=e.map(s=>({artifactId:s.id,fileName:s.fileName,pathHint:hc[s.artifactType]||hc.CodeFile}));return{valid:r.every(s=>s.severity!=="error"),findings:r,deployHints:i}}const gc="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function mc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Bg(t=""){const e=t.indexOf(gc);return e===-1?t:t.slice(e+gc.length).replace(/^\s*\n/,"")}const Dg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function jg(t="",e=""){const n=Bg(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(mc).filter(Boolean)),i=n.split(` +`).filter(s=>{const o=mc(s);return o===null||!r.has(o)?!0:!Dg.test(s)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const Ug=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function Md(t){let e="",n=0;for(;n{const r=n.name||n.package;if(!r||r==="flutter")return e;const i=n.versionRequired||n.required;return e[r]=i&&n.version||"",e},{})}function Vg(t){const e=new Map,n=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),n.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${n.get(i.path)}" and "${i.artifactId}".`):n.set(i.path,i.artifactId);return r}function Gg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),s=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=qg(p),g=p.fixedCode||p.code||"",m=p.codeType||Wg[p.artifactType]||Ne.OTHER;g.trim()||s.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:f,content:g,type:m,path:p.deployPath||zg(f,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Ne.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} ${m.content}`).join(` -`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,_)=>!g.has(_)),o[p.index]=f}const u={...vc(t?.dependencies),...i.reduce((p,f)=>({...p,...vc(f.dependencies)}),{})},c={};i.forEach(p=>{va(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=zg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:h}}function Vg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Gg(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 Kg(t,e){const r=[Gg(t),Vg(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 Jg(t,e=new Map){const n=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||n.push({artifactId:i.artifactId||r,className:Kg(r,i),content:i.content,fileName:r,path:i.path});return n}function Yg(t,e){const n=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!n.has(r.path)))}const _c={pass:0,warning:1,fail:2},Zg=["manualActions"];function Be(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function _t(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(r=>typeof r=="string").join(` -`);if(n)return n}}return""}function it(t){return t==null?[]:Array.isArray(t)?t:[t]}function Xg(t){const e=Be(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return n;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 _a(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 $o(...t){return t.filter(Boolean).reduce((e,n)=>_c[n]>_c[e]?n:e,"pass")}function Ld(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const r=Be(t),i=_t(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:_a(r.severity||r.status||r.level)||e,message:i,suggestion:_t(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||n}:null}function Ro(t,e="review"){const n=Be(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,s])=>it(n[i]).map(o=>Ld(o,s,e)).filter(Boolean))}function Qg(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const r=Be(t),i=_t(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${n||"bundle"}-manual-${e+1}`,title:i,detail:_t(r.detail,r.instructions,r.description),location:_t(r.location,r.flutterFlowPath,r.path),timing:_t(r.timing,r.phase)||"unspecified",artifactId:n,source:_t(r.source)||"Code Review"}:null}function To(t,e=null){const n=Be(t);return Zg.flatMap(r=>it(n[r])).map((r,i)=>Qg(r,i,e)).filter(Boolean)}function em(t){let e=typeof t=="string"?Ao(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=Be(e);typeof n.content=="string"&&(e=Ao(n.content)||e);const r=Be(e),i=Be(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function tm(t,e){const n=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const i=Be(r);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(s=>s&&n.includes(s))})||null}function nm(t,e){return it(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function rm(t,e){return it(t?.relationships).filter(n=>We(n?.from)===We(e.id)||We(n?.to)===We(e.id))}function im(t,e){return it(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||We(n.artifactId)===We(e.id)).map(n=>Ld(n,"warning","Compatibility check")).filter(Boolean)}function sm(t,e,n,r){const i=tm(e,n),s=Be(i?.review||i||n.review),o=Object.keys(s).length>0,a=[...Ro(s),...im(t,n)],l=To(s,n.id),u=_a(s.status||s.verdict||s.outcome||s.result),c=a.length?$o(...a.map(h=>h.severity)):null,d=$o(u,c,o?null:"warning");return{...n,index:r,status:d,statusReason:o?_t(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:nm(t,n),relationships:rm(t,n)}}function om({status:t,score:e,artifactPresentations:n,manualSteps:r}){const i=n.length;if(i===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),i&&o.push(`${i} artifact${i===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),r.length&&o.push(`Do before deploy: ${r.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function am({bundle:t,reviewResult:e}){const n=Be(t),r=it(n.artifacts),{root:i,rawText:s}=em(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(Be).find(b=>Object.keys(b).length)||{},a=it(i.artifacts||i.files||i.reviews),l=r.map((b,I)=>sm(n,a,b,I)),u=Ro(i),d=[...Ro(o),...u],h=[...To(o),...To(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,F)=>F.findIndex(A=>A.title===b.title&&A.artifactId===b.artifactId)===I),p=_a(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=$o(p,...d.map(b=>b.severity),...l.map(b=>b.status)),g=o.score??i.score??i.overallScore??s,m=Xg(g),_=_t(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,s)||om({status:f,score:m,artifactPresentations:l,manualSteps:h}),w=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:it(n.deployOrder),relationships:it(n.relationships),warnings:it(n.warnings),compatibility:Be(n.metadata?.compatibility)}}const lm=/^\uFEFF/;function Wn(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` -`)}function cm(t){const e=String(t??"").replace(lm,"");if(!e.trim())return"";const n=e.split(` -`),r=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,s<0&&(s=d),o.push(c+h)),c+=n[d].length+1}}if(i===0)return Wn(n);{const c=Mo(e);if(!c.error&&o.every(h=>wc(h,c.commentAndStringRanges)))return Wn(n)}if(i===1){const c=Wn(n.slice(0,s)),d=Wn(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cm));o=o.filter((m,_)=>!g.has(_)),o[p.index]=f}const u={...vc(t?.dependencies),...i.reduce((p,f)=>({...p,...vc(f.dependencies)}),{})},c={};i.forEach(p=>{_a(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=Vg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:s,errors:h}}function Kg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Jg(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 Yg(t,e){const r=[Jg(t),Kg(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 Zg(t,e=new Map){const n=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||n.push({artifactId:i.artifactId||r,className:Yg(r,i),content:i.content,fileName:r,path:i.path});return n}function Xg(t,e){const n=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!n.has(r.path)))}const _c={pass:0,warning:1,fail:2},Qg=["manualActions"];function Be(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function _t(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const n=e.filter(r=>typeof r=="string").join(` +`);if(n)return n}}return""}function it(t){return t==null?[]:Array.isArray(t)?t:[t]}function em(t){const e=Be(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return n;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 ya(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 $o(...t){return t.filter(Boolean).reduce((e,n)=>_c[n]>_c[e]?n:e,"pass")}function Ld(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const r=Be(t),i=_t(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:ya(r.severity||r.status||r.level)||e,message:i,suggestion:_t(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||n}:null}function Ro(t,e="review"){const n=Be(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,s])=>it(n[i]).map(o=>Ld(o,s,e)).filter(Boolean))}function tm(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const r=Be(t),i=_t(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${n||"bundle"}-manual-${e+1}`,title:i,detail:_t(r.detail,r.instructions,r.description),location:_t(r.location,r.flutterFlowPath,r.path),timing:_t(r.timing,r.phase)||"unspecified",artifactId:n,source:_t(r.source)||"Code Review"}:null}function To(t,e=null){const n=Be(t);return Qg.flatMap(r=>it(n[r])).map((r,i)=>tm(r,i,e)).filter(Boolean)}function nm(t){let e=typeof t=="string"?Fo(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=Be(e);typeof n.content=="string"&&(e=Fo(n.content)||e);const r=Be(e),i=Be(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function rm(t,e){const n=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const i=Be(r);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(s=>s&&n.includes(s))})||null}function im(t,e){return it(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function sm(t,e){return it(t?.relationships).filter(n=>We(n?.from)===We(e.id)||We(n?.to)===We(e.id))}function om(t,e){return it(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||We(n.artifactId)===We(e.id)).map(n=>Ld(n,"warning","Compatibility check")).filter(Boolean)}function am(t,e,n,r){const i=rm(e,n),s=Be(i?.review||i||n.review),o=Object.keys(s).length>0,a=[...Ro(s),...om(t,n)],l=To(s,n.id),u=ya(s.status||s.verdict||s.outcome||s.result),c=a.length?$o(...a.map(h=>h.severity)):null,d=$o(u,c,o?null:"warning");return{...n,index:r,status:d,statusReason:o?_t(s.summary,s.overview,s.assessment,s.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof s.fixedSource=="string"&&s.fixedSource.trim()?s.fixedSource.trim():null,pathHint:im(t,n),relationships:sm(t,n)}}function lm({status:t,score:e,artifactPresentations:n,manualSteps:r}){const i=n.length;if(i===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const s=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),i&&o.push(`${i} artifact${i===1?"":"s"}: ${s.pass} pass, ${s.warning} warn, ${s.fail} fail.`),r.length&&o.push(`Do before deploy: ${r.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function cm({bundle:t,reviewResult:e}){const n=Be(t),r=it(n.artifacts),{root:i,rawText:s}=nm(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(Be).find(b=>Object.keys(b).length)||{},a=it(i.artifacts||i.files||i.reviews),l=r.map((b,I)=>am(n,a,b,I)),u=Ro(i),d=[...Ro(o),...u],h=[...To(o),...To(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,A)=>A.findIndex(F=>F.title===b.title&&F.artifactId===b.artifactId)===I),p=ya(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=$o(p,...d.map(b=>b.severity),...l.map(b=>b.status)),g=o.score??i.score??i.overallScore??s,m=em(g),_=_t(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,s)||lm({status:f,score:m,artifactPresentations:l,manualSteps:h}),w=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:it(n.deployOrder),relationships:it(n.relationships),warnings:it(n.warnings),compatibility:Be(n.metadata?.compatibility)}}const um=/^\uFEFF/;function Wn(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` +`)}function dm(t){const e=String(t??"").replace(um,"");if(!e.trim())return"";const n=e.split(` +`),r=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,s=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,s<0&&(s=d),o.push(c+h)),c+=n[d].length+1}}if(i===0)return Wn(n);{const c=No(e);if(!c.error&&o.every(h=>wc(h,c.commentAndStringRanges)))return Wn(n)}if(i===1){const c=Wn(n.slice(0,s)),d=Wn(n.slice(s+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` +${d}`,{commentAndStringRanges:g}=No(f),m=p.length+1+h;if(wc(m,g)){l.push(d);continue}a.push(Wn(l)),l=null}const u=a.filter(c=>c.length>0);return u.length===0?"":u.join(` -`)}function um(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function Od(t){const e=um(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function Bd(t){return`${ma(t)}.dart`}function dm(t){return fa(t,"W")}const yc={"(":")","[":"]","{":"}"},hm={")":"(","]":"[","}":"{"},pm=/[A-Za-z0-9_]/;function Mo(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let r=1,i=0;const s=(c,d)=>{(c===` +`)}function hm(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function Od(t){const e=hm(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function Bd(t){return`${va(t)}.dart`}function pm(t){return ga(t,"W")}const yc={"(":")","[":"]","{":"}"},fm={")":"(","]":"[","}":"{"},gm=/[A-Za-z0-9_]/;function No(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let r=1,i=0;const s=(c,d)=>{(c===` `||c==="\r"&&d!==` `)&&r++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&n.push({start:c.startIndex,end:t.length})};for(;i0?t[i-1]:"",f=i>1?t[i-2]:"",g=(p==="r"||p==="R")&&!pm.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:i,openedLine:r}),i+=h?3:1;continue}if(yc[c]){e.push({kind:"code",opener:c,openedLine:r}),i++;continue}if(hm[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&yc[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${r}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${r}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function fm(t){return Mo(String(t??"")).error}function wc(t,e){return e.some(({start:n,end:r})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const gm=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],mm="MAGIC_LINK_SENT",vm="PLUS_ALIAS_REJECTED",_m="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Wi={allowlistedDomains:gm,successCode:mm,validationCode:vm,messageTemplate:_m},ym=new Set(Wi.allowlistedDomains),wm=Wi.successCode,Jr=Wi.validationCode;function zi(t){return typeof t=="string"?t.trim():""}function bm(t){const e=zi(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const r=e.slice(0,n),i=e.slice(n+1).toLowerCase();return ym.has(i)?r.includes("+"):!1}function Em(t,e){return Wi.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function jd(t){if(!bm(t))return null;const e=zi(t),n=e.lastIndexOf("@"),r=e.slice(n+1).toLowerCase();return Em(e,r)}function Sm(t,e){return t?.code===Jr?t.message||jd(e)||"Please enter your primary email address.":t?.code===wm||!t?.code?`Check your email — we sent a link to ${zi(e)}`:t.message||"Something went wrong. Please try again."}const xm=/^dependencies\s*:\s*(?:#.*)?$/,km=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function qi(t){const e=t.match(km);return e?e[1]??e[2]??e[3]:null}function yr(t){const e=t.trim();return e===""||e.startsWith("#")}function Pn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ya(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let r=n,i=null;for(let s=n+1;s=0.0.0"}`}function Am(t,e={}){const n=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:n,added:[],alreadyPresent:[]};const i=n.split(` -`),s=new Set(Hd(n)),o=[],a=[];for(const[u,c]of r)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=wa(i);if(l){const u=o.map(([c,d])=>bc(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(bc(" ",u,c))});return{yaml:i.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function Pm(t,e={}){const n=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:n,overridden:[],skipped:[]};const i=n.split(` -`),s=Gi(n),o=[],a=[];for(const[l,u]of r){const c=s.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(Pn(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${zd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` -`),overridden:o,skipped:a}}function qd(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),wa(e.split(` -`))||n.push("pubspec.yaml missing dependencies section"),Hd(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const $m=">=3.0.0 <4.0.0";function No(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function Rm(t=""){const e=jg(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function Ec(t,e,n){const r=[];for(const[i,s]of t){if(s.isScalar){e[i]=No(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(i);continue}if(s.sourceKey===null&&s.version){e[i]=No(s.version);continue}r.push(i)}return r}function Tm(t){const e=new Set,n={},r={},i=Ec(Gi(t),n,e);i.push(...Ec(Cm(t,"dependency_overrides"),r,e));const s=new Set([...Object.keys(n),...e]),{sdk:o}=Wd(t);return{sdkConstraint:No(o)||$m,dependencies:n,overrides:r,sdkPackages:[...e].sort(),availablePackages:s,unrepresentable:i}}function Mm(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function Nm(t,e){const{sdkConstraint:n,dependencies:r,overrides:i,sdkPackages:s,availablePackages:o,unrepresentable:a}=Tm(e),l={sdkConstraint:n,dependencies:r,overrides:i,sdkPackages:s},u=[],c=[],d=a.map(h=>`Your project declares ${h} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${h}. Classes that do not import ${h} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const h of t){const{className:p,content:f}=h,g=va(f),m=g.filter(b=>a.includes(b));if(m.length>0){c.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Rm(f),w=g.filter(b=>!o.has(b));if(_.length>0||w.length>0){c.push({className:p,reason:Mm(p,_,w)});continue}u.push({fileName:`${ma(p)}.dart`,content:f})}return{manifest:l,sources:u,skipped:c,approximate:d}}function Sc(t,e){const n=`${t}${e}`.split(` -`),r=n.pop()??"",i=[];for(const s of n){const o=Vd(s);o&&i.push(o)}return{events:i,buffer:r}}function Lm(t){const e=Vd(t);return e?[e]:[]}function Vd(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function Om(t,e={}){const{onPhase:n,onLog:r}=e;let i=null,s="";const o=a=>{if(a.event==="phase"){a.message&&n&&n(a.message);return}if(a.event==="log"){a.message&&r&&r(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=Sc(s,l.decode(c,{stream:!0}));s=d.buffer,d.events.forEach(o)}}else{const a=Sc("",await t.text());s=a.buffer,a.events.forEach(o)}return Lm(s).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}).`}}const Bm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function St(t){const e=String(t||"").trim().match(Bm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function Dm(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function Um(t){const e=St(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function ba(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return St(o)?{min:o,minInclusive:!0,max:Um(o),maxInclusive:!1}:null}if(St(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,s;for(;(s=r.exec(e))!==null;){const[,o,a]=s;if(!St(a))return null;i=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return i?n:null}function xc(t,e){const n=ba(t);if(!n||!St(e))return!1;if(n.min!==null){const r=Ii(e,n.min);if(r<0||r===0&&!n.minInclusive)return!1}if(n.max!==null){const r=Ii(e,n.max);if(r>0||r===0&&!n.maxInclusive)return!1}return!0}function Hm(t,e){const n=ba(t);if(!n||!St(e))return!1;if(n.max===null)return!0;const r=Ii(n.max,e);return r>0?!0:r===0&&n.maxInclusive}function cn(t){const e=ba(t);return e?e.min:null}const Wm="https://pub.dev/api/packages/",zm=8e3;function qm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:r=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of i){const a=o?.version;if(!a||o.retracted||jm(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!xc(l.sdk,n)||r&&l.flutter&&!xc(l.flutter,r)||(!s||Ii(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function Vm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:r=null,fetchImpl:i=fetch}=e;let s;try{const a=await i(`${Wm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(zm)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=qm(s,{dartSdkFloor:n,flutterSdkFloor:r});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function Gm(t,e={}){const n=await Promise.all(t.map(r=>Vm(r,e)));return new Map(n.map(({name:r,...i})=>[r,i]))}async function Km(t,e={},n={}){const{resolveVersions:r=Gm}=n,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),s=Wd(t),o={dartSdkFloor:cn(s.sdk),flutterSdkFloor:cn(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Gi(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=cn(d);if(!p){a.kept.push({name:c,constraint:h.constraint});continue}if(!h.isScalar){a.warnings.push(`"${c}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${p}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:c,constraint:h.constraint});continue}if(Hm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(cn(p)){a.additions[d]=`^${cn(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${cn(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const Jm={"&":"&","<":"<",">":">",'"':""","'":"'"};function xt(t){return String(t??"").replace(/[&<>"']/g,e=>Jm[e])}function D(t){return t?xt(t).replace(/\n/g,"
"):""}function At(t){return xt(t).replace(/\r?\n/g," ")}function Ym(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function Zm(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,r]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return r;return"📄"}function Xm(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,r]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return r;return"📝"}function Qm(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 kn(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function kc(t){return t=xt(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 Gd(t,e="dart",n=globalThis.hljs){if(!t)return"";const r=kn(t);try{return n.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return n.highlight(r,{language:"json"}).value}catch{return xt(r)}}}function Ki(t,e={}){const{highlighter:n=globalThis.hljs}=e;let r='
';const i=String(t??"").split(` -`);let s=!1,o="";for(const a of i){if(a.startsWith("```")){if(s){const l=Qm(o),u=Gd(o.trim(),l,n);r+=`
+`){n.push({start:d.startIndex,end:i}),o??=`line ${r}: string starting on line ${d.openedLine} is never closed`,e.pop();continue}if(!d.raw&&c==="\\"){s(t[i+1]??"",t[i+2]??""),i+=2;continue}if(!d.raw&&c==="$"&&t[i+1]==="{"){e.push({kind:"code",opener:null,interpolation:!0}),i+=2;continue}const h=d.triple?3:1;if(c===d.quote&&t.slice(i,i+h)===d.quote.repeat(h)){n.push({start:d.startIndex,end:i+h}),e.pop(),i+=h;continue}s(c,t[i+1]),i++;continue}if(c==="/"&&t[i+1]==="/"){e.push({kind:"line-comment",startIndex:i}),i+=2;continue}if(c==="/"&&t[i+1]==="*"){e.push({kind:"block-comment",startIndex:i,openedLine:r,depth:1}),i+=2;continue}if(c==="'"||c==='"'){const h=t.slice(i,i+3)===c.repeat(3),p=i>0?t[i-1]:"",f=i>1?t[i-2]:"",g=(p==="r"||p==="R")&&!gm.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:i,openedLine:r}),i+=h?3:1;continue}if(yc[c]){e.push({kind:"code",opener:c,openedLine:r}),i++;continue}if(fm[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&yc[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${r}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${r}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}s(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function mm(t){return No(String(t??"")).error}function wc(t,e){return e.some(({start:n,end:r})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const vm=["gmail.com","googlemail.com","outlook.com","hotmail.com","live.com","msn.com"],_m="MAGIC_LINK_SENT",ym="PLUS_ALIAS_REJECTED",wm="Please enter your primary email address. Plus aliases (such as {email}) are not allowed for {domain} accounts.",Hi={allowlistedDomains:vm,successCode:_m,validationCode:ym,messageTemplate:wm},bm=new Set(Hi.allowlistedDomains),Em=Hi.successCode,jd=Hi.validationCode;function Wi(t){return typeof t=="string"?t.trim():""}function Sm(t){const e=Wi(t),n=e.lastIndexOf("@");if(n<=0||n===e.length-1)return!1;const r=e.slice(0,n),i=e.slice(n+1).toLowerCase();return bm.has(i)?r.includes("+"):!1}function xm(t,e){return Hi.messageTemplate.replaceAll("{email}",t).replaceAll("{domain}",e)}function Ud(t){if(!Sm(t))return null;const e=Wi(t),n=e.lastIndexOf("@"),r=e.slice(n+1).toLowerCase();return xm(e,r)}function km(t,e){return t?.code===jd?t.message||Ud(e)||"Please enter your primary email address.":t?.code===Em||!t?.code?`Check your email — we sent a link to ${Wi(e)}`:t.message||"Something went wrong. Please try again."}const Im=/^dependencies\s*:\s*(?:#.*)?$/,Cm=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function zi(t){const e=t.match(Cm);return e?e[1]??e[2]??e[3]:null}function yr(t){const e=t.trim();return e===""||e.startsWith("#")}function Pn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function wa(t,e){const n=t.findIndex(s=>e.test(s));if(n===-1)return null;let r=n,i=null;for(let s=n+1;s=0.0.0"}`}function $m(t,e={}){const n=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:n,added:[],alreadyPresent:[]};const i=n.split(` +`),s=new Set(Wd(n)),o=[],a=[];for(const[u,c]of r)s.has(u)?a.push(u):(o.push([u,c]),s.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=ba(i);if(l){const u=o.map(([c,d])=>bc(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(bc(" ",u,c))});return{yaml:i.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Rm(t,e={}){const n=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:n,overridden:[],skipped:[]};const i=n.split(` +`),s=Vi(n),o=[],a=[];for(const[l,u]of r){const c=s.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(Pn(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${qd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` +`),overridden:o,skipped:a}}function Vd(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),ba(e.split(` +`))||n.push("pubspec.yaml missing dependencies section"),Wd(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const Tm=">=3.0.0 <4.0.0";function Mo(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function Nm(t=""){const e=Hg(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function Ec(t,e,n){const r=[];for(const[i,s]of t){if(s.isScalar){e[i]=Mo(s.constraint);continue}if(s.sourceKey==="sdk"){n.add(i);continue}if(s.sourceKey===null&&s.version){e[i]=Mo(s.version);continue}r.push(i)}return r}function Mm(t){const e=new Set,n={},r={},i=Ec(Vi(t),n,e);i.push(...Ec(Fm(t,"dependency_overrides"),r,e));const s=new Set([...Object.keys(n),...e]),{sdk:o}=zd(t);return{sdkConstraint:Mo(o)||Tm,dependencies:n,overrides:r,sdkPackages:[...e].sort(),availablePackages:s,unrepresentable:i}}function Lm(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function Om(t,e){const{sdkConstraint:n,dependencies:r,overrides:i,sdkPackages:s,availablePackages:o,unrepresentable:a}=Mm(e),l={sdkConstraint:n,dependencies:r,overrides:i,sdkPackages:s},u=[],c=[],d=a.map(h=>`Your project declares ${h} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${h}. Classes that do not import ${h} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const h of t){const{className:p,content:f}=h,g=_a(f),m=g.filter(b=>a.includes(b));if(m.length>0){c.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Nm(f),w=g.filter(b=>!o.has(b));if(_.length>0||w.length>0){c.push({className:p,reason:Lm(p,_,w)});continue}u.push({fileName:`${va(p)}.dart`,content:f})}return{manifest:l,sources:u,skipped:c,approximate:d}}function Sc(t,e){const n=`${t}${e}`.split(` +`),r=n.pop()??"",i=[];for(const s of n){const o=Gd(s);o&&i.push(o)}return{events:i,buffer:r}}function Bm(t){const e=Gd(t);return e?[e]:[]}function Gd(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function Dm(t,e={}){const{onPhase:n,onLog:r}=e;let i=null,s="";const o=a=>{if(a.event==="phase"){a.message&&n&&n(a.message);return}if(a.event==="log"){a.message&&r&&r(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=Sc(s,l.decode(c,{stream:!0}));s=d.buffer,d.events.forEach(o)}}else{const a=Sc("",await t.text());s=a.buffer,a.events.forEach(o)}return Bm(s).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}).`}}const jm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function St(t){const e=String(t||"").trim().match(jm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function Um(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function Wm(t){const e=St(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Ea(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return St(o)?{min:o,minInclusive:!0,max:Wm(o),maxInclusive:!1}:null}if(St(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,s;for(;(s=r.exec(e))!==null;){const[,o,a]=s;if(!St(a))return null;i=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return i?n:null}function xc(t,e){const n=Ea(t);if(!n||!St(e))return!1;if(n.min!==null){const r=ki(e,n.min);if(r<0||r===0&&!n.minInclusive)return!1}if(n.max!==null){const r=ki(e,n.max);if(r>0||r===0&&!n.maxInclusive)return!1}return!0}function zm(t,e){const n=Ea(t);if(!n||!St(e))return!1;if(n.max===null)return!0;const r=ki(n.max,e);return r>0?!0:r===0&&n.maxInclusive}function ln(t){const e=Ea(t);return e?e.min:null}const qm="https://pub.dev/api/packages/",Vm=8e3;function Gm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:r=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let s=null;for(const o of i){const a=o?.version;if(!a||o.retracted||Hm(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!xc(l.sdk,n)||r&&l.flutter&&!xc(l.flutter,r)||(!s||ki(a,s)>0)&&(s=a)}return s?{version:s,constraint:`^${s}`}:null}async function Km(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:r=null,fetchImpl:i=fetch}=e;let s;try{const a=await i(`${qm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(Vm)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};s=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=Gm(s,{dartSdkFloor:n,flutterSdkFloor:r});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function Jm(t,e={}){const n=await Promise.all(t.map(r=>Km(r,e)));return new Map(n.map(({name:r,...i})=>[r,i]))}async function Ym(t,e={},n={}){const{resolveVersions:r=Jm}=n,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),s=zd(t),o={dartSdkFloor:ln(s.sdk),flutterSdkFloor:ln(s.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Vi(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=ln(d);if(!p){a.kept.push({name:c,constraint:h.constraint});continue}if(!h.isScalar){a.warnings.push(`"${c}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${p}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:c,constraint:h.constraint});continue}if(zm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ln(p)){a.additions[d]=`^${ln(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ln(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const Zm={"&":"&","<":"<",">":">",'"':""","'":"'"};function xt(t){return String(t??"").replace(/[&<>"']/g,e=>Zm[e])}function D(t){return t?xt(t).replace(/\n/g,"
"):""}function Ft(t){return xt(t).replace(/\r?\n/g," ")}function Xm(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function Qm(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,r]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return r;return"📄"}function ev(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,r]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return r;return"📝"}function tv(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 kn(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function kc(t){return t=xt(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 Kd(t,e="dart",n=globalThis.hljs){if(!t)return"";const r=kn(t);try{return n.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return n.highlight(r,{language:"json"}).value}catch{return xt(r)}}}function Gi(t,e={}){const{highlighter:n=globalThis.hljs}=e;let r='
';const i=String(t??"").split(` +`);let s=!1,o="";for(const a of i){if(a.startsWith("```")){if(s){const l=tv(o),u=Kd(o.trim(),l,n);r+=`
${u}
`,o="",s=!1}else s=!0;continue}if(s){o+=a+` `;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`

- ${Zm(l)} + ${Qm(l)} ${xt(l)}

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

- ${Xm(l)} + ${ev(l)} ${xt(l)}

`;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();r+=`
@@ -76,14 +76,14 @@ ${d}`,{commentAndStringRanges:g}=Mo(f),m=p.length+1+h;if(wc(m,g)){l.push(d);cont
${r}
- `}const ev="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",tv="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",nv="https://us.i.posthog.com";Sd.init(tv,{api_host:nv,person_profiles:"identified_only"});function Kt(t,e={}){try{Sd.capture(t,e)}catch(n){console.error("PostHog tracking failed",n)}}const Ze="https://4tgke4.buildship.run",Kd={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},Ci="ccc_auth_session",Ic=new WeakSet;let z={email:null,sessionToken:null,isVerified:!1};function In(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let pe=In({isResolved:!0});const rv=`${Ze}/service/runpipeline`,iv="bs_user_id",sv="bs_identity_token",ov=`${Ze}/authUserCheck`;let Ke={userId:null,token:null,status:null,resolved:!1};const Fi={free:2,professional:50,power:2e3},Ai="ccc_subscription",Cc=3,av=new Set(["active","trialing","paid"]),fr="google/gemini-3.7-flash",Yr=["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"],lv={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function Jt(t){return lv[t]||t}const cv=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Jd(t){return cv.has(t)}const Lo=4,Ds=8*1024*1024,uv="https://4tgke4.buildship.run/service/runpipeline-image";let Rt=[];function dv(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function hv(t){const e=new FormData;return e.append("file",t),(await fetch(uv,{method:"POST",body:e})).json()}function pv(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const r=e[n];if(r&&typeof r=="object"){if(typeof r.file=="string")return r.file;if(typeof r.url=="string")return r.url}if(typeof r=="string")return r}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function fv(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const n=e.filter(l=>l.size>Ds);n.length&&ue(`Skipped ${n.length} image(s) over the ${(Ds/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=Ds);if(!r.length){t.target.value="";return}const i=Lo-Rt.length,o=r.slice(0,i).map(async l=>{const u=await dv(l);if(!u)return null;let c="";try{c=pv(await hv(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Jd(document.getElementById("code-generator-model")?.value))&&(Rt.push(...a),r.length>i&&ue(`You can attach up to ${Lo} images.`,"info"),Ea())}function gv(t){Rt.splice(t,1),Ea()}function Ea(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Rt.forEach((n,r)=>{const i=document.createElement("div");i.className="prompt-img-thumb",i.innerHTML=`Prompt image`,t.appendChild(i)}),e&&(e.textContent=Rt.length>=Lo?"Image limit reached":"Add images"))}function Yd(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Jd(e?.value);t.classList.toggle("hidden",!n),!n&&Rt.length&&(Rt=[],Ea())}const Xt="ccc_usage",Zd="google/gemini-3.7-flash",Xd="google/gemini-3.7-flash",js="google/gemini-3.7-flash",Br={professional:11,power:49},Oo={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"},Zr={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 Xr={...Zr};async function mv(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const r=await n.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,s={AUD:1},o=new Set([...Object.keys(Zr),...Object.values(Bo),...Object.values(Oo)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?s[a]=i[a]:Zr[a]&&(s[a]=Zr[a]));Xr=s}catch{}finally{clearTimeout(e)}}const Bo={"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 Qd(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&Bo[s])return Bo[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=Oo[e];if(n)return n;const r=e.split("_")[0],i=Oo[r];return i||"USD"}function Dr(t,e){const n=Xr[e]??Xr.USD,r=t*n,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*Xr.USD)}}const st="ccc_api_key_",bt="ccc_session_api_key_",lt="ccc_encryption_key",gr="ccc_encryption_key_scope",vv="ccc_keystore",Pi="keys",mr="ccc_encryption_key_version";let Do=null,$i=null,vr=!1,Ri=!1,Fc=!1;class Ti extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Ac(){if(Fc)return;Fc=!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&&ue(t,"warning")}function eh(){return localStorage.getItem(mr)||""}function jo(){return crypto.randomUUID?.()||nh(crypto.getRandomValues(new Uint8Array(16)))}function _v(){const t=eh();if(t)return t;const e=jo();return localStorage.setItem(mr,e),e}function Cn(){Do=null,$i=null,vr=!1,Ri=!1}window.addEventListener("storage",t=>{t.key===mr&&Cn()});function yv(){return new Promise((t,e)=>{const n=indexedDB.open(vv,1);n.onupgradeneeded=()=>{const r=n.result;r.objectStoreNames.contains(Pi)||r.createObjectStore(Pi)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function Sa(t,e){const n=await yv();return new Promise((r,i)=>{const s=n.transaction(Pi,t);let o;try{o=e(s.objectStore(Pi))}catch(l){n.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),s.oncomplete=()=>{n.close(),r(a)},s.onerror=()=>{n.close(),i(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),i(s.error||new Error("Encryption key transaction aborted."))}})}function wv(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function bv(){const t=await Sa("readonly",e=>e.get(lt));return wv(t)?t:null}async function th(t){await Sa("readwrite",e=>e.put(t,lt))}async function Ev(){Cn();try{await Sa("readwrite",t=>t.delete(lt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Sv(){const t=sessionStorage.getItem(lt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await th(e),sessionStorage.removeItem(lt),sessionStorage.removeItem(gr),localStorage.removeItem(st+"salt"),e}async function Pc(t){const e=sessionStorage.getItem(lt);if(e)return Ri=sessionStorage.getItem(gr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Ti;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(lt,JSON.stringify(r)),sessionStorage.setItem(gr,"session"),Ri=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function xv(t){if(sessionStorage.getItem(gr)==="session"&&sessionStorage.getItem(lt))return Ac(),vr=!0,Pc(t);try{const e=await bv();if(e)return e;const n=await Sv();if(n)return n;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await th(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Ac(),vr=!0,Pc(t)}}async function xa(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=_v();$i!==n&&Cn();const r=Do||xv(e);Do=r,$i=n;try{return await r}catch(i){throw Cn(),i}}async function kv(t){const e=await xa(),n=$i,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+s.byteLength);return o.set(i),o.set(new Uint8Array(s),i.length),{ciphertext:nh(o),keyVersion:n,sessionFallback:vr}}async function Iv(t,e={}){const{isSessionCredential:n=!1}=e;try{const r=await xa({allowSessionFallbackCreation:!1});if(vr&&!n&&!Ri)throw new Ti;const i=Cv(t),s=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof Ti)throw r;return console.error("Decryption failed:",r),null}}function nh(t){const e=new Uint8Array(t);let n="";for(let r=0;r0}let _r="",Mi="",rr=null,Rc=0;async function ka(){sessionStorage.getItem(lt)&&await xa(),_r=await Ee("flutterflow"),Mi=await Ee("flutterflow_project_id"),Rv(),tn()}function Ia(){const t=document.getElementById("api-keys-modal");Ve(t),Fa(),_r&&oh(_r)}function rh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&Xe(e);const n=document.getElementById("walkthrough-modal");n&&(Ca(),Ve(n))}let kt=1;function ih(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ji(){const t=ih();t.length&&t.forEach((e,n)=>{const r=n+1;if(r===kt){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&&kt<=t&&(kt++,Ji())}function Av(){const t=document.getElementById("walkthrough-modal");t&&(kt=1,Ji(),Ve(t))}function Pv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&Xe(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function sh(){if(z.isVerified&&Mt()&&pe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(kt=1,Ji(),Ve(e))}}async function Fa(){const t=document.getElementById("flutterflow-api-key-input");_r?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",$v()}function $v(){Tc("flutterflow","flutterflow-key-status"),Tc("flutterflow_project_id","flutterflow-project-status")}function Tc(t,e){const n=document.getElementById(e);if(!n)return;const r=n.querySelector(".key-status-dot"),i=n.querySelector("span");hn(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 tn(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),n=document.getElementById("btn-run-pipeline");n&&n.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Rv(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((r,i)=>{const s=n[i];s==="flutterflow"?hn("flutterflow")&&hn("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):hn("flutterflow")||hn("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)"):hn(s)?(r.className="key-status-dot configured",r.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),tn()}async function Tv(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await $c("flutterflow",t.value);const n=e?.value.trim()||"";if(n){if(!Yi(n)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await $c("flutterflow_project_id",n)}await ka(),Fa();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"),rh()},1e3)}async function Mv(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(mr,jo()),Cn(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(bt+"flutterflow"),sessionStorage.removeItem(bt+"flutterflow_project_id"),sessionStorage.removeItem(lt),sessionStorage.removeItem(gr),localStorage.removeItem(st+"salt"),await Ev(),localStorage.setItem(mr,jo()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(bt+"flutterflow"),sessionStorage.removeItem(bt+"flutterflow_project_id"),await ka();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),Fa()}function Yi(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Nv(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function Lv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;Nv("flutterflow-api-key-input",n)}),t.addEventListener("blur",Ov(async e=>{const n=e.target.value.trim();n&&await oh(n)},500)))}function Ov(t,e){let n;return function(...i){const s=()=>{clearTimeout(n),t(...i)};clearTimeout(n),n=setTimeout(s,e)}}async function oh(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden");try{const i=await new br(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(s=>{const o=document.createElement("option");o.value=s.id||s.projectId||"",o.textContent=s.name||s.projectName||`Project ${s.id}`,e.appendChild(o)}),Mi&&(e.value=Mi)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${r.message}`,n.classList.remove("hidden"))}}function Bv(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + `}const nv="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Ze="https://4tgke4.buildship.run",Jd={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},Ii="ccc_auth_session",Lo="ccc_signin_return",rv=1800*1e3,Ic=new WeakSet;let z={email:null,sessionToken:null,isVerified:!1};function In(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let pe=In({isResolved:!0});const iv=`${Ze}/service/runpipeline`,sv="bs_user_id",ov="bs_identity_token",av=`${Ze}/authUserCheck`;let Ke={userId:null,token:null,status:null,resolved:!1};const Ci={free:2,professional:50,power:2e3},Ai="ccc_subscription",Cc=3,lv=new Set(["active","trialing","paid"]),fr="google/gemini-3.7-flash",Jr=["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"],cv={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function Kt(t){return cv[t]||t}const uv=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Yd(t){return uv.has(t)}const Oo=4,Ds=8*1024*1024,dv="https://4tgke4.buildship.run/service/runpipeline-image";let Rt=[];function hv(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function pv(t){const e=new FormData;return e.append("file",t),(await fetch(dv,{method:"POST",body:e})).json()}function fv(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const r=e[n];if(r&&typeof r=="object"){if(typeof r.file=="string")return r.file;if(typeof r.url=="string")return r.url}if(typeof r=="string")return r}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function gv(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const n=e.filter(l=>l.size>Ds);n.length&&ue(`Skipped ${n.length} image(s) over the ${(Ds/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=Ds);if(!r.length){t.target.value="";return}const i=Oo-Rt.length,o=r.slice(0,i).map(async l=>{const u=await hv(l);if(!u)return null;let c="";try{c=fv(await pv(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Yd(document.getElementById("code-generator-model")?.value))&&(Rt.push(...a),r.length>i&&ue(`You can attach up to ${Oo} images.`,"info"),Sa())}function mv(t){Rt.splice(t,1),Sa()}function Sa(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Rt.forEach((n,r)=>{const i=document.createElement("div");i.className="prompt-img-thumb",i.innerHTML=`Prompt image`,t.appendChild(i)}),e&&(e.textContent=Rt.length>=Oo?"Image limit reached":"Add images"))}function Zd(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Yd(e?.value);t.classList.toggle("hidden",!n),!n&&Rt.length&&(Rt=[],Sa())}const Zt="ccc_usage",Xd="google/gemini-3.7-flash",Qd="google/gemini-3.7-flash",js="google/gemini-3.7-flash",Br={professional:11,power:49},Bo={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"},Yr={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 Zr={...Yr};async function vv(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const r=await n.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,s={AUD:1},o=new Set([...Object.keys(Yr),...Object.values(Do),...Object.values(Bo)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?s[a]=i[a]:Yr[a]&&(s[a]=Yr[a]));Zr=s}catch{}finally{clearTimeout(e)}}const Do={"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 eh(){try{const s=Intl.DateTimeFormat().resolvedOptions().timeZone;if(s&&Do[s])return Do[s]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=Bo[e];if(n)return n;const r=e.split("_")[0],i=Bo[r];return i||"USD"}function Dr(t,e){const n=Zr[e]??Zr.USD,r=t*n,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*Zr.USD)}}const st="ccc_api_key_",bt="ccc_session_api_key_",lt="ccc_encryption_key",gr="ccc_encryption_key_scope",_v="ccc_keystore",Fi="keys",mr="ccc_encryption_key_version";let jo=null,Pi=null,vr=!1,$i=!1,Ac=!1;class Ri extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Fc(){if(Ac)return;Ac=!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&&ue(t,"warning")}function th(){return localStorage.getItem(mr)||""}function Uo(){return crypto.randomUUID?.()||rh(crypto.getRandomValues(new Uint8Array(16)))}function yv(){const t=th();if(t)return t;const e=Uo();return localStorage.setItem(mr,e),e}function Cn(){jo=null,Pi=null,vr=!1,$i=!1}window.addEventListener("storage",t=>{t.key===mr&&Cn()});function wv(){return new Promise((t,e)=>{const n=indexedDB.open(_v,1);n.onupgradeneeded=()=>{const r=n.result;r.objectStoreNames.contains(Fi)||r.createObjectStore(Fi)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function xa(t,e){const n=await wv();return new Promise((r,i)=>{const s=n.transaction(Fi,t);let o;try{o=e(s.objectStore(Fi))}catch(l){n.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),s.oncomplete=()=>{n.close(),r(a)},s.onerror=()=>{n.close(),i(s.error||new Error("Encryption key transaction failed."))},s.onabort=()=>{n.close(),i(s.error||new Error("Encryption key transaction aborted."))}})}function bv(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Ev(){const t=await xa("readonly",e=>e.get(lt));return bv(t)?t:null}async function nh(t){await xa("readwrite",e=>e.put(t,lt))}async function Sv(){Cn();try{await xa("readwrite",t=>t.delete(lt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function xv(){const t=sessionStorage.getItem(lt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await nh(e),sessionStorage.removeItem(lt),sessionStorage.removeItem(gr),localStorage.removeItem(st+"salt"),e}async function Pc(t){const e=sessionStorage.getItem(lt);if(e)return $i=sessionStorage.getItem(gr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Ri;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(lt,JSON.stringify(r)),sessionStorage.setItem(gr,"session"),$i=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function kv(t){if(sessionStorage.getItem(gr)==="session"&&sessionStorage.getItem(lt))return Fc(),vr=!0,Pc(t);try{const e=await Ev();if(e)return e;const n=await xv();if(n)return n;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await nh(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Fc(),vr=!0,Pc(t)}}async function ka(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=yv();Pi!==n&&Cn();const r=jo||kv(e);jo=r,Pi=n;try{return await r}catch(i){throw Cn(),i}}async function Iv(t){const e=await ka(),n=Pi,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+s.byteLength);return o.set(i),o.set(new Uint8Array(s),i.length),{ciphertext:rh(o),keyVersion:n,sessionFallback:vr}}async function Cv(t,e={}){const{isSessionCredential:n=!1}=e;try{const r=await ka({allowSessionFallbackCreation:!1});if(vr&&!n&&!$i)throw new Ri;const i=Av(t),s=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:s},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof Ri)throw r;return console.error("Decryption failed:",r),null}}function rh(t){const e=new Uint8Array(t);let n="";for(let r=0;r0}let _r="",Ti="",rr=null,Rc=0;async function Ia(){sessionStorage.getItem(lt)&&await ka(),_r=await Ee("flutterflow"),Ti=await Ee("flutterflow_project_id"),Tv(),en()}function Ca(){const t=document.getElementById("api-keys-modal");Ve(t),Fa(),_r&&ah(_r)}function ih(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&Xe(e);const n=document.getElementById("walkthrough-modal");n&&(Aa(),Ve(n))}let kt=1;function sh(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ki(){const t=sh();t.length&&t.forEach((e,n)=>{const r=n+1;if(r===kt){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&&kt<=t&&(kt++,Ki())}function Pv(){const t=document.getElementById("walkthrough-modal");t&&(kt=1,Ki(),Ve(t))}function $v(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&Xe(e);const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function oh(){if(z.isVerified&&Nt()&&pe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(kt=1,Ki(),Ve(e))}}async function Fa(){const t=document.getElementById("flutterflow-api-key-input");_r?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Rv()}function Rv(){Tc("flutterflow","flutterflow-key-status"),Tc("flutterflow_project_id","flutterflow-project-status")}function Tc(t,e){const n=document.getElementById(e);if(!n)return;const r=n.querySelector(".key-status-dot"),i=n.querySelector("span");dn(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 en(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),n=document.getElementById("btn-run-pipeline");n&&n.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Tv(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((r,i)=>{const s=n[i];s==="flutterflow"?dn("flutterflow")&&dn("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):dn("flutterflow")||dn("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)"):dn(s)?(r.className="key-status-dot configured",r.title=s.charAt(0).toUpperCase()+s.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=s.charAt(0).toUpperCase()+s.slice(1)+" (Not configured)")}),en()}async function Nv(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await $c("flutterflow",t.value);const n=e?.value.trim()||"";if(n){if(!Ji(n)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await $c("flutterflow_project_id",n)}await Ia(),Fa();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"),ih()},1e3)}async function Mv(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(mr,Uo()),Cn(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(bt+"flutterflow"),sessionStorage.removeItem(bt+"flutterflow_project_id"),sessionStorage.removeItem(lt),sessionStorage.removeItem(gr),localStorage.removeItem(st+"salt"),await Sv(),localStorage.setItem(mr,Uo()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(bt+"flutterflow"),sessionStorage.removeItem(bt+"flutterflow_project_id"),await Ia();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),Fa()}function Ji(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Lv(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function Ov(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;Lv("flutterflow-api-key-input",n)}),t.addEventListener("blur",Bv(async e=>{const n=e.target.value.trim();n&&await ah(n)},500)))}function Bv(t,e){let n;return function(...i){const s=()=>{clearTimeout(n),t(...i)};clearTimeout(n),n=setTimeout(s,e)}}async function ah(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden");try{const i=await new br(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(s=>{const o=document.createElement("option");o.value=s.id||s.projectId||"",o.textContent=s.name||s.projectName||`Project ${s.id}`,e.appendChild(o)}),Ti&&(e.value=Ti)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${r.message}`,n.classList.remove("hidden"))}}function Dv(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 Dv(){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 jv(){y.bundleSpec=hr(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Zi(){const t=xi(y.bundleSpec);y.artifactBundle=hr(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=Ng(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=xi(y.artifactBundle).id}function Xi(){const t=hr(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(r=>[r.id,r.review])),n=new Map(t.artifacts.filter(r=>{const i=r.review;return i&&typeof i.fixedSource=="string"&&i.fixedSource.trim()}).map(r=>[r.id,r.review.fixedSource.trim()]));y.bundleReview=hr({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(r=>{const i=n.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...i?{fixedCode:i}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function ah(){const t=Aa();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function Aa(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===y.selectedArtifactId)||xi(t)}function Pa(){return Aa().code||y.step2Result||""}async function Uv(){try{await ka()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Qr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function Hv(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class br{constructor(e,n,r="main",i=Qr.production){this.apiKey=e,this.baseUrl=i,this._projectId=n,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const 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 a=await i.text();n=new Error(`Export failed: ${i.status} - ${a}`);continue}const s=await i.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(i){n=i}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.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=>{s.set(a.slice(i.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[r].async("string"),files:s}}async pushCodeWithRetry(e,n=3){const r=[Qr.production,Qr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let s=0;ssetTimeout(d,1e3*(s+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(s+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const r=JSON.parse(e.value);if(r&&Array.isArray(r.entries))return r.entries.map(i=>({id:i.id,name:i.project?.name||i.id}))}catch(r){console.error("Failed to parse stringified project value:",r)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,r="";for(const i of e){const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return i!==e[0]&&console.log(`listProjects answered on legacy path ${i}`),this.parseProjectsResponse(await s.json());if(n=s.status,r=await s.text(),console.warn(`listProjects via ${i} returned ${n}: ${r}`),s.status===401||s.status===403)throw new Error(Hv(s.status,r));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${r}`)}throw new Error(`List projects failed: ${n} - ${r}`)}}async function $a(t){const e=t.clone();let n;try{n=await t.json()}catch{const s=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:s||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${s}`)}if(!t.ok){let i=n.message||`HTTP ${t.status}`,s=new Map;if(n.errors)s=new Map(Object.entries(n.errors));else if(!n.message&&typeof n=="object"){const o=Object.keys(n).filter(a=>a.endsWith(".dart")&&Array.isArray(n[a]));o.length>0&&(s=new Map(Object.entries(n)),i=o.flatMap(l=>n[l].map(u=>`${l}: ${u.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:s}}let r={};if(n.value)try{r=typeof n.value=="string"?JSON.parse(n.value):n.value}catch(i){console.warn("Ignoring malformed push response value:",i)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function Ra(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"},lh=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,ch=/extends\s+State<\w+>/;function Wv(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 n=lh.test(e),r=ch.test(e);if(n||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 uh(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 Ta(t,e=new Map){return vg(t,e)}const Uo=new Map;function dh(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Qi(t){Uo.delete(dh(t))}async function Ma(t,e,n,r,i=""){const s=Jg(e,n);if(s.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const o=Nm(s,i),a={...o.manifest,sources:o.sources},l=o.skipped.map(h=>h.reason);l.forEach(h=>console.warn(`[custom class deploy] ${h}`));const u=o.approximate;u.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${s.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const c=await fetch(ev,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:s,verification:a,stream:!0})}),d=await Om(c,{onPhase:h=>be.setSubstatus(h),onLog:h=>console.log(`[custom class deploy] ${h}`)});if(!d.success){const h=d.details?` ${d.details}`:"";throw new Error(`${d.error||"FlutterFlow custom class provisioning failed."}${h}`)}return Qi(t),d.verificationSkipped&&(console.warn(`[custom class deploy] ${d.verificationSkipped}`),l.push(d.verificationSkipped)),{remoteFiles:n,syncFileMap:Yg(e,s),unverified:l,approximate:u}}async function Na(t,e={}){const n=dh(t);let r=Uo.get(n);if(r===void 0){try{r=await t.fetchProjectSource()}catch(l){throw new Error(`Could not read your project's pubspec.yaml (${l.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=qd(r.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);Uo.set(n,r)}const i=await Km(r.pubspecYaml,e),s=Pm(r.pubspecYaml,i.overrides),o=Am(s.yaml,i.additions);return i.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${i.additions[a]||"any"}`).join(", "),i.sdk.dartSdkFloor?`(resolved for Dart ${i.sdk.dartSdkFloor})`:""),i.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:i.warnings,remoteFiles:r.files}}function zv(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const r=t.content.split(` -`).length;r>500&&n.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);i&&i.length>3&&n.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`);const s=fm(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=Od(t.content),a=dm(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${Bd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function hh(t,e={}){const{artifactType:n="CustomWidget",artifactName:r="GeneratedCode",fileName:i}=e,s=cm(t);let o=i||r;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Od(s)[0],c=u?Bd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(n){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports + `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function jv(){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 Uv(){y.bundleSpec=hr(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Yi(){const t=Si(y.bundleSpec);y.artifactBundle=hr(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=Og(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=Si(y.artifactBundle).id}function Zi(){const t=hr(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(r=>[r.id,r.review])),n=new Map(t.artifacts.filter(r=>{const i=r.review;return i&&typeof i.fixedSource=="string"&&i.fixedSource.trim()}).map(r=>[r.id,r.review.fixedSource.trim()]));y.bundleReview=hr({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(r=>{const i=n.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...i?{fixedCode:i}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function lh(){const t=Pa();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function Pa(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(n=>n.id===y.selectedArtifactId)||Si(t)}function $a(){return Pa().code||y.step2Result||""}async function Hv(){try{await Ia()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Xr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function Wv(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class br{constructor(e,n,r="main",i=Xr.production){this.apiKey=e,this.baseUrl=i,this._projectId=n,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const 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 a=await i.text();n=new Error(`Export failed: ${i.status} - ${a}`);continue}const s=await i.json(),o=s?.value?.project_zip||s?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(i){n=i}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),s=new Map,o=Object.keys(n.files).filter(a=>{if(n.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=>{s.set(a.slice(i.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[r].async("string"),files:s}}async pushCodeWithRetry(e,n=3){const r=[Xr.production,Xr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let s=0;ssetTimeout(d,1e3*(s+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(s+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const r=JSON.parse(e.value);if(r&&Array.isArray(r.entries))return r.entries.map(i=>({id:i.id,name:i.project?.name||i.id}))}catch(r){console.error("Failed to parse stringified project value:",r)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,r="";for(const i of e){const s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(s.ok)return i!==e[0]&&console.log(`listProjects answered on legacy path ${i}`),this.parseProjectsResponse(await s.json());if(n=s.status,r=await s.text(),console.warn(`listProjects via ${i} returned ${n}: ${r}`),s.status===401||s.status===403)throw new Error(Wv(s.status,r));if(s.status!==404)throw new Error(`List projects failed: ${s.status} - ${r}`)}throw new Error(`List projects failed: ${n} - ${r}`)}}async function Ra(t){const e=t.clone();let n;try{n=await t.json()}catch{const s=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:s||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${s}`)}if(!t.ok){let i=n.message||`HTTP ${t.status}`,s=new Map;if(n.errors)s=new Map(Object.entries(n.errors));else if(!n.message&&typeof n=="object"){const o=Object.keys(n).filter(a=>a.endsWith(".dart")&&Array.isArray(n[a]));o.length>0&&(s=new Map(Object.entries(n)),i=o.flatMap(l=>n[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:s}}let r={};if(n.value)try{r=typeof n.value=="string"?JSON.parse(n.value):n.value}catch(i){console.warn("Ignoring malformed push response value:",i)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function Ta(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"},ch=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,uh=/extends\s+State<\w+>/;function zv(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 n=ch.test(e),r=uh.test(e);if(n||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 dh(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 Na(t,e=new Map){return yg(t,e)}const Ho=new Map;function hh(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Xi(t){Ho.delete(hh(t))}async function Ma(t,e,n,r,i=""){const s=Zg(e,n);if(s.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[],approximate:[]};const o=Om(s,i),a={...o.manifest,sources:o.sources},l=o.skipped.map(h=>h.reason);l.forEach(h=>console.warn(`[custom class deploy] ${h}`));const u=o.approximate;u.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${s.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const c=await fetch(nv,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:s,verification:a,stream:!0})}),d=await Dm(c,{onPhase:h=>be.setSubstatus(h),onLog:h=>console.log(`[custom class deploy] ${h}`)});if(!d.success){const h=d.details?` ${d.details}`:"";throw new Error(`${d.error||"FlutterFlow custom class provisioning failed."}${h}`)}return Xi(t),d.verificationSkipped&&(console.warn(`[custom class deploy] ${d.verificationSkipped}`),l.push(d.verificationSkipped)),{remoteFiles:n,syncFileMap:Xg(e,s),unverified:l,approximate:u}}async function La(t,e={}){const n=hh(t);let r=Ho.get(n);if(r===void 0){try{r=await t.fetchProjectSource()}catch(l){throw new Error(`Could not read your project's pubspec.yaml (${l.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Vd(r.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);Ho.set(n,r)}const i=await Ym(r.pubspecYaml,e),s=Rm(r.pubspecYaml,i.overrides),o=$m(s.yaml,i.additions);return i.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${i.additions[a]||"any"}`).join(", "),i.sdk.dartSdkFloor?`(resolved for Dart ${i.sdk.dartSdkFloor})`:""),i.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:s.overridden,warnings:i.warnings,remoteFiles:r.files}}function qv(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const r=t.content.split(` +`).length;r>500&&n.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);i&&i.length>3&&n.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`);const s=mm(t.content);if(s&&e.push(`FlutterFlow cannot format this code - ${s}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=Od(t.content),a=pm(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${Bd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function ph(t,e={}){const{artifactType:n="CustomWidget",artifactName:r="GeneratedCode",fileName:i}=e,s=dm(t);let o=i||r;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Od(s)[0],c=u?Bd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(n){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; @@ -109,15 +109,15 @@ import '/flutter_flow/lat_lng.dart'; import '/flutter_flow/place.dart'; import '/flutter_flow/uploaded_file.dart'; -`),{content:Bg(s,l),fileName:o,codeType:a,artifactType:n,artifactName:r}}function qv(t){const e={};for(const n of va(t))e[n]="";return e}function Vv(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 Gv(t,e,n,r=new Set,i=""){const s=[],o=lh.test(e),a=ch.test(e);return n===U.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function es(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const r=new Set(Array.from(t.values()).flatMap(i=>Hi(i.content||"")));for(const[i,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${i} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=Gv(i,s.content,s.type,r,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=qd(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}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 Kv(t,e,n={}){let{codeType:r="W"}=n;const{pubspecDeps:i={},artifactName:s=e}=n;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 Ee("flutterflow"),a=await Ee("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(!Yi(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=wr(),u=new br(o,a,"main",l);K.setState(G.VALIDATING);const c=new Map,d=r||Wv(e,t),h=uh(e,d);c.set(e,{artifactName:s,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=es(c);if(!p.valid)throw new Error(`Validation failed: +`),{content:jg(s,l),fileName:o,codeType:a,artifactType:n,artifactName:r}}function Vv(t){const e={};for(const n of _a(t))e[n]="";return e}function Gv(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 Kv(t,e,n,r=new Set,i=""){const s=[],o=ch.test(e),a=uh.test(e);return n===U.WIDGET&&!o&&!a&&s.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:s.length===0,errors:s}}function Qi(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const r=new Set(Array.from(t.values()).flatMap(i=>Ui(i.content||"")));for(const[i,s]of t.entries()){if((!s.content||s.content.trim().length===0)&&e.push(`File ${i} is empty`),s.content&&s.content.length>1e5&&n.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=Kv(i,s.content,s.type,r,s.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=Vd(s.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}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 Jv(t,e,n={}){let{codeType:r="W"}=n;const{pubspecDeps:i={},artifactName:s=e}=n;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 Ee("flutterflow"),a=await Ee("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(!Ji(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=wr(),u=new br(o,a,"main",l);K.setState(G.VALIDATING);const c=new Map,d=r||zv(e,t),h=dh(e,d);c.set(e,{artifactName:s,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Qi(c);if(!p.valid)throw new Error(`Validation failed: ${p.errors.join(` -`)}`);const f=await Na(u,i),g=f.yaml,m=await Ma(u,c,f.remoteFiles,`Provision ${s} custom class`,g),_=await Ta(m.syncFileMap,m.remoteFiles),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const b=await La(w),I={project_id:a,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(G.PUSHING),K.setProgress(1,c.size),Qi(u),be.set("push");const F=await u.pushCode(I),A=await $a(F);if(A.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:A.errorMap&&A.errorMap.size>0?Array.from(A.errorMap.entries()):[]});else{const j=A.errorMessage||Ra(A.responseCode);throw new Error(j)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,unverified:m.unverified,approximate:m.approximate,warnings:A.errorMap?Array.from(A.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function La(t){const e=new JSZip;for(const[n,r]of t.entries())e.file(n,r.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function Jv(t,e={}){const{artifactType:n,artifactName:r,fileName:i,pipelineResult:s}=e;console.log(`Starting commit for ${r} (${n})`);try{K.setState(G.PREPARING);const o=hh(t,{artifactType:n,artifactName:r,fileName:i}),a=qv(o.content);console.log("Detected dependencies:",a),K.setState(G.VALIDATING);const l=await Ee("flutterflow"),u=rr||await Ee("flutterflow_project_id");if(!l)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!u)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Yi(u))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(o.fileName,{artifactName:r,content:o.content,type:o.codeType,path:uh(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,c.size);const d=es(c);if(!d.valid)throw new Error(`File validation failed: +`)}`);const f=await La(u,i),g=f.yaml,m=await Ma(u,c,f.remoteFiles,`Provision ${s} custom class`,g),_=await Na(m.syncFileMap,m.remoteFiles),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const b=await Oa(w),I={project_id:a,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(G.PUSHING),K.setProgress(1,c.size),Xi(u),be.set("push");const A=await u.pushCode(I),F=await Ra(A);if(F.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:F.errorMap&&F.errorMap.size>0?Array.from(F.errorMap.entries()):[]});else{const j=F.errorMessage||Ta(F.responseCode);throw new Error(j)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,unverified:m.unverified,approximate:m.approximate,warnings:F.errorMap?Array.from(F.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function Oa(t){const e=new JSZip;for(const[n,r]of t.entries())e.file(n,r.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function Yv(t,e={}){const{artifactType:n,artifactName:r,fileName:i,pipelineResult:s}=e;console.log(`Starting commit for ${r} (${n})`);try{K.setState(G.PREPARING);const o=ph(t,{artifactType:n,artifactName:r,fileName:i}),a=Vv(o.content);console.log("Detected dependencies:",a),K.setState(G.VALIDATING);const l=await Ee("flutterflow"),u=rr||await Ee("flutterflow_project_id");if(!l)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!u)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ji(u))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(o.fileName,{artifactName:r,content:o.content,type:o.codeType,path:dh(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,c.size);const d=Qi(c);if(!d.valid)throw new Error(`File validation failed: ${d.errors.join(` -`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(G.PUSHING);const h=wr(),p=new br(l,u,"main",h),f=await Na(p,a),g=f.yaml,m=await Ma(p,c,f.remoteFiles,`Provision ${r} custom class`,g),_=await Ta(m.syncFileMap,m.remoteFiles),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const b=await La(w),I={project_id:u,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Qi(p),be.set("push");const F=await p.pushCode(I),A=await $a(F);if(A.success){const j={...Vv(o,s),projectId:u};return K.setSuccess({...j,fileCount:c.size,warnings:A.errorMap?Array.from(A.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${o.fileName} to FlutterFlow`,metadata:j,addedDependencies:f.added,unverified:m.unverified,approximate:m.approximate,warnings:A.errorMap?Array.from(A.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const j=A.errorMessage||Ra(A.responseCode),S=new Error(j);throw S.errorMap=A.errorMap,S}}catch(o){console.error("Commit execution failed:",o),K.setError(o);let a=new Map;if(o.errorMap)a=o.errorMap;else if(o.message&&o.message.includes("{"))try{const l=o.message.match(/\{[\s\S]*\}/);if(l){const u=JSON.parse(l[0]);a=new Map(Object.entries(u))}}catch(l){console.warn("Failed to parse error map from commit response:",l)}return{success:!1,error:o.message,errorMap:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Yv(t,e={}){const{pipelineResult:n}=e;try{if(K.setState(G.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: +`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(G.PUSHING);const h=wr(),p=new br(l,u,"main",h),f=await La(p,a),g=f.yaml,m=await Ma(p,c,f.remoteFiles,`Provision ${r} custom class`,g),_=await Na(m.syncFileMap,m.remoteFiles),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const b=await Oa(w),I={project_id:u,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Xi(p),be.set("push");const A=await p.pushCode(I),F=await Ra(A);if(F.success){const j={...Gv(o,s),projectId:u};return K.setSuccess({...j,fileCount:c.size,warnings:F.errorMap?Array.from(F.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${o.fileName} to FlutterFlow`,metadata:j,addedDependencies:f.added,unverified:m.unverified,approximate:m.approximate,warnings:F.errorMap?Array.from(F.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const j=F.errorMessage||Ta(F.responseCode),S=new Error(j);throw S.errorMap=F.errorMap,S}}catch(o){console.error("Commit execution failed:",o),K.setError(o);let a=new Map;if(o.errorMap)a=o.errorMap;else if(o.message&&o.message.includes("{"))try{const l=o.message.match(/\{[\s\S]*\}/);if(l){const u=JSON.parse(l[0]);a=new Map(Object.entries(u))}}catch(l){console.warn("Failed to parse error map from commit response:",l)}return{success:!1,error:o.message,errorMap:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Zv(t,e={}){const{pipelineResult:n}=e;try{if(K.setState(G.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: ${t.errors.join(` -`)}`);const r=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,r.size);const i=es(r);if(!i.valid)throw new Error(`File validation failed: +`)}`);const r=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,r.size);const i=Qi(r);if(!i.valid)throw new Error(`File validation failed: ${i.errors.join(` -`)}`);K.setState(G.VALIDATING);const s=await Ee("flutterflow"),o=rr||await Ee("flutterflow_project_id");if(!s)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!o)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Yi(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(G.PUSHING);const a=wr(),l=new br(s,o,"main",a),u=await Na(l,t.dependencies),c=u.yaml,d=await Ma(l,r,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await Ta(d.syncFileMap,d.remoteFiles),p=new Map(d.syncFileMap);p.set("pubspec.yaml",{content:c,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const f=await La(p),g={project_id:o,zipped_custom_code:f,uid:`web_${Date.now()}`,branch_name:l.branchName,serialized_yaml:c,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,r.size),Qi(l),be.set("push");const m=await l.pushCode(g),_=await $a(m);if(_.success){const I={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((F,A)=>F+A.content.length,0),projectId:o};return K.setSuccess({...I,fileCount:r.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,addedDependencies:u.added,unverified:d.unverified,approximate:d.approximate,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const w=_.errorMessage||Ra(_.responseCode),b=new Error(w);throw b.errorMap=_.errorMap,b}catch(r){return console.error("Bundle commit execution failed:",r),K.setError(r),{success:!1,error:r.message,errorMap:r.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Zv(t,e=[]){const n=pa("architect");try{return await Ni("architect",Zd,sg(t),n,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function ts(t,e,n=[]){const r=og(t),i=pa("generator",y.bundleSpec);try{return await Ni("generator",e,r,i,n)}catch(s){if(s.isModelArmor)throw s;if(e!==js){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,s.message);try{return await Ni("generator",js,r,i,n)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${s.message} | fallback (${js}): ${o.message}`)}}throw new Error(`Code Generator failed: ${s.message}`)}}async function ns(t,e=null){const n={...pa("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Ni("review",Xd,ag(t),n)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function Oa(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Ho(t,e){const n=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!n||!r||(n.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),r.classList.add("running"),r.innerHTML=` +`)}`);K.setState(G.VALIDATING);const s=await Ee("flutterflow"),o=rr||await Ee("flutterflow_project_id");if(!s)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!o)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ji(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(G.PUSHING);const a=wr(),l=new br(s,o,"main",a),u=await La(l,t.dependencies),c=u.yaml,d=await Ma(l,r,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await Na(d.syncFileMap,d.remoteFiles),p=new Map(d.syncFileMap);p.set("pubspec.yaml",{content:c,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const f=await Oa(p),g={project_id:o,zipped_custom_code:f,uid:`web_${Date.now()}`,branch_name:l.branchName,serialized_yaml:c,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,r.size),Xi(l),be.set("push");const m=await l.pushCode(g),_=await Ra(m);if(_.success){const I={...n,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((A,F)=>A+F.content.length,0),projectId:o};return K.setSuccess({...I,fileCount:r.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,addedDependencies:u.added,unverified:d.unverified,approximate:d.approximate,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const w=_.errorMessage||Ta(_.responseCode),b=new Error(w);throw b.errorMap=_.errorMap,b}catch(r){return console.error("Bundle commit execution failed:",r),K.setError(r),{success:!1,error:r.message,errorMap:r.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Xv(t,e=[]){const n=fa("architect");try{return await Ni("architect",Xd,ag(t),n,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function es(t,e,n=[]){const r=lg(t),i=fa("generator",y.bundleSpec);try{return await Ni("generator",e,r,i,n)}catch(s){if(s.isModelArmor)throw s;if(e!==js){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,s.message);try{return await Ni("generator",js,r,i,n)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${s.message} | fallback (${js}): ${o.message}`)}}throw new Error(`Code Generator failed: ${s.message}`)}}async function ts(t,e=null){const n={...fa("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Ni("review",Qd,cg(t),n)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function Ba(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Wo(t,e){const n=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!n||!r||(n.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),r.classList.add("running"),r.innerHTML=` `):e==="completed"?(n.classList.add("completed"),r.classList.add("completed"),r.innerHTML=` @@ -125,19 +125,19 @@ ${i.errors.join(` `):r.innerHTML=` - `)}function ve(t,e){const n=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),r.classList.add("hidden"),Ho(t,"active")):(n.classList.add("hidden"),r.classList.remove("hidden"),Ho(t,"completed"))}function Xv(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function Qv(t){ze(parseInt(t.replace("step","")))}function ze(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"),en();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=s[t]||"Active Workflow Stage")}function e_(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{Kt("Code Copied",{elementId:t});const i=e.closest(".code-container")?.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 Wo(t){const e=qo(t);console.log(`Step 1 (Prompt Architect): ${Jt(Zd)}`),console.log(e!==t?`Step 2 (Code Generator): ${Jt(t)} → ${Jt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${Jt(t)}`),console.log(`Step 3 (Code Review): ${Jt(Xd)}`)}async function t_(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,Ba("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(n=>{n.disabled=!0,n.innerHTML=` + `)}function ve(t,e){const n=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),r.classList.add("hidden"),Wo(t,"active")):(n.classList.add("hidden"),r.classList.remove("hidden"),Wo(t,"completed"))}function Qv(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function e_(t){ze(parseInt(t.replace("step","")))}function ze(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"),Qt();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),s={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=s[t]||"Active Workflow Stage")}function t_(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const i=e.closest(".code-container")?.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 zo(t){const e=Vo(t);console.log(`Step 1 (Prompt Architect): ${Kt(Xd)}`),console.log(e!==t?`Step 2 (Code Generator): ${Kt(t)} → ${Kt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${Kt(t)}`),console.log(`Step 3 (Code Review): ${Kt(Qd)}`)}async function n_(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,Da("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(n=>{n.disabled=!0,n.innerHTML=` - Refining...`});try{const n=Aa(),r=lg({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:n.id,userFeedback:"Fix the issues listed in the audit report."});os(),at(2),ze(2),ve(2,!0),y.step2Result=await ts(r,t),Zi();const i=document.getElementById("step2-output"),s=kn(y.step2Result);i.textContent=s,i.dataset.raw=s,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ns(y.step2Result,y.step1Result),Xi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),Nt();const a=Ki(y.step3Result);as(s,a)}catch(n){console.error("Refinement failed:",n),Nt(),ue(Oa(n,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(n=>{n.disabled=!1,n.textContent="Refine & Regenerate"}),tn()}}async function Ba(t,e,n){const r=`${Ze}/connectFeedback`,i={type:t,code:e,input:n};try{const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function n_(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function r_(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0,Ba("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` + Refining...`});try{const n=Pa(),r=ug({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:n.id,userFeedback:"Fix the issues listed in the audit report."});os(),at(2),ze(2),ve(2,!0),y.step2Result=await es(r,t),Yi();const i=document.getElementById("step2-output"),s=kn(y.step2Result);i.textContent=s,i.dataset.raw=s,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ts(y.step2Result,y.step1Result),Zi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),Mt();const a=Gi(y.step3Result);as(s,a)}catch(n){console.error("Refinement failed:",n),Mt(),ue(Ba(n,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(n=>{n.disabled=!1,n.textContent="Refine & Regenerate"}),en()}}async function Da(t,e,n){const r=`${Ze}/connectFeedback`,i={type:t,code:e,input:n};try{const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!s.ok){const a=await s.text();return console.error(`callEndpoint failed: ${s.status} ${s.statusText}`,a),{success:!1,status:s.status,error:a}}const o=await s.json();return console.log("Telemetry success:",o),o}catch(s){return console.error("callEndpoint failed:",s),{success:!1,error:s.message}}}function r_(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function i_(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0,Da("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` - Fixing…`);try{const i=Rd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});xh(),os(),at(2),ze(2),ve(2,!0),y.step2Result=await ts(i,n),Zi();const s=document.getElementById("step2-output"),o=kn(y.step2Result);s.textContent=o,s.dataset.raw=o,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ns(y.step2Result,y.step1Result),Xi();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),Nt();const l=Ki(y.step3Result);as(o,l),t&&(t.value="")}catch(i){console.error("Fix from errors failed:",i),Nt(),ue(Oa(i,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),tn()}}async function zo(){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()){ue("Please describe your FlutterFlow widget first.","warning");return}if(!await S_())return;await v_();const n=qo(e);Kt("Pipeline Started",{selectedModel:e,effectiveModel:n,inputLength:t.length});const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,Dv(),r.disabled=!0,r.innerHTML=` + Fixing…`);try{const i=Rd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});Ih(),os(),at(2),ze(2),ve(2,!0),y.step2Result=await es(i,n),Yi();const s=document.getElementById("step2-output"),o=kn(y.step2Result);s.textContent=o,s.dataset.raw=o,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ts(y.step2Result,y.step1Result),Zi();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),Mt();const l=Gi(y.step3Result);as(o,l),t&&(t.value="")}catch(i){console.error("Fix from errors failed:",i),Mt(),ue(Ba(i,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),en()}}async function qo(){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()){ue("Please describe your FlutterFlow widget first.","warning");return}if(!await x_())return;await __();const n=Vo(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,jv(),r.disabled=!0,r.innerHTML=` - Running...`,Wo(n);try{en();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const s=document.getElementById("paywall-exhausted");s&&s.classList.add("hidden"),os(),ze(1),at(1),ve(1,!0);const o=Rt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await Zv(t,o),jv(),Kt("Prompt Architect Completed");const a=document.getElementById("step1-output"),l=kn(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),at(2),ve(2,!0),y.step2Result=await ts(y.step1Result,n,o),Zi(),Kt("Code Generator Completed");const u=document.getElementById("step2-output"),c=kn(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ns(y.step2Result,y.step1Result),Xi(),Kt("Code Review Completed");const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),Nt();const h=Ki(y.step3Result);as(c,h)}catch(i){if(console.error("Pipeline failed:",i),Nt(),i.isUsageLimit){const{count:c}=Er();Ha(c,is(),{openModal:!0});return}Kt("Pipeline Failed",{error:i.message,effectiveModel:qo(document.getElementById("code-generator-model").value)});const o=Ym(i,{architect:1,generator:2,review:3});ze(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=``}Wo(o,"error")}finally{y.isRunning=!1,r.disabled=!1,r.innerHTML=` - Run Pipeline`,tn()}}function i_(){const t=document.getElementById("code-generator-model").value,e=[fr,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),n=prompt(`Retry with different model? + Run Pipeline`,en()}}function s_(){const t=document.getElementById("code-generator-model").value,e=[fr,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),n=prompt(`Retry with different model? Current: ${t} @@ -156,10 +156,10 @@ Options: 1. ${e[0]} 2. ${e[1]} -Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],zo()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],zo())}async function s_(){const t=Pa();if(!t){ue("No code to commit. Please run the pipeline first.","warning");return}const e=await Ee("flutterflow"),n=await Ee("flutterflow_project_id");if(!e||!n){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Ia();return}if(y.artifactBundle?.artifacts?.length>1){await o_();return}const{artifactType:r,artifactName:i,fileName:s}=ah(),o=hh(t,{artifactType:r,artifactName:i,fileName:s}),a=zv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}za(o,a,null,null)}async function o_(){const t=await Ee("flutterflow"),e=await Ee("flutterflow_project_id");if(!t||!e){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Ia();return}const n=qg(y.artifactBundle);if(n.errors.length>0){ue(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const r=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=es(r),s={canProceed:i.valid&&n.errors.length===0,issues:[...n.errors,...i.errors],warnings:[...n.warnings,...i.warnings]};if(!s.canProceed){ue(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName} +Enter 1 or 2:`);n==="1"?(document.getElementById("code-generator-model").value=e[0],qo()):n==="2"&&(document.getElementById("code-generator-model").value=e[1],qo())}async function o_(){const t=$a();if(!t){ue("No code to commit. Please run the pipeline first.","warning");return}const e=await Ee("flutterflow"),n=await Ee("flutterflow_project_id");if(!e||!n){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Ca();return}if(y.artifactBundle?.artifacts?.length>1){await a_();return}const{artifactType:r,artifactName:i,fileName:s}=lh(),o=ph(t,{artifactType:r,artifactName:i,fileName:s}),a=qv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}za(o,a,null,null)}async function a_(){const t=await Ee("flutterflow"),e=await Ee("flutterflow_project_id");if(!t||!e){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Ca();return}const n=Gg(y.artifactBundle);if(n.errors.length>0){ue(`Bundle validation failed: ${n.errors.join("; ")}`,"error");return}const r=new Map(n.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=Qi(r),s={canProceed:i.valid&&n.errors.length===0,issues:[...n.errors,...i.errors],warnings:[...n.warnings,...i.warnings]};if(!s.canProceed){ue(`Bundle validation failed: ${s.issues.join("; ")}`,"error");return}const o={content:n.fileEntries.map(a=>`// ${a.fileName} ${a.content}`).join(` -`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};za(o,s,n.dependencies,n)}function a_(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`
+`),fileName:`${n.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:n.title};za(o,s,n.dependencies,n)}function l_(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let n=`

FlutterFlow Commit Failed

${D(t.error)}

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

Errors:

@@ -172,7 +172,7 @@ ${a.content}`).join(` Fix Errors & Regenerate -
`;const r=document.getElementById("step3-output");r&&(r.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{l_(t.error,e)}))}async function l_(t,e){if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0;const r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` +
`;const r=document.getElementById("step3-output");r&&(r.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{c_(t.error,e)}))}async function c_(t,e){if(y.isRunning)return;const n=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: @@ -180,28 +180,28 @@ ${a.content}`).join(` Error: ${h} `}else i+=`${t} -`;const s=Rd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});os(),at(2),ze(2),ve(2,!0),y.step2Result=await ts(s,n),Zi();const o=document.getElementById("step2-output"),a=kn(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ns(y.step2Result,y.step1Result),Xi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Nt();const u=Ki(y.step3Result);as(a,u)}catch(i){console.error("Regeneration failed:",i),Nt(),ue(Oa(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),tn()}}async function c_(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Ee("flutterflow"),r=await Ee("flutterflow_project_id");n&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||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 u_(t){try{const e=await fetch(`${Ze}/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 d_(t){try{const n=await(await fetch(`${Ze}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function h_(t){try{const e=await fetch(`${Ze}/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:`${Ze}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${Ze}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Mc(t,e){const n=ph(),r=(z.email||n.email)!==t;z.email=t,z.sessionToken=e,z.isVerified=!0,pe=In({isLoading:!0}),localStorage.setItem(Ci,JSON.stringify({email:t,sessionToken:e})),r&&Wa()}function Da(){z.email=null,z.sessionToken=null,z.isVerified=!1,pe=In({isResolved:!0}),localStorage.removeItem(Ci),localStorage.removeItem(Ai)}function ph(){try{const t=localStorage.getItem(Ci);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(Ci),{email:null,sessionToken:null}}}async function p_(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:r}=await d_(e);Mc(n,r)}catch(n){ue(n.message||"Sign-in link invalid or expired.","error")}}else{const{email:n,sessionToken:r}=ph();if(n&&r){const i=await h_(r);i?Mc(i.email,i.sessionToken):Da()}}Ua()}function ja(){const t=document.getElementById("signin-modal");t&&Ve(t)}function f_(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&Xe(e)}async function g_(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=document.getElementById("signin-message"),r=zi(t?.value);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){n&&(n.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…");const s=jd(r);n&&s&&(n.textContent=s);try{const o=await u_(r);t&&o?.code!==Jr&&(t.value=""),n&&(n.textContent=Sm(o,r)),e&&(e.textContent=o?.code===Jr?"Send Link":"Sent!"),e&&o?.code===Jr&&(e.disabled=!1)}catch(o){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:o}),n&&(n.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function m_(){Da(),Wa(),Ua(),ss()}function Ua(){const t=z.isVerified&&!!z.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=z.email||""),ei(),ss()}async function fh(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,r=await fetch(ov,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Ke.userId=i.user_id,Ke.token=i.identity_token||null,Ke.status=i.status,Ke.resolved=!0,sessionStorage.setItem(iv,i.user_id),Ke.token&&sessionStorage.setItem(sv,Ke.token),i.usage_count!==void 0){const s=Tt(),a=(i.usage_month||s)===s?i.usage_count:0;localStorage.setItem(Xt,JSON.stringify({count:a,month:s})),ir()}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)}}let Us=null;function v_(t=5e3){return Ke.resolved?Promise.resolve():(Us||(Us=fh().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Us,new Promise(e=>setTimeout(e,t))]))}function gh(){const t=Tt();try{const e=localStorage.getItem(Xt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Xt,month:t,err:e}),localStorage.removeItem(Xt),{count:0,month:t}}}function Tt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Er(){const t=gh();return t.month!==Tt()?{count:0,month:Tt()}:t}function __(){const e={count:Er().count+1,month:Tt()};return localStorage.setItem(Xt,JSON.stringify(e)),e}function rs(){return!!pe.isLoading}function Mt(){return!!pe.isResolved}function y_(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(Fi,e)?e:null}function w_(t){return t&&Object.entries(Kd).find(([,e])=>e===t)?.[0]||null}function jr(...t){return t.find(e=>e!=null&&e!=="")}function b_(...t){return t.find(e=>e&&typeof e=="object")||{}}function E_(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=b_(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),r=e.metadata||n.metadata||e.customer?.metadata||{},i=jr(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=jr(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=y_(jr(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,r.tier,r.plan)),a=av.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||w_(i)||(a||l?"professional":"free");return In({tier:u,status:s,periodEnd:jr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function is(){return Fi[pe.tier]??Fi.free}async function S_(){if(z.isVerified&&(!Mt()||rs())&&(await mh({force:!0}),ss()),z.isVerified&&!Mt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Er(),e=is();if(t>=e)return Ha(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const r=e-t;ue(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function Hs(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Ha(t,e,n={}){An(!0);const r=document.getElementById("walkthrough-modal");r&&Xe(r,{restoreFocus:!1});const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Li();return}const c=document.getElementById("paywall-exhausted-text");if(c){const h=pe.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",z.isVerified),u.classList.remove("hidden"),n.openModal&&Li()}function qo(t){return pe.tier==="free"&&Yr.includes(t)?fr:t}function x_(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=pe.tier,i=!(z.isVerified&&!Mt())&&n==="free";Array.from(e.options).forEach(o=>{const a=Jt(o.value),l=Yr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&Yr.includes(e.value)&&(e.value=fr),e.disabled=!1,Ic.has(e)||(e.addEventListener("change",()=>{Mt()&&pe.tier==="free"&&Yr.includes(e.value)&&(e.value=fr,Li()),Wo(e.value),Yd()}),Ic.add(e));let s=document.getElementById("model-selector-free-notice");i?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),Wo(e.value)}function ir(){const t=document.getElementById("usage-counter");if(!t)return;if(z.isVerified&&rs()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",ei(),Hs();return}if(z.isVerified&&!Mt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",ei(),Hs();return}const{count:e}=Er(),n=is();t.textContent=`${e} / ${n} runs this month`;const r=n>0?e/n: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",ei(),e>=n&&!y.isRunning?Ha(e,n):Hs()}function ei(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=gh(),n=e.month===Tt()?e.count??0:0,r=Fi.free;t.textContent=`${n} / ${r} generations used`}async function mh(t={}){const e=t.force===!0;if(!z.isVerified||!z.sessionToken){pe=In({isResolved:!0});return}pe={...pe,isLoading:!0,error:null};const n=localStorage.getItem(Ai);if(!e&&n)try{const{data:r,email:i,ts:s,version:o}=JSON.parse(n);if(o===Cc&&i===z.email&&Date.now()-s<300*1e3){pe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",n)}try{const i=await(await fetch(`${Ze}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:z.sessionToken,user_id:Ke.userId})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){Da(),Ua();return}pe=In({isResolved:!1,error:i.error});return}pe=E_(i),localStorage.setItem(Ai,JSON.stringify({version:Cc,data:pe,email:z.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),pe={...pe,isLoading:!1,isResolved:!1,error:r.message}}}function Wa(){localStorage.removeItem(Ai)}async function k_(t){if(!z.isVerified||!z.sessionToken){vh(),ja();return}if(!Kd[t]){ue("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(`${Ze}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:z.sessionToken,currency:Qd()})})).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(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),ue("Could not start checkout. Please try again.","error")}}async function I_(){if(!z.isVerified||!z.sessionToken){ja();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const n=await(await fetch(`${Ze}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:z.sessionToken})})).json();if(n.error||!n.url)throw new Error(n.error||"Failed to open billing portal");const{url:r}=n;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),ue("Could not open billing portal. Please try again.","error")}}async function Ni(t,e,n,r={},i=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(rv,{method:"POST",headers:{"Content-Type":"application/json",...Ke.token?{Authorization:`Bearer ${Ke.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ke.userId,step:t,model:e,prompt:n,images:i,context:r})}),u=await l.text();let c={};try{c=u?JSON.parse(u):{}}catch{c={}}if(l.status===429){c.serverCount!==void 0&&(localStorage.setItem(Xt,JSON.stringify({count:c.serverCount,month:Tt()})),ir());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=gg(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=Tt();(c.usage_month||p)===p&&(localStorage.setItem(Xt,JSON.stringify({count:c.usage_count,month:p})),ir())}else __(),ir();let h=c.output||c.content;if(!h){const p=u?` (body: ${u.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${p}`)}return Array.isArray(h)&&(h=h.map(p=>typeof p=="string"?p:p.text||"").join("")),typeof h!="string"&&(h=JSON.stringify(h)),h}catch(l){throw l.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):l instanceof TypeError?new Error(`BuildShip unreachable: ${l.message}`):l}finally{clearTimeout(a)}}function C_(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),Wa(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),ue("Checkout cancelled.","info"))}function ss(){const t=z.isVerified&&!!z.email,e=pe.tier,n=t&&rs(),r=!t||Mt(),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=n?"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 s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||r&&e==="free"),F_(r?e:null),x_(),Yd(),ir(),kh()}function F_(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:s,defaultText:o}])=>{const a=document.getElementById(s);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 Vo(){const t=Qd(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),r=document.getElementById("plans-pro-price"),i=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=Dr(Br.professional,t)),n&&(n.textContent=Dr(Br.power,t)),r&&(r.textContent=Dr(Br.professional,t)),i&&(i.textContent=Dr(Br.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function Li(){Vo();const t=document.getElementById("pricing-modal");t&&Ve(t),mv().then(()=>Vo())}function vh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&Xe(e)}function ue(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},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 ${n[e]||n.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{ng(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),A_(),await p_(),C_(),await mh(),ss(),Vo(),await Uv(),Lv();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=wr();t.value=n}sh(),fh();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{kt===2&&e.value.trim().length>0&&(Ca(),Ji())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");kt===2&&n&&Ve(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const r=document.getElementById("walkthrough-modal");kt===2&&r&&setTimeout(()=>{Ve(r)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:r}=n.detail;r===G.PREPARING||r===G.VALIDATING||r===G.PUSHING?(be.phaseId||yh(),Lc(r)):(r===G.SUCCESS||r===G.ERROR)&&(Lc(r),setTimeout(Oi,1e3))}),ey(),Va()});function A_(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function P_(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",en),document.addEventListener("keydown",en))}function en(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",en),document.removeEventListener("keydown",en),sh()}let sr=null;async function $_(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++Rc,n=()=>e===Rc,r=await Ee("flutterflow"),i=await Ee("flutterflow_project_id");if(n()){if(!r){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new br(r,"").listProjects();if(!n())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),i&&(t.value=i)}catch(s){if(!n())return;console.error("Failed to load projects for deploy:",s),t.innerHTML=''}}}function R_(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function za(t,e,n,r=null){sr={codeInfo:t,checks:e,deps:n,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,$_();const i=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(i.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${xt(c)}`:"version resolved from your project";return`
  • • ${xt(u)}: ${d}
  • `}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
  • • ${xt(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&&Ve(l)}function _h(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&Xe(e),sr=null}function T_(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&Xe(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function Go(t){const e=(m,_)=>{const w=document.getElementById(m);w&&(w.textContent=_||"")},n=t.metadata?.fileName||"",r=t.metadata?.projectId||"",i=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",n),e("success-artifact-type",i),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),h=t.unverified||[],p=t.approximate||[],f=t.warnings||[];(f.length>0||h.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...h.map(m=>`
  • Not verified before deploying: ${D(String(m))}
  • `),...p.map(m=>`
  • Verified approximately: ${D(String(m))}
  • `),...f.map(([m,_])=>`
  • ${D(m)}: ${D(String(_))}
  • `)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&Ve(g)}function Ko(t){Oi(),a_(t)}function M_(){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 Nc={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}},N_=[{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&&(ac(e,!0,"Deploying to FlutterFlow"),Ve(e)),this.set("prepare")},set(t,e=null){if(!(!Nc[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Nc[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=N_.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),s=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&s.push(L_(e)),wh(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(ac(t,!1),Xe(t,{force:!0,restoreFocus:!1}))}};function L_(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 yh(t){be.start(t)}function Oi(){be.stop()}function wh(t,e,n,r=null){const i=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function Lc(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,wh(100,"Failed","Error occurred");return}const n=e[t];n&&be.set(n)}function O_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function B_(){if(!sr){console.error("No pending commit data");return}const t=sr;if(sr=null,rr=R_(),_h(),yh({withProvisioning:O_(t)}),t.bundlePlan){const o=await Yv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});rr=null,Oi(),o.success?Go(o):Ko(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:r,fileName:i}=ah(),s=await Jv(e.content,{artifactType:n,artifactName:r,fileName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});rr=null,Oi(),s.success?Go(s):Ko(s)}window.runThinkingPipeline=zo;window.toggleStep=Qv;window.toggleSection=Xv;window.selectWorkflowStep=ze;window.copyCode=e_;window.retryWithDifferentModel=i_;window.openApiKeysModal=Ia;window.closeApiKeysModal=rh;window.closeWalkthroughModal=Pv;window.openWalkthroughModal=Av;window.advanceWalkthrough=Ca;window.commitToFlutterFlow=Kv;function D_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function j_(){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=D_;window.openModelSelector=j_;window.handlePromptImageSelect=fv;window.removePromptImage=gv;window.saveApiKeys=Tv;window.clearAllApiKeys=Mv;window.toggleKeyVisibility=Bv;window.handleWelcomeVideoEnd=P_;window.dismissWelcomeVideo=en;window.initiateCommitToFlutterFlow=s_;window.updateFlutterFlowCredentialStatus=c_;window.openCommitConfirmModal=za;window.closeCommitConfirmModal=_h;window.closeCommitSuccessModal=T_;window.showCommitSuccessModal=Go;window.showCommitFailureModal=Ko;window.toggleCodePreview=M_;window.confirmCommitToFlutterFlow=B_;window.runRefinement=t_;window.regenerateFromPastedErrors=r_;window.clearErrorInput=n_;window.setFlutterFlowEndpoint=Fv;window.getFlutterFlowEndpoint=wr;window.commitProgress=be;window.openSignInModal=ja;window.closeSignInModal=f_;window.handleMagicLinkRequest=g_;window.handleSignOut=m_;window.startCheckout=k_;window.openCustomerPortal=I_;window.openPricingModal=Li;window.closePricingModal=vh;let vn=null,bh=null;const Oc=120;function os(){An(!0);const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),n=document.getElementById("ready-state");n&&n.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),bh=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}at(1),U_()}function at(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},n={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=n[t]||n[1]);for(let s=1;s<=3;s++){const o=document.getElementById(`pdot-${s}`);o&&(s{const t=(Date.now()-bh)/1e3,e=document.getElementById("progress-elapsed"),n=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/Oc*100,i=Math.min(95,r*(1-Math.exp(-t/(Oc*.6)))*1.2);n&&(n.style.width=`${i}%`)},250)}function Nt(){vn&&(clearInterval(vn),vn=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const n=document.getElementById(`pdot-${e}`);n&&(n.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function Fn(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function Eh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function H_(){return am({bundle:y.artifactBundle,reviewResult:y.step3Result})}function W_(t){return` -
    - ${Fn(t.severity)} +`;const s=Rd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});os(),at(2),ze(2),ve(2,!0),y.step2Result=await es(s,n),Yi();const o=document.getElementById("step2-output"),a=kn(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),at(3),ve(3,!0),y.step3Result=await ts(y.step2Result,y.step1Result),Zi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Mt();const u=Gi(y.step3Result);as(a,u)}catch(i){console.error("Regeneration failed:",i),Mt(),ue(Ba(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),en()}}async function u_(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Ee("flutterflow"),r=await Ee("flutterflow_project_id");n&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||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 d_(t){try{const e=await fetch(`${Ze}/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 h_(t){try{const n=await(await fetch(`${Ze}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function p_(t){try{const e=await fetch(`${Ze}/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:`${Ze}/auth/refresh-session`,status:e.status}),null;const n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${Ze}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Nc(t,e){const n=fh(),r=(z.email||n.email)!==t;z.email=t,z.sessionToken=e,z.isVerified=!0,pe=In({isLoading:!0}),localStorage.setItem(Ii,JSON.stringify({email:t,sessionToken:e})),r&&Wa()}function ja(){z.email=null,z.sessionToken=null,z.isVerified=!1,pe=In({isResolved:!0}),localStorage.removeItem(Ii),localStorage.removeItem(Ai)}function fh(){try{const t=localStorage.getItem(Ii);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(Ii),{email:null,sessionToken:null}}}async function f_(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname+window.location.hash);try{const{email:n,sessionToken:r}=await h_(e);Nc(n,r),gh();const i=Mc();i&&!window.location.hash&&(window.location.hash=i)}catch(n){Mc();const r=n.message||"Sign-in link invalid or expired.";ue(r,"error"),ns(),fn(r,"error")}}else{const{email:n,sessionToken:r}=fh();if(n&&r){const i=await p_(r);i?Nc(i.email,i.sessionToken):ja()}}Ua()}function g_(){try{localStorage.setItem(Lo,JSON.stringify({hash:window.location.hash||"#home",ts:Date.now()}))}catch(t){console.warn("rememberSignInReturnSurface: failed to persist return surface:",t)}}function Mc(){try{const t=localStorage.getItem(Lo);if(localStorage.removeItem(Lo),!t)return null;const{hash:e,ts:n}=JSON.parse(t);return!e||typeof n!="number"||Date.now()-n>rv?null:e}catch(t){return console.warn("consumeSignInReturnSurface: failed to read return surface:",t),null}}function ns(){const t=document.getElementById("signin-modal");if(!t)return;g_(),document.getElementById("signin-email-input")?.removeAttribute("aria-invalid"),fn(""),Ve(t)}function gh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&Xe(e)}function fn(t,e){const n=document.getElementById("signin-message");n&&(n.textContent=t||"",n.classList.remove("signin-message-success","signin-message-error"),e&&n.classList.add(`signin-message-${e}`))}async function m_(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=Wi(t?.value);if(!n||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(n)||n.length>254){t?.setAttribute("aria-invalid","true"),fn("Please enter a valid email address.","error");return}t?.removeAttribute("aria-invalid"),e&&(e.disabled=!0,e.textContent="Sending…");const i=Ud(n);i&&fn(i,"error");try{const s=await d_(n),o=s?.code===jd;t&&!o&&(t.value=""),t?.setAttribute("aria-invalid",String(o)),fn(km(s,n),o?"error":"success"),e&&(e.disabled=!1,e.textContent=o?"Send Sign-in Link":"Sent!",o||setTimeout(()=>{e.textContent==="Sent!"&&(e.textContent="Send Sign-in Link")},2500))}catch(s){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:n,err:s}),fn("Something went wrong. Please try again.","error"),e&&(e.disabled=!1,e.textContent="Send Sign-in Link")}}function v_(){ja(),Wa(),Ua(),ss()}function Ua(){const t=z.isVerified&&!!z.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=z.email||""),Qr(),ss()}async function mh(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,r=await fetch(av,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Ke.userId=i.user_id,Ke.token=i.identity_token||null,Ke.status=i.status,Ke.resolved=!0,sessionStorage.setItem(sv,i.user_id),Ke.token&&sessionStorage.setItem(ov,Ke.token),i.usage_count!==void 0){const s=Tt(),a=(i.usage_month||s)===s?i.usage_count:0;localStorage.setItem(Zt,JSON.stringify({count:a,month:s})),ir()}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)}}let Us=null;function __(t=5e3){return Ke.resolved?Promise.resolve():(Us||(Us=mh().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Us,new Promise(e=>setTimeout(e,t))]))}function vh(){const t=Tt();try{const e=localStorage.getItem(Zt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Zt,month:t,err:e}),localStorage.removeItem(Zt),{count:0,month:t}}}function Tt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Er(){const t=vh();return t.month!==Tt()?{count:0,month:Tt()}:t}function y_(){const e={count:Er().count+1,month:Tt()};return localStorage.setItem(Zt,JSON.stringify(e)),e}function rs(){return!!pe.isLoading}function Nt(){return!!pe.isResolved}function w_(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 b_(t){return t&&Object.entries(Jd).find(([,e])=>e===t)?.[0]||null}function jr(...t){return t.find(e=>e!=null&&e!=="")}function E_(...t){return t.find(e=>e&&typeof e=="object")||{}}function S_(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=E_(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),r=e.metadata||n.metadata||e.customer?.metadata||{},i=jr(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),s=jr(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=w_(jr(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,r.tier,r.plan)),a=lv.has(String(s).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||b_(i)||(a||l?"professional":"free");return In({tier:u,status:s,periodEnd:jr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function is(){return Ci[pe.tier]??Ci.free}async function x_(){if(z.isVerified&&(!Nt()||rs())&&(await _h({force:!0}),ss()),z.isVerified&&!Nt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Er(),e=is();if(t>=e)return Ha(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const r=e-t;ue(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function Hs(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Ha(t,e,n={}){Fn(!0);const r=document.getElementById("walkthrough-modal");r&&Xe(r,{restoreFocus:!1});const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const s=document.getElementById("preview-frame-container");s&&(s.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`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=pe.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",z.isVerified),u.classList.remove("hidden"),n.openModal&&Mi()}function Vo(t){return pe.tier==="free"&&Jr.includes(t)?fr:t}function k_(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=pe.tier,i=!(z.isVerified&&!Nt())&&n==="free";Array.from(e.options).forEach(o=>{const a=Kt(o.value),l=Jr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&Jr.includes(e.value)&&(e.value=fr),e.disabled=!1,Ic.has(e)||(e.addEventListener("change",()=>{Nt()&&pe.tier==="free"&&Jr.includes(e.value)&&(e.value=fr,Mi()),zo(e.value),Zd()}),Ic.add(e));let s=document.getElementById("model-selector-free-notice");i?(s||(s=document.createElement("p"),s.id="model-selector-free-notice",s.className="text-xs text-gray-400 mt-1",t.appendChild(s)),s.innerHTML='Free plan — Gemini only. '):s&&s.remove(),zo(e.value)}function ir(){const t=document.getElementById("usage-counter");if(!t)return;if(z.isVerified&&rs()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",Qr(),Hs();return}if(z.isVerified&&!Nt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",Qr(),Hs();return}const{count:e}=Er(),n=is();t.textContent=`${e} / ${n} runs this month`;const r=n>0?e/n: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",Qr(),e>=n&&!y.isRunning?Ha(e,n):Hs()}function Qr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=vh(),n=e.month===Tt()?e.count??0:0,r=Ci.free;t.textContent=`${n} / ${r} generations used`}async function _h(t={}){const e=t.force===!0;if(!z.isVerified||!z.sessionToken){pe=In({isResolved:!0});return}pe={...pe,isLoading:!0,error:null};const n=localStorage.getItem(Ai);if(!e&&n)try{const{data:r,email:i,ts:s,version:o}=JSON.parse(n);if(o===Cc&&i===z.email&&Date.now()-s<300*1e3){pe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",n)}try{const i=await(await fetch(`${Ze}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:z.sessionToken,user_id:Ke.userId})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ja(),Ua();return}pe=In({isResolved:!1,error:i.error});return}pe=S_(i),localStorage.setItem(Ai,JSON.stringify({version:Cc,data:pe,email:z.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),pe={...pe,isLoading:!1,isResolved:!1,error:r.message}}}function Wa(){localStorage.removeItem(Ai)}async function I_(t){if(!z.isVerified||!z.sessionToken){yh(),ns();return}if(!Jd[t]){ue("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(`${Ze}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:z.sessionToken,currency:eh()})})).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(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),ue("Could not start checkout. Please try again.","error")}}async function C_(){if(!z.isVerified||!z.sessionToken){ns();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const n=await(await fetch(`${Ze}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:z.sessionToken})})).json();if(n.error||!n.url)throw new Error(n.error||"Failed to open billing portal");const{url:r}=n;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),ue("Could not open billing portal. Please try again.","error")}}async function Ni(t,e,n,r={},i=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(iv,{method:"POST",headers:{"Content-Type":"application/json",...Ke.token?{Authorization:`Bearer ${Ke.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ke.userId,step:t,model:e,prompt:n,images:i,context:r})}),u=await l.text();let c={};try{c=u?JSON.parse(u):{}}catch{c={}}if(l.status===429){c.serverCount!==void 0&&(localStorage.setItem(Zt,JSON.stringify({count:c.serverCount,month:Tt()})),ir());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=vg(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=Tt();(c.usage_month||p)===p&&(localStorage.setItem(Zt,JSON.stringify({count:c.usage_count,month:p})),ir())}else y_(),ir();let h=c.output||c.content;if(!h){const p=u?` (body: ${u.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${p}`)}return Array.isArray(h)&&(h=h.map(p=>typeof p=="string"?p:p.text||"").join("")),typeof h!="string"&&(h=JSON.stringify(h)),h}catch(l){throw l.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):l instanceof TypeError?new Error(`BuildShip unreachable: ${l.message}`):l}finally{clearTimeout(a)}}function A_(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname+window.location.hash),Wa(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname+window.location.hash),ue("Checkout cancelled.","info"))}function ss(){const t=z.isVerified&&!!z.email,e=pe.tier,n=t&&rs(),r=!t||Nt(),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=n?"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 s=document.getElementById("upgrade-prompt");s&&s.classList.toggle("hidden",!t||n||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||r&&e==="free"),F_(r?e:null),k_(),Zd(),ir(),Ch()}function F_(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:s,defaultText:o}])=>{const a=document.getElementById(s);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 Go(){const t=eh(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),r=document.getElementById("plans-pro-price"),i=document.getElementById("plans-power-price"),s=document.getElementById("pro-price-note"),o=document.getElementById("power-price-note"),a=document.getElementById("plans-pro-price-note"),l=document.getElementById("plans-power-price-note");e&&(e.textContent=Dr(Br.professional,t)),n&&(n.textContent=Dr(Br.power,t)),r&&(r.textContent=Dr(Br.professional,t)),i&&(i.textContent=Dr(Br.power,t));const u="billed monthly";s&&(s.textContent=u),o&&(o.textContent=u),a&&(a.textContent=u),l&&(l.textContent=u)}function Mi(){Go();const t=document.getElementById("pricing-modal");t&&Ve(t),vv().then(()=>Go())}function yh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&Xe(e)}function ue(t,e="info"){const n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},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 ${n[e]||n.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{ig(),hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),P_(),await f_(),A_(),await _h(),ss(),Go(),await Hv(),Ov();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=wr();t.value=n}oh(),mh();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{kt===2&&e.value.trim().length>0&&(Aa(),Ki())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");kt===2&&n&&Ve(n)}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const r=document.getElementById("walkthrough-modal");kt===2&&r&&setTimeout(()=>{Ve(r)},100)}})),window.addEventListener("commitStateChange",n=>{const{state:r}=n.detail;r===G.PREPARING||r===G.VALIDATING||r===G.PUSHING?(be.phaseId||bh(),Oc(r)):(r===G.SUCCESS||r===G.ERROR)&&(Oc(r),setTimeout(Li,1e3))}),ty(),Va()});function P_(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function $_(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Qt),document.addEventListener("keydown",Qt))}function Qt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",Qt),document.removeEventListener("keydown",Qt),oh()}let sr=null;async function R_(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++Rc,n=()=>e===Rc,r=await Ee("flutterflow"),i=await Ee("flutterflow_project_id");if(n()){if(!r){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new br(r,"").listProjects();if(!n())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),i&&(t.value=i)}catch(s){if(!n())return;console.error("Failed to load projects for deploy:",s),t.innerHTML=''}}}function T_(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function za(t,e,n,r=null){sr={codeInfo:t,checks:e,deps:n,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,R_();const i=document.getElementById("confirm-deps-list"),s=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(i.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${xt(c)}`:"version resolved from your project";return`
  • • ${xt(u)}: ${d}
  • `}).join(""),s.classList.remove("hidden")):s.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
  • • ${xt(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&&Ve(l)}function wh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&Xe(e),sr=null}function N_(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&Xe(e);const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const s of n){const o=document.getElementById(s);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function Ko(t){const e=(m,_)=>{const w=document.getElementById(m);w&&(w.textContent=_||"")},n=t.metadata?.fileName||"",r=t.metadata?.projectId||"",i=t.metadata?.artifactType||"",s=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",n),e("success-artifact-type",i),e("success-time",s),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),h=t.unverified||[],p=t.approximate||[],f=t.warnings||[];(f.length>0||h.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...h.map(m=>`
  • Not verified before deploying: ${D(String(m))}
  • `),...p.map(m=>`
  • Verified approximately: ${D(String(m))}
  • `),...f.map(([m,_])=>`
  • ${D(m)}: ${D(String(_))}
  • `)].join(""),c.classList.remove("hidden"));const g=document.getElementById("commit-success-modal");g&&Ve(g)}function Jo(t){Li(),l_(t)}function M_(){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 Lc={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}},L_=[{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&&(ac(e,!0,"Deploying to FlutterFlow"),Ve(e)),this.set("prepare")},set(t,e=null){if(!(!Lc[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Lc[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=L_.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),s=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&s.push(O_(e)),Eh(this.phaseId==="done"?100:n,t.message,s.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&(ac(t,!1),Xe(t,{force:!0,restoreFocus:!1}))}};function O_(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 bh(t){be.start(t)}function Li(){be.stop()}function Eh(t,e,n,r=null){const i=document.getElementById("commit-progress-bar"),s=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),s&&(s.textContent=e),o&&(o.textContent=n),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function Oc(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,Eh(100,"Failed","Error occurred");return}const n=e[t];n&&be.set(n)}function B_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function D_(){if(!sr){console.error("No pending commit data");return}const t=sr;if(sr=null,rr=T_(),wh(),bh({withProvisioning:B_(t)}),t.bundlePlan){const o=await Zv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});rr=null,Li(),o.success?Ko(o):Jo(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:r,fileName:i}=lh(),s=await Yv(e.content,{artifactType:n,artifactName:r,fileName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});rr=null,Li(),s.success?Ko(s):Jo(s)}window.runThinkingPipeline=qo;window.toggleStep=e_;window.toggleSection=Qv;window.selectWorkflowStep=ze;window.copyCode=t_;window.retryWithDifferentModel=s_;window.openApiKeysModal=Ca;window.closeApiKeysModal=ih;window.closeWalkthroughModal=$v;window.openWalkthroughModal=Pv;window.advanceWalkthrough=Aa;window.commitToFlutterFlow=Jv;function j_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function U_(){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=j_;window.openModelSelector=U_;window.handlePromptImageSelect=gv;window.removePromptImage=mv;window.saveApiKeys=Nv;window.clearAllApiKeys=Mv;window.toggleKeyVisibility=Dv;window.handleWelcomeVideoEnd=$_;window.dismissWelcomeVideo=Qt;window.initiateCommitToFlutterFlow=o_;window.updateFlutterFlowCredentialStatus=u_;window.openCommitConfirmModal=za;window.closeCommitConfirmModal=wh;window.closeCommitSuccessModal=N_;window.showCommitSuccessModal=Ko;window.showCommitFailureModal=Jo;window.toggleCodePreview=M_;window.confirmCommitToFlutterFlow=D_;window.runRefinement=n_;window.regenerateFromPastedErrors=i_;window.clearErrorInput=r_;window.setFlutterFlowEndpoint=Fv;window.getFlutterFlowEndpoint=wr;window.commitProgress=be;window.openSignInModal=ns;window.closeSignInModal=gh;window.handleMagicLinkRequest=m_;window.handleSignOut=v_;window.startCheckout=I_;window.openCustomerPortal=C_;window.openPricingModal=Mi;window.closePricingModal=yh;let vn=null,Sh=null;const Bc=120;function os(){Fn(!0);const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),n=document.getElementById("ready-state");n&&n.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),Sh=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}at(1),H_()}function at(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},n={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=n[t]||n[1]);for(let s=1;s<=3;s++){const o=document.getElementById(`pdot-${s}`);o&&(s{const t=(Date.now()-Sh)/1e3,e=document.getElementById("progress-elapsed"),n=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/Bc*100,i=Math.min(95,r*(1-Math.exp(-t/(Bc*.6)))*1.2);n&&(n.style.width=`${i}%`)},250)}function Mt(){vn&&(clearInterval(vn),vn=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const n=document.getElementById(`pdot-${e}`);n&&(n.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function An(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function xh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function W_(){return cm({bundle:y.artifactBundle,reviewResult:y.step3Result})}function z_(t){return` +
    + ${An(t.severity)}
    ${D(t.message)}
    ${t.suggestion?`
    ${D(t.suggestion)}
    `:""} ${D(t.source)}
    - `}function z_(t){return` + `}function q_(t){return`
  • ${D(t.title)} ${t.detail&&t.detail!==t.title?`

    ${D(t.detail)}

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

    ${Fn("info")} Complete in FlutterFlow

    +

    ${An("info")} Complete in FlutterFlow

    For your information — these don't block the deploy. Finish them by hand in the FlutterFlow editor once the code is pushed.

      ${t.manualSteps.map(l=>` @@ -230,7 +230,7 @@ Error: ${h} ${a}
    -
    - `}function V_(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],r=e.findings.length?e.findings.map(W_).join(""):`
    ${Fn(n.icon)} ${D(n.message)}
    `,i=e.dependencies?.length?e.dependencies.map(l=>` + `}function G_(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],r=e.findings.length?e.findings.map(z_).join(""):`
    ${An(n.icon)} ${D(n.message)}
    `,i=e.dependencies?.length?e.dependencies.map(l=>`
  • ${D(l.name)}${l.version?` ${D(l.version)}`:""}${l.reason?`

    ${D(l.reason)}

    `:""}
  • `).join(""):'
  • No external packages
  • ',s=e.imports?.length?e.imports.map(l=>`${D(l)}`).join(""):'No imports returned',o=e.publicApi?.length?e.publicApi.map(l=>`${D(l)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(l=>`
  • ${D(l.from||"Bundle")} ${D(l.type)} ${D(l.to||"Bundle")}${l.description?`

    ${D(l.description)}

    `:""}
  • `).join(""):'
  • No relationships for this file
  • ';return`
    - ${Fn(e.status)} ${D(Eh(e.status))} + ${An(e.status)} ${D(xh(e.status))}

    ${D(e.artifactName)}

    ${e.description?`

    ${D(e.description)}

    `:""}
    @@ -272,7 +272,7 @@ Error: ${h} ${e.manualSteps.length?`

    Manual FlutterFlow steps for this file

    -
      ${e.manualSteps.map(z_).join("")}
    +
      ${e.manualSteps.map(q_).join("")}
    `:""}
    @@ -304,17 +304,17 @@ Error: ${h}
      ${a}
    - `}function G_(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(n&&n.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 s=t.artifacts.length;i.textContent=`${s} ${s===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(s=>` + `}function K_(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(n&&n.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 s=t.artifacts.length;i.textContent=`${s} ${s===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(s=>` - `).join(""),r.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&Sh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function qa(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),s=H_(),o=Pa();if(q_(s),G_(s),e&&(e.textContent=""),e){const a=Gd(o);e.innerHTML=a}n&&(n.innerHTML=V_(s)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function as(t,e){An(!0),y.selectedArtifactId||(y.selectedArtifactId=xi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const n=document.getElementById("step3-output");n&&(n.textContent=""),qa(),tn();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function Sh(t){y.selectedArtifactId=t,y.resultsViewMode="file",qa()}function K_(){y.resultsViewMode="summary",qa()}function J_(){const t=document.getElementById("btn-copy-results"),e=Pa();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const n=t.querySelector("span");if(n){const r=n.textContent;n.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),n.textContent=r},2e3)}}})}function Y_(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),n.classList.remove("active-down")):(n.classList.toggle("active-down"),e.classList.remove("active-up"));const r=t==="up"?"thumbsUp":"thumbsDown";Ba(r,y.step2Result,y.step1Result),Kt("Generation Feedback",{feedback:r})}function Z_(){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 xh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function An(t){const e=document.getElementById("generation-stage");e&&(t?(e.hidden=!1,e.inert=!1,requestAnimationFrame(()=>e.classList.add("is-active"))):(e.classList.remove("is-active"),e.inert=!0,setTimeout(()=>{e.classList.contains("is-active")||(e.hidden=!0)},260)))}function kh(){const t=z.isVerified&&!!z.email,e=pe.tier||"free",n=t&&rs(),r=!t||Mt(),s=n?"Checking…":r?{free:"Free",professional:"Pro",power:"Power"}[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(z.email||"?")[0].toUpperCase());const l=Er(),u=`${l.count} / ${is()} runs this month`,c=document.getElementById("topbar-credits-count");c&&(c.textContent=String(l.count));const d=document.getElementById("credits-balance");d&&(d.textContent=u);const h=document.getElementById("plans-free-current");h&&h.classList.toggle("hidden",e!=="free"||!r);const p=document.getElementById("plans-checkout-btn-professional");if(p){const g=e==="professional"&&r;p.disabled=g,p.textContent=g?"Current plan":"Subscribe"}const f=document.getElementById("plans-checkout-btn-power");if(f){const g=e==="power"&&r;f.disabled=g,f.textContent=g?"Current plan":"Subscribe"}}function X_(){kh();const t=document.getElementById("credits-modal");t&&Ve(t)}function Q_(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&Xe(e)}function Ih(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.querySelectorAll(".view[data-view]").forEach(i=>{i.dataset.view===t?(i.hidden=!1,i.removeAttribute("inert"),requestAnimationFrame(()=>{i.classList.add("is-active"),n&&i.focus({preventScroll:!0})})):(i.classList.remove("is-active"),i.setAttribute("inert","true"),setTimeout(()=>{i.classList.contains("is-active")||(i.hidden=!0)},260))}),t!=="home")An(!1);else{const i=document.getElementById("main-stage-container");i&&i.classList.contains("visible")&&An(!0)}if(document.querySelectorAll(".nav-link[data-view]").forEach(i=>{const s=i.dataset.view===t;i.setAttribute("aria-current",s?"page":null),s||i.removeAttribute("aria-current")}),e){const i=t==="home"?"":`#${t}`;window.location.hash!==i&&window.history.pushState({view:t},"",i||"#")}}let Bc=!1;function Va(){const t=window.location.hash.replace(/^#/,"");Ih(t||"home",!1,Bc),Bc=!0}window.addEventListener("popstate",t=>{Va()});window.addEventListener("hashchange",()=>{Va()});function ey(){const t=document.querySelectorAll("#example-chips .chip"),e=document.getElementById("pipeline-input");t.forEach(n=>{n.addEventListener("click",()=>{e&&(e.value=n.dataset.prompt||""),e?.focus()})})}window.copyResultsCode=J_;window.selectArtifact=Sh;window.selectResultsSummary=K_;window.submitResultsFeedback=Y_;window.showErrorInputPanel=Z_;window.hideErrorInputPanel=xh;window.setGenerationStageVisible=An;window.switchView=Ih;window.openCreditsModal=X_;window.closeCreditsModal=Q_; + `).join(""),r.onclick=s=>{const o=s.target.closest(".artifact-tab");o?.dataset?.artifactId&&kh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function qa(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),n=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),s=W_(),o=$a();if(V_(s),K_(s),e&&(e.textContent=""),e){const a=Kd(o);e.innerHTML=a}n&&(n.innerHTML=G_(s)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function as(t,e){Fn(!0),y.selectedArtifactId||(y.selectedArtifactId=Si(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const n=document.getElementById("step3-output");n&&(n.textContent=""),qa(),en();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function kh(t){y.selectedArtifactId=t,y.resultsViewMode="file",qa()}function J_(){y.resultsViewMode="summary",qa()}function Y_(){const t=document.getElementById("btn-copy-results"),e=$a();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const n=t.querySelector("span");if(n){const r=n.textContent;n.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),n.textContent=r},2e3)}}})}function Z_(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),n.classList.remove("active-down")):(n.classList.toggle("active-down"),e.classList.remove("active-up")),Da(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function X_(){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 Ih(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}function Fn(t){const e=document.getElementById("generation-stage");e&&(t?(e.hidden=!1,e.inert=!1,requestAnimationFrame(()=>e.classList.add("is-active"))):(e.classList.remove("is-active"),e.inert=!0,setTimeout(()=>{e.classList.contains("is-active")||(e.hidden=!0)},260)))}function Ch(){const t=z.isVerified&&!!z.email,e=pe.tier||"free",n=t&&rs(),r=!t||Nt(),s=n?"Checking…":r?{free:"Free",professional:"Pro",power:"Power"}[e]||"Free":"—",o=document.getElementById("topbar-plan");o&&(o.textContent=s);const a=document.getElementById("topbar-avatar");a&&(a.textContent=(z.email||"?")[0].toUpperCase());const l=Er(),u=`${l.count} / ${is()} runs this month`,c=document.getElementById("topbar-credits-count");c&&(c.textContent=String(l.count));const d=document.getElementById("credits-balance");d&&(d.textContent=u);const h=document.getElementById("plans-free-current");h&&h.classList.toggle("hidden",e!=="free"||!r);const p=document.getElementById("plans-checkout-btn-professional");if(p){const g=e==="professional"&&r;p.disabled=g,p.textContent=g?"Current plan":"Subscribe"}const f=document.getElementById("plans-checkout-btn-power");if(f){const g=e==="power"&&r;f.disabled=g,f.textContent=g?"Current plan":"Subscribe"}}function Q_(){Ch();const t=document.getElementById("credits-modal");t&&Ve(t)}function ey(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("credits-modal");e&&Xe(e)}function Ah(t,e=!0,n=!0){if(t=["home","account","plans"].includes(t)?t:"home",document.querySelectorAll(".view[data-view]").forEach(i=>{i.dataset.view===t?(i.hidden=!1,i.removeAttribute("inert"),requestAnimationFrame(()=>{i.classList.add("is-active"),n&&i.focus({preventScroll:!0})})):(i.classList.remove("is-active"),i.setAttribute("inert","true"),setTimeout(()=>{i.classList.contains("is-active")||(i.hidden=!0)},260))}),t!=="home")Fn(!1);else{const i=document.getElementById("main-stage-container");i&&i.classList.contains("visible")&&Fn(!0)}if(document.querySelectorAll(".nav-link[data-view]").forEach(i=>{const s=i.dataset.view===t;i.setAttribute("aria-current",s?"page":null),s||i.removeAttribute("aria-current")}),e){const i=t==="home"?"":`#${t}`;window.location.hash!==i&&window.history.pushState({view:t},"",i||"#")}}let Dc=!1;function Va(){const t=window.location.hash.replace(/^#/,"");Ah(t||"home",!1,Dc),Dc=!0}window.addEventListener("popstate",t=>{Va()});window.addEventListener("hashchange",()=>{Va()});function ty(){const t=document.querySelectorAll("#example-chips .chip"),e=document.getElementById("pipeline-input");t.forEach(n=>{n.addEventListener("click",()=>{e&&(e.value=n.dataset.prompt||""),e?.focus()})})}window.copyResultsCode=Y_;window.selectArtifact=kh;window.selectResultsSummary=J_;window.submitResultsFeedback=Z_;window.showErrorInputPanel=X_;window.hideErrorInputPanel=Ih;window.setGenerationStageVisible=Fn;window.switchView=Ah;window.openCreditsModal=Q_;window.closeCreditsModal=ey; diff --git a/dist/index.html b/dist/index.html index ccc93f5..1fc3fcf 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1714,6 +1714,80 @@ font-family: "Delight", "DM Sans", sans-serif; } + /* ── Sign In Modal ─────────────────────────────────── */ + .signin-modal-content { + max-width: 420px; + border-radius: var(--radius-xl); + background: var(--surface); + } + .signin-modal-body { + padding: clamp(24px, 5vw, 32px); + } + .signin-modal-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + margin-bottom: 24px; + } + .signin-modal-header h2 { + font-family: var(--font-display); + font-size: var(--fs-h4); + font-weight: var(--fw-bold); + color: var(--fg); + letter-spacing: var(--ls-heading); + margin-bottom: 6px; + } + .signin-modal-header p { + font-size: var(--fs-small); + color: var(--muted-2); + line-height: var(--lh-body); + } + .signin-label { + display: block; + font-size: var(--fs-caption); + font-weight: var(--fw-ui); + color: var(--muted); + margin-bottom: 8px; + } + .signin-input { + width: 100%; + min-height: var(--control-h); + padding: 12px 16px; + margin-bottom: 18px; + font-family: var(--font-body); + font-size: var(--fs-body); + color: var(--fg); + background: var(--surface-sunken); + border: 1px solid var(--border); + border-radius: var(--radius-control); + transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); + } + .signin-input::placeholder { color: var(--muted-2); } + .signin-input:focus { + outline: none; + border-color: var(--accent); + box-shadow: 0 0 0 4px var(--accent-soft); + } + .signin-input[aria-invalid="true"] { + border-color: var(--bad); + box-shadow: 0 0 0 4px var(--bad-soft); + } + .signin-submit { + width: 100%; + font-size: var(--fs-body); + } + .signin-message { + min-height: 1.5em; + margin-top: 16px; + text-align: center; + font-size: var(--fs-small); + line-height: var(--lh-body); + color: var(--muted-2); + } + .signin-message-success { color: var(--ok); } + .signin-message-error { color: var(--bad); } + #usage-counter { font-size: 12px; color: var(--muted-2); } #subscription-tier-badge { display: inline-flex; @@ -2846,7 +2920,7 @@ .view, .generation-stage { transition: none; } } - + @@ -3481,18 +3555,21 @@

    Commit Details