diff --git a/app.js b/app.js index 02af908..6cbef0d 100644 --- a/app.js +++ b/app.js @@ -14,8 +14,8 @@ import { import { createModelArmorError } from "./src/modelArmorResponse.js"; import { getBlockingWidgetErrors, + getCustomActionFileNameError, getCustomActionReturnTypeError, - getCustomClassFileNameError, getDeclaredDartTypes, validateBundleCompatibility, } from "./src/flutterFlowArtifactValidation.js"; @@ -31,9 +31,11 @@ import { extractPackageImports } from "./src/dartPackageImports.js"; import { readProvisionResponse } from "./src/provisionStream.js"; import { buildFlutterFlowSyncMetadata } from "./src/flutterFlowSyncMetadata.js"; import { + applyDependencyOverrides, mergeDependenciesIntoYaml, validateProjectPubspec, } from "./src/pubspecSync.js"; +import { planDependencyChanges } from "./src/dependencyResolution.js"; import { escapeAttr, escapeHtml, escapeHtmlText } from "./src/htmlEscape.js"; import { resolvePipelineErrorStep } from "./src/pipelineErrors.js"; import { @@ -1898,18 +1900,25 @@ async function provisionMissingCodeFiles( /** * Reads the project's current pubspec.yaml, then merges in the packages the - * generated code needs. + * generated code needs at versions the project can actually build. * * FlutterFlow applies the pushed `serialized_yaml` as the project's complete * dependency set, so this must start from the file already in the project. * Synthesizing one would silently drop every package the project already had. * + * A package the project already declares keeps its version. One it does not + * gets the newest pub.dev release compatible with the SDK floor the project's + * own `environment:` block declares. + * * @param {FlutterFlowApiClient} apiClient - Client for the target project - * @param {Object} newDependencies - name -> version constraint + * @param {Object} newDependencies - name -> the minimum + * version the generated code requires, or "" when it needs no specific one * @returns {Promise<{ * yaml: string, * added: string[], * alreadyPresent: string[], + * overridden: Array<{name: string, from: string, to: string}>, + * warnings: string[], * remoteFiles: Map, * }>} * @throws If the project's pubspec.yaml cannot be read, so a deploy fails @@ -1941,8 +1950,32 @@ async function resolveProjectPubspec(apiClient, newDependencies = {}) { projectSourceCache.set(cacheKey, projectSource); } + const plan = await planDependencyChanges( + projectSource.pubspecYaml, + newDependencies, + ); + const overrides = applyDependencyOverrides( + projectSource.pubspecYaml, + plan.overrides, + ); + const merged = mergeDependenciesIntoYaml(overrides.yaml, plan.additions); + + plan.warnings.forEach((warning) => console.warn(`[pubspec] ${warning}`)); + if (merged.added.length > 0) { + console.log( + "Adding dependencies:", + merged.added.map((name) => `${name}: ${plan.additions[name] || "any"}`).join(", "), + plan.sdk.dartSdkFloor ? `(resolved for Dart ${plan.sdk.dartSdkFloor})` : "", + ); + } + plan.kept.forEach(({ name, constraint }) => + console.log(`Keeping your existing ${name}: ${constraint || "(non-version source)"}`), + ); + return { - ...mergeDependenciesIntoYaml(projectSource.pubspecYaml, newDependencies), + ...merged, + overridden: overrides.overridden, + warnings: plan.warnings, remoteFiles: projectSource.files, }; } @@ -2168,14 +2201,18 @@ import '/flutter_flow/uploaded_file.dart'; } /** - * Extracts pubspec dependencies from generated code analysis. + * Extracts the packages generated code imports. + * + * Each is left without a version: the deploy resolves one against the + * project's own pubspec and SDK floor rather than guessing here. + * * @param {string} code - Dart code to analyze - * @returns {Object} Map of package names to versions + * @returns {Object} Map of package names to required minimum versions */ function extractDependencies(code) { const deps = {}; for (const name of extractPackageImports(code)) { - deps[name] = "^1.0.0"; + deps[name] = ""; } return deps; } @@ -2296,13 +2333,19 @@ function validateDartFile( declaredTypes, }); if (returnTypeError) errors.push(returnTypeError); - } - if (codeType === CodeType.CODE_FILE) { - const fileNameError = getCustomClassFileNameError(fileName, content); + const fileNameError = getCustomActionFileNameError( + fileName, + content, + artifactName, + ); if (fileNameError) errors.push(fileNameError); } + // A Code File's path is author-controlled in FlutterFlow, so a file name that + // disagrees with the declared class is a naming convention, not something + // FlutterFlow rejects. It stays a review warning and no longer blocks here. + return { valid: errors.length === 0, errors, @@ -3185,32 +3228,11 @@ function copyCode(elementId) { }); } +// The workflow steps deliberately no longer name the model that runs each one - +// which model handles Prompt Architect, Code Generator or Code Review is our +// call, not something the user has to reason about. Logging stays for support. function updateModelInfo(selectedModel) { - // Update step 1 (Prompt Architect) model label - uses PROMPT_ARCHITECT_MODEL - const step1Label = document.getElementById("step1-model-label") - if (step1Label) { - step1Label.textContent = getModelLabel(PROMPT_ARCHITECT_MODEL) - } - - // Update step 2 (Code Generator) model label - shows selected model - // If user is on free tier and selected a paid model, show: "Selected Model → Free Model" const effectiveModel = getEffectiveModel(selectedModel) - const step2Label = document.getElementById("step2-model-label") - if (step2Label) { - if (effectiveModel !== selectedModel) { - // Free tier user selected a paid model - show both - step2Label.textContent = `${getModelLabel(selectedModel)} → ${getModelLabel(effectiveModel)} (Free Tier)` - } else { - // User's selection matches effective model - step2Label.textContent = getModelLabel(selectedModel) - } - } - - // Update step 3 (Code Review) model label - uses CODE_REVIEW_MODEL - const step3Label = document.getElementById("step3-model-label") - if (step3Label) { - step3Label.textContent = getModelLabel(CODE_REVIEW_MODEL) - } console.log(`Step 1 (Prompt Architect): ${getModelLabel(PROMPT_ARCHITECT_MODEL)}`) if (effectiveModel !== selectedModel) { @@ -4904,7 +4926,14 @@ function openCommitConfirmModal(codeInfo, checks, deps, bundlePlan = null) { const depsSection = document.getElementById("confirm-deps-section"); if (deps && Object.keys(deps).length > 0) { depsList.innerHTML = Object.entries(deps) - .map(([name, version]) => `
  • • ${escapeHtmlText(name)}: ${escapeHtmlText(version)}
  • `) + .map(([name, version]) => { + // A package with no declared minimum has its version resolved against + // the project's pubspec at push time, so promising one here would lie. + const constraint = version + ? `at least ${escapeHtmlText(version)}` + : "version resolved from your project"; + return `
  • • ${escapeHtmlText(name)}: ${constraint}
  • `; + }) .join(""); depsSection.classList.remove("hidden"); } else { @@ -5495,6 +5524,9 @@ function reviewStatusIcon(status, className = "") { pass: ``, warning: ``, fail: ``, + // Manual follow-up is information, not an alert - the triangle is reserved + // for findings that actually stop the push. + info: ``, }; return ``; } @@ -5571,7 +5603,8 @@ function renderSummaryDetail(presentation) { const manualSteps = presentation.manualSteps.length ? `
    -

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

    +

    ${reviewStatusIcon("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.

      ${presentation.manualSteps.map((step) => `
    • diff --git a/dist/assets/index-C8GiNBZX.js b/dist/assets/index-DKBhAJWY.js similarity index 57% rename from dist/assets/index-C8GiNBZX.js rename to dist/assets/index-DKBhAJWY.js index 2c7127e..89d1ee0 100644 --- a/dist/assets/index-C8GiNBZX.js +++ b/dist/assets/index-DKBhAJWY.js @@ -1,7 +1,8 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(i){if(i.ep)return;i.ep=!0;const n=s(i);fetch(i.href,n)}})();var m=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:m,xe=we==null?void 0:we.navigator,F=we==null?void 0:we.document,re=we==null?void 0:we.location,wo=we==null?void 0:we.fetch,yn=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,ga=we==null?void 0:we.AbortController,Rd=we==null?void 0:we.CompressionStream,Pe=xe==null?void 0:xe.userAgent;function tc(){return!(!m||m.navigator.onLine===!1)}var Es=typeof globalThis<"u"?globalThis:m;Es&&typeof self>"u"&&(Es.self=Es),Es&&typeof File>"u"&&(Es.File=function(){});var T=m??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function ma(t,e,s,r,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,s=arguments;return new Promise(function(r,i){var n=t.apply(e,s);function o(l){ma(n,r,i,o,a,"next",l)}function a(l){ma(n,r,i,o,a,"throw",l)}o(void 0)})}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},b.apply(null,arguments)}function sc(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var va=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function _a(t){return typeof t=="string"||t}function ya(t){return typeof t=="string"?t:void 0}var Ss,Td=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t}({}),wa=function(t){return t.GZipJS="gzip-js",t.Base64="base64",t}({}),$d=["$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"],Md=["token"],rc="NativeGzipValidationError",wn=t=>t.length>=2&&t[0]===31&&t[1]===139,ba=(t,e)=>t===wa.GZipJS||e===wa.GZipJS||e==="gzip",Ea=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",ur=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=rc,e},Nd=function(){var t=X(function*(e,s){18>e.size&&ur("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());wn(r)&&r[2]===8||ur("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Ss)return Ss;Ss=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Ss[c]=d>>>0}return Ss})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&ur("invalid-crc");var n=s.length>>>0;i.getUint32(4,!0)!==n&&ur("invalid-size")});return function(e,s){return t.apply(this,arguments)}}();function bn(){return bn=X(function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(r).then(()=>n.close()).catch(function(){var u=X(function*(c){try{yield n.abort(c)}catch{}throw c});return function(c){return u.apply(this,arguments)}}()),a=new Response(i.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield Nd(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}}),bn.apply(this,arguments)}var Od=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Sa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return Od.concat(e).some(r=>{var i=r.toLowerCase();return s.indexOf(i)!==-1})};function O(t,e){return t.indexOf(e)!==-1}var wi=function(t){return t.trim()},En=function(t){return t.replace(/^\$/,"")};function ic(t){var e,s=[];return(e=JSON.stringify(t,function(r,i){if(typeof i=="bigint")return i.toString();if(typeof i!="function"&&typeof i!="symbol"){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&typeof i=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(i))return"[Circular]";s.push(i)}return i}}))!==null&&e!==void 0?e:"null"}var nc=Object.prototype,oc=nc.hasOwnProperty,bi=nc.toString,L=Array.isArray||function(t){return bi.call(t)==="[object Array]"},Ee=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(oc.call(t,e))return!1;return!0}return!1},I=t=>t===void 0,W=t=>bi.call(t)=="[object String]",Sn=t=>W(t)&&t.trim().length===0,Re=t=>t===null,B=t=>I(t)||Re(t),de=t=>bi.call(t)=="[object Number]"&&t==t,lt=t=>de(t)&&t>0,Ke=t=>bi.call(t)==="[object Boolean]",Ld=t=>t instanceof FormData,Dd=t=>O($d,t),Bd=t=>O(Md,t);function ac(t){return t===null||typeof t!="object"}function Lr(t,e){return{}.toString.call(t)==="[object "+e+"]"}function bo(t){return typeof Event<"u"&&lc(t,Event)}function lc(t,e){try{return t instanceof e}catch{return!1}}var jd=[!0,"true",1,"1","yes"],Ui=t=>O(jd,t),Ud=[!1,"false",0,"0","no"];function st(t,e,s,r,i){return e>s&&(r.warn("min cannot be greater than max."),e=s),de(t)?t>s?(r.warn(" cannot be greater than max: "+s+". Using max value instead."),s):e>t?(r.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(r.warn(" must be a number. using max or fallback. max: "+s+", fallback: "+i),st(i||s,e,s,r))}class Hd{constructor(e){this.tt={},this.et=e.et,this.it=st(e.bucketSize,0,100,e.rt),this.nt=st(e.refillRate,0,this.it,e.rt),this.st=st(e.refillInterval,0,864e5,e.rt)}ot(e,s){var r=Math.floor((s-e.lastAccess)/this.st);r>0&&(e.tokens=Math.min(e.tokens+r*this.nt,this.it),e.lastAccess=e.lastAccess+r*this.st)}consumeRateLimit(e){var s,r=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,r):this.tt[i]=n={tokens:this.it,lastAccess:r},n.tokens===0||(n.tokens--,n.tokens===0&&((s=this.et)==null||s.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Le="Mobile",Dr="iOS",vt="Android",cs="Tablet",cc=vt+" "+cs,uc="iPad",dc="Apple",hc=dc+" Watch",Bs="Safari",us="BlackBerry",pc="Samsung",fc=pc+"Browser",gc=pc+" Internet",Ut="Chrome",Wd=Ut+" OS",mc=Ut+" "+Dr,Eo="Internet Explorer",vc=Eo+" "+Le,So="Opera",zd=So+" Mini",xo="Edge",_c="Microsoft "+xo,ns="Firefox",yc=ns+" "+Dr,Vs="Nintendo",Gs="PlayStation",os="Xbox",wc=vt+" "+Le,bc=Le+" "+Bs,Ts="Windows",xn=Ts+" Phone",xa="Nokia",kn="Ouya",Ec="Generic",qd=Ec+" "+Le.toLowerCase(),Sc=Ec+" "+cs.toLowerCase(),In="Konqueror",xc="Oculus Browser",Br="Vivaldi",kc="Yandex",jr="Whale",Cn="DuckDuckGo",Ic="Pale Moon",Ur="Waterfox",js="Brave",Cc="Google Search App",le="(\\d+(\\.\\d+)?)",Hi=new RegExp("Version/"+le),Vd=new RegExp(os,"i"),Gd=new RegExp(Gs+" \\w+","i"),Kd=new RegExp(Vs+" \\w+","i"),ko=new RegExp(us+"|PlayBook|BB10","i"),Jd={"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"},Fc=function(t,e,s,r){e=e||"";var i=function(n){return n!=null&&n.brave?js:null}(s);return i||(r!=null&&r.detectGoogleSearchApp&&O(t,"GSA/")?Cc:O(t," OPR/")&&O(t,"Mini")?zd:O(t," OPR/")?So:ko.test(t)?us:O(t,"IE"+Le)||O(t,"WPDesktop")?vc:O(t,"OculusBrowser")?xc:O(t,fc)?gc:O(t,xo)||O(t,"Edg/")?_c:O(t,Br+"/")?Br:O(t,"YaBrowser/")?kc:O(t,jr+"/")?jr:O(t,Cn+"/")||O(t,"Ddg/")?Cn:O(t,"FBIOS")?"Facebook "+Le:O(t,"UCWEB")||O(t,"UCBrowser")?"UC Browser":O(t,"CriOS")?mc:O(t,"CrMo")||O(t,Ut)?Ut:O(t,vt)&&O(t,Bs)?wc:O(t,"FxiOS")?yc:O(t.toLowerCase(),In.toLowerCase())?In:O(t,js+"/")?js:((n,o)=>o&&O(o,dc)||function(a){return O(a,Bs)&&!O(a,Ut)&&!O(a,vt)}(n))(t,e)?O(t,Le)?bc:Bs:O(t,"PaleMoon/")?Ic:O(t,Ur+"/")?Ur:O(t,ns)?ns:O(t,"MSIE")||O(t,"Trident/")?Eo:O(t,"Gecko")?ns:"")},Yd={[vc]:[new RegExp("rv:"+le)],[_c]:[new RegExp(xo+"?\\/"+le)],[Ut]:[new RegExp("("+Ut+"|CrMo)\\/"+le)],[mc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Bs]:[Hi],[bc]:[Hi],[So]:[new RegExp("(Opera|OPR)\\/"+le)],[ns]:[new RegExp(ns+"\\/"+le)],[yc]:[new RegExp("FxiOS\\/"+le)],[In]:[new RegExp("Konqueror[:/]?"+le,"i")],[us]:[new RegExp(us+" "+le),Hi],[wc]:[new RegExp("android\\s"+le,"i")],[gc]:[new RegExp(fc+"\\/"+le)],[xc]:[new RegExp("OculusBrowser\\/"+le)],[Br]:[new RegExp(Br+"\\/"+le)],[kc]:[new RegExp("YaBrowser\\/"+le)],[jr]:[new RegExp(jr+"\\/"+le)],[js]:[new RegExp(js+"\\/"+le)],[Cn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Ic]:[new RegExp("PaleMoon\\/"+le)],[Ur]:[new RegExp(Ur+"\\/"+le)],[Cc]:[new RegExp("GSA\\/"+le)],[Eo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Zd=function(t,e,s,r){var i=Fc(t,e,s,r),n=Yd[i];if(I(n))return null;for(var o=0;n.length>o;o++){var a=t.match(n[o]);if(a)return parseFloat(a[a.length-2])}return null},ka=[[new RegExp(os+"; "+os+" (.*?)[);]","i"),t=>[os,t&&t[1]||""]],[new RegExp(Vs,"i"),[Vs,""]],[new RegExp(Gs,"i"),[Gs,""]],[ko,[us,""]],[new RegExp(Ts,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[xn,""];if(new RegExp(Le).test(e)&&!/IEMobile\b/.test(e))return[Ts+" "+Le,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=Jd[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[Ts,r]}return[Ts,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Dr,[t[3],t[4],t[5]||"0"].join(".")]:[Dr,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=I(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+vt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+vt+")","i"),t=>t&&t[2]?[vt,[t[2],t[3],t[4]||"0"].join(".")]:[vt,""]],[/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/,[Wd,""]],[/Linux|debian/i,["Linux",""]]],Ia=function(t){return Kd.test(t)?Vs:Gd.test(t)?Gs:Vd.test(t)?os:new RegExp(kn,"i").test(t)?kn:new RegExp("("+xn+"|WPDesktop)","i").test(t)?xn:/iPad/.test(t)?uc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?hc:ko.test(t)?us:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(xa,"i").test(t)?xa:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Le).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:cc:new RegExp("(pda|"+Le+")","i").test(t)?qd:new RegExp(cs,"i").test(t)&&!new RegExp(cs+" pc","i").test(t)?Sc:""},Xd=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ca(t,e){return typeof(s=t)=="string"&&Xd.test(s)?t:e();var s}function kt(t){return t&&t.split("#")[0]}function Io(t,e){var s=setTimeout(t,e);return s!=null&&s.unref&&(s==null||s.unref()),s}function Fa(t,e,s){return Pc.apply(this,arguments)}function Pc(){return(Pc=X(function*(t,e,s){var r;try{return yield Promise.race([t,new Promise((i,n)=>{r=Io(()=>{try{s==null||s(),i()}catch(o){n(o)}},e)})])}finally{clearTimeout(r)}})).apply(this,arguments)}var Qd=t=>t instanceof Error,Ac={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}},eh=Ac.info;function Rc(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(L(t))return{arrayValue:{values:t.map(e=>Rc(e))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Hr(t){var e=[];for(var s in t){var r=t[s];Re(r)||I(r)||e.push({key:s,value:Rc(r)})}return e}function th(t,e){var s=Ac[t.level||"info"]||eh,r=s.text,i=s.number,n=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),B(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),B(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=b({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:Hr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),I(t.trace_flags)||(l.flags=t.trace_flags),l}function Tc(t,e,s){return b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function $c(t,e,s,r){return{resourceLogs:[{resource:{attributes:Hr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let sh=class{constructor(t,e,s,r,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=i,this.dt=n,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var s={record:th(e,this.ut())};this.ht(()=>this.At(s))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return r}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return X(function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally(()=>{t.ct=null})),t.ct})()}Ft(){var t=this;return X(function*(){var e;t.Et();var s=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(s.length!==0)for(var r=s.length,i=0;s.length>0&&r>i;){var n,o;t.ft=0;var a=Math.min(s.length,t.Ct),l=s.slice(0,a),u=$c(l.map(d=>d.record),t.Lt(),(n=t.vt)!==null&&n!==void 0?n:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),s=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}})()}Dt(t){var e=this;return X(function*(){var s,r=Math.max(0,t-e.ft),i=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(r)),yield e.dt()})()}Lt(){return Tc(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var s=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>s.length||(s.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),s.push(t),this._instance.setPersistedProperty(ut.LogsQueue,s),this.kt>s.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Io(()=>{this.Nt=void 0,this.It()},t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(ut.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X(function*(){e.Et();var s=e.flush().catch(()=>{});t!==void 0?yield Fa(s,t):yield s})()}flushWithTimeout(t){var e=this;return X(function*(){var s=e.flush();yield Fa(s,t,()=>{s.catch(()=>{})})})()}It(){this.flush().then(()=>{this.yt=0},t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)}).finally(()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())})}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Wi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Pa(t){return String(t)+"000000"}function Aa(t,e,s,r){var i="";return r&&(i=Object.keys(r).sort().map(n=>JSON.stringify(n)+":"+JSON.stringify(r[n])).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+i}let rh=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}gauge(t,e,s){this.Vt({name:t,type:"gauge",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}histogram(t,e,s){this.Vt({name:t,type:"histogram",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}flush(){var t=this,e=this.ct,s=function(){var i=X(function*(){e&&(yield e.catch(()=>{})),yield t.Zt()});return function(){return i.apply(this,arguments)}}(),r=s().finally(()=>{this.ct===r&&(this.ct=null)});return this.ct=r,r}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var s,r;try{s=e.attributes?b({},e.attributes):void 0,r=Aa(e.type,e.name,e.unit,s)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var s;switch(t.type){case"count":t.total=((s=t.total)!==null&&s!==void 0?s:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Wi.length+1).fill(0)});var r=t.hist;r.count+=1,r.sum+=e,r.min=Math.min(r.min,e),r.max=Math.max(r.max,e),r.bucketCounts[function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length}(e,Wi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=Io(()=>{this.Nt=void 0,this.flush().catch(t=>{this.rt.error("Metrics flush failed:",t)})},this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return X(function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var s=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(s===t.Wt)switch(r.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",r.error)}}})()}Gt(t){return e=this.Xt(t),s=function(n,o,a){return b({},n.resourceAttributes,{"service.name":n.serviceName||"unknown_service"},n.environment&&{"deployment.environment":n.environment},n.serviceVersion&&{"service.version":n.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})}(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Hr(s)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,s,r,i}Xt(t){var e=Pa(Date.now()),s=new Map;for(var r of t.values()){var i,n=Aa(r.type,r.name,r.unit,void 0),o=s.get(n);o||(o=b({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(n,o));var a=Hr((i=r.attributes)!==null&&i!==void 0?i:{}),l=Pa(r.windowStartMs);if(r.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=r.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(r.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=r.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else r.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:r.hist.count,sum:r.hist.sum,min:r.hist.min,max:r.hist.max,bucketCounts:r.hist.bucketCounts,explicitBounds:Wi})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var i=r[0],n=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=n.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var dr,Ra,zi;function ih(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return zi&&s.length===Ra||(Ra=s.length,zi=s.reduce((r,i)=>{dr||(dr={});var n=dr[i];if(n)r[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l==null?void 0:l.filename,c=e[i];if(u&&c){r[u]=c,dr[i]=[u,c];break}}return r},{})),zi}}class nh{constructor(e,s,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=s,this.modifiers=r}buildFromUnknown(e,s){s===void 0&&(s={});var r=s&&s.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,s,0).apply(e),n=this.buildParsingContext(s),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var s=this;return X(function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&L(r.stacktrace.frames)&&(r.stacktrace.frames=yield s.applyModifiers(r.stacktrace.frames));return e})()}coerceFallback(e){var s;return{type:"Error",value:"Unknown error",stack:(s=e.syntheticException)==null?void 0:s.stack,synthetic:!0}}parseStacktrace(e,s){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),b({},e,{cause:r,stack:i})}applyChunkIds(e,s){return e.map(r=>(r.filename&&s&&(r.chunk_id=s[r.filename]),r))}applyCoercers(e,s){for(var r of this.coercers)if(r.match(e))return r.coerce(e,s);return this.coerceFallback(s)}applyModifiers(e){var s=this;return X(function*(){var r=e;for(var i of s.modifiers)r=yield i(r);return r})()}convertToExceptionList(e,s){var r,i,n,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(i=s.handled)===null||i===void 0||i,synthetic:(n=e.synthetic)!==null&&n!==void 0&&n}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:ih(this.stackParser),skipFirstLines:(s=e.skipFirstLines)!==null&&s!==void 0?s:1}}buildCoercingContext(e,s,r){r===void 0&&(r=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(n,a)}};return b({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:n=>i(n,r),next:n=>i(n,r+1)})}}var ds="?";function Fn(t,e,s,r,i){var n={platform:t,filename:e,function:s===""?ds:s,in_app:!0};return I(r)||(n.lineno=r),I(i)||(n.colno=i),n}var Mc=(t,e)=>{var s=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return s||r?[t.indexOf("@")!==-1?t.split("@")[0]:ds,s?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},oh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,ah=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,lh=/\((\S*)(?::(\d+))(?::(\d+))\)/,ch=(t,e)=>{var s=oh.exec(t);if(s)return Fn(e,s[1],ds,+s[2],+s[3]);var r=ah.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=lh.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var n=Mc(r[1]||ds,r[2]);return Fn(e,n[1],n[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},uh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,dh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,hh=(t,e)=>{var s=uh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=dh.exec(s[3]);r&&(s[1]=s[1]||"eval",s[3]=r[1],s[4]=r[2],s[5]="")}var i=s[3],n=s[1]||ds,o=Mc(n,i);return Fn(e,i=o[1],n=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Ta=/\(error: (.*)\)/;class ph{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,s){var r=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var s=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?s+": "+e.message:s}isDOMException(e){return Lr(e,"DOMException")}isDOMError(e){return Lr(e,"DOMError")}}class fh{match(e){return function(s){switch({}.toString.call(s)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return lc(s,Error)}}(e)}coerce(e,s){return{type:this.getType(e),value:this.getMessage(e,s),stack:this.getStack(e),cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,s){var r=e.message;return String(r.error&&typeof r.error.message=="string"?r.error.message:r)}getStack(e){return e.stacktrace||e.stack||void 0}}class gh{constructor(){}match(e){return!!Lr(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,s){var r;if(e.error!=null)return s.apply(e.error);var i=s.apply(e.message);return b({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var s=e;if(W(s.filename)&&s.filename.length>0){var r,i,n=(r=s.lineno)!==null&&r!==void 0?r:0,o=(i=s.colno)!==null&&i!==void 0?i:0;return`Error - at `+s.filename+":"+n+":"+o}}}var mh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class vh{match(e){return typeof e=="string"}coerce(e,s){var r,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,i=e.match(mh);return i&&(s=i[1],r=i[2]),[s,r]}}var _h=["fatal","error","warning","log","info","debug"];function Nc(t,e){e===void 0&&(e=40);var s=Object.keys(t);if(s.sort(),!s.length)return"[object has no keys]";for(var r=s.length;r>0;r--){var i=s.slice(0,r).join(", ");if(e>=i.length)return r===s.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class yh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,i,n=this.getErrorPropertyFromObject(e);return n?s.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=s.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return bo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var s="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(s+=" with message: '"+e.message+"'"),s}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+Nc(e)}isSeverityLevel(e){return W(e)&&!Sn(e)&&_h.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 s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(Qd(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class wh{match(e){return bo(e)}coerce(e,s){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+Nc(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class bh{match(e){return ac(e)}coerce(e,s){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Eh{match(e){return Lr(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!bo(e))return!1;try{var s=e.detail;return s!=null&&typeof s=="object"&&"reason"in s}catch{return!1}}coerce(e,s){var r,i=this.getUnhandledRejectionReason(e);return ac(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var Wr="$message",zr="$timestamp",Sh=new Set([Wr,zr]),qi={enabled:!0,max_bytes:32768};function qr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:qi.enabled,max_bytes:kh(t.max_bytes,qi.max_bytes)}:b({},qi)}class xh{constructor(e){this.Ke=[],this.Je=0,this.Ne=qr(e)}setConfig(e){this.Ne=qr(e),this.Xe()}add(e){var s=function(i){var n;try{n=ic(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[Wr],u=a[zr];return!W(l)||l.trim().length===0||!W(u)&&!de(u)?void 0:{step:a,json:n}}catch{return}}(e);if(s){var r=function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var n=encodeURIComponent(i),o=0,a=0;n.length>a;a++)n[a]==="%"?(o+=1,a+=2):o+=1;return o}(s.json);r>this.Ne.max_bytes||(this.Ke.push({step:s.step,bytes:r}),this.Je+=r,this.Xe())}}getAttachable(){return this.Ke.map(e=>e.step)}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function kh(t,e){if(!de(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var Oc=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(i){if(m&&(Y.DEBUG||m.POSTHOG_DEBUG||s)&&!I(m.console)&&m.console){for(var n=("__rrweb_original__"in m.console[i])?m.console[i].__rrweb_original__:m.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("error",...n)},critical(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];console.error(t,...n)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>Oc(t+" "+i,n)};return r},C=Oc("[PostHog.js]"),se=C.createLogger,Ih=se("[ExternalScriptsLoader]"),Vi=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return Ih.warn(e+" was requested but loading of external scripts is disabled."),s("Loading of external scripts is disabled");var r=F==null?void 0:F.querySelectorAll("script");if(r){for(var i,n=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:s()}:(l.addEventListener("load",u=>{l.__posthog_loading_callback_fired=!0,s(void 0,u)}),l.onerror=u=>s(u),{v:void 0})}},o=0;r.length>o;o++)if(i=n())return i.v}var a=()=>{if(!F)return s("document not found");var l=F.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,s(void 0,d)},l.onerror=d=>s(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return s("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")F.head.appendChild(l);else{var u,c=F.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):F.body.appendChild(l)}};F!=null&&F.body?a():F==null||F.addEventListener("DOMContentLoaded",a)};T.__PosthogExtensions__=T.__PosthogExtensions__||{},T.__PosthogExtensions__.loadExternalDependency=(t,e,s)=>{if(e!=="remote-config"){var r;if(t.config.strict_script_versioning)r=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var i="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var n=3e5;i=i+"&t="+Math.floor(Date.now()/n)*n}r=t.requestRouter.endpointFor("assets",i)}Vi(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");Vi(t,o,s)}},T.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);Vi(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var Lc="$people_distinct_id",Ks="$device_id",Gi="$device_model",$s="__alias",Ms="__timers",Pn="$autocapture_disabled_server_side",An="$heatmaps_enabled_server_side",Rn="$exception_capture_enabled_server_side",Tn="$error_tracking_suppression_rules",$n="$error_tracking_capture_extension_exceptions",Mn="$web_vitals_enabled_server_side",Co="$dead_clicks_enabled_server_side",Fo="$product_tours_enabled_server_side",Nn="$web_vitals_allowed_metrics",jt="$session_recording_remote_config",Dc="$replay_sample_rate",Bc="$replay_override_sampling",jc="$replay_override_linked_flag",Uc="$replay_override_url_trigger",Hc="$replay_override_event_trigger",rs="$sesid",Po="$session_is_sampled",Nt="$enabled_feature_flags",Ns="$active_feature_flags",Sr="$early_access_features",On="$feature_flag_details",Os="$feature_flag_payloads",xr="$feature_flag_request_id",Vr="$minimal_flag_called_events",Qe="$override_feature_flags",Ot="$override_feature_flag_payloads",ct="$stored_person_properties",Lt="$stored_group_properties",Ln="$surveys",Gr="$surveys_loaded_at",Dn="$surveys_activated",kr="$surveys_activated_session",Ir="$surveys_activated_timestamps",Ls="ph_product_tours",Bt="$flag_call_reported",Ds="$flag_call_reported_session_id",Cr="$feature_flag_errors",Us="$feature_flag_evaluated_at",He="$user_state",Bn="$client_session_props",jn="$capture_rate_limit",Un="$initial_campaign_params",Hn="$initial_referrer_info",Kr="$initial_person_info",Jr="$epp",hr="$posthog_cookieless",Wc="$cookieless_mode",zc="$sdk_debug_extensions_init_method",qc="$sdk_debug_extensions_init_time_ms",Vc="$sdk_debug_recording_script_not_loaded",Ao="PostHog loadExternalDependency extension not found.",Dt="on_reject",ht="always",Yt="anonymous",Pt="identified",Wn="identified_only",Yr="visibilitychange",Zr="beforeunload",es="$pageview",Ki="$pageleave",Ji="$identify",$a="$groupidentify";function pr(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!B(t))if(L(t))t.forEach(e);else if(Ld(t))t.forEach((r,i)=>e(r,i));else for(var s in t)oc.call(t,s)&&e(t[s],s)}var ee=function(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;e>r;r++)s[r-1]=arguments[r];for(var i of s)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Fr(t){for(var e=Object.keys(t),s=e.length,r=new Array(s);s--;)r[s]=[e[s],t[e[s]]];return r}var Ma=function(t){try{return t()}catch{return}},Ch=function(t){return function(){try{for(var e=arguments.length,s=new Array(e),r=0;e>r;r++)s[r]=arguments[r];return t.apply(this,s)}catch(i){C.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),C.critical(i)}}},Ro=function(t){var e={};return Z(t,function(s,r){(W(s)&&s.length>0||de(s))&&(e[r]=s)}),e},Fh=["herokuapp.com","vercel.app","netlify.app"];function Ph(t){var e=t==null?void 0:t.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of Fh)if(s===r)return!1;return!0}function ie(t,e,s,r){var i=r??{},n=i.capture,o=i.passive;t==null||t.addEventListener(e,s,{capture:n!==void 0&&n,passive:o===void 0||o})}function zn(t){return t.name==="ph_toolbar_internal"}var Gc=t=>{if(F){try{for(var e=t+"=",s=F.cookie.split(";").filter(n=>n.length),r=0;s.length>r;r++){for(var i=s[r];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return de(t)&&isFinite(t)&&Math.floor(t)===t});class Xr{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,i){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>s||0>r||0>i||e>0xffffffffffff||s>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var n=new Uint8Array(16);return n[0]=e/Math.pow(2,40),n[1]=e/Math.pow(2,32),n[2]=e/Math.pow(2,24),n[3]=e/Math.pow(2,16),n[4]=e/256,n[5]=e,n[6]=112|s>>>8,n[7]=s,n[8]=128|r>>>24,n[9]=r>>>16,n[10]=r>>>8,n[11]=r,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new Xr(n)}toString(){for(var e="",s=0;this.bytes.length>s;s++)e=e+(this.bytes[s]>>>4).toString(16)+(15&this.bytes[s]).toString(16),s!==3&&s!==5&&s!==7&&s!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new Xr(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var s=0;16>s;s++){var r=this.bytes[s]-e.bytes[s];if(r!==0)return Math.sign(r)}return 0}}class Ah{generate(){var e=this.generateOrAbort();if(!I(e))return e;this.S=0;var s=this.generateOrAbort();if(I(s))throw new Error("Could not generate UUID after timestamp reset");return s}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return Xr.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new Rh}}var Na,Kc=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};m&&!I(m.crypto)&&crypto.getRandomValues&&(Kc=t=>crypto.getRandomValues(t));class Rh{nextUint32(){return this.R.length>this.O||(Kc(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>Th().toString(),Th=()=>(Na||(Na=new Ah)).generate(),xs="",$h=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!F,j(t){C.error("cookieStore error: "+t)},P:Gc,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,i){if(!F)return!1;try{var n="",o="",a=function(c,d){if(d){var h=function(f,g){if(g===void 0&&(g=F),xs)return xs;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var v=f.split("."),_=Math.min(v.length,8),w="dmn_chk_"+dt();!xs&&_--;){var S=v.slice(_).join("."),k=w+"=1;domain=."+S+";path=/";g.cookie=k+";max-age=3",g.cookie.includes(w)&&(g.cookie=k+";max-age=0",xs=S)}return xs}(c);if(!h){var p=(f=>{var g=f.match($h);return g?g[0]:""})(c);p!==h&&C.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""}(F.location.hostname,r);if(s){var l=new Date;l.setTime(l.getTime()+864e5*s),n="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+n+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&C.warn("cookieStore warning: large cookie, len="+u.length),F.cookie=u,!0}catch{return!1}},q(t,e){if(F!=null&&F.cookie)try{pt.F(t,"",-1,e)}catch{return}}},Yi=null,Q={N(){if(!Re(Yi))return Yi;var t=!0;if(I(m))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||C.error("localStorage unsupported; falling back to cookie store"),Yi=t,t},j(t){C.error("localStorage error: "+t)},P(t){try{return m==null?void 0:m.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 m==null||m.localStorage.setItem(t,JSON.stringify(e)),!0}catch(s){Q.j(s)}return!1},q(t){try{m==null||m.localStorage.removeItem(t)}catch(e){Q.j(e)}}},Mh=[Ks,"distinct_id",rs,Po,Jr,Kr,He],fr={},Nh={N:()=>!0,j(t){C.error("memoryStorage error: "+t)},P:t=>fr[t]||null,H:t=>fr[t]||null,F:(t,e)=>(fr[t]=e,!0),q(t){delete fr[t]}},At=null,ce={N(){if(!Re(At))return At;if(At=!0,I(m))At=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(At=!1),ce.q(t)}catch{At=!1}return At},j(t){C.error("sessionStorage error: ",t)},P(t){try{return m==null?void 0:m.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 m==null||m.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(s){ce.j(s)}return!1},q(t){try{m==null||m.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class Oh{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Dt}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,s=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+s:"__ph_opt_in_out_"+s)}get ei(){var e=this.ii.P(this.ri);return Ui(e)?1:O(Ud,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,s=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==s){this.ni=s;var r=e==="localStorage"?pt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Ui(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[xe==null?void 0:xe.doNotTrack,xe==null?void 0:xe.msDoNotTrack,T.doNotTrack].some(e=>Ui(e))}}function Jc(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Ee(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(n){return C.error("Error in get_current_url, falling back to window.location.href",n),e}}var Yc="__POSTHOG_TOOLBAR__",Lh=1,Dh=3,Bh=11;function Oa(t){return t instanceof Element&&(t.id===Yc||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function It(t){return!!t&&t.nodeType===Lh}function Ne(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Zc(t){return!!t&&t.nodeType===Dh}function Xc(t){return!!t&&t.nodeType===Bh&&It(t.host)}var Qc=1e3;function To(t){return t?wi(t).split(/\s+/):[]}function La(t,e){var s=function(r){var i,n=m==null||(i=m.location)==null?void 0:i.href;return I(n)?void 0:Jc(r,n)}(e);return!!(s&&t&&t.some(r=>s.match(r)))}function Qr(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return To(e)}function eu(t){return B(t)?null:wi(t).split(/(\s+)/).filter(e=>Hs(e)).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function Js(t){var e="";return Vn(t)&&!iu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;Zc(s)&&s.textContent&&(e+=(r=eu(s.textContent))!==null&&r!==void 0?r:"")}),wi(e)}function Zi(t){var e;return I(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var $o=["a","button","form","input","select","textarea","label"];function qn(t,e){if(I(e))return!0;var s,r=function(n){if(e.some(o=>function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}}(n,o)))return{v:!0}};for(var i of t)if(s=r(i))return s.v;return!1}function tu(t){var e=t.parentNode;return!(!e||!It(e))&&e}var jh=[".ph-no-autocapture","[data-ph-no-autocapture]"],su=["next","previous","prev",">","<"],Uh=[...su,"+","-","−","–"],Da=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,Ba=[".ph-no-rageclick",".ph-no-capture"],Hh=["","text","search","email","password","url","tel","number"];function ja(t,e){if(!m||Mo(t))return!1;var s,r,i,n,o;if(Ke(e)?(s=!!e&&Ba,r=void 0,i=!1):(s=(n=e==null?void 0:e.css_selector_ignorelist)!==null&&n!==void 0?n:Ba,r=e==null?void 0:e.content_ignorelist,i=(o=e==null?void 0:e.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||i&&function(l){return!(!l||!It(l))&&(!!Ne(l,"textarea")||(Ne(l,"input")?O(Hh,(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=ru(t,!1).targetElementList;return!function(l,u){if(l===!1||I(l))return!1;var c;if(l===!0)c=su;else{if(!L(l))return!1;if(l.length>10)return C.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map(d=>d.toLowerCase())}return u.some(d=>{var h=d.safeText,p=d.ariaLabel;return c.some(f=>Da(h,f)||Da(p,f))})}(r,a.map(l=>{var u;return{safeText:Js(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}}))&&!qn(a,s)}var Mo=t=>!t||Ne(t,"html")||!It(t),ru=(t,e)=>{if(!m||Mo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],i=t;i.parentNode&&!Ne(i,"body");)if(Xc(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var n=tu(i);if(!n)break;if(e||$o.indexOf(n.tagName.toLowerCase())>-1)s=!0;else try{var o=m.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(n),i=n}return{parentIsUsefulElement:s,targetElementList:r}};function Vn(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Ne(r,"body");r=r.parentNode){if(s++>=Qc||e.has(r))return!1;e.add(r);var i=Qr(r);if(O(i,"ph-sensitive")||O(i,"ph-no-capture"))return!1}if(O(Qr(t),"ph-include"))return!0;var n=t.type||"";if(W(n))switch(n.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 iu(t){return!!(Ne(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Ne(t,"select")||Ne(t,"textarea")||t.getAttribute("contenteditable")==="true")}var Ua=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),Ha=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,Wh=[16,15,14,13],zh=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),Wa=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),za=/[0-9A-Za-z_]/;function qh(t){for(var e=0,s=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;s&&(i*=2)>9&&(i-=9),e+=i,s=!s}return e%10==0}function Hs(t,e){if(e===void 0&&(e=!0),B(t))return!1;if(W(t)){t=wi(t);var s=e?Ua.test((t||"").replace(/[- ]/g,"")):function(i){var n;for(Ha.lastIndex=0;n=Ha.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Wh){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(Ua.test(d)&&qh(d))return!0}}}return!1}(t);if(s)return!1;var r=e?zh.test(t):function(i){var n;for(Wa.lastIndex=0;n=Wa.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&za.test(o)&&za.test(a)))return!0}return!1}(t);if(r)return!1}return!0}function qa(t){var e=Js(t);return Hs(e=(e+" "+nu(t)).trim())?e:""}function nu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;if(s&&((r=s.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=Js(s);e=(e+" "+i).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+nu(s)).trim())}catch(n){C.error("[AutoCapture]",n)}}),e}function Va(t){return t.replace(/"|\\"/g,'\\"')}function Vh(t){var e=t.attr__class;if(e)return L(e)?e:To(e)}var gr=se("[Dead Clicks]"),Gh=()=>!0,Kh=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Co)),r=t.instance.config.capture_dead_clicks;return Ke(r)?r:!!te(r)||s};class Ga{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,s,r){this.instance=e,this.isEnabled=s,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var s=e.config;"captureDeadClicks"in s&&(this.instance.persistence&&this.instance.persistence.register({[Co]:s.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai(()=>{this.oi()}):this.stop()}ai(e){var s,r;(s=T.__PosthogExtensions__)!=null&&s.initDeadClicksAutocapture?e():(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",i=>{i?gr.error("failed to load script",i):e()})}oi(){var e;if(F){if(!this.si&&(e=T.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=T.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(F),gr.info("starting...")}}else gr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,gr.info("stopping..."))}}var Xi=se("[SegmentIntegration]"),ou="posthog-js";function au(t,e){var s=e===void 0?{}:e,r=s.organization,i=s.projectId,n=s.prefix,o=s.severityAllowList,a=o===void 0?["error"]:o,l=s.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var v=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=v,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],S=w.map(E=>b({},E,{stacktrace:E.stacktrace?b({},E.stacktrace,{type:"raw",frames:(E.stacktrace.frames||[]).map(P=>b({},P,{platform:"web:javascript"}))}):void 0})),k={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:S,$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&&(k.$sentry_url=(n||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(k)),c}}class Jh{constructor(e,s,r,i,n,o){this.name=ou,this.setupOnce=function(a){a(au(e,{organization:s,projectId:r,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class Ka{constructor(e){this.li=(s,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(C.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:i}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,s){var r,i=this.vi(e,s);return this.ui={pathname:(r=m==null?void 0:m.location.pathname)!==null&&r!==void 0?r:"",pageViewId:s,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var s;return this.vi(e,(s=this.ui)==null?void 0:s.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,s){var r=this.ui;if(!r)return{$pageview_id:s};var i={$pageview_id:s,$prev_pageview_id:r.pageViewId},n=this._instance.scrollManager.getContext();if(n&&!this._instance.config.disable_scroll_properties){var o=n.maxScrollHeight,a=n.lastScrollY,l=n.maxScrollY,u=n.maxContentHeight,c=n.lastContentY,d=n.maxContentY;if(!(I(o)||I(a)||I(l)||I(u)||I(c)||I(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?st(a/o,0,1,C):1,p=o>1?st(l/o,0,1,C):1,f=u>1?st(c/u,0,1,C):1,g=u>1?st(d/u,0,1,C):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage: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 Qi=["flags","surveys"],Yh={[Lc]:{exposure:"hidden"},[$s]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Ms]:{exposure:"hidden"},[Pn]:{exposure:"event"},[An]:{exposure:"hidden"},[Rn]:{exposure:"event"},[Tn]:{exposure:"hidden"},[$n]:{exposure:"event"},[Mn]:{exposure:"event"},[Co]:{exposure:"event"},[Fo]:{exposure:"hidden"},[Nn]:{exposure:"event"},[jt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[rs]:{exposure:"hidden"},[Po]:{exposure:"event"},[Dc]:{exposure:"event",shouldSkipFromEventProperties:t=>Re(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Nt]:{exposure:"hidden",storageGroup:"flags"},[Ns]:{exposure:"hidden",storageGroup:"flags"},[Sr]:{exposure:"hidden"},[On]:{exposure:"hidden",storageGroup:"flags"},[Os]:{exposure:"hidden",storageGroup:"flags"},[xr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[Vr]:{exposure:"hidden",storageGroup:"flags"},[Qe]:{exposure:"hidden"},[Ot]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Lt]:{exposure:"hidden"},[Ln]:{exposure:"hidden",storageGroup:"surveys"},[Gr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Dn]:{exposure:"event"},[kr]:{exposure:"hidden"},[Ir]:{exposure:"hidden"},[Ls]:{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"},[Bt]:{exposure:"hidden"},[Ds]:{exposure:"hidden"},[Cr]:{exposure:"hidden"},[Us]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Bn]:{exposure:"hidden"},[jn]:{exposure:"hidden"},[Un]:{exposure:"hidden"},[Hn]:{exposure:"hidden"},[Kr]:{exposure:"hidden"},[Jr]:{exposure:"hidden"},[Bc]:{exposure:"event"},[jc]:{exposure:"event"},[Uc]:{exposure:"event"},[Hc]:{exposure:"event"},[zc]:{exposure:"event"},[qc]:{exposure:"event"},[Vc]:{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"}},Zh=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Rt=t=>{var e=Yh[t];if(e)return e;for(var s of Zh){var r=s[1];if(t.indexOf(s[0])===0)return r}},is=(t,e)=>{try{return JSON.stringify(t,(s,r)=>typeof r=="bigint"?r.toString():r,e)}catch{return ic(t)}},ei=t=>{var e=F==null?void 0:F.createElement("a");return I(e)?null:(e.href=t,e)},hs=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var n=r[i].split("=");if(n[0]===e){s=n;break}}if(!L(s)||2>s.length)return"";var o=s[1];try{o=decodeURIComponent(o)}catch{C.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},Ys=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],n=(r[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+s):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ti=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},lu=(t,e)=>t>=e&&tc(),cu=(t,e,s,r)=>{if(t===0){if(tc()){var i=e+1;return i===s&&r(),i}return e}return 0},mr="https?://(.*)",ps=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Xh=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...ps],Zs="",Qh=["li_fat_id"];function uu(t,e,s){if(!F)return{};var r,i=e?[...ps,...s||[]]:[],n=du(Ys(F.URL,i,Zs),t),o=(r={},Z(Qh,function(a){var l=Gc(a);r[a]=l||null}),r);return ee(o,n)}function du(t,e){var s=Xh.concat(e||[]),r={};return Z(s,function(i){var n=hs(t,i);r[i]=n||null}),r}function hu(t){var e=function(n){return n?n.search(mr+"google.([^/?]*)")===0?"google":n.search(mr+"bing.com")===0?"bing":n.search(mr+"yahoo.com")===0?"yahoo":n.search(mr+"duckduckgo.com")===0?"duckduckgo":null:null}(t),s=e!="yahoo"?"q":"p",r={};if(!Re(e)){r.$search_engine=e;var i=F?hs(F.referrer,s):"";i.length&&(r.ph_keyword=i)}return r}function Ja(){return navigator.language||navigator.userLanguage}var si="$direct";function pu(){return(F==null?void 0:F.referrer)||si}function fu(t,e,s){s===void 0&&(s=!1);var r=t?[...ps,...e||[]]:[],i=s?kt(re==null?void 0:re.href):re==null?void 0:re.href,n=i==null?void 0:i.substring(0,1e3);return{r:pu().substring(0,1e3),u:n?Ys(n,r,Zs):void 0}}function gu(t,e){var s;e===void 0&&(e=!1);var r=t.r,i=t.u,n=e?kt(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==si?si:(s=ei(r))==null?void 0:s.host};if(n){o.$current_url=n;var a=ei(n);o.$host=a==null?void 0:a.host,o.$pathname=a==null?void 0:a.pathname;var l=du(n);ee(o,l)}if(r){var u=hu(r);ee(o,u)}return o}function mu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function ep(){try{return new Date().getTimezoneOffset()}catch{return}}var tp={flags:Us,surveys:Gr},sp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],Zt="main";class en{constructor(e,s,r){if(r===void 0&&(r=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=r,this.props={},this.mi=void 0,this.yi=(n=>{var o="";return n.token&&(o=n.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),n.persistence_name?"ph_"+n.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&C.info("Persistence loaded",e.persistence,b({},this.props)),this.update_config(e,e,s),this.save(),m){var i=()=>this.flush();ie(m,"beforeunload",i,{capture:!1}),ie(m,"pagehide",i,{capture:!1})}}ki(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return de(s)&&s>0?s:0}isDisabled(){return!!this.xi}bi(e){sp.indexOf(e.persistence.toLowerCase())===-1&&(C.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var s,r=function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Mh,...o];return b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];Re(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 v={};l.forEach(_=>{c[_]&&(v[_]=c[_])}),Object.keys(v).length&&pt.F(u,v,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{m==null||m.localStorage.removeItem(u),pt.q(u,c)}catch(d){Q.j(d)}}})}(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,n=e.persistence.toLowerCase();return n==="localstorage"&&Q.N()?(s=Q,i=!0):n==="localstorage+cookie"&&r.N()?(s=r,i=!0):n==="sessionstorage"&&ce.N()?s=ce:n==="memory"?s=Nh:n==="cookie"?s=pt:r.N()?(s=r,i=!0):s=pt,this.fi=i,s}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,(s,r)=>{var i=Rt(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(s))return;e[r]=s}}),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of Qi){var s=Q.H(this.Si(e));if(s&&!mt(s)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(s,e)),this.Ii(e,s)||ee(this.props,s)}}}Ti(e){return Object.keys(this.props).some(s=>{var r;return((r=Rt(s))==null?void 0:r.storageGroup)===e})}Ii(e,s){var r=tp[e];if(!r)return!1;var i=s[r],n=this.props[r];return de(i)&&de(n)&&n>i}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Rt(e))==null?void 0:s.storageGroup:void 0,i=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(r){var n=this.ii.H(this.yi);if(n&&e in n)return void this.Pi(e,n[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?I(this.Ai)&&(this.Ai=setTimeout(()=>{this.Ai=void 0,this.Fi()},e)):this.Fi()}}flush(){I(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,Zt))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,s,Zt),Qi)){var n,o=r[i];(!mt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,(r,i)=>{var n,o=(n=Rt(i))==null?void 0:n.storageGroup;o?s[o][i]=r:e[i]=r}),{main:e,groups:s}}Ei(e,s){if(s===Zt)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,(i,n)=>{var o;r[n]=(o=Rt(n))!=null&&o.volatile?"__volatile__":i}),JSON.stringify(r)}Oi(e,s,r,i){var n=this.Mi(i);if(i===Zt||n.dirty||I(n.fingerprint)){var o;try{if((o=this.Ei(r,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==Zt&&(n.persisted=!0),I(o)||(n.fingerprint=o)):this.Ne.debug&&C.warn('failed to persist storage entry "'+s+'"; will retry on next save')}}remove(e){var s=(e===void 0?{}:e).keepGroupEntries,r=s!==void 0&&s;if(I(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!r&&this.gi)for(var i of Qi)Q.q(this.Si(i));r?delete this.ci[Zt]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,s,r){if(te(e)){I(s)&&(s="None"),this.$i=I(r)?this.ji:r;var i=!1;if(Z(e,(n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,n),i=!0)}),i)return this.save(),!0}return!1}register(e,s){if(te(e)){this.$i=I(s)?this.ji:s;var r=!1;if(Z(e,(i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||L(i))&&(this.Pi(n,i),r=!0)}),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var i of s)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=F==null?void 0:F.URL;if(e!==this.mi){var s=uu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Ro(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=F==null?void 0:F.referrer)?hu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:pu(),$referring_domain:F!=null&&F.referrer&&((e=ei(F.referrer))==null?void 0:e.host)||si},void 0)}set_initial_person_info(){this.props[Un]||this.props[Hn]||this.register_once({[Kr]:fu(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};Z([Hn,Un],i=>{var n=this.props[i];n&&Z(n,function(o,a){e["$initial_"+En(a)]=o})});var s=this.props[Kr];if(s){var r=function(i,n){n===void 0&&(n=!1);var o=gu(i,n),a={};return Z(o,function(l,u){a["$initial_"+En(u)]=l}),a}(s,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,function(s,r){r in e||(e[r]=s)}),e}update_config(e,s,r){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!r),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==s.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every((h,p)=>h===d[p])})(e.cookie_persisted_properties||[],s.cookie_persisted_properties||[]),n=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=n,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,s){var r=this.props[Ms]||{};r[e]=s,this.Pi(Ms,r),this.save()}remove_event_timer(e){var s=this.props[Ms]||{},r=s[e];return I(r)||(delete s[e],this.Pi(Ms,s),this.save()),r}get_property(e){return this.props[e]}set_property(e,s){this.Pi(e,s),this.save()}Pi(e,s){var r;this.props[e]=s,(r=Rt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var s,r=(s=Rt(e))==null?void 0:s.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function vr(t){var e=!0;return{dispose(){if(e){e=!1;var s=t();s&&Ee(s.then)&&s.then(void 0,()=>{})}}}}var Se={GZipJS:"gzip-js",Base64:"base64"},ks={Activation:"events",Cancellation:"cancelEvents"},tn={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},sn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Gn={Popover:"popover",Inline:"inline"},rp={SHOWN:"product tour shown"},Ya={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},Za=se("[RateLimiter]");class ip{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=s=>{var r=s.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach(i=>{Za.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4})}catch(i){return void Za.warn('could not rate limit - continuing. Error: "'+(i==null?void 0:i.message)+'"',{text:r})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var s,r,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(jn))!==null&&s!==void 0?s:{tokens:n,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>n&&(l.tokens=n);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(de(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(jn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var s=this.instance.config.property_denylist;return!L(s)||!s.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&re!=null&&re.pathname)return""+((e=re.origin)!==null&&e!==void 0?e:"")+re.pathname}Hi(e){var s,r,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(s=(r=this.instance).get_session_id)==null?void 0:s.call(r):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+n+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var s=this.serverLimits[e||"events"]||!1;return s!==!1&&new Date().getTime()e(this.remoteConfig)):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return St.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void St.warn("Remote config is disabled. Falling back to local config.");this.Wi(e=>{if(!e)return St.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi(s=>{this.Zi(s.json,s),this.Gi()});this.Zi(e),this.Gi()})}catch(e){St.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&F&&F.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var s=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;s!==0&&(this.Ki=setInterval(()=>{this.refresh()},s))}}Zi(e,s){!e&&s&&(s.statusCode===0?s.error||St.warn("Failed to fetch remote config from PostHog."):St.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){St.error("Error applying remote config",i)}if((e==null?void 0:e.hasFeatureFlags)!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var r;(r=this._instance.featureFlags)==null||r.ensureFlagsLoaded()}catch(i){St.error("Error loading feature flags",i)}}}var Ve=Uint8Array,Ae=Uint16Array,fs=Uint32Array,No=new Ve([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Oo=new Ve([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Xa=new Ve([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),_u=function(t,e){for(var s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var n=s[r];s[r+1]>n;++n)i[n]=n-s[r]<<5|r;return[s,i]},yu=_u(No,2),Kn=yu[1];yu[0][28]=258,Kn[258]=28;for(var Qa=_u(Oo,0)[1],wu=new Ae(32768),ne=0;32768>ne;++ne){var Xt=(43690&ne)>>>1|(21845&ne)<<1;wu[ne]=((65280&(Xt=(61680&(Xt=(52428&Xt)>>>2|(13107&Xt)<<2))>>>4|(3855&Xt)<<4))>>>8|(255&Xt)<<8)>>>1}var Ws=function(t,e,s){for(var r=t.length,i=0,n=new Ae(e);r>i;++i)++n[t[i]-1];var o,a=new Ae(e);for(i=0;e>i;++i)a[i]=a[i-1]+n[i-1]<<1;for(o=new Ae(r),i=0;r>i;++i)o[i]=wu[a[t[i]-1]++]>>>15-t[i];return o},Wt=new Ve(288);for(ne=0;144>ne;++ne)Wt[ne]=8;for(ne=144;256>ne;++ne)Wt[ne]=9;for(ne=256;280>ne;++ne)Wt[ne]=7;for(ne=280;288>ne;++ne)Wt[ne]=8;var ri=new Ve(32);for(ne=0;32>ne;++ne)ri[ne]=5;var np=Ws(Wt,9),op=Ws(ri,5),bu=function(t){return(t/8>>0)+(7&t&&1)},Eu=function(t,e,s){(s==null||s>t.length)&&(s=t.length);var r=new(t instanceof Ae?Ae:t instanceof fs?fs:Ve)(s-e);return r.set(t.subarray(e,s)),r},nt=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8},Is=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},rn=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var i=s.length,n=s.slice();if(!i)return[new Ve(0),0];if(i==1){var o=new Ve(s[0].s+1);return o[s[0].s]=1,[o,1]}s.sort(function(E,P){return E.f-P.f}),s.push({s:-1,f:25001});var a=s[0],l=s[1],u=0,c=1,d=2;for(s[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=s[s[d].f>s[u].f?u++:d++],l=s[u!=c&&s[d].f>s[u].f?u++:d++],s[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(r=1;i>r;++r)n[r].s>h&&(h=n[r].s);var p=new Ae(h+1),f=Jn(s[c-1],p,0);if(f>e){r=0;var g=0,v=f-e,_=1<r;++r){var w=n[r].s;if(e>=p[w])break;g+=_-(1<>>=v;g>0;){var S=n[r].s;e>p[S]?g-=1<=0&&g;--r){var k=n[r].s;p[k]==e&&(--p[k],++g)}f=e}return[new Ve(p),f]},Jn=function(t,e,s){return t.s==-1?Math.max(Jn(t.l,e,s+1),Jn(t.r,e,s+1)):e[t.s]=s},el=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new Ae(++e),r=0,i=t[0],n=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++n;else{if(!i&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(i),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(i);n=1,i=t[a]}return[s.subarray(0,r),e]},Cs=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},Yn=function(t,e,s){var r=s.length,i=bu(e+2);t[i]=255&r,t[i+1]=r>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;r>n;++n)t[i+n+4]=s[n];return 8*(i+4+r)},tl=function(t,e,s,r,i,n,o,a,l,u,c){nt(e,c++,s),++i[256];for(var d=rn(i,15),h=d[0],p=d[1],f=rn(n,15),g=f[0],v=f[1],_=el(h),w=_[0],S=_[1],k=el(g),E=k[0],P=k[1],D=new Ae(19),x=0;w.length>x;++x)D[31&w[x]]++;for(x=0;E.length>x;++x)D[31&E[x]]++;for(var A=rn(D,7),R=A[0],M=A[1],$=19;$>4&&!R[Xa[$-1]];--$);var N,J,z,H,oe=u+5<<3,pe=Cs(i,Wt)+Cs(n,ri)+o,Ie=Cs(i,h)+Cs(n,g)+o+14+3*$+Cs(D,R)+(2*D[16]+3*D[17]+7*D[18]);if(pe>=oe&&Ie>=oe)return Yn(e,c,t.subarray(l,l+u));if(nt(e,c,1+(pe>Ie)),c+=2,pe>Ie){N=Ws(h,p),J=h,z=Ws(g,v),H=g;var _e=Ws(R,M);for(nt(e,c,S-257),nt(e,c+5,P-1),nt(e,c+10,$-4),c+=14,x=0;$>x;++x)nt(e,c+3*x,R[Xa[x]]);c+=3*$;for(var Ce=[w,E],Te=0;2>Te;++Te){var ae=Ce[Te];for(x=0;ae.length>x;++x)nt(e,c,_e[me=31&ae[x]]),c+=R[me],me>15&&(nt(e,c,ae[x]>>>5&127),c+=ae[x]>>>12)}}else N=np,J=Wt,z=op,H=ri;for(x=0;a>x;++x)if(r[x]>255){var me;Is(e,c,N[257+(me=r[x]>>>18&31)]),c+=J[me+257],me>7&&(nt(e,c,r[x]>>>23&31),c+=No[me]);var ge=31&r[x];Is(e,c,z[ge]),c+=H[ge],ge>3&&(Is(e,c,r[x]>>>5&8191),c+=Oo[ge])}else Is(e,c,N[r[x]]),c+=J[r[x]];return Is(e,c,N[256]),c+J[256]},ap=new fs([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),lp=function(){for(var t=new fs(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t}(),nn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function cp(t,e){e===void 0&&(e={});var s=function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=lp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}}(),r=t.length;s.p(t);var i,n,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,function(d,h,p,f,g,v){var _=d.length,w=new Ve(f+_+5*(1+Math.floor(_/7e3))+g),S=w.subarray(f,w.length-g),k=0;if(!h||8>_)for(var E=0;_>=E;E+=65535){var P=E+65535;_>P?k=Yn(S,k,d.subarray(E,P)):(S[E]=!0,k=Yn(S,k,d.subarray(E,_)))}else{for(var D=ap[h-1],x=D>>>13,A=8191&D,R=(1<E;++E){var me=z(E),ge=32767&E,Ye=$[me];if(M[ge]=Ye,$[me]=ge,E>=Te){var Ft=_-E;if((Ie>7e3||Ce>24576)&&Ft>423){k=tl(d,S,0,H,oe,pe,_e,Ce,ae,E-ae,k),Ce=Ie=_e=0,ae=E;for(var ue=0;286>ue;++ue)oe[ue]=0;for(ue=0;30>ue;++ue)pe[ue]=0}var Ge=2,Et=0,ws=A,Be=ge-Ye&32767;if(Ft>2&&me==z(E-Be))for(var Fe=Math.min(x,Ft)-1,ar=Math.min(32767,E),lr=Math.min(258,Ft);ar>=Be&&--ws&&ge!=Ye;){if(d[E+Ge]==d[E+Ge-Be]){for(var je=0;lr>je&&d[E+je]==d[E+je-Be];++je);if(je>Ge){if(Ge=je,Et=Be,je>Fe)break;var cr=Math.min(Be,je-2),Kt=0;for(ue=0;cr>ue;++ue){var Jt=E-Be+ue+32768&32767,bs=Jt-M[Jt]+32768&32767;bs>Kt&&(Kt=bs,Ye=Jt)}}}Be+=(ge=Ye)-(Ye=M[ge])+32768&32767}if(Et){H[Ce++]=268435456|Kn[Ge]<<18|Qa[Et];var pa=31&Kn[Ge],fa=31&Qa[Et];_e+=No[pa]+Oo[fa],++oe[257+pa],++pe[fa],Te=E+Ge,++Ie}else H[Ce++]=d[E],++oe[d[E]]}}k=tl(d,S,!0,H,oe,pe,_e,Ce,ae,E-ae,k)}return Eu(w,0,f+bu(k)+g)}(n=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),c=u.length;return function(d,h){var 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&&nn(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),nn(u,c-8,s.d()),nn(u,c-4,r),u}var up=!!yn||!!wo,Su="text/plain",Pr=!1,xu=(t,e)=>{var s=t.split("#"),r=s[1],i=s[0].split("?"),n=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter(l=>l.split("=")[0]!==e).join("&");return n+(a?"?"+a:"")+(r?"#"+r:"")},Ei=function(t,e,s){var r;s===void 0&&(s=!0);var i=t.split("?"),n=i[0],o=i[1],a=b({},e),l=(r=o==null?void 0:o.split("&").map(c=>{var d,h=c.split("="),p=h[0],f=s&&(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,v){I(g)||I(v)||v==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(v),f[f.length]=p+"="+h)}),f.join(d)}(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},on=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===Se.GZipJS){var r=cp(function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new Ve(a.length+(a.length>>>1)),d=0,h=function(v){c[d++]=v},p=0;u>p;++p){if(d+5>c.length){var f=new Ve(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 Eu(c,0,d)}(is(e)),{mtime:0});return{contentType:Su,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===Se.Base64){var i=function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,(l,u)=>String.fromCharCode(parseInt(u,16))))}(is(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:is(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=is(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},ku=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:Ei(t.url,{compression:Se.Base64}),encodedBody:on(b({},t,{compression:Se.Base64,Ji:void 0}))}:{url:xu(t.url,"compression"),encodedBody:on(b({},t,{compression:void 0,Ji:void 0}))};try{e=on(t)}catch(i){if(ba(t.compression,hs(t.url,"compression")))return C.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&ba(t.compression,hs(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?wn(new Uint8Array(s)):ArrayBuffer.isView(s)&&wn(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Pr=!0,r()):{url:t.url,encodedBody:e}},Iu=t=>{try{return ku(t)}catch(e){return C.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},dp=function(){var t=X(function*(e){var s=is(e.data),r=yield function(n,o,a){return bn.apply(this,arguments)}(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return b({},e,{Ji:{contentType:Su,body:i,estimatedSize:i.byteLength}})});return function(e){return t.apply(this,arguments)}}(),hp=/Failed to fetch|NetworkError|Load failed/i,Cu=t=>(t==null?void 0:t.name)==="TypeError"&&hp.test((t==null?void 0:t.message)||""),Fu=t=>{var e=Iu(t);if(e){var s=e.url,r=e.encodedBody,i=r??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,function(f,g){l.append(g,f)}),n&&l.append("Content-Type",n);var u=null,c=!1;if(ga){var d=new ga;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==null?void 0:f.name)==="AbortError"||Cu(f)?C.warn(f):C.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;wo(s,b({method:(t==null?void 0:t.method)||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then(f=>f.text().then(g=>{var v={statusCode:f.status,text:g};if(f.status===200)try{v.json=JSON.parse(g)}catch(_){C.error(_)}t.callback==null||t.callback(v)})).catch(h).finally(()=>u?clearTimeout(u.timeout):null)}catch(f){u&&clearTimeout(u.timeout),h(f)}}},Zn=t=>{try{var e,s=ku(t),r=s.url,i=s.encodedBody,n=i??{},o=n.body,a=n.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:n.contentType});if(xe.sendBeacon(r,l))return;var u=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:b({},t.data,{batch:h});return Zn(b({},t,{data:d(u.slice(0,c))})),void Zn(b({},t,{data:d(u.slice(c))}))}C.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Fu(b({},t,{Yi:!0}))}catch(h){C.warn("Beacon send failed",h)}},sl=(t,e,s,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return Ei(s===Se.GZipJS?xu(t,"compression"):t,b({},i?{[i]:Date.now().toString()}:{},s===Se.GZipJS?{}:{compression:s}))},Ar=[];wo&&Ar.push({transport:"fetch",method:Fu}),yn&&Ar.push({transport:"XHR",method(t){var e=Iu(t);if(e){var s=new yn,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var i=r??{},n=i.contentType,o=i.body;Z(t.headers,function(a,l){s.setRequestHeader(l,a)}),n&&s.setRequestHeader("Content-Type",n),t.timeout&&(s.timeout=t.timeout),s.onreadystatechange=()=>{if(s.readyState===4){var a={statusCode:s.status,text:s.responseText};if(s.status===200)try{a.json=JSON.parse(s.responseText)}catch{}t.callback==null||t.callback(a)}},s.send(o)}}}),xe!=null&&xe.sendBeacon&&Ar.push({transport:"sendBeacon",method:Zn});var Xn=3e3;class pp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=st((s==null?void 0:s.flush_interval_ms)||Xn,250,5e3,C.createLogger("flush interval"),Xn),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},s=Object.values(e);[...s.filter(r=>r.url.indexOf("/e")===0),...s.filter(r=>r.url.indexOf("/e")!==0)].map(r=>{this.lr(b({},r,{transport:"sendBeacon"}))})}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout(()=>{if(this.sr(),this.tr.length>0){var s=this.ar(),r=function(){var n=s[i],o=new Date().getTime();n.data&&L(n.data)&&Z(n.data,a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp}),e.lr(n)};for(var i in s)r()}},this.er))}lr(e){try{this.ir(e)}catch(s){C.error(s)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,s=>{var r,i=s,n=(i?i.batchKey:null)||i.url;I(e[n])&&(e[n]=b({},i,{data:[]})),(r=e[n].data)==null||r.push(i.data)}),this.tr=[],e}}var fp=["retriesPerformedSoFar"];class gp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!I(m)&&"onLine"in m.navigator&&(this.dr=m.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(m,"online",this.vr),ie(m,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=sc(e,fp);lt(s)&&(r.url=Ei(r.url,{retry_count:s})),this._instance._send_request(b({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(s??0))return void this.At(b({retriesPerformedSoFar:s},r));i.statusCode===0&&C.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(s??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var s=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=s+1;var r=function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))}(s),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+r;navigator.onLine||(n+=" (Browser is offline)"),C.warn(n),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout(()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()},this.hr)}cr(){var e=Date.now(),s=[],r=this.tr.filter(n=>e>n.retryAt||(s.push(n),!1));if(this.tr=s,r.length>0)for(var i of r)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,I(m)||(this.vr&&(m.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(m.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var s=e.requestOptions;try{this._instance._send_request(b({},s,{transport:"sendBeacon"}))}catch(r){C.error(r)}}this.tr=[]}}class mp{constructor(e){this.yr=()=>{var s,r,i,n;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+((o==null?void 0:o.clientHeight)||0),c=(o==null?void 0:o.scrollHeight)||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(s=this.br.maxScrollY)!==null&&s!==void 0?s:0),this.br.maxScrollHeight=Math.max(l,(r=this.br.maxScrollHeight)!==null&&r!==void 0?r:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(i=this.br.maxContentY)!==null&&i!==void 0?i:0),this.br.maxContentHeight=Math.max(c,(n=this.br.maxContentHeight)!==null&&n!==void 0?n:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(m,"scroll",this.yr,{capture:!0}),ie(m,"scrollend",this.yr,{capture:!0}),ie(m,"resize",this.yr)}scrollElement(){if(!this._r)return m==null?void 0:m.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var s of e){var r=m==null?void 0:m.document.querySelector(s);if(r)return r}}wr(e){var s=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[s]||0}return m?e==="y"?m.scrollY||m.pageYOffset||m.document.documentElement.scrollTop||0:m.scrollX||m.pageXOffset||m.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var vp=t=>fu(t==null?void 0:t.config.mask_personal_data_properties,t==null?void 0:t.config.custom_personal_data_properties,t==null?void 0:t.config.disable_capture_url_hashes);class rl{constructor(e,s,r,i){this.kr=n=>{var o=this.Sr();if(!o||o.sessionId!==n){var a={sessionId:n,props:this.Cr(this._instance)};this.Mr.register({[Bn]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=i||vp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Bn]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?gu(s,this._instance.config.disable_capture_url_hashes):{$referring_domain:s.referringDomain,$pathname:s.initialPathName,utm_source:s.utm_source,utm_campaign:s.utm_campaign,utm_medium:s.utm_medium,utm_content:s.utm_content,utm_term:s.utm_term}:{}}getSessionProps(){var e={};return Z(Ro(this.getSetOnceProps()),(s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+En(r)]=s}),e}}class Lo{on(e,s){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(s),()=>{this.Er[e]=this.Er[e].filter(r=>r!==s)}}emit(e,s){for(var r of this.Er[e]||[])r(s);for(var i of this.Er["*"]||[])i(e,s)}constructor(){this.Er={}}}var Fs=se("[SessionId]");class il{on(e,s){return this.Ir.on(e,s)}constructor(e,s,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Lo,this.Lr=(u,c)=>!(!lt(u)||!lt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===ht)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=s||dt,this.Nr=r||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Fs.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+n+"_window_id",this.Br="ph_"+n+"_primary_window_exists",this.Hr()){var o=ce.H(this.jr),a=ce.H(this.Br);o&&!a?this.Or=o:ce.q(this.jr),ce.F(this.Br,!0)}if((i=this.Ne.bootstrap)!=null&&i.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Fs.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return I(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter(s=>s!==e)}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var s=this.Pr;return!Re(s)&&!Re(e)&&5e3>Math.abs(e-s)}Ur(e,s,r){var i=s!==this._sessionActivityTimestamp,n=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,n&&!i||n&&this.Zr(s)||(this.Pr=s,this.Mr.register({[rs]:[s,e,r]}))}Gr(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(s)&&s>0}Qr(){this.Gr()?this.Mr.refreshKey(rs):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!Re(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var s=this.Jr();s[1]===this.Dr&&s[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[rs]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],s=lt(e)?e:0,r=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(s,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[rs];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&&m&&(m.removeEventListener(Zr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(m,Zr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,s){if(e===void 0&&(e=!1),s===void 0&&(s=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=s||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!n,p=n,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Fs.info("cross-tab refresh kept the session alive",{sessionId:n});var g=this.Jr();n=g[1],o=g[2]}h||f||u?(n=this.$r(),l=this.Nr(),Fs.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==p)&&(Fs.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var v=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,v,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach(S=>S(n,l,w)),{sessionId:n,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 Pu=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&Sa(s,e))return!0;try{var r=t==null?void 0:t.userAgentData;if(r!=null&&r.brands&&r.brands.some(i=>Sa(i==null?void 0:i.brand,e)))return!0}catch{}return!!t.webdriver};function Au(){return(Au=X(function*(){var t=xe==null?void 0:xe.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),s=e==null?void 0:e.model;return W(s)&&s.length>0?s:void 0}catch(r){return void C.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}})).apply(this,arguments)}var ii=function(t,e){if(!function(s){try{new RegExp(s)}catch{return!1}return!0}(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function an(t,e,s){return is({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var Ru={exact:(t,e)=>e.some(s=>t.some(r=>s===r)),is_not:(t,e)=>e.every(s=>t.every(r=>s!==r)),regex:(t,e)=>e.some(s=>t.some(r=>ii(s,r))),not_regex:(t,e)=>e.every(s=>t.every(r=>!ii(s,r))),icontains:(t,e)=>e.map(_r).some(s=>t.map(_r).some(r=>s.includes(r))),not_icontains:(t,e)=>e.map(_r).every(s=>t.map(_r).every(r=>!s.includes(r))),gt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>r>parseFloat(i))}),lt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>rt.toLowerCase();function Tu(t,e){return!t||Object.entries(t).every(s=>{var r=s[1],i=e==null?void 0:e[s[0]];if(I(i)||Re(i))return!1;var n=[String(i)],o=Ru[r.operator];return!!o&&o(r.values,n)})}var Qn="custom",nl="i.posthog.com",_p=/^\/static\//;class yp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,s=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return s||(s=this.apiHost.replace("."+nl,".posthog.com")),s==="https://app.posthog.com"?"https://us.posthog.com":s}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":Qn),this.en[this.apiHost]}rn(e){if(_p.test(e)){var s=this.instance.config.asset_host;if(typeof s=="string")return s.trim().replace(/\/$/,"")||void 0}}endpointFor(e,s){if(s===void 0&&(s=""),s&&(s=s[0]==="/"?s:"/"+s),e==="ui")return this.uiHost+s;if(e==="flags")return this.flagsApiHost+s;if(e==="assets"){var r=this.rn(s);if(r)return""+r+s}if(this.region===Qn)return this.apiHost+s;var i=nl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function $u(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var V=se("[Surveys]"),Mu="seenSurvey_",Nu=t=>{try{var e=(s=>((r,i)=>""+Mu+function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id}(i))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){V.error("Failed to persist survey seen state",s)}},wp=[tn.Popover,tn.Widget,tn.API],bp={ignoreConditions:!1,ignoreDelay:!1,displayType:Gn.Popover},Ep=se("[PostHog ExternalIntegrations]"),Sp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class xp{constructor(e){this._instance=e}ai(e,s){var r;(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,i=>{if(i)return Ep.error("failed to load script",i);s()})}startIfEnabledOrStop(){var e=this,s=function(){var n,o,a,l=r[0],u=r[1];!u||(n=T.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(Sp[l],()=>{var c;(c=T.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)}),!u&&(o=T.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=T.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;s()}}}class kp{constructor(e,s){this.rt=e,this.nn=s,this.sn=new Map,this.an=!1}add(e){var s=this;return X(function*(){if(s.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(s.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');s.sn.set(e.name,e);try{var r=e.setup(s.nn);r&&(yield r)}catch(n){var i=s.sn.get(e.name)===e;i&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&s.ln(e)}})()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var s of(this.sn.clear(),e))this.ln(s)}}ln(e){try{var s=e.dispose==null?void 0:e.dispose();s&&Ee(s.then)&&s.then(void 0,r=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)})}catch(r){this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)}}}class Ip{constructor(e){this._instance=e}initialize(){}get(e){var s=this._instance.persistence;if(typeof e=="string")return s==null?void 0:s.get_property(e);var r={};for(var i of e){var n=s==null?void 0:s.get_property(i);I(n)||(r[i]=n)}return r}set(e,s){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:s}:e)}remove(e){var s;(s=this._instance.persistence)==null||s.unregister(e)}}var ol="extensionsRemoteConfig";class Cp{constructor(e){this.an=!1,this.instance=e,this.rt=C,this.un=e.hn,this.kv=new Ip(e),this.onEvent=s=>vr(this.instance.on("eventCaptured",r=>{try{s({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}})),this.onRemoteConfig=s=>{if(this.an)return vr(()=>{});var r=n=>{try{s(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(ol,r);return this.un&&r(this.un),vr(i)},this.vn=new kp(C.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(Ks))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(Ks);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,s;return(e=(s=this.instance.persistence)==null?void 0:s.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,s,r,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=n==null?void 0:n.sessionId)!==null&&s!==void 0?s:"",windowId:(r=n==null?void 0:n.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=n==null?void 0:n.sessionStartTimestamp)!==null&&i!==void 0?i:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,s,r){var i=this;return X(function*(){r?i.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,s)})()}registerDynamicEventProperties(e){return vr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(ol,e))}sendRequest(e,s){var r=this;return X(function*(){var i;s===void 0&&(s={});var n=r.instance.requestRouter.endpointFor((i=s.target)!==null&&i!==void 0?i:"api",e),o={method:s.method,url:s.query?Ei(n,s.query):n,data:s.body,headers:s.headers,timeout:s.timeoutMs,fireCallbackOnDrop:!0,transport:s.transport,compression:s.compression,timestampMode:s.sentAt};return s.transport==="sendBeacon"?(r.instance._send_request(o),{statusCode:202}):new Promise(a=>{o.callback=a,r.instance._send_request(o)})})()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var zs={},ln=0,ni=()=>{},al='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ps="Surveys module not available",ll="sanitize_properties is deprecated. Use before_send instead",Ou="Invalid value for property_denylist config: ",Fp=["token","distinct_id",Wc],ts="posthog",Lu=!up&&(Pe==null?void 0:Pe.indexOf("MSIE"))===-1&&(Pe==null?void 0:Pe.indexOf("Mozilla"))===-1,cn=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:Ph(F==null?void 0:F.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:ni,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:re&&W(re==null?void 0:re.search)&&re.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(m==null||(e=m.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(s){C.error("Bad HTTP status: "+s.statusCode+" "+s.text)},get_device_id:s=>s,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:Wn,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:Xn},error_tracking:{},_onCapture:ni},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:Uh,ignore_text_selection:!0}:!s||"2025-11-30">s||{content_ignorelist:!0},capture_pageview:!s||"2025-05-24">s||"history_change",session_recording:s&&s>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:s&&s>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:s&&s>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:s&&s>="2026-01-30"?"head":"body",internal_or_test_user_hostname:s&&s>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:s&&s>="2026-05-30"?250:0,split_storage:!(!s||"2026-05-30">s),detect_google_search_app:!(!s||"2026-05-30">s),disable_capture_url_hashes:!(!s||"2026-06-25">s)}))(t))},Pp=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],cl=t=>{var e={};for(var s of Pp){var r=s[0],i=s[1];I(t[r])||(e[i]=t[r])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return I(o)||(I(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&I(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(I(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:C.error(Ou+t.property_denylist)),n};class Ap{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){C.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class $e{pn(e,s){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(s),s.initialize==null||s.initialize(),s}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Dt&&this.consent.isRejected()}get decideEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Ap,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Lo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=cn(),this.SentryIntegration=Jh,this.sentryIntegration=r=>function(i,n){var o=au(i,n);return{name:ou,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 mp(this),this.pageViewManager=new Ka(this),this.rateLimiter=new ip(this),this.requestRouter=new yp(this),this.consent=new Oh(this),this.externalIntegrations=new xp(this);var s=(e=$e.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=s.featureFlags&&new s.featureFlags(this),this.toolbar=s.toolbar&&new s.toolbar(this),this.surveys=s.surveys&&new s.surveys(this),this.conversations=s.conversations&&new s.conversations(this),this.logs=s.logs&&new s.logs(this),this.metrics=s.metrics&&new s.metrics(this),this.experiments=s.experiments&&new s.experiments(this),this.exceptions=s.exceptions&&new s.exceptions(this),this.people={set:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(o),n==null||n({})},set_once:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),n==null||n({})}},this.on("eventCaptured",r=>C.info('send "'+(r==null?void 0:r.event)+'"',r))}init(e,s,r){if(r&&r!==ts){var i,n=(i=zs[r])!==null&&i!==void 0?i:new $e;return n._init(e,s,r),zs[r]=n,zs[ts][r]=n,n}return this._init(e,s,r)}_init(e,s,r){var i,n;s===void 0&&(s={});var o,a=W(e)?e.trim():"";if(!a)return C.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=cn(s.defaults),s.debug=this.Cn(s.debug),this.Mn=s,this.Tn=[],s.person_profiles?this.xn=s.person_profiles:s.process_person&&(this.xn=s.process_person);var l=cn(s.defaults),u=cl(s),c=ee({},l,u,{name:r,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&C.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=s.disable_compression?void 0:Se.GZipJS;var d=this.En();if(this.persistence=new en(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new en(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach(P=>{W(P)&&this.yn.add(P)})}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new pp(P=>this.Pn(P),this.config.request_queue_config),this.Rn=new gp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new il(this),this.sessionPropsManager=new rl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId((P,D,x)=>{(x!=null&&x.activityTimeout||x!=null&&x.sessionPastMaximumLength||x!=null&&x.crossTabAdoption)&&this.An()})),this.Fn(),this.config.__preview_deferred_init_extensions?(C.info("Deferring extension initialization to improve startup performance"),setTimeout(()=>{this.Ln(g)},0)):(C.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&C.info("Starting in debug mode",{this:this,config:s,thisC:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=s.bootstrap)!=null&&i.distinctID||(s.bootstrap=b({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=s.bootstrap)==null?void 0:n.distinctID)!==void 0){var v=s.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==v&&w===Yt)this.identify(v);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==v&&w===Pt)C.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var S=this.config.get_device_id(dt()),k=s.bootstrap.isIdentifiedID?S:v;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?Pt:Yt),this.register({distinct_id:v,$device_id:k})}}if(g)this.register_once({distinct_id:hr,$device_id:null},"");else if(!this.get_distinct_id()){var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:E},""),this.persistence.set_property(He,Yt)}return ie(m,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),s.segment?function(P,D){var x=P.config.segment;if(!x)return D();(function(A,R){var M=A.config.segment;if(!M)return R();var $=J=>{var z=()=>J.anonymousId()||dt();A.config.get_device_id=z,J.id()&&(A.register({distinct_id:J.id(),$device_id:z()}),A.persistence.set_property(He,Pt)),R()},N=M.user();"then"in N&&Ee(N.then)?N.then($):$(N)})(P,()=>{x.register((A=>{typeof Promise<"u"&&Promise.resolve||Xi.warn("This browser does not have Promise support, and can not use the segment integration");var R=(M,$)=>{if(!$)return M;M.event.userId||M.event.anonymousId===A.get_distinct_id()||(Xi.info("No userId set, resetting PostHog"),A.reset()),M.event.userId&&M.event.userId!==A.get_distinct_id()&&(Xi.info("UserId set, identifying with PostHog"),A.identify(M.event.userId));var N=A.calculateEventProperties($,M.event.properties);return M.event.properties=Object.assign({},N,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>R(M,M.event.event),page:M=>R(M,es),identify:M=>R(M,Ji),screen:M=>R(M,"$screen")}})(P)).then(()=>{D()})})}(this,()=>this.On()):this.On(),Ee(this.config._onCapture)&&this.config._onCapture!==ni&&(C.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",P=>this.config._onCapture(P.event,P))),this.config.ip&&C.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||function(){return Au.apply(this,arguments)}().then(P=>{P&&this.register({[Gi]:P})}).catch(ni),this}Fn(){var e,s,r,i,n,o,a=(e=(s=this.config.__extensionClasses)==null?void 0:s.featureFlags)!==null&&e!==void 0?e:(r=$e.__defaultExtensionClasses)==null?void 0:r.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((i=this.Dn)==null||i.call(this),this.Dn=void 0,this.featureFlags=new a(this)),Ee(this.featureFlags.onReloading)&&Ee(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading(()=>{this.dn.emit("featureFlagsReloading",!0)}),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var s,r,i,n,o,a,l,u=performance.now(),c=b({},$e.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push(()=>{this.scrollManager.startMeasuringScrollPosition()}),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(i=this.logs)!==null&&i!==void 0?i:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(n=this.metrics)!==null&&n!==void 0?n:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,Kh)),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,s){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-s>=30&&e.length>0)return void setTimeout(()=>{this.qn(e,s)},0);var r=e.shift();if(r)try{r()}catch(n){C.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-s);this.register_for_session({[zc]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[qc]:i}),this.config.__preview_deferred_init_extensions&&C.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var s;if(!F||!F.body)return C.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout(()=>{this.Zi(e)},500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var r,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=O(i.supportedCompression,Se.GZipJS)?Se.GZipJS:O(i.supportedCompression,Se.Base64)?Se.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:Wn}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach(n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e))}On(){try{this.config.loaded(this)}catch(r){C.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,s=this.config.internal_or_test_user_hostname;(typeof s=="string"?e===s:s.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout(()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()},1),this.Un=new vu(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&pr(this.__request_queue,e=>this.Pn(e)),this.__request_queue=[],this.Bn()}_handle_unload(){var e,s,r,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Ki),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(Ki,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?Lu?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=b({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(I(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(s=>{var r,i,n,o=b({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&I(o.compression)&&o.data&&(o.compression=Se.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d==null?void 0:d.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=function(v,_){return _===void 0&&(_=new Date().toISOString()),L(v)?v.map(w=>b({},w,{sent_at:_})):b({},v,{sent_at:_})}(o.data))),o.url=sl(o.url,o.method,o.compression,o.timestampMode);var p=Ar.filter(v=>!o.disableTransport||!v.transport||!o.disableTransport.includes(v.transport)),f=(i=(n=function(v,_){for(var w=0;v.length>w;w++)if(v[w].transport===h)return v[w]}(p))==null?void 0:n.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var g=v=>{try{f(v)}catch(_){Cu(_)?C.warn(_):C.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===Se.GZipJS&&Rd&&typeof Promise<"u"&&!Pr?dp(o).then(v=>{g(v)}).catch(v=>{if(Ea(v))return Pr=!0,void g(b({},o,{compression:void 0,url:sl(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return Ea(_)||w===rc})(v)&&(Pr=!0),g(o)}):f(o)})(b({},e,{callback:s=>{var r,i;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,s),e.callback==null||e.callback(s)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){ln++;try{var s,r=[],i=[],n=[];pr(e,a=>{if(a)if(L(s=a[0]))n.push(a);else if(Ee(a))try{a.call(this)}catch(l){C.error("Error executing queued PostHog call",a,l)}else L(a)&&s==="alias"?r.push(a):L(a)&&s.indexOf("capture")!==-1&&Ee(this[s])?n.push(a):i.push(a)});var o=function(a,l){pr(a,function(u){try{if(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){C.error("Error executing queued PostHog call",u,d)}})};o(r,this),o(i,this),o(n,this)}finally{ln--}}push(e){if(ln>0&&L(e)&&W(e[0])){var s=$e.prototype[e[0]];Ee(s)&&s.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,s,r){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!I(e)&&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){s!=null&&s.$current_url&&!W(s==null?void 0:s.$current_url)&&(C.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),s==null||delete s.$current_url),e!=="$exception"||r!=null&&r.Wn||C.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=(r==null?void 0:r.timestamp)||d,p=Ca(r==null?void 0:r.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,s||{},h,p)};e===es&&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(Vr)===!0;r!=null&&r.$set&&!g&&(f.$set=r==null?void 0:r.$set);var v=r==null?void 0:r.$unset;v&&(f.$unset=v);var _,w,S,k=g?void 0:this.Vn(r==null?void 0:r.$set_once,e!==$a,e===Ji);if(k&&(f.$set_once=k),r!=null&&r._noTruncate||(n=this.config.properties_string_max_length,o=f,a=$=>W($)?$.slice(0,n):$,l=new Set,f=function $(N,J){if(N!==Object(N))return a?a(N):N;if(!l.has(N)){var z;if(l.add(N),L(N))z=[],pr(N,oe=>{z.push($(oe))});else{var H={};Z(N,(oe,pe)=>{l.has(oe)||(H[pe]=$(oe))}),z=H}return z}}(o)),f.timestamp=h,I(r==null?void 0:r.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=function($,N){N===void 0&&(N=[]);var J={},z=H=>{$[H]!==void 0&&(J[H]=$[H])};return Td.forEach(z),N.forEach(z),J}(f.properties,Fp)),e===ft.DISMISSED||e===ft.SENT){var E=s==null?void 0:s[sn.SURVEY_ID],P=s==null?void 0:s[sn.SURVEY_ITERATION];Nu({id:E,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:E,current_iteration:P},w=e===ft.SENT?"responded":"dismissed",S="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(S="$survey_"+w+"/"+_.id+"/"+_.current_iteration),S)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[sn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===rp.SHOWN){var D=s==null?void 0:s[Ya.TOUR_TYPE];D&&(f.$set=b({},f.$set,{[Ya.TOUR_LAST_SEEN_DATE+"/"+D]:new Date().toISOString()}))}var x=b({},f.properties.$set,f.$set);if(mt(x)||this.setPersonPropertiesForFlags(x),!B(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ca(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=r==null?void 0:r._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:R,data:f,compression:"best-available",timestampMode:(r==null?void 0:r._batchKey)==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r==null?void 0:r._batchKey,transport:r==null?void 0:r.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(M):this.In.enqueue(M),f}C.critical("This capture call is ignored due to client rate limiting.")}}else C.error("No event name provided to posthog.capture")}else C.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",s=>e(s.event,s))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new Cp(this)}cn(e){this._n.push(e);var s=!0;return()=>{if(s){s=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,s,r,i,n){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=n?void 0:this.persistence.remove_event_timer(e),a=b({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Wc]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!de(a.distinct_id)||Sn(a.distinct_id))&&C.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=function(E,P,D,x){var A,R,M,$;if(x===void 0&&(x=!1),!Pe)return{};var N,J=E?[...ps,...P||[]]:[],z=function(lr){for(var je=0;ka.length>je;je++){var cr=ka[je],Kt=cr[1],Jt=cr[0].exec(lr),bs=Jt&&(Ee(Kt)?Kt(Jt,lr):Kt);if(bs)return bs}return["",""]}(Pe),H=z[0],oe=z[1],pe=(N=typeof navigator<"u"?navigator:void 0)!=null&&N.brave?{brave:!0}:{},Ie={};I(D)||(Ie.detectGoogleSearchApp=D);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Te=(R=navigator)==null?void 0:R.maxTouchPoints,ae=m==null||(M=m.screen)==null?void 0:M.width,me=m==null||($=m.screen)==null?void 0:$.height,ge=m==null?void 0:m.devicePixelRatio;I(Ce)||(_e.userAgentDataPlatform=Ce),I(Te)||(_e.maxTouchPoints=Te),I(ae)||(_e.screenWidth=ae),I(me)||(_e.screenHeight=me),I(ge)||(_e.devicePixelRatio=ge);var Ye,Ft,ue,Ge,Et,ws,Be,Fe,ar=ee(Ro({$os:H,$os_version:oe,$browser:Fc(Pe,navigator.vendor,pe,Ie),$device:Ia(Pe),$device_type:(Ft=Pe,ue=_e,Fe=Ia(Ft),Fe===uc||Fe===cc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Sc?cs:Fe===Vs||Fe===os||Fe===Gs||Fe===kn?"Console":Fe===hc?"Wearable":Fe?Le:(ue==null?void 0:ue.userAgentDataPlatform)==="Android"&&((Ge=ue==null?void 0:ue.maxTouchPoints)!==null&&Ge!==void 0?Ge:0)>0?600>Math.min((Et=ue==null?void 0:ue.screenWidth)!==null&&Et!==void 0?Et:0,(ws=ue==null?void 0:ue.screenHeight)!==null&&ws!==void 0?ws:0)/((Be=ue==null?void 0:ue.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Le:cs:"Desktop"),$timezone:mu(),$timezone_offset:ep()}),{$current_url:Ys(x?kt(re==null?void 0:re.href):re==null?void 0:re.href,J,Zs),$host:re==null?void 0:re.host,$pathname:re==null?void 0:re.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Zd(Pe,navigator.vendor,pe,Ie),$browser_language:Ja(),$browser_language_prefix:(Ye=Ja(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:m==null?void 0:m.screen.height,$screen_width:m==null?void 0:m.screen.width,$viewport_height:m==null?void 0:m.innerHeight,$viewport_width:m==null?void 0:m.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(ar.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ar}(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(n,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(E){a.$sdk_debug_error_capturing_properties=String(E)}if(this.requestRouter.region===Qn&&(a.$lib_custom_api_host=this.config.api_host),u=e!==es||n?e!==Ki||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===es&&F&&(a.title=F.title),!I(o)){var f=r.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Pe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),v=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],E=>{E in g&&delete v[E]});var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(E){C.error("Failed to produce browser extension event properties",E)}(a=ee({},c,g,v,b({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,function(E){delete a[E]}):C.error(Ou+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var S=this.config.sanitize_properties;S&&(C.error(ll),a=S(a,e));var k=this.Zn();return a.$process_person_profile=k,k&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var i;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var n=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},n,o||{},e||{}),l=this.config.sanitize_properties;return l&&(C.error(ll),a=l(a,"$set_once")),s&&(this.mn=!0),mt(a)?void 0:a}register(e,s){var r;(r=this.persistence)==null||r.register(e,s)}register_once(e,s,r){var i;(i=this.persistence)==null||i.register_once(e,s,r)}register_for_session(e){var s;(s=this.sessionPersistence)==null||s.register(e),Object.keys(e).forEach(r=>this.yn.add(r)),this.Qn()}unregister(e){var s;(s=this.persistence)==null||s.unregister(e)}unregister_for_session(e){var s;(s=this.sessionPersistence)==null||s.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,s){this.register({[e]:s})}An(){this.yn.forEach(e=>{var s;(s=this.sessionPersistence)==null||s.unregister(e)}),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var s=[];this.yn.forEach(r=>s.push(r)),s.length>0?ce.F(this.bn,s):ce.q(this.bn)}}getFeatureFlag(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,s)}getFeatureFlagPayload(e){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagPayload(e)}getFeatureFlagResult(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,s)}getAllFeatureFlags(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,s){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s==null?void 0:s.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var i;return s===void 0&&(s=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,s,r)}on(e,s){return this.dn.on(e,s)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ps}),()=>{})}onSessionId(e){var s,r;return(s=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&s!==void 0?s:()=>{}}getSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getSurveys(e,s):e([],{isLoaded:!1,error:Ps})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:Ps})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=bp),(r=this.surveys)==null||r.displaySurvey(e,s)}cancelPendingSurvey(e){var s;(s=this.surveys)==null||s.cancelPendingSurvey(e)}canRenderSurvey(e){var s,r;return(s=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&s!==void 0?s:{visible:!1,disabledReason:Ps}}canRenderSurveyAsync(e,s){var r,i;return s===void 0&&(s=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Ps})}Jn(e){return!e||Sn(e)?(C.critical("Unique user id has not been set in posthog.identify"),!1):e===hr?(C.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(C.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,s,r){if(!this.__loaded||!this.persistence)return C.uninitializedWarning("posthog.identify");if(de(e)&&(e=e.toString(),C.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(Ks)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property($s)&&(this.unregister($s),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||Yt)===Yt,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Pt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(Ji,{distinct_id:e,$anon_distinct_id:i},{$set:s||{},$set_once:r||{}}),this.Sn=an(e,s,r),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Pt);var u=s||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=an(e,s,r)}else(s||r)&&this.setPersonProperties(s,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Bt)):l&&(s||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,s){if((e||s)&&this.Gn("posthog.setPersonProperties")){var r=an(this.get_distinct_id(),e,s);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:s||{}},!0),this.capture("$set",{$set:e||{},$set_once:s||{}}),this.Sn=r):C.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var s,r=(L(e)?e:[e]).filter(i=>W(i)&&i.length>0);r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((s=this.featureFlags)==null||s.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,s,r){if(e&&s){var i=this.getGroups(),n=i[e]!==s;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},i,{[e]:s})}),n||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture($a,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),n&&!r&&this.reloadFeatureFlags()}else C.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,s)}resetPersonPropertiesForFlags(e){var s;e===void 0&&(e=!0),(s=this.featureFlags)==null||s.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,s))}resetGroupPropertiesForFlags(e){var s;(s=this.featureFlags)==null||s.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,s){var r,i,n,o,a,l,u,c,d,h;if(s===void 0&&(s=!1),C.info("reset"),!this.__loaded)return C.uninitializedWarning("posthog.reset");var p,f=this.get_property(Ks),g=this.get_property(Gi),v=this.get_property(jt),_=this.is_capturing();if(this.consent.reset(),s||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(r=this.persistence)==null||r.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),I(v)||(p=this.persistence)==null||p.register({[jt]:v}),(n=this.surveys)==null||n.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,Yt),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:hr,$device_id:null},"");else{var w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||I(g)||this.register({[Gi]: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 s=this;return X(function*(){var r,i,n,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(i=s.jn)==null||i.dispose(),(n=s.sessionRecording)==null||n.dispose(),(o=s.logs)==null||o.flushLogs("sendBeacon"),(a=s.metrics)==null||a.flush("sendBeacon"),(l=s.In)==null||l.unload(),(u=s.Rn)==null||u.unload();try{var c;(c=s.featureFlags)==null||c.destroy()}catch(d){C.error("Error while destroying feature flags",d)}}else C.uninitializedWarning("posthog.shutdown")})()}setIdentity(e,s){var r;this.config.identity_distinct_id=e,this.config.identity_hash=s,this.alias(e),(r=this.conversations)==null||r.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,s;return(e=(s=this.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var s=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,s){return e===this.get_property(Lc)?(C.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(I(s)&&(s=this.get_distinct_id()),e!==s?(this.Kn($s,e),this.capture("$create_alias",{alias:e,distinct_id:s})):(C.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var s=b({},this.config);if(te(e)){var r,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,cl(e));var g=this.En();(r=this.persistence)==null||r.update_config(this.config,s,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new en(b({},this.config,{persistence:"sessionStorage"}),g,!1);var v=this.Cn(this.config.debug);Ke(v)&&(this.config.debug=v),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),C.info("set_config",{config:e,oldConfig:s,newConfig:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(n=this.exceptionObserver)==null||n.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,s){Y.LIB_NAME=e,Y.LIB_VERSION=s}startSessionRecording(e){var s,r,i,n,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((s=this.sessionManager)==null||s.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((n=this.sessionRecording)==null||n.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,s){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(b({},i,s))}}addExceptionStep(e,s){var r;(r=this.exceptions)==null||r.addExceptionStep(e,s)}captureLog(e){var s;(s=this.logs)==null||s.captureLog(e)}get logger(){var e,s;return(e=(s=this.logs)==null?void 0:s.logger)!==null&&e!==void 0?e:$e.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var s,r;return(s=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&s!==void 0&&s}get_property(e){var s;return(s=this.persistence)==null?void 0:s.props[e]}getSessionProperty(e){var s;return(s=this.sessionPersistence)==null?void 0:s.props[e]}toString(){var e,s=(e=this.config.name)!==null&&e!==void 0?e:ts;return s!==ts&&(s=ts+"."+s),s}_isIdentified(){var e,s;return((e=this.persistence)==null?void 0:e.get_property(He))===Pt||((s=this.sessionPersistence)==null?void 0:s.get_property(He))===Pt}Zn(){var e,s;return!(this.config.person_profiles==="never"||this.config.person_profiles===Wn&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[$s])&&((s=this.persistence)==null||(s=s.props)==null||!s[Jr]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(C.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(Jr,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Dt)}es(){var e,s,r,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((r=this.persistence)==null||r.set_disabled(n)),((s=this.sessionPersistence)==null?void 0:s.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,i,n,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new il(this),this.pageViewManager=new Ka(this),this.persistence&&(this.sessionPropsManager=new rl(this,this.sessionManager,this.persistence));var l,u=(n=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&n!==void 0?n:(a=$e.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(s=this.sessionRecording)==null||s.startIfEnabledOrStop(),this.config.cookieless_mode==Dt&&((c=this.surveys)==null||c.loadIfEnabled()),(I(e==null?void 0:e.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e==null?void 0:e.captureEventName)!==null&&d!==void 0?d:"$opt_in",e==null?void 0:e.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else C.warn(al)}opt_out_capturing(){var e,s,r;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Dt&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Dt&&(this.register({distinct_id:hr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):C.warn(al)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===ht||(this.config.cookieless_mode===Dt?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return xe?Pu(xe,this.config.custom_blocked_useragents):void 0}Hn(){F&&(F.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(es,{title:F.title},{send_instantly:!0}),this.kn&&(F.removeEventListener(Yr,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(F,Yr,this.kn)))}debug(e){e===!1?(m==null||m.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(m==null||m.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(C.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):function(s,r,i,n,o){var a=r in s&&!B(s[r]),l=i in s&&!B(s[i]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[i])}(e,"advanced_disable_flags","advanced_disable_decide",0,C)}Pt(e){var s;if(B(this.config.before_send))return e;var r=Object.keys((s=e.properties)!==null&&s!==void 0?s:{}).filter(Bd),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],n=e;for(var o of i){if(n=o(n),B(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return Dd(e.event)?C.warn(a+". This can cause unexpected behavior."):C.info(a),null}n.properties&&!mt(n.properties)||C.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(n.properties&&B(n.properties[l]))return C.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,s){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:s})}captureTraceMetric(e,s,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:s,$ai_metric_value:String(r)})}Cn(e){var s=Ke(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!s&&(!!r||e)}}$e.__defaultExtensionClasses={},$e.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),function(t,e){for(var s=0;e.length>s;s++)t.prototype[e[s]]=Ch(t.prototype[e[s]])}($e,["identify"]);class ul{constructor(e){this.disabled=e===!1;var s=te(e)?e:{};this.thresholdPx=s.threshold_px||30,this.timeoutMs=s.timeout_ms||1e3,this.clickCount=s.click_count||3,this.clicks=[]}isRageClick(e,s,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(s-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:s,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:s,timestamp:r}];return!1}}var un="$copy_autocapture",dn=se("[AutoCapture]");function hn(t,e){return e.length>t?e.slice(0,t)+"...":e}function Rp(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!It(e));return e}function Tp(t,e){var s,r,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!It(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Ne(h,"body")&&Qc>c.length;)if(Xc(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!It(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,v=[],_={},w=!1,S=!1;if(Z(c,x=>{var A=Vn(x);if(Ne(x,"a")){var R=x.getAttribute("href");w=!!(A&&R&&Hs(R))&&(u?kt(R):R)}O(Qr(x),"ph-no-capture")&&(S=!0),v.push(function($,N,J,z,H){H===void 0&&(H=!1);var oe=$.tagName.toLowerCase(),pe={tag_name:oe};$o.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?hn(1024,qa($)):hn(1024,Js($)));var Ie=Qr($);Ie.length>0&&(pe.classes=Ie.filter(function(ae){return ae!==""})),Z($.attributes,function(ae){var me;if((!iu($)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!N&&Hs(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=To(ge).join(" ")),pe["attr__"+ae.name]=hn(1024,ae.name==="href"&&H?kt(ge):ge)}});for(var _e=1,Ce=1,Te=$;Te=Rp(Te);)_e++,Te.tagName===$.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe}(x,n,o,a,u));var M=function($){if(!Vn($))return{};var N={};return Z($.attributes,function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var z=J.name.replace("data-ph-capture-attribute-",""),H=J.value;z&&H&&Hs(H)&&(N[z]=H)}}),N}(x);ee(_,M)}),S)return{props:{},explicitNoCapture:S};if(o||(v[0].$el_text=Ne(t,"a")||Ne(t,"button")?qa(t):Js(t)),w){var k,E;v[0].attr__href=w;var P=(k=ei(w))==null?void 0:k.host,D=m==null||(E=m.location)==null?void 0:E.host;P&&D&&P!==D&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:v},{$elements_chain:(g=v,function(x){return x.map(A=>{var R,M,$="";if(A.tag_name&&($+=A.tag_name),A.attr_class)for(var N of(A.attr_class.sort(),A.attr_class))$+="."+N.replace(/"/g,"");var J=b({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(M=A.nth_of_type)!==null&&M!==void 0?M:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Fr(J).sort((H,oe)=>H[0].localeCompare(oe[0])).forEach(H=>{var oe=H[1];return z[Va(H[0].toString())]=Va(oe.toString())}),($+=":")+Fr(z).map(H=>H[0]+'="'+H[1]+'"').join("")}).join(";")}(function(x){return x.map(A=>{var R,M,$={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(M=A.attr__href)==null?void 0:M.slice(0,2048),attr_class:Vh(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Fr(A).filter(N=>N[0].indexOf("attr__")===0).forEach(N=>$.attributes[N[0]]=N[1]),$})}(g)))},(s=v[0])!=null&&s.$el_text?{$el_text:(r=v[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var As=se("[ExceptionAutocapture]"),dl=()=>{},$p=se("[TracingHeaders]"),Tt=se("[Web Vitals]"),hl=9e5,pl="disabled",fl="lazy_loading",Rs="awaiting_config",yr="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var eo="[SessionRecording]",ot=se(eo),Mp=se("[Heatmaps]");function pn(t){return te(t)&&"clientX"in t&&"clientY"in t&&de(t.clientX)&&de(t.clientY)}var wr=se("[Product Tours]"),fn=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Fo))},Np=["$set_once","$set"],Ze=se("[SiteApps]"),gl="Error while initializing PostHog app with config id ";function Qt(t,e,s){if(B(t))return!1;switch(s){case"exact":return t===e;case"contains":var r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(r,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class Op{constructor(e){this.ns=new Lo,this.ss=(s,r)=>this.os(s,r)&&this.ls(s,r)&&this.us(s,r)&&this.hs(s,r),this.os=(s,r)=>r==null||!r.event||(s==null?void 0:s.event)===(r==null?void 0:r.event),this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,s;I((e=this._instance)==null?void 0:e._addCaptureHook)||(s=this._instance)==null||s._addCaptureHook((r,i)=>{this.on(r,i)})}register(e){var s,r;if(!I((s=this._instance)==null?void 0:s._addCaptureHook)&&(e.forEach(o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach(u=>{var c;(c=this.ds)==null||c.add((u==null?void 0:u.event)||"")})}),(r=this._instance)!=null&&r.autocapture)){var i,n=new Set;e.forEach(o=>{var a;(a=o.steps)==null||a.forEach(l=>{l!=null&&l.selector&&n.add(l==null?void 0:l.selector)})}),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,s){var r;s!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(s.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach(i=>{this.cs(s,i)&&this.ns.emit("actionCaptured",i.name)})}fs(e){this.onAction("actionCaptured",s=>e(s))}cs(e,s){if((s==null?void 0:s.steps)==null)return!1;for(var r of s.steps)if(this.ss(e,r))return!0;return!1}onAction(e,s){return this.ns.on(e,s)}ls(e,s){if(s!=null&&s.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!Qt(i,s.url,s.url_matching||"contains"))return!1}return!0}us(e,s){return!!this.ps(e,s)&&!!this.gs(e,s)&&!!this.ys(e,s)}ps(e,s){var r;if(s==null||!s.href)return!0;var i=this.bs(e);if(i.length>0)return i.some(a=>Qt(a.href,s.href,s.href_matching||"exact"));var n,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&Qt((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var i=this.bs(e);if(i.length>0)return i.some(u=>Qt(u.text,s.text,s.text_matching||"exact")||Qt(u.$el_text,s.text,s.text_matching||"exact"));var n,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(n=function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!B(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d}(l),o=s.text,a=s.text_matching||"exact",n.some(u=>Qt(u,o,a)))}ys(e,s){var r,i;if(s==null||!s.selector)return!0;var n=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(n!=null&&n.includes(s.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(s.selector_regex&&o)try{return new RegExp(s.selector_regex).test(o)}catch{return!1}return!1}bs(e){var s;return(e==null||(s=e.properties)==null?void 0:s.$elements)==null?[]:e==null?void 0:e.properties.$elements}hs(e,s){return s==null||!s.properties||s.properties.length===0||Tu(s.properties.reduce((r,i)=>{var n=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:n,operator:i.operator||"exact"},r},{}),e==null?void 0:e.properties)}}class Lp{constructor(e){var s;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(s=this._instance)==null||s.onSessionId==null||s.onSessionId(r=>this.Ss(r))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,s){return!!e&&Tu(e.propertyFilters,s==null?void 0:s.properties)}Ps(e,s){var r=new Map;return e.forEach(i=>{var n;(n=i.conditions)==null||(n=n[s])==null||(n=n.values)==null||n.forEach(o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(i.id),r.set(o.name,a)}})}),r}Rs(e,s,r){var i=(r===ks.Activation?this.ws:this.ks).get(e),n=[];return this.As(o=>{n=o.filter(a=>i==null?void 0:i.includes(a.id))}),n.filter(o=>{var a,l=(a=o.conditions)==null||(a=a[r])==null||(a=a.values)==null?void 0:a.find(u=>u.name===e);return this.Is(l,s)})}register(e){var s;I((s=this._instance)==null?void 0:s._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var s=e.filter(r=>{var i,n;return((i=r.conditions)==null?void 0:i.actions)&&((n=r.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0});s.length!==0&&(this.Os==null&&(this.Os=new Op(this._instance),this.Os.init(),this.Os.fs(r=>{this.onAction(r)})),s.forEach(r=>{var i,n,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(n=r.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=r.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(r.conditions.actions.values),(l=r.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach(u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(r.id),this.xs.set(u.name,c||[r.id])}}))}))}Fs(e){var s,r=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.events)&&((a=n.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0}),i=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.cancelEvents)&&((a=n.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0});r.length===0&&i.length===0||((s=this._instance)==null||s._addCaptureHook((n,o)=>{this.onEvent(n,o)}),this.ws=this.Ps(e,ks.Activation),this.ks=this.Ps(e,ks.Cancellation))}onEvent(e,s){var r,i,n=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(i=s.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return n.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return n.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,s,ks.Cancellation);l.length>0&&(n.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map(c=>c.id)}),this.Ns(l.map(c=>c.id)),l.forEach(c=>this.Bs(c.id)))}if(this.ws.has(e)){n.info("event name matched",{event:e,eventPayload:s,items:this.ws.get(e)});var u=this.Rs(e,s,ks.Activation);this.Hs(u.map(c=>c.id))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var s;if(e.length!==0){var r=!((s=this._instance)==null||s.get_session_id==null||!s.get_session_id()),i=[];for(var n of e)r&&this.Cs(n)?this.qs(n)&&this.Us(n):i.push(n);i.length>0&&(this._s=[...new Set([...this._s,...i])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter(r=>r!==e);var s=this.zs();return!s.includes(e)&&(this.Ws([...s,e]),this.Vs(),!0)}Ns(e){var s=new Set(e);this._s=this._s.filter(n=>!s.has(n));var r=this.Zs(),i=r.filter(n=>!s.has(n));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(b({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},i=!1;for(var n of Object.entries(s)){var o=n[0],a=n[1];e.includes(o)?i=!0:r[o]=a}i&&(mt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var s=this.Qs()[e];return de(s)?s:void 0}}Zs(){var e,s=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s])||[]}zs(){var e,s,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return n&&i===n?r:[]}Vs(){var e,s=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();s&&this.Xs(s)}Gs(){this.ta()}Ss(e){var s,r=(s=this._instance)==null||(s=s.persistence)==null?void 0:s.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter(o=>de(n[o])).forEach(o=>this.Bs(o))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter(e=>!this.ea(e))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class Dp extends Lp{constructor(e){super(e)}Js(){return Dn}Ys(){return kr}Ms(){return Ir}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Ir]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ir)}Cs(e){var s,r;this.As(n=>{r=n.find(o=>o.id===e)});var i=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return de(i)&&i>0}ra(){return ft.SHOWN}As(e){var s;(s=this._instance)==null||s.getSurveys(e)}Bs(e){var s;(s=this._instance)==null||s.cancelPendingSurvey(e)}Ds(){return V}Ws(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Dn]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[kr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(kr)}ea(){return!1}$s(e,s){var r;this.As(n=>{r=n.find(o=>o.id===s)});var i=!r||function(n){var o;return $u(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"}(r);return i?e===ft.SHOWN?"consume":"ignore":e===ft.SHOWN?"persist":e===ft.DISMISSED||e===ft.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var br="SDK is not enabled or survey functionality is not yet loaded",ml="Disabled. Not loading surveys.",Bp=m!=null&&m.location?ti(m.location.hash,"__posthog")||ti(location.hash,"state"):null,vl="_postHogToolbarParams",_l=se("[Toolbar]"),yl=se("[FeatureFlags]");class jp{constructor(e,s){s===void 0&&(s=!1),this.na=!1,this.update(e,s)}update(e,s){this.sa=((r,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=r.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!r.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!r.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!r.advanced_feature_flags_dedup_per_session,cacheTtlMs:r.feature_flag_cache_ttl_ms,requestTimeoutMs:r.feature_flag_request_timeout_ms,compression:r.disable_compression?"none":"base64",evaluationContexts:(a=(l=r.evaluation_contexts)!==null&&l!==void 0?l:r.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:L(r.flag_keys)?r.flag_keys:void 0}})(e,s),!e.evaluation_environments||e.evaluation_contexts||this.na||(yl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),I(e.flag_keys)||L(e.flag_keys)||yl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var wl=se("[FeatureFlags]"),$t=se("[FeatureFlags]",{debugEnabled:!0}),gn=`" failed. Feature flags didn't load in time.`,bl="connection_error",El=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},Sl=t=>{var e={};for(var s of Fr(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Xe=se("[Error tracking]"),xl="Refusing to render web experiment since the viewer is a likely bot",Up={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>ii(e,t),not_regex:(t,e)=>!ii(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var s=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),s.getWebExperiments(i=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,i.forEach(n=>{if(n.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=s.oa)==null||o.set(n.feature_flag_key,n));var a=s._instance.getFeatureFlag(n.feature_flag_key);W(a)&&n.variants[a]&&s.la(n.name,a,n.variants[a].transforms)}else if(n.variants)for(var l in n.variants){var u=n.variants[l];ye.ua(u,s._instance)&&s.la(n.name,l,u.transforms)}})},r)},this._instance=e,this._instance.onFeatureFlags(r=>{this.onFeatureFlags(r)})}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(xl);else if(!this.Ne.disable_web_experiments){if(B(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach(s=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(s)){var i,n=this._instance.getFeatureFlag(s),o=(i=this.oa)==null?void 0:i.get(s);n&&o!=null&&o.variants[n]&&this.la(o.name,n,o.variants[n].transforms)}})}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=hs(e==null?void 0:e.search,"__experiment_id"),r=hs(e==null?void 0:e.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments(i=>{this.ha(parseInt(s),r,i)},!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!s)return e(i);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:n=>e(n.statusCode===200&&n.json&&n.json.experiments||[])})}ha(e,s,r){var i=r.filter(n=>n.id===e);i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+s+"]"),this.la(i[0].name,s,i[0].variants[s].transforms))}static ua(e,s){return!B(e.conditions)&&ye.da(e,s)&&ye.va(e)}static da(e,s){var r;if(B(e.conditions)||B((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=Jc(s,i.href);return(n=e.conditions)==null||!n.url||Up[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return m==null?void 0:m.location}static va(e){var s;if(B(e.conditions)||B((s=e.conditions)==null?void 0:s.utm))return!0;var r=uu();if(r.utm_source){var i,n,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((n=e.conditions)==null||(n=n.utm)==null?void 0:n.utm_campaign)==r.utm_campaign,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 s=arguments.length,r=new Array(s>1?s-1:0),i=1;s>i;i++)r[i-1]=arguments[i];C.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(xl):s!=="control"?r.forEach(i=>{if(i.selector){var n;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o==null||o.forEach(a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)})}}):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return xe&&this._instance?Pu(xe,this.Ne.custom_blocked_useragents):void 0}}var Ue=se("[Conversations]"),Mt="Conversations not available yet.",kl="console",Du="__posthogHandledLogsRequestError",mn=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[Du]=!0,s},Il=t=>!!t&&typeof t=="object"&&t[Du]===!0,Si={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=wl,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new jp(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var s;(s=this.Ea)==null||s.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),s=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(s):s();var e,s}Pa(t){if(this.nn===t)return m&&ie(m,"online",this.Ca),this.Ra=t.registerDynamicEventProperties(()=>this.Aa()?this.fa:this.pa),this.Fa(),this.initialize()}destroy(){m==null||m.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=[],m==null||m.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[Ns,Os,xr,Qe]){var s=this.Oa(e);I(s)||(t[e]=s)}this.fa=t;var r=b({},t),i=this.Oa(Nt);if(i)for(var n of Object.entries(i))r["$feature/"+n[0]]=n[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Us);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter(e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),s}):[]}qa(){var t=this.Ne.flagKeys;if(!I(t))return t.filter(e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),s})}initialize(){var t,e,s=this.Ne,r=(t=(e=s.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,n,o=(i=(n=s.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(r).filter(u=>!!r[u]).reduce((u,c)=>(u[c]=r[c]||!1,u),{}),l=Object.keys(o).filter(u=>a[u]).reduce((u,c)=>(o[c]&&(u[c]=o[c]),u),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,s){var r,i,n=s!=null&&s.merge&&(r=this.Oa(Nt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(i=this.Oa(Os))!==null&&i!==void 0?i:{},a=b({},n,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:_a(h),variant:ya(h),reason:void 0,metadata:I(l==null?void 0:l[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(On),e=this.Oa(Qe),s=this.Oa(Ot);if(!s&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=r[n],u=e==null?void 0:e[n],c=I(u)?(o=l==null?void 0:l.enabled)!==null&&o!==void 0&&o:!!u,d=I(u)?l==null?void 0:l.variant:typeof u=="string"?u:void 0,h=s==null?void 0:s[n],p=b({},l,{enabled:c,variant:c?d??(l==null?void 0:l.variant):void 0});c!==(l==null?void 0:l.enabled)&&(p.original_enabled=l==null?void 0:l.enabled),d!==(l==null?void 0:l.variant)&&(p.original_variant=l==null?void 0:l.variant),h&&(p.metadata=b({},l==null?void 0:l.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[n]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:s,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map(s=>{var r=t[s];return{key:s,enabled:_a(r),variant:ya(r),payload:va(e[s])}})}getFlagVariants(){var t=this.Oa(Nt),e=this.Oa(Qe);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:s}),this.ca=!0),s}getFlagPayloads(){var t=this.Oa(Os),e=this.Oa(Ot);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:s}),this.ca=!0),s}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach(t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}}),this.Ba=setTimeout(()=>{this.Ha()},5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter(e=>e!==t)}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Bt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var s={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:b({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Lt),timezone:mu()};I(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var i=this.qa();I(i)||(s.flag_keys=i);var n=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(n?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Cr]:[bl]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:s,compression:this.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then(c=>{var d,h,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),!s.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?bl:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var v=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));v&&g.push("quota_limited"),this.F({[Cr]:g}),v?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):s.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()}).catch(u)}catch(c){u(c)}}}Ma(){return lu(this.Sa,3)}Ua(t){this.Sa=cu(t,this.Sa,3,()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes."))}getFeatureFlag(t,e){var s;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(s=r==null?void 0:r.variant)!==null&&s!==void 0?s:r==null?void 0:r.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+gn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e==null?void 0:e.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s,r=this.getFlagVariants(),i=t in r,n=r[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(xr)||void 0,u=this.Oa(Us)||void 0,c=this.Oa(Bt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(Ds);h&&h!==p&&(c={},s=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))s&&this.F({[Bt]:c,[Ds]:s});else{var f,g,v,_,w,S,k,E,P,D;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[Bt]:c},s?{[Ds]:s}:{}));var x=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Cr))!==null&&f!==void 0?f:[]];I(n)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:n,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((v=this.Ne.bootstrap)==null||(v=v.featureFlagPayloads)==null?void 0:v[t])||null,$used_bootstrap_value:!this.ka};I(x==null||(_=x.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=x.metadata.has_experiment),I(x==null||(w=x.metadata)==null?void 0:w.version)||(R.$feature_flag_version=x.metadata.version);var M,$=(S=x==null||(k=x.reason)==null?void 0:k.description)!==null&&S!==void 0?S:x==null||(E=x.reason)==null?void 0:E.code;$&&(R.$feature_flag_reason=$),x!=null&&(P=x.metadata)!=null&&P.id&&(R.$feature_flag_id=x.metadata.id),I(x==null?void 0:x.original_variant)&&I(x==null?void 0:x.original_enabled)||(R.$feature_flag_original_response=I(x.original_variant)?x.original_enabled:x.original_variant),x!=null&&(D=x.metadata)!=null&&D.original_payload&&(R.$feature_flag_original_payload=x==null||(M=x.metadata)==null?void 0:M.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else s&&this.F({[Bt]:c,[Ds]:s});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:va(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+gn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch(s=>{this.rt.error("Failed to capture feature flag call",s)})}catch(s){this.rt.error("Failed to capture feature flag call",s)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},n=s.Na();n.length&&(i.evaluation_contexts=n);var o,a=s.qa();I(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:s.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:s.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=(u==null?void 0:u[t])||void 0}catch(c){return void s.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){s.rt.error("Remote config feature flag callback failed",c)}}})()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+gn),e.defaultValue;var s=this.getFeatureFlag(t,e);return I(s)?e.defaultValue:!!s}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter(e=>e!==t)}receivedFeatureFlags(t,e,s){this.ja(t,e,s)}ja(t,e,s){if(this.nn){this.ma=!0;var r=function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=wl);var c=((P,D)=>{var x=P.flags;return x?b({},P,{featureFlags:Object.fromEntries(Object.keys(x).map(A=>{var R;return[A,(R=x[A].variant)!==null&&R!==void 0?R:x[A].enabled]})),featureFlagPayloads:Object.fromEntries(Object.keys(x).filter(A=>x[A].enabled).filter(A=>{var R;return(R=x[A].metadata)==null?void 0:R.payload}).map(A=>{var R;return[A,(R=x[A].metadata)==null?void 0:R.payload]}))}):(P.featureFlags&&D.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),P)})(i,u),d=c.flags,h=c.featureFlags,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 v={};if(h)for(var _=0;h.length>_;_++)v[h[_]]=!0;return{[Ns]:h,[Nt]:v,[Vr]:!1}}var w=h,S=p,k=d;if(l!=null&&l.partialResponse)w=b({},n,w),S=b({},o,S),k=b({},a,k);else if(i.errorsWhileComputingFlags)if(d){var E=new Set(Object.keys(d).filter(P=>{var D;return!((D=d[P])!=null&&D.failed)}));w=b({},n,Object.fromEntries(Object.entries(w).filter(P=>E.has(P[0])))),S=b({},o,Object.fromEntries(Object.entries(S||{}).filter(P=>E.has(P[0])))),k=b({},a,Object.fromEntries(Object.entries(k||{}).filter(P=>E.has(P[0]))))}else w=b({},n,w),S=b({},o,S),k=b({},a,k);return b({[Ns]:Object.keys(Sl(w)),[Nt]:w||{},[Os]:S||{},[On]:k||{},[Vr]:i.minimalFlagCalledEvents===!0},f?{[xr]:f}:{},g?{[Us]:g}:{})}}(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),s,this.rt);r&&this.F(r),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([Qe,Ot]),this.Va(),void $t.info("All overrides cleared");if(L(t))return this.F({[Qe]:El(t)}),this.Va(),void $t.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,s=t;this.ca=!!((e=s.suppressWarning)!==null&&e!==void 0&&e);var r={},i=s.flags,n=s.payloads;return i&&(r[Qe]=L(i)?El(i):i),n&&(r[Ot]=n),Object.keys(r).length&&this.F(r),i===!1&&n===!1?this.q([Qe,Ot]):i===!1?this.q(Qe):n===!1&&this.q(Ot),this.Va(),i===!1?$t.info("Flag overrides cleared"):i&&$t.info("Flag overrides set",{flags:i}),void(n===!1?$t.info("Payload overrides cleared"):n&&$t.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[Qe]:t}),this.Va(),void $t.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),s=e.flags,r=e.flagVariants;try{t(s,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Sr)||[]).find(l=>l.flagKey===t),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(n.$early_access_feature_name=r.name),s&&(n.$feature_enrollment_stage=s);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Ns]:Object.keys(Sl(o)),[Nt]:o,[ct]:b({},this.Oa(ct)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",n).catch(l=>{this.rt.error("Failed to capture early access feature enrollment",l)})}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,s){e===void 0&&(e=!1);var r=this.Oa(Sr);!r||e?this.Qa(t,s):t(r)}Qa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i,n=e?"&"+e.map(a=>"stage="+a).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Sr]:i=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){s.rt.error("Early access feature callback failed",a)}}})()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter(s=>e[s]),flagVariants:Object.keys(e).filter(s=>e[s]).reduce((s,r)=>(s[r]=e[r],s),{})}}Va(t){this.Fa();var e=this.Ga(),s=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach(i=>{try{i(s,r,{errorsLoading:t})}catch(n){this.rt.error("Error while running feature flags callback",n)}})}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var s=this.Oa(ct)||{},r=(t==null?void 0:t.$set)||(t!=null&&t.$set_once?{}:t),i=t==null?void 0:t.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in s||(n[o]=i[o]));this.F({[ct]:b({},s,n,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=b({},this.Oa(ct)||{});t.forEach(r=>{delete s[r]}),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Lt)||{},r=b({},s);for(var i of Object.keys(t))r[i]=b({},s[i],t[i]);this.F({[Lt]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Lt)||{};this.F({[Lt]:b({},e,{[t]:{}})})}else this.q(Lt)}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}}},Hp={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===Rs||this.Ya===yr?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=pl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(F==null||!F.visibilityState||F.visibilityState==="visible")return!0;var s=m==null||(e=m.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(s!=null&&s.length)||s.some(r=>r.name==="visible")})(),this.Ie=()=>{var e;(F==null?void 0:F.visibilityState)==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw ot.error("started without valid sessionManager"),new Error(eo+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(eo+' cannot be used with cookieless_mode="always"');F!=null&&F.addEventListener&&ie(F,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,F==null||F.removeEventListener==null||F.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(jt))==null||!t.enabled),s=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return m&&e&&s&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var s=!I(Object.assign)&&!I(Array.from);this.ro&&s?(this.no(t),ot.info("starting")):(this.Ya=pl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Rs&&this.Ya!==yr&&(this.Ya=fl),T!=null&&(e=T.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(s=T.__PosthogExtensions__)!=null&&s.initSessionRecording?this.so(t):(r=T.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,i=>{if(i)return ot.error("could not load recorder",i);this.so(t)}))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(Po),(e=this.Mr)==null||e.unregister(Dc)}uo(t,e){if(B(t))return null;var s,r=de(t)?t:parseFloat(t);return typeof(s=r)!="number"||!Number.isFinite(s)||0>s||s>1?(ot.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,s,r=this.Mr,i=()=>{var n,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((n=this.Ne.session_recording)==null?void 0:n.sampleRate,"session_recording.sampleRate"),l=this.uo(o==null?void 0:o.sampleRate,"remote config sampleRate"),u=a??l;B(u)&&this.lo();var c=o==null?void 0:o.minimumDurationMilliseconds;r.register({[jt]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({capturePerformance:t.capturePerformance},o==null?void 0:o.networkPayloadCapture),canvasRecording:{enabled:o==null?void 0:o.recordCanvas,fps:o==null?void 0:o.canvasFps,quality:o==null?void 0:o.canvasQuality},sampleRate:u,minimumDurationMilliseconds:I(c)?null:c,endpoint:o==null?void 0:o.endpoint,triggerMatchType:o==null?void 0:o.triggerMatchType,masking:o==null?void 0:o.masking,urlTriggers:o==null?void 0:o.urlTriggers,version:o==null?void 0:o.version,triggerGroups:o==null?void 0:o.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(i)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Rs&&(this.Ya=yr,ot.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var s;e===void 0&&(e="log"),(s=this.Ja)!=null&&s.log?this.Ja.log(t,e):ot.warn("log called before recorder was ready")}get ao(){var t,e,s=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(jt);return(s==null||(e=s.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(s){return ot.warn("persisted remote config for session recording is invalid and will be ignored",s),!1}return!B(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,s,r;if(!this.eo){if((e=T.__PosthogExtensions__)==null||!e.initSessionRecording)return ot.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[Vc]:!0});var i;if(this.Ja||(this.Ja=(i=T.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===yr||this.Ya===Rs?void 0:(this.Ya=Rs,ot.info("persisted remote config is stale, requesting fresh config before starting"),void new vu(this._instance).load());this.Ya=fl,(s=(r=this.Ja).setDocumentWasEverVisible)==null||s.call(r,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[jc]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[Bc]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?Uc:Hc]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var s;return!((s=this.Ja)==null||!s.tryAddCustomEvent(t,e))}}},Wp={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new ul(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,s=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return s.url_allowlist=(t=s.url_allowlist)==null?void 0:t.map(r=>new RegExp(r)),s.url_ignorelist=(e=s.url_ignorelist)==null?void 0:e.map(r=>new RegExp(r)),s}yo(){if(this.isBrowserSupported()){if(m&&F){var t=s=>{s=s||(m==null?void 0:m.event);try{this.bo(s)}catch(r){dn.error("Failed to capture event",r)}};if(ie(F,"submit",t,{capture:!0}),ie(F,"change",t,{capture:!0}),ie(F,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||(m==null?void 0:m.event);try{this.bo(s,un)}catch(r){dn.error("Failed to capture copy/cut event",r)}};ie(F,"copy",e,{capture:!0}),ie(F,"cut",e,{capture:!0})}}}else dn.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var s=e.autocapture_opt_out;Ke(s)&&(this.instance.persistence&&this.instance.persistence.register({[Pn]:s}),this.co=s),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,s=[];return(e=this.mo)==null||e.forEach(r=>{var i=F==null?void 0:F.querySelectorAll(r);i==null||i.forEach(n=>{t===n&&s.push(r)})}),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Pn],r=this.co,i=this.instance.Qi()&&!this.fo;if(Re(r)&&!Ke(s)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=Zi(t);Zc(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ja(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===un;if(r&&function(d,h,p,f,g,v){var _;if(!m||Mo(d)||p!=null&&p.url_allowlist&&!La(p.url_allowlist,v)||p!=null&&p.url_ignorelist&&La(p.url_ignorelist,v))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some(x=>h.type===x))return!1}var S=ru(d,f),k=S.parentIsUsefulElement,E=S.targetElementList;if(!function(x,A){var R=A==null?void 0:A.element_allowlist;if(I(R))return!0;var M,$=function(J){if(R.some(z=>J.tagName.toLowerCase()===z))return{v:!0}};for(var N of x)if(M=$(N))return M.v;return!1}(E,p)||!qn(E,p==null?void 0:p.css_selector_allowlist)||qn(E,(_=p==null?void 0:p.css_selector_ignorelist)!==null&&_!==void 0?_:jh))return!1;try{var P=m.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var D=d.tagName.toLowerCase();switch(D){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return k?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&($o.indexOf(D)>-1||d.getAttribute("contenteditable")==="true")}}(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=Tp(r,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=n.props;if(n.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===un){var l,u=eu(m==null||(l=m.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Ee(F==null?void 0:F.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(m==null||(e=m.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(C.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,C.info("History API monitoring stopped")}monitorHistoryChanges(){m&&m.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(m&&((e=m.history[t])==null||!e.__posthog_wrapped__)){var s=this;(function(r,i,n){try{if(!(i in r))return dl;var o={next:r[i]},a=n(function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)});return Ee(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),r[i]=a,()=>{if(r[i]!==a)for(var l=r[i];Ee(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else r[i]=o.next}}catch{return dl}})(m.history,t,r=>function(i,n,o){r.call(this,i,n,o),s.So(t)})}}So(t){try{var e,s=m==null||(e=m.location)==null?void 0:e.pathname;if(!s)return;s!==this._o&&this.isEnabled&&this._instance.capture(es,{navigation_type:t}),this._o=s}catch(r){C.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(m,"popstate",t),this.wo=()=>{m&&m.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[An]),this.rageclicks=new ul(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return te(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return B(this.Ne.capture_heatmaps)?B(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;Mp.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var s=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[An]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){pn(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=(F==null?void 0:F.visibilityState)==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){m&&F&&(this.Po=this.cr.bind(this),ie(m,Zr,this.Po),this.Ro=t=>this.ke(t||(m==null?void 0:m.event)),ie(F,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||(m==null?void 0:m.event)),ie(F,"mousemove",this.Ao,{capture:!0}),this.Lo=new Ga(this.instance,Gh,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(F,Yr,this.Oo),this.vo=!0)}Eo(){var t;m&&F&&(this.Po&&m.removeEventListener(Zr,this.Po),this.Ro&&F.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&F.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&F.removeEventListener(Yr,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var s=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=function(o,a,l){for(var u=o;u&&It(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:m)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(O(a,c))return!0;u=tu(u)}return!1}(Zi(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:r),y:t.clientY+(n?0:s),target_fixed:n,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!Oa(t.target)&&pn(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ja(Zi(t),this.instance.config.rageclick)&&this.Vt(b({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!Oa(t.target)&&pn(t)&&(clearTimeout(this.Do),this.Do=setTimeout(()=>{this.Vt(this.$o(t,"mousemove"))},500))}Vt(t){if(m){var e=this.Ne.disable_capture_url_hashes?kt(m.location.href):m.location.href,s=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[...ps,...s||[]]:[],i=Ys(e,r,Zs);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!mt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:Ga,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",b({$current_url:this.R.url},this.R.metrics.reduce((s,r)=>b({},s,{["$web_vitals_"+r.name+"_event"]:b({},r),["$web_vitals_"+r.name+"_value"]:r.value}),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},B(s==null?void 0:s.name)||B(s==null?void 0:s.value))Tt.error("Invalid metric received",s);else{var i=typeof s.navigationURL=="string"?s.navigationURL:void 0,n=this.Bo(i);if(!I(n)){var o=de(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+n;if(!this.Ho||this.Ho>s.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),I(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=I(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,s.attribution&&s.attribution.interactionTargetElement&&(s.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=b({},s,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});I(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Tt.error("Ignoring metric with value >= "+this.Ho,s)}}},this.Uo=()=>{if(!this.vo){var s,r,i,n,o=T.__PosthogExtensions__,a=o==null?void 0:o.postHogWebVitalsCallbacksByFlavor,l=(a==null?void 0:a[this.zo])||(this.zo==="web-vitals"&&I(a)?o==null?void 0:o.postHogWebVitalsCallbacks:void 0);if(I(l)||(s=l.onLCP,r=l.onCLS,i=l.onFCP,n=l.onINP),s&&r&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&n(this.jo.bind(this),u),this.vo=!0}else Tt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Mn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,s=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return B(s)?((e=this._instance.persistence)==null?void 0:e.props[Nn])||["CLS","FCP","INP","LCP"]:s}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&de(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:hl;return t>0&&6e4>=t?hl:t}get isEnabled(){var t=re==null?void 0:re.protocol;if(t!=="http:"&&t!=="https:")return Tt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ke(this.Wo)?this.Wo:void 0;return Ke(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Tt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var s=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,r=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Mn]:s}),this._instance.persistence.register({[Nn]:r})),this.Co=s,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=T.__PosthogExtensions__,s=this.zo,r=e==null?void 0:e.postHogWebVitalsCallbacksByFlavor;r!=null&&r[s]||s==="web-vitals"&&I(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,s,i=>{i?Tt.error("failed to load script",i):t()})}Bo(t){var e=t||(m==null?void 0:m.location.href);if(e){var s=this._instance.config.disable_capture_url_hashes?kt(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...ps,...r||[]]:[];return Ys(s,i,Zs)}Tt.error("Could not determine current URL")}}},zp={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(m&&this.isEnabled&&(s=T.__PosthogExtensions__)!=null&&s.errorWrappingFunctions){var r=T.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=T.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=T.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=r(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=i(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=n(this.captureException.bind(this)))}catch(o){As.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Rn]),this.Jo=new Hd(b({},function(s){var r,i,n,o;return s===void 0&&(s={}),{refillRate:(r=(i=s.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(n=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}}(this._instance.config.error_tracking),{refillInterval:1e4,rt:As})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=b({},e,t):(I(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(As.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",r=>{if(r)return As.error("failed to load script",r);t()})}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Rn]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,i=(e=t==null||(s=t.$exception_list)==null||(s=s[0])==null?void 0:s.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?As.info("Skipping exception capture because of client rate limiting.",{exception:i}):(r=this._instance.exceptions)==null||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,s;this.Xo=[],this.tl=new nh([new ph,new Eh,new gh,new fh,new wh,new yh,new vh,new bh],function(r){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;i>o;o++)n[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` -`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=Ta.test(h)?h.replace(Ta,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of n){var g=f(p,r);if(g){u.push(g);break}}if(u.length>=50)break}}}return function(v){if(!v.length)return[];var _=Array.from(v);return _.reverse(),_.slice(0,50).map(w=>{return b({},w,{filename:w.filename||(S=_,S[S.length-1]||{}).filename,function:w.function||ds});var S})}(u)}}("web:javascript",ch,hh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(Tn))!==null&&e!==void 0?e:[],this.el=qr(this.il()),this.rl=new xh(this.el)}onConfigChange(){this.el=qr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,s,r;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(s=i.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[Tn]:this.Xo,[$n]:o})}}}get nl(){var t,e=!!this._instance.get_property($n),s=this._instance.config.error_tracking.captureExtensionExceptions;return(t=s??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e==null?void 0:e.syntheticException,mechanism:{handled:e==null?void 0:e.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var s=function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce((a,l)=>Sh.has(l)?(o.push(l),a):(a[l]=n[l],a),{}),droppedKeys:o}}(this.sl(e)),r=s.sanitizedProperties,i=s.droppedKeys;i.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(b({[Wr]:t,[zr]:new Date().toISOString()},r))}catch(n){Xe.error("Failed to add exception step. Ignoring breadcrumb.",n)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Xe.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void Xe.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void Xe.info("Skipping exception capture because it was thrown by the PostHog SDK")}var s=this.el.enabled&&B(t.$exception_steps)?this.dl(t):t,r=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;r&&(s.$release_id=r);try{var i=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return Xe.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Xe.error("Failed to process exception event. Ignoring this exception.",o)}var n}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Wr]:t,[zr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce((s,r)=>{var i=r.type,n=r.value;return W(i)&&i.length>0&&s.$exception_types.push(i),W(n)&&n.length>0&&s.$exception_values.push(n),s},{$exception_types:[],$exception_values:[]});return this.Xo.some(s=>{var r=s.values.map(i=>{var n=Ru[i.operator],o=e[i.key];if(!n||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&n(a,o)});return s.type==="OR"?r.some(Boolean):r.every(Boolean)})}catch(s){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",s),!1}}ul(t){return t.flatMap(e=>{var s,r;return(s=(r=e.stacktrace)==null?void 0:r.frames)!==null&&s!==void 0?s:[]}).some(e=>e.filename&&e.filename.startsWith("chrome-extension://"))}hl(t){if(t.length>0){var e,s,r,i,n=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(r=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!B(t)&&L(t)}}},qp=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var s,r;if(this.Mr&&this.Mr.register({[Fo]:!!e.productTours}),!fn(this._instance))return!this.vl&&B((s=this.Mr)==null?void 0:s.props[Ls])||wr.info("product tours disabled; stopping and clearing cached tours"),(r=this.vl)==null||r.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&fn(this._instance)&&this.ai(()=>this.fl())}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.generateProductTours?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"product-tours",r=>{r?wr.error("Could not load product tours script",r):t()})}fl(){var t;!this.vl&&(t=T.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=T.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!L(this.cl)||e){var s=this.Mr;if(s){var r=s.props[Ls];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(fn(this._instance)){var n=i.statusCode;if(n!==200||!i.json){var o="Product Tours API could not be loaded, status: "+n;return n===0?i.error||wr.warn(o):wr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,s&&s.register({[Ls]: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(Ls)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},Si),Vp={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var s=this.globalsForEvent(e);this.gl.push(s),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=T._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,s,r,i,n,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},sc(t,Np),{properties:b({},t.properties,f?{$set:b({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(n=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&n!==void 0?n:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,s=(e=t.tagName)==null?void 0:e.toLowerCase();return s==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):s==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,s,r,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=F==null?void 0:F.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(v,_,w)=>{if(v!=null&&v[_]){var S=v[_];v[_]=w(S),c.push(()=>{v[_]=S})}},f=v=>{if(h.has(v))return v;var _=d.bl(v);return _&&h.add(_),_},g=v=>v.map(_=>typeof _=="string"?_:f(_)).filter(_=>!Re(_));return p(u,"appendChild",v=>function(_){var w=f(_);return w?v.call(this,w):_}),p(u,"insertBefore",v=>function(_,w){var S=f(_);return S?v.call(this,S,w):_}),p(u,"replaceChild",v=>function(_,w){var S=f(_);return S?v.call(this,S,w):w}),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach(v=>{p(v,"append",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"prepend",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))})}),[(i=l.Element)==null?void 0:i.prototype,(n=l.CharacterData)==null?void 0:n.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach(v=>{p(v,"before",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"after",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"replaceWith",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];var E=g(S);return S.length&&!E.length?void 0:_.apply(this,E)})}),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",v=>function(_,w){var S=f(w);return S?v.call(this,_,S):null}),this.wl=()=>{c.forEach(v=>v()),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var s=this._l();try{var r=t(s);return e&&s(),r}catch(i){throw s(),i}}setupSiteApp(t){var e=this.apps[t.id],s=()=>{var o;!e.errored&&this.gl.length&&(Ze.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach(a=>this.xl(()=>e.processEvent==null?void 0:e.processEvent(a))),e.processedBuffer=!0),Object.values(this.apps).every(a=>a.processedBuffer||a.errored)&&((o=this.yl)==null||o.call(this))},r=!1,i=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var n=this.xl(o=>t.init({posthog:this._instance,callback(a){o(),i(a)}}),!1).processEvent;n&&(e.processEvent=n),r=!0}catch(o){Ze.error(gl+t.id,o),i(!1)}if(r&&e.loaded)try{s()}catch(o){Ze.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var s of t)this.setupSiteApp(s)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var s=this.globalsForEvent(t),r=function(n){try{e.xl(()=>n.processEvent==null?void 0:n.processEvent(s))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,s,r,i=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",l=>this.Cl(l))):void Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((s=this.yl)==null||s.call(this),t.ok){var n=t.config;if((r=n.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;T["__$$ph_site_app_"+u]=i._instance,(l=T.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,d=>{if(d)return Ze.error(gl+u,d)})};for(var a of n.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Gp={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,s,r=this.Il();r?(I(this.Ml)&&(this.Ml=(e=T.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager)),I(this.Tl)&&(this.Tl=(s=T.__PosthogExtensions__)==null||(s=s.tracingHeadersPatchFns)==null?void 0:s._patchFetch(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,s;(e=T.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(s=T.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"tracing-headers",r=>{if(r)return $p.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()}}},Kp=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return V.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(B(e))return V.warn("Flags not loaded yet. Not loading surveys.");var s=L(e);this.Rl=s?e.length>0:e,V.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],s=0;slocalStorage.removeItem(i))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)V.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)V.info(ml);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())V.info("Not loading surveys in cookieless mode without consent.");else{var t=T==null?void 0:T.__PosthogExtensions__;if(t){if(!I(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var s=t.generateSurveys;if(s)return void this.Dl(s,e);var r=t.loadExternalDependency;if(!r)return void this.$l(Ao);r(this._instance,"surveys",i=>{i||!t.generateSurveys?this.$l("Could not load surveys script",i):this.Dl(t.generateSurveys,e)})}catch(i){throw this.$l("Error initializing surveys",i),i}finally{this.Al=!1}}}else V.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new Dp(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(ml),t([]);var s,r=this._instance.get_property(Ln);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys(()=>{},!0));typeof Promise<"u"&&this.Ll?this.Ll.then(i=>t(i.surveys,i.context)):(typeof Promise<"u"&&(this.Ll=new Promise(i=>{s=i})),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:i=>{var n;this.Ll=null;var o=i.statusCode;if(o!==200||!i.json){var a="Surveys API could not be loaded, status: "+o;o!==0?V.error(a):i.error||V.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(s==null||s({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter(p=>function(f){return!(!f.start_date||f.end_date)}(p)&&($u(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)),(n=this._instance.persistence)==null||n.register({[Ln]:c,[Gr]:Date.now()});var h={isLoaded:!0};t(c,h),s==null||s({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(Gr);return de(t)&&Date.now()-t>3e5}Bl(){return de(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var s,r={id:t,current_iteration:(s=e==null?void 0:e.iteration)!==null&&s!==void 0?s:null};Nu(r);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(s){V.error("Error in survey callback",s)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!B(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);V.warn("init was not called")}Hl(t){var e=null;return this.getSurveys(s=>{var r;e=(r=s.find(i=>i.id===t))!==null&&r!==void 0?r:null}),e}Ul(t){if(B(this._surveyManager))return{eligible:!1,reason:br};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(B(this._surveyManager))return{eligible:!1,reason:br};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(B(this._surveyManager))return V.warn("init was not called"),{visible:!1,disabledReason:br};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return B(this._surveyManager)?(V.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:br})):new Promise(s=>{this.getSurveys(r=>{var i,n=(i=r.find(a=>a.id===t))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);s({visible:o.eligible,disabledReason:o.reason})}else s({visible:!1,disabledReason:"Survey not found"})},e)})}renderSurvey(t,e,s){var r;if(B(this._surveyManager))V.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(wp.includes(i.type)){var n=F==null?void 0:F.querySelector(e);if(n)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(V.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout(()=>{var o,a;V.info("Rendering survey "+i.id+" with delay of "+((o=i.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(i,n,s),V.info("Survey "+i.id+" rendered")},1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,s);V.warn("Survey element not found")}else V.warn("Surveys of type "+i.type+" cannot be rendered in the app");else V.warn("Survey not found")}}displaySurvey(t,e){var s;if(B(this._surveyManager))V.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=b({},r,{appearance:b({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Gn.Popover&&e.initialResponses&&V.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(r);if(!n.eligible)return void V.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==Gn.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else V.warn("Survey not found")}}cancelPendingSurvey(t){B(this._surveyManager)?V.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},Si),Jp={toolbar:class{constructor(t){this.instance=t}Wl(t){T.ph_toolbar_state=t}Vl(){var t;return(t=T.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,s){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),zn(this.instance.config)||!m||!F)return!1;t=t??m.location,s=s??m.history;try{if(!e){try{m.localStorage.setItem("test","test"),m.localStorage.removeItem("test")}catch{return!1}e=m==null?void 0:m.localStorage}var r,i=Bp||ti(t.hash,"__posthog")||ti(t.hash,"state"),n=i?Ma(()=>JSON.parse(atob(decodeURIComponent(i))))||Ma(()=>JSON.parse(decodeURIComponent(i))):null;return n&&n.action==="ph_authorize"?((r=n).source="url",r&&Object.keys(r).length>0&&(n.desiredHash?t.hash=n.desiredHash:s?s.replaceState(s.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(vl)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token||(this.loadToolbar(r),0))}catch{return!1}}Zl(t){var e=T.ph_load_toolbar||T.ph_load_editor;!B(e)&&Ee(e)?e(t,this.instance):_l.warn("No toolbar load function found")}loadToolbar(t){var e=!(F==null||!F.getElementById(Yc));if(!m||e)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(m.localStorage.setItem(vl,JSON.stringify(b({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var i;this.Wl(1),(i=T.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",n=>{if(n)return _l.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(r)}),ie(m,"turbolinks:load",()=>{this.Wl(0),this.loadToolbar(r)})}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,s){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),this.maybeLoadToolbar(t,e,s)}}},Yp=b({experiments:ye},Si),Zp={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;B(e)||(Ke(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||zn(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=T==null?void 0:T.__PosthogExtensions__;if(t&&!I(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var s=t.loadExternalDependency;if(!s)return void this.eu(Ao);s(this._instance,"conversations",r=>{r||!t.initConversations?this.eu("Could not load conversations script",r):this.tu(t.initConversations),this.Kl=!1})}catch(r){this.eu("Error initializing conversations",r),this.Kl=!1}}else 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&&!Re(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":zn(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":I(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?B(this.Jl)||!this.Jl.token?"missing_token":T!=null&&T.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,s){var r=this;return X(function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,s):(Ue.warn(Mt),null)})()}getMessages(t,e){var s=this;return X(function*(){return s._conversationsManager?s._conversationsManager.getMessages(t,e):(Ue.warn(Mt),null)})()}markAsRead(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Mt),null)})()}getTickets(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Mt),null)})()}requestRestoreLink(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Mt),null)})()}restoreFromToken(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Mt),null)})()}restoreFromUrlToken(){var t=this;return X(function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Mt),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()}}},Xp={logs:class{constructor(t){var e,s=this;this.iu=!1,this.ru=!1,this.rt=se("[logs]"),this.nu=b({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),n=0;r>n;n++)i[n]=arguments[n];i.some(Il)||s.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,i;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),m&&ie(m,"online",this.au)}uu(t,e,s,r){var i,n=function(o,a){var l,u,c,d,h,p,f,g=(l=o==null?void 0:o.flushIntervalMs)!==null&&l!==void 0?l:3e3,v=(u=o==null?void 0:o.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o==null?void 0:o.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=I(_)?Math.max(v,2048):Math.max(v,_),S=o==null?void 0:o.resourceAttributes;return{serviceName:(d=(h=S==null?void 0:S["service.name"])!==null&&h!==void 0?h:o==null?void 0:o.serviceName)!==null&&d!==void 0?d:a==null?void 0:a.serviceNameDefault,serviceVersion:(p=S==null?void 0:S["service.version"])!==null&&p!==void 0?p:o==null?void 0:o.serviceVersion,environment:(f=S==null?void 0:S["deployment.environment"])!==null&&f!==void 0?f:o==null?void 0:o.environment,resourceAttributes:S,beforeSend:o==null?void 0:o.beforeSend,flushIntervalMs:g,maxBufferSize:v,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}}((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,s);return[new sh(this.hu(t,e),n,this.nu,()=>this.du(),o=>o(),void 0,r),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var s;(s=this.ou)==null||s.reset(),this.cu=e;var r=this.uu(()=>this.tr,i=>{this.tr=i});this.ou=r[0],this.fu=r[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var s;(s=this.lu)==null||s.reset(),this.gu=e;var r=this.uu(()=>this.su,i=>{this.su=i},{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},kl);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var s=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!B(s)&&s&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch(e=>this._u(e)),this.lu&&this.lu.flush().catch(e=>this._u(e)))}_u(t){Il(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=T==null?void 0:T.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",s=>{var r;s||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",s):(t.logs.initializeLogs(this._instance),this.ru=!0)}):this.rt.error(Ao)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var s=this._instance;return{get isDisabled(){return!1},get optedOut(){return!s.is_capturing()},getPersistedProperty:r=>r===ut.LogsQueue?t():void 0,setPersistedProperty(r,i){var n;r===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise(e=>{if(lu(this.Sa,3))e({kind:"fatal",error:mn(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=n=>{s||(s=!0,clearTimeout(i),e(n))},i=setTimeout(()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:mn(void 0,"logs request timed out")})},9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:n=>{var o=n.statusCode;if(this.ku(o),o>=200&&300>o)r({kind:"ok"});else if(o===413)r({kind:"too-large"});else if(o!==0&&o!==429&&500>o)r({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(n.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:mn(n.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=n.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}})}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=cu(t,this.Sa,3,()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes.")))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,Y.LIB_NAME,e=>{this.tr=e}),this.su.length>0&&this.xu(t,this.su,this.mu,kl,e=>{this.su=e})}xu(t,e,s,r,i){if(e.length!==0){var n=e.map(a=>a.record);i([]);var o=$c(n,Tc(s,Y.LIB_NAME,Y.LIB_VERSION),r,Y.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var s=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.windowId,i=s.sessionStartTimestamp,n=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,B(i)||(e.sessionStartTimestamp=i),B(n)||(e.lastActivityTimestamp=n)}if(T!=null&&(t=T.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?kt(T.location.href):T.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Qp={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new rh(this.hu(),function(r){var i,n,o,a,l,u=r==null?void 0:r.resourceAttributes;return{serviceName:(i=u==null?void 0:u["service.name"])!==null&&i!==void 0?i:r==null?void 0:r.serviceName,serviceVersion:(n=u==null?void 0:u["service.version"])!==null&&n!==void 0?n:r==null?void 0:r.serviceVersion,environment:(o=u==null?void 0:u["deployment.environment"])!==null&&o!==void 0?o:r==null?void 0:r.environment,resourceAttributes:u,beforeSend:r==null?void 0:r.beforeSend,flushIntervalMs:(a=r==null?void 0:r.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r==null?void 0:r.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}}(s),this.rt)),this.ou}count(t,e,s){e===void 0&&(e=1),this.vu().count(t,e,s)}gauge(t,e,s){this.vu().gauge(t,e,s)}histogram(t,e,s){this.vu().histogram(t,e,s)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch(s=>this.rt.error("PostHog metrics flush failed:",s))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:s=>e.Jt(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise(s=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(n),s(o))},n=setTimeout(()=>i({kind:"retry-later",error:new Error("metrics request timed out")}),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))})}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},ef=b({},Si,Hp,Wp,zp,qp,Vp,Kp,Gp,Jp,Yp,Zp,Xp,Qp);$e.__defaultExtensionClasses=b({},ef);(function(){Y.SDK_DIST_CHANNEL="npm";var t=zs[ts]=new $e;return function(){function e(){e.done||(e.done=!0,Lu=!1,Z(zs,function(s){s._dom_loaded()}))}F!=null&&F.addEventListener?F.readyState==="complete"?e():ie(F,"DOMContentLoaded",e,{capture:!1}):m&&C.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")}(),t})();const Bu="CodeFile",ju="GeneratedCode",tf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function xt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function to(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function sf(t={},e=0){const s=to(t.artifactType||t.type||Bu),r=to(t.artifactName||t.name||t.fileName||`${ju}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function Uu(t={},e=0){const s=xt(t),r=s.artifactType||s.type||Bu,i=s.artifactName||s.name||ju,n=s.fileName||`${i}.dart`;return{id:to(s.id)||sf({...s,artifactType:r,artifactName:i,fileName:n},e),artifactType:r,artifactName:i,fileName:n,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:Hu(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:Wu(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:xt(s.metadata),codeType:s.codeType||tf[r]||"O"}}function Hu(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const s=xt(e),r=s.name||s.package;return r?{name:r,version:s.version||null,inferred:!!s.inferred,...s.reason?{reason:s.reason}:{}}:null}).filter(Boolean):Object.entries(xt(t)).map(([e,s])=>({name:e,version:s||null,inferred:!1})):[]}function Wu(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const s=xt(e);return!s.from&&!s.to?null:{from:s.from||null,to:s.to||null,type:s.type||"uses",description:s.description||""}}).filter(Boolean):[]}function so(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const s=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!s)return null;try{return JSON.parse(s[1].trim())}catch{return null}}}function Xs(t,e={}){const s=[],r=typeof t=="string"?so(t):t,n=xt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(n.artifacts)?n.artifacts:[{artifactType:n.artifactType||e.artifactType,artifactName:n.artifactName||e.artifactName,fileName:n.fileName||e.fileName,description:n.description,code:n.code||e.code||(typeof t=="string"?t:""),dependencies:n.dependencies||e.dependencies,relationships:n.relationships||e.relationships}];o.forEach((d,h)=>{!(d!=null&&d.artifactType)&&!(d!=null&&d.type)&&s.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)=>Uu(d,h)),l=new Map(o.map((d,h)=>{var p;return[xt(d).id,(p=a[h])==null?void 0:p.id]}).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=Wu(n.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:n.schemaVersion||e.schemaVersion||null,id:n.id||e.id||"bundle-current",title:n.title||n.name||e.title||"Generated artifact bundle",description:n.description||e.description||"",artifacts:a,dependencies:Hu(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(n.warnings)?n.warnings:[]],metadata:xt(n.metadata)}}function oi(t){return Xs(t).artifacts[0]||Uu()}function yt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function gs(t){return JSON.stringify(t,null,2)}function rf(t){return gs({task:"architect",userRequest:String(t??"")})}function nf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?gs(e):gs({task:"generate_bundle",bundleSpec:e})}function of(t){return gs({task:"review_bundle",generatedBundle:yt(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"]}})}function Do(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function af({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:i}){return gs({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(i)})}function zu({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return gs({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(r??"")})}const Cl={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},lf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Oe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function cf(t){return Oe(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Oe(t.filterSummary)||Oe(t.filterResults):!1}function qu(t,e=0){if(!Oe(t)||e>3)return null;if(cf(t))return t;for(const s of lf){const r=t[s];if(Oe(r)){const i=qu(r,e+1);if(i)return i}}return null}function ai(t){return Array.isArray(t)?t.some(ai):Oe(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(ai):!1}function ro(t){return Array.isArray(t)?t.some(ro):Oe(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(ro):!1}function Vu(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function uf(t,e){if(Oe(t))for(const[s,r]of Object.entries(t)){if(!Oe(r))continue;const i=Oe(r.categories)?r.categories:{},n=Object.entries(i).filter(([,o])=>Oe(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):r.matched===!0&&e.add(Vu(s))}}function df(t,e){var r;if(!t)return;const s=Array.isArray(t)?t.flatMap(i=>Oe(i)?Object.entries(i):[]):Object.entries(t);for(const[i,n]of s){if(!ai(n))continue;const o=Vu(i),a=((r=n==null?void 0:n.raiFilterResult)==null?void 0:r.raiFilterTypeResults)||(o==="rai"?n==null?void 0:n.raiFilterTypeResults:null),l=Oe(a)?Object.entries(a).filter(([,u])=>ai(u)).map(([u])=>u):[];l.length>0?l.forEach(u=>e.add(u)):e.add(o)}}function hf(t){return Cl[t]?Cl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Fl(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function pf(t){const e=qu(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);uf(e.filterSummary,s),df(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,i=e.invocationResult||null,n=ro(e.filterSummary||e.filterResults);return!r&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...s]}}function ff(t,e){const s=pf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(hf))],i=s.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Fl(r)}.`:"Safety screening could not be completed. Please try again.");return n.name="ModelArmorError",n.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",n.isModelArmor=!0,n.pipelineStep=e,n.userTitle=i?"Request blocked for safety":"Safety check unavailable",n.userMessage=i?`The safety check detected ${Fl(r)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",n.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",n.matchedFilters=s.matchedFilters,n}const gf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Pl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},mf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),vf=["Struct","Record"],_f=[{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=>Al(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=>Al(t).some(e=>{const s=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let r;for(;(r=s.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 { +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(i){if(i.ep)return;i.ep=!0;const n=s(i);fetch(i.href,n)}})();var m=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:m,xe=we==null?void 0:we.navigator,F=we==null?void 0:we.document,re=we==null?void 0:we.location,So=we==null?void 0:we.fetch,xn=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ea=we==null?void 0:we.AbortController,zd=we==null?void 0:we.CompressionStream,Pe=xe==null?void 0:xe.userAgent;function cc(){return!(!m||m.navigator.onLine===!1)}var xs=typeof globalThis<"u"?globalThis:m;xs&&typeof self>"u"&&(xs.self=xs),xs&&typeof File>"u"&&(xs.File=function(){});var $=m??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Sa(t,e,s,r,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,s=arguments;return new Promise(function(r,i){var n=t.apply(e,s);function o(l){Sa(n,r,i,o,a,"next",l)}function a(l){Sa(n,r,i,o,a,"throw",l)}o(void 0)})}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},b.apply(null,arguments)}function uc(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var xa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function ka(t){return typeof t=="string"||t}function Ia(t){return typeof t=="string"?t:void 0}var ks,qd=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t}({}),Ca=function(t){return t.GZipJS="gzip-js",t.Base64="base64",t}({}),Vd=["$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"],Gd=["token"],dc="NativeGzipValidationError",kn=t=>t.length>=2&&t[0]===31&&t[1]===139,Fa=(t,e)=>t===Ca.GZipJS||e===Ca.GZipJS||e==="gzip",Pa=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",hr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=dc,e},Kd=function(){var t=X(function*(e,s){18>e.size&&hr("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());kn(r)&&r[2]===8||hr("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(ks)return ks;ks=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;ks[c]=d>>>0}return ks})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&hr("invalid-crc");var n=s.length>>>0;i.getUint32(4,!0)!==n&&hr("invalid-size")});return function(e,s){return t.apply(this,arguments)}}();function In(){return In=X(function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(r).then(()=>n.close()).catch(function(){var u=X(function*(c){try{yield n.abort(c)}catch{}throw c});return function(c){return u.apply(this,arguments)}}()),a=new Response(i.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield Kd(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}}),In.apply(this,arguments)}var Jd=["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"],Aa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return Jd.concat(e).some(r=>{var i=r.toLowerCase();return s.indexOf(i)!==-1})};function O(t,e){return t.indexOf(e)!==-1}var Si=function(t){return t.trim()},Cn=function(t){return t.replace(/^\$/,"")};function hc(t){var e,s=[];return(e=JSON.stringify(t,function(r,i){if(typeof i=="bigint")return i.toString();if(typeof i!="function"&&typeof i!="symbol"){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&typeof i=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(i))return"[Circular]";s.push(i)}return i}}))!==null&&e!==void 0?e:"null"}var pc=Object.prototype,fc=pc.hasOwnProperty,xi=pc.toString,L=Array.isArray||function(t){return xi.call(t)==="[object Array]"},Ee=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(fc.call(t,e))return!1;return!0}return!1},I=t=>t===void 0,W=t=>xi.call(t)=="[object String]",Fn=t=>W(t)&&t.trim().length===0,Re=t=>t===null,B=t=>I(t)||Re(t),de=t=>xi.call(t)=="[object Number]"&&t==t,lt=t=>de(t)&&t>0,Ge=t=>xi.call(t)==="[object Boolean]",Yd=t=>t instanceof FormData,Zd=t=>O(Vd,t),Xd=t=>O(Gd,t);function gc(t){return t===null||typeof t!="object"}function Br(t,e){return{}.toString.call(t)==="[object "+e+"]"}function xo(t){return typeof Event<"u"&&mc(t,Event)}function mc(t,e){try{return t instanceof e}catch{return!1}}var Qd=[!0,"true",1,"1","yes"],qi=t=>O(Qd,t),eh=[!1,"false",0,"0","no"];function rt(t,e,s,r,i){return e>s&&(r.warn("min cannot be greater than max."),e=s),de(t)?t>s?(r.warn(" cannot be greater than max: "+s+". Using max value instead."),s):e>t?(r.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(r.warn(" must be a number. using max or fallback. max: "+s+", fallback: "+i),rt(i||s,e,s,r))}class th{constructor(e){this.tt={},this.et=e.et,this.it=rt(e.bucketSize,0,100,e.rt),this.nt=rt(e.refillRate,0,this.it,e.rt),this.st=rt(e.refillInterval,0,864e5,e.rt)}ot(e,s){var r=Math.floor((s-e.lastAccess)/this.st);r>0&&(e.tokens=Math.min(e.tokens+r*this.nt,this.it),e.lastAccess=e.lastAccess+r*this.st)}consumeRateLimit(e){var s,r=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,r):this.tt[i]=n={tokens:this.it,lastAccess:r},n.tokens===0||(n.tokens--,n.tokens===0&&((s=this.et)==null||s.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Le="Mobile",jr="iOS",vt="Android",ds="Tablet",vc=vt+" "+ds,_c="iPad",yc="Apple",wc=yc+" Watch",Us="Safari",hs="BlackBerry",bc="Samsung",Ec=bc+"Browser",Sc=bc+" Internet",Wt="Chrome",sh=Wt+" OS",xc=Wt+" "+jr,ko="Internet Explorer",kc=ko+" "+Le,Io="Opera",rh=Io+" Mini",Co="Edge",Ic="Microsoft "+Co,as="Firefox",Cc=as+" "+jr,Ks="Nintendo",Js="PlayStation",ls="Xbox",Fc=vt+" "+Le,Pc=Le+" "+Us,Ms="Windows",Pn=Ms+" Phone",Ra="Nokia",An="Ouya",Ac="Generic",ih=Ac+" "+Le.toLowerCase(),Rc=Ac+" "+ds.toLowerCase(),Rn="Konqueror",$c="Oculus Browser",Ur="Vivaldi",Tc="Yandex",Hr="Whale",$n="DuckDuckGo",Mc="Pale Moon",Wr="Waterfox",Hs="Brave",Nc="Google Search App",le="(\\d+(\\.\\d+)?)",Vi=new RegExp("Version/"+le),nh=new RegExp(ls,"i"),oh=new RegExp(Js+" \\w+","i"),ah=new RegExp(Ks+" \\w+","i"),Fo=new RegExp(hs+"|PlayBook|BB10","i"),lh={"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"},Oc=function(t,e,s,r){e=e||"";var i=function(n){return n!=null&&n.brave?Hs:null}(s);return i||(r!=null&&r.detectGoogleSearchApp&&O(t,"GSA/")?Nc:O(t," OPR/")&&O(t,"Mini")?rh:O(t," OPR/")?Io:Fo.test(t)?hs:O(t,"IE"+Le)||O(t,"WPDesktop")?kc:O(t,"OculusBrowser")?$c:O(t,Ec)?Sc:O(t,Co)||O(t,"Edg/")?Ic:O(t,Ur+"/")?Ur:O(t,"YaBrowser/")?Tc:O(t,Hr+"/")?Hr:O(t,$n+"/")||O(t,"Ddg/")?$n:O(t,"FBIOS")?"Facebook "+Le:O(t,"UCWEB")||O(t,"UCBrowser")?"UC Browser":O(t,"CriOS")?xc:O(t,"CrMo")||O(t,Wt)?Wt:O(t,vt)&&O(t,Us)?Fc:O(t,"FxiOS")?Cc:O(t.toLowerCase(),Rn.toLowerCase())?Rn:O(t,Hs+"/")?Hs:((n,o)=>o&&O(o,yc)||function(a){return O(a,Us)&&!O(a,Wt)&&!O(a,vt)}(n))(t,e)?O(t,Le)?Pc:Us:O(t,"PaleMoon/")?Mc:O(t,Wr+"/")?Wr:O(t,as)?as:O(t,"MSIE")||O(t,"Trident/")?ko:O(t,"Gecko")?as:"")},ch={[kc]:[new RegExp("rv:"+le)],[Ic]:[new RegExp(Co+"?\\/"+le)],[Wt]:[new RegExp("("+Wt+"|CrMo)\\/"+le)],[xc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Us]:[Vi],[Pc]:[Vi],[Io]:[new RegExp("(Opera|OPR)\\/"+le)],[as]:[new RegExp(as+"\\/"+le)],[Cc]:[new RegExp("FxiOS\\/"+le)],[Rn]:[new RegExp("Konqueror[:/]?"+le,"i")],[hs]:[new RegExp(hs+" "+le),Vi],[Fc]:[new RegExp("android\\s"+le,"i")],[Sc]:[new RegExp(Ec+"\\/"+le)],[$c]:[new RegExp("OculusBrowser\\/"+le)],[Ur]:[new RegExp(Ur+"\\/"+le)],[Tc]:[new RegExp("YaBrowser\\/"+le)],[Hr]:[new RegExp(Hr+"\\/"+le)],[Hs]:[new RegExp(Hs+"\\/"+le)],[$n]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Mc]:[new RegExp("PaleMoon\\/"+le)],[Wr]:[new RegExp(Wr+"\\/"+le)],[Nc]:[new RegExp("GSA\\/"+le)],[ko]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},uh=function(t,e,s,r){var i=Oc(t,e,s,r),n=ch[i];if(I(n))return null;for(var o=0;n.length>o;o++){var a=t.match(n[o]);if(a)return parseFloat(a[a.length-2])}return null},$a=[[new RegExp(ls+"; "+ls+" (.*?)[);]","i"),t=>[ls,t&&t[1]||""]],[new RegExp(Ks,"i"),[Ks,""]],[new RegExp(Js,"i"),[Js,""]],[Fo,[hs,""]],[new RegExp(Ms,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Pn,""];if(new RegExp(Le).test(e)&&!/IEMobile\b/.test(e))return[Ms+" "+Le,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=lh[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[Ms,r]}return[Ms,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[jr,[t[3],t[4],t[5]||"0"].join(".")]:[jr,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=I(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+vt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+vt+")","i"),t=>t&&t[2]?[vt,[t[2],t[3],t[4]||"0"].join(".")]:[vt,""]],[/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/,[sh,""]],[/Linux|debian/i,["Linux",""]]],Ta=function(t){return ah.test(t)?Ks:oh.test(t)?Js:nh.test(t)?ls:new RegExp(An,"i").test(t)?An:new RegExp("("+Pn+"|WPDesktop)","i").test(t)?Pn:/iPad/.test(t)?_c:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?wc:Fo.test(t)?hs:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(Ra,"i").test(t)?Ra:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Le).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:vc:new RegExp("(pda|"+Le+")","i").test(t)?ih:new RegExp(ds,"i").test(t)&&!new RegExp(ds+" pc","i").test(t)?Rc:""},dh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ma(t,e){return typeof(s=t)=="string"&&dh.test(s)?t:e();var s}function It(t){return t&&t.split("#")[0]}function Po(t,e){var s=setTimeout(t,e);return s!=null&&s.unref&&(s==null||s.unref()),s}function Na(t,e,s){return Lc.apply(this,arguments)}function Lc(){return(Lc=X(function*(t,e,s){var r;try{return yield Promise.race([t,new Promise((i,n)=>{r=Po(()=>{try{s==null||s(),i()}catch(o){n(o)}},e)})])}finally{clearTimeout(r)}})).apply(this,arguments)}var hh=t=>t instanceof Error,Dc={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}},ph=Dc.info;function Bc(t){if(Ge(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=>Bc(e))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function zr(t){var e=[];for(var s in t){var r=t[s];Re(r)||I(r)||e.push({key:s,value:Bc(r)})}return e}function fh(t,e){var s=Dc[t.level||"info"]||ph,r=s.text,i=s.number,n=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),B(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),B(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=b({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:zr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),I(t.trace_flags)||(l.flags=t.trace_flags),l}function jc(t,e,s){return b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function Uc(t,e,s,r){return{resourceLogs:[{resource:{attributes:zr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let gh=class{constructor(t,e,s,r,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=i,this.dt=n,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var s={record:fh(e,this.ut())};this.ht(()=>this.At(s))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return r}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return X(function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally(()=>{t.ct=null})),t.ct})()}Ft(){var t=this;return X(function*(){var e;t.Et();var s=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(s.length!==0)for(var r=s.length,i=0;s.length>0&&r>i;){var n,o;t.ft=0;var a=Math.min(s.length,t.Ct),l=s.slice(0,a),u=Uc(l.map(d=>d.record),t.Lt(),(n=t.vt)!==null&&n!==void 0?n:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),s=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}})()}Dt(t){var e=this;return X(function*(){var s,r=Math.max(0,t-e.ft),i=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(r)),yield e.dt()})()}Lt(){return jc(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var s=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>s.length||(s.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),s.push(t),this._instance.setPersistedProperty(ut.LogsQueue,s),this.kt>s.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Po(()=>{this.Nt=void 0,this.It()},t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(ut.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X(function*(){e.Et();var s=e.flush().catch(()=>{});t!==void 0?yield Na(s,t):yield s})()}flushWithTimeout(t){var e=this;return X(function*(){var s=e.flush();yield Na(s,t,()=>{s.catch(()=>{})})})()}It(){this.flush().then(()=>{this.yt=0},t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)}).finally(()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())})}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Gi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Oa(t){return String(t)+"000000"}function La(t,e,s,r){var i="";return r&&(i=Object.keys(r).sort().map(n=>JSON.stringify(n)+":"+JSON.stringify(r[n])).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+i}let mh=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}gauge(t,e,s){this.Vt({name:t,type:"gauge",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}histogram(t,e,s){this.Vt({name:t,type:"histogram",value:e,unit:s==null?void 0:s.unit,attributes:s==null?void 0:s.attributes})}flush(){var t=this,e=this.ct,s=function(){var i=X(function*(){e&&(yield e.catch(()=>{})),yield t.Zt()});return function(){return i.apply(this,arguments)}}(),r=s().finally(()=>{this.ct===r&&(this.ct=null)});return this.ct=r,r}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var s,r;try{s=e.attributes?b({},e.attributes):void 0,r=La(e.type,e.name,e.unit,s)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var s;switch(t.type){case"count":t.total=((s=t.total)!==null&&s!==void 0?s:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Gi.length+1).fill(0)});var r=t.hist;r.count+=1,r.sum+=e,r.min=Math.min(r.min,e),r.max=Math.max(r.max,e),r.bucketCounts[function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length}(e,Gi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=Po(()=>{this.Nt=void 0,this.flush().catch(t=>{this.rt.error("Metrics flush failed:",t)})},this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return X(function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var s=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(s===t.Wt)switch(r.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",r.error)}}})()}Gt(t){return e=this.Xt(t),s=function(n,o,a){return b({},n.resourceAttributes,{"service.name":n.serviceName||"unknown_service"},n.environment&&{"deployment.environment":n.environment},n.serviceVersion&&{"service.version":n.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})}(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:zr(s)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,s,r,i}Xt(t){var e=Oa(Date.now()),s=new Map;for(var r of t.values()){var i,n=La(r.type,r.name,r.unit,void 0),o=s.get(n);o||(o=b({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(n,o));var a=zr((i=r.attributes)!==null&&i!==void 0?i:{}),l=Oa(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:Gi})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var i=r[0],n=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=n.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var pr,Da,Ki;function vh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return Ki&&s.length===Da||(Da=s.length,Ki=s.reduce((r,i)=>{pr||(pr={});var n=pr[i];if(n)r[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l==null?void 0:l.filename,c=e[i];if(u&&c){r[u]=c,pr[i]=[u,c];break}}return r},{})),Ki}}class _h{constructor(e,s,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=s,this.modifiers=r}buildFromUnknown(e,s){s===void 0&&(s={});var r=s&&s.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,s,0).apply(e),n=this.buildParsingContext(s),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var s=this;return X(function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&L(r.stacktrace.frames)&&(r.stacktrace.frames=yield s.applyModifiers(r.stacktrace.frames));return e})()}coerceFallback(e){var s;return{type:"Error",value:"Unknown error",stack:(s=e.syntheticException)==null?void 0:s.stack,synthetic:!0}}parseStacktrace(e,s){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),b({},e,{cause:r,stack:i})}applyChunkIds(e,s){return e.map(r=>(r.filename&&s&&(r.chunk_id=s[r.filename]),r))}applyCoercers(e,s){for(var r of this.coercers)if(r.match(e))return r.coerce(e,s);return this.coerceFallback(s)}applyModifiers(e){var s=this;return X(function*(){var r=e;for(var i of s.modifiers)r=yield i(r);return r})()}convertToExceptionList(e,s){var r,i,n,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(i=s.handled)===null||i===void 0||i,synthetic:(n=e.synthetic)!==null&&n!==void 0&&n}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:vh(this.stackParser),skipFirstLines:(s=e.skipFirstLines)!==null&&s!==void 0?s:1}}buildCoercingContext(e,s,r){r===void 0&&(r=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(n,a)}};return b({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:n=>i(n,r),next:n=>i(n,r+1)})}}var ps="?";function Tn(t,e,s,r,i){var n={platform:t,filename:e,function:s===""?ps:s,in_app:!0};return I(r)||(n.lineno=r),I(i)||(n.colno=i),n}var Hc=(t,e)=>{var s=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return s||r?[t.indexOf("@")!==-1?t.split("@")[0]:ps,s?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},yh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,wh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,bh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Eh=(t,e)=>{var s=yh.exec(t);if(s)return Tn(e,s[1],ps,+s[2],+s[3]);var r=wh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=bh.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var n=Hc(r[1]||ps,r[2]);return Tn(e,n[1],n[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},Sh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,xh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,kh=(t,e)=>{var s=Sh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=xh.exec(s[3]);r&&(s[1]=s[1]||"eval",s[3]=r[1],s[4]=r[2],s[5]="")}var i=s[3],n=s[1]||ps,o=Hc(n,i);return Tn(e,i=o[1],n=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Ba=/\(error: (.*)\)/;class Ih{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,s){var r=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var s=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?s+": "+e.message:s}isDOMException(e){return Br(e,"DOMException")}isDOMError(e){return Br(e,"DOMError")}}class Ch{match(e){return function(s){switch({}.toString.call(s)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return mc(s,Error)}}(e)}coerce(e,s){return{type:this.getType(e),value:this.getMessage(e,s),stack:this.getStack(e),cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,s){var r=e.message;return String(r.error&&typeof r.error.message=="string"?r.error.message:r)}getStack(e){return e.stacktrace||e.stack||void 0}}class Fh{constructor(){}match(e){return!!Br(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,s){var r;if(e.error!=null)return s.apply(e.error);var i=s.apply(e.message);return b({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var s=e;if(W(s.filename)&&s.filename.length>0){var r,i,n=(r=s.lineno)!==null&&r!==void 0?r:0,o=(i=s.colno)!==null&&i!==void 0?i:0;return`Error + at `+s.filename+":"+n+":"+o}}}var Ph=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Ah{match(e){return typeof e=="string"}coerce(e,s){var r,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,i=e.match(Ph);return i&&(s=i[1],r=i[2]),[s,r]}}var Rh=["fatal","error","warning","log","info","debug"];function Wc(t,e){e===void 0&&(e=40);var s=Object.keys(t);if(s.sort(),!s.length)return"[object has no keys]";for(var r=s.length;r>0;r--){var i=s.slice(0,r).join(", ");if(e>=i.length)return r===s.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class $h{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,i,n=this.getErrorPropertyFromObject(e);return n?s.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=s.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return xo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var s="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(s+=" with message: '"+e.message+"'"),s}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+Wc(e)}isSeverityLevel(e){return W(e)&&!Fn(e)&&Rh.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 s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(hh(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Th{match(e){return xo(e)}coerce(e,s){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+Wc(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Mh{match(e){return gc(e)}coerce(e,s){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Nh{match(e){return Br(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!xo(e))return!1;try{var s=e.detail;return s!=null&&typeof s=="object"&&"reason"in s}catch{return!1}}coerce(e,s){var r,i=this.getUnhandledRejectionReason(e);return gc(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var qr="$message",Vr="$timestamp",Oh=new Set([qr,Vr]),Ji={enabled:!0,max_bytes:32768};function Gr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:Ji.enabled,max_bytes:Dh(t.max_bytes,Ji.max_bytes)}:b({},Ji)}class Lh{constructor(e){this.Ke=[],this.Je=0,this.Ne=Gr(e)}setConfig(e){this.Ne=Gr(e),this.Xe()}add(e){var s=function(i){var n;try{n=hc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[qr],u=a[Vr];return!W(l)||l.trim().length===0||!W(u)&&!de(u)?void 0:{step:a,json:n}}catch{return}}(e);if(s){var r=function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var n=encodeURIComponent(i),o=0,a=0;n.length>a;a++)n[a]==="%"?(o+=1,a+=2):o+=1;return o}(s.json);r>this.Ne.max_bytes||(this.Ke.push({step:s.step,bytes:r}),this.Je+=r,this.Xe())}}getAttachable(){return this.Ke.map(e=>e.step)}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function Dh(t,e){if(!de(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var zc=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(i){if(m&&(Y.DEBUG||m.POSTHOG_DEBUG||s)&&!I(m.console)&&m.console){for(var n=("__rrweb_original__"in m.console[i])?m.console[i].__rrweb_original__:m.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("error",...n)},critical(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];console.error(t,...n)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>zc(t+" "+i,n)};return r},C=zc("[PostHog.js]"),se=C.createLogger,Bh=se("[ExternalScriptsLoader]"),Yi=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return Bh.warn(e+" was requested but loading of external scripts is disabled."),s("Loading of external scripts is disabled");var r=F==null?void 0:F.querySelectorAll("script");if(r){for(var i,n=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:s()}:(l.addEventListener("load",u=>{l.__posthog_loading_callback_fired=!0,s(void 0,u)}),l.onerror=u=>s(u),{v:void 0})}},o=0;r.length>o;o++)if(i=n())return i.v}var a=()=>{if(!F)return s("document not found");var l=F.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,s(void 0,d)},l.onerror=d=>s(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return s("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")F.head.appendChild(l);else{var u,c=F.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):F.body.appendChild(l)}};F!=null&&F.body?a():F==null||F.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,s)=>{if(e!=="remote-config"){var r;if(t.config.strict_script_versioning)r=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var i="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var n=3e5;i=i+"&t="+Math.floor(Date.now()/n)*n}r=t.requestRouter.endpointFor("assets",i)}Yi(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");Yi(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);Yi(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var qc="$people_distinct_id",Ys="$device_id",Zi="$device_model",Ns="__alias",Os="__timers",Mn="$autocapture_disabled_server_side",Nn="$heatmaps_enabled_server_side",On="$exception_capture_enabled_server_side",Ln="$error_tracking_suppression_rules",Dn="$error_tracking_capture_extension_exceptions",Bn="$web_vitals_enabled_server_side",Ao="$dead_clicks_enabled_server_side",Ro="$product_tours_enabled_server_side",jn="$web_vitals_allowed_metrics",Ht="$session_recording_remote_config",Vc="$replay_sample_rate",Gc="$replay_override_sampling",Kc="$replay_override_linked_flag",Jc="$replay_override_url_trigger",Yc="$replay_override_event_trigger",ns="$sesid",$o="$session_is_sampled",Ot="$enabled_feature_flags",Ls="$active_feature_flags",kr="$early_access_features",Un="$feature_flag_details",Ds="$feature_flag_payloads",Ir="$feature_flag_request_id",Kr="$minimal_flag_called_events",Qe="$override_feature_flags",Lt="$override_feature_flag_payloads",ct="$stored_person_properties",Dt="$stored_group_properties",Hn="$surveys",Jr="$surveys_loaded_at",Wn="$surveys_activated",Cr="$surveys_activated_session",Fr="$surveys_activated_timestamps",Bs="ph_product_tours",jt="$flag_call_reported",js="$flag_call_reported_session_id",Pr="$feature_flag_errors",Ws="$feature_flag_evaluated_at",He="$user_state",zn="$client_session_props",qn="$capture_rate_limit",Vn="$initial_campaign_params",Gn="$initial_referrer_info",Yr="$initial_person_info",Zr="$epp",fr="$posthog_cookieless",Zc="$cookieless_mode",Xc="$sdk_debug_extensions_init_method",Qc="$sdk_debug_extensions_init_time_ms",eu="$sdk_debug_recording_script_not_loaded",To="PostHog loadExternalDependency extension not found.",Bt="on_reject",ht="always",Xt="anonymous",At="identified",Kn="identified_only",Xr="visibilitychange",Qr="beforeunload",ss="$pageview",Xi="$pageleave",Qi="$identify",ja="$groupidentify";function gr(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!B(t))if(L(t))t.forEach(e);else if(Yd(t))t.forEach((r,i)=>e(r,i));else for(var s in t)fc.call(t,s)&&e(t[s],s)}var ee=function(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;e>r;r++)s[r-1]=arguments[r];for(var i of s)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Ar(t){for(var e=Object.keys(t),s=e.length,r=new Array(s);s--;)r[s]=[e[s],t[e[s]]];return r}var Ua=function(t){try{return t()}catch{return}},jh=function(t){return function(){try{for(var e=arguments.length,s=new Array(e),r=0;e>r;r++)s[r]=arguments[r];return t.apply(this,s)}catch(i){C.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),C.critical(i)}}},Mo=function(t){var e={};return Z(t,function(s,r){(W(s)&&s.length>0||de(s))&&(e[r]=s)}),e},Uh=["herokuapp.com","vercel.app","netlify.app"];function Hh(t){var e=t==null?void 0:t.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of Uh)if(s===r)return!1;return!0}function ie(t,e,s,r){var i=r??{},n=i.capture,o=i.passive;t==null||t.addEventListener(e,s,{capture:n!==void 0&&n,passive:o===void 0||o})}function Jn(t){return t.name==="ph_toolbar_internal"}var tu=t=>{if(F){try{for(var e=t+"=",s=F.cookie.split(";").filter(n=>n.length),r=0;s.length>r;r++){for(var i=s[r];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return de(t)&&isFinite(t)&&Math.floor(t)===t});class ei{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,i){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>s||0>r||0>i||e>0xffffffffffff||s>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var n=new Uint8Array(16);return n[0]=e/Math.pow(2,40),n[1]=e/Math.pow(2,32),n[2]=e/Math.pow(2,24),n[3]=e/Math.pow(2,16),n[4]=e/256,n[5]=e,n[6]=112|s>>>8,n[7]=s,n[8]=128|r>>>24,n[9]=r>>>16,n[10]=r>>>8,n[11]=r,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new ei(n)}toString(){for(var e="",s=0;this.bytes.length>s;s++)e=e+(this.bytes[s]>>>4).toString(16)+(15&this.bytes[s]).toString(16),s!==3&&s!==5&&s!==7&&s!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new ei(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var s=0;16>s;s++){var r=this.bytes[s]-e.bytes[s];if(r!==0)return Math.sign(r)}return 0}}class Wh{generate(){var e=this.generateOrAbort();if(!I(e))return e;this.S=0;var s=this.generateOrAbort();if(I(s))throw new Error("Could not generate UUID after timestamp reset");return s}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return ei.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 zh}}var Ha,su=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};m&&!I(m.crypto)&&crypto.getRandomValues&&(su=t=>crypto.getRandomValues(t));class zh{nextUint32(){return this.R.length>this.O||(su(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>qh().toString(),qh=()=>(Ha||(Ha=new Wh)).generate(),Is="",Vh=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!F,j(t){C.error("cookieStore error: "+t)},P:tu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,i){if(!F)return!1;try{var n="",o="",a=function(c,d){if(d){var h=function(f,g){if(g===void 0&&(g=F),Is)return Is;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var v=f.split("."),_=Math.min(v.length,8),w="dmn_chk_"+dt();!Is&&_--;){var S=v.slice(_).join("."),k=w+"=1;domain=."+S+";path=/";g.cookie=k+";max-age=3",g.cookie.includes(w)&&(g.cookie=k+";max-age=0",Is=S)}return Is}(c);if(!h){var p=(f=>{var g=f.match(Vh);return g?g[0]:""})(c);p!==h&&C.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""}(F.location.hostname,r);if(s){var l=new Date;l.setTime(l.getTime()+864e5*s),n="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+n+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&C.warn("cookieStore warning: large cookie, len="+u.length),F.cookie=u,!0}catch{return!1}},q(t,e){if(F!=null&&F.cookie)try{pt.F(t,"",-1,e)}catch{return}}},en=null,Q={N(){if(!Re(en))return en;var t=!0;if(I(m))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||C.error("localStorage unsupported; falling back to cookie store"),en=t,t},j(t){C.error("localStorage error: "+t)},P(t){try{return m==null?void 0:m.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 m==null||m.localStorage.setItem(t,JSON.stringify(e)),!0}catch(s){Q.j(s)}return!1},q(t){try{m==null||m.localStorage.removeItem(t)}catch(e){Q.j(e)}}},Gh=[Ys,"distinct_id",ns,$o,Zr,Yr,He],mr={},Kh={N:()=>!0,j(t){C.error("memoryStorage error: "+t)},P:t=>mr[t]||null,H:t=>mr[t]||null,F:(t,e)=>(mr[t]=e,!0),q(t){delete mr[t]}},Rt=null,ce={N(){if(!Re(Rt))return Rt;if(Rt=!0,I(m))Rt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Rt=!1),ce.q(t)}catch{Rt=!1}return Rt},j(t){C.error("sessionStorage error: ",t)},P(t){try{return m==null?void 0:m.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 m==null||m.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(s){ce.j(s)}return!1},q(t){try{m==null||m.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class Jh{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Bt}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,s=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+s:"__ph_opt_in_out_"+s)}get ei(){var e=this.ii.P(this.ri);return qi(e)?1:O(eh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,s=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==s){this.ni=s;var r=e==="localStorage"?pt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(qi(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[xe==null?void 0:xe.doNotTrack,xe==null?void 0:xe.msDoNotTrack,$.doNotTrack].some(e=>qi(e))}}function ru(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Ee(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(n){return C.error("Error in get_current_url, falling back to window.location.href",n),e}}var iu="__POSTHOG_TOOLBAR__",Yh=1,Zh=3,Xh=11;function Wa(t){return t instanceof Element&&(t.id===iu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ct(t){return!!t&&t.nodeType===Yh}function Ne(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function nu(t){return!!t&&t.nodeType===Zh}function ou(t){return!!t&&t.nodeType===Xh&&Ct(t.host)}var au=1e3;function No(t){return t?Si(t).split(/\s+/):[]}function za(t,e){var s=function(r){var i,n=m==null||(i=m.location)==null?void 0:i.href;return I(n)?void 0:ru(r,n)}(e);return!!(s&&t&&t.some(r=>s.match(r)))}function ti(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 No(e)}function lu(t){return B(t)?null:Si(t).split(/(\s+)/).filter(e=>zs(e)).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function Zs(t){var e="";return Zn(t)&&!hu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;nu(s)&&s.textContent&&(e+=(r=lu(s.textContent))!==null&&r!==void 0?r:"")}),Si(e)}function tn(t){var e;return I(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Oo=["a","button","form","input","select","textarea","label"];function Yn(t,e){if(I(e))return!0;var s,r=function(n){if(e.some(o=>function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}}(n,o)))return{v:!0}};for(var i of t)if(s=r(i))return s.v;return!1}function cu(t){var e=t.parentNode;return!(!e||!Ct(e))&&e}var Qh=[".ph-no-autocapture","[data-ph-no-autocapture]"],uu=["next","previous","prev",">","<"],ep=[...uu,"+","-","−","–"],qa=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,Va=[".ph-no-rageclick",".ph-no-capture"],tp=["","text","search","email","password","url","tel","number"];function Ga(t,e){if(!m||Lo(t))return!1;var s,r,i,n,o;if(Ge(e)?(s=!!e&&Va,r=void 0,i=!1):(s=(n=e==null?void 0:e.css_selector_ignorelist)!==null&&n!==void 0?n:Va,r=e==null?void 0:e.content_ignorelist,i=(o=e==null?void 0:e.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||i&&function(l){return!(!l||!Ct(l))&&(!!Ne(l,"textarea")||(Ne(l,"input")?O(tp,(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=du(t,!1).targetElementList;return!function(l,u){if(l===!1||I(l))return!1;var c;if(l===!0)c=uu;else{if(!L(l))return!1;if(l.length>10)return C.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map(d=>d.toLowerCase())}return u.some(d=>{var h=d.safeText,p=d.ariaLabel;return c.some(f=>qa(h,f)||qa(p,f))})}(r,a.map(l=>{var u;return{safeText:Zs(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}}))&&!Yn(a,s)}var Lo=t=>!t||Ne(t,"html")||!Ct(t),du=(t,e)=>{if(!m||Lo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],i=t;i.parentNode&&!Ne(i,"body");)if(ou(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var n=cu(i);if(!n)break;if(e||Oo.indexOf(n.tagName.toLowerCase())>-1)s=!0;else try{var o=m.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(n),i=n}return{parentIsUsefulElement:s,targetElementList:r}};function Zn(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Ne(r,"body");r=r.parentNode){if(s++>=au||e.has(r))return!1;e.add(r);var i=ti(r);if(O(i,"ph-sensitive")||O(i,"ph-no-capture"))return!1}if(O(ti(t),"ph-include"))return!0;var n=t.type||"";if(W(n))switch(n.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 Ka=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}))$"),Ja=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,sp=[16,15,14,13],rp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),Ya=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),Za=/[0-9A-Za-z_]/;function ip(t){for(var e=0,s=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;s&&(i*=2)>9&&(i-=9),e+=i,s=!s}return e%10==0}function zs(t,e){if(e===void 0&&(e=!0),B(t))return!1;if(W(t)){t=Si(t);var s=e?Ka.test((t||"").replace(/[- ]/g,"")):function(i){var n;for(Ja.lastIndex=0;n=Ja.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of sp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(Ka.test(d)&&ip(d))return!0}}}return!1}(t);if(s)return!1;var r=e?rp.test(t):function(i){var n;for(Ya.lastIndex=0;n=Ya.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&Za.test(o)&&Za.test(a)))return!0}return!1}(t);if(r)return!1}return!0}function Xa(t){var e=Zs(t);return zs(e=(e+" "+pu(t)).trim())?e:""}function pu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,function(s){var r;if(s&&((r=s.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=Zs(s);e=(e+" "+i).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+pu(s)).trim())}catch(n){C.error("[AutoCapture]",n)}}),e}function Qa(t){return t.replace(/"|\\"/g,'\\"')}function np(t){var e=t.attr__class;if(e)return L(e)?e:No(e)}var vr=se("[Dead Clicks]"),op=()=>!0,ap=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Ao)),r=t.instance.config.capture_dead_clicks;return Ge(r)?r:!!te(r)||s};class el{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,s,r){this.instance=e,this.isEnabled=s,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var s=e.config;"captureDeadClicks"in s&&(this.instance.persistence&&this.instance.persistence.register({[Ao]:s.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai(()=>{this.oi()}):this.stop()}ai(e){var s,r;(s=$.__PosthogExtensions__)!=null&&s.initDeadClicksAutocapture?e():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",i=>{i?vr.error("failed to load script",i):e()})}oi(){var e;if(F){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(F),vr.info("starting...")}}else vr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,vr.info("stopping..."))}}var sn=se("[SegmentIntegration]"),fu="posthog-js";function gu(t,e){var s=e===void 0?{}:e,r=s.organization,i=s.projectId,n=s.prefix,o=s.severityAllowList,a=o===void 0?["error"]:o,l=s.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var v=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=v,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],S=w.map(E=>b({},E,{stacktrace:E.stacktrace?b({},E.stacktrace,{type:"raw",frames:(E.stacktrace.frames||[]).map(P=>b({},P,{platform:"web:javascript"}))}):void 0})),k={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:S,$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&&(k.$sentry_url=(n||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(k)),c}}class lp{constructor(e,s,r,i,n,o){this.name=fu,this.setupOnce=function(a){a(gu(e,{organization:s,projectId:r,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class tl{constructor(e){this.li=(s,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(C.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:i}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,s){var r,i=this.vi(e,s);return this.ui={pathname:(r=m==null?void 0:m.location.pathname)!==null&&r!==void 0?r:"",pageViewId:s,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var s;return this.vi(e,(s=this.ui)==null?void 0:s.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,s){var r=this.ui;if(!r)return{$pageview_id:s};var i={$pageview_id:s,$prev_pageview_id:r.pageViewId},n=this._instance.scrollManager.getContext();if(n&&!this._instance.config.disable_scroll_properties){var o=n.maxScrollHeight,a=n.lastScrollY,l=n.maxScrollY,u=n.maxContentHeight,c=n.lastContentY,d=n.maxContentY;if(!(I(o)||I(a)||I(l)||I(u)||I(c)||I(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?rt(a/o,0,1,C):1,p=o>1?rt(l/o,0,1,C):1,f=u>1?rt(c/u,0,1,C):1,g=u>1?rt(d/u,0,1,C):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage: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 rn=["flags","surveys"],cp={[qc]:{exposure:"hidden"},[Ns]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Os]:{exposure:"hidden"},[Mn]:{exposure:"event"},[Nn]:{exposure:"hidden"},[On]:{exposure:"event"},[Ln]:{exposure:"hidden"},[Dn]:{exposure:"event"},[Bn]:{exposure:"event"},[Ao]:{exposure:"event"},[Ro]:{exposure:"hidden"},[jn]:{exposure:"event"},[Ht]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[ns]:{exposure:"hidden"},[$o]:{exposure:"event"},[Vc]:{exposure:"event",shouldSkipFromEventProperties:t=>Re(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Ot]:{exposure:"hidden",storageGroup:"flags"},[Ls]:{exposure:"hidden",storageGroup:"flags"},[kr]:{exposure:"hidden"},[Un]:{exposure:"hidden",storageGroup:"flags"},[Ds]:{exposure:"hidden",storageGroup:"flags"},[Ir]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[Kr]:{exposure:"hidden",storageGroup:"flags"},[Qe]:{exposure:"hidden"},[Lt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Dt]:{exposure:"hidden"},[Hn]:{exposure:"hidden",storageGroup:"surveys"},[Jr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Wn]:{exposure:"event"},[Cr]:{exposure:"hidden"},[Fr]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[jt]:{exposure:"hidden"},[js]:{exposure:"hidden"},[Pr]:{exposure:"hidden"},[Ws]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[zn]:{exposure:"hidden"},[qn]:{exposure:"hidden"},[Vn]:{exposure:"hidden"},[Gn]:{exposure:"hidden"},[Yr]:{exposure:"hidden"},[Zr]:{exposure:"hidden"},[Gc]:{exposure:"event"},[Kc]:{exposure:"event"},[Jc]:{exposure:"event"},[Yc]:{exposure:"event"},[Xc]:{exposure:"event"},[Qc]:{exposure:"event"},[eu]:{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"}},up=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],$t=t=>{var e=cp[t];if(e)return e;for(var s of up){var r=s[1];if(t.indexOf(s[0])===0)return r}},os=(t,e)=>{try{return JSON.stringify(t,(s,r)=>typeof r=="bigint"?r.toString():r,e)}catch{return hc(t)}},si=t=>{var e=F==null?void 0:F.createElement("a");return I(e)?null:(e.href=t,e)},fs=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var n=r[i].split("=");if(n[0]===e){s=n;break}}if(!L(s)||2>s.length)return"";var o=s[1];try{o=decodeURIComponent(o)}catch{C.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},Xs=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],n=(r[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+s):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ri=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},mu=(t,e)=>t>=e&&cc(),vu=(t,e,s,r)=>{if(t===0){if(cc()){var i=e+1;return i===s&&r(),i}return e}return 0},_r="https?://(.*)",gs=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],dp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...gs],Qs="",hp=["li_fat_id"];function _u(t,e,s){if(!F)return{};var r,i=e?[...gs,...s||[]]:[],n=yu(Xs(F.URL,i,Qs),t),o=(r={},Z(hp,function(a){var l=tu(a);r[a]=l||null}),r);return ee(o,n)}function yu(t,e){var s=dp.concat(e||[]),r={};return Z(s,function(i){var n=fs(t,i);r[i]=n||null}),r}function wu(t){var e=function(n){return n?n.search(_r+"google.([^/?]*)")===0?"google":n.search(_r+"bing.com")===0?"bing":n.search(_r+"yahoo.com")===0?"yahoo":n.search(_r+"duckduckgo.com")===0?"duckduckgo":null:null}(t),s=e!="yahoo"?"q":"p",r={};if(!Re(e)){r.$search_engine=e;var i=F?fs(F.referrer,s):"";i.length&&(r.ph_keyword=i)}return r}function sl(){return navigator.language||navigator.userLanguage}var ii="$direct";function bu(){return(F==null?void 0:F.referrer)||ii}function Eu(t,e,s){s===void 0&&(s=!1);var r=t?[...gs,...e||[]]:[],i=s?It(re==null?void 0:re.href):re==null?void 0:re.href,n=i==null?void 0:i.substring(0,1e3);return{r:bu().substring(0,1e3),u:n?Xs(n,r,Qs):void 0}}function Su(t,e){var s;e===void 0&&(e=!1);var r=t.r,i=t.u,n=e?It(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==ii?ii:(s=si(r))==null?void 0:s.host};if(n){o.$current_url=n;var a=si(n);o.$host=a==null?void 0:a.host,o.$pathname=a==null?void 0:a.pathname;var l=yu(n);ee(o,l)}if(r){var u=wu(r);ee(o,u)}return o}function xu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function pp(){try{return new Date().getTimezoneOffset()}catch{return}}var fp={flags:Ws,surveys:Jr},gp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],Qt="main";class nn{constructor(e,s,r){if(r===void 0&&(r=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=r,this.props={},this.mi=void 0,this.yi=(n=>{var o="";return n.token&&(o=n.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),n.persistence_name?"ph_"+n.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&C.info("Persistence loaded",e.persistence,b({},this.props)),this.update_config(e,e,s),this.save(),m){var i=()=>this.flush();ie(m,"beforeunload",i,{capture:!1}),ie(m,"pagehide",i,{capture:!1})}}ki(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return de(s)&&s>0?s:0}isDisabled(){return!!this.xi}bi(e){gp.indexOf(e.persistence.toLowerCase())===-1&&(C.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var s,r=function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...Gh,...o];return b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];Re(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 v={};l.forEach(_=>{c[_]&&(v[_]=c[_])}),Object.keys(v).length&&pt.F(u,v,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{m==null||m.localStorage.removeItem(u),pt.q(u,c)}catch(d){Q.j(d)}}})}(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,n=e.persistence.toLowerCase();return n==="localstorage"&&Q.N()?(s=Q,i=!0):n==="localstorage+cookie"&&r.N()?(s=r,i=!0):n==="sessionstorage"&&ce.N()?s=ce:n==="memory"?s=Kh:n==="cookie"?s=pt:r.N()?(s=r,i=!0):s=pt,this.fi=i,s}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,(s,r)=>{var i=$t(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(s))return;e[r]=s}}),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of rn){var s=Q.H(this.Si(e));if(s&&!mt(s)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(s,e)),this.Ii(e,s)||ee(this.props,s)}}}Ti(e){return Object.keys(this.props).some(s=>{var r;return((r=$t(s))==null?void 0:r.storageGroup)===e})}Ii(e,s){var r=fp[e];if(!r)return!1;var i=s[r],n=this.props[r];return de(i)&&de(n)&&n>i}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=$t(e))==null?void 0:s.storageGroup:void 0,i=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(r){var n=this.ii.H(this.yi);if(n&&e in n)return void this.Pi(e,n[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?I(this.Ai)&&(this.Ai=setTimeout(()=>{this.Ai=void 0,this.Fi()},e)):this.Fi()}}flush(){I(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,Qt))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,s,Qt),rn)){var n,o=r[i];(!mt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,(r,i)=>{var n,o=(n=$t(i))==null?void 0:n.storageGroup;o?s[o][i]=r:e[i]=r}),{main:e,groups:s}}Ei(e,s){if(s===Qt)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,(i,n)=>{var o;r[n]=(o=$t(n))!=null&&o.volatile?"__volatile__":i}),JSON.stringify(r)}Oi(e,s,r,i){var n=this.Mi(i);if(i===Qt||n.dirty||I(n.fingerprint)){var o;try{if((o=this.Ei(r,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==Qt&&(n.persisted=!0),I(o)||(n.fingerprint=o)):this.Ne.debug&&C.warn('failed to persist storage entry "'+s+'"; will retry on next save')}}remove(e){var s=(e===void 0?{}:e).keepGroupEntries,r=s!==void 0&&s;if(I(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!r&&this.gi)for(var i of rn)Q.q(this.Si(i));r?delete this.ci[Qt]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,s,r){if(te(e)){I(s)&&(s="None"),this.$i=I(r)?this.ji:r;var i=!1;if(Z(e,(n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,n),i=!0)}),i)return this.save(),!0}return!1}register(e,s){if(te(e)){this.$i=I(s)?this.ji:s;var r=!1;if(Z(e,(i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||L(i))&&(this.Pi(n,i),r=!0)}),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var i of s)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=F==null?void 0:F.URL;if(e!==this.mi){var s=_u(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Mo(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=F==null?void 0:F.referrer)?wu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:bu(),$referring_domain:F!=null&&F.referrer&&((e=si(F.referrer))==null?void 0:e.host)||ii},void 0)}set_initial_person_info(){this.props[Vn]||this.props[Gn]||this.register_once({[Yr]:Eu(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([Gn,Vn],i=>{var n=this.props[i];n&&Z(n,function(o,a){e["$initial_"+Cn(a)]=o})});var s=this.props[Yr];if(s){var r=function(i,n){n===void 0&&(n=!1);var o=Su(i,n),a={};return Z(o,function(l,u){a["$initial_"+Cn(u)]=l}),a}(s,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,function(s,r){r in e||(e[r]=s)}),e}update_config(e,s,r){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!r),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==s.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every((h,p)=>h===d[p])})(e.cookie_persisted_properties||[],s.cookie_persisted_properties||[]),n=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=n,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,s){var r=this.props[Os]||{};r[e]=s,this.Pi(Os,r),this.save()}remove_event_timer(e){var s=this.props[Os]||{},r=s[e];return I(r)||(delete s[e],this.Pi(Os,s),this.save()),r}get_property(e){return this.props[e]}set_property(e,s){this.Pi(e,s),this.save()}Pi(e,s){var r;this.props[e]=s,(r=$t(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var s,r=(s=$t(e))==null?void 0:s.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function yr(t){var e=!0;return{dispose(){if(e){e=!1;var s=t();s&&Ee(s.then)&&s.then(void 0,()=>{})}}}}var Se={GZipJS:"gzip-js",Base64:"base64"},Cs={Activation:"events",Cancellation:"cancelEvents"},on={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},an={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},Xn={Popover:"popover",Inline:"inline"},mp={SHOWN:"product tour shown"},rl={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},il=se("[RateLimiter]");class vp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=s=>{var r=s.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach(i=>{il.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4})}catch(i){return void il.warn('could not rate limit - continuing. Error: "'+(i==null?void 0:i.message)+'"',{text:r})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var s,r,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(qn))!==null&&s!==void 0?s:{tokens:n,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>n&&(l.tokens=n);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(de(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(qn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var s=this.instance.config.property_denylist;return!L(s)||!s.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&re!=null&&re.pathname)return""+((e=re.origin)!==null&&e!==void 0?e:"")+re.pathname}Hi(e){var s,r,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(s=(r=this.instance).get_session_id)==null?void 0:s.call(r):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+n+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var s=this.serverLimits[e||"events"]||!1;return s!==!1&&new Date().getTime()e(this.remoteConfig)):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return xt.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void xt.warn("Remote config is disabled. Falling back to local config.");this.Wi(e=>{if(!e)return xt.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi(s=>{this.Zi(s.json,s),this.Gi()});this.Zi(e),this.Gi()})}catch(e){xt.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&F&&F.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var s=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;s!==0&&(this.Ki=setInterval(()=>{this.refresh()},s))}}Zi(e,s){!e&&s&&(s.statusCode===0?s.error||xt.warn("Failed to fetch remote config from PostHog."):xt.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){xt.error("Error applying remote config",i)}if((e==null?void 0:e.hasFeatureFlags)!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var r;(r=this._instance.featureFlags)==null||r.ensureFlagsLoaded()}catch(i){xt.error("Error loading feature flags",i)}}}var qe=Uint8Array,Ae=Uint16Array,ms=Uint32Array,Do=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]),Bo=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]),nl=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Iu=function(t,e){for(var s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var n=s[r];s[r+1]>n;++n)i[n]=n-s[r]<<5|r;return[s,i]},Cu=Iu(Do,2),Qn=Cu[1];Cu[0][28]=258,Qn[258]=28;for(var ol=Iu(Bo,0)[1],Fu=new Ae(32768),ne=0;32768>ne;++ne){var es=(43690&ne)>>>1|(21845&ne)<<1;Fu[ne]=((65280&(es=(61680&(es=(52428&es)>>>2|(13107&es)<<2))>>>4|(3855&es)<<4))>>>8|(255&es)<<8)>>>1}var qs=function(t,e,s){for(var r=t.length,i=0,n=new Ae(e);r>i;++i)++n[t[i]-1];var o,a=new Ae(e);for(i=0;e>i;++i)a[i]=a[i-1]+n[i-1]<<1;for(o=new Ae(r),i=0;r>i;++i)o[i]=Fu[a[t[i]-1]++]>>>15-t[i];return o},qt=new qe(288);for(ne=0;144>ne;++ne)qt[ne]=8;for(ne=144;256>ne;++ne)qt[ne]=9;for(ne=256;280>ne;++ne)qt[ne]=7;for(ne=280;288>ne;++ne)qt[ne]=8;var ni=new qe(32);for(ne=0;32>ne;++ne)ni[ne]=5;var _p=qs(qt,9),yp=qs(ni,5),Pu=function(t){return(t/8>>0)+(7&t&&1)},Au=function(t,e,s){(s==null||s>t.length)&&(s=t.length);var r=new(t instanceof Ae?Ae:t instanceof ms?ms:qe)(s-e);return r.set(t.subarray(e,s)),r},ot=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8},Fs=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},ln=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var i=s.length,n=s.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(s[0].s+1);return o[s[0].s]=1,[o,1]}s.sort(function(E,P){return E.f-P.f}),s.push({s:-1,f:25001});var a=s[0],l=s[1],u=0,c=1,d=2;for(s[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=s[s[d].f>s[u].f?u++:d++],l=s[u!=c&&s[d].f>s[u].f?u++:d++],s[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(r=1;i>r;++r)n[r].s>h&&(h=n[r].s);var p=new Ae(h+1),f=eo(s[c-1],p,0);if(f>e){r=0;var g=0,v=f-e,_=1<r;++r){var w=n[r].s;if(e>=p[w])break;g+=_-(1<>>=v;g>0;){var S=n[r].s;e>p[S]?g-=1<=0&&g;--r){var k=n[r].s;p[k]==e&&(--p[k],++g)}f=e}return[new qe(p),f]},eo=function(t,e,s){return t.s==-1?Math.max(eo(t.l,e,s+1),eo(t.r,e,s+1)):e[t.s]=s},al=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new Ae(++e),r=0,i=t[0],n=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++n;else{if(!i&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(i),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(i);n=1,i=t[a]}return[s.subarray(0,r),e]},Ps=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},to=function(t,e,s){var r=s.length,i=Pu(e+2);t[i]=255&r,t[i+1]=r>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;r>n;++n)t[i+n+4]=s[n];return 8*(i+4+r)},ll=function(t,e,s,r,i,n,o,a,l,u,c){ot(e,c++,s),++i[256];for(var d=ln(i,15),h=d[0],p=d[1],f=ln(n,15),g=f[0],v=f[1],_=al(h),w=_[0],S=_[1],k=al(g),E=k[0],P=k[1],D=new Ae(19),x=0;w.length>x;++x)D[31&w[x]]++;for(x=0;E.length>x;++x)D[31&E[x]]++;for(var A=ln(D,7),R=A[0],M=A[1],T=19;T>4&&!R[nl[T-1]];--T);var N,J,z,H,oe=u+5<<3,pe=Ps(i,qt)+Ps(n,ni)+o,Ie=Ps(i,h)+Ps(n,g)+o+14+3*T+Ps(D,R)+(2*D[16]+3*D[17]+7*D[18]);if(pe>=oe&&Ie>=oe)return to(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){N=qs(h,p),J=h,z=qs(g,v),H=g;var _e=qs(R,M);for(ot(e,c,S-257),ot(e,c+5,P-1),ot(e,c+10,T-4),c+=14,x=0;T>x;++x)ot(e,c+3*x,R[nl[x]]);c+=3*T;for(var Ce=[w,E],$e=0;2>$e;++$e){var ae=Ce[$e];for(x=0;ae.length>x;++x)ot(e,c,_e[me=31&ae[x]]),c+=R[me],me>15&&(ot(e,c,ae[x]>>>5&127),c+=ae[x]>>>12)}}else N=_p,J=qt,z=yp,H=ni;for(x=0;a>x;++x)if(r[x]>255){var me;Fs(e,c,N[257+(me=r[x]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,r[x]>>>23&31),c+=Do[me]);var ge=31&r[x];Fs(e,c,z[ge]),c+=H[ge],ge>3&&(Fs(e,c,r[x]>>>5&8191),c+=Bo[ge])}else Fs(e,c,N[r[x]]),c+=J[r[x]];return Fs(e,c,N[256]),c+J[256]},wp=new ms([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),bp=function(){for(var t=new ms(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t}(),cn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function Ep(t,e){e===void 0&&(e={});var s=function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=bp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}}(),r=t.length;s.p(t);var i,n,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,function(d,h,p,f,g,v){var _=d.length,w=new qe(f+_+5*(1+Math.floor(_/7e3))+g),S=w.subarray(f,w.length-g),k=0;if(!h||8>_)for(var E=0;_>=E;E+=65535){var P=E+65535;_>P?k=to(S,k,d.subarray(E,P)):(S[E]=!0,k=to(S,k,d.subarray(E,_)))}else{for(var D=wp[h-1],x=D>>>13,A=8191&D,R=(1<E;++E){var me=z(E),ge=32767&E,Je=T[me];if(M[ge]=Je,T[me]=ge,E>=$e){var Pt=_-E;if((Ie>7e3||Ce>24576)&&Pt>423){k=ll(d,S,0,H,oe,pe,_e,Ce,ae,E-ae,k),Ce=Ie=_e=0,ae=E;for(var ue=0;286>ue;++ue)oe[ue]=0;for(ue=0;30>ue;++ue)pe[ue]=0}var Ve=2,St=0,Es=A,Be=ge-Je&32767;if(Pt>2&&me==z(E-Be))for(var Fe=Math.min(x,Pt)-1,cr=Math.min(32767,E),ur=Math.min(258,Pt);cr>=Be&&--Es&&ge!=Je;){if(d[E+Ve]==d[E+Ve-Be]){for(var je=0;ur>je&&d[E+je]==d[E+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var dr=Math.min(Be,je-2),Yt=0;for(ue=0;dr>ue;++ue){var Zt=E-Be+ue+32768&32767,Ss=Zt-M[Zt]+32768&32767;Ss>Yt&&(Yt=Ss,Je=Zt)}}}Be+=(ge=Je)-(Je=M[ge])+32768&32767}if(St){H[Ce++]=268435456|Qn[Ve]<<18|ol[St];var wa=31&Qn[Ve],ba=31&ol[St];_e+=Do[wa]+Bo[ba],++oe[257+wa],++pe[ba],$e=E+Ve,++Ie}else H[Ce++]=d[E],++oe[d[E]]}}k=ll(d,S,!0,H,oe,pe,_e,Ce,ae,E-ae,k)}return Au(w,0,f+Pu(k)+g)}(n=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),c=u.length;return function(d,h){var 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&&cn(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),cn(u,c-8,s.d()),cn(u,c-4,r),u}var Sp=!!xn||!!So,Ru="text/plain",Rr=!1,$u=(t,e)=>{var s=t.split("#"),r=s[1],i=s[0].split("?"),n=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter(l=>l.split("=")[0]!==e).join("&");return n+(a?"?"+a:"")+(r?"#"+r:"")},ki=function(t,e,s){var r;s===void 0&&(s=!0);var i=t.split("?"),n=i[0],o=i[1],a=b({},e),l=(r=o==null?void 0:o.split("&").map(c=>{var d,h=c.split("="),p=h[0],f=s&&(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,v){I(g)||I(v)||v==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(v),f[f.length]=p+"="+h)}),f.join(d)}(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},un=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===Se.GZipJS){var r=Ep(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(v){c[d++]=v},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 Au(c,0,d)}(os(e)),{mtime:0});return{contentType:Ru,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===Se.Base64){var i=function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,(l,u)=>String.fromCharCode(parseInt(u,16))))}(os(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:os(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=os(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Tu=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:ki(t.url,{compression:Se.Base64}),encodedBody:un(b({},t,{compression:Se.Base64,Ji:void 0}))}:{url:$u(t.url,"compression"),encodedBody:un(b({},t,{compression:void 0,Ji:void 0}))};try{e=un(t)}catch(i){if(Fa(t.compression,fs(t.url,"compression")))return C.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&Fa(t.compression,fs(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?kn(new Uint8Array(s)):ArrayBuffer.isView(s)&&kn(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Rr=!0,r()):{url:t.url,encodedBody:e}},Mu=t=>{try{return Tu(t)}catch(e){return C.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},xp=function(){var t=X(function*(e){var s=os(e.data),r=yield function(n,o,a){return In.apply(this,arguments)}(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return b({},e,{Ji:{contentType:Ru,body:i,estimatedSize:i.byteLength}})});return function(e){return t.apply(this,arguments)}}(),kp=/Failed to fetch|NetworkError|Load failed/i,Nu=t=>(t==null?void 0:t.name)==="TypeError"&&kp.test((t==null?void 0:t.message)||""),Ou=t=>{var e=Mu(t);if(e){var s=e.url,r=e.encodedBody,i=r??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,function(f,g){l.append(g,f)}),n&&l.append("Content-Type",n);var u=null,c=!1;if(Ea){var d=new Ea;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==null?void 0:f.name)==="AbortError"||Nu(f)?C.warn(f):C.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;So(s,b({method:(t==null?void 0:t.method)||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then(f=>f.text().then(g=>{var v={statusCode:f.status,text:g};if(f.status===200)try{v.json=JSON.parse(g)}catch(_){C.error(_)}t.callback==null||t.callback(v)})).catch(h).finally(()=>u?clearTimeout(u.timeout):null)}catch(f){u&&clearTimeout(u.timeout),h(f)}}},so=t=>{try{var e,s=Tu(t),r=s.url,i=s.encodedBody,n=i??{},o=n.body,a=n.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:n.contentType});if(xe.sendBeacon(r,l))return;var u=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:b({},t.data,{batch:h});return so(b({},t,{data:d(u.slice(0,c))})),void so(b({},t,{data:d(u.slice(c))}))}C.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Ou(b({},t,{Yi:!0}))}catch(h){C.warn("Beacon send failed",h)}},cl=(t,e,s,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return ki(s===Se.GZipJS?$u(t,"compression"):t,b({},i?{[i]:Date.now().toString()}:{},s===Se.GZipJS?{}:{compression:s}))},$r=[];So&&$r.push({transport:"fetch",method:Ou}),xn&&$r.push({transport:"XHR",method(t){var e=Mu(t);if(e){var s=new xn,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var i=r??{},n=i.contentType,o=i.body;Z(t.headers,function(a,l){s.setRequestHeader(l,a)}),n&&s.setRequestHeader("Content-Type",n),t.timeout&&(s.timeout=t.timeout),s.onreadystatechange=()=>{if(s.readyState===4){var a={statusCode:s.status,text:s.responseText};if(s.status===200)try{a.json=JSON.parse(s.responseText)}catch{}t.callback==null||t.callback(a)}},s.send(o)}}}),xe!=null&&xe.sendBeacon&&$r.push({transport:"sendBeacon",method:so});var ro=3e3;class Ip{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt((s==null?void 0:s.flush_interval_ms)||ro,250,5e3,C.createLogger("flush interval"),ro),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},s=Object.values(e);[...s.filter(r=>r.url.indexOf("/e")===0),...s.filter(r=>r.url.indexOf("/e")!==0)].map(r=>{this.lr(b({},r,{transport:"sendBeacon"}))})}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout(()=>{if(this.sr(),this.tr.length>0){var s=this.ar(),r=function(){var n=s[i],o=new Date().getTime();n.data&&L(n.data)&&Z(n.data,a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp}),e.lr(n)};for(var i in s)r()}},this.er))}lr(e){try{this.ir(e)}catch(s){C.error(s)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,s=>{var r,i=s,n=(i?i.batchKey:null)||i.url;I(e[n])&&(e[n]=b({},i,{data:[]})),(r=e[n].data)==null||r.push(i.data)}),this.tr=[],e}}var Cp=["retriesPerformedSoFar"];class Fp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!I(m)&&"onLine"in m.navigator&&(this.dr=m.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(m,"online",this.vr),ie(m,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=uc(e,Cp);lt(s)&&(r.url=ki(r.url,{retry_count:s})),this._instance._send_request(b({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(s??0))return void this.At(b({retriesPerformedSoFar:s},r));i.statusCode===0&&C.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(s??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var s=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=s+1;var r=function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))}(s),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+r;navigator.onLine||(n+=" (Browser is offline)"),C.warn(n),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout(()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()},this.hr)}cr(){var e=Date.now(),s=[],r=this.tr.filter(n=>e>n.retryAt||(s.push(n),!1));if(this.tr=s,r.length>0)for(var i of r)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,I(m)||(this.vr&&(m.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(m.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var s=e.requestOptions;try{this._instance._send_request(b({},s,{transport:"sendBeacon"}))}catch(r){C.error(r)}}this.tr=[]}}class Pp{constructor(e){this.yr=()=>{var s,r,i,n;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+((o==null?void 0:o.clientHeight)||0),c=(o==null?void 0:o.scrollHeight)||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(s=this.br.maxScrollY)!==null&&s!==void 0?s:0),this.br.maxScrollHeight=Math.max(l,(r=this.br.maxScrollHeight)!==null&&r!==void 0?r:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(i=this.br.maxContentY)!==null&&i!==void 0?i:0),this.br.maxContentHeight=Math.max(c,(n=this.br.maxContentHeight)!==null&&n!==void 0?n:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(m,"scroll",this.yr,{capture:!0}),ie(m,"scrollend",this.yr,{capture:!0}),ie(m,"resize",this.yr)}scrollElement(){if(!this._r)return m==null?void 0:m.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var s of e){var r=m==null?void 0:m.document.querySelector(s);if(r)return r}}wr(e){var s=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[s]||0}return m?e==="y"?m.scrollY||m.pageYOffset||m.document.documentElement.scrollTop||0:m.scrollX||m.pageXOffset||m.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Ap=t=>Eu(t==null?void 0:t.config.mask_personal_data_properties,t==null?void 0:t.config.custom_personal_data_properties,t==null?void 0:t.config.disable_capture_url_hashes);class ul{constructor(e,s,r,i){this.kr=n=>{var o=this.Sr();if(!o||o.sessionId!==n){var a={sessionId:n,props:this.Cr(this._instance)};this.Mr.register({[zn]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=i||Ap,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[zn]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?Su(s,this._instance.config.disable_capture_url_hashes):{$referring_domain:s.referringDomain,$pathname:s.initialPathName,utm_source:s.utm_source,utm_campaign:s.utm_campaign,utm_medium:s.utm_medium,utm_content:s.utm_content,utm_term:s.utm_term}:{}}getSessionProps(){var e={};return Z(Mo(this.getSetOnceProps()),(s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Cn(r)]=s}),e}}class jo{on(e,s){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(s),()=>{this.Er[e]=this.Er[e].filter(r=>r!==s)}}emit(e,s){for(var r of this.Er[e]||[])r(s);for(var i of this.Er["*"]||[])i(e,s)}constructor(){this.Er={}}}var As=se("[SessionId]");class dl{on(e,s){return this.Ir.on(e,s)}constructor(e,s,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new jo,this.Lr=(u,c)=>!(!lt(u)||!lt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===ht)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=s||dt,this.Nr=r||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*rt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,As.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+n+"_window_id",this.Br="ph_"+n+"_primary_window_exists",this.Hr()){var o=ce.H(this.jr),a=ce.H(this.Br);o&&!a?this.Or=o:ce.q(this.jr),ce.F(this.Br,!0)}if((i=this.Ne.bootstrap)!=null&&i.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){As.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return I(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter(s=>s!==e)}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var s=this.Pr;return!Re(s)&&!Re(e)&&5e3>Math.abs(e-s)}Ur(e,s,r){var i=s!==this._sessionActivityTimestamp,n=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,n&&!i||n&&this.Zr(s)||(this.Pr=s,this.Mr.register({[ns]:[s,e,r]}))}Gr(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(s)&&s>0}Qr(){this.Gr()?this.Mr.refreshKey(ns):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!Re(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var s=this.Jr();s[1]===this.Dr&&s[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[ns]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],s=lt(e)?e:0,r=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(s,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[ns];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&&m&&(m.removeEventListener(Qr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(m,Qr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,s){if(e===void 0&&(e=!1),s===void 0&&(s=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=s||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!n,p=n,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||As.info("cross-tab refresh kept the session alive",{sessionId:n});var g=this.Jr();n=g[1],o=g[2]}h||f||u?(n=this.$r(),l=this.Nr(),As.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==p)&&(As.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var v=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,v,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach(S=>S(n,l,w)),{sessionId:n,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 Lu=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&Aa(s,e))return!0;try{var r=t==null?void 0:t.userAgentData;if(r!=null&&r.brands&&r.brands.some(i=>Aa(i==null?void 0:i.brand,e)))return!0}catch{}return!!t.webdriver};function Du(){return(Du=X(function*(){var t=xe==null?void 0:xe.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),s=e==null?void 0:e.model;return W(s)&&s.length>0?s:void 0}catch(r){return void C.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}})).apply(this,arguments)}var oi=function(t,e){if(!function(s){try{new RegExp(s)}catch{return!1}return!0}(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function dn(t,e,s){return os({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var Bu={exact:(t,e)=>e.some(s=>t.some(r=>s===r)),is_not:(t,e)=>e.every(s=>t.every(r=>s!==r)),regex:(t,e)=>e.some(s=>t.some(r=>oi(s,r))),not_regex:(t,e)=>e.every(s=>t.every(r=>!oi(s,r))),icontains:(t,e)=>e.map(wr).some(s=>t.map(wr).some(r=>s.includes(r))),not_icontains:(t,e)=>e.map(wr).every(s=>t.map(wr).every(r=>!s.includes(r))),gt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>r>parseFloat(i))}),lt:(t,e)=>e.some(s=>{var r=parseFloat(s);return!isNaN(r)&&t.some(i=>rt.toLowerCase();function ju(t,e){return!t||Object.entries(t).every(s=>{var r=s[1],i=e==null?void 0:e[s[0]];if(I(i)||Re(i))return!1;var n=[String(i)],o=Bu[r.operator];return!!o&&o(r.values,n)})}var io="custom",hl="i.posthog.com",Rp=/^\/static\//;class $p{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,s=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return s||(s=this.apiHost.replace("."+hl,".posthog.com")),s==="https://app.posthog.com"?"https://us.posthog.com":s}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":io),this.en[this.apiHost]}rn(e){if(Rp.test(e)){var s=this.instance.config.asset_host;if(typeof s=="string")return s.trim().replace(/\/$/,"")||void 0}}endpointFor(e,s){if(s===void 0&&(s=""),s&&(s=s[0]==="/"?s:"/"+s),e==="ui")return this.uiHost+s;if(e==="flags")return this.flagsApiHost+s;if(e==="assets"){var r=this.rn(s);if(r)return""+r+s}if(this.region===io)return this.apiHost+s;var i=hl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function Uu(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var V=se("[Surveys]"),Hu="seenSurvey_",Wu=t=>{try{var e=(s=>((r,i)=>""+Hu+function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id}(i))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){V.error("Failed to persist survey seen state",s)}},Tp=[on.Popover,on.Widget,on.API],Mp={ignoreConditions:!1,ignoreDelay:!1,displayType:Xn.Popover},Np=se("[PostHog ExternalIntegrations]"),Op={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class Lp{constructor(e){this._instance=e}ai(e,s){var r;(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,i=>{if(i)return Np.error("failed to load script",i);s()})}startIfEnabledOrStop(){var e=this,s=function(){var n,o,a,l=r[0],u=r[1];!u||(n=$.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(Op[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;s()}}}class Dp{constructor(e,s){this.rt=e,this.nn=s,this.sn=new Map,this.an=!1}add(e){var s=this;return X(function*(){if(s.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(s.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');s.sn.set(e.name,e);try{var r=e.setup(s.nn);r&&(yield r)}catch(n){var i=s.sn.get(e.name)===e;i&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&s.ln(e)}})()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var s of(this.sn.clear(),e))this.ln(s)}}ln(e){try{var s=e.dispose==null?void 0:e.dispose();s&&Ee(s.then)&&s.then(void 0,r=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)})}catch(r){this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)}}}class Bp{constructor(e){this._instance=e}initialize(){}get(e){var s=this._instance.persistence;if(typeof e=="string")return s==null?void 0:s.get_property(e);var r={};for(var i of e){var n=s==null?void 0:s.get_property(i);I(n)||(r[i]=n)}return r}set(e,s){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:s}:e)}remove(e){var s;(s=this._instance.persistence)==null||s.unregister(e)}}var pl="extensionsRemoteConfig";class jp{constructor(e){this.an=!1,this.instance=e,this.rt=C,this.un=e.hn,this.kv=new Bp(e),this.onEvent=s=>yr(this.instance.on("eventCaptured",r=>{try{s({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}})),this.onRemoteConfig=s=>{if(this.an)return yr(()=>{});var r=n=>{try{s(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(pl,r);return this.un&&r(this.un),yr(i)},this.vn=new Dp(C.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(Ys))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(Ys);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,s;return(e=(s=this.instance.persistence)==null?void 0:s.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,s,r,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=n==null?void 0:n.sessionId)!==null&&s!==void 0?s:"",windowId:(r=n==null?void 0:n.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=n==null?void 0:n.sessionStartTimestamp)!==null&&i!==void 0?i:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,s,r){var i=this;return X(function*(){r?i.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,s)})()}registerDynamicEventProperties(e){return yr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(pl,e))}sendRequest(e,s){var r=this;return X(function*(){var i;s===void 0&&(s={});var n=r.instance.requestRouter.endpointFor((i=s.target)!==null&&i!==void 0?i:"api",e),o={method:s.method,url:s.query?ki(n,s.query):n,data:s.body,headers:s.headers,timeout:s.timeoutMs,fireCallbackOnDrop:!0,transport:s.transport,compression:s.compression,timestampMode:s.sentAt};return s.transport==="sendBeacon"?(r.instance._send_request(o),{statusCode:202}):new Promise(a=>{o.callback=a,r.instance._send_request(o)})})()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Vs={},hn=0,ai=()=>{},fl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Rs="Surveys module not available",gl="sanitize_properties is deprecated. Use before_send instead",zu="Invalid value for property_denylist config: ",Up=["token","distinct_id",Zc],rs="posthog",qu=!Sp&&(Pe==null?void 0:Pe.indexOf("MSIE"))===-1&&(Pe==null?void 0:Pe.indexOf("Mozilla"))===-1,pn=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:Hh(F==null?void 0:F.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:ai,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==null?void 0:re.search)&&re.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(m==null||(e=m.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(s){C.error("Bad HTTP status: "+s.statusCode+" "+s.text)},get_device_id:s=>s,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:Kn,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:ro},error_tracking:{},_onCapture:ai},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:ep,ignore_text_selection:!0}:!s||"2025-11-30">s||{content_ignorelist:!0},capture_pageview:!s||"2025-05-24">s||"history_change",session_recording:s&&s>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:s&&s>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:s&&s>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:s&&s>="2026-01-30"?"head":"body",internal_or_test_user_hostname:s&&s>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:s&&s>="2026-05-30"?250:0,split_storage:!(!s||"2026-05-30">s),detect_google_search_app:!(!s||"2026-05-30">s),disable_capture_url_hashes:!(!s||"2026-06-25">s)}))(t))},Hp=[["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"]],ml=t=>{var e={};for(var s of Hp){var r=s[0],i=s[1];I(t[r])||(e[i]=t[r])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return I(o)||(I(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&I(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(I(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:C.error(zu+t.property_denylist)),n};class Wp{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){C.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,s){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(s),s.initialize==null||s.initialize(),s}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Bt&&this.consent.isRejected()}get decideEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new Wp,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new jo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=pn(),this.SentryIntegration=lp,this.sentryIntegration=r=>function(i,n){var o=gu(i,n);return{name:fu,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 Pp(this),this.pageViewManager=new tl(this),this.rateLimiter=new vp(this),this.requestRouter=new $p(this),this.consent=new Jh(this),this.externalIntegrations=new Lp(this);var s=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=s.featureFlags&&new s.featureFlags(this),this.toolbar=s.toolbar&&new s.toolbar(this),this.surveys=s.surveys&&new s.surveys(this),this.conversations=s.conversations&&new s.conversations(this),this.logs=s.logs&&new s.logs(this),this.metrics=s.metrics&&new s.metrics(this),this.experiments=s.experiments&&new s.experiments(this),this.exceptions=s.exceptions&&new s.exceptions(this),this.people={set:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(o),n==null||n({})},set_once:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),n==null||n({})}},this.on("eventCaptured",r=>C.info('send "'+(r==null?void 0:r.event)+'"',r))}init(e,s,r){if(r&&r!==rs){var i,n=(i=Vs[r])!==null&&i!==void 0?i:new Te;return n._init(e,s,r),Vs[r]=n,Vs[rs][r]=n,n}return this._init(e,s,r)}_init(e,s,r){var i,n;s===void 0&&(s={});var o,a=W(e)?e.trim():"";if(!a)return C.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=pn(s.defaults),s.debug=this.Cn(s.debug),this.Mn=s,this.Tn=[],s.person_profiles?this.xn=s.person_profiles:s.process_person&&(this.xn=s.process_person);var l=pn(s.defaults),u=ml(s),c=ee({},l,u,{name:r,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&C.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=s.disable_compression?void 0:Se.GZipJS;var d=this.En();if(this.persistence=new nn(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new nn(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach(P=>{W(P)&&this.yn.add(P)})}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Ip(P=>this.Pn(P),this.config.request_queue_config),this.Rn=new Fp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new dl(this),this.sessionPropsManager=new ul(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId((P,D,x)=>{(x!=null&&x.activityTimeout||x!=null&&x.sessionPastMaximumLength||x!=null&&x.crossTabAdoption)&&this.An()})),this.Fn(),this.config.__preview_deferred_init_extensions?(C.info("Deferring extension initialization to improve startup performance"),setTimeout(()=>{this.Ln(g)},0)):(C.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&C.info("Starting in debug mode",{this:this,config:s,thisC:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=s.bootstrap)!=null&&i.distinctID||(s.bootstrap=b({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=s.bootstrap)==null?void 0:n.distinctID)!==void 0){var v=s.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==v&&w===Xt)this.identify(v);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==v&&w===At)C.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var S=this.config.get_device_id(dt()),k=s.bootstrap.isIdentifiedID?S:v;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?At:Xt),this.register({distinct_id:v,$device_id:k})}}if(g)this.register_once({distinct_id:fr,$device_id:null},"");else if(!this.get_distinct_id()){var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:E},""),this.persistence.set_property(He,Xt)}return ie(m,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),s.segment?function(P,D){var x=P.config.segment;if(!x)return D();(function(A,R){var M=A.config.segment;if(!M)return R();var T=J=>{var z=()=>J.anonymousId()||dt();A.config.get_device_id=z,J.id()&&(A.register({distinct_id:J.id(),$device_id:z()}),A.persistence.set_property(He,At)),R()},N=M.user();"then"in N&&Ee(N.then)?N.then(T):T(N)})(P,()=>{x.register((A=>{typeof Promise<"u"&&Promise.resolve||sn.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===A.get_distinct_id()||(sn.info("No userId set, resetting PostHog"),A.reset()),M.event.userId&&M.event.userId!==A.get_distinct_id()&&(sn.info("UserId set, identifying with PostHog"),A.identify(M.event.userId));var N=A.calculateEventProperties(T,M.event.properties);return M.event.properties=Object.assign({},N,M.event.properties),M};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:M=>R(M,M.event.event),page:M=>R(M,ss),identify:M=>R(M,Qi),screen:M=>R(M,"$screen")}})(P)).then(()=>{D()})})}(this,()=>this.On()):this.On(),Ee(this.config._onCapture)&&this.config._onCapture!==ai&&(C.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",P=>this.config._onCapture(P.event,P))),this.config.ip&&C.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||function(){return Du.apply(this,arguments)}().then(P=>{P&&this.register({[Zi]:P})}).catch(ai),this}Fn(){var e,s,r,i,n,o,a=(e=(s=this.config.__extensionClasses)==null?void 0:s.featureFlags)!==null&&e!==void 0?e:(r=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)),Ee(this.featureFlags.onReloading)&&Ee(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading(()=>{this.dn.emit("featureFlagsReloading",!0)}),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var s,r,i,n,o,a,l,u=performance.now(),c=b({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push(()=>{this.scrollManager.startMeasuringScrollPosition()}),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(i=this.logs)!==null&&i!==void 0?i:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(n=this.metrics)!==null&&n!==void 0?n:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,ap)),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,s){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-s>=30&&e.length>0)return void setTimeout(()=>{this.qn(e,s)},0);var r=e.shift();if(r)try{r()}catch(n){C.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-s);this.register_for_session({[Xc]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[Qc]:i}),this.config.__preview_deferred_init_extensions&&C.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var s;if(!F||!F.body)return C.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout(()=>{this.Zi(e)},500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var r,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=O(i.supportedCompression,Se.GZipJS)?Se.GZipJS:O(i.supportedCompression,Se.Base64)?Se.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:Kn}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach(n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e))}On(){try{this.config.loaded(this)}catch(r){C.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,s=this.config.internal_or_test_user_hostname;(typeof s=="string"?e===s:s.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout(()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()},1),this.Un=new ku(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()&&gr(this.__request_queue,e=>this.Pn(e)),this.__request_queue=[],this.Bn()}_handle_unload(){var e,s,r,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(Xi),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(Xi,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?qu?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=b({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(I(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(s=>{var r,i,n,o=b({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&I(o.compression)&&o.data&&(o.compression=Se.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d==null?void 0:d.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=function(v,_){return _===void 0&&(_=new Date().toISOString()),L(v)?v.map(w=>b({},w,{sent_at:_})):b({},v,{sent_at:_})}(o.data))),o.url=cl(o.url,o.method,o.compression,o.timestampMode);var p=$r.filter(v=>!o.disableTransport||!v.transport||!o.disableTransport.includes(v.transport)),f=(i=(n=function(v,_){for(var w=0;v.length>w;w++)if(v[w].transport===h)return v[w]}(p))==null?void 0:n.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var g=v=>{try{f(v)}catch(_){Nu(_)?C.warn(_):C.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===Se.GZipJS&&zd&&typeof Promise<"u"&&!Rr?xp(o).then(v=>{g(v)}).catch(v=>{if(Pa(v))return Rr=!0,void g(b({},o,{compression:void 0,url:cl(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return Pa(_)||w===dc})(v)&&(Rr=!0),g(o)}):f(o)})(b({},e,{callback:s=>{var r,i;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,s),e.callback==null||e.callback(s)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){hn++;try{var s,r=[],i=[],n=[];gr(e,a=>{if(a)if(L(s=a[0]))n.push(a);else if(Ee(a))try{a.call(this)}catch(l){C.error("Error executing queued PostHog call",a,l)}else L(a)&&s==="alias"?r.push(a):L(a)&&s.indexOf("capture")!==-1&&Ee(this[s])?n.push(a):i.push(a)});var o=function(a,l){gr(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){C.error("Error executing queued PostHog call",u,d)}})};o(r,this),o(i,this),o(n,this)}finally{hn--}}push(e){if(hn>0&&L(e)&&W(e[0])){var s=Te.prototype[e[0]];Ee(s)&&s.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,s,r){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!I(e)&&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){s!=null&&s.$current_url&&!W(s==null?void 0:s.$current_url)&&(C.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),s==null||delete s.$current_url),e!=="$exception"||r!=null&&r.Wn||C.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=(r==null?void 0:r.timestamp)||d,p=Ma(r==null?void 0:r.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,s||{},h,p)};e===ss&&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(Kr)===!0;r!=null&&r.$set&&!g&&(f.$set=r==null?void 0:r.$set);var v=r==null?void 0:r.$unset;v&&(f.$unset=v);var _,w,S,k=g?void 0:this.Vn(r==null?void 0:r.$set_once,e!==ja,e===Qi);if(k&&(f.$set_once=k),r!=null&&r._noTruncate||(n=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,n):T,l=new Set,f=function T(N,J){if(N!==Object(N))return a?a(N):N;if(!l.has(N)){var z;if(l.add(N),L(N))z=[],gr(N,oe=>{z.push(T(oe))});else{var H={};Z(N,(oe,pe)=>{l.has(oe)||(H[pe]=T(oe))}),z=H}return z}}(o)),f.timestamp=h,I(r==null?void 0:r.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=function(T,N){N===void 0&&(N=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return qd.forEach(z),N.forEach(z),J}(f.properties,Up)),e===ft.DISMISSED||e===ft.SENT){var E=s==null?void 0:s[an.SURVEY_ID],P=s==null?void 0:s[an.SURVEY_ITERATION];Wu({id:E,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:E,current_iteration:P},w=e===ft.SENT?"responded":"dismissed",S="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(S="$survey_"+w+"/"+_.id+"/"+_.current_iteration),S)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[an.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===mp.SHOWN){var D=s==null?void 0:s[rl.TOUR_TYPE];D&&(f.$set=b({},f.$set,{[rl.TOUR_LAST_SEEN_DATE+"/"+D]:new Date().toISOString()}))}var x=b({},f.properties.$set,f.$set);if(mt(x)||this.setPersonPropertiesForFlags(x),!B(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ma(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=r==null?void 0:r._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),M={method:"POST",url:R,data:f,compression:"best-available",timestampMode:(r==null?void 0:r._batchKey)==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r==null?void 0:r._batchKey,transport:r==null?void 0:r.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(M):this.In.enqueue(M),f}C.critical("This capture call is ignored due to client rate limiting.")}}else C.error("No event name provided to posthog.capture")}else C.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",s=>e(s.event,s))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new jp(this)}cn(e){this._n.push(e);var s=!0;return()=>{if(s){s=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,s,r,i,n){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=n?void 0:this.persistence.remove_event_timer(e),a=b({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[Zc]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!de(a.distinct_id)||Fn(a.distinct_id))&&C.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=function(E,P,D,x){var A,R,M,T;if(x===void 0&&(x=!1),!Pe)return{};var N,J=E?[...gs,...P||[]]:[],z=function(ur){for(var je=0;$a.length>je;je++){var dr=$a[je],Yt=dr[1],Zt=dr[0].exec(ur),Ss=Zt&&(Ee(Yt)?Yt(Zt,ur):Yt);if(Ss)return Ss}return["",""]}(Pe),H=z[0],oe=z[1],pe=(N=typeof navigator<"u"?navigator:void 0)!=null&&N.brave?{brave:!0}:{},Ie={};I(D)||(Ie.detectGoogleSearchApp=D);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,$e=(R=navigator)==null?void 0:R.maxTouchPoints,ae=m==null||(M=m.screen)==null?void 0:M.width,me=m==null||(T=m.screen)==null?void 0:T.height,ge=m==null?void 0:m.devicePixelRatio;I(Ce)||(_e.userAgentDataPlatform=Ce),I($e)||(_e.maxTouchPoints=$e),I(ae)||(_e.screenWidth=ae),I(me)||(_e.screenHeight=me),I(ge)||(_e.devicePixelRatio=ge);var Je,Pt,ue,Ve,St,Es,Be,Fe,cr=ee(Mo({$os:H,$os_version:oe,$browser:Oc(Pe,navigator.vendor,pe,Ie),$device:Ta(Pe),$device_type:(Pt=Pe,ue=_e,Fe=Ta(Pt),Fe===_c||Fe===vc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Rc?ds:Fe===Ks||Fe===ls||Fe===Js||Fe===An?"Console":Fe===wc?"Wearable":Fe?Le:(ue==null?void 0:ue.userAgentDataPlatform)==="Android"&&((Ve=ue==null?void 0:ue.maxTouchPoints)!==null&&Ve!==void 0?Ve:0)>0?600>Math.min((St=ue==null?void 0:ue.screenWidth)!==null&&St!==void 0?St:0,(Es=ue==null?void 0:ue.screenHeight)!==null&&Es!==void 0?Es:0)/((Be=ue==null?void 0:ue.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Le:ds:"Desktop"),$timezone:xu(),$timezone_offset:pp()}),{$current_url:Xs(x?It(re==null?void 0:re.href):re==null?void 0:re.href,J,Qs),$host:re==null?void 0:re.host,$pathname:re==null?void 0:re.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:uh(Pe,navigator.vendor,pe,Ie),$browser_language:sl(),$browser_language_prefix:(Je=sl(),typeof Je=="string"?Je.split("-")[0]:void 0),$screen_height:m==null?void 0:m.screen.height,$screen_width:m==null?void 0:m.screen.width,$viewport_height:m==null?void 0:m.innerHeight,$viewport_width:m==null?void 0:m.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&&(cr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),cr}(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(n,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(E){a.$sdk_debug_error_capturing_properties=String(E)}if(this.requestRouter.region===io&&(a.$lib_custom_api_host=this.config.api_host),u=e!==ss||n?e!==Xi||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===ss&&F&&(a.title=F.title),!I(o)){var f=r.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Pe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),v=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],E=>{E in g&&delete v[E]});var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(E){C.error("Failed to produce browser extension event properties",E)}(a=ee({},c,g,v,b({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,function(E){delete a[E]}):C.error(zu+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var S=this.config.sanitize_properties;S&&(C.error(gl),a=S(a,e));var k=this.Zn();return a.$process_person_profile=k,k&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var i;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var n=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},n,o||{},e||{}),l=this.config.sanitize_properties;return l&&(C.error(gl),a=l(a,"$set_once")),s&&(this.mn=!0),mt(a)?void 0:a}register(e,s){var r;(r=this.persistence)==null||r.register(e,s)}register_once(e,s,r){var i;(i=this.persistence)==null||i.register_once(e,s,r)}register_for_session(e){var s;(s=this.sessionPersistence)==null||s.register(e),Object.keys(e).forEach(r=>this.yn.add(r)),this.Qn()}unregister(e){var s;(s=this.persistence)==null||s.unregister(e)}unregister_for_session(e){var s;(s=this.sessionPersistence)==null||s.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,s){this.register({[e]:s})}An(){this.yn.forEach(e=>{var s;(s=this.sessionPersistence)==null||s.unregister(e)}),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var s=[];this.yn.forEach(r=>s.push(r)),s.length>0?ce.F(this.bn,s):ce.q(this.bn)}}getFeatureFlag(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,s)}getFeatureFlagPayload(e){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagPayload(e)}getFeatureFlagResult(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,s)}getAllFeatureFlags(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,s){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s==null?void 0:s.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var i;return s===void 0&&(s=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,s,r)}on(e,s){return this.dn.on(e,s)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Rs}),()=>{})}onSessionId(e){var s,r;return(s=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&s!==void 0?s:()=>{}}getSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getSurveys(e,s):e([],{isLoaded:!1,error:Rs})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:Rs})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=Mp),(r=this.surveys)==null||r.displaySurvey(e,s)}cancelPendingSurvey(e){var s;(s=this.surveys)==null||s.cancelPendingSurvey(e)}canRenderSurvey(e){var s,r;return(s=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&s!==void 0?s:{visible:!1,disabledReason:Rs}}canRenderSurveyAsync(e,s){var r,i;return s===void 0&&(s=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Rs})}Jn(e){return!e||Fn(e)?(C.critical("Unique user id has not been set in posthog.identify"),!1):e===fr?(C.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(C.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,s,r){if(!this.__loaded||!this.persistence)return C.uninitializedWarning("posthog.identify");if(de(e)&&(e=e.toString(),C.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(Ys)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Ns)&&(this.unregister(Ns),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||Xt)===Xt,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,At),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(Qi,{distinct_id:e,$anon_distinct_id:i},{$set:s||{},$set_once:r||{}}),this.Sn=dn(e,s,r),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,At);var u=s||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=dn(e,s,r)}else(s||r)&&this.setPersonProperties(s,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(jt)):l&&(s||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,s){if((e||s)&&this.Gn("posthog.setPersonProperties")){var r=dn(this.get_distinct_id(),e,s);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:s||{}},!0),this.capture("$set",{$set:e||{},$set_once:s||{}}),this.Sn=r):C.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var s,r=(L(e)?e:[e]).filter(i=>W(i)&&i.length>0);r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((s=this.featureFlags)==null||s.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,s,r){if(e&&s){var i=this.getGroups(),n=i[e]!==s;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},i,{[e]:s})}),n||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(ja,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),n&&!r&&this.reloadFeatureFlags()}else C.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,s)}resetPersonPropertiesForFlags(e){var s;e===void 0&&(e=!0),(s=this.featureFlags)==null||s.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,s))}resetGroupPropertiesForFlags(e){var s;(s=this.featureFlags)==null||s.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,s){var r,i,n,o,a,l,u,c,d,h;if(s===void 0&&(s=!1),C.info("reset"),!this.__loaded)return C.uninitializedWarning("posthog.reset");var p,f=this.get_property(Ys),g=this.get_property(Zi),v=this.get_property(Ht),_=this.is_capturing();if(this.consent.reset(),s||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(r=this.persistence)==null||r.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),I(v)||(p=this.persistence)==null||p.register({[Ht]:v}),(n=this.surveys)==null||n.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,Xt),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:fr,$device_id:null},"");else{var w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||I(g)||this.register({[Zi]: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 s=this;return X(function*(){var r,i,n,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(i=s.jn)==null||i.dispose(),(n=s.sessionRecording)==null||n.dispose(),(o=s.logs)==null||o.flushLogs("sendBeacon"),(a=s.metrics)==null||a.flush("sendBeacon"),(l=s.In)==null||l.unload(),(u=s.Rn)==null||u.unload();try{var c;(c=s.featureFlags)==null||c.destroy()}catch(d){C.error("Error while destroying feature flags",d)}}else C.uninitializedWarning("posthog.shutdown")})()}setIdentity(e,s){var r;this.config.identity_distinct_id=e,this.config.identity_hash=s,this.alias(e),(r=this.conversations)==null||r.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,s;return(e=(s=this.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var s=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,s){return e===this.get_property(qc)?(C.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(I(s)&&(s=this.get_distinct_id()),e!==s?(this.Kn(Ns,e),this.capture("$create_alias",{alias:e,distinct_id:s})):(C.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var s=b({},this.config);if(te(e)){var r,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,ml(e));var g=this.En();(r=this.persistence)==null||r.update_config(this.config,s,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new nn(b({},this.config,{persistence:"sessionStorage"}),g,!1);var v=this.Cn(this.config.debug);Ge(v)&&(this.config.debug=v),Ge(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),C.info("set_config",{config:e,oldConfig:s,newConfig:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(n=this.exceptionObserver)==null||n.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,s){Y.LIB_NAME=e,Y.LIB_VERSION=s}startSessionRecording(e){var s,r,i,n,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((s=this.sessionManager)==null||s.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((n=this.sessionRecording)==null||n.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,s){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(b({},i,s))}}addExceptionStep(e,s){var r;(r=this.exceptions)==null||r.addExceptionStep(e,s)}captureLog(e){var s;(s=this.logs)==null||s.captureLog(e)}get logger(){var e,s;return(e=(s=this.logs)==null?void 0:s.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var s,r;return(s=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&s!==void 0&&s}get_property(e){var s;return(s=this.persistence)==null?void 0:s.props[e]}getSessionProperty(e){var s;return(s=this.sessionPersistence)==null?void 0:s.props[e]}toString(){var e,s=(e=this.config.name)!==null&&e!==void 0?e:rs;return s!==rs&&(s=rs+"."+s),s}_isIdentified(){var e,s;return((e=this.persistence)==null?void 0:e.get_property(He))===At||((s=this.sessionPersistence)==null?void 0:s.get_property(He))===At}Zn(){var e,s;return!(this.config.person_profiles==="never"||this.config.person_profiles===Kn&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Ns])&&((s=this.persistence)==null||(s=s.props)==null||!s[Zr]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(C.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(Zr,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Bt)}es(){var e,s,r,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((r=this.persistence)==null||r.set_disabled(n)),((s=this.sessionPersistence)==null?void 0:s.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,i,n,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new dl(this),this.pageViewManager=new tl(this),this.persistence&&(this.sessionPropsManager=new ul(this,this.sessionManager,this.persistence));var l,u=(n=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&n!==void 0?n:(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(),(s=this.sessionRecording)==null||s.startIfEnabledOrStop(),this.config.cookieless_mode==Bt&&((c=this.surveys)==null||c.loadIfEnabled()),(I(e==null?void 0:e.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e==null?void 0:e.captureEventName)!==null&&d!==void 0?d:"$opt_in",e==null?void 0:e.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else C.warn(fl)}opt_out_capturing(){var e,s,r;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Bt&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Bt&&(this.register({distinct_id:fr,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):C.warn(fl)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===ht||(this.config.cookieless_mode===Bt?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return xe?Lu(xe,this.config.custom_blocked_useragents):void 0}Hn(){F&&(F.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(ss,{title:F.title},{send_instantly:!0}),this.kn&&(F.removeEventListener(Xr,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(F,Xr,this.kn)))}debug(e){e===!1?(m==null||m.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(m==null||m.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(C.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):function(s,r,i,n,o){var a=r in s&&!B(s[r]),l=i in s&&!B(s[i]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[i])}(e,"advanced_disable_flags","advanced_disable_decide",0,C)}Pt(e){var s;if(B(this.config.before_send))return e;var r=Object.keys((s=e.properties)!==null&&s!==void 0?s:{}).filter(Xd),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],n=e;for(var o of i){if(n=o(n),B(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return Zd(e.event)?C.warn(a+". This can cause unexpected behavior."):C.info(a),null}n.properties&&!mt(n.properties)||C.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(n.properties&&B(n.properties[l]))return C.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,s){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:s})}captureTraceMetric(e,s,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:s,$ai_metric_value:String(r)})}Cn(e){var s=Ge(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!s&&(!!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 s=0;e.length>s;s++)t.prototype[e[s]]=jh(t.prototype[e[s]])}(Te,["identify"]);class vl{constructor(e){this.disabled=e===!1;var s=te(e)?e:{};this.thresholdPx=s.threshold_px||30,this.timeoutMs=s.timeout_ms||1e3,this.clickCount=s.click_count||3,this.clicks=[]}isRageClick(e,s,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(s-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:s,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:s,timestamp:r}];return!1}}var fn="$copy_autocapture",gn=se("[AutoCapture]");function mn(t,e){return e.length>t?e.slice(0,t)+"...":e}function zp(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ct(e));return e}function qp(t,e){var s,r,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ct(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Ne(h,"body")&&au>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(!Ct(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,v=[],_={},w=!1,S=!1;if(Z(c,x=>{var A=Zn(x);if(Ne(x,"a")){var R=x.getAttribute("href");w=!!(A&&R&&zs(R))&&(u?It(R):R)}O(ti(x),"ph-no-capture")&&(S=!0),v.push(function(T,N,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Oo.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?mn(1024,Xa(T)):mn(1024,Zs(T)));var Ie=ti(T);Ie.length>0&&(pe.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)&&(z==null||!z.includes(ae.name))&&!N&&zs(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=No(ge).join(" ")),pe["attr__"+ae.name]=mn(1024,ae.name==="href"&&H?It(ge):ge)}});for(var _e=1,Ce=1,$e=T;$e=zp($e);)_e++,$e.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe}(x,n,o,a,u));var M=function(T){if(!Zn(T))return{};var N={};return Z(T.attributes,function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var z=J.name.replace("data-ph-capture-attribute-",""),H=J.value;z&&H&&zs(H)&&(N[z]=H)}}),N}(x);ee(_,M)}),S)return{props:{},explicitNoCapture:S};if(o||(v[0].$el_text=Ne(t,"a")||Ne(t,"button")?Xa(t):Zs(t)),w){var k,E;v[0].attr__href=w;var P=(k=si(w))==null?void 0:k.host,D=m==null||(E=m.location)==null?void 0:E.host;P&&D&&P!==D&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:v},{$elements_chain:(g=v,function(x){return x.map(A=>{var R,M,T="";if(A.tag_name&&(T+=A.tag_name),A.attr_class)for(var N of(A.attr_class.sort(),A.attr_class))T+="."+N.replace(/"/g,"");var J=b({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(M=A.nth_of_type)!==null&&M!==void 0?M:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Ar(J).sort((H,oe)=>H[0].localeCompare(oe[0])).forEach(H=>{var oe=H[1];return z[Qa(H[0].toString())]=Qa(oe.toString())}),(T+=":")+Ar(z).map(H=>H[0]+'="'+H[1]+'"').join("")}).join(";")}(function(x){return x.map(A=>{var R,M,T={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(M=A.attr__href)==null?void 0:M.slice(0,2048),attr_class:np(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Ar(A).filter(N=>N[0].indexOf("attr__")===0).forEach(N=>T.attributes[N[0]]=N[1]),T})}(g)))},(s=v[0])!=null&&s.$el_text?{$el_text:(r=v[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var $s=se("[ExceptionAutocapture]"),_l=()=>{},Vp=se("[TracingHeaders]"),Tt=se("[Web Vitals]"),yl=9e5,wl="disabled",bl="lazy_loading",Ts="awaiting_config",br="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var no="[SessionRecording]",at=se(no),Gp=se("[Heatmaps]");function vn(t){return te(t)&&"clientX"in t&&"clientY"in t&&de(t.clientX)&&de(t.clientY)}var Er=se("[Product Tours]"),_n=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Ro))},Kp=["$set_once","$set"],Ye=se("[SiteApps]"),El="Error while initializing PostHog app with config id ";function ts(t,e,s){if(B(t))return!1;switch(s){case"exact":return t===e;case"contains":var r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(r,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class Jp{constructor(e){this.ns=new jo,this.ss=(s,r)=>this.os(s,r)&&this.ls(s,r)&&this.us(s,r)&&this.hs(s,r),this.os=(s,r)=>r==null||!r.event||(s==null?void 0:s.event)===(r==null?void 0:r.event),this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,s;I((e=this._instance)==null?void 0:e._addCaptureHook)||(s=this._instance)==null||s._addCaptureHook((r,i)=>{this.on(r,i)})}register(e){var s,r;if(!I((s=this._instance)==null?void 0:s._addCaptureHook)&&(e.forEach(o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach(u=>{var c;(c=this.ds)==null||c.add((u==null?void 0:u.event)||"")})}),(r=this._instance)!=null&&r.autocapture)){var i,n=new Set;e.forEach(o=>{var a;(a=o.steps)==null||a.forEach(l=>{l!=null&&l.selector&&n.add(l==null?void 0:l.selector)})}),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,s){var r;s!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(s.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach(i=>{this.cs(s,i)&&this.ns.emit("actionCaptured",i.name)})}fs(e){this.onAction("actionCaptured",s=>e(s))}cs(e,s){if((s==null?void 0:s.steps)==null)return!1;for(var r of s.steps)if(this.ss(e,r))return!0;return!1}onAction(e,s){return this.ns.on(e,s)}ls(e,s){if(s!=null&&s.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!ts(i,s.url,s.url_matching||"contains"))return!1}return!0}us(e,s){return!!this.ps(e,s)&&!!this.gs(e,s)&&!!this.ys(e,s)}ps(e,s){var r;if(s==null||!s.href)return!0;var i=this.bs(e);if(i.length>0)return i.some(a=>ts(a.href,s.href,s.href_matching||"exact"));var n,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&ts((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var i=this.bs(e);if(i.length>0)return i.some(u=>ts(u.text,s.text,s.text_matching||"exact")||ts(u.$el_text,s.text,s.text_matching||"exact"));var n,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(n=function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!B(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d}(l),o=s.text,a=s.text_matching||"exact",n.some(u=>ts(u,o,a)))}ys(e,s){var r,i;if(s==null||!s.selector)return!0;var n=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(n!=null&&n.includes(s.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(s.selector_regex&&o)try{return new RegExp(s.selector_regex).test(o)}catch{return!1}return!1}bs(e){var s;return(e==null||(s=e.properties)==null?void 0:s.$elements)==null?[]:e==null?void 0:e.properties.$elements}hs(e,s){return s==null||!s.properties||s.properties.length===0||ju(s.properties.reduce((r,i)=>{var n=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:n,operator:i.operator||"exact"},r},{}),e==null?void 0:e.properties)}}class Yp{constructor(e){var s;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(s=this._instance)==null||s.onSessionId==null||s.onSessionId(r=>this.Ss(r))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,s){return!!e&&ju(e.propertyFilters,s==null?void 0:s.properties)}Ps(e,s){var r=new Map;return e.forEach(i=>{var n;(n=i.conditions)==null||(n=n[s])==null||(n=n.values)==null||n.forEach(o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(i.id),r.set(o.name,a)}})}),r}Rs(e,s,r){var i=(r===Cs.Activation?this.ws:this.ks).get(e),n=[];return this.As(o=>{n=o.filter(a=>i==null?void 0:i.includes(a.id))}),n.filter(o=>{var a,l=(a=o.conditions)==null||(a=a[r])==null||(a=a.values)==null?void 0:a.find(u=>u.name===e);return this.Is(l,s)})}register(e){var s;I((s=this._instance)==null?void 0:s._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var s=e.filter(r=>{var i,n;return((i=r.conditions)==null?void 0:i.actions)&&((n=r.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0});s.length!==0&&(this.Os==null&&(this.Os=new Jp(this._instance),this.Os.init(),this.Os.fs(r=>{this.onAction(r)})),s.forEach(r=>{var i,n,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(n=r.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=r.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(r.conditions.actions.values),(l=r.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach(u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(r.id),this.xs.set(u.name,c||[r.id])}}))}))}Fs(e){var s,r=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.events)&&((a=n.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0}),i=e.filter(n=>{var o,a;return((o=n.conditions)==null?void 0:o.cancelEvents)&&((a=n.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0});r.length===0&&i.length===0||((s=this._instance)==null||s._addCaptureHook((n,o)=>{this.onEvent(n,o)}),this.ws=this.Ps(e,Cs.Activation),this.ks=this.Ps(e,Cs.Cancellation))}onEvent(e,s){var r,i,n=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(i=s.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return n.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return n.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,s,Cs.Cancellation);l.length>0&&(n.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map(c=>c.id)}),this.Ns(l.map(c=>c.id)),l.forEach(c=>this.Bs(c.id)))}if(this.ws.has(e)){n.info("event name matched",{event:e,eventPayload:s,items:this.ws.get(e)});var u=this.Rs(e,s,Cs.Activation);this.Hs(u.map(c=>c.id))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var s;if(e.length!==0){var r=!((s=this._instance)==null||s.get_session_id==null||!s.get_session_id()),i=[];for(var n of e)r&&this.Cs(n)?this.qs(n)&&this.Us(n):i.push(n);i.length>0&&(this._s=[...new Set([...this._s,...i])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter(r=>r!==e);var s=this.zs();return!s.includes(e)&&(this.Ws([...s,e]),this.Vs(),!0)}Ns(e){var s=new Set(e);this._s=this._s.filter(n=>!s.has(n));var r=this.Zs(),i=r.filter(n=>!s.has(n));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(b({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},i=!1;for(var n of Object.entries(s)){var o=n[0],a=n[1];e.includes(o)?i=!0:r[o]=a}i&&(mt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var s=this.Qs()[e];return de(s)?s:void 0}}Zs(){var e,s=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s])||[]}zs(){var e,s,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return n&&i===n?r:[]}Vs(){var e,s=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();s&&this.Xs(s)}Gs(){this.ta()}Ss(e){var s,r=(s=this._instance)==null||(s=s.persistence)==null?void 0:s.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter(o=>de(n[o])).forEach(o=>this.Bs(o))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter(e=>!this.ea(e))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class Zp extends Yp{constructor(e){super(e)}Js(){return Wn}Ys(){return Cr}Ms(){return Fr}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Fr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Fr)}Cs(e){var s,r;this.As(n=>{r=n.find(o=>o.id===e)});var i=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return de(i)&&i>0}ra(){return ft.SHOWN}As(e){var s;(s=this._instance)==null||s.getSurveys(e)}Bs(e){var s;(s=this._instance)==null||s.cancelPendingSurvey(e)}Ds(){return V}Ws(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Wn]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Cr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Cr)}ea(){return!1}$s(e,s){var r;this.As(n=>{r=n.find(o=>o.id===s)});var i=!r||function(n){var o;return Uu(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"}(r);return i?e===ft.SHOWN?"consume":"ignore":e===ft.SHOWN?"persist":e===ft.DISMISSED||e===ft.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Sr="SDK is not enabled or survey functionality is not yet loaded",Sl="Disabled. Not loading surveys.",Xp=m!=null&&m.location?ri(m.location.hash,"__posthog")||ri(location.hash,"state"):null,xl="_postHogToolbarParams",kl=se("[Toolbar]"),Il=se("[FeatureFlags]");class Qp{constructor(e,s){s===void 0&&(s=!1),this.na=!1,this.update(e,s)}update(e,s){this.sa=((r,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=r.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!r.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!r.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!r.advanced_feature_flags_dedup_per_session,cacheTtlMs:r.feature_flag_cache_ttl_ms,requestTimeoutMs:r.feature_flag_request_timeout_ms,compression:r.disable_compression?"none":"base64",evaluationContexts:(a=(l=r.evaluation_contexts)!==null&&l!==void 0?l:r.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:L(r.flag_keys)?r.flag_keys:void 0}})(e,s),!e.evaluation_environments||e.evaluation_contexts||this.na||(Il.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),I(e.flag_keys)||L(e.flag_keys)||Il.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Cl=se("[FeatureFlags]"),Mt=se("[FeatureFlags]",{debugEnabled:!0}),yn=`" failed. Feature flags didn't load in time.`,Fl="connection_error",Pl=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},Al=t=>{var e={};for(var s of Ar(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Ze=se("[Error tracking]"),Rl="Refusing to render web experiment since the viewer is a likely bot",ef={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>oi(e,t),not_regex:(t,e)=>!oi(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var s=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),s.getWebExperiments(i=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,i.forEach(n=>{if(n.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=s.oa)==null||o.set(n.feature_flag_key,n));var a=s._instance.getFeatureFlag(n.feature_flag_key);W(a)&&n.variants[a]&&s.la(n.name,a,n.variants[a].transforms)}else if(n.variants)for(var l in n.variants){var u=n.variants[l];ye.ua(u,s._instance)&&s.la(n.name,l,u.transforms)}})},r)},this._instance=e,this._instance.onFeatureFlags(r=>{this.onFeatureFlags(r)})}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(Rl);else if(!this.Ne.disable_web_experiments){if(B(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach(s=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(s)){var i,n=this._instance.getFeatureFlag(s),o=(i=this.oa)==null?void 0:i.get(s);n&&o!=null&&o.variants[n]&&this.la(o.name,n,o.variants[n].transforms)}})}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=fs(e==null?void 0:e.search,"__experiment_id"),r=fs(e==null?void 0:e.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments(i=>{this.ha(parseInt(s),r,i)},!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!s)return e(i);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:n=>e(n.statusCode===200&&n.json&&n.json.experiments||[])})}ha(e,s,r){var i=r.filter(n=>n.id===e);i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+s+"]"),this.la(i[0].name,s,i[0].variants[s].transforms))}static ua(e,s){return!B(e.conditions)&&ye.da(e,s)&&ye.va(e)}static da(e,s){var r;if(B(e.conditions)||B((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=ru(s,i.href);return(n=e.conditions)==null||!n.url||ef[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return m==null?void 0:m.location}static va(e){var s;if(B(e.conditions)||B((s=e.conditions)==null?void 0:s.utm))return!0;var r=_u();if(r.utm_source){var i,n,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((n=e.conditions)==null||(n=n.utm)==null?void 0:n.utm_campaign)==r.utm_campaign,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 s=arguments.length,r=new Array(s>1?s-1:0),i=1;s>i;i++)r[i-1]=arguments[i];C.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(Rl):s!=="control"?r.forEach(i=>{if(i.selector){var n;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o==null||o.forEach(a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)})}}):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return xe&&this._instance?Lu(xe,this.Ne.custom_blocked_useragents):void 0}}var Ue=se("[Conversations]"),Nt="Conversations not available yet.",$l="console",Vu="__posthogHandledLogsRequestError",wn=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[Vu]=!0,s},Tl=t=>!!t&&typeof t=="object"&&t[Vu]===!0,Ii={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Cl,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 Qp(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var s;(s=this.Ea)==null||s.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),s=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(s):s();var e,s}Pa(t){if(this.nn===t)return m&&ie(m,"online",this.Ca),this.Ra=t.registerDynamicEventProperties(()=>this.Aa()?this.fa:this.pa),this.Fa(),this.initialize()}destroy(){m==null||m.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=[],m==null||m.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da(()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)})}q(t){this.Da(()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)})}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Ls,Ds,Ir,Qe]){var s=this.Oa(e);I(s)||(t[e]=s)}this.fa=t;var r=b({},t),i=this.Oa(Ot);if(i)for(var n of Object.entries(i))r["$feature/"+n[0]]=n[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Ws);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter(e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),s}):[]}qa(){var t=this.Ne.flagKeys;if(!I(t))return t.filter(e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),s})}initialize(){var t,e,s=this.Ne,r=(t=(e=s.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,n,o=(i=(n=s.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(r).filter(u=>!!r[u]).reduce((u,c)=>(u[c]=r[c]||!1,u),{}),l=Object.keys(o).filter(u=>a[u]).reduce((u,c)=>(o[c]&&(u[c]=o[c]),u),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,s){var r,i,n=s!=null&&s.merge&&(r=this.Oa(Ot))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(i=this.Oa(Ds))!==null&&i!==void 0?i:{},a=b({},n,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:ka(h),variant:Ia(h),reason:void 0,metadata:I(l==null?void 0:l[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Un),e=this.Oa(Qe),s=this.Oa(Lt);if(!s&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=r[n],u=e==null?void 0:e[n],c=I(u)?(o=l==null?void 0:l.enabled)!==null&&o!==void 0&&o:!!u,d=I(u)?l==null?void 0:l.variant:typeof u=="string"?u:void 0,h=s==null?void 0:s[n],p=b({},l,{enabled:c,variant:c?d??(l==null?void 0:l.variant):void 0});c!==(l==null?void 0:l.enabled)&&(p.original_enabled=l==null?void 0:l.enabled),d!==(l==null?void 0:l.variant)&&(p.original_variant=l==null?void 0:l.variant),h&&(p.metadata=b({},l==null?void 0:l.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[n]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:s,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map(s=>{var r=t[s];return{key:s,enabled:ka(r),variant:Ia(r),payload:xa(e[s])}})}getFlagVariants(){var t=this.Oa(Ot),e=this.Oa(Qe);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:s}),this.ca=!0),s}getFlagPayloads(){var t=this.Oa(Ds),e=this.Oa(Lt);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:s}),this.ca=!0),s}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach(t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}}),this.Ba=setTimeout(()=>{this.Ha()},5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter(e=>e!==t)}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(jt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var s={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:b({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Dt),timezone:xu()};I(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var i=this.qa();I(i)||(s.flag_keys=i);var n=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(n?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Pr]:[Fl]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:s,compression:this.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then(c=>{var d,h,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),!s.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?Fl:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var v=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));v&&g.push("quota_limited"),this.F({[Pr]:g}),v?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):s.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()}).catch(u)}catch(c){u(c)}}}Ma(){return mu(this.Sa,3)}Ua(t){this.Sa=vu(t,this.Sa,3,()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes."))}getFeatureFlag(t,e){var s;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(s=r==null?void 0:r.variant)!==null&&s!==void 0?s:r==null?void 0:r.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+yn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e==null?void 0:e.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s,r=this.getFlagVariants(),i=t in r,n=r[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(Ir)||void 0,u=this.Oa(Ws)||void 0,c=this.Oa(jt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(js);h&&h!==p&&(c={},s=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))s&&this.F({[jt]:c,[js]:s});else{var f,g,v,_,w,S,k,E,P,D;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[jt]:c},s?{[js]:s}:{}));var x=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Pr))!==null&&f!==void 0?f:[]];I(n)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:n,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((v=this.Ne.bootstrap)==null||(v=v.featureFlagPayloads)==null?void 0:v[t])||null,$used_bootstrap_value:!this.ka};I(x==null||(_=x.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=x.metadata.has_experiment),I(x==null||(w=x.metadata)==null?void 0:w.version)||(R.$feature_flag_version=x.metadata.version);var M,T=(S=x==null||(k=x.reason)==null?void 0:k.description)!==null&&S!==void 0?S:x==null||(E=x.reason)==null?void 0:E.code;T&&(R.$feature_flag_reason=T),x!=null&&(P=x.metadata)!=null&&P.id&&(R.$feature_flag_id=x.metadata.id),I(x==null?void 0:x.original_variant)&&I(x==null?void 0:x.original_enabled)||(R.$feature_flag_original_response=I(x.original_variant)?x.original_enabled:x.original_variant),x!=null&&(D=x.metadata)!=null&&D.original_payload&&(R.$feature_flag_original_payload=x==null||(M=x.metadata)==null?void 0:M.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else s&&this.F({[jt]:c,[js]:s});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:xa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+yn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch(s=>{this.rt.error("Failed to capture feature flag call",s)})}catch(s){this.rt.error("Failed to capture feature flag call",s)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},n=s.Na();n.length&&(i.evaluation_contexts=n);var o,a=s.qa();I(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:s.Ne.compression==="base64"?Se.Base64:void 0,sentAt:"body",timeoutMs:s.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=(u==null?void 0:u[t])||void 0}catch(c){return void s.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){s.rt.error("Remote config feature flag callback failed",c)}}})()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+yn),e.defaultValue;var s=this.getFeatureFlag(t,e);return I(s)?e.defaultValue:!!s}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter(e=>e!==t)}receivedFeatureFlags(t,e,s){this.ja(t,e,s)}ja(t,e,s){if(this.nn){this.ma=!0;var r=function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Cl);var c=((P,D)=>{var x=P.flags;return x?b({},P,{featureFlags:Object.fromEntries(Object.keys(x).map(A=>{var R;return[A,(R=x[A].variant)!==null&&R!==void 0?R:x[A].enabled]})),featureFlagPayloads:Object.fromEntries(Object.keys(x).filter(A=>x[A].enabled).filter(A=>{var R;return(R=x[A].metadata)==null?void 0:R.payload}).map(A=>{var R;return[A,(R=x[A].metadata)==null?void 0:R.payload]}))}):(P.featureFlags&&D.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),P)})(i,u),d=c.flags,h=c.featureFlags,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 v={};if(h)for(var _=0;h.length>_;_++)v[h[_]]=!0;return{[Ls]:h,[Ot]:v,[Kr]:!1}}var w=h,S=p,k=d;if(l!=null&&l.partialResponse)w=b({},n,w),S=b({},o,S),k=b({},a,k);else if(i.errorsWhileComputingFlags)if(d){var E=new Set(Object.keys(d).filter(P=>{var D;return!((D=d[P])!=null&&D.failed)}));w=b({},n,Object.fromEntries(Object.entries(w).filter(P=>E.has(P[0])))),S=b({},o,Object.fromEntries(Object.entries(S||{}).filter(P=>E.has(P[0])))),k=b({},a,Object.fromEntries(Object.entries(k||{}).filter(P=>E.has(P[0]))))}else w=b({},n,w),S=b({},o,S),k=b({},a,k);return b({[Ls]:Object.keys(Al(w)),[Ot]:w||{},[Ds]:S||{},[Un]:k||{},[Kr]:i.minimalFlagCalledEvents===!0},f?{[Ir]:f}:{},g?{[Ws]:g}:{})}}(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),s,this.rt);r&&this.F(r),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([Qe,Lt]),this.Va(),void Mt.info("All overrides cleared");if(L(t))return this.F({[Qe]:Pl(t)}),this.Va(),void Mt.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,s=t;this.ca=!!((e=s.suppressWarning)!==null&&e!==void 0&&e);var r={},i=s.flags,n=s.payloads;return i&&(r[Qe]=L(i)?Pl(i):i),n&&(r[Lt]=n),Object.keys(r).length&&this.F(r),i===!1&&n===!1?this.q([Qe,Lt]):i===!1?this.q(Qe):n===!1&&this.q(Lt),this.Va(),i===!1?Mt.info("Flag overrides cleared"):i&&Mt.info("Flag overrides set",{flags:i}),void(n===!1?Mt.info("Payload overrides cleared"):n&&Mt.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[Qe]:t}),this.Va(),void Mt.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),s=e.flags,r=e.flagVariants;try{t(s,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(kr)||[]).find(l=>l.flagKey===t),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(n.$early_access_feature_name=r.name),s&&(n.$feature_enrollment_stage=s);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Ls]:Object.keys(Al(o)),[Ot]:o,[ct]:b({},this.Oa(ct)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",n).catch(l=>{this.rt.error("Failed to capture early access feature enrollment",l)})}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,s){e===void 0&&(e=!1);var r=this.Oa(kr);!r||e?this.Qa(t,s):t(r)}Qa(t,e){var s=this;return X(function*(){var r=s.nn;if(r){var i,n=e?"&"+e.map(a=>"stage="+a).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[kr]:i=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){s.rt.error("Early access feature callback failed",a)}}})()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter(s=>e[s]),flagVariants:Object.keys(e).filter(s=>e[s]).reduce((s,r)=>(s[r]=e[r],s),{})}}Va(t){this.Fa();var e=this.Ga(),s=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach(i=>{try{i(s,r,{errorsLoading:t})}catch(n){this.rt.error("Error while running feature flags callback",n)}})}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var s=this.Oa(ct)||{},r=(t==null?void 0:t.$set)||(t!=null&&t.$set_once?{}:t),i=t==null?void 0:t.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in s||(n[o]=i[o]));this.F({[ct]:b({},s,n,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=b({},this.Oa(ct)||{});t.forEach(r=>{delete s[r]}),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Dt)||{},r=b({},s);for(var i of Object.keys(t))r[i]=b({},s[i],t[i]);this.F({[Dt]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Dt)||{};this.F({[Dt]:b({},e,{[t]:{}})})}else this.q(Dt)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},tf={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Ts||this.Ya===br?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=wl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(F==null||!F.visibilityState||F.visibilityState==="visible")return!0;var s=m==null||(e=m.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(s!=null&&s.length)||s.some(r=>r.name==="visible")})(),this.Ie=()=>{var e;(F==null?void 0:F.visibilityState)==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw at.error("started without valid sessionManager"),new Error(no+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(no+' cannot be used with cookieless_mode="always"');F!=null&&F.addEventListener&&ie(F,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,F==null||F.removeEventListener==null||F.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Ht))==null||!t.enabled),s=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return m&&e&&s&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var s=!I(Object.assign)&&!I(Array.from);this.ro&&s?(this.no(t),at.info("starting")):(this.Ya=wl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Ts&&this.Ya!==br&&(this.Ya=bl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(s=$.__PosthogExtensions__)!=null&&s.initSessionRecording?this.so(t):(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,i=>{if(i)return at.error("could not load recorder",i);this.so(t)}))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister($o),(e=this.Mr)==null||e.unregister(Vc)}uo(t,e){if(B(t))return null;var s,r=de(t)?t:parseFloat(t);return typeof(s=r)!="number"||!Number.isFinite(s)||0>s||s>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,s,r=this.Mr,i=()=>{var n,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((n=this.Ne.session_recording)==null?void 0:n.sampleRate,"session_recording.sampleRate"),l=this.uo(o==null?void 0:o.sampleRate,"remote config sampleRate"),u=a??l;B(u)&&this.lo();var c=o==null?void 0:o.minimumDurationMilliseconds;r.register({[Ht]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({capturePerformance:t.capturePerformance},o==null?void 0:o.networkPayloadCapture),canvasRecording:{enabled:o==null?void 0:o.recordCanvas,fps:o==null?void 0:o.canvasFps,quality:o==null?void 0:o.canvasQuality},sampleRate:u,minimumDurationMilliseconds:I(c)?null:c,endpoint:o==null?void 0:o.endpoint,triggerMatchType:o==null?void 0:o.triggerMatchType,masking:o==null?void 0:o.masking,urlTriggers:o==null?void 0:o.urlTriggers,version:o==null?void 0:o.version,triggerGroups:o==null?void 0:o.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(i)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Ts&&(this.Ya=br,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var s;e===void 0&&(e="log"),(s=this.Ja)!=null&&s.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,s=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Ht);return(s==null||(e=s.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Ht);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(s){return at.warn("persisted remote config for session recording is invalid and will be ignored",s),!1}return!B(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,s,r;if(!this.eo){if((e=$.__PosthogExtensions__)==null||!e.initSessionRecording)return at.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[eu]:!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===br||this.Ya===Ts?void 0:(this.Ya=Ts,at.info("persisted remote config is stale, requesting fresh config before starting"),void new ku(this._instance).load());this.Ya=bl,(s=(r=this.Ja).setDocumentWasEverVisible)==null||s.call(r,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[Kc]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[Gc]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?Jc:Yc]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var s;return!((s=this.Ja)==null||!s.tryAddCustomEvent(t,e))}}},sf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new vl(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,s=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return s.url_allowlist=(t=s.url_allowlist)==null?void 0:t.map(r=>new RegExp(r)),s.url_ignorelist=(e=s.url_ignorelist)==null?void 0:e.map(r=>new RegExp(r)),s}yo(){if(this.isBrowserSupported()){if(m&&F){var t=s=>{s=s||(m==null?void 0:m.event);try{this.bo(s)}catch(r){gn.error("Failed to capture event",r)}};if(ie(F,"submit",t,{capture:!0}),ie(F,"change",t,{capture:!0}),ie(F,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||(m==null?void 0:m.event);try{this.bo(s,fn)}catch(r){gn.error("Failed to capture copy/cut event",r)}};ie(F,"copy",e,{capture:!0}),ie(F,"cut",e,{capture:!0})}}}else gn.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var s=e.autocapture_opt_out;Ge(s)&&(this.instance.persistence&&this.instance.persistence.register({[Mn]:s}),this.co=s),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,s=[];return(e=this.mo)==null||e.forEach(r=>{var i=F==null?void 0:F.querySelectorAll(r);i==null||i.forEach(n=>{t===n&&s.push(r)})}),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Mn],r=this.co,i=this.instance.Qi()&&!this.fo;if(Re(r)&&!Ge(s)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=tn(t);nu(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&Ga(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===fn;if(r&&function(d,h,p,f,g,v){var _;if(!m||Lo(d)||p!=null&&p.url_allowlist&&!za(p.url_allowlist,v)||p!=null&&p.url_ignorelist&&za(p.url_ignorelist,v))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some(x=>h.type===x))return!1}var S=du(d,f),k=S.parentIsUsefulElement,E=S.targetElementList;if(!function(x,A){var R=A==null?void 0:A.element_allowlist;if(I(R))return!0;var M,T=function(J){if(R.some(z=>J.tagName.toLowerCase()===z))return{v:!0}};for(var N of x)if(M=T(N))return M.v;return!1}(E,p)||!Yn(E,p==null?void 0:p.css_selector_allowlist)||Yn(E,(_=p==null?void 0:p.css_selector_ignorelist)!==null&&_!==void 0?_:Qh))return!1;try{var P=m.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var D=d.tagName.toLowerCase();switch(D){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return k?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(Oo.indexOf(D)>-1||d.getAttribute("contenteditable")==="true")}}(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=qp(r,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=n.props;if(n.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===fn){var l,u=lu(m==null||(l=m.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Ee(F==null?void 0:F.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(m==null||(e=m.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(C.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,C.info("History API monitoring stopped")}monitorHistoryChanges(){m&&m.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(m&&((e=m.history[t])==null||!e.__posthog_wrapped__)){var s=this;(function(r,i,n){try{if(!(i in r))return _l;var o={next:r[i]},a=n(function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)});return Ee(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),r[i]=a,()=>{if(r[i]!==a)for(var l=r[i];Ee(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else r[i]=o.next}}catch{return _l}})(m.history,t,r=>function(i,n,o){r.call(this,i,n,o),s.So(t)})}}So(t){try{var e,s=m==null||(e=m.location)==null?void 0:e.pathname;if(!s)return;s!==this._o&&this.isEnabled&&this._instance.capture(ss,{navigation_type:t}),this._o=s}catch(r){C.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(m,"popstate",t),this.wo=()=>{m&&m.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[Nn]),this.rageclicks=new vl(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;Gp.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var s=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Nn]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){vn(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=(F==null?void 0:F.visibilityState)==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){m&&F&&(this.Po=this.cr.bind(this),ie(m,Qr,this.Po),this.Ro=t=>this.ke(t||(m==null?void 0:m.event)),ie(F,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||(m==null?void 0:m.event)),ie(F,"mousemove",this.Ao,{capture:!0}),this.Lo=new el(this.instance,op,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(F,Xr,this.Oo),this.vo=!0)}Eo(){var t;m&&F&&(this.Po&&m.removeEventListener(Qr,this.Po),this.Ro&&F.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&F.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&F.removeEventListener(Xr,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var s=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=function(o,a,l){for(var u=o;u&&Ct(u)&&!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:m)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(O(a,c))return!0;u=cu(u)}return!1}(tn(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:r),y:t.clientY+(n?0:s),target_fixed:n,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!Wa(t.target)&&vn(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&Ga(tn(t),this.instance.config.rageclick)&&this.Vt(b({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!Wa(t.target)&&vn(t)&&(clearTimeout(this.Do),this.Do=setTimeout(()=>{this.Vt(this.$o(t,"mousemove"))},500))}Vt(t){if(m){var e=this.Ne.disable_capture_url_hashes?It(m.location.href):m.location.href,s=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[...gs,...s||[]]:[],i=Xs(e,r,Qs);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!mt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:el,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",b({$current_url:this.R.url},this.R.metrics.reduce((s,r)=>b({},s,{["$web_vitals_"+r.name+"_event"]:b({},r),["$web_vitals_"+r.name+"_value"]:r.value}),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},B(s==null?void 0:s.name)||B(s==null?void 0:s.value))Tt.error("Invalid metric received",s);else{var i=typeof s.navigationURL=="string"?s.navigationURL:void 0,n=this.Bo(i);if(!I(n)){var o=de(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+n;if(!this.Ho||this.Ho>s.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),I(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=I(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,s.attribution&&s.attribution.interactionTargetElement&&(s.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=b({},s,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});I(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Tt.error("Ignoring metric with value >= "+this.Ho,s)}}},this.Uo=()=>{if(!this.vo){var s,r,i,n,o=$.__PosthogExtensions__,a=o==null?void 0:o.postHogWebVitalsCallbacksByFlavor,l=(a==null?void 0:a[this.zo])||(this.zo==="web-vitals"&&I(a)?o==null?void 0:o.postHogWebVitalsCallbacks:void 0);if(I(l)||(s=l.onLCP,r=l.onCLS,i=l.onFCP,n=l.onINP),s&&r&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&n(this.jo.bind(this),u),this.vo=!0}else Tt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Bn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,s=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return B(s)?((e=this._instance.persistence)==null?void 0:e.props[jn])||["CLS","FCP","INP","LCP"]:s}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&de(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:yl;return t>0&&6e4>=t?yl:t}get isEnabled(){var t=re==null?void 0:re.protocol;if(t!=="http:"&&t!=="https:")return Tt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ge(this.Wo)?this.Wo:void 0;return Ge(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Tt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var s=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,r=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Bn]:s}),this._instance.persistence.register({[jn]:r})),this.Co=s,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,s=this.zo,r=e==null?void 0:e.postHogWebVitalsCallbacksByFlavor;r!=null&&r[s]||s==="web-vitals"&&I(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,s,i=>{i?Tt.error("failed to load script",i):t()})}Bo(t){var e=t||(m==null?void 0:m.location.href);if(e){var s=this._instance.config.disable_capture_url_hashes?It(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...gs,...r||[]]:[];return Xs(s,i,Qs)}Tt.error("Could not determine current URL")}}},rf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(m&&this.isEnabled&&(s=$.__PosthogExtensions__)!=null&&s.errorWrappingFunctions){var r=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=r(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=i(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=n(this.captureException.bind(this)))}catch(o){$s.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[On]),this.Jo=new th(b({},function(s){var r,i,n,o;return s===void 0&&(s={}),{refillRate:(r=(i=s.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(n=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}}(this._instance.config.error_tracking),{refillInterval:1e4,rt:$s})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=b({},e,t):(I(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?($s.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",r=>{if(r)return $s.error("failed to load script",r);t()})}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[On]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,i=(e=t==null||(s=t.$exception_list)==null||(s=s[0])==null?void 0:s.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?$s.info("Skipping exception capture because of client rate limiting.",{exception:i}):(r=this._instance.exceptions)==null||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,s;this.Xo=[],this.tl=new _h([new Ih,new Nh,new Fh,new Ch,new Th,new $h,new Ah,new Mh],function(r){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;i>o;o++)n[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` +`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=Ba.test(h)?h.replace(Ba,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of n){var g=f(p,r);if(g){u.push(g);break}}if(u.length>=50)break}}}return function(v){if(!v.length)return[];var _=Array.from(v);return _.reverse(),_.slice(0,50).map(w=>{return b({},w,{filename:w.filename||(S=_,S[S.length-1]||{}).filename,function:w.function||ps});var S})}(u)}}("web:javascript",Eh,kh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(Ln))!==null&&e!==void 0?e:[],this.el=Gr(this.il()),this.rl=new Lh(this.el)}onConfigChange(){this.el=Gr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,s,r;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(s=i.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[Ln]:this.Xo,[Dn]:o})}}}get nl(){var t,e=!!this._instance.get_property(Dn),s=this._instance.config.error_tracking.captureExtensionExceptions;return(t=s??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e==null?void 0:e.syntheticException,mechanism:{handled:e==null?void 0:e.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Ze.warn("Ignoring exception step because message must be a non-empty string");var s=function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce((a,l)=>Oh.has(l)?(o.push(l),a):(a[l]=n[l],a),{}),droppedKeys:o}}(this.sl(e)),r=s.sanitizedProperties,i=s.droppedKeys;i.length>0&&Ze.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(b({[qr]:t,[Vr]:new Date().toISOString()},r))}catch(n){Ze.error("Failed to add exception step. Ignoring breadcrumb.",n)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Ze.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 Ze.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 Ze.info("Skipping exception capture because it was thrown by the PostHog SDK")}var s=this.el.enabled&&B(t.$exception_steps)?this.dl(t):t,r=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;r&&(s.$release_id=r);try{var i=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return Ze.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Ze.error("Failed to process exception event. Ignoring this exception.",o)}var n}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(s){return Ze.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[qr]:t,[Vr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce((s,r)=>{var i=r.type,n=r.value;return W(i)&&i.length>0&&s.$exception_types.push(i),W(n)&&n.length>0&&s.$exception_values.push(n),s},{$exception_types:[],$exception_values:[]});return this.Xo.some(s=>{var r=s.values.map(i=>{var n=Bu[i.operator],o=e[i.key];if(!n||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&n(a,o)});return s.type==="OR"?r.some(Boolean):r.every(Boolean)})}catch(s){return Ze.warn("Failed to evaluate suppression rules. Capturing the exception.",s),!1}}ul(t){return t.flatMap(e=>{var s,r;return(s=(r=e.stacktrace)==null?void 0:r.frames)!==null&&s!==void 0?s:[]}).some(e=>e.filename&&e.filename.startsWith("chrome-extension://"))}hl(t){if(t.length>0){var e,s,r,i,n=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(r=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!B(t)&&L(t)}}},nf=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var s,r;if(this.Mr&&this.Mr.register({[Ro]:!!e.productTours}),!_n(this._instance))return!this.vl&&B((s=this.Mr)==null?void 0:s.props[Bs])||Er.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&&_n(this._instance)&&this.ai(()=>this.fl())}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"product-tours",r=>{r?Er.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 s=this.Mr;if(s){var r=s.props[Bs];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(_n(this._instance)){var n=i.statusCode;if(n!==200||!i.json){var o="Product Tours API could not be loaded, status: "+n;return n===0?i.error||Er.warn(o):Er.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,s&&s.register({[Bs]: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(Bs)}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)}}},Ii),of={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var s=this.globalsForEvent(e);this.gl.push(s),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,s,r,i,n,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},uc(t,Kp),{properties:b({},t.properties,f?{$set:b({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(n=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&n!==void 0?n:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,s=(e=t.tagName)==null?void 0:e.toLowerCase();return s==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ye.error("prepare_external_dependency_stylesheet returned null"),null):s==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ye.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,s,r,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=F==null?void 0:F.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(v,_,w)=>{if(v!=null&&v[_]){var S=v[_];v[_]=w(S),c.push(()=>{v[_]=S})}},f=v=>{if(h.has(v))return v;var _=d.bl(v);return _&&h.add(_),_},g=v=>v.map(_=>typeof _=="string"?_:f(_)).filter(_=>!Re(_));return p(u,"appendChild",v=>function(_){var w=f(_);return w?v.call(this,w):_}),p(u,"insertBefore",v=>function(_,w){var S=f(_);return S?v.call(this,S,w):_}),p(u,"replaceChild",v=>function(_,w){var S=f(_);return S?v.call(this,S,w):w}),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach(v=>{p(v,"append",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"prepend",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))})}),[(i=l.Element)==null?void 0:i.prototype,(n=l.CharacterData)==null?void 0:n.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach(v=>{p(v,"before",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"after",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];return _.apply(this,g(S))}),p(v,"replaceWith",_=>function(){for(var w=arguments.length,S=new Array(w),k=0;w>k;k++)S[k]=arguments[k];var E=g(S);return S.length&&!E.length?void 0:_.apply(this,E)})}),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",v=>function(_,w){var S=f(w);return S?v.call(this,_,S):null}),this.wl=()=>{c.forEach(v=>v()),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var s=this._l();try{var r=t(s);return e&&s(),r}catch(i){throw s(),i}}setupSiteApp(t){var e=this.apps[t.id],s=()=>{var o;!e.errored&&this.gl.length&&(Ye.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,Ye.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var n=this.xl(o=>t.init({posthog:this._instance,callback(a){o(),i(a)}}),!1).processEvent;n&&(e.processEvent=n),r=!0}catch(o){Ye.error(El+t.id,o),i(!1)}if(r&&e.loaded)try{s()}catch(o){Ye.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var s of t)this.setupSiteApp(s)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var s=this.globalsForEvent(t),r=function(n){try{e.xl(()=>n.processEvent==null?void 0:n.processEvent(s))}catch(o){Ye.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,s,r,i=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",l=>this.Cl(l))):void Ye.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((s=this.yl)==null||s.call(this),t.ok){var n=t.config;if((r=n.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,d=>{if(d)return Ye.error(El+u,d)})};for(var a of n.siteApps)o()}else Ye.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},af={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,s,r=this.Il();r?(I(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager)),I(this.Tl)&&(this.Tl=(s=$.__PosthogExtensions__)==null||(s=s.tracingHeadersPatchFns)==null?void 0:s._patchFetch(r,()=>this._instance.get_distinct_id(),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"tracing-headers",r=>{if(r)return Vp.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()}}},lf=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return V.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(B(e))return V.warn("Flags not loaded yet. Not loading surveys.");var s=L(e);this.Rl=s?e.length>0:e,V.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],s=0;slocalStorage.removeItem(i))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)V.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)V.info(Sl);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())V.info("Not loading surveys in cookieless mode without consent.");else{var t=$==null?void 0:$.__PosthogExtensions__;if(t){if(!I(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var s=t.generateSurveys;if(s)return void this.Dl(s,e);var r=t.loadExternalDependency;if(!r)return void this.$l(To);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 Zp(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(Sl),t([]);var s,r=this._instance.get_property(Hn);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys(()=>{},!0));typeof Promise<"u"&&this.Ll?this.Ll.then(i=>t(i.surveys,i.context)):(typeof Promise<"u"&&(this.Ll=new Promise(i=>{s=i})),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:i=>{var n;this.Ll=null;var o=i.statusCode;if(o!==200||!i.json){var a="Surveys API could not be loaded, status: "+o;o!==0?V.error(a):i.error||V.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(s==null||s({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter(p=>function(f){return!(!f.start_date||f.end_date)}(p)&&(Uu(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)),(n=this._instance.persistence)==null||n.register({[Hn]:c,[Jr]:Date.now()});var h={isLoaded:!0};t(c,h),s==null||s({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(Jr);return de(t)&&Date.now()-t>3e5}Bl(){return de(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var s,r={id:t,current_iteration:(s=e==null?void 0:e.iteration)!==null&&s!==void 0?s:null};Wu(r);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(s){V.error("Error in survey callback",s)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!B(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);V.warn("init was not called")}Hl(t){var e=null;return this.getSurveys(s=>{var r;e=(r=s.find(i=>i.id===t))!==null&&r!==void 0?r:null}),e}Ul(t){if(B(this._surveyManager))return{eligible:!1,reason:Sr};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:Sr};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:Sr};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:Sr})):new Promise(s=>{this.getSurveys(r=>{var i,n=(i=r.find(a=>a.id===t))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);s({visible:o.eligible,disabledReason:o.reason})}else s({visible:!1,disabledReason:"Survey not found"})},e)})}renderSurvey(t,e,s){var r;if(B(this._surveyManager))V.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(Tp.includes(i.type)){var n=F==null?void 0:F.querySelector(e);if(n)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(V.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout(()=>{var o,a;V.info("Rendering survey "+i.id+" with delay of "+((o=i.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(i,n,s),V.info("Survey "+i.id+" rendered")},1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,s);V.warn("Survey element not found")}else V.warn("Surveys of type "+i.type+" cannot be rendered in the app");else V.warn("Survey not found")}}displaySurvey(t,e){var s;if(B(this._surveyManager))V.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=b({},r,{appearance:b({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==Xn.Popover&&e.initialResponses&&V.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(r);if(!n.eligible)return void V.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==Xn.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()}}},Ii),cf={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,s){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),Jn(this.instance.config)||!m||!F)return!1;t=t??m.location,s=s??m.history;try{if(!e){try{m.localStorage.setItem("test","test"),m.localStorage.removeItem("test")}catch{return!1}e=m==null?void 0:m.localStorage}var r,i=Xp||ri(t.hash,"__posthog")||ri(t.hash,"state"),n=i?Ua(()=>JSON.parse(atob(decodeURIComponent(i))))||Ua(()=>JSON.parse(decodeURIComponent(i))):null;return n&&n.action==="ph_authorize"?((r=n).source="url",r&&Object.keys(r).length>0&&(n.desiredHash?t.hash=n.desiredHash:s?s.replaceState(s.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(xl)||"{}")).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)&&Ee(e)?e(t,this.instance):kl.warn("No toolbar load function found")}loadToolbar(t){var e=!(F==null||!F.getElementById(iu));if(!m||e)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(m.localStorage.setItem(xl,JSON.stringify(b({},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",n=>{if(n)return kl.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(r)}),ie(m,"turbolinks:load",()=>{this.Wl(0),this.loadToolbar(r)})}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,s){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),this.maybeLoadToolbar(t,e,s)}}},uf=b({experiments:ye},Ii),df={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)||(Ge(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||Jn(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$==null?void 0:$.__PosthogExtensions__;if(t&&!I(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var s=t.loadExternalDependency;if(!s)return void this.eu(To);s(this._instance,"conversations",r=>{r||!t.initConversations?this.eu("Could not load conversations script",r):this.tu(t.initConversations),this.Kl=!1})}catch(r){this.eu("Error initializing conversations",r),this.Kl=!1}}else 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&&!Re(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":Jn(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":I(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?B(this.Jl)||!this.Jl.token?"missing_token":$!=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,s){var r=this;return X(function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,s):(Ue.warn(Nt),null)})()}getMessages(t,e){var s=this;return X(function*(){return s._conversationsManager?s._conversationsManager.getMessages(t,e):(Ue.warn(Nt),null)})()}markAsRead(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Nt),null)})()}getTickets(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Nt),null)})()}requestRestoreLink(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Nt),null)})()}restoreFromToken(t){var e=this;return X(function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Nt),null)})()}restoreFromUrlToken(){var t=this;return X(function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Nt),null)})()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},hf={logs:class{constructor(t){var e,s=this;this.iu=!1,this.ru=!1,this.rt=se("[logs]"),this.nu=b({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),n=0;r>n;n++)i[n]=arguments[n];i.some(Tl)||s.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,i;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),m&&ie(m,"online",this.au)}uu(t,e,s,r){var i,n=function(o,a){var l,u,c,d,h,p,f,g=(l=o==null?void 0:o.flushIntervalMs)!==null&&l!==void 0?l:3e3,v=(u=o==null?void 0:o.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o==null?void 0:o.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=I(_)?Math.max(v,2048):Math.max(v,_),S=o==null?void 0:o.resourceAttributes;return{serviceName:(d=(h=S==null?void 0:S["service.name"])!==null&&h!==void 0?h:o==null?void 0:o.serviceName)!==null&&d!==void 0?d:a==null?void 0:a.serviceNameDefault,serviceVersion:(p=S==null?void 0:S["service.version"])!==null&&p!==void 0?p:o==null?void 0:o.serviceVersion,environment:(f=S==null?void 0:S["deployment.environment"])!==null&&f!==void 0?f:o==null?void 0:o.environment,resourceAttributes:S,beforeSend:o==null?void 0:o.beforeSend,flushIntervalMs:g,maxBufferSize:v,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}}((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,s);return[new gh(this.hu(t,e),n,this.nu,()=>this.du(),o=>o(),void 0,r),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var s;(s=this.ou)==null||s.reset(),this.cu=e;var r=this.uu(()=>this.tr,i=>{this.tr=i});this.ou=r[0],this.fu=r[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var s;(s=this.lu)==null||s.reset(),this.gu=e;var r=this.uu(()=>this.su,i=>{this.su=i},{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},$l);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var s=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!B(s)&&s&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch(e=>this._u(e)),this.lu&&this.lu.flush().catch(e=>this._u(e)))}_u(t){Tl(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$==null?void 0:$.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",s=>{var r;s||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",s):(t.logs.initializeLogs(this._instance),this.ru=!0)}):this.rt.error(To)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var s=this._instance;return{get isDisabled(){return!1},get optedOut(){return!s.is_capturing()},getPersistedProperty:r=>r===ut.LogsQueue?t():void 0,setPersistedProperty(r,i){var n;r===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise(e=>{if(mu(this.Sa,3))e({kind:"fatal",error:wn(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=n=>{s||(s=!0,clearTimeout(i),e(n))},i=setTimeout(()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:wn(void 0,"logs request timed out")})},9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:n=>{var o=n.statusCode;if(this.ku(o),o>=200&&300>o)r({kind:"ok"});else if(o===413)r({kind:"too-large"});else if(o!==0&&o!==429&&500>o)r({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(n.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:wn(n.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=n.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}})}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=vu(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,$l,e=>{this.su=e})}xu(t,e,s,r,i){if(e.length!==0){var n=e.map(a=>a.record);i([]);var o=Uc(n,jc(s,Y.LIB_NAME,Y.LIB_VERSION),r,Y.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var s=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.windowId,i=s.sessionStartTimestamp,n=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,B(i)||(e.sessionStartTimestamp=i),B(n)||(e.lastActivityTimestamp=n)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?It($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},pf={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new mh(this.hu(),function(r){var i,n,o,a,l,u=r==null?void 0:r.resourceAttributes;return{serviceName:(i=u==null?void 0:u["service.name"])!==null&&i!==void 0?i:r==null?void 0:r.serviceName,serviceVersion:(n=u==null?void 0:u["service.version"])!==null&&n!==void 0?n:r==null?void 0:r.serviceVersion,environment:(o=u==null?void 0:u["deployment.environment"])!==null&&o!==void 0?o:r==null?void 0:r.environment,resourceAttributes:u,beforeSend:r==null?void 0:r.beforeSend,flushIntervalMs:(a=r==null?void 0:r.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r==null?void 0:r.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}}(s),this.rt)),this.ou}count(t,e,s){e===void 0&&(e=1),this.vu().count(t,e,s)}gauge(t,e,s){this.vu().gauge(t,e,s)}histogram(t,e,s){this.vu().histogram(t,e,s)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch(s=>this.rt.error("PostHog metrics flush failed:",s))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:s=>e.Jt(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise(s=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(n),s(o))},n=setTimeout(()=>i({kind:"retry-later",error:new Error("metrics request timed out")}),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))})}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},ff=b({},Ii,tf,sf,rf,nf,of,lf,af,cf,uf,df,hf,pf);Te.__defaultExtensionClasses=b({},ff);var Gu=function(){Y.SDK_DIST_CHANNEL="npm";var t=Vs[rs]=new Te;return function(){function e(){e.done||(e.done=!0,qu=!1,Z(Vs,function(s){s._dom_loaded()}))}F!=null&&F.addEventListener?F.readyState==="complete"?e():ie(F,"DOMContentLoaded",e,{capture:!1}):m&&C.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")}(),t}();const Ku="CodeFile",Ju="GeneratedCode",gf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function oo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function mf(t={},e=0){const s=oo(t.artifactType||t.type||Ku),r=oo(t.artifactName||t.name||t.fileName||`${Ju}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function Yu(t={},e=0){const s=kt(t),r=s.artifactType||s.type||Ku,i=s.artifactName||s.name||Ju,n=s.fileName||`${i}.dart`;return{id:oo(s.id)||mf({...s,artifactType:r,artifactName:i,fileName:n},e),artifactType:r,artifactName:i,fileName:n,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:Zu(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:Xu(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||gf[r]||"O"}}function Zu(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const s=kt(e),r=s.name||s.package;return r?{name:r,version:s.version||null,versionRequired:!!(s.versionRequired||s.required),inferred:!!s.inferred,...s.reason?{reason:s.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,s])=>({name:e,version:s||null,inferred:!1})):[]}function Xu(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const s=kt(e);return!s.from&&!s.to?null:{from:s.from||null,to:s.to||null,type:s.type||"uses",description:s.description||""}}).filter(Boolean):[]}function ao(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const s=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!s)return null;try{return JSON.parse(s[1].trim())}catch{return null}}}function er(t,e={}){const s=[],r=typeof t=="string"?ao(t):t,n=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(n.artifacts)?n.artifacts:[{artifactType:n.artifactType||e.artifactType,artifactName:n.artifactName||e.artifactName,fileName:n.fileName||e.fileName,description:n.description,code:n.code||e.code||(typeof t=="string"?t:""),dependencies:n.dependencies||e.dependencies,relationships:n.relationships||e.relationships}];o.forEach((d,h)=>{!(d!=null&&d.artifactType)&&!(d!=null&&d.type)&&s.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)=>Yu(d,h)),l=new Map(o.map((d,h)=>{var p;return[kt(d).id,(p=a[h])==null?void 0:p.id]}).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=Xu(n.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:n.schemaVersion||e.schemaVersion||null,id:n.id||e.id||"bundle-current",title:n.title||n.name||e.title||"Generated artifact bundle",description:n.description||e.description||"",artifacts:a,dependencies:Zu(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(n.warnings)?n.warnings:[]],metadata:kt(n.metadata)}}function li(t){return er(t).artifacts[0]||Yu()}function yt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function vs(t){return JSON.stringify(t,null,2)}function vf(t){return vs({task:"architect",userRequest:String(t??"")})}function _f(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?vs(e):vs({task:"generate_bundle",bundleSpec:e})}function yf(t){return vs({task:"review_bundle",generatedBundle:yt(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 Uo(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function wf({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:i}){return vs({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(i)})}function Qu({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return vs({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(r??"")})}const Ml={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"},bf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Oe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ef(t){return Oe(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Oe(t.filterSummary)||Oe(t.filterResults):!1}function ed(t,e=0){if(!Oe(t)||e>3)return null;if(Ef(t))return t;for(const s of bf){const r=t[s];if(Oe(r)){const i=ed(r,e+1);if(i)return i}}return null}function ci(t){return Array.isArray(t)?t.some(ci):Oe(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(ci):!1}function lo(t){return Array.isArray(t)?t.some(lo):Oe(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(lo):!1}function td(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function Sf(t,e){if(Oe(t))for(const[s,r]of Object.entries(t)){if(!Oe(r))continue;const i=Oe(r.categories)?r.categories:{},n=Object.entries(i).filter(([,o])=>Oe(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):r.matched===!0&&e.add(td(s))}}function xf(t,e){var r;if(!t)return;const s=Array.isArray(t)?t.flatMap(i=>Oe(i)?Object.entries(i):[]):Object.entries(t);for(const[i,n]of s){if(!ci(n))continue;const o=td(i),a=((r=n==null?void 0:n.raiFilterResult)==null?void 0:r.raiFilterTypeResults)||(o==="rai"?n==null?void 0:n.raiFilterTypeResults:null),l=Oe(a)?Object.entries(a).filter(([,u])=>ci(u)).map(([u])=>u):[];l.length>0?l.forEach(u=>e.add(u)):e.add(o)}}function kf(t){return Ml[t]?Ml[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Nl(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 If(t){const e=ed(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Sf(e.filterSummary,s),xf(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,i=e.invocationResult||null,n=lo(e.filterSummary||e.filterResults);return!r&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...s]}}function Cf(t,e){const s=If(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(kf))],i=s.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Nl(r)}.`:"Safety screening could not be completed. Please try again.");return n.name="ModelArmorError",n.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",n.isModelArmor=!0,n.pipelineStep=e,n.userTitle=i?"Request blocked for safety":"Safety check unavailable",n.userMessage=i?`The safety check detected ${Nl(r)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",n.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",n.matchedFilters=s.matchedFilters,n}function Ff(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Ol(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of Ff(t).split(` +`)){if(!/^[A-Za-z_$]/.test(r)||e.test(r))continue;const i=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&s.push(i[1])}return s}function sd(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,i,n)=>n.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:s}async function Ll(t){const e=new TextEncoder().encode(String(t||"")),s=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(s),r=>r.toString(16).padStart(2,"0")).join("")}async function Pf(t,e=new Map){const s={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=sd(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Ll(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Ll(c)),s[o]=u,a.type==="F"){const d=Ol(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(Ol(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(n)}}const Af=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Dl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Rf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),$f=["Struct","Record"],Tf=[{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=>Bl(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=>Bl(t).some(e=>{const s=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let r;for(;(r=s.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; }`,neg:`class _P { @@ -13,38 +14,40 @@ class W extends StatefulWidget { final double value; }`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } -var x = Image.network(widget.imagePath);`}];function at(t,e,s){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:s}}function Qs(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function wf(t,e){const s=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!s)return null;let r=0;for(let i=s.index+s[0].length-1;ibf(t).usable);function Gu(t=""){const e=Qs(t);return Ef.filter(s=>s.detect(e)).map(({id:s,severity:r,message:i})=>({id:s,severity:r,message:i}))}function Sf(t=""){return Gu(t).filter(e=>e.severity==="error").map(e=>e.message)}function xf(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let i=r.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=yf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iRl(o.functionName)===r);if(i)return i;const n=o=>!o.functionName.startsWith("_");return s.find(n)||s[0]}function xi(t=""){return Array.from(Qs(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function kf(t="",e=""){var s;return((s=Ku(t,e))==null?void 0:s.returnType)||null}function Tl(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 Ju(t,e){const s=xi(e);if(s.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Tl(l)===i))return null;const[o]=s,a=`${Tl(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow expects the file to be named "${a}" - rename the file (or the class) so they agree exactly.`}function If(t="",e=""){return Ku(t,e)!==null}function Cf(t,e=new Set){return((t==null?void 0:t.match(/[A-Za-z_]\w*/g))||[]).filter(r=>mf.has(r)?!1:!vf.some(n=>r.endsWith(n))||e.has(r))}function Yu(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=kf(t,e),i=Cf(r,s);if(i.length===0)return null;const[n]=i;let o;return s.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:r===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${r}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function Ff(t,e={}){const s=[],r=t.fileName||"",i=t.code||"";if(gf.has(t.artifactType)||s.push(at(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||s.push(at(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return s.push(at(t,"warning","Generated artifact has no Dart code yet.")),s;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||s.push(at(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of Gu(i))s.push(at(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!If(i,t.artifactName)&&s.push(at(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(xi(i)),o=Yu(i,{functionName:t.artifactName,declaredTypes:n});o&&s.push(at(t,"error",o))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(at(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=Ju(r,i);n&&s.push(at(t,"error",n))}return s}function Pf(t){const e=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],s=new Set(e.flatMap(n=>xi(n.code||""))),r=e.flatMap(n=>Ff(n,{declaredTypes:s})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Pl[n.artifactType]||Pl.CodeFile}));return{valid:r.every(n=>n.severity!=="error"),findings:r,deployHints:i}}const $l="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function Ml(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Af(t=""){const e=t.indexOf($l);return e===-1?t:t.slice(e+$l.length).replace(/^\s*\n/,"")}const Rf=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function Tf(t="",e=""){const s=Af(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(Ml).filter(Boolean)),i=s.split(` -`).filter(n=>{const o=Ml(n);return o===null||!r.has(o)?!0:!Rf.test(n)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const $f=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function Mf(t){let e="",s=0;for(;s{const r=s.name||s.package;return!r||r==="flutter"||(e[r]=s.version||""),e},{})}function Df(t){const e=new Map,s=new Map,r=[];for(const i of t)e.has(i.fileName)?r.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),s.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${s.get(i.path)}" and "${i.artifactId}".`):s.set(i.path,i.artifactId);return r}function Bf(t,e={}){const s=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||(t==null?void 0:t.deployOrder)||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),n=[...(t==null?void 0:t.warnings)||[]];let o=[];i.forEach(p=>{const f=Lf(p),g=p.code||"",v=p.codeType||Nf[p.artifactType]||Me.OTHER;g.trim()||n.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:v,path:p.deployPath||Of(f,v),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:v})=>v.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:v})=>`// ${v.artifactId} +var x = Image.network(widget.imagePath);`}];function Xe(t,e,s){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:s}}function tr(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function Nf(t,e){const s=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!s)return null;let r=0;for(let i=s.index+s[0].length-1;iOf(t).usable);function rd(t=""){const e=tr(t);return Lf.filter(s=>s.detect(e)).map(({id:s,severity:r,message:i})=>({id:s,severity:r,message:i}))}function Df(t=""){return rd(t).filter(e=>e.severity==="error").map(e=>e.message)}function Bf(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let i=r.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=Mf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;ijl(o.functionName)===r);if(i)return i;const n=o=>!o.functionName.startsWith("_");return s.find(n)||s[0]}function Ci(t=""){return Array.from(tr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function jf(t="",e=""){var s;return((s=Ho(t,e))==null?void 0:s.returnType)||null}function Ul(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 Uf(t,e){const s=Ci(e);if(s.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Ul(l)===i))return null;const[o]=s,a=`${Ul(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 Hf(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function id(t,e,s=""){var a;const r=(a=Ho(e,s))==null?void 0:a.functionName;if(!r)return null;const i=String(t||"").split("/").pop(),n=sd(i,"A");if(n===r)return null;const o=`${Hf(r)}.dart`;return`File name "${i}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${n}" and reports Action "${n}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${n}".`}function Wf(t="",e=""){return Ho(t,e)!==null}function zf(t,e=new Set){return((t==null?void 0:t.match(/[A-Za-z_]\w*/g))||[]).filter(r=>Rf.has(r)?!1:!$f.some(n=>r.endsWith(n))||e.has(r))}function nd(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=jf(t,e),i=zf(r,s);if(i.length===0)return null;const[n]=i;let o;return s.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:r===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${r}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function qf(t,e={}){const s=[],r=t.fileName||"",i=t.code||"";if(Af.has(t.artifactType)||s.push(Xe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||s.push(Xe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return s.push(Xe(t,"warning","Generated artifact has no Dart code yet.")),s;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||s.push(Xe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of rd(i))s.push(Xe(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!Wf(i,t.artifactName)&&s.push(Xe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(Ci(i)),o=nd(i,{functionName:t.artifactName,declaredTypes:n});o&&s.push(Xe(t,"error",o));const a=id(r,i,t.artifactName);a&&s.push(Xe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(Xe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=Uf(r,i);n&&s.push(Xe(t,"warning",n))}return s}function Vf(t){const e=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],s=new Set(e.flatMap(n=>Ci(n.code||""))),r=e.flatMap(n=>qf(n,{declaredTypes:s})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Dl[n.artifactType]||Dl.CodeFile}));return{valid:r.every(n=>n.severity!=="error"),findings:r,deployHints:i}}const Hl="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function Wl(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function Gf(t=""){const e=t.indexOf(Hl);return e===-1?t:t.slice(e+Hl.length).replace(/^\s*\n/,"")}const Kf=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function Jf(t="",e=""){const s=Gf(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(Wl).filter(Boolean)),i=s.split(` +`).filter(n=>{const o=Wl(n);return o===null||!r.has(o)?!0:!Kf.test(n)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const Yf=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function Zf(t){let e="",s=0;for(;s{const r=s.name||s.package;if(!r||r==="flutter")return e;const i=s.versionRequired||s.required;return e[r]=i&&s.version||"",e},{})}function tg(t){const e=new Map,s=new Map,r=[];for(const i of t)e.has(i.fileName)?r.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),s.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${s.get(i.path)}" and "${i.artifactId}".`):s.set(i.path,i.artifactId);return r}function sg(t,e={}){const s=Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||(t==null?void 0:t.deployOrder)||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),n=[...(t==null?void 0:t.warnings)||[]];let o=[];i.forEach(p=>{const f=eg(p),g=p.code||"",v=p.codeType||Xf[p.artifactType]||Me.OTHER;g.trim()||n.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:v,path:p.deployPath||Qf(f,v),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:v})=>v.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:v})=>`// ${v.artifactId} ${v.content}`).join(` -`)},g=new Set(l.slice(1).map(({index:v})=>v));o=o.filter((v,_)=>!g.has(_)),o[p.index]=f}const u={...Nl(t==null?void 0:t.dependencies),...i.reduce((p,f)=>({...p,...Nl(f.dependencies)}),{})},c={};i.forEach(p=>{Zu(p.code||"").forEach(f=>{f in u||(c[f]="^1.0.0")})});const d={...c,...u};i.forEach(p=>{(p.dependencies||[]).forEach(f=>{const g=f.name||f.package;g&&!f.version&&n.push(`${p.artifactName||p.id} dependency "${g}" has no explicit version.`)})});const h=Df(o);return{bundleId:(t==null?void 0:t.id)||"bundle-current",title:(t==null?void 0:t.title)||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:(t==null?void 0:t.relationships)||[],warnings:n,errors:h}}function jf(t){var e;return(e=String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/))==null?void 0:e[1]}function Uf(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 Hf(t,e){const r=[Uf(t),jf(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 Wf(t,e=new Map){const s=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||s.push({artifactId:i.artifactId||r,className:Hf(r,i),content:i.content,fileName:r,path:i.path});return s}function zf(t,e){const s=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!s.has(r.path)))}const Ol={pass:0,warning:1,fail:2},qf=["manualSteps","manualActions","requiredActions","flutterFlowSteps","flutterFlowActions","requiredUserActions","requiredFlutterFlowActions","flutterFlowSetup","userActions","nextSteps"];function De(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function gt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const s=e.filter(r=>typeof r=="string").join(` -`);if(s)return s}}return""}function et(t){return t==null?[]:Array.isArray(t)?t:[t]}function Vf(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function ze(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Bo(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function io(...t){return t.filter(Boolean).reduce((e,s)=>Ol[s]>Ol[e]?s:e,"pass")}function Xu(t,e="warning",s="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:s};const r=De(t),i=gt(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:Bo(r.severity||r.status||r.level)||e,message:i,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function no(t,e="review"){const s=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>et(s[i]).map(o=>Xu(o,n,e)).filter(Boolean))}function Gf(t,e,s=null){if(typeof t=="string")return{id:`${s||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:s,source:"Code Review"};const r=De(t),i=gt(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:i,detail:gt(r.detail,r.instructions,r.description),location:gt(r.location,r.flutterFlowPath,r.path),timing:gt(r.timing,r.phase)||"unspecified",artifactId:s,source:gt(r.source)||"Code Review"}:null}function oo(t,e=null){const s=De(t);return qf.flatMap(r=>et(s[r])).map((r,i)=>Gf(r,i,e)).filter(Boolean)}function Kf(t){let e=typeof t=="string"?so(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=so(s.content)||e);const r=De(e),i=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function Jf(t,e){const s=[e.id,e.fileName,e.artifactName].map(ze);return t.find(r=>{const i=De(r);return[i.id,i.fileName,i.artifactName,i.name].map(ze).some(n=>n&&s.includes(n))})||null}function Yf(t,e){var i,n;const r=et((n=(i=t==null?void 0:t.metadata)==null?void 0:i.compatibility)==null?void 0:n.deployHints).find(o=>ze(o==null?void 0:o.artifactId)===ze(e.id)||ze(o==null?void 0:o.fileName)===ze(e.fileName));return(r==null?void 0:r.pathHint)||""}function Zf(t,e){return et(t==null?void 0:t.relationships).filter(s=>ze(s==null?void 0:s.from)===ze(e.id)||ze(s==null?void 0:s.to)===ze(e.id))}function Xf(t,e){var s,r;return et((r=(s=t==null?void 0:t.metadata)==null?void 0:s.compatibility)==null?void 0:r.findings).filter(i=>!(i!=null&&i.artifactId)||ze(i.artifactId)===ze(e.id)).map(i=>Xu(i,"warning","Compatibility check")).filter(Boolean)}function Qf(t,e,s,r){const i=Jf(e,s),n=De((i==null?void 0:i.review)||i||s.review),o=Object.keys(n).length>0,a=[...no(n),...Xf(t,s)],l=oo(n,s.id),u=Bo(n.status||n.verdict||n.outcome||n.result),c=a.length?io(...a.map(h=>h.severity)):null,d=io(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(n.summary,n.overview,n.assessment,n.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,pathHint:Yf(t,s),relationships:Zf(t,s)}}function eg({status:t,score:e,artifactPresentations:s,manualSteps:r}){const i=s.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 n=s.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"}: ${n.pass} pass, ${n.warning} warn, ${n.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 tg({bundle:t,reviewResult:e}){var S;const s=De(t),r=et(s.artifacts),{root:i,rawText:n}=Kf(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(k=>Object.keys(k).length)||{},a=et(i.artifacts||i.files||i.reviews),l=r.map((k,E)=>Qf(s,a,k,E)),u=no(i),d=[...no(o),...u],h=[...oo(o),...oo(i),...l.flatMap(k=>k.manualSteps)].filter((k,E,P)=>P.findIndex(D=>D.title===k.title&&D.artifactId===k.artifactId)===E),p=Bo(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=io(p,...d.map(k=>k.severity),...l.map(k=>k.status)),g=o.score??i.score??i.overallScore??n,v=Vf(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n)||eg({status:f,score:v,artifactPresentations:l,manualSteps:h}),w=l.reduce((k,E)=>(k[E.status]+=1,k),{pass:0,warning:0,fail:0});return{title:s.title||"Generated artifact bundle",description:s.description||"",status:f,score:v,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(k=>k.reviewComplete).length,total:l.length},deployOrder:et(s.deployOrder),relationships:et(s.relationships),warnings:et(s.warnings),compatibility:De((S=s.metadata)==null?void 0:S.compatibility)}}function Qu(t){if(typeof t=="string")return t;if(Array.isArray(t)){const e=t.map(s=>typeof s=="string"?s:s==null?void 0:s.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}function Ll(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",i=[];for(const n of s){const o=ed(n);o&&i.push(o)}return{events:i,buffer:r}}function sg(t){const e=ed(t);return e?[e]:[]}function ed(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function rg(t,e={}){var a;const{onPhase:s,onLog:r}=e;let i=null,n="";const o=l=>{if(l.event==="phase"){l.message&&s&&s(l.message);return}if(l.event==="log"){l.message&&r&&r(l.message);return}i=l};if((a=t.body)!=null&&a.getReader){const l=t.body.getReader(),u=new TextDecoder;for(;;){const{done:c,value:d}=await l.read();if(c)break;const h=Ll(n,u.decode(d,{stream:!0}));n=h.buffer,h.events.forEach(o)}}else{const l=Ll("",await t.text());n=l.buffer,l.events.forEach(o)}return sg(n).forEach(o),i?{...i,success:i.success===!0||i.success===void 0&&t.ok}:{success:!1,error:t.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}function ig(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Dl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of ig(t).split(` -`)){if(!/^[A-Za-z_$]/.test(r)||e.test(r))continue;const i=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&s.push(i[1])}return s}function ng(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,i,n)=>n.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:s}async function Bl(t){const e=new TextEncoder().encode(String(t||"")),s=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(s),r=>r.toString(16).padStart(2,"0")).join("")}async function og(t,e=new Map){const s={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=ng(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Bl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Bl(c)),s[o]=u,a.type==="F"){const d=Dl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(Dl(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(n)}}const ag=/^dependencies\s*:\s*(?:#.*)?$/,lg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function cg(t){const e=t.match(lg);return e?e[1]??e[2]??e[3]:null}function td(t){const e=t.trim();return e===""||e.startsWith("#")}function sd(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function jo(t){const e=t.findIndex(i=>ag.test(i));if(e===-1)return null;let s=e,r=null;for(let i=e+1;iu&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const i=s.split(` -`),n=new Set(rd(s)),o=[],a=[];for(const[u,c]of r)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=jo(i);if(l){const u=o.map(([c,d])=>jl(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(jl(" ",u,c))});return{yaml:i.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function id(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),jo(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),rd(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const hg={"&":"&","<":"<",">":">",'"':""","'":"'"};function wt(t){return String(t??"").replace(/[&<>"']/g,e=>hg[e])}function j(t){return t?wt(t).replace(/\n/g,"
      "):""}function Ht(t){return wt(t).replace(/\r?\n/g," ")}function pg(t,e={}){const s=t==null?void 0:t.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=(t==null?void 0:t.message)||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function fg(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function gg(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function mg(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function ms(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,s=t.match(e);return s?s[1].trim():t.trim()}function Ul(t){return t=wt(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function nd(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=ms(t);try{return s.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return s.highlight(r,{language:"json"}).value}catch{return wt(r)}}}function ki(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
      ';const i=String(t??"").split(` -`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=mg(o),u=nd(o.trim(),l,s);r+=`
      +`)},g=new Set(l.slice(1).map(({index:v})=>v));o=o.filter((v,_)=>!g.has(_)),o[p.index]=f}const u={...zl(t==null?void 0:t.dependencies),...i.reduce((p,f)=>({...p,...zl(f.dependencies)}),{})},c={};i.forEach(p=>{od(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=tg(o);return{bundleId:(t==null?void 0:t.id)||"bundle-current",title:(t==null?void 0:t.title)||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:(t==null?void 0:t.relationships)||[],warnings:n,errors:h}}function rg(t){var e;return(e=String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/))==null?void 0:e[1]}function ig(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 ng(t,e){const r=[ig(t),rg(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 og(t,e=new Map){const s=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||s.push({artifactId:i.artifactId||r,className:ng(r,i),content:i.content,fileName:r,path:i.path});return s}function ag(t,e){const s=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!s.has(r.path)))}const ql={pass:0,warning:1,fail:2},lg=["manualSteps","manualActions","requiredActions","flutterFlowSteps","flutterFlowActions","requiredUserActions","requiredFlutterFlowActions","flutterFlowSetup","userActions","nextSteps"];function De(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function gt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const s=e.filter(r=>typeof r=="string").join(` +`);if(s)return s}}return""}function et(t){return t==null?[]:Array.isArray(t)?t:[t]}function cg(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Wo(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 co(...t){return t.filter(Boolean).reduce((e,s)=>ql[s]>ql[e]?s:e,"pass")}function ad(t,e="warning",s="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:s};const r=De(t),i=gt(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:Wo(r.severity||r.status||r.level)||e,message:i,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function uo(t,e="review"){const s=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>et(s[i]).map(o=>ad(o,n,e)).filter(Boolean))}function ug(t,e,s=null){if(typeof t=="string")return{id:`${s||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:s,source:"Code Review"};const r=De(t),i=gt(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:i,detail:gt(r.detail,r.instructions,r.description),location:gt(r.location,r.flutterFlowPath,r.path),timing:gt(r.timing,r.phase)||"unspecified",artifactId:s,source:gt(r.source)||"Code Review"}:null}function ho(t,e=null){const s=De(t);return lg.flatMap(r=>et(s[r])).map((r,i)=>ug(r,i,e)).filter(Boolean)}function dg(t){let e=typeof t=="string"?ao(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=ao(s.content)||e);const r=De(e),i=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function hg(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const i=De(r);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(n=>n&&s.includes(n))})||null}function pg(t,e){var i,n;const r=et((n=(i=t==null?void 0:t.metadata)==null?void 0:i.compatibility)==null?void 0:n.deployHints).find(o=>We(o==null?void 0:o.artifactId)===We(e.id)||We(o==null?void 0:o.fileName)===We(e.fileName));return(r==null?void 0:r.pathHint)||""}function fg(t,e){return et(t==null?void 0:t.relationships).filter(s=>We(s==null?void 0:s.from)===We(e.id)||We(s==null?void 0:s.to)===We(e.id))}function gg(t,e){var s,r;return et((r=(s=t==null?void 0:t.metadata)==null?void 0:s.compatibility)==null?void 0:r.findings).filter(i=>!(i!=null&&i.artifactId)||We(i.artifactId)===We(e.id)).map(i=>ad(i,"warning","Compatibility check")).filter(Boolean)}function mg(t,e,s,r){const i=hg(e,s),n=De((i==null?void 0:i.review)||i||s.review),o=Object.keys(n).length>0,a=[...uo(n),...gg(t,s)],l=ho(n,s.id),u=Wo(n.status||n.verdict||n.outcome||n.result),c=a.length?co(...a.map(h=>h.severity)):null,d=co(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(n.summary,n.overview,n.assessment,n.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,pathHint:pg(t,s),relationships:fg(t,s)}}function vg({status:t,score:e,artifactPresentations:s,manualSteps:r}){const i=s.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 n=s.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"}: ${n.pass} pass, ${n.warning} warn, ${n.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 _g({bundle:t,reviewResult:e}){var S;const s=De(t),r=et(s.artifacts),{root:i,rawText:n}=dg(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(k=>Object.keys(k).length)||{},a=et(i.artifacts||i.files||i.reviews),l=r.map((k,E)=>mg(s,a,k,E)),u=uo(i),d=[...uo(o),...u],h=[...ho(o),...ho(i),...l.flatMap(k=>k.manualSteps)].filter((k,E,P)=>P.findIndex(D=>D.title===k.title&&D.artifactId===k.artifactId)===E),p=Wo(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=co(p,...d.map(k=>k.severity),...l.map(k=>k.status)),g=o.score??i.score??i.overallScore??n,v=cg(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n)||vg({status:f,score:v,artifactPresentations:l,manualSteps:h}),w=l.reduce((k,E)=>(k[E.status]+=1,k),{pass:0,warning:0,fail:0});return{title:s.title||"Generated artifact bundle",description:s.description||"",status:f,score:v,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(k=>k.reviewComplete).length,total:l.length},deployOrder:et(s.deployOrder),relationships:et(s.relationships),warnings:et(s.warnings),compatibility:De((S=s.metadata)==null?void 0:S.compatibility)}}function ld(t){if(typeof t=="string")return t;if(Array.isArray(t)){const e=t.map(s=>typeof s=="string"?s:s==null?void 0:s.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}function Vl(t,e){const s=`${t}${e}`.split(` +`),r=s.pop()??"",i=[];for(const n of s){const o=cd(n);o&&i.push(o)}return{events:i,buffer:r}}function yg(t){const e=cd(t);return e?[e]:[]}function cd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function wg(t,e={}){var a;const{onPhase:s,onLog:r}=e;let i=null,n="";const o=l=>{if(l.event==="phase"){l.message&&s&&s(l.message);return}if(l.event==="log"){l.message&&r&&r(l.message);return}i=l};if((a=t.body)!=null&&a.getReader){const l=t.body.getReader(),u=new TextDecoder;for(;;){const{done:c,value:d}=await l.read();if(c)break;const h=Vl(n,u.decode(d,{stream:!0}));n=h.buffer,h.events.forEach(o)}}else{const l=Vl("",await t.text());n=l.buffer,l.events.forEach(o)}return yg(n).forEach(o),i?{...i,success:i.success===!0||i.success===void 0&&t.ok}:{success:!1,error:t.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const bg=/^dependencies\s*:\s*(?:#.*)?$/,Eg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function ud(t){const e=t.match(Eg);return e?e[1]??e[2]??e[3]:null}function zo(t){const e=t.trim();return e===""||e.startsWith("#")}function Fi(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function dd(t,e){const s=t.findIndex(n=>e.test(n));if(s===-1)return null;let r=s,i=null;for(let n=s+1;nu&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const i=s.split(` +`),n=new Set(pd(s)),o=[],a=[];for(const[u,c]of r)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=qo(i);if(l){const u=o.map(([c,d])=>Gl(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(Gl(" ",u,c))});return{yaml:i.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Ig(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:s,overridden:[],skipped:[]};const i=s.split(` +`),n=Vo(s),o=[],a=[];for(const[l,u]of r){const c=n.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(Fi(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${fd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` +`),overridden:o,skipped:a}}function gd(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),qo(e.split(` +`))||s.push("pubspec.yaml missing dependencies section"),pd(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const Cg=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(Cg);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function Fg(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 s=0;s0)}function Ag(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function Go(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 wt(o)?{min:o,minInclusive:!0,max:Ag(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const s={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,n;for(;(n=r.exec(e))!==null;){const[,o,a]=n;if(!wt(a))return null;i=!0,o===">="||o===">"?(s.min=a,s.minInclusive=o===">="):(s.max=a,s.maxInclusive=o==="<=")}return i?s:null}function Kl(t,e){const s=Go(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=ui(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=ui(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function Rg(t,e){const s=Go(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=ui(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function bn(t){const e=Go(t);return e?e.min:null}const $g="https://pub.dev/api/packages/",Tg=8e3;function Mg(t,e={}){var o;const{dartSdkFloor:s=null,flutterSdkFloor:r=null}=e,i=Array.isArray(t==null?void 0:t.versions)?t.versions:[];let n=null;for(const a of i){const l=a==null?void 0:a.version;if(!l||a.retracted||Pg(l))continue;const u=((o=a.pubspec)==null?void 0:o.environment)||{};s&&u.sdk&&!Kl(u.sdk,s)||r&&u.flutter&&!Kl(u.flutter,r)||(!n||ui(l,n)>0)&&(n=l)}return n?{version:n,constraint:`^${n}`}:null}async function Ng(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:i=fetch}=e;let n;try{const a=await i(`${$g}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(Tg)});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}"`};n=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=Mg(n,{dartSdkFloor:s,flutterSdkFloor:r});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:s?`no published "${t}" release supports Dart ${s}`:`no published "${t}" release could be read`}}async function Og(t,e={}){const s=await Promise.all(t.map(r=>Ng(r,e)));return new Map(s.map(({name:r,...i})=>[r,i]))}async function Lg(t,e={},s={}){const{resolveVersions:r=Og}=s,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),n=xg(t),o={dartSdkFloor:bn(n.sdk),flutterSdkFloor:bn(n.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Vo(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=bn(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(Rg(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!=null&&h.constraint){a.additions[d]=h.constraint;continue}a.additions[d]="",a.warnings.push(`Could not determine a version for "${d}" (${(h==null?void 0:h.error)||"lookup failed"}). Added without a version constraint — set one in FlutterFlow if the build picks the wrong release.`)}}return a}const Dg={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>Dg[e])}function j(t){return t?bt(t).replace(/\n/g,"
      "):""}function zt(t){return bt(t).replace(/\r?\n/g," ")}function Bg(t,e={}){const s=t==null?void 0:t.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=(t==null?void 0:t.message)||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function jg(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function Ug(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function Hg(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 _s(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,s=t.match(e);return s?s[1].trim():t.trim()}function Jl(t){return t=bt(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 md(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=_s(t);try{return s.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return s.highlight(r,{language:"json"}).value}catch{return bt(r)}}}function Pi(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
      ';const i=String(t??"").split(` +`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=Hg(o),u=md(o.trim(),l,s);r+=`
      ${u}
      `,o="",n=!1}else n=!0;continue}if(n){o+=a+` `;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`

      - ${fg(l)} - ${wt(l)} + ${jg(l)} + ${bt(l)}

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

      - ${gg(l)} - ${wt(l)} + ${Ug(l)} + ${bt(l)}

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

      ${Ul(a)}

      `)}return r+="
      ",` + ${Jl(l)} +
      `;continue}a.trim()!==""&&(r+=`

      ${Jl(a)}

      `)}return r+="
      ",`
      @@ -52,14 +55,14 @@ ${v.content}`).join(`
      ${r}
      - `}const vg="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",od={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},li="ccc_auth_session",Hl=new WeakSet;let q={email:null,sessionToken:null,isVerified:!1};function vs(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=vs({isResolved:!0});const _g=`${Je}/service/runpipeline`,yg="bs_user_id",wg=`${Je}/authUserCheck`;let Rr={userId:null,status:null,resolved:!1};const ci={free:2,professional:50,power:2e3},ui="ccc_subscription",Wl=3,bg=new Set(["active","trialing","paid"]),er="google/gemini-3.6-flash",Tr=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],Eg={"google/gemini-3.6-flash":"Gemini 3.6 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function We(t){return Eg[t]||t}const as="ccc_usage",ao="google/gemini-3.6-flash",lo="google/gemini-3.6-flash",vn="google/gemini-3.6-flash",zl={professional:11,power:49},co={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},$r={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let Mr={...$r};async function Sg(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const s=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!s.ok)return;const r=await s.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,n={AUD:1},o=new Set([...Object.keys($r),...Object.values(uo),...Object.values(co)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:$r[a]&&(n[a]=$r[a]));Mr=n}catch{}finally{clearTimeout(e)}}const uo={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function ad(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&uo[n])return uo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=co[e];if(s)return s;const r=e.split("_")[0],i=co[r];return i||"USD"}function ql(t,e){const s=Mr[e]??Mr.USD,r=t*s,i=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:i>=100||i%1===0?0:2}).format(i)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Mr.USD)}}const tt="ccc_api_key_",_t="ccc_session_api_key_",it="ccc_encryption_key",tr="ccc_encryption_key_scope",xg="ccc_keystore",di="keys",sr="ccc_encryption_key_version";let ho=null,hi=null,rr=!1,pi=!1,Vl=!1;class fi extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function Gl(){if(Vl)return;Vl=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&he(t,"warning")}function ld(){return localStorage.getItem(sr)||""}function po(){var t;return((t=crypto.randomUUID)==null?void 0:t.call(crypto))||ud(crypto.getRandomValues(new Uint8Array(16)))}function kg(){const t=ld();if(t)return t;const e=po();return localStorage.setItem(sr,e),e}function _s(){ho=null,hi=null,rr=!1,pi=!1}window.addEventListener("storage",t=>{t.key===sr&&_s()});function Ig(){return new Promise((t,e)=>{const s=indexedDB.open(xg,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(di)||r.createObjectStore(di)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function Uo(t,e){const s=await Ig();return new Promise((r,i)=>{const n=s.transaction(di,t);let o;try{o=e(n.objectStore(di))}catch(l){s.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),n.oncomplete=()=>{s.close(),r(a)},n.onerror=()=>{s.close(),i(n.error||new Error("Encryption key transaction failed."))},n.onabort=()=>{s.close(),i(n.error||new Error("Encryption key transaction aborted."))}})}function Cg(t){var e;return t instanceof CryptoKey&&((e=t.algorithm)==null?void 0:e.name)==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Fg(){const t=await Uo("readonly",e=>e.get(it));return Cg(t)?t:null}async function cd(t){await Uo("readwrite",e=>e.put(t,it))}async function Pg(){_s();try{await Uo("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Ag(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await cd(e),sessionStorage.removeItem(it),sessionStorage.removeItem(tr),localStorage.removeItem(tt+"salt"),e}async function Kl(t){const e=sessionStorage.getItem(it);if(e)return pi=sessionStorage.getItem(tr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new fi;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(it,JSON.stringify(r)),sessionStorage.setItem(tr,"session"),pi=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Rg(t){if(sessionStorage.getItem(tr)==="session"&&sessionStorage.getItem(it))return Gl(),rr=!0,Kl(t);try{const e=await Fg();if(e)return e;const s=await Ag();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await cd(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),Gl(),rr=!0,Kl(t)}}async function Ho(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=kg();hi!==s&&_s();const r=ho||Rg(e);ho=r,hi=s;try{return await r}catch(i){throw _s(),i}}async function Tg(t){const e=await Ho(),s=hi,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+n.byteLength);return o.set(i),o.set(new Uint8Array(n),i.length),{ciphertext:ud(o),keyVersion:s,sessionFallback:rr}}async function $g(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await Ho({allowSessionFallbackCreation:!1});if(rr&&!s&&!pi)throw new fi;const i=Mg(t),n=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof fi)throw r;return console.error("Decryption failed:",r),null}}function ud(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let ir="",gi="";async function Wo(){sessionStorage.getItem(it)&&await Ho(),ir=await ke("flutterflow"),gi=await ke("flutterflow_project_id"),Bg(),Gt()}function zo(){document.getElementById("api-keys-modal").classList.add("open"),Vo(),ir&&fd(ir)}function dd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(qo(),s.classList.add("open"))}let bt=1;function hd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ii(){const t=hd();t.length&&t.forEach((e,s)=>{const r=s+1;if(r===bt){e.classList.remove("opacity-60","bg-gray-50","border-gray-200"),e.classList.add("bg-blue-50","border-blue-200");const i=e.querySelector("div:first-child");i&&(i.classList.remove("bg-gray-400"),i.classList.add("bg-blue-500"),i.innerHTML=r)}else if(r0&&bt<=t&&(bt++,Ii())}function Og(){const t=document.getElementById("walkthrough-modal");t&&(bt=1,Ii(),t.classList.add("open"))}function Lg(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function pd(){if(q.isVerified&&qt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(bt=1,Ii(),e.classList.add("open"))}}async function Vo(){const t=document.getElementById("flutterflow-api-key-input");ir?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Dg()}function Dg(){Yl("flutterflow","flutterflow-key-status"),Yl("flutterflow_project_id","flutterflow-project-status")}function Yl(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),i=s.querySelector("span");ss(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 Gt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),s=document.getElementById("btn-run-pipeline");s&&s.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Bg(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,i)=>{const n=s[i];n==="flutterflow"?ss("flutterflow")&&ss("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):ss("flutterflow")||ss("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)"):ss(n)?(r.className="key-status-dot configured",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (Not configured)")}),Gt()}async function jg(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await Jl("flutterflow",t.value);const s=(e==null?void 0:e.value.trim())||"";if(s){if(!Ci(s)){he("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await Jl("flutterflow_project_id",s)}await Wo(),Vo();const r=document.querySelector("#api-keys-modal .bg-blue-500"),i=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=i,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),dd()},1e3)}async function Ug(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(sr,po()),_s(),localStorage.removeItem(tt+"flutterflow"),localStorage.removeItem(tt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(tr),localStorage.removeItem(tt+"salt"),await Pg(),localStorage.setItem(sr,po()),localStorage.removeItem(tt+"flutterflow"),localStorage.removeItem(tt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await Wo();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),Vo()}function Ci(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Hg(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function Wg(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;Hg("flutterflow-api-key-input",s)}),t.addEventListener("blur",zg(async e=>{const s=e.target.value.trim();s&&await fd(s)},500)))}function zg(t,e){let s;return function(...i){const n=()=>{clearTimeout(s),t(...i)};clearTimeout(s),s=setTimeout(n,e)}}async function fd(t){const e=document.getElementById("flutterflow-projects-select"),s=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',s&&s.classList.add("hidden");try{const i=await new Ai(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(n=>{const o=document.createElement("option");o.value=n.id||n.projectId||"",o.textContent=n.name||n.projectName||`Project ${n.id}`,e.appendChild(o)}),gi&&(e.value=gi)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',s&&(s.textContent=`Failed to load projects: ${r.message}`,s.classList.remove("hidden"))}}function qg(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + `}const Wg="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",zg="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",qg="https://us.i.posthog.com";Gu.init(zg,{api_host:qg,person_profiles:"identified_only"});function tt(t,e={}){try{Gu.capture(t,e)}catch(s){console.error("PostHog tracking failed",s)}}const Ke="https://4tgke4.buildship.run",vd={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},di="ccc_auth_session",Yl=new WeakSet;let q={email:null,sessionToken:null,isVerified:!1};function ys(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=ys({isResolved:!0});const Vg=`${Ke}/service/runpipeline`,Gg="bs_user_id",Kg=`${Ke}/authUserCheck`;let Tr={userId:null,status:null,resolved:!1};const hi={free:2,professional:50,power:2e3},pi="ccc_subscription",Zl=3,Jg=new Set(["active","trialing","paid"]),sr="google/gemini-3.6-flash",Mr=["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"],Yg={"google/gemini-3.6-flash":"Gemini 3.6 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function Ut(t){return Yg[t]||t}const cs="ccc_usage",_d="google/gemini-3.6-flash",yd="google/gemini-3.6-flash",En="google/gemini-3.6-flash",Xl={professional:11,power:49},po={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"},Nr={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 Or={...Nr};async function Zg(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const s=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!s.ok)return;const r=await s.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,n={AUD:1},o=new Set([...Object.keys(Nr),...Object.values(fo),...Object.values(po)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:Nr[a]&&(n[a]=Nr[a]));Or=n}catch{}finally{clearTimeout(e)}}const fo={"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 wd(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&fo[n])return fo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=po[e];if(s)return s;const r=e.split("_")[0],i=po[r];return i||"USD"}function Ql(t,e){const s=Or[e]??Or.USD,r=t*s,i=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:i>=100||i%1===0?0:2}).format(i)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Or.USD)}}const st="ccc_api_key_",_t="ccc_session_api_key_",nt="ccc_encryption_key",rr="ccc_encryption_key_scope",Xg="ccc_keystore",fi="keys",ir="ccc_encryption_key_version";let go=null,gi=null,nr=!1,mi=!1,ec=!1;class vi extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function tc(){if(ec)return;ec=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&he(t,"warning")}function bd(){return localStorage.getItem(ir)||""}function mo(){var t;return((t=crypto.randomUUID)==null?void 0:t.call(crypto))||Sd(crypto.getRandomValues(new Uint8Array(16)))}function Qg(){const t=bd();if(t)return t;const e=mo();return localStorage.setItem(ir,e),e}function ws(){go=null,gi=null,nr=!1,mi=!1}window.addEventListener("storage",t=>{t.key===ir&&ws()});function em(){return new Promise((t,e)=>{const s=indexedDB.open(Xg,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(fi)||r.createObjectStore(fi)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function Ko(t,e){const s=await em();return new Promise((r,i)=>{const n=s.transaction(fi,t);let o;try{o=e(n.objectStore(fi))}catch(l){s.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),n.oncomplete=()=>{s.close(),r(a)},n.onerror=()=>{s.close(),i(n.error||new Error("Encryption key transaction failed."))},n.onabort=()=>{s.close(),i(n.error||new Error("Encryption key transaction aborted."))}})}function tm(t){var e;return t instanceof CryptoKey&&((e=t.algorithm)==null?void 0:e.name)==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function sm(){const t=await Ko("readonly",e=>e.get(nt));return tm(t)?t:null}async function Ed(t){await Ko("readwrite",e=>e.put(t,nt))}async function rm(){ws();try{await Ko("readwrite",t=>t.delete(nt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function im(){const t=sessionStorage.getItem(nt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Ed(e),sessionStorage.removeItem(nt),sessionStorage.removeItem(rr),localStorage.removeItem(st+"salt"),e}async function sc(t){const e=sessionStorage.getItem(nt);if(e)return mi=sessionStorage.getItem(rr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new vi;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(nt,JSON.stringify(r)),sessionStorage.setItem(rr,"session"),mi=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function nm(t){if(sessionStorage.getItem(rr)==="session"&&sessionStorage.getItem(nt))return tc(),nr=!0,sc(t);try{const e=await sm();if(e)return e;const s=await im();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Ed(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),tc(),nr=!0,sc(t)}}async function Jo(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=Qg();gi!==s&&ws();const r=go||nm(e);go=r,gi=s;try{return await r}catch(i){throw ws(),i}}async function om(t){const e=await Jo(),s=gi,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+n.byteLength);return o.set(i),o.set(new Uint8Array(n),i.length),{ciphertext:Sd(o),keyVersion:s,sessionFallback:nr}}async function am(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await Jo({allowSessionFallbackCreation:!1});if(nr&&!s&&!mi)throw new vi;const i=lm(t),n=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof vi)throw r;return console.error("Decryption failed:",r),null}}function Sd(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let or="",_i="";async function Yo(){sessionStorage.getItem(nt)&&await Jo(),or=await ke("flutterflow"),_i=await ke("flutterflow_project_id"),pm(),Jt()}function Zo(){document.getElementById("api-keys-modal").classList.add("open"),Qo(),or&&Cd(or)}function xd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(Xo(),s.classList.add("open"))}let Et=1;function kd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Ai(){const t=kd();t.length&&t.forEach((e,s)=>{const r=s+1;if(r===Et){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&&Et<=t&&(Et++,Ai())}function um(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Ai(),t.classList.add("open"))}function dm(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function Id(){if(q.isVerified&&Gt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Ai(),e.classList.add("open"))}}async function Qo(){const t=document.getElementById("flutterflow-api-key-input");or?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",hm()}function hm(){ic("flutterflow","flutterflow-key-status"),ic("flutterflow_project_id","flutterflow-project-status")}function ic(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),i=s.querySelector("span");is(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 Jt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),s=document.getElementById("btn-run-pipeline");s&&s.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function pm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,i)=>{const n=s[i];n==="flutterflow"?is("flutterflow")&&is("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):is("flutterflow")||is("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)"):is(n)?(r.className="key-status-dot configured",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (Not configured)")}),Jt()}async function fm(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await rc("flutterflow",t.value);const s=(e==null?void 0:e.value.trim())||"";if(s){if(!Ri(s)){he("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await rc("flutterflow_project_id",s)}await Yo(),Qo();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"),xd()},1e3)}async function gm(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ir,mo()),ws(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(nt),sessionStorage.removeItem(rr),localStorage.removeItem(st+"salt"),await rm(),localStorage.setItem(ir,mo()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await Yo();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),Qo()}function Ri(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function mm(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function vm(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;mm("flutterflow-api-key-input",s)}),t.addEventListener("blur",_m(async e=>{const s=e.target.value.trim();s&&await Cd(s)},500)))}function _m(t,e){let s;return function(...i){const n=()=>{clearTimeout(s),t(...i)};clearTimeout(s),s=setTimeout(n,e)}}async function Cd(t){const e=document.getElementById("flutterflow-projects-select"),s=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',s&&s.classList.add("hidden");try{const i=await new Mi(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(n=>{const o=document.createElement("option");o.value=n.id||n.projectId||"",o.textContent=n.name||n.projectName||`Project ${n.id}`,e.appendChild(o)}),_i&&(e.value=_i)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',s&&(s.textContent=`Failed to load projects: ${r.message}`,s.classList.remove("hidden"))}}function ym(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 Vg(){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 Gg(){y.bundleSpec=Xs(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Fi(){var s,r,i,n;const t=oi(y.bundleSpec);y.artifactBundle=Xs(y.step2Result,{id:(s=y.bundleSpec)==null?void 0:s.id,title:(r=y.bundleSpec)==null?void 0:r.title,description:(i=y.bundleSpec)==null?void 0:i.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:(n=y.bundleSpec)==null?void 0:n.relationships,code:y.step2Result||""});const e=Pf(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(o=>o.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=oi(y.artifactBundle).id}function Pi(){var s,r,i,n,o,a,l,u;const t=Xs(y.step3Result,{id:(s=y.artifactBundle)==null?void 0:s.id,title:(r=y.artifactBundle)==null?void 0:r.title}),e=new Map(t.artifacts.map(c=>[c.id,c.review]));y.bundleReview=Xs({id:(i=y.artifactBundle)==null?void 0:i.id,title:(n=y.artifactBundle)==null?void 0:n.title,artifacts:((a=(o=y.artifactBundle)==null?void 0:o.artifacts)==null?void 0:a.map(c=>({...c,review:e.get(c.id)||c.review||y.step3Result||null})))||[],relationships:(l=y.artifactBundle)==null?void 0:l.relationships,warnings:(u=y.artifactBundle)==null?void 0:u.warnings})}function gd(){const t=Go();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget"}}function Go(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||oi(t)}function Ko(){return Go().code||y.step2Result||""}async function Kg(){try{await Wo()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Nr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};class Ai{constructor(e,s,r="main",i=Nr.production){this.apiKey=e,this.baseUrl=i,this._projectId=s,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){var r;console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let s=null;for(const i of e)try{const n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!n.ok){const l=await n.text();s=new Error(`Export failed: ${n.status} - ${l}`);continue}const o=await n.json(),a=((r=o==null?void 0:o.value)==null?void 0:r.project_zip)||(o==null?void 0:o.project_zip);if(!a){s=new Error("Export response did not include project source.");continue}return a}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),n=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(i))return!1;const l=a.slice(i.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{n.set(a.slice(i.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:n}}async pushCodeWithRetry(e,s=3){var n,o,a;const r=[Nr.production,Nr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let l=0;lsetTimeout(f,1e3*(l+1)));continue}return d}catch(d){console.warn(`Push to ${c} failed: ${d.message}, trying next...`),await new Promise(h=>setTimeout(h,1e3*(l+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}async listProjects(e={}){const{page:s=1,limit:r=100}=e;console.log("Listing projects for API key via V2 endpoint");try{const i=await fetch("https://api.flutterflow.io/v2/l/listProjects",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(!i.ok){const a=await i.text();throw new Error(`List projects failed: ${i.status} - ${a}`)}const n=await i.json();if(n.success&&typeof n.value=="string")try{const a=JSON.parse(n.value);if(a&&Array.isArray(a.entries))return a.entries.map(l=>{var u;return{id:l.id,name:((u=l.project)==null?void 0:u.name)||l.id}})}catch(a){console.error("Failed to parse stringified project value:",a)}const o=n.projects||n.items||n.entries||(Array.isArray(n)?n:[]);return Array.isArray(o)?o:[]}catch(i){throw console.error("Error listing projects:",i),i}}}async function Jo(t){const e=t.clone();let s;try{s=await t.json()}catch{const n=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:n||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${n}`)}if(!t.ok){let i=s.message||`HTTP ${t.status}`,n=new Map;if(s.errors)n=new Map(Object.entries(s.errors));else if(!s.message&&typeof s=="object"){const o=Object.keys(s).filter(a=>a.endsWith(".dart")&&Array.isArray(s[a]));o.length>0&&(n=new Map(Object.entries(s)),i=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:n}}const r=s.value?JSON.parse(s.value):{};return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function Yo(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const U={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},md=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,vd=/extends\s+State<\w+>/;function Jg(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=md.test(e),r=vd.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function _d(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function Zo(t,e=new Map){return og(t,e)}const fo=new Map;function yd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ri(t){fo.delete(yd(t))}async function Xo(t,e,s,r){const i=Wf(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e};console.log(`Provisioning ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const n=await fetch(vg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:i,stream:!0})}),o=await rg(n,{onPhase:a=>be.setSubstatus(a),onLog:a=>console.log(`[custom class deploy] ${a}`)});if(!o.success){const a=o.details?` ${o.details}`:"";throw new Error(`${o.error||"FlutterFlow custom class provisioning failed."}${a}`)}return Ri(t),{remoteFiles:s,syncFileMap:zf(e,i)}}async function Qo(t,e={}){const s=yd(t);let r=fo.get(s);if(r===void 0){try{r=await t.fetchProjectSource()}catch(n){throw new Error(`Could not read your project's pubspec.yaml (${n.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const i=id(r.pubspecYaml);if(!i.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${i.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);fo.set(s,r)}return{...dg(r.pubspecYaml,e),remoteFiles:r.files}}function Yg(t){const e=[],s=[];t.content.length>5e4&&s.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const r=t.content.split(` -`).length;r>500&&s.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&s.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&s.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&s.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);return i&&i.length>3&&s.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`),{canProceed:e.length===0,issues:e,warnings:s}}async function Zg(t,e){let s=` + `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function wm(){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 bm(){y.bundleSpec=er(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function $i(){var s,r,i,n;const t=li(y.bundleSpec);y.artifactBundle=er(y.step2Result,{id:(s=y.bundleSpec)==null?void 0:s.id,title:(r=y.bundleSpec)==null?void 0:r.title,description:(i=y.bundleSpec)==null?void 0:i.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:(n=y.bundleSpec)==null?void 0:n.relationships,code:y.step2Result||""});const e=Vf(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(o=>o.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=li(y.artifactBundle).id}function Ti(){var s,r,i,n,o,a,l,u;const t=er(y.step3Result,{id:(s=y.artifactBundle)==null?void 0:s.id,title:(r=y.artifactBundle)==null?void 0:r.title}),e=new Map(t.artifacts.map(c=>[c.id,c.review]));y.bundleReview=er({id:(i=y.artifactBundle)==null?void 0:i.id,title:(n=y.artifactBundle)==null?void 0:n.title,artifacts:((a=(o=y.artifactBundle)==null?void 0:o.artifacts)==null?void 0:a.map(c=>({...c,review:e.get(c.id)||c.review||y.step3Result||null})))||[],relationships:(l=y.artifactBundle)==null?void 0:l.relationships,warnings:(u=y.artifactBundle)==null?void 0:u.warnings})}function Fd(){const t=ea();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget"}}function ea(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t==null?void 0:t.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||li(t)}function ta(){return ea().code||y.step2Result||""}async function Em(){try{await Yo()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Lr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};class Mi{constructor(e,s,r="main",i=Lr.production){this.apiKey=e,this.baseUrl=i,this._projectId=s,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){var r;console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let s=null;for(const i of e)try{const n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(i)});if(!n.ok){const l=await n.text();s=new Error(`Export failed: ${n.status} - ${l}`);continue}const o=await n.json(),a=((r=o==null?void 0:o.value)==null?void 0:r.project_zip)||(o==null?void 0:o.project_zip);if(!a){s=new Error("Export response did not include project source.");continue}return a}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),n=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(i))return!1;const l=a.slice(i.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{n.set(a.slice(i.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:n}}async pushCodeWithRetry(e,s=3){var n,o,a;const r=[Lr.production,Lr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let l=0;lsetTimeout(f,1e3*(l+1)));continue}return d}catch(d){console.warn(`Push to ${c} failed: ${d.message}, trying next...`),await new Promise(h=>setTimeout(h,1e3*(l+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}async listProjects(e={}){const{page:s=1,limit:r=100}=e;console.log("Listing projects for API key via V2 endpoint");try{const i=await fetch("https://api.flutterflow.io/v2/l/listProjects",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(!i.ok){const a=await i.text();throw new Error(`List projects failed: ${i.status} - ${a}`)}const n=await i.json();if(n.success&&typeof n.value=="string")try{const a=JSON.parse(n.value);if(a&&Array.isArray(a.entries))return a.entries.map(l=>{var u;return{id:l.id,name:((u=l.project)==null?void 0:u.name)||l.id}})}catch(a){console.error("Failed to parse stringified project value:",a)}const o=n.projects||n.items||n.entries||(Array.isArray(n)?n:[]);return Array.isArray(o)?o:[]}catch(i){throw console.error("Error listing projects:",i),i}}}async function sa(t){const e=t.clone();let s;try{s=await t.json()}catch{const n=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:n||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${n}`)}if(!t.ok){let i=s.message||`HTTP ${t.status}`,n=new Map;if(s.errors)n=new Map(Object.entries(s.errors));else if(!s.message&&typeof s=="object"){const o=Object.keys(s).filter(a=>a.endsWith(".dart")&&Array.isArray(s[a]));o.length>0&&(n=new Map(Object.entries(s)),i=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:n}}const r=s.value?JSON.parse(s.value):{};return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function 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"},Pd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,Ad=/extends\s+State<\w+>/;function Sm(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=Pd.test(e),r=Ad.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function Rd(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 ia(t,e=new Map){return Pf(t,e)}const vo=new Map;function $d(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ni(t){vo.delete($d(t))}async function na(t,e,s,r){const i=og(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e};console.log(`Provisioning ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const n=await fetch(Wg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:i,stream:!0})}),o=await wg(n,{onPhase:a=>be.setSubstatus(a),onLog:a=>console.log(`[custom class deploy] ${a}`)});if(!o.success){const a=o.details?` ${o.details}`:"";throw new Error(`${o.error||"FlutterFlow custom class provisioning failed."}${a}`)}return Ni(t),{remoteFiles:s,syncFileMap:ag(e,i)}}async function oa(t,e={}){const s=$d(t);let r=vo.get(s);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=gd(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.`);vo.set(s,r)}const i=await Lg(r.pubspecYaml,e),n=Ig(r.pubspecYaml,i.overrides),o=kg(n.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:n.overridden,warnings:i.warnings,remoteFiles:r.files}}function xm(t){const e=[],s=[];t.content.length>5e4&&s.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const r=t.content.split(` +`).length;r>500&&s.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&s.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&s.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&s.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);return i&&i.length>3&&s.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`),{canProceed:e.length===0,issues:e,warnings:s}}async function km(t,e){let s=`

      Commit Summary

      @@ -88,7 +91,7 @@ ${v.content}`).join(` `),s+="
      ",console.log("Pre-commit summary:",s),e.canProceed?e.warnings.length>0?confirm(`Found ${e.warnings.length} warning(s). Proceed with commit? ${e.warnings.join(` -`)}`):!0:!1}function wd(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode"}=e;let i=t.trim();i.startsWith("```dart")?i=i.replace(/^```dart\n/,""):i.startsWith("```")&&(i=i.replace(/^```\n/,"")),i.endsWith("```")&&(i=i.replace(/\n```$/,""));let n=r;n.endsWith(".dart")||(n+=".dart");let o=U.CODE_FILE;switch(s){case"CustomAction":o=U.ACTION;break;case"CustomWidget":o=U.WIDGET;break;case"CustomFunction":o=U.FUNCTION,n="custom_functions.dart";break;case"CustomClass":case"CodeFile":o=U.CODE_FILE;break}let a="";return o===U.WIDGET?a=`// Automatic FlutterFlow imports +`)}`):!0:!1}function Td(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode"}=e;let i=t.trim();i.startsWith("```dart")?i=i.replace(/^```dart\n/,""):i.startsWith("```")&&(i=i.replace(/^```\n/,"")),i.endsWith("```")&&(i=i.replace(/\n```$/,""));let n=r;n.endsWith(".dart")||(n+=".dart");let o=U.CODE_FILE;switch(s){case"CustomAction":o=U.ACTION;break;case"CustomWidget":o=U.WIDGET;break;case"CustomFunction":o=U.FUNCTION,n="custom_functions.dart";break;case"CustomClass":case"CodeFile":o=U.CODE_FILE;break}let a="";return o===U.WIDGET?a=`// Automatic FlutterFlow imports import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; @@ -114,15 +117,15 @@ import '/flutter_flow/lat_lng.dart'; import '/flutter_flow/place.dart'; import '/flutter_flow/uploaded_file.dart'; -`),{content:Tf(i,a),fileName:n,codeType:o,artifactType:s,artifactName:r}}function Xg(t){const e={};for(const s of Zu(t))e[s]="^1.0.0";return e}function Qg(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 em(t,e,s,r=new Set,i=""){const n=[],o=md.test(e),a=vd.test(e),l=[{pattern:/void\s+main\s*\(/,message:"Contains main() function - not allowed in FlutterFlow"},{pattern:/runApp\s*\(/,message:"Contains runApp() - not allowed in FlutterFlow"},{pattern:/MaterialApp\s*\(/,message:"Contains MaterialApp - not allowed in FlutterFlow"},{pattern:/Scaffold\s*\(/,message:"Contains Scaffold - usually not needed in FlutterFlow widgets"}],u=t.includes("custom_functions")||t.includes("functions"),c=/^\s*import\s+['"]([^'"]+)['"]/gm;let d;for(;(d=c.exec(e))!==null;){const h=d[1],p=h.startsWith("/flutter_flow/")||h.startsWith("/backend/")||h.startsWith("/custom_code/")||h==="index.dart"||h==="package:flutter/material.dart"||h==="package:flutter/services.dart",f=h.startsWith("dart:")||h.startsWith("package:");u?h.startsWith("dart:")||n.push(`Custom Functions cannot use '${h}' - only Dart SDK imports allowed`):!p&&!f&&n.push(`Unknown import '${h}' - use FlutterFlow managed imports`)}for(const{pattern:h,message:p}of l)h.test(e)&&n.push(p);if(s===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),s===U.WIDGET&&n.push(...Sf(e)),s===U.ACTION){const h=Yu(e,{functionName:i,declaredTypes:r});h&&n.push(h)}if(s===U.CODE_FILE){const h=Ju(t,e);h&&n.push(h)}return{valid:n.length===0,errors:n}}function Ti(t){const e=[],s=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:s};const r=new Set(Array.from(t.values()).flatMap(i=>xi(i.content||"")));for(const[i,n]of t.entries()){if((!n.content||n.content.trim().length===0)&&e.push(`File ${i} is empty`),n.content&&n.content.length>1e5&&s.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=em(i,n.content,n.type,r,n.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=id(n.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:s}}const G={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:G.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=G.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(G).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===G.PREPARING&&(this.startTime=Date.now()),(t===G.SUCCESS||t===G.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(G.ERROR)},setSuccess(t){this.result=t,this.setState(G.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===G.PREPARING||this.currentState===G.VALIDATING||this.currentState===G.PUSHING}};async function tm(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:i={},artifactName:n=e}=s;r==="CustomWidget"&&(r=U.WIDGET),r==="CustomAction"&&(r=U.ACTION),r==="CustomFunction"&&(r=U.FUNCTION),r==="CustomClass"&&(r=U.CODE_FILE),r==="CodeFile"&&(r=U.CODE_FILE),K.reset(),K.setState(G.PREPARING);try{const o=await ke("flutterflow"),a=await ke("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Ci(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=or(),u=new Ai(o,a,"main",l);K.setState(G.VALIDATING);const c=new Map,d=r||Jg(e,t),h=_d(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Ti(c);if(!p.valid)throw new Error(`Validation failed: +`),{content:Jf(i,a),fileName:n,codeType:o,artifactType:s,artifactName:r}}function Im(t){const e={};for(const s of od(t))e[s]="";return e}function Cm(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 Fm(t,e,s,r=new Set,i=""){const n=[],o=Pd.test(e),a=Ad.test(e),l=[{pattern:/void\s+main\s*\(/,message:"Contains main() function - not allowed in FlutterFlow"},{pattern:/runApp\s*\(/,message:"Contains runApp() - not allowed in FlutterFlow"},{pattern:/MaterialApp\s*\(/,message:"Contains MaterialApp - not allowed in FlutterFlow"},{pattern:/Scaffold\s*\(/,message:"Contains Scaffold - usually not needed in FlutterFlow widgets"}],u=t.includes("custom_functions")||t.includes("functions"),c=/^\s*import\s+['"]([^'"]+)['"]/gm;let d;for(;(d=c.exec(e))!==null;){const h=d[1],p=h.startsWith("/flutter_flow/")||h.startsWith("/backend/")||h.startsWith("/custom_code/")||h==="index.dart"||h==="package:flutter/material.dart"||h==="package:flutter/services.dart",f=h.startsWith("dart:")||h.startsWith("package:");u?h.startsWith("dart:")||n.push(`Custom Functions cannot use '${h}' - only Dart SDK imports allowed`):!p&&!f&&n.push(`Unknown import '${h}' - use FlutterFlow managed imports`)}for(const{pattern:h,message:p}of l)h.test(e)&&n.push(p);if(s===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),s===U.WIDGET&&n.push(...Df(e)),s===U.ACTION){const h=nd(e,{functionName:i,declaredTypes:r});h&&n.push(h);const p=id(t,e,i);p&&n.push(p)}return{valid:n.length===0,errors:n}}function Oi(t){const e=[],s=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:s};const r=new Set(Array.from(t.values()).flatMap(i=>Ci(i.content||"")));for(const[i,n]of t.entries()){if((!n.content||n.content.trim().length===0)&&e.push(`File ${i} is empty`),n.content&&n.content.length>1e5&&s.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=Fm(i,n.content,n.type,r,n.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=gd(n.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:s}}const G={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:G.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=G.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(G).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===G.PREPARING&&(this.startTime=Date.now()),(t===G.SUCCESS||t===G.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(G.ERROR)},setSuccess(t){this.result=t,this.setState(G.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===G.PREPARING||this.currentState===G.VALIDATING||this.currentState===G.PUSHING}};async function Pm(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:i={},artifactName:n=e}=s;r==="CustomWidget"&&(r=U.WIDGET),r==="CustomAction"&&(r=U.ACTION),r==="CustomFunction"&&(r=U.FUNCTION),r==="CustomClass"&&(r=U.CODE_FILE),r==="CodeFile"&&(r=U.CODE_FILE),K.reset(),K.setState(G.PREPARING);try{const o=await ke("flutterflow"),a=await ke("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Ri(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=lr(),u=new Mi(o,a,"main",l);K.setState(G.VALIDATING);const c=new Map,d=r||Sm(e,t),h=Rd(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Oi(c);if(!p.valid)throw new Error(`Validation failed: ${p.errors.join(` -`)}`);const f=await Qo(u,i),g=f.yaml,v=await Xo(u,c,f.remoteFiles,`Provision ${n} custom class`),_=await Zo(v.syncFileMap,v.remoteFiles),w=new Map(v.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const S=await ea(w),k={project_id:a,zipped_custom_code:S,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(G.PUSHING),K.setProgress(1,c.size),Ri(u),be.set("push");const E=await u.pushCode(k),P=await Jo(E);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const D=P.errorMessage||Yo(P.responseCode);throw new Error(D)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function ea(t){try{const e=new JSZip;for(const[r,i]of t.entries())e.file(r,i.content);return await e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}catch(e){return console.error("Error creating zip:",e),""}}async function bd(t,e={}){const{artifactType:s,artifactName:r,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(G.PREPARING);const n=wd(t,{artifactType:s,artifactName:r}),o=Xg(n.content);console.log("Detected dependencies:",o),K.setState(G.VALIDATING);const a=await ke("flutterflow"),l=await ke("flutterflow_project_id");if(!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!l)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ci(l))throw new Error("Invalid FlutterFlow Project ID format.");const u=new Map;u.set(n.fileName,{artifactName:r,content:n.content,type:n.codeType,path:_d(n.fileName,n.codeType),functionName:n.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,u.size);const c=Ti(u);if(!c.valid)throw new Error(`File validation failed: +`)}`);const f=await oa(u,i),g=f.yaml,v=await na(u,c,f.remoteFiles,`Provision ${n} custom class`),_=await ia(v.syncFileMap,v.remoteFiles),w=new Map(v.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const S=await aa(w),k={project_id:a,zipped_custom_code:S,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),Ni(u),be.set("push");const E=await u.pushCode(k),P=await sa(E);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const D=P.errorMessage||ra(P.responseCode);throw new Error(D)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function aa(t){try{const e=new JSZip;for(const[r,i]of t.entries())e.file(r,i.content);return await e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}catch(e){return console.error("Error creating zip:",e),""}}async function Md(t,e={}){const{artifactType:s,artifactName:r,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(G.PREPARING);const n=Td(t,{artifactType:s,artifactName:r}),o=Im(n.content);console.log("Detected dependencies:",o),K.setState(G.VALIDATING);const a=await ke("flutterflow"),l=await ke("flutterflow_project_id");if(!a)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!l)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ri(l))throw new Error("Invalid FlutterFlow Project ID format.");const u=new Map;u.set(n.fileName,{artifactName:r,content:n.content,type:n.codeType,path:Rd(n.fileName,n.codeType),functionName:n.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,u.size);const c=Oi(u);if(!c.valid)throw new Error(`File validation failed: ${c.errors.join(` -`)}`);c.warnings.length>0&&console.warn("Validation warnings:",c.warnings),K.setState(G.PUSHING);const d=or(),h=new Ai(a,l,"main",d),p=await Qo(h,o),f=p.yaml,g=await Xo(h,u,p.remoteFiles,`Provision ${r} custom class`),v=await Zo(g.syncFileMap,g.remoteFiles),_=new Map(g.syncFileMap);_.set("pubspec.yaml",{content:f,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const w=await ea(_),S={project_id:l,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:h.branchName,serialized_yaml:f,file_map:v.fileMapContents,functions_map:v.functionsMapContents};K.setProgress(1,u.size),Ri(h),be.set("push");const k=await h.pushCode(S),E=await Jo(k);if(E.success){const P={...Qg(n,i),projectId:l};return K.setSuccess({...P,fileCount:u.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${n.fileName} to FlutterFlow`,metadata:P,addedDependencies:p.added,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const P=E.errorMessage||Yo(E.responseCode),D=new Error(P);throw D.errorMap=E.errorMap,D}}catch(n){console.error("Commit execution failed:",n),K.setError(n);let o=new Map;if(n.errorMap)o=n.errorMap;else if(n.message&&n.message.includes("{"))try{const a=n.message.match(/\{[\s\S]*\}/);if(a){const l=JSON.parse(a[0]);o=new Map(Object.entries(l))}}catch(a){console.warn("Failed to parse error map from commit response:",a)}return{success:!1,error:n.message,errorMap:o,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function sm(t,e={}){var r;const{pipelineResult:s}=e;try{if(K.setState(G.PREPARING),((r=t.errors)==null?void 0:r.length)>0)throw new Error(`Bundle validation failed: +`)}`);c.warnings.length>0&&console.warn("Validation warnings:",c.warnings),K.setState(G.PUSHING);const d=lr(),h=new Mi(a,l,"main",d),p=await oa(h,o),f=p.yaml,g=await na(h,u,p.remoteFiles,`Provision ${r} custom class`),v=await ia(g.syncFileMap,g.remoteFiles),_=new Map(g.syncFileMap);_.set("pubspec.yaml",{content:f,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const w=await aa(_),S={project_id:l,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:h.branchName,serialized_yaml:f,file_map:v.fileMapContents,functions_map:v.functionsMapContents};K.setProgress(1,u.size),Ni(h),be.set("push");const k=await h.pushCode(S),E=await sa(k);if(E.success){const P={...Cm(n,i),projectId:l};return K.setSuccess({...P,fileCount:u.size,warnings:E.errorMap?Array.from(E.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${n.fileName} to FlutterFlow`,metadata:P,addedDependencies:p.added,warnings:E.errorMap?Array.from(E.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const P=E.errorMessage||ra(E.responseCode),D=new Error(P);throw D.errorMap=E.errorMap,D}}catch(n){console.error("Commit execution failed:",n),K.setError(n);let o=new Map;if(n.errorMap)o=n.errorMap;else if(n.message&&n.message.includes("{"))try{const a=n.message.match(/\{[\s\S]*\}/);if(a){const l=JSON.parse(a[0]);o=new Map(Object.entries(l))}}catch(a){console.warn("Failed to parse error map from commit response:",a)}return{success:!1,error:n.message,errorMap:o,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Am(t,e={}){var r;const{pipelineResult:s}=e;try{if(K.setState(G.PREPARING),((r=t.errors)==null?void 0:r.length)>0)throw new Error(`Bundle validation failed: ${t.errors.join(` -`)}`);const i=new Map(t.fileEntries.map(E=>[E.fileName,{artifactId:E.artifactId,artifactName:E.artifactName,content:E.content,type:E.type,path:E.path,functionName:E.type===U.FUNCTION?E.artifactName:void 0}]));K.setProgress(0,i.size);const n=Ti(i);if(!n.valid)throw new Error(`File validation failed: +`)}`);const i=new Map(t.fileEntries.map(E=>[E.fileName,{artifactId:E.artifactId,artifactName:E.artifactName,content:E.content,type:E.type,path:E.path,functionName:E.type===U.FUNCTION?E.artifactName:void 0}]));K.setProgress(0,i.size);const n=Oi(i);if(!n.valid)throw new Error(`File validation failed: ${n.errors.join(` -`)}`);K.setState(G.VALIDATING);const o=await ke("flutterflow"),a=await ke("flutterflow_project_id");if(!o)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!a)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ci(a))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(G.PUSHING);const l=or(),u=new Ai(o,a,"main",l),c=await Qo(u,t.dependencies),d=c.yaml,h=await Xo(u,i,c.remoteFiles,`Provision ${t.title} custom classes`),p=await Zo(h.syncFileMap,h.remoteFiles),f=new Map(h.syncFileMap);f.set("pubspec.yaml",{content:d,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const g=await ea(f),v={project_id:a,zipped_custom_code:g,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:d,file_map:p.fileMapContents,functions_map:p.functionsMapContents};K.setProgress(1,i.size),Ri(u),be.set("push");const _=await u.pushCode(v),w=await Jo(_);if(w.success){const E={...s,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((P,D)=>P+D.content.length,0),projectId:a};return K.setSuccess({...E,fileCount:i.size,warnings:w.errorMap?Array.from(w.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:E,addedDependencies:c.added,warnings:w.errorMap?Array.from(w.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const S=w.errorMessage||Yo(w.responseCode),k=new Error(S);throw k.errorMap=w.errorMap,k}catch(i){return console.error("Bundle commit execution failed:",i),K.setError(i),{success:!1,error:i.message,errorMap:i.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function rm(t){try{return await mi("architect",ao,rf(t),Do("architect"))}catch(e){throw e.isModelArmor?e:new Error(`Prompt Architect failed: ${e.message}`)}}async function $i(t,e){const s=nf(t),r=Do("generator",y.bundleSpec);try{return await mi("generator",e,s,r)}catch(i){if(i.isModelArmor)throw i;if(e!==vn){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await mi("generator",vn,s,r)}catch(n){throw n.isModelArmor?n:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${vn}): ${n.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function Mi(t,e=null){const s={...Do("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await mi("review",lo,of(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function ta(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function go(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` +`)}`);K.setState(G.VALIDATING);const o=await ke("flutterflow"),a=await ke("flutterflow_project_id");if(!o)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!a)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Ri(a))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(G.PUSHING);const l=lr(),u=new Mi(o,a,"main",l),c=await oa(u,t.dependencies),d=c.yaml,h=await na(u,i,c.remoteFiles,`Provision ${t.title} custom classes`),p=await ia(h.syncFileMap,h.remoteFiles),f=new Map(h.syncFileMap);f.set("pubspec.yaml",{content:d,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const g=await aa(f),v={project_id:a,zipped_custom_code:g,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:d,file_map:p.fileMapContents,functions_map:p.functionsMapContents};K.setProgress(1,i.size),Ni(u),be.set("push");const _=await u.pushCode(v),w=await sa(_);if(w.success){const E={...s,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((P,D)=>P+D.content.length,0),projectId:a};return K.setSuccess({...E,fileCount:i.size,warnings:w.errorMap?Array.from(w.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:E,addedDependencies:c.added,warnings:w.errorMap?Array.from(w.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const S=w.errorMessage||ra(w.responseCode),k=new Error(S);throw k.errorMap=w.errorMap,k}catch(i){return console.error("Bundle commit execution failed:",i),K.setError(i),{success:!1,error:i.message,errorMap:i.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function Rm(t){try{return await yi("architect",_d,vf(t),Uo("architect"))}catch(e){throw e.isModelArmor?e:new Error(`Prompt Architect failed: ${e.message}`)}}async function Li(t,e){const s=_f(t),r=Uo("generator",y.bundleSpec);try{return await yi("generator",e,s,r)}catch(i){if(i.isModelArmor)throw i;if(e!==En){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await yi("generator",En,s,r)}catch(n){throw n.isModelArmor?n:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${En}): ${n.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function Di(t,e=null){const s={...Uo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await yi("review",yd,yf(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function la(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function _o(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` `):e==="completed"?(s.classList.add("completed"),r.classList.add("completed"),r.innerHTML=` @@ -130,19 +133,19 @@ ${n.errors.join(` `):r.innerHTML=` - `)}function ve(t,e){const s=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(s.classList.remove("hidden"),r.classList.add("hidden"),go(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),go(t,"completed"))}function im(t){const e=document.getElementById(`${t}-content`),s=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),s&&(s.style.transform="rotate(0deg)")):(e.classList.add("open"),s&&(s.style.transform="rotate(180deg)"))}function nm(t){qe(parseInt(t.replace("step","")))}function qe(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),Vt();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),n={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=n[t]||"Active Workflow Stage")}function om(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{const r=e.closest(".code-container"),i=r==null?void 0:r.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function mo(t){const e=document.getElementById("step1-model-label");e&&(e.textContent=We(ao));const s=_o(t),r=document.getElementById("step2-model-label");r&&(s!==t?r.textContent=`${We(t)} → ${We(s)} (Free Tier)`:r.textContent=We(t));const i=document.getElementById("step3-model-label");i&&(i.textContent=We(lo)),console.log(`Step 1 (Prompt Architect): ${We(ao)}`),console.log(s!==t?`Step 2 (Code Generator): ${We(t)} → ${We(s)} (Free Tier fallback)`:`Step 2 (Code Generator): ${We(t)}`),console.log(`Step 3 (Code Review): ${We(lo)}`)}async function am(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,sa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` + `)}function ve(t,e){const s=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(s.classList.remove("hidden"),r.classList.add("hidden"),_o(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),_o(t,"completed"))}function $m(t){const e=document.getElementById(`${t}-content`),s=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),s&&(s.style.transform="rotate(0deg)")):(e.classList.add("open"),s&&(s.style.transform="rotate(180deg)"))}function Tm(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"),Kt();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),n={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=n[t]||"Active Workflow Stage")}function Mm(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{tt("Code Copied",{elementId:t});const r=e.closest(".code-container"),i=r==null?void 0:r.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function yo(t){const e=bo(t);console.log(`Step 1 (Prompt Architect): ${Ut(_d)}`),console.log(e!==t?`Step 2 (Code Generator): ${Ut(t)} → ${Ut(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${Ut(t)}`),console.log(`Step 3 (Code Review): ${Ut(yd)}`)}async function Nm(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,ca("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` - Refining...`});try{const s=Go(),r=af({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:s.id,userFeedback:"Fix the issues listed in the audit report."});Di(),rt(2),qe(2),ve(2,!0),y.step2Result=await $i(r,t),Fi();const i=document.getElementById("step2-output"),n=ms(y.step2Result);i.textContent=n,i.dataset.raw=n,ve(2,!1),qe(3),rt(3),ve(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),Ct();const a=ki(y.step3Result);Bi(n,a)}catch(s){console.error("Refinement failed:",s),Ct(),he(ta(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Gt()}}async function sa(t,e,s){const r=`${Je}/connectFeedback`,i={type:t,code:e,input:s};try{const n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const a=await n.text();return console.error(`callEndpoint failed: ${n.status} ${n.statusText}`,a),{success:!1,status:n.status,error:a}}const o=await n.json();return console.log("Telemetry success:",o),o}catch(n){return console.error("callEndpoint failed:",n),{success:!1,error:n.message}}}function lm(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function cm(){var i;const t=document.getElementById("ff-error-paste-input"),e=(i=t==null?void 0:t.value)==null?void 0:i.trim();if(!e){t==null||t.focus(),t==null||t.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t==null?void 0:t.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){he("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0,sa("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` + Refining...`});try{const s=ea(),r=wf({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:s.id,userFeedback:"Fix the issues listed in the audit report."});Hi(),it(2),ze(2),ve(2,!0),y.step2Result=await Li(r,t),$i();const i=document.getElementById("step2-output"),n=_s(y.step2Result);i.textContent=n,i.dataset.raw=n,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Di(y.step2Result,y.step1Result),Ti();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),Ft();const a=Pi(y.step3Result);Wi(n,a)}catch(s){console.error("Refinement failed:",s),Ft(),he(la(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Jt()}}async function ca(t,e,s){const r=`${Ke}/connectFeedback`,i={type:t,code:e,input:s};try{const n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const a=await n.text();return console.error(`callEndpoint failed: ${n.status} ${n.statusText}`,a),{success:!1,status:n.status,error:a}}const o=await n.json();return console.log("Telemetry success:",o),o}catch(n){return console.error("callEndpoint failed:",n),{success:!1,error:n.message}}}function Om(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Lm(){var i;const t=document.getElementById("ff-error-paste-input"),e=(i=t==null?void 0:t.value)==null?void 0:i.trim();if(!e){t==null||t.focus(),t==null||t.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t==null?void 0:t.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){he("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0,ca("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` - Fixing…`);try{const n=zu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});Ad(),Di(),rt(2),qe(2),ve(2,!0),y.step2Result=await $i(n,s),Fi();const o=document.getElementById("step2-output"),a=ms(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),qe(3),rt(3),ve(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Ct();const u=ki(y.step3Result);Bi(a,u),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),Ct(),he(ta(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Gt()}}async function vo(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!t.trim()){he("Please describe your FlutterFlow widget first.","warning");return}if(!await Pm())return;const s=_o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,Vg(),r.disabled=!0,r.innerHTML=` + Fixing…`);try{const n=Qu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});Wd(),Hi(),it(2),ze(2),ve(2,!0),y.step2Result=await Li(n,s),$i();const o=document.getElementById("step2-output"),a=_s(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Di(y.step2Result,y.step1Result),Ti();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Ft();const u=Pi(y.step3Result);Wi(a,u),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),Ft(),he(la(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Jt()}}async function wo(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!t.trim()){he("Please describe your FlutterFlow widget first.","warning");return}if(!await rv())return;const s=bo(e);tt("Pipeline Started",{selectedModel:e,effectiveModel:s,inputLength:t.length});const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,wm(),r.disabled=!0,r.innerHTML=` - Running...`,mo(s);try{Vt();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden"),Di(),qe(1),rt(1),ve(1,!0),y.step1Result=await rm(t),Gg();const o=document.getElementById("step1-output"),a=ms(y.step1Result);o.textContent=a,o.dataset.raw=a,ve(1,!1),qe(2),rt(2),ve(2,!0),y.step2Result=await $i(y.step1Result,s),Fi();const l=document.getElementById("step2-output"),u=ms(y.step2Result);l.textContent=u,l.dataset.raw=u,ve(2,!1),qe(3),rt(3),ve(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const c=document.getElementById("step3-output");c.textContent=y.step3Result,ve(3,!1),Ct();const d=ki(y.step3Result);Bi(u,d),xm(),Oi()}catch(i){if(console.error("Pipeline failed:",i),Ct(),i.isUsageLimit){const{count:c}=Ni();ca(c,la(),{openModal:!0});return}i.message,_o(document.getElementById("code-generator-model").value);const o=pg(i,{architect:1,generator:2,review:3});qe(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),u=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),u)if(i.isModelArmor)u.innerHTML=``}_o(o,"error")}finally{y.isRunning=!1,r.disabled=!1,r.innerHTML=` - Run Pipeline`,Gt()}}function um(){const t=document.getElementById("code-generator-model").value,e=[er,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),s=prompt(`Retry with different model? + Run Pipeline`,Jt()}}function Dm(){const t=document.getElementById("code-generator-model").value,e=[sr,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),s=prompt(`Retry with different model? Current: ${t} @@ -161,14 +164,14 @@ Options: 1. ${e[0]} 2. ${e[1]} -Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],vo()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],vo())}async function dm(){var u,c,d;const t=Ko();if(!t){he("No code to commit. Please run the pipeline first.","warning");return}const e=await ke("flutterflow"),s=await ke("flutterflow_project_id");if(!e||!s){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),zo();return}if(((c=(u=y.artifactBundle)==null?void 0:u.artifacts)==null?void 0:c.length)>1){await hm();return}const{artifactType:r,artifactName:i}=gd(),n=wd(t,{artifactType:r,artifactName:i}),o=Yg(n);if(!await Zg(n,o)){console.log("User cancelled commit");return}da({withProvisioning:n.codeType===U.CODE_FILE});const l=await bd(t,{artifactType:r,artifactName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:(d=document.getElementById("code-generator-model"))==null?void 0:d.value}});nr(),l.success?_i(l):(l.error,yi(l))}async function hm(){const t=await ke("flutterflow"),e=await ke("flutterflow_project_id");if(!t||!e){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),zo();return}const s=Bf(y.artifactBundle);if(s.errors.length>0){he(`Bundle validation failed: ${s.errors.join("; ")}`,"error");return}const r=new Map(s.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=Ti(r),n={canProceed:i.valid&&s.errors.length===0,issues:[...s.errors,...i.errors],warnings:[...s.warnings,...i.warnings]};if(!n.canProceed){he(`Bundle validation failed: ${n.issues.join("; ")}`,"error");return}const o={content:s.fileEntries.map(a=>`// ${a.fileName} +Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],wo()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],wo())}async function Bm(){var u,c,d;const t=ta();if(!t){he("No code to commit. Please run the pipeline first.","warning");return}const e=await ke("flutterflow"),s=await ke("flutterflow_project_id");if(!e||!s){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Zo();return}if(((c=(u=y.artifactBundle)==null?void 0:u.artifacts)==null?void 0:c.length)>1){await jm();return}const{artifactType:r,artifactName:i}=Fd(),n=Td(t,{artifactType:r,artifactName:i}),o=xm(n);if(!await km(n,o)){console.log("User cancelled commit");return}_a({withProvisioning:n.codeType===U.CODE_FILE}),tt("Deploy to FlutterFlow Started",{artifactType:r,artifactName:i});const l=await Md(t,{artifactType:r,artifactName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:(d=document.getElementById("code-generator-model"))==null?void 0:d.value}});ar(),l.success?(tt("Deploy to FlutterFlow Success",{artifactType:r,artifactName:i}),bi(l)):(tt("Deploy to FlutterFlow Failed",{artifactType:r,artifactName:i,error:l.error}),Ei(l))}async function jm(){const t=await ke("flutterflow"),e=await ke("flutterflow_project_id");if(!t||!e){he("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),Zo();return}const s=sg(y.artifactBundle);if(s.errors.length>0){he(`Bundle validation failed: ${s.errors.join("; ")}`,"error");return}const r=new Map(s.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=Oi(r),n={canProceed:i.valid&&s.errors.length===0,issues:[...s.errors,...i.errors],warnings:[...s.warnings,...i.warnings]};if(!n.canProceed){he(`Bundle validation failed: ${n.issues.join("; ")}`,"error");return}const o={content:s.fileEntries.map(a=>`// ${a.fileName} ${a.content}`).join(` -`),fileName:`${s.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:s.title};Lm(o,n,s.dependencies,s)}function pm(t){var i;let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let s=`
      +`),fileName:`${s.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:s.title};dv(o,n,s.dependencies,s)}function Um(t){var i;let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let s=`

      FlutterFlow Commit Failed

      ${j(t.error)}

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

      Errors:

      -
        `;for(const[n,o]of e.entries()){const a=Qu(o);s+=`
      • +
          `;for(const[n,o]of e.entries()){const a=ld(o);s+=`
        • ${j(n)}: ${j(a)}
        • `}s+="
      "}s+="
      ",s+=`
      -
      `;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,(i=document.getElementById("btn-regenerate-from-error"))==null||i.addEventListener("click",()=>{fm(t.error,e)}))}async function fm(t,e){if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0;const r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` +
      `;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,(i=document.getElementById("btn-regenerate-from-error"))==null||i.addEventListener("click",()=>{Hm(t.error,e)}))}async function Hm(t,e){if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0;const r=document.getElementById("btn-regenerate-from-error");r&&(r.disabled=!0,r.innerHTML=` Fixing...`);try{let i=`The previous code had the following errors when committing to FlutterFlow: -`;if(e&&e.size>0)for(const[c,d]of e.entries()){const h=Qu(d);i+=`File: ${c} +`;if(e&&e.size>0)for(const[c,d]of e.entries()){const h=ld(d);i+=`File: ${c} Error: ${h} `}else i+=`${t} -`;const n=zu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Di(),rt(2),qe(2),ve(2,!0),y.step2Result=await $i(n,s),Fi();const o=document.getElementById("step2-output"),a=ms(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),qe(3),rt(3),ve(3,!0),y.step3Result=await Mi(y.step2Result,y.step1Result),Pi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Ct();const u=ki(y.step3Result);Bi(a,u)}catch(i){console.error("Regeneration failed:",i),Ct(),he(ta(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Gt()}}async function gm(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const s=await ke("flutterflow"),r=await ke("flutterflow_project_id");s&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):s||r?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function mm(t){try{const e=await fetch(`${Je}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function vm(t){try{const s=await(await fetch(`${Je}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(s.error||!s.email||!s.sessionToken)throw new Error(s.error||"Invalid or expired link");return s}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function _m(t){try{const e=await fetch(`${Je}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${Je}/auth/refresh-session`,status:e.status}),null;const s=await e.json();return s.error||!s.email||!s.sessionToken?(console.warn("refreshSession: validation failed",{error:s.error,hasEmail:!!s.email,hasToken:!!s.sessionToken}),null):s}catch(e){return console.error("refreshSession: fetch failed",{url:`${Je}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Zl(t,e){const s=Ed(),r=(q.email||s.email)!==t;q.email=t,q.sessionToken=e,q.isVerified=!0,fe=vs({isLoading:!0}),localStorage.setItem(li,JSON.stringify({email:t,sessionToken:e})),r&&ua()}function ra(){q.email=null,q.sessionToken=null,q.isVerified=!1,fe=vs({isResolved:!0}),localStorage.removeItem(li),localStorage.removeItem(ui)}function Ed(){try{const t=localStorage.getItem(li);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(li),{email:null,sessionToken:null}}}async function ym(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await vm(e);Zl(s,r)}catch(s){he(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Ed();if(s&&r){const i=await _m(r);i?Zl(i.email,i.sessionToken):ra()}}na()}function ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function wm(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function bm(){var n;const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),s=document.getElementById("signin-message"),r=(n=t==null?void 0:t.value)==null?void 0:n.trim();if(!r||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r)||r.length>254){s&&(s.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),s&&(s.textContent="");try{await mm(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(o){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:o}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Em(){ra(),ua(),na(),Li()}function na(){const t=q.isVerified&&!!q.email,e=document.getElementById("auth-signedout"),s=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),s&&s.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=q.email||""),Or(),Li()}async function Sm(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),s=e.visitorId,r=await fetch(wg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:s})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Rr.userId=i.user_id,Rr.status=i.status,Rr.resolved=!0,sessionStorage.setItem(yg,i.user_id),i.usage_count!==void 0){const n=zt(),o=i.usage_month||n,a=o===n?i.usage_count:0,l=oa(),u=l.month===n?l.count:0;(a>=u||o>l.month)&&localStorage.setItem(as,JSON.stringify({count:a,month:n})),Oi()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}function oa(){const t=zt();try{const e=localStorage.getItem(as);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:as,month:t,err:e}),localStorage.removeItem(as),{count:0,month:t}}}function zt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Ni(){const t=oa();return t.month!==zt()?{count:0,month:zt()}:t}function xm(){const e={count:Ni().count+1,month:zt()};return localStorage.setItem(as,JSON.stringify(e)),e}function aa(){return!!fe.isLoading}function qt(){return!!fe.isResolved}function km(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 Im(t){var e;return t&&((e=Object.entries(od).find(([,s])=>s===t))==null?void 0:e[0])||null}function Er(...t){return t.find(e=>e!=null&&e!=="")}function Cm(...t){return t.find(e=>e&&typeof e=="object")||{}}function Fm(t){var c,d,h,p,f,g,v,_,w,S,k,E,P,D,x,A,R,M,$,N;const e=t.data&&typeof t.data=="object"?t.data:t,s=Cm(e.subscription,e.stripeSubscription,e.currentSubscription,(h=(d=(c=e.customer)==null?void 0:c.subscriptions)==null?void 0:d.data)==null?void 0:h[0],(f=(p=e.subscriptions)==null?void 0:p.data)==null?void 0:f[0],(g=e.subscriptions)==null?void 0:g[0]),r=e.metadata||s.metadata||((v=e.customer)==null?void 0:v.metadata)||{},i=Er(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,s.priceId,s.price_id,(_=s.plan)==null?void 0:_.id,(w=s.price)==null?void 0:w.id,(P=(E=(k=(S=s.items)==null?void 0:S.data)==null?void 0:k[0])==null?void 0:E.price)==null?void 0:P.id,(A=(x=(D=s.items)==null?void 0:D[0])==null?void 0:x.price)==null?void 0:A.id,(N=($=(M=(R=s.lines)==null?void 0:R.data)==null?void 0:M[0])==null?void 0:$.price)==null?void 0:N.id),n=Er(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=km(Er(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,s.tier,s.plan,r.tier,r.plan)),a=bg.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Im(i)||(a||l?"professional":"free");return vs({tier:u,status:n,periodEnd:Er(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function la(){return ci[fe.tier]??ci.free}async function Pm(){if(q.isVerified&&(!qt()||aa())&&(await Sd({force:!0}),Li()),q.isVerified&&!qt())return he("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Ni(),e=la();if(t>=e)return ca(t,e,{openModal:!0}),!1;const s=Math.floor(e*.8);if(t>=s){const r=e-t;he(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function _n(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function ca(t,e,s={}){const r=document.getElementById("walkthrough-modal");r&&r.classList.remove("open");const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("preview-frame-container");n&&(n.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){he(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),vi();return}const c=document.getElementById("paywall-exhausted-text");if(c){const h=fe.tier;h==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${h} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",q.isVerified),u.classList.remove("hidden"),s.openModal&&vi()}function _o(t){return fe.tier==="free"&&Tr.includes(t)?er:t}function Am(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,i=!(q.isVerified&&!qt())&&s==="free";Array.from(e.options).forEach(o=>{const a=We(o.value),l=Tr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&Tr.includes(e.value)&&(e.value=er),e.disabled=!1,Hl.has(e)||(e.addEventListener("change",()=>{qt()&&fe.tier==="free"&&Tr.includes(e.value)&&(e.value=er,vi()),mo(e.value)}),Hl.add(e));let n=document.getElementById("model-selector-free-notice");i?(n||(n=document.createElement("p"),n.id="model-selector-free-notice",n.className="text-xs text-gray-400 mt-1",t.appendChild(n)),n.innerHTML='Free plan — Gemini only. '):n&&n.remove(),mo(e.value)}function Oi(){const t=document.getElementById("usage-counter");if(!t)return;if(q.isVerified&&aa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",Or(),_n();return}if(q.isVerified&&!qt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",Or(),_n();return}const{count:e}=Ni(),s=la();t.textContent=`${e} / ${s} runs this month`;const r=s>0?e/s:0;t.className=r>=1?"text-xs text-red-600 font-medium":r>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",Or(),e>=s&&!y.isRunning?ca(e,s):_n()}function Or(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=oa(),s=e.month===zt()?e.count??0:0,r=ci.free;t.textContent=`${s} / ${r} generations used`}async function Sd(t={}){const e=t.force===!0;if(!q.isVerified||!q.sessionToken){fe=vs({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(ui);if(!e&&s)try{const{data:r,email:i,ts:n,version:o}=JSON.parse(s);if(o===Wl&&i===q.email&&Date.now()-n<5*60*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",s)}try{const i=await(await fetch(`${Je}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken,email:q.email})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ra(),na();return}fe=vs({isResolved:!1,error:i.error});return}fe=Fm(i),localStorage.setItem(ui,JSON.stringify({version:Wl,data:fe,email:q.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function ua(){localStorage.removeItem(ui)}async function Rm(t){if(!q.isVerified||!q.sessionToken){xd(),ia();return}if(!od[t]){he("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const r=await(await fetch(`${Je}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:q.sessionToken,currency:ad()})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to create checkout session");const{url:i}=r;window.location.href=i}catch(s){console.error("startCheckout failed:",s),e&&(e.disabled=!1,e.textContent="Subscribe"),he("Could not start checkout. Please try again.","error")}}async function Tm(){if(!q.isVerified||!q.sessionToken){ia();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const s=await(await fetch(`${Je}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to open billing portal");const{url:r}=s;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),he("Could not open billing portal. Please try again.","error")}}async function mi(t,e,s,r={}){const n=new AbortController,o=setTimeout(()=>n.abort(),12e4);try{const a=await fetch(_g,{method:"POST",headers:{"Content-Type":"application/json"},signal:n.signal,body:JSON.stringify({user_id:Rr.userId,step:t,model:e,prompt:s,context:r})}),l=await a.json();if(a.status===429){l.serverCount!==void 0&&(localStorage.setItem(as,JSON.stringify({count:l.serverCount,month:zt()})),Oi());const d=new Error(l.message||"Monthly usage limit reached. Upgrade to continue.");throw d.isUsageLimit=!0,d}const u=ff(l,t);if(u)throw u;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(l),"content type:",typeof l.content),!a.ok)throw new Error(`${l.message||l.error||"BuildShip pipeline error"} (HTTP ${a.status})`);let c=l.output||l.content;if(!c)throw new Error(`BuildShip returned no output for step "${t}"`);return Array.isArray(c)&&(c=c.map(d=>typeof d=="string"?d:d.text||"").join("")),typeof c!="string"&&(c=JSON.stringify(c)),c}catch(a){throw a.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):a instanceof TypeError?new Error(`BuildShip unreachable: ${a.message}`):a}finally{clearTimeout(o)}}function $m(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),ua(),he("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),he("Checkout cancelled.","info"))}function Li(){const t=q.isVerified&&!!q.email,e=fe.tier,s=t&&aa(),r=!t||qt(),i=document.getElementById("subscription-tier-badge");if(i){const a={free:"Free",professional:"Professional",power:"Power Developer"},l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};i.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",i.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r?l[e]||l.free:l.unresolved}`}const n=document.getElementById("upgrade-prompt");n&&n.classList.toggle("hidden",!t||s||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||s||r&&e==="free"),Mm(r?e:null),Am(),Oi()}function Mm(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([i,{btnId:n,defaultText:o}])=>{const a=document.getElementById(n);a&&(i===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const r=document.getElementById("free-tier-current");r&&r.classList.toggle("hidden",t!=="free")}function yo(){const t=ad(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),i=document.getElementById("power-price-note");e&&(e.textContent=ql(zl.professional,t)),s&&(s.textContent=ql(zl.power,t));const n="billed monthly";r&&(r.textContent=n),i&&(i.textContent=n)}function vi(){yo();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Sg().then(()=>yo())}function xd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function he(t,e="info"){const s={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},r=document.createElement("div");r.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${s[e]||s.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Nm(),await ym(),$m(),await Sd(),Li(),yo(),await Kg(),Wg();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=or();t.value=s}pd(),Sm();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{bt===2&&e.value.trim().length>0&&(qo(),Ii())}),e.addEventListener("blur",()=>{const s=document.getElementById("walkthrough-modal");bt===2&&s&&s.classList.add("open")}),e.addEventListener("keydown",s=>{if(s.key==="Tab"){const r=document.getElementById("walkthrough-modal");bt===2&&r&&setTimeout(()=>{r.classList.add("open")},100)}})),window.addEventListener("commitStateChange",s=>{const{state:r}=s.detail;r===G.PREPARING||r===G.VALIDATING||r===G.PUSHING?(be.phaseId||da(),Ql(r)):(r===G.SUCCESS||r===G.ERROR)&&(Ql(r),setTimeout(nr,1e3))})});function Nm(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Om(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Vt),document.addEventListener("keydown",Vt))}function Vt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),s=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),s&&s.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",Vt),document.removeEventListener("keydown",Vt),pd()}let qs=null;function Lm(t,e,s,r=null){qs={codeInfo:t,checks:e,deps:s,bundlePlan:r},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=r?`${r.fileEntries.length} files`:t.content.split(` -`).length,ke("flutterflow_project_id").then(u=>{document.getElementById("confirm-project-id").textContent=u||"Not configured"});const i=document.getElementById("confirm-deps-list"),n=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(i.innerHTML=Object.entries(s).map(([u,c])=>`
    • • ${wt(u)}: ${wt(c)}
    • `).join(""),n.classList.remove("hidden")):n.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
    • • ${wt(u)}
    • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&l.classList.add("open")}function kd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),qs=null}function Dm(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const s=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const n of s){const o=document.getElementById(n);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function _i(t){var p,f,g,v;const e=(_,w)=>{const S=document.getElementById(_);S&&(S.textContent=w||"")},s=((p=t.metadata)==null?void 0:p.fileName)||"",r=((f=t.metadata)==null?void 0:f.projectId)||"",i=((g=t.metadata)==null?void 0:g.artifactType)||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=(v=t.metadata)!=null&&v.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",s),e("success-artifact-type",i),e("success-time",n),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list");t.warnings&&t.warnings.length>0&&c&&d&&(d.innerHTML=t.warnings.map(([_,w])=>`
    • ${j(_)}: ${j(String(w))}
    • `).join(""),c.classList.remove("hidden"));const h=document.getElementById("commit-success-modal");h&&h.classList.add("open")}function yi(t){nr(),pm(t)}function Bm(){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 Xl={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}},jm=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}],be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(t,e=null){if(!(!Xl[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const s=this.sequence.indexOf("package");this.sequence.splice(s===-1?this.sequence.length:s,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Xl[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,s=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=jm.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),n=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&n.push(Um(e)),Id(this.phaseId==="done"?100:s,t.message,n.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&t.classList.remove("open")}};function Um(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function da(t){be.start(t)}function nr(){be.stop()}function Id(t,e,s,r=null){const i=document.getElementById("commit-progress-bar"),n=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),n&&(n.textContent=e),o&&(o.textContent=s),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function Ql(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,Id(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function Hm(t){var e;return t.bundlePlan?t.bundlePlan.fileEntries.some(s=>s.type===U.CODE_FILE):((e=t.codeInfo)==null?void 0:e.codeType)===U.CODE_FILE}async function Wm(){var n,o;if(!qs){console.error("No pending commit data");return}const t=qs;if(kd(),da({withProvisioning:Hm(t)}),t.bundlePlan){const a=await sm(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:(n=document.getElementById("code-generator-model"))==null?void 0:n.value}});nr(),a.success?_i(a):yi(a);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r}=gd(),i=await bd(e.content,{artifactType:s,artifactName:r,pipelineResult:{step1Result:y.step1Result,selectedModel:(o=document.getElementById("code-generator-model"))==null?void 0:o.value}});nr(),i.success?_i(i):yi(i),qs=null}window.runThinkingPipeline=vo;window.toggleStep=nm;window.toggleSection=im;window.selectWorkflowStep=qe;window.copyCode=om;window.retryWithDifferentModel=um;window.openApiKeysModal=zo;window.closeApiKeysModal=dd;window.closeWalkthroughModal=Lg;window.openWalkthroughModal=Og;window.advanceWalkthrough=qo;window.commitToFlutterFlow=tm;function zm(){const t=document.getElementById("pipeline-input");t&&t.focus()}function qm(){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=zm;window.openModelSelector=qm;window.saveApiKeys=jg;window.clearAllApiKeys=Ug;window.toggleKeyVisibility=qg;window.handleWelcomeVideoEnd=Om;window.dismissWelcomeVideo=Vt;window.initiateCommitToFlutterFlow=dm;window.updateFlutterFlowCredentialStatus=gm;window.closeCommitConfirmModal=kd;window.closeCommitSuccessModal=Dm;window.showCommitSuccessModal=_i;window.showCommitFailureModal=yi;window.toggleCodePreview=Bm;window.confirmCommitToFlutterFlow=Wm;window.runRefinement=am;window.regenerateFromPastedErrors=cm;window.clearErrorInput=lm;window.setFlutterFlowEndpoint=Ng;window.getFlutterFlowEndpoint=or;window.commitProgress=be;window.openSignInModal=ia;window.closeSignInModal=wm;window.handleMagicLinkRequest=bm;window.handleSignOut=Em;window.startCheckout=Rm;window.openCustomerPortal=Tm;window.openPricingModal=vi;window.closePricingModal=xd;let ls=null,Cd=null;const ec=120;function Di(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),s=document.getElementById("ready-state");s&&s.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),Cd=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}rt(1),Vm()}function rt(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},s={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},r=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),i&&(i.textContent=s[t]||s[1]);for(let n=1;n<=3;n++){const o=document.getElementById(`pdot-${n}`);o&&(n{const t=(Date.now()-Cd)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/ec*100,i=Math.min(95,r*(1-Math.exp(-t/(ec*.6)))*1.2);s&&(s.style.width=`${i}%`)},250)}function Ct(){ls&&(clearInterval(ls),ls=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const s=document.getElementById(`pdot-${e}`);s&&(s.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function ys(t,e=""){const s={pass:'',warning:'',fail:''};return``}function Fd(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function Gm(){return tg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function Km(t){return` -
      - ${ys(t.severity)} +`;const n=Qu({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Hi(),it(2),ze(2),ve(2,!0),y.step2Result=await Li(n,s),$i();const o=document.getElementById("step2-output"),a=_s(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Di(y.step2Result,y.step1Result),Ti();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),Ft();const u=Pi(y.step3Result);Wi(a,u)}catch(i){console.error("Regeneration failed:",i),Ft(),he(la(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Jt()}}async function Wm(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const s=await ke("flutterflow"),r=await ke("flutterflow_project_id");s&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):s||r?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function zm(t){try{const e=await fetch(`${Ke}/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 qm(t){try{const s=await(await fetch(`${Ke}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(s.error||!s.email||!s.sessionToken)throw new Error(s.error||"Invalid or expired link");return s}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Vm(t){try{const e=await fetch(`${Ke}/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:`${Ke}/auth/refresh-session`,status:e.status}),null;const s=await e.json();return s.error||!s.email||!s.sessionToken?(console.warn("refreshSession: validation failed",{error:s.error,hasEmail:!!s.email,hasToken:!!s.sessionToken}),null):s}catch(e){return console.error("refreshSession: fetch failed",{url:`${Ke}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function nc(t,e){const s=Nd(),r=(q.email||s.email)!==t;q.email=t,q.sessionToken=e,q.isVerified=!0,fe=ys({isLoading:!0}),localStorage.setItem(di,JSON.stringify({email:t,sessionToken:e})),r&&va()}function ua(){q.email=null,q.sessionToken=null,q.isVerified=!1,fe=ys({isResolved:!0}),localStorage.removeItem(di),localStorage.removeItem(pi)}function Nd(){try{const t=localStorage.getItem(di);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(di),{email:null,sessionToken:null}}}async function Gm(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await qm(e);nc(s,r)}catch(s){he(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Nd();if(s&&r){const i=await Vm(r);i?nc(i.email,i.sessionToken):ua()}}ha()}function da(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Km(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Jm(){var n;const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),s=document.getElementById("signin-message"),r=(n=t==null?void 0:t.value)==null?void 0:n.trim();if(!r||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r)||r.length>254){s&&(s.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),s&&(s.textContent="");try{await zm(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(o){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:o}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Ym(){ua(),va(),ha(),Ui()}function ha(){const t=q.isVerified&&!!q.email,e=document.getElementById("auth-signedout"),s=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),s&&s.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=q.email||""),Dr(),Ui()}async function Zm(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),s=e.visitorId,r=await fetch(Kg,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:s})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Tr.userId=i.user_id,Tr.status=i.status,Tr.resolved=!0,sessionStorage.setItem(Gg,i.user_id),i.usage_count!==void 0){const n=Vt(),o=i.usage_month||n,a=o===n?i.usage_count:0,l=pa(),u=l.month===n?l.count:0;(a>=u||o>l.month)&&localStorage.setItem(cs,JSON.stringify({count:a,month:n})),ji()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}function pa(){const t=Vt();try{const e=localStorage.getItem(cs);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:cs,month:t,err:e}),localStorage.removeItem(cs),{count:0,month:t}}}function Vt(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Bi(){const t=pa();return t.month!==Vt()?{count:0,month:Vt()}:t}function Xm(){const e={count:Bi().count+1,month:Vt()};return localStorage.setItem(cs,JSON.stringify(e)),e}function fa(){return!!fe.isLoading}function Gt(){return!!fe.isResolved}function Qm(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(hi,e)?e:null}function ev(t){var e;return t&&((e=Object.entries(vd).find(([,s])=>s===t))==null?void 0:e[0])||null}function xr(...t){return t.find(e=>e!=null&&e!=="")}function tv(...t){return t.find(e=>e&&typeof e=="object")||{}}function sv(t){var c,d,h,p,f,g,v,_,w,S,k,E,P,D,x,A,R,M,T,N;const e=t.data&&typeof t.data=="object"?t.data:t,s=tv(e.subscription,e.stripeSubscription,e.currentSubscription,(h=(d=(c=e.customer)==null?void 0:c.subscriptions)==null?void 0:d.data)==null?void 0:h[0],(f=(p=e.subscriptions)==null?void 0:p.data)==null?void 0:f[0],(g=e.subscriptions)==null?void 0:g[0]),r=e.metadata||s.metadata||((v=e.customer)==null?void 0:v.metadata)||{},i=xr(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,s.priceId,s.price_id,(_=s.plan)==null?void 0:_.id,(w=s.price)==null?void 0:w.id,(P=(E=(k=(S=s.items)==null?void 0:S.data)==null?void 0:k[0])==null?void 0:E.price)==null?void 0:P.id,(A=(x=(D=s.items)==null?void 0:D[0])==null?void 0:x.price)==null?void 0:A.id,(N=(T=(M=(R=s.lines)==null?void 0:R.data)==null?void 0:M[0])==null?void 0:T.price)==null?void 0:N.id),n=xr(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=Qm(xr(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,s.tier,s.plan,r.tier,r.plan)),a=Jg.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||ev(i)||(a||l?"professional":"free");return ys({tier:u,status:n,periodEnd:xr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function ga(){return hi[fe.tier]??hi.free}async function rv(){if(q.isVerified&&(!Gt()||fa())&&(await Od({force:!0}),Ui()),q.isVerified&&!Gt())return he("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Bi(),e=ga();if(t>=e)return ma(t,e,{openModal:!0}),!1;const s=Math.floor(e*.8);if(t>=s){const r=e-t;he(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function Sn(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function ma(t,e,s={}){const r=document.getElementById("walkthrough-modal");r&&r.classList.remove("open");const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("preview-frame-container");n&&(n.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){he(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),wi();return}const c=document.getElementById("paywall-exhausted-text");if(c){const h=fe.tier;h==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${h} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",q.isVerified),u.classList.remove("hidden"),s.openModal&&wi()}function bo(t){return fe.tier==="free"&&Mr.includes(t)?sr:t}function iv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,i=!(q.isVerified&&!Gt())&&s==="free";Array.from(e.options).forEach(o=>{const a=Ut(o.value),l=Mr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&Mr.includes(e.value)&&(e.value=sr),e.disabled=!1,Yl.has(e)||(e.addEventListener("change",()=>{Gt()&&fe.tier==="free"&&Mr.includes(e.value)&&(e.value=sr,wi()),yo(e.value)}),Yl.add(e));let n=document.getElementById("model-selector-free-notice");i?(n||(n=document.createElement("p"),n.id="model-selector-free-notice",n.className="text-xs text-gray-400 mt-1",t.appendChild(n)),n.innerHTML='Free plan — Gemini only. '):n&&n.remove(),yo(e.value)}function ji(){const t=document.getElementById("usage-counter");if(!t)return;if(q.isVerified&&fa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",Dr(),Sn();return}if(q.isVerified&&!Gt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",Dr(),Sn();return}const{count:e}=Bi(),s=ga();t.textContent=`${e} / ${s} runs this month`;const r=s>0?e/s:0;t.className=r>=1?"text-xs text-red-600 font-medium":r>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",Dr(),e>=s&&!y.isRunning?ma(e,s):Sn()}function Dr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=pa(),s=e.month===Vt()?e.count??0:0,r=hi.free;t.textContent=`${s} / ${r} generations used`}async function Od(t={}){const e=t.force===!0;if(!q.isVerified||!q.sessionToken){fe=ys({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(pi);if(!e&&s)try{const{data:r,email:i,ts:n,version:o}=JSON.parse(s);if(o===Zl&&i===q.email&&Date.now()-n<5*60*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",s)}try{const i=await(await fetch(`${Ke}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken,email:q.email})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ua(),ha();return}fe=ys({isResolved:!1,error:i.error});return}fe=sv(i),localStorage.setItem(pi,JSON.stringify({version:Zl,data:fe,email:q.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function va(){localStorage.removeItem(pi)}async function nv(t){if(!q.isVerified||!q.sessionToken){Ld(),da();return}if(!vd[t]){he("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const r=await(await fetch(`${Ke}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:q.sessionToken,currency:wd()})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to create checkout session");const{url:i}=r;window.location.href=i}catch(s){console.error("startCheckout failed:",s),e&&(e.disabled=!1,e.textContent="Subscribe"),he("Could not start checkout. Please try again.","error")}}async function ov(){if(!q.isVerified||!q.sessionToken){da();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const s=await(await fetch(`${Ke}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:q.sessionToken})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to open billing portal");const{url:r}=s;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),he("Could not open billing portal. Please try again.","error")}}async function yi(t,e,s,r={}){const n=new AbortController,o=setTimeout(()=>n.abort(),12e4);try{const a=await fetch(Vg,{method:"POST",headers:{"Content-Type":"application/json"},signal:n.signal,body:JSON.stringify({user_id:Tr.userId,step:t,model:e,prompt:s,context:r})}),l=await a.json();if(a.status===429){l.serverCount!==void 0&&(localStorage.setItem(cs,JSON.stringify({count:l.serverCount,month:Vt()})),ji());const d=new Error(l.message||"Monthly usage limit reached. Upgrade to continue.");throw d.isUsageLimit=!0,d}const u=Cf(l,t);if(u)throw u;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(l),"content type:",typeof l.content),!a.ok)throw new Error(`${l.message||l.error||"BuildShip pipeline error"} (HTTP ${a.status})`);let c=l.output||l.content;if(!c)throw new Error(`BuildShip returned no output for step "${t}"`);return Array.isArray(c)&&(c=c.map(d=>typeof d=="string"?d:d.text||"").join("")),typeof c!="string"&&(c=JSON.stringify(c)),c}catch(a){throw a.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):a instanceof TypeError?new Error(`BuildShip unreachable: ${a.message}`):a}finally{clearTimeout(o)}}function av(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),va(),he("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),he("Checkout cancelled.","info"))}function Ui(){const t=q.isVerified&&!!q.email,e=fe.tier,s=t&&fa(),r=!t||Gt(),i=document.getElementById("subscription-tier-badge");if(i){const a={free:"Free",professional:"Professional",power:"Power Developer"},l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};i.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",i.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r?l[e]||l.free:l.unresolved}`}const n=document.getElementById("upgrade-prompt");n&&n.classList.toggle("hidden",!t||s||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||s||r&&e==="free"),lv(r?e:null),iv(),ji()}function lv(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([i,{btnId:n,defaultText:o}])=>{const a=document.getElementById(n);a&&(i===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const r=document.getElementById("free-tier-current");r&&r.classList.toggle("hidden",t!=="free")}function Eo(){const t=wd(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),i=document.getElementById("power-price-note");e&&(e.textContent=Ql(Xl.professional,t)),s&&(s.textContent=Ql(Xl.power,t));const n="billed monthly";r&&(r.textContent=n),i&&(i.textContent=n)}function wi(){Eo();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Zg().then(()=>Eo())}function Ld(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function he(t,e="info"){const s={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},r=document.createElement("div");r.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${s[e]||s.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),cv(),await Gm(),av(),await Od(),Ui(),Eo(),await Em(),vm();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=lr();t.value=s}Id(),Zm();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(Xo(),Ai())}),e.addEventListener("blur",()=>{const s=document.getElementById("walkthrough-modal");Et===2&&s&&s.classList.add("open")}),e.addEventListener("keydown",s=>{if(s.key==="Tab"){const r=document.getElementById("walkthrough-modal");Et===2&&r&&setTimeout(()=>{r.classList.add("open")},100)}})),window.addEventListener("commitStateChange",s=>{const{state:r}=s.detail;r===G.PREPARING||r===G.VALIDATING||r===G.PUSHING?(be.phaseId||_a(),ac(r)):(r===G.SUCCESS||r===G.ERROR)&&(ac(r),setTimeout(ar,1e3))})});function cv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function uv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Kt),document.addEventListener("keydown",Kt))}function Kt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),s=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),s&&s.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",Kt),document.removeEventListener("keydown",Kt),Id()}let Gs=null;function dv(t,e,s,r=null){Gs={codeInfo:t,checks:e,deps:s,bundlePlan:r},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=r?`${r.fileEntries.length} files`:t.content.split(` +`).length,ke("flutterflow_project_id").then(u=>{document.getElementById("confirm-project-id").textContent=u||"Not configured"});const i=document.getElementById("confirm-deps-list"),n=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(i.innerHTML=Object.entries(s).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
    • • ${bt(u)}: ${d}
    • `}).join(""),n.classList.remove("hidden")):n.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
    • • ${bt(u)}
    • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&l.classList.add("open")}function Dd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Gs=null}function hv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const s=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const n of s){const o=document.getElementById(n);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function bi(t){var p,f,g,v;const e=(_,w)=>{const S=document.getElementById(_);S&&(S.textContent=w||"")},s=((p=t.metadata)==null?void 0:p.fileName)||"",r=((f=t.metadata)==null?void 0:f.projectId)||"",i=((g=t.metadata)==null?void 0:g.artifactType)||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=(v=t.metadata)!=null&&v.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",s),e("success-artifact-type",i),e("success-time",n),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list");t.warnings&&t.warnings.length>0&&c&&d&&(d.innerHTML=t.warnings.map(([_,w])=>`
    • ${j(_)}: ${j(String(w))}
    • `).join(""),c.classList.remove("hidden"));const h=document.getElementById("commit-success-modal");h&&h.classList.add("open")}function Ei(t){ar(),Um(t)}function pv(){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 oc={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}},fv=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}],be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(t,e=null){if(!(!oc[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const s=this.sequence.indexOf("package");this.sequence.splice(s===-1?this.sequence.length:s,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=oc[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,s=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=fv.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),n=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&n.push(gv(e)),Bd(this.phaseId==="done"?100:s,t.message,n.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&t.classList.remove("open")}};function gv(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 _a(t){be.start(t)}function ar(){be.stop()}function Bd(t,e,s,r=null){const i=document.getElementById("commit-progress-bar"),n=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),n&&(n.textContent=e),o&&(o.textContent=s),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function ac(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,Bd(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function mv(t){var e;return t.bundlePlan?t.bundlePlan.fileEntries.some(s=>s.type===U.CODE_FILE):((e=t.codeInfo)==null?void 0:e.codeType)===U.CODE_FILE}async function vv(){var n,o;if(!Gs){console.error("No pending commit data");return}const t=Gs;if(Dd(),_a({withProvisioning:mv(t)}),t.bundlePlan){const a=await Am(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:(n=document.getElementById("code-generator-model"))==null?void 0:n.value}});ar(),a.success?bi(a):Ei(a);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r}=Fd(),i=await Md(e.content,{artifactType:s,artifactName:r,pipelineResult:{step1Result:y.step1Result,selectedModel:(o=document.getElementById("code-generator-model"))==null?void 0:o.value}});ar(),i.success?bi(i):Ei(i),Gs=null}window.runThinkingPipeline=wo;window.toggleStep=Tm;window.toggleSection=$m;window.selectWorkflowStep=ze;window.copyCode=Mm;window.retryWithDifferentModel=Dm;window.openApiKeysModal=Zo;window.closeApiKeysModal=xd;window.closeWalkthroughModal=dm;window.openWalkthroughModal=um;window.advanceWalkthrough=Xo;window.commitToFlutterFlow=Pm;function _v(){const t=document.getElementById("pipeline-input");t&&t.focus()}function yv(){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=_v;window.openModelSelector=yv;window.saveApiKeys=fm;window.clearAllApiKeys=gm;window.toggleKeyVisibility=ym;window.handleWelcomeVideoEnd=uv;window.dismissWelcomeVideo=Kt;window.initiateCommitToFlutterFlow=Bm;window.updateFlutterFlowCredentialStatus=Wm;window.closeCommitConfirmModal=Dd;window.closeCommitSuccessModal=hv;window.showCommitSuccessModal=bi;window.showCommitFailureModal=Ei;window.toggleCodePreview=pv;window.confirmCommitToFlutterFlow=vv;window.runRefinement=Nm;window.regenerateFromPastedErrors=Lm;window.clearErrorInput=Om;window.setFlutterFlowEndpoint=cm;window.getFlutterFlowEndpoint=lr;window.commitProgress=be;window.openSignInModal=da;window.closeSignInModal=Km;window.handleMagicLinkRequest=Jm;window.handleSignOut=Ym;window.startCheckout=nv;window.openCustomerPortal=ov;window.openPricingModal=wi;window.closePricingModal=Ld;let us=null,jd=null;const lc=120;function Hi(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),s=document.getElementById("ready-state");s&&s.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),jd=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}it(1),wv()}function it(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},s={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},r=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),i&&(i.textContent=s[t]||s[1]);for(let n=1;n<=3;n++){const o=document.getElementById(`pdot-${n}`);o&&(n{const t=(Date.now()-jd)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/lc*100,i=Math.min(95,r*(1-Math.exp(-t/(lc*.6)))*1.2);s&&(s.style.width=`${i}%`)},250)}function Ft(){us&&(clearInterval(us),us=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const s=document.getElementById(`pdot-${e}`);s&&(s.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function bs(t,e=""){const s={pass:'',warning:'',fail:'',info:''};return``}function Ud(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function bv(){return _g({bundle:y.artifactBundle,reviewResult:y.step3Result})}function Ev(t){return` +
      + ${bs(t.severity)}
      ${j(t.message)}
      ${t.suggestion?`
      ${j(t.suggestion)}
      `:""} ${j(t.source)}
      - `}function Jm(t){return` + `}function Sv(t){return`
    • ${j(t.title)} ${t.detail&&t.detail!==t.title?`

      ${j(t.detail)}

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

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

      +

      ${bs("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=>`
      • @@ -234,7 +238,7 @@ Error: ${h} ${a}
      -
    - `}function Zm(t){var l,u,c;const e=t.artifacts.find(d=>d.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const s={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],r=e.findings.length?e.findings.map(Km).join(""):`
    ${ys(s.icon)} ${j(s.message)}
    `,i=(l=e.dependencies)!=null&&l.length?e.dependencies.map(d=>` + `}function kv(t){var l,u,c;const e=t.artifacts.find(d=>d.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const s={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],r=e.findings.length?e.findings.map(Ev).join(""):`
    ${bs(s.icon)} ${j(s.message)}
    `,i=(l=e.dependencies)!=null&&l.length?e.dependencies.map(d=>`
  • ${j(d.name)}${d.version?` ${j(d.version)}`:""}${d.reason?`

    ${j(d.reason)}

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

    ${j(d.description)}

    `:""}
  • `).join(""):'
  • No relationships for this file
  • ';return`
    - ${ys(e.status)} ${j(Fd(e.status))} + ${bs(e.status)} ${j(Ud(e.status))}

    ${j(e.artifactName)}

    ${e.description?`

    ${j(e.description)}

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

    Manual FlutterFlow steps for this file

    -
      ${e.manualSteps.map(Jm).join("")}
    +
      ${e.manualSteps.map(Sv).join("")}
    `:""}
    @@ -308,17 +312,17 @@ Error: ${h}
      ${a}
    - `}function Xm(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(n=>` + `}function Iv(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(n=>` - `).join(""),r.onclick=n=>{var a;const o=n.target.closest(".artifact-tab");(a=o==null?void 0:o.dataset)!=null&&a.artifactId&&Pd(o.dataset.artifactId)}),e&&e.classList.add("visible")}function ha(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),s=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=Gm(),o=Ko();if(Ym(n),Xm(n),e&&(e.textContent=""),e){const a=nd(o);e.innerHTML=a}s&&(s.innerHTML=Zm(n)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Bi(t,e){y.selectedArtifactId||(y.selectedArtifactId=oi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),ha(),Gt();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function Pd(t){y.selectedArtifactId=t,y.resultsViewMode="file",ha()}function Qm(){y.resultsViewMode="summary",ha()}function ev(){const t=document.getElementById("btn-copy-results"),e=Ko();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function tv(t){const e=document.getElementById("btn-feedback-up"),s=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),s.classList.remove("active-down")):(s.classList.toggle("active-down"),e.classList.remove("active-up")),sa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function sv(){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 Ad(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=ev;window.selectArtifact=Pd;window.selectResultsSummary=Qm;window.submitResultsFeedback=tv;window.showErrorInputPanel=sv;window.hideErrorInputPanel=Ad; + `).join(""),r.onclick=n=>{var a;const o=n.target.closest(".artifact-tab");(a=o==null?void 0:o.dataset)!=null&&a.artifactId&&Hd(o.dataset.artifactId)}),e&&e.classList.add("visible")}function ya(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),s=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=bv(),o=ta();if(xv(n),Iv(n),e&&(e.textContent=""),e){const a=md(o);e.innerHTML=a}s&&(s.innerHTML=kv(n)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Wi(t,e){y.selectedArtifactId||(y.selectedArtifactId=li(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),ya(),Jt();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function Hd(t){y.selectedArtifactId=t,y.resultsViewMode="file",ya()}function Cv(){y.resultsViewMode="summary",ya()}function Fv(){const t=document.getElementById("btn-copy-results"),e=ta();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function Pv(t){const e=document.getElementById("btn-feedback-up"),s=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),s.classList.remove("active-down")):(s.classList.toggle("active-down"),e.classList.remove("active-up"));const r=t==="up"?"thumbsUp":"thumbsDown";ca(r,y.step2Result,y.step1Result),tt("Generation Feedback",{feedback:r})}function Av(){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 Wd(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=Fv;window.selectArtifact=Hd;window.selectResultsSummary=Cv;window.submitResultsFeedback=Pv;window.showErrorInputPanel=Av;window.hideErrorInputPanel=Wd; diff --git a/dist/index.html b/dist/index.html index c27ee60..8f2be7c 100644 --- a/dist/index.html +++ b/dist/index.html @@ -717,10 +717,10 @@ display: flex; align-items: flex-start; gap: 9px; - color: #78350f; + color: #3f3f46; font-size: 12px; } - .manual-step p { margin-top: 3px; color: #92400e; line-height: 1.45; } + .manual-step p { margin-top: 3px; color: #52525b; line-height: 1.45; } .results-summary-detail { flex: 1; min-height: 0; @@ -1244,18 +1244,24 @@ .summary-manual-callout { margin-top: 18px; padding: 13px 15px; - border: 1px solid #fed7aa; + border: 1px solid #fde68a; border-radius: 8px; - background: #fff7ed; + background: #fffbeb; } .summary-manual-callout h3 { display: flex; align-items: center; gap: 7px; - color: #9a3412; + color: #b45309; font-size: 13px; font-weight: 750; } + .summary-manual-lead { + margin: 6px 0 0; + color: #92400e; + font-size: 12px; + line-height: 1.45; + } .summary-manual-callout h3 .review-status-icon { width: 16px; height: 16px; @@ -1268,12 +1274,12 @@ list-style: disc; } .summary-manual-callout li { - color: #7c2d12; + color: #3f3f46; font-size: 14px; line-height: 1.45; } - .summary-manual-callout li strong { font-weight: 700; } - .summary-manual-callout li span { display: block; margin-top: 2px; color: #9a3412; } + .summary-manual-callout li strong { font-weight: 700; color: #27272a; } + .summary-manual-callout li span { display: block; margin-top: 2px; color: #52525b; } .summary-findings { display: grid; gap: 7px; @@ -2358,7 +2364,7 @@ .pm-cards { padding: 0 16px; } } - +
    @@ -2456,7 +2462,6 @@ Prompt Architect
    - Gemini 3.6 Flash
    @@ -2473,7 +2478,6 @@ Code Generator
    - Gemini 3.6 Flash
    @@ -2490,7 +2494,6 @@ Code Review
    - Gemini 3.6 Flash
    diff --git a/index.html b/index.html index b572fcd..33dbfe8 100644 --- a/index.html +++ b/index.html @@ -717,10 +717,10 @@ display: flex; align-items: flex-start; gap: 9px; - color: #78350f; + color: #3f3f46; font-size: 12px; } - .manual-step p { margin-top: 3px; color: #92400e; line-height: 1.45; } + .manual-step p { margin-top: 3px; color: #52525b; line-height: 1.45; } .results-summary-detail { flex: 1; min-height: 0; @@ -1244,18 +1244,24 @@ .summary-manual-callout { margin-top: 18px; padding: 13px 15px; - border: 1px solid #fed7aa; + border: 1px solid #fde68a; border-radius: 8px; - background: #fff7ed; + background: #fffbeb; } .summary-manual-callout h3 { display: flex; align-items: center; gap: 7px; - color: #9a3412; + color: #b45309; font-size: 13px; font-weight: 750; } + .summary-manual-lead { + margin: 6px 0 0; + color: #92400e; + font-size: 12px; + line-height: 1.45; + } .summary-manual-callout h3 .review-status-icon { width: 16px; height: 16px; @@ -1268,12 +1274,12 @@ list-style: disc; } .summary-manual-callout li { - color: #7c2d12; + color: #3f3f46; font-size: 14px; line-height: 1.45; } - .summary-manual-callout li strong { font-weight: 700; } - .summary-manual-callout li span { display: block; margin-top: 2px; color: #9a3412; } + .summary-manual-callout li strong { font-weight: 700; color: #27272a; } + .summary-manual-callout li span { display: block; margin-top: 2px; color: #52525b; } .summary-findings { display: grid; gap: 7px; @@ -2455,7 +2461,6 @@ Prompt Architect
    - Gemini 3.6 Flash
    @@ -2472,7 +2477,6 @@ Code Generator
    - Gemini 3.6 Flash
    @@ -2489,7 +2493,6 @@ Code Review
    - Gemini 3.6 Flash
    diff --git a/src/artifactBundle.js b/src/artifactBundle.js index ffc86ea..2a121f7 100644 --- a/src/artifactBundle.js +++ b/src/artifactBundle.js @@ -79,6 +79,10 @@ export function normalizeDependencies(rawDependencies) { return { name, version: dep.version || null, + // Set only when the code will not compile below this version. It is + // the one thing that can overrule a version the project already + // declares, so an unflagged version stays advisory. + versionRequired: Boolean(dep.versionRequired || dep.required), inferred: Boolean(dep.inferred), ...(dep.reason ? { reason: dep.reason } : {}), }; diff --git a/src/artifactBundle.test.js b/src/artifactBundle.test.js index 2bf7129..8e725e2 100644 --- a/src/artifactBundle.test.js +++ b/src/artifactBundle.test.js @@ -22,7 +22,7 @@ test("normalizes a single widget fixture into a one-artifact bundle", () => { assert.equal(bundle.artifacts[0].codeType, "W"); assert.deepEqual(bundle.deployOrder, ["custom-widget-tool-call-card"]); assert.deepEqual(bundle.artifacts[0].dependencies, [ - { name: "agent_kit", version: "^0.1.2", inferred: false }, + { name: "agent_kit", version: "^0.1.2", versionRequired: false, inferred: false }, ]); }); diff --git a/src/bundleDeployPlanner.js b/src/bundleDeployPlanner.js index 40edd2f..694a851 100644 --- a/src/bundleDeployPlanner.js +++ b/src/bundleDeployPlanner.js @@ -46,11 +46,16 @@ function toFileName(artifact) { return source.endsWith(".dart") ? source : `${source}.dart`; } +// name -> the minimum version the code genuinely needs, or "" for "just make +// sure this package is there". A version is only carried through when the +// generating stage flagged it as required; otherwise the deploy picks the +// version, since a package the project already has should keep its own. function toDependencyMap(dependencies = []) { return dependencies.reduce((acc, dependency) => { const name = dependency.name || dependency.package; if (!name || name === "flutter") return acc; - acc[name] = dependency.version || ""; + const required = dependency.versionRequired || dependency.required; + acc[name] = required ? dependency.version || "" : ""; return acc; }, {}); } @@ -143,26 +148,21 @@ export function buildBundleDeployPlan(bundle, options = {}) { // A declared dependency list can miss a package the code actually imports. // FlutterFlow rejects a push whose pubspec.yaml omits an imported package, // so every artifact's code is also scanned directly as a safety net. - // Declared versions always win over this generic fallback. + // + // A detected package carries no version: the deploy resolves one against the + // project's own pubspec and SDK. Naming a version here would be a guess, and + // the guess this replaced (`^1.0.0`) pinned every package to its first major. const detectedDependencies = {}; selected.forEach((artifact) => { extractPackageImports(artifact.code || "").forEach((name) => { if (!(name in declaredDependencies)) { - detectedDependencies[name] = "^1.0.0"; + detectedDependencies[name] = ""; } }); }); const dependencies = { ...detectedDependencies, ...declaredDependencies }; - selected.forEach((artifact) => { - (artifact.dependencies || []).forEach((dependency) => { - const name = dependency.name || dependency.package; - if (name && !dependency.version) { - warnings.push(`${artifact.artifactName || artifact.id} dependency "${name}" has no explicit version.`); - } - }); - }); const errors = getDuplicateTargetErrors(fileEntries); return { diff --git a/src/bundleDeployPlanner.test.js b/src/bundleDeployPlanner.test.js index 9ffec46..f5bbc23 100644 --- a/src/bundleDeployPlanner.test.js +++ b/src/bundleDeployPlanner.test.js @@ -30,7 +30,7 @@ test("builds deploy entries in deploy order", () => { assert.equal(plan.fileEntries[1].path, "lib/custom_code/widgets/widget_a.dart"); }); -test("merges bundle and artifact dependencies with missing-version warnings", () => { +test("merges bundle and artifact dependencies", () => { const plan = buildBundleDeployPlan({ dependencies: [{ name: "intl", version: "^0.20.0" }], artifacts: [ @@ -45,8 +45,47 @@ test("merges bundle and artifact dependencies with missing-version warnings", () ], }); + // An unflagged version is advisory only — the deploy resolves the real one + // against the project's own pubspec — and a dependency without a version is + // the normal case, not a warning. + assert.deepEqual(plan.dependencies, { intl: "", http: "" }); + assert.deepEqual(plan.warnings, []); +}); + +test("carries through only a version the generator flagged as required", () => { + const plan = buildBundleDeployPlan({ + artifacts: [ + { + id: "action-a", + artifactType: "CustomAction", + artifactName: "loadThing", + fileName: "load_thing.dart", + code: "Future loadThing() async {}", + dependencies: [ + { package: "intl", version: "^0.20.0", versionRequired: true }, + { package: "http", version: "^1.2.0" }, + ], + }, + ], + }); + assert.deepEqual(plan.dependencies, { intl: "^0.20.0", http: "" }); - assert.deepEqual(plan.warnings, ['loadThing dependency "http" has no explicit version.']); +}); + +test("gives a package found only in the code no invented version", () => { + const plan = buildBundleDeployPlan({ + artifacts: [ + { + id: "action-a", + artifactType: "CustomAction", + artifactName: "record", + fileName: "record_audio.dart", + code: "import 'package:record/record.dart';\nFuture recordAudio() async {}", + }, + ], + }); + + assert.deepEqual(plan.dependencies, { record: "" }); }); test("uses FlutterFlow custom functions file for function artifacts", () => { diff --git a/src/dependencyResolution.js b/src/dependencyResolution.js new file mode 100644 index 0000000..273ec16 --- /dev/null +++ b/src/dependencyResolution.js @@ -0,0 +1,138 @@ +// Decides the version constraint to write for every package generated code +// needs, given what the project's pubspec.yaml already declares. +// +// Three rules, in order: +// +// 1/2. The package is already declared — by FlutterFlow's own base pubspec +// or by the user's custom dependencies. Keep their constraint. An +// exported pubspec draws no line between the two, and either way the +// project's own choice outranks a generated one. +// The single exception: the generated code declares a minimum the +// existing constraint provably cannot resolve. Then the constraint is +// rewritten, because the alternative is code that cannot compile. +// +// 3. The package is absent. Add the newest release that the project's +// declared Dart/Flutter SDK floor can build, read live from pub.dev. +// +// The rule this replaces wrote `^1.0.0` for every package, which pinned new +// dependencies to their first major release. + +import { + parseEnvironmentConstraints, + parseExistingDependencies, +} from "./pubspecSync.js"; +import { constraintCanReach, constraintLowerBound } from "./pubVersions.js"; +import { resolveLatestCompatibleVersions } from "./pubRegistry.js"; + +/** + * @typedef {Object} DependencyPlan + * @property {Object} additions - name -> constraint to add + * @property {Object} overrides - name -> constraint to rewrite + * @property {Array<{name: string, constraint: string}>} kept - left as declared + * @property {string[]} warnings - what the deploying user needs to know + * @property {{dartSdkFloor: string|null, flutterSdkFloor: string|null}} sdk + */ + +/** + * Works out what each requested package's constraint should be. + * + * @param {string} yamlContent - The project's current pubspec.yaml + * @param {Object} requestedDependencies - name -> the minimum + * version the generated code genuinely requires, or "" when it has no + * opinion and simply needs the package present + * @param {Object} options + * @param {Function} options.resolveVersions - Injectable registry lookup + * @returns {Promise} + */ +export async function planDependencyChanges( + yamlContent, + requestedDependencies = {}, + options = {}, +) { + const { resolveVersions = resolveLatestCompatibleVersions } = options; + + const requested = Object.entries(requestedDependencies).filter( + // The Flutter SDK entry is always present and is never a pub package. + ([name]) => name && name !== "flutter", + ); + + const environment = parseEnvironmentConstraints(yamlContent); + const sdk = { + dartSdkFloor: constraintLowerBound(environment.sdk), + flutterSdkFloor: constraintLowerBound(environment.flutter), + }; + + const plan = { + additions: {}, + overrides: {}, + kept: [], + warnings: [], + sdk, + }; + if (requested.length === 0) return plan; + + const declared = parseExistingDependencies(yamlContent); + const missing = []; + + for (const [name, requiredMinimum] of requested) { + const existing = declared.get(name); + if (!existing) { + missing.push(name); + continue; + } + + // Rules 1 and 2: the project's own constraint stands. + // + // The requirement may arrive as a bare version or as a constraint + // (`^5.1.2`); either way only its floor matters. Anything unreadable is + // treated as "no opinion" rather than as grounds to rewrite a working pin. + const minimum = constraintLowerBound(requiredMinimum); + if (!minimum) { + plan.kept.push({ name, constraint: existing.constraint }); + continue; + } + + // Checked before the constraint itself: a block-form entry has no scalar + // constraint, and an empty one would read as `any` and look satisfiable. + if (!existing.isScalar) { + plan.warnings.push( + `"${name}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${minimum}. ` + + "Left as-is — update it yourself if the build fails.", + ); + plan.kept.push({ name, constraint: existing.constraint }); + continue; + } + + if (constraintCanReach(existing.constraint, minimum)) { + plan.kept.push({ name, constraint: existing.constraint }); + continue; + } + + plan.overrides[name] = `^${minimum}`; + plan.warnings.push( + `"${name}" was pinned to ${existing.constraint} in your project, which cannot resolve the ${minimum} the generated code needs. ` + + `Raising it to ^${minimum} — this changes a dependency the rest of your app also uses.`, + ); + } + + // Rule 3: everything the project does not have yet. + if (missing.length > 0) { + const resolved = await resolveVersions(missing, sdk); + for (const name of missing) { + const result = resolved.get(name); + if (result?.constraint) { + plan.additions[name] = result.constraint; + continue; + } + // Never invent a pin. `any` lets pub pick a version that fits the + // project's SDK, which is strictly better than a guessed number. + plan.additions[name] = ""; + plan.warnings.push( + `Could not determine a version for "${name}" (${result?.error || "lookup failed"}). ` + + "Added without a version constraint — set one in FlutterFlow if the build picks the wrong release.", + ); + } + } + + return plan; +} diff --git a/src/dependencyResolution.test.js b/src/dependencyResolution.test.js new file mode 100644 index 0000000..1fa0ed3 --- /dev/null +++ b/src/dependencyResolution.test.js @@ -0,0 +1,181 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { planDependencyChanges } from "./dependencyResolution.js"; +import { applyDependencyOverrides, mergeDependenciesIntoYaml } from "./pubspecSync.js"; + +const PROJECT_PUBSPEC = `name: my_ff_app +description: A FlutterFlow project. + +environment: + sdk: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" + +dependencies: + flutter: + sdk: flutter + path_provider: ^2.1.2 + # pinned deliberately after a regression + intl: 0.19.0 + video_player: + git: + url: https://example.com/video_player.git +`; + +// name -> constraint, standing in for the pub.dev lookup. +function stubResolver(available) { + return async (names) => + new Map( + names.map((name) => [ + name, + available[name] + ? { constraint: available[name], version: available[name].slice(1), error: null } + : { constraint: null, version: null, error: "not found on pub.dev" }, + ]), + ); +} + +test("reads the project's SDK floors out of the environment block", async () => { + const plan = await planDependencyChanges(PROJECT_PUBSPEC, {}, {}); + assert.deepEqual(plan.sdk, { dartSdkFloor: "3.5.0", flutterSdkFloor: "3.24.0" }); +}); + +test("rule 3: adds a missing package at the newest SDK-compatible release", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { record: "", permission_handler: "" }, + { resolveVersions: stubResolver({ record: "^6.2.1", permission_handler: "^11.3.1" }) }, + ); + + assert.deepEqual(plan.additions, { record: "^6.2.1", permission_handler: "^11.3.1" }); + assert.deepEqual(plan.overrides, {}); + assert.deepEqual(plan.warnings, []); +}); + +test("rule 3: passes the project's SDK floors to the registry lookup", async () => { + let seen = null; + await planDependencyChanges( + PROJECT_PUBSPEC, + { record: "" }, + { + resolveVersions: async (names, sdk) => { + seen = sdk; + return new Map(names.map((name) => [name, { constraint: "^6.2.1", error: null }])); + }, + }, + ); + assert.deepEqual(seen, { dartSdkFloor: "3.5.0", flutterSdkFloor: "3.24.0" }); +}); + +test("rules 1 and 2: keeps the version the project already declares", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { path_provider: "", intl: "" }, + { resolveVersions: stubResolver({}) }, + ); + + assert.deepEqual(plan.additions, {}); + assert.deepEqual(plan.overrides, {}); + assert.deepEqual(plan.kept, [ + { name: "path_provider", constraint: "^2.1.2" }, + { name: "intl", constraint: "0.19.0" }, + ]); +}); + +test("rules 1 and 2: keeps a constraint that already reaches the required minimum", async () => { + // ^2.1.2 resolves 2.1.5 on its own; rewriting it would be pointless churn. + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { path_provider: "2.1.5" }, + { resolveVersions: stubResolver({}) }, + ); + assert.deepEqual(plan.overrides, {}); + assert.deepEqual(plan.kept, [{ name: "path_provider", constraint: "^2.1.2" }]); +}); + +test("overrides only a constraint that provably cannot reach the requirement", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { intl: "0.20.0" }, + { resolveVersions: stubResolver({}) }, + ); + + assert.deepEqual(plan.overrides, { intl: "^0.20.0" }); + assert.equal(plan.warnings.length, 1); + assert.match(plan.warnings[0], /pinned to 0\.19\.0/); + assert.match(plan.warnings[0], /rest of your app/); +}); + +test("accepts a requirement written as a constraint, not just a bare version", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { intl: "^0.20.0" }, + { resolveVersions: stubResolver({}) }, + ); + assert.deepEqual(plan.overrides, { intl: "^0.20.0" }); +}); + +test("treats an unreadable requirement as no opinion, not as grounds to rewrite", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { intl: "latest", path_provider: "any" }, + { resolveVersions: stubResolver({}) }, + ); + assert.deepEqual(plan.overrides, {}); + assert.deepEqual(plan.kept, [ + { name: "intl", constraint: "0.19.0" }, + { name: "path_provider", constraint: "^2.1.2" }, + ]); +}); + +test("never rewrites a git or path dependency into a version constraint", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { video_player: "3.0.0" }, + { resolveVersions: stubResolver({}) }, + ); + + assert.deepEqual(plan.overrides, {}); + assert.match(plan.warnings[0], /git, path, or SDK source/); +}); + +test("adds without a constraint rather than inventing one when lookup fails", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { mystery_package: "" }, + { resolveVersions: stubResolver({}) }, + ); + + assert.deepEqual(plan.additions, { mystery_package: "" }); + assert.match(plan.warnings[0], /Could not determine a version/); + // The point of the fix: no fabricated version number reaches the pubspec. + assert.doesNotMatch(plan.warnings[0], /\^1\.0\.0/); +}); + +test("ignores the flutter SDK entry", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { flutter: "3.24.0" }, + { resolveVersions: stubResolver({}) }, + ); + assert.deepEqual(plan.additions, {}); + assert.deepEqual(plan.overrides, {}); +}); + +test("produces a pubspec carrying real versions end to end", async () => { + const plan = await planDependencyChanges( + PROJECT_PUBSPEC, + { record: "", path_provider: "", intl: "0.20.0" }, + { resolveVersions: stubResolver({ record: "^6.2.1" }) }, + ); + + const overridden = applyDependencyOverrides(PROJECT_PUBSPEC, plan.overrides); + const merged = mergeDependenciesIntoYaml(overridden.yaml, plan.additions); + + assert.match(merged.yaml, /^ {2}record: \^6\.2\.1$/m); + // The user's own path_provider line is untouched. + assert.match(merged.yaml, /^ {2}path_provider: \^2\.1\.2$/m); + // An override keeps the comment explaining the original pin. + assert.match(merged.yaml, /^ {2}intl: \^0\.20\.0$/m); + assert.match(merged.yaml, /# pinned deliberately after a regression/); + assert.doesNotMatch(merged.yaml, /\^1\.0\.0/); +}); diff --git a/src/flutterFlowArtifactValidation.js b/src/flutterFlowArtifactValidation.js index 62e6eb0..08d511f 100644 --- a/src/flutterFlowArtifactValidation.js +++ b/src/flutterFlowArtifactValidation.js @@ -1,3 +1,5 @@ +import { deriveIdentifierName } from "./flutterFlowSyncMetadata.js"; + const SUPPORTED_TYPES = new Set([ "CustomWidget", "CustomAction", @@ -381,15 +383,18 @@ function pascalCaseToSnakeCase(name) { } /** - * Checks that a CustomClass/CodeFile's file name is the exact snake_case - * conversion of a class or enum it declares. FlutterFlow derives the file's - * identity from this relationship, not the other way around - an extra, - * missing, or different word in the file name is a mismatch even though the - * file compiles and runs fine as plain Dart. + * Checks whether a CustomClass/CodeFile's file name is the snake_case form of a + * class or enum it declares. This is a convention, NOT a FlutterFlow + * requirement: a Code File's path is a free-text field in the FlutterFlow + * editor, so `q_a_service.dart` holding `class QAService` is perfectly valid. + * It stays worth surfacing because provisioning derives the Code File's name + * from the file name (see flutterFlowCodeFileProvisioning.js), so agreeing + * names keep the FlutterFlow entry recognisable - which makes this advice, not + * a blocker. * @param {string} fileName - Bare name or full path, e.g. * "pipedream_integration_model.dart" or "lib/custom_code/pipedream_integration_model.dart" * @param {string} code - Dart source - * @returns {string|null} Error message, or null if a declared type matches + * @returns {string|null} Advisory message, or null if a declared type matches */ export function getCustomClassFileNameError(fileName, code) { const declaredTypes = getDeclaredDartTypes(code); @@ -403,8 +408,46 @@ export function getCustomClassFileNameError(fileName, code) { if (matchesSomeDeclaredType) return null; const [primary] = declaredTypes; - const expectedFileName = `${pascalCaseToSnakeCase(primary)}.dart`; - return `File name "${fileName}" does not match declared class "${primary}". FlutterFlow expects the file to be named "${expectedFileName}" - rename the file (or the class) so they agree exactly.`; + const suggestedFileName = `${pascalCaseToSnakeCase(primary)}.dart`; + return `File name "${fileName}" does not match declared class "${primary}". FlutterFlow accepts this, but naming the file "${suggestedFileName}" keeps the Code File recognisable in the editor.`; +} + +/** + * Converts a Dart identifier to the file name FlutterFlow files it under - + * an underscore before every capital, all lowercase. + * @param {string} name - Dart identifier, e.g. "initQAAnalytics" + * @returns {string} File stem, e.g. "init_q_a_analytics" + */ +function identifierToFlutterFlowFileStem(name) { + return String(name || "") + .replace(/([A-Z])/g, "_$1") + .toLowerCase() + .replace(/^_/, ""); +} + +/** + * Checks that a CustomAction's file name yields the function the code actually + * declares. FlutterFlow reads the action's identity back out of the file name + * and then looks for that exact declaration, so an acronym written the human + * way ("init_qa_analytics.dart" for `initQAAnalytics`) resolves to a name that + * is nowhere in the file and the commit fails with + * `Action "initQaAnalytics" declaration not found.` + * @param {string} fileName - Bare name or full path + * @param {string} code - Dart source + * @param {string} [artifactName] - Action name, used to pick the entry point + * @returns {string|null} Error message, or null when the names agree + */ +export function getCustomActionFileNameError(fileName, code, artifactName = "") { + const declaredName = getCustomActionSignature(code, artifactName)?.functionName; + // No Future function at all is a separate finding, not a naming problem. + if (!declaredName) return null; + + const baseName = String(fileName || "").split("/").pop(); + const derivedName = deriveIdentifierName(baseName, "A"); + if (derivedName === declaredName) return null; + + const expectedFileName = `${identifierToFlutterFlowFileStem(declaredName)}.dart`; + return `File name "${baseName}" does not match Action "${declaredName}". FlutterFlow derives the action from the file name, so it looks for "${derivedName}" and reports Action "${derivedName}" declaration not found. Rename the file to "${expectedFileName}" - FlutterFlow puts an underscore before every capital - or rename the function to "${derivedName}".`; } function hasCustomActionFutureFunction(code = "", functionName = "") { @@ -512,6 +555,15 @@ export function validateArtifactCompatibility(artifact, options = {}) { if (returnTypeError) { findings.push(createFinding(artifact, "error", returnTypeError)); } + + const fileNameError = getCustomActionFileNameError( + fileName, + code, + artifact.artifactName, + ); + if (fileNameError) { + findings.push(createFinding(artifact, "error", fileNameError)); + } } if (artifact.artifactType === "CustomFunction" && /class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(code)) { @@ -525,7 +577,7 @@ export function validateArtifactCompatibility(artifact, options = {}) { if (artifact.artifactType === "CustomClass" || artifact.artifactType === "CodeFile") { const fileNameError = getCustomClassFileNameError(fileName, code); if (fileNameError) { - findings.push(createFinding(artifact, "error", fileNameError)); + findings.push(createFinding(artifact, "warning", fileNameError)); } } diff --git a/src/flutterFlowArtifactValidation.test.js b/src/flutterFlowArtifactValidation.test.js index 3fd0e47..221d4ae 100644 --- a/src/flutterFlowArtifactValidation.test.js +++ b/src/flutterFlowArtifactValidation.test.js @@ -204,11 +204,14 @@ test("allows FlutterFlow Data Type structs and supported primitives", () => { ]; for (const code of supported) { + // FlutterFlow files an action under its function name, so the fixture has + // to name the file after the function or the naming rule fires instead. + const functionName = code.match(/\b(\w+)\(/)[1]; const findings = validateArtifactCompatibility({ id: "supported", - artifactName: "supported", + artifactName: functionName, artifactType: "CustomAction", - fileName: "supported.dart", + fileName: `${functionName.replace(/([A-Z])/g, "_$1").toLowerCase()}.dart`, code, }); @@ -274,7 +277,81 @@ test("ignores type names that only appear in comments or strings", () => { assert.deepEqual(findings, []); }); -test("rejects a CustomClass file name with a word not in the declared class", () => { +const INIT_QA_ANALYTICS_CODE = [ + "import 'package:flutter/material.dart';", + "import '/custom_code/qa.dart';", + "", + "Future initQAAnalytics(", + " bool isInternal,", + " String? buildNumber,", + " bool? captureErrors,", + ") async {", + " await QA.i.install(isInternal: isInternal, buildNumber: buildNumber);", + "}", +].join("\n"); + +test("rejects a CustomAction file name that drops an acronym's capitals", () => { + const findings = validateArtifactCompatibility({ + id: "init-qa-analytics", + artifactName: "initQAAnalytics", + artifactType: "CustomAction", + fileName: "init_qa_analytics.dart", + code: INIT_QA_ANALYTICS_CODE, + }); + + assert.equal(findings.length, 1); + assert.equal(findings[0].severity, "error"); + assert.match(findings[0].message, /init_qa_analytics\.dart/); + assert.match(findings[0].message, /initQAAnalytics/); + // The name FlutterFlow reports back, and the file name that fixes it. + assert.match(findings[0].message, /initQaAnalytics/); + assert.match(findings[0].message, /init_q_a_analytics\.dart/); +}); + +test("allows a CustomAction file name using FlutterFlow's per-capital underscores", () => { + const findings = validateArtifactCompatibility({ + id: "init-qa-analytics", + artifactName: "initQAAnalytics", + artifactType: "CustomAction", + fileName: "init_q_a_analytics.dart", + code: INIT_QA_ANALYTICS_CODE, + }); + + assert.deepEqual(findings, []); +}); + +test("allows CustomAction file names without acronyms", () => { + for (const [fileName, functionName] of [ + ["log_app_error.dart", "logAppError"], + ["log_op_failed.dart", "logOpFailed"], + ]) { + const findings = validateArtifactCompatibility({ + id: fileName, + artifactName: functionName, + artifactType: "CustomAction", + fileName, + code: `Future ${functionName}(String message) async {}`, + }); + + assert.deepEqual(findings, [], `${fileName} should pass`); + } +}); + +test("does not report a naming error when the action has no Future function", () => { + const findings = validateArtifactCompatibility({ + id: "init-qa-analytics", + artifactName: "initQAAnalytics", + artifactType: "CustomAction", + fileName: "init_qa_analytics.dart", + code: "void initQAAnalytics() {}", + }); + + assert.equal(findings.length, 1); + assert.equal(findings[0].severity, "warning"); + assert.match(findings[0].message, /async Future function/); +}); + +test("advises, without blocking, on a CustomClass file name that is not its class", () => { const findings = validateArtifactCompatibility({ id: "pipedream-integration", artifactName: "PipedreamIntegration", @@ -284,7 +361,8 @@ test("rejects a CustomClass file name with a word not in the declared class", () }); assert.equal(findings.length, 1); - assert.equal(findings[0].severity, "error"); + // A Code File path is author-controlled in FlutterFlow, so this never blocks. + assert.equal(findings[0].severity, "warning"); assert.match(findings[0].message, /pipedream_integration_model\.dart/); assert.match(findings[0].message, /PipedreamIntegration/); assert.match(findings[0].message, /pipedream_integration\.dart/); diff --git a/src/flutterFlowSyncMetadata.js b/src/flutterFlowSyncMetadata.js index 1c822f0..7b6c258 100644 --- a/src/flutterFlowSyncMetadata.js +++ b/src/flutterFlowSyncMetadata.js @@ -20,7 +20,17 @@ export function extractTopLevelFunctionNames(source) { return names; } -function deriveIdentifierName(fileName, codeType) { +/** + * Derives the identifier FlutterFlow uses to find a file's declaration from the + * file name. FlutterFlow's own snake_case is naive - one underscore before + * every capital - so `initQAAnalytics` is filed as `init_q_a_analytics.dart`, + * not the human-idiomatic `init_qa_analytics.dart`. Only the naive form + * round-trips back to the identifier FlutterFlow looks for. + * @param {string} fileName - Bare file name, e.g. "init_q_a_analytics.dart" + * @param {string} codeType - Code type (A, W, F, C) + * @returns {string} Identifier sent as old/new_identifier_name + */ +export function deriveIdentifierName(fileName, codeType) { const baseName = fileName.replace(/\.dart$/, ""); if (codeType === "W") { return baseName.replace(/(^|_)(\w)/g, (_, __, character) => diff --git a/src/multiCodeFixtures.test.js b/src/multiCodeFixtures.test.js index 1854890..ff06441 100644 --- a/src/multiCodeFixtures.test.js +++ b/src/multiCodeFixtures.test.js @@ -62,7 +62,9 @@ test("package-backed fixture treats agent_kit as dependency metadata", () => { }); const plan = buildBundleDeployPlan(bundle); - assert.deepEqual(plan.dependencies, { agent_kit: "^0.1.0" }); + // The package reaches the deploy; its version does not, because nothing + // flagged ^0.1.0 as required and the project may already have its own. + assert.deepEqual(plan.dependencies, { agent_kit: "" }); assert.equal(plan.fileEntries[0].path, "lib/custom_code/widgets/agent_view.dart"); }); diff --git a/src/pipelineContracts.js b/src/pipelineContracts.js index 16fc5ff..127fa9f 100644 --- a/src/pipelineContracts.js +++ b/src/pipelineContracts.js @@ -42,6 +42,19 @@ export function buildReviewPrompt(generatedBundle) { bundleReview: ["status", "score", "summary", "manualActions", "findings"], scoreRange: [0, 100], eachArtifact: ["id", "review.status", "review.findings"], + // Without this the review volunteers "next steps" that FlutterFlow + // already handles - telling the user to create the very action the + // deploy creates, or to declare parameters read off the signature. + 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.", + }, }, }); } diff --git a/src/pipelineContracts.test.js b/src/pipelineContracts.test.js index 4fc8447..ec85ced 100644 --- a/src/pipelineContracts.test.js +++ b/src/pipelineContracts.test.js @@ -50,6 +50,20 @@ test("review prompt sends generated bundle data without system instructions", () "review.findings", ]); assert.doesNotMatch(prompt, /Review every generated artifact/); + + // Manual actions must be constrained, or the review volunteers work + // FlutterFlow already does - creating the action, declaring its parameters. + const manualActions = payload.outputRequirements.manualActions; + assert.match(manualActions.definition, /will NOT do/); + assert.ok( + manualActions.exclude.some((rule) => /deploying the code creates it/.test(rule)), + "must exclude creating the artifact itself", + ); + assert.ok( + manualActions.exclude.some((rule) => /function signature/.test(rule)), + "must exclude parameters FlutterFlow derives", + ); + assert.match(manualActions.preferEmpty, /empty array/); }); test("BuildShip context only sends runtime state", () => { diff --git a/src/pubRegistry.js b/src/pubRegistry.js new file mode 100644 index 0000000..ff6283b --- /dev/null +++ b/src/pubRegistry.js @@ -0,0 +1,140 @@ +// Resolves the version of a pub.dev package to add to a project's pubspec. +// +// The alternative — writing a fixed constraint like `^1.0.0` — pins every new +// package to whatever shipped under its first major, which is how a project +// ends up depending on record 1.0.0 instead of a current release. The version +// has to come from the registry, measured against what the project can build. + +import { compareVersions, constraintContains, isPrerelease } from "./pubVersions.js"; + +export const PUB_API_BASE = "https://pub.dev/api/packages/"; + +// A registry lookup sits in the middle of a deploy the user is watching. +// Falling back to an unconstrained dependency beats stalling the push. +const LOOKUP_TIMEOUT_MS = 8000; + +/** + * Picks the newest release a project can actually build. + * + * Compatibility is judged against the SDK floor the project's own pubspec + * declares, not against the newest SDK that pub.dev knows about: a project + * whose `environment:` says `>=3.5.0` may well be built on a 3.5.x toolchain, + * and a package needing `^3.12.0` would not resolve there. + * + * @param {Object} packageDocument - A pub.dev `/api/packages/` response + * @param {Object} sdk + * @param {string|null} sdk.dartSdkFloor - Project's minimum Dart SDK + * @param {string|null} sdk.flutterSdkFloor - Project's minimum Flutter SDK + * @returns {{version: string, constraint: string}|null} null when no published + * release fits, so the caller can say so rather than invent a pin. + */ +export function selectCompatibleVersion(packageDocument, sdk = {}) { + const { dartSdkFloor = null, flutterSdkFloor = null } = sdk; + const versions = Array.isArray(packageDocument?.versions) + ? packageDocument.versions + : []; + + let best = null; + for (const entry of versions) { + const version = entry?.version; + if (!version || entry.retracted || isPrerelease(version)) continue; + + const environment = entry.pubspec?.environment || {}; + // A package that declares no SDK range cannot be shown incompatible, and + // being older it only ever wins when nothing newer fits. + if ( + dartSdkFloor && + environment.sdk && + !constraintContains(environment.sdk, dartSdkFloor) + ) { + continue; + } + if ( + flutterSdkFloor && + environment.flutter && + !constraintContains(environment.flutter, flutterSdkFloor) + ) { + continue; + } + + if (!best || compareVersions(version, best) > 0) best = version; + } + + return best ? { version: best, constraint: `^${best}` } : null; +} + +/** + * Looks up the constraint to write for a package the project does not have. + * + * @param {string} name - Package name + * @param {Object} options + * @param {string|null} options.dartSdkFloor - Project's minimum Dart SDK + * @param {string|null} options.flutterSdkFloor - Project's minimum Flutter SDK + * @param {Function} options.fetchImpl - fetch, injectable for tests + * @returns {Promise<{name: string, constraint: string|null, version: string|null, error: string|null}>} + * Never throws: one unreachable package must not fail a deploy whose other + * packages resolved. + */ +export async function resolveLatestCompatibleVersion(name, options = {}) { + const { + dartSdkFloor = null, + flutterSdkFloor = null, + fetchImpl = fetch, + } = options; + + let packageDocument; + try { + const response = await fetchImpl(`${PUB_API_BASE}${encodeURIComponent(name)}`, { + signal: AbortSignal.timeout(LOOKUP_TIMEOUT_MS), + }); + if (!response.ok) { + return { + name, + constraint: null, + version: null, + error: + response.status === 404 + ? `"${name}" was not found on pub.dev` + : `pub.dev returned ${response.status} for "${name}"`, + }; + } + packageDocument = await response.json(); + } catch (error) { + return { + name, + constraint: null, + version: null, + error: `could not reach pub.dev for "${name}" (${error.message})`, + }; + } + + const selected = selectCompatibleVersion(packageDocument, { + dartSdkFloor, + flutterSdkFloor, + }); + if (!selected) { + return { + name, + constraint: null, + version: null, + error: dartSdkFloor + ? `no published "${name}" release supports Dart ${dartSdkFloor}` + : `no published "${name}" release could be read`, + }; + } + + return { name, ...selected, error: null }; +} + +/** + * Resolves several packages at once. + * @param {string[]} names - Package names + * @param {Object} options - Same options as resolveLatestCompatibleVersion + * @returns {Promise>} + */ +export async function resolveLatestCompatibleVersions(names, options = {}) { + const results = await Promise.all( + names.map((name) => resolveLatestCompatibleVersion(name, options)), + ); + return new Map(results.map(({ name, ...rest }) => [name, rest])); +} diff --git a/src/pubRegistry.test.js b/src/pubRegistry.test.js new file mode 100644 index 0000000..bbefab1 --- /dev/null +++ b/src/pubRegistry.test.js @@ -0,0 +1,130 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + resolveLatestCompatibleVersion, + resolveLatestCompatibleVersions, + selectCompatibleVersion, +} from "./pubRegistry.js"; + +// Trimmed from the real pub.dev response for `record`, which is exactly the +// case that exposed the bug: its current release needs a newer Dart than a +// long-lived FlutterFlow project declares. +const RECORD_PACKAGE = { + name: "record", + versions: [ + { version: "5.1.2", pubspec: { environment: { sdk: ">=3.0.0 <4.0.0", flutter: ">=3.10.0" } } }, + { version: "6.2.1", pubspec: { environment: { sdk: "^3.5.0", flutter: ">=3.24.0" } } }, + { version: "7.0.0", pubspec: { environment: { sdk: "^3.12.0", flutter: ">=3.44.0" } } }, + { version: "7.1.1", pubspec: { environment: { sdk: "^3.12.0", flutter: ">=3.44.0" } } }, + ], +}; + +function stubFetch(responses) { + return async (url) => { + const name = decodeURIComponent(url.split("/").pop()); + const entry = responses[name]; + if (!entry) return { ok: false, status: 404 }; + if (entry.throws) throw new Error(entry.throws); + return { ok: true, status: 200, json: async () => entry }; + }; +} + +test("picks the newest release the project's Dart floor can build", () => { + assert.deepEqual( + selectCompatibleVersion(RECORD_PACKAGE, { dartSdkFloor: "3.5.0" }), + { version: "6.2.1", constraint: "^6.2.1" }, + ); + assert.deepEqual( + selectCompatibleVersion(RECORD_PACKAGE, { dartSdkFloor: "3.12.0" }), + { version: "7.1.1", constraint: "^7.1.1" }, + ); +}); + +test("takes the newest release when the project declares no SDK floor", () => { + assert.equal(selectCompatibleVersion(RECORD_PACKAGE, {}).version, "7.1.1"); +}); + +test("honours a Flutter floor as well as a Dart floor", () => { + assert.equal( + selectCompatibleVersion(RECORD_PACKAGE, { + dartSdkFloor: "3.12.0", + flutterSdkFloor: "3.24.0", + }).version, + "6.2.1", + ); +}); + +test("skips retracted and prerelease versions", () => { + const document = { + versions: [ + { version: "1.0.0", pubspec: { environment: { sdk: "^3.0.0" } } }, + { version: "2.0.0", retracted: true, pubspec: { environment: { sdk: "^3.0.0" } } }, + { version: "3.0.0-beta.1", pubspec: { environment: { sdk: "^3.0.0" } } }, + ], + }; + assert.equal(selectCompatibleVersion(document, { dartSdkFloor: "3.5.0" }).version, "1.0.0"); +}); + +test("accepts a version that declares no SDK range", () => { + const document = { versions: [{ version: "0.9.0", pubspec: {} }] }; + assert.equal(selectCompatibleVersion(document, { dartSdkFloor: "3.5.0" }).version, "0.9.0"); +}); + +test("reports rather than guesses when nothing fits", () => { + assert.equal(selectCompatibleVersion(RECORD_PACKAGE, { dartSdkFloor: "2.12.0" }), null); + assert.equal(selectCompatibleVersion({ versions: [] }, {}), null); +}); + +test("resolves a package over the registry API", async () => { + const result = await resolveLatestCompatibleVersion("record", { + dartSdkFloor: "3.5.0", + fetchImpl: stubFetch({ record: RECORD_PACKAGE }), + }); + assert.deepEqual(result, { + name: "record", + version: "6.2.1", + constraint: "^6.2.1", + error: null, + }); +}); + +test("gives the lookup a deadline so a stalled registry cannot hang a deploy", async () => { + let seenSignal = null; + await resolveLatestCompatibleVersion("record", { + fetchImpl: async (_url, init) => { + seenSignal = init?.signal; + return { ok: true, status: 200, json: async () => RECORD_PACKAGE }; + }, + }); + assert.ok(seenSignal instanceof AbortSignal); +}); + +test("returns an error instead of throwing when a lookup fails", async () => { + const missing = await resolveLatestCompatibleVersion("nope", { + fetchImpl: stubFetch({}), + }); + assert.equal(missing.constraint, null); + assert.match(missing.error, /not found on pub\.dev/); + + const offline = await resolveLatestCompatibleVersion("record", { + fetchImpl: stubFetch({ record: { throws: "network down" } }), + }); + assert.equal(offline.constraint, null); + assert.match(offline.error, /could not reach pub\.dev/); + + const unsupported = await resolveLatestCompatibleVersion("record", { + dartSdkFloor: "2.12.0", + fetchImpl: stubFetch({ record: RECORD_PACKAGE }), + }); + assert.equal(unsupported.constraint, null); + assert.match(unsupported.error, /supports Dart 2\.12\.0/); +}); + +test("resolves several packages into a lookup map", async () => { + const resolved = await resolveLatestCompatibleVersions(["record", "ghost"], { + dartSdkFloor: "3.5.0", + fetchImpl: stubFetch({ record: RECORD_PACKAGE }), + }); + assert.equal(resolved.get("record").constraint, "^6.2.1"); + assert.equal(resolved.get("ghost").constraint, null); +}); diff --git a/src/pubVersions.js b/src/pubVersions.js new file mode 100644 index 0000000..e1195b9 --- /dev/null +++ b/src/pubVersions.js @@ -0,0 +1,204 @@ +// Semantic version and pub constraint arithmetic. +// +// Enough of pub's constraint grammar to answer the two questions the pubspec +// merge asks: "does this constraint admit that version?" and "can this +// constraint ever reach that version?". Deliberately not a full solver — no +// union constraints (`>=1.0.0 <2.0.0 || >=3.0.0`), which pub itself only +// accepts in dependency_overrides and which FlutterFlow never emits. + +const VERSION_PATTERN = + /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/; + +/** + * @param {string} value - A semantic version, e.g. "3.12.0" or "2.0.0-beta.1" + * @returns {{major: number, minor: number, patch: number, prerelease: string[]}|null} + */ +export function parseVersion(value) { + const match = String(value || "").trim().match(VERSION_PATTERN); + if (!match) return null; + return { + major: Number(match[1]), + minor: Number(match[2]), + patch: Number(match[3]), + prerelease: match[4] ? match[4].split(".") : [], + }; +} + +function comparePrerelease(a, b) { + // A release outranks any prerelease of the same version. + if (a.length === 0 && b.length === 0) return 0; + if (a.length === 0) return 1; + if (b.length === 0) return -1; + + for (let i = 0; i < Math.max(a.length, b.length); i += 1) { + const left = a[i]; + const right = b[i]; + if (left === undefined) return -1; + if (right === undefined) return 1; + const leftNumeric = /^\d+$/.test(left); + const rightNumeric = /^\d+$/.test(right); + if (leftNumeric && rightNumeric) { + if (Number(left) !== Number(right)) return Number(left) < Number(right) ? -1 : 1; + continue; + } + // Numeric identifiers always sort below alphanumeric ones. + if (leftNumeric !== rightNumeric) return leftNumeric ? -1 : 1; + if (left !== right) return left < right ? -1 : 1; + } + return 0; +} + +/** + * Orders two versions. Build metadata is ignored, per semver. + * @param {string} a + * @param {string} b + * @returns {number} -1, 0, or 1; 0 when either side is unparseable + */ +export function compareVersions(a, b) { + const left = parseVersion(a); + const right = parseVersion(b); + if (!left || !right) return 0; + if (left.major !== right.major) return left.major < right.major ? -1 : 1; + if (left.minor !== right.minor) return left.minor < right.minor ? -1 : 1; + if (left.patch !== right.patch) return left.patch < right.patch ? -1 : 1; + return comparePrerelease(left.prerelease, right.prerelease); +} + +export function isPrerelease(version) { + const parsed = parseVersion(version); + return Boolean(parsed && parsed.prerelease.length > 0); +} + +function formatVersion({ major, minor, patch }) { + return `${major}.${minor}.${patch}`; +} + +// `^1.2.3` allows <2.0.0, but `^0.1.2` only allows <0.2.0 — below 1.0.0 the +// minor position carries the breaking-change signal. +// +// This holds for EVERY zero major, including `^0.0.3`, which pub reads as +// <0.1.0 and not <0.0.4. npm special-cases 0.0.x to the next patch; pub does +// not. See pub_semver's Version.nextBreaking, the rule `^` resolves through: +// `if (major == 0) return _incrementMinor();`. Narrowing 0.0.x here would make +// constraintContains() reject versions the project can actually resolve, and +// dependency resolution would rewrite a constraint that was never broken. +function caretUpperBound(version) { + const parsed = parseVersion(version); + if (!parsed) return null; + if (parsed.major > 0) return `${parsed.major + 1}.0.0`; + return `0.${parsed.minor + 1}.0`; +} + +/** + * Parses a pub version constraint into an explicit range. + * + * @param {string} constraint - e.g. "^3.12.0", ">=2.17.0 <4.0.0", "1.2.3", "any" + * @returns {{min: string|null, minInclusive: boolean, max: string|null, maxInclusive: boolean}|null} + * null when the text is not a constraint this understands. An unbounded end + * is represented by a null bound. + */ +export function parseConstraint(constraint) { + let text = String(constraint ?? "").trim(); + if (text.startsWith("'") || text.startsWith('"')) { + text = text.slice(1, -1).trim(); + } + if (text === "" || text === "any" || text === "*") { + return { min: null, minInclusive: false, max: null, maxInclusive: false }; + } + + if (text.startsWith("^")) { + const min = text.slice(1).trim(); + if (!parseVersion(min)) return null; + return { + min, + minInclusive: true, + max: caretUpperBound(min), + maxInclusive: false, + }; + } + + // An exact version is a range of one. + if (parseVersion(text)) { + return { min: text, minInclusive: true, max: text, maxInclusive: true }; + } + + const range = { + min: null, + minInclusive: false, + max: null, + maxInclusive: false, + }; + const clausePattern = /(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g; + let matched = false; + let match; + while ((match = clausePattern.exec(text)) !== null) { + const [, operator, version] = match; + if (!parseVersion(version)) return null; + matched = true; + if (operator === ">=" || operator === ">") { + range.min = version; + range.minInclusive = operator === ">="; + } else { + range.max = version; + range.maxInclusive = operator === "<="; + } + } + + return matched ? range : null; +} + +/** + * Tests whether a constraint admits a specific version. + * @param {string} constraint - Pub version constraint + * @param {string} version - Version to test + * @returns {boolean} False when either side is unparseable, so an unreadable + * constraint never silently counts as a match. + */ +export function constraintContains(constraint, version) { + const range = parseConstraint(constraint); + if (!range || !parseVersion(version)) return false; + + if (range.min !== null) { + const order = compareVersions(version, range.min); + if (order < 0) return false; + if (order === 0 && !range.minInclusive) return false; + } + if (range.max !== null) { + const order = compareVersions(version, range.max); + if (order > 0) return false; + if (order === 0 && !range.maxInclusive) return false; + } + return true; +} + +/** + * Tests whether a constraint can resolve to *some* version at or above a + * floor. This is the question that decides whether an already-declared + * dependency needs overriding: `^2.0.0` already reaches 2.4.0, so a + * requirement of 2.4.0 does not justify rewriting the project's constraint. + * + * @param {string} constraint - The constraint already in the pubspec + * @param {string} minVersion - The lowest version the new code needs + * @returns {boolean} False when either side is unparseable, so an unreadable + * constraint is reported as needing review rather than assumed adequate. + */ +export function constraintCanReach(constraint, minVersion) { + const range = parseConstraint(constraint); + if (!range || !parseVersion(minVersion)) return false; + if (range.max === null) return true; + + const order = compareVersions(range.max, minVersion); + if (order > 0) return true; + return order === 0 && range.maxInclusive; +} + +/** + * The lowest version a constraint permits, used to read a project's Dart SDK + * floor out of its `environment:` block. + * @param {string} constraint - Pub version constraint + * @returns {string|null} Version string, or null when unbounded/unreadable + */ +export function constraintLowerBound(constraint) { + const range = parseConstraint(constraint); + return range ? range.min : null; +} diff --git a/src/pubVersions.test.js b/src/pubVersions.test.js new file mode 100644 index 0000000..f0878e1 --- /dev/null +++ b/src/pubVersions.test.js @@ -0,0 +1,115 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + compareVersions, + constraintCanReach, + constraintContains, + constraintLowerBound, + isPrerelease, + parseConstraint, + parseVersion, +} from "./pubVersions.js"; + +test("parses versions and rejects non-versions", () => { + assert.deepEqual(parseVersion("3.12.0"), { + major: 3, + minor: 12, + patch: 0, + prerelease: [], + }); + assert.deepEqual(parseVersion("2.0.0-beta.1").prerelease, ["beta", "1"]); + assert.equal(parseVersion("3.12.0+5").patch, 0); + assert.equal(parseVersion("3.12"), null); + assert.equal(parseVersion("latest"), null); + assert.equal(parseVersion(""), null); +}); + +test("orders versions numerically, not lexically", () => { + assert.equal(compareVersions("3.9.0", "3.12.0"), -1); + assert.equal(compareVersions("7.1.1", "7.1.1"), 0); + assert.equal(compareVersions("11.3.1", "2.1.2"), 1); + // Build metadata is not part of precedence. + assert.equal(compareVersions("1.2.3+9", "1.2.3+1"), 0); +}); + +test("orders a prerelease below its release", () => { + assert.equal(compareVersions("2.0.0-beta.1", "2.0.0"), -1); + assert.equal(compareVersions("2.0.0-beta.2", "2.0.0-beta.10"), -1); + assert.equal(compareVersions("2.0.0-alpha", "2.0.0-beta"), -1); + assert.equal(isPrerelease("2.0.0-beta.1"), true); + assert.equal(isPrerelease("2.0.0"), false); +}); + +test("expands a caret constraint to its real upper bound", () => { + assert.deepEqual(parseConstraint("^3.12.0"), { + min: "3.12.0", + minInclusive: true, + max: "4.0.0", + maxInclusive: false, + }); + // Below 1.0.0 the minor position is the breaking one. + assert.equal(parseConstraint("^0.19.0").max, "0.20.0"); + + // Pub applies that to every zero major, with no npm-style 0.0.x special + // case: pub_semver's nextBreaking increments the minor whenever major is 0, + // so ^0.0.3 reaches 0.1.0, not 0.0.4. + assert.equal(parseConstraint("^0.0.3").max, "0.1.0"); +}); + +test("a ^0.0.x constraint still contains later 0.0.x releases", () => { + // The npm reading (<0.0.4) would report this as unsatisfiable and make + // dependency resolution rewrite a constraint the project can already meet. + assert.equal(constraintContains("^0.0.3", "0.0.9"), true); + assert.equal(constraintContains("^0.0.3", "0.0.3"), true); + assert.equal(constraintContains("^0.0.3", "0.1.0"), false); + assert.equal(constraintContains("^0.0.3", "0.0.2"), false); +}); + +test("parses range, exact, and unbounded constraints", () => { + assert.deepEqual(parseConstraint(">=3.5.0 <4.0.0"), { + min: "3.5.0", + minInclusive: true, + max: "4.0.0", + maxInclusive: false, + }); + assert.deepEqual(parseConstraint("1.2.3"), { + min: "1.2.3", + minInclusive: true, + max: "1.2.3", + maxInclusive: true, + }); + assert.equal(parseConstraint("any").min, null); + assert.equal(parseConstraint("").max, null); + assert.equal(parseConstraint('">=2.17.0 <4.0.0"').min, "2.17.0"); + assert.equal(parseConstraint(">2.0.0").minInclusive, false); + assert.equal(parseConstraint("<=3.0.0").maxInclusive, true); + assert.equal(parseConstraint("not-a-constraint"), null); +}); + +test("tests whether a constraint admits a version", () => { + // The case that drives dependency selection: record 7.1.1 wants Dart + // ^3.12.0, which a project pinned at a 3.5.0 floor cannot offer. + assert.equal(constraintContains("^3.12.0", "3.5.0"), false); + assert.equal(constraintContains("^3.5.0", "3.5.0"), true); + assert.equal(constraintContains(">=2.17.0 <4.0.0", "3.5.0"), true); + assert.equal(constraintContains("any", "3.5.0"), true); + assert.equal(constraintContains(">3.5.0", "3.5.0"), false); + assert.equal(constraintContains("garbage", "3.5.0"), false); +}); + +test("does not call for an override a constraint can already satisfy", () => { + // ^2.0.0 already resolves 2.4.0; rewriting it would be pointless churn. + assert.equal(constraintCanReach("^2.0.0", "2.4.0"), true); + assert.equal(constraintCanReach("^2.0.0", "3.0.0"), false); + assert.equal(constraintCanReach(">=1.0.0", "99.0.0"), true); + assert.equal(constraintCanReach("1.2.3", "1.2.3"), true); + assert.equal(constraintCanReach("1.2.3", "1.2.4"), false); + // An unreadable constraint is surfaced for review, never assumed adequate. + assert.equal(constraintCanReach("garbage", "1.0.0"), false); +}); + +test("reads the lower bound out of an SDK constraint", () => { + assert.equal(constraintLowerBound('">=3.5.0 <4.0.0"'), "3.5.0"); + assert.equal(constraintLowerBound("^3.12.0"), "3.12.0"); + assert.equal(constraintLowerBound("any"), null); +}); diff --git a/src/pubspecSync.js b/src/pubspecSync.js index 4e236fd..d7876bb 100644 --- a/src/pubspecSync.js +++ b/src/pubspecSync.js @@ -36,15 +36,14 @@ function indentOf(line) { } /** - * Locates the top-level `dependencies:` block. + * Locates a top-level block by its header pattern. * @param {string[]} lines - pubspec.yaml split into lines + * @param {RegExp} headerPattern - Matches the block's header line * @returns {{headerIndex: number, endIndex: number, childIndent: string}|null} * endIndex is exclusive and excludes trailing blank/comment lines. */ -function findDependenciesBlock(lines) { - const headerIndex = lines.findIndex((line) => - DEPENDENCIES_HEADER_PATTERN.test(line), - ); +function findBlock(lines, headerPattern) { + const headerIndex = lines.findIndex((line) => headerPattern.test(line)); if (headerIndex === -1) return null; let endIndex = headerIndex + 1; @@ -71,27 +70,114 @@ function findDependenciesBlock(lines) { }; } +function findDependenciesBlock(lines) { + return findBlock(lines, DEPENDENCIES_HEADER_PATTERN); +} + /** - * Extracts the names of the packages already declared under `dependencies:`. + * Splits a dependency line's value from any trailing comment, so rewriting the + * version keeps the note explaining why it was pinned. + * @param {string} rest - Everything after the `name:` key + * @returns {{value: string, comment: string}} + */ +function splitValueAndComment(rest) { + const text = rest ?? ""; + let i = 0; + let quote = null; + + while (i < text.length) { + const char = text[i]; + if (quote) { + if (char === quote) quote = null; + } else if (char === "'" || char === '"') { + quote = char; + } else if (char === "#") { + break; + } + i += 1; + } + + return { + value: text.slice(0, i).trim(), + comment: text.slice(i) ? ` ${text.slice(i).trim()}` : "", + }; +} + +/** + * Reads every package declared under `dependencies:` with its constraint. + * + * A dependency written in block form (`sdk:`, `git:`, `path:`, or a nested + * `version:`) has no scalar constraint and must never be rewritten as one, so + * it is reported with `isScalar: false`. + * * @param {string} yamlContent - Raw pubspec.yaml content - * @returns {string[]} Declared dependency names, in file order + * @returns {Map} */ -export function parseExistingDependencyNames(yamlContent) { +export function parseExistingDependencies(yamlContent) { const lines = String(yamlContent || "").split("\n"); const block = findDependenciesBlock(lines); - if (!block) return []; + const declared = new Map(); + if (!block) return declared; - const names = []; for (let i = block.headerIndex + 1; i < block.endIndex; i += 1) { const line = lines[i]; if (isBlankOrComment(line)) continue; // Only direct children are dependency names; deeper lines describe a // dependency's own keys (sdk:, git:, version:, ...). if (indentOf(line) !== block.childIndent.length) continue; - const name = parseDependencyName(line.trim()); - if (name) names.push(name); + const trimmed = line.trim(); + const name = parseDependencyName(trimmed); + if (!name) continue; + + const { value, comment } = splitValueAndComment( + trimmed.slice(trimmed.indexOf(":") + 1), + ); + declared.set(name, { + constraint: value, + comment, + lineIndex: i, + isScalar: value !== "", + }); + } + return declared; +} + +/** + * Extracts the names of the packages already declared under `dependencies:`. + * @param {string} yamlContent - Raw pubspec.yaml content + * @returns {string[]} Declared dependency names, in file order + */ +export function parseExistingDependencyNames(yamlContent) { + return [...parseExistingDependencies(yamlContent).keys()]; +} + +// A top-level `environment:` key, which carries the Dart and Flutter SDK +// ranges the project is built against. +const ENVIRONMENT_HEADER_PATTERN = /^environment\s*:\s*(?:#.*)?$/; + +/** + * Reads the project's declared SDK ranges. These say what a newly added + * package has to be compatible with. + * @param {string} yamlContent - Raw pubspec.yaml content + * @returns {{sdk: string|null, flutter: string|null}} Raw constraint text + */ +export function parseEnvironmentConstraints(yamlContent) { + const lines = String(yamlContent || "").split("\n"); + const block = findBlock(lines, ENVIRONMENT_HEADER_PATTERN); + const environment = { sdk: null, flutter: null }; + if (!block) return environment; + + for (let i = block.headerIndex + 1; i < block.endIndex; i += 1) { + const line = lines[i]; + if (isBlankOrComment(line)) continue; + if (indentOf(line) !== block.childIndent.length) continue; + const trimmed = line.trim(); + const key = parseDependencyName(trimmed); + if (key !== "sdk" && key !== "flutter") continue; + const { value } = splitValueAndComment(trimmed.slice(trimmed.indexOf(":") + 1)); + if (value) environment[key] = value; } - return names; + return environment; } // YAML would misread a plain scalar that opens with an indicator character, and @@ -172,6 +258,46 @@ export function mergeDependenciesIntoYaml(yamlContent, newDependencies = {}) { }; } +/** + * Rewrites the constraint of packages already declared in the pubspec. + * + * Only ever used for a package whose current constraint genuinely cannot + * resolve a version the new code needs — replacing a working constraint is a + * change to how the whole app builds, not a detail of the custom code being + * deployed. + * + * A dependency in block form (`sdk:`, `git:`, `path:`) is left untouched and + * reported in `skipped`; rewriting it as a scalar would drop its source. + * + * @param {string} yamlContent - The project's current pubspec.yaml + * @param {Object} overrides - name -> replacement constraint + * @returns {{yaml: string, overridden: Array<{name: string, from: string, to: string}>, skipped: string[]}} + */ +export function applyDependencyOverrides(yamlContent, overrides = {}) { + const original = String(yamlContent || ""); + const entries = Object.entries(overrides).filter(([name]) => name && name !== "flutter"); + if (entries.length === 0) return { yaml: original, overridden: [], skipped: [] }; + + const lines = original.split("\n"); + const declared = parseExistingDependencies(original); + const overridden = []; + const skipped = []; + + for (const [name, constraint] of entries) { + const existing = declared.get(name); + if (!existing || !existing.isScalar || !String(constraint || "").trim()) { + skipped.push(name); + continue; + } + const indent = " ".repeat(indentOf(lines[existing.lineIndex])); + lines[existing.lineIndex] = + `${indent}${name}: ${formatConstraint(String(constraint).trim())}${existing.comment}`; + overridden.push({ name, from: existing.constraint, to: constraint }); + } + + return { yaml: lines.join("\n"), overridden, skipped }; +} + /** * Checks that a pubspec.yaml looks like a real Flutter project manifest before * it is pushed back. Guards against sending a truncated or unrelated file,