diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5e5e11f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,47 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +# The workflow only checks out code and runs tests; it never needs write access. +permissions: + contents: read + +jobs: + ci: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + + - name: Set up Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - name: Set up PHP + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 + with: + php-version: '8.3' + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + + - name: Build production bundle + run: npm run build + + - name: Run deploy guard + run: npm run test:deploy-guard + + - name: Run proxy allowlist tests + run: npm run test:proxies + + - name: Scan production bundle for API key/endpoint leaks + run: python3 scripts/scan_bundle_for_leaks.py diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index e66f583..44943e4 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -79,34 +79,54 @@ in `.dart` untouched so a re-deploy is a no-op and an editor rename survives. Before writing anything to the project the runner compiles the generated classes in a throwaway Flutter package built from the project's own dependency -versions and refuses the deploy (HTTP 422) if the analyzer reports an error. +versions, and refuses the deploy (HTTP 422) if the analyzer reports an error. The FlutterFlow DSL only checks that code is formattable, which accepts a call to a named argument the package never declared. This needs the Flutter SDK in the image, so the runner takes longer to build and to cold-start, and the deploy script raises Cloud Run's request timeout to 900s. -A class that imports FlutterFlow scaffolding (`/backend/schema/structs/index.dart`) -is compiled too: the deploy gathers the transitive closure of each class's -project-relative imports from the export and ships it alongside, bounded by -file and byte caps. The class is written to `lib/custom_code/.dart` - -where FlutterFlow files it, so a relative import resolves from the right -directory - and the project's generated Dart under `lib/`, which is what the -leading slash resolves against. Analysis is scoped to the deployed class files -with `--no-fatal-warnings`, so an error inside the project's own scaffolding, -or a warning-only class, cannot refuse code that compiles. +A class is compiled when every package it imports resolves the same way the +project resolves it. Two cases are left out of the compile set, and each is +reported rather than silently dropped: + +* It imports something FlutterFlow only generates once the app is built - + `/backend/schema/structs/index.dart`, `../flutter_flow/lat_lng.dart`. Those + files do not exist until after the deploy. +* It imports a package the project declares from a source this manifest cannot + express: a `git:` or `path:` source, or a nested `hosted:` block. The scratch + package would resolve different code, and a check against the wrong version + reports a result that does not describe what ships. + +The second case is decided **per class**, from that class's own imports. A +`git:` dependency stops only the classes that import it; classes that do not are +still compiled. Deciding it once for the whole project meant one such entry left +an entire deploy uncompiled. + +**Which packages the Flutter SDK supplies is read from the project's own +pubspec** - a dependency written in block form under `sdk:` is an SDK package by +definition. Nothing keeps a list of SDK package names, because a list goes stale +the moment the SDK ships one it has not heard of, and a stale list reads a +perfectly valid package as unreproducible. That is not hypothetical: a list +missing `flutter_web_plugins` refused whole deploys for projects that declared +it. The manifest is sent as package names and version constraints, never as pubspec.yaml text, and the runner builds the document itself - it runs `pub get` against it on a publicly reachable route, so a caller must not be able to name a git or path source. `dependency_overrides` are carried over, because a scratch package resolving different versions than the project would -approve code the project rejects. +approve code the project rejects. The runner validates each name against a +package-name pattern rather than against a list of SDK packages, and writes +`sdk: flutter` itself, so that value never comes from a caller. A client still sending the older `pubspec` format is recognized, never executed, and its deploy proceeds with the check reported as unavailable. -**Nothing unverified is deployed.** The web app refuses the deploy on any class -it cannot compile, naming each one and why, before the runner is called. +**What could not be verified still deploys, and is reported.** A class with a +real analyzer error refuses the deploy - HTTP 422, naming the error. A class the +deploy could not compile, for either reason above, does not: it is pushed, and +the warning naming it is logged *before* the provisioning request, so it +describes the mutation before it happens rather than after. The runner streams its progress. When the request body sets `"stream": true` the response is NDJSON — one `{"event":"phase"|"log"|"result"}` object per diff --git a/app.js b/app.js index ac24de8..75548b4 100644 --- a/app.js +++ b/app.js @@ -2113,7 +2113,7 @@ async function provisionMissingCodeFiles( ) { const missingCodeFiles = findMissingCodeFiles(fileMap, remoteFiles); if (missingCodeFiles.length === 0) { - return { remoteFiles, syncFileMap: fileMap, unverified: [] }; + return { remoteFiles, syncFileMap: fileMap, unverified: [], approximate: [] }; } // The runner compiles these against the project's own package versions @@ -2137,6 +2137,14 @@ async function provisionMissingCodeFiles( const unverified = verificationPlan.skipped.map((entry) => entry.reason); unverified.forEach((reason) => console.warn(`[custom class deploy] ${reason}`)); + // Classes that do not import an unrepresentable package directly are still + // checked, but against a scratch graph that omits it. That approximation is + // disclosed here - before the push - and returned alongside `unverified`, + // so it reaches the deploy result and is never mistaken for a full-graph + // check. + const approximate = verificationPlan.approximate; + approximate.forEach((notice) => console.warn(`[custom class deploy] ${notice}`)); + console.log( `Provisioning ${missingCodeFiles.length} new FlutterFlow custom code file(s) before sync.`, ); @@ -2178,6 +2186,7 @@ async function provisionMissingCodeFiles( remoteFiles, syncFileMap: excludeProvisionedCodeFiles(fileMap, missingCodeFiles), unverified, + approximate, }; } @@ -2870,6 +2879,7 @@ async function commitToFlutterFlow(dartCode, fileName, options = {}) { message: `Successfully committed ${fileName} to FlutterFlow project ${projectId}`, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], }; } catch (error) { @@ -3043,6 +3053,7 @@ async function executeCommit(code, options = {}) { metadata, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], elapsedTime: commitState.getElapsedTime(), }; @@ -3207,6 +3218,7 @@ async function executeBundleCommit(bundlePlan, options = {}) { metadata, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], elapsedTime: commitState.getElapsedTime(), }; @@ -5347,14 +5359,24 @@ function showCommitSuccessModal(result) { const warningsSection = document.getElementById("success-warnings-section"); const warningsList = document.getElementById("success-warnings-list"); // A class that could not be compiled before the push is reported here rather - // than left implicit, so "deployed" never reads as "checked". + // than left implicit, so "deployed" never reads as "checked". A class that + // was compiled against a reduced package graph is reported beside it: the + // check ran, but approximately, and that has to stay visible too. const unverified = result.unverified || []; + const approximate = result.approximate || []; const fileWarnings = result.warnings || []; - if ((fileWarnings.length > 0 || unverified.length > 0) && warningsSection && warningsList) { + if ( + (fileWarnings.length > 0 || unverified.length > 0 || approximate.length > 0) && + warningsSection && + warningsList + ) { warningsList.innerHTML = [ ...unverified.map((reason) => `
  • Not verified before deploying: ${escapeHtml(String(reason))}
  • ` ), + ...approximate.map((notice) => + `
  • Verified approximately: ${escapeHtml(String(notice))}
  • ` + ), ...fileWarnings.map(([file, errs]) => `
  • ${escapeHtml(file)}: ${escapeHtml(String(errs))}
  • ` ), diff --git a/cloud-run/ffai-runner/bin/server.dart b/cloud-run/ffai-runner/bin/server.dart index 2b5a8e4..49ae5aa 100644 --- a/cloud-run/ffai-runner/bin/server.dart +++ b/cloud-run/ffai-runner/bin/server.dart @@ -19,15 +19,13 @@ final _packageNamePattern = RegExp(r'^[a-z_][a-z0-9_]*$'); // unrepresentable rather than merely discouraged. final _constraintPattern = RegExp(r'^[A-Za-z0-9^~<>=*+._ -]+$'); -// The packages the Flutter SDK supplies, i.e. the only valid `sdk: flutter` -// entries besides `flutter` itself. -const allowedSdkPackages = { - 'flutter', - 'flutter_test', - 'flutter_driver', - 'flutter_localizations', - 'integration_test', -}; +// Which packages the Flutter SDK supplies is not decided here. A caller names +// the packages its project declares as `sdk: flutter`, and this runner emits +// them as `name: {sdk: flutter}` - a value it writes itself, never one a caller +// sent. There was an allowlist of SDK package names here, and it refused good +// deploys: the client classified a package correctly by its pubspec source, and +// the runner rejected it for not appearing on a list that had gone stale. +// `_packageNamePattern` is what actually keeps a key from carrying YAML. Future main() async { final port = int.tryParse(Platform.environment['PORT'] ?? '') ?? 8080; @@ -538,23 +536,31 @@ Map _normalizeDependencyMap(Object? value, String field) { return result; } -/// Reads the SDK-supplied package names. Restricted to the packages the Flutter -/// SDK actually provides, so a caller cannot request an arbitrary `sdk:` value. +/// Reads the SDK-supplied package names a caller's project declares. +/// +/// Validated as package names rather than against a list of the packages the +/// Flutter SDK happens to ship: a name the SDK does not provide fails +/// `pub get` with an honest error, whereas a list refuses correct deploys the +/// moment it falls behind the SDK. The pattern is the load-bearing check - each +/// name becomes a key in the generated pubspec. List _normalizeSdkPackages(Object? value) { if (value == null) return const []; if (value is! List) { throw const FormatException('verification.sdkPackages must be an array.'); } + if (value.length > maxDependenciesPerRequest) { + throw const FormatException('Too many entries in verification.sdkPackages.'); + } - final result = []; + final result = {}; for (final raw in value) { final name = '$raw'; - if (!allowedSdkPackages.contains(name)) { - throw FormatException('Unsupported SDK package: $name.'); + if (!_packageNamePattern.hasMatch(name)) { + throw FormatException('Invalid SDK package name: $name.'); } - if (!result.contains(name)) result.add(name); + result.add(name); } - return result; + return result.toList(); } String _validateConstraint( diff --git a/dist/assets/index-BAqMCFqg.js b/dist/assets/index-BAqMCFqg.js deleted file mode 100644 index 339dc59..0000000 --- a/dist/assets/index-BAqMCFqg.js +++ /dev/null @@ -1,320 +0,0 @@ -(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 v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,To=we?.fetch,An=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,lh=we?.CompressionStream,Pe=ke?.userAgent;function kc(){return!(!v||v.navigator.onLine===!1)}var Cs=typeof globalThis<"u"?globalThis:v;Cs&&typeof self>"u"&&(Cs.self=Cs),Cs&&typeof File>"u"&&(Cs.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(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){La(n,r,i,o,a,"next",l)}function a(l){La(n,r,i,o,a,"throw",l)}o(void 0)}))}}function w(){return w=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},w.apply(null,arguments)}function Ic(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 Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fs,ch=["$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})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),uh=["$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"],dh=["token"],Cc="NativeGzipValidationError",$n=t=>t.length>=2&&t[0]===31&&t[1]===139,Ua=(t,e)=>t===ja.GZipJS||e===ja.GZipJS||e==="gzip",Ha=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",yr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Cc,e},hh=(function(){var t=X((function*(e,s){18>e.size&&yr("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());$n(r)&&r[2]===8||yr("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fs)return Fs;Fs=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Fs[c]=d>>>0}return Fs})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&yr("invalid-crc");var n=s.length>>>0;i.getUint32(4,!0)!==n&&yr("invalid-size")}));return function(e,s){return t.apply(this,arguments)}})();function Rn(){return Rn=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 hh(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Rn.apply(this,arguments)}var ph=["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"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return ph.concat(e).some((r=>{var i=r.toLowerCase();return s.indexOf(i)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Fi=function(t){return t.trim()},Tn=function(t){return t.replace(/^\$/,"")};function Fc(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,Ac=Pc.hasOwnProperty,Pi=Pc.toString,L=Array.isArray||function(t){return Pi.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(Ac.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Pi.call(t)=="[object String]",Nn=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Pi.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Pi.call(t)==="[object Boolean]",fh=t=>t instanceof FormData,gh=t=>M(uh,t),mh=t=>M(dh,t);function $c(t){return t===null||typeof t!="object"}function qr(t,e){return{}.toString.call(t)==="[object "+e+"]"}function No(t){return typeof Event<"u"&&Rc(t,Event)}function Rc(t,e){try{return t instanceof e}catch{return!1}}var vh=[!0,"true",1,"1","yes"],Ji=t=>M(vh,t),_h=[!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),he(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 yh{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 Oe="Mobile",Vr="iOS",vt="Android",fs="Tablet",Tc=vt+" "+fs,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qs="Safari",gs="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Gt="Chrome",wh=Gt+" OS",jc=Gt+" "+Vr,Mo="Internet Explorer",Uc=Mo+" "+Oe,Lo="Opera",bh=Lo+" Mini",Oo="Edge",Hc="Microsoft "+Oo,ds="Firefox",Wc=ds+" "+Vr,er="Nintendo",tr="PlayStation",hs="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qs,Ds="Windows",Mn=Ds+" Phone",za="Nokia",Ln="Ouya",Vc="Generic",Eh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+fs.toLowerCase(),On="Konqueror",Kc="Oculus Browser",Gr="Vivaldi",Jc="Yandex",Kr="Whale",Dn="DuckDuckGo",Yc="Pale Moon",Jr="Waterfox",Vs="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Yi=new RegExp("Version/"+le),Sh=new RegExp(hs,"i"),xh=new RegExp(tr+" \\w+","i"),kh=new RegExp(er+" \\w+","i"),Do=new RegExp(gs+"|PlayBook|BB10","i"),Ih={"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"},Xc=function(t,e,s,r){e=e||"";var i=(function(n){return n!=null&&n.brave?Vs:null})(s);return i||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?bh:M(t," OPR/")?Lo:Do.test(t)?gs:M(t,"IE"+Oe)||M(t,"WPDesktop")?Uc:M(t,"OculusBrowser")?Kc:M(t,Dc)?Bc:M(t,Oo)||M(t,"Edg/")?Hc:M(t,Gr+"/")?Gr:M(t,"YaBrowser/")?Jc:M(t,Kr+"/")?Kr:M(t,Dn+"/")||M(t,"Ddg/")?Dn:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?jc:M(t,"CrMo")||M(t,Gt)?Gt:M(t,vt)&&M(t,qs)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),On.toLowerCase())?On:M(t,Vs+"/")?Vs:((n,o)=>o&&M(o,Mc)||(function(a){return M(a,qs)&&!M(a,Gt)&&!M(a,vt)})(n))(t,e)?M(t,Oe)?qc:qs:M(t,"PaleMoon/")?Yc:M(t,Jr+"/")?Jr:M(t,ds)?ds:M(t,"MSIE")||M(t,"Trident/")?Mo:M(t,"Gecko")?ds:"")},Ch={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Oo+"?\\/"+le)],[Gt]:[new RegExp("("+Gt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[qs]:[Yi],[qc]:[Yi],[Lo]:[new RegExp("(Opera|OPR)\\/"+le)],[ds]:[new RegExp(ds+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[On]:[new RegExp("Konqueror[:/]?"+le,"i")],[gs]:[new RegExp(gs+" "+le),Yi],[zc]:[new RegExp("android\\s"+le,"i")],[Bc]:[new RegExp(Dc+"\\/"+le)],[Kc]:[new RegExp("OculusBrowser\\/"+le)],[Gr]:[new RegExp(Gr+"\\/"+le)],[Jc]:[new RegExp("YaBrowser\\/"+le)],[Kr]:[new RegExp(Kr+"\\/"+le)],[Vs]:[new RegExp(Vs+"\\/"+le)],[Dn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Jr]:[new RegExp(Jr+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Mo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Fh=function(t,e,s,r){var i=Xc(t,e,s,r),n=Ch[i];if(x(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},qa=[[new RegExp(hs+"; "+hs+" (.*?)[);]","i"),t=>[hs,t&&t[1]||""]],[new RegExp(er,"i"),[er,""]],[new RegExp(tr,"i"),[tr,""]],[Do,[gs,""]],[new RegExp(Ds,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Mn,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Ds+" "+Oe,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=Ih[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[Ds,r]}return[Ds,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Vr,[t[3],t[4],t[5]||"0"].join(".")]:[Vr,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+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/,[wh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return kh.test(t)?er:xh.test(t)?tr:Sh.test(t)?hs:new RegExp(Ln,"i").test(t)?Ln:new RegExp("("+Mn+"|WPDesktop)","i").test(t)?Mn:/iPad/.test(t)?Nc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Lc:Do.test(t)?gs:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(za,"i").test(t)?za:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Oe).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:Tc:new RegExp("(pda|"+Oe+")","i").test(t)?Eh:new RegExp(fs,"i").test(t)&&!new RegExp(fs+" pc","i").test(t)?Gc:""},Ph=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(s=t)=="string"&&Ph.test(s)?t:e();var s}function Ct(t){return t&&t.split("#")[0]}function Bo(t,e){var s=setTimeout(t,e);return s?.unref&&s?.unref(),s}function Ka(t,e,s){return Qc.apply(this,arguments)}function Qc(){return(Qc=X((function*(t,e,s){var r;try{return yield Promise.race([t,new Promise(((i,n)=>{r=Bo((()=>{try{s?.(),i()}catch(o){n(o)}}),e)}))])}finally{clearTimeout(r)}}))).apply(this,arguments)}var Ah=t=>t instanceof Error,eu={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}},$h=eu.info;function tu(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=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Yr(t){var e=[];for(var s in t){var r=t[s];$e(r)||x(r)||e.push({key:s,value:tu(r)})}return e}function Rh(t,e){var s=eu[t.level||"info"]||$h,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),D(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),D(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=w({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:Yr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function su(t,e,s){return w({},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 ru(t,e,s,r){return{resourceLogs:[{resource:{attributes:Yr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let Th=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:Rh(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=ru(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 su(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=Bo((()=>{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 Ka(s,t):yield s}))()}flushWithTimeout(t){var e=this;return X((function*(){var s=e.flush();yield Ka(s,t,(()=>{s.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Zi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Ja(t){return String(t)+"000000"}function Ya(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 Nh=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?.unit,attributes:s?.attributes})}gauge(t,e,s){this.Vt({name:t,type:"gauge",value:e,unit:s?.unit,attributes:s?.attributes})}histogram(t,e,s){this.Vt({name:t,type:"histogram",value:e,unit:s?.unit,attributes: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?w({},e.attributes):void 0,r=Ya(e.type,e.name,e.unit,s)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var s;switch(t.type){case"count":t.total=((s=t.total)!==null&&s!==void 0?s:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Zi.length+1).fill(0)});var r=t.hist;r.count+=1,r.sum+=e,r.min=Math.min(r.min,e),r.max=Math.max(r.max,e),r.bucketCounts[(function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length})(e,Zi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=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=Bo((()=>{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 w({},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:Yr(s)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,s,r,i}Xt(t){var e=Ja(Date.now()),s=new Map;for(var r of t.values()){var i,n=Ya(r.type,r.name,r.unit,void 0),o=s.get(n);o||(o=w({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=Yr((i=r.attributes)!==null&&i!==void 0?i:{}),l=Ja(r.windowStartMs);if(r.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=r.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(r.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=r.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else r.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:r.hist.count,sum:r.hist.sum,min:r.hist.min,max:r.hist.max,bucketCounts:r.hist.bucketCounts,explicitBounds:Zi})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var i=r[0],n=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=n.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var wr,Za,Xi;function Mh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return Xi&&s.length===Za||(Za=s.length,Xi=s.reduce(((r,i)=>{wr||(wr={});var n=wr[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?.filename,c=e[i];if(u&&c){r[u]=c,wr[i]=[u,c];break}}return r}),{})),Xi}}class Lh{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)),w({},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,w({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:Mh(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 w({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:n=>i(n,r),next:n=>i(n,r+1)})}}var ms="?";function Bn(t,e,s,r,i){var n={platform:t,filename:e,function:s===""?ms:s,in_app:!0};return x(r)||(n.lineno=r),x(i)||(n.colno=i),n}var iu=(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]:ms,s?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Oh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Bh=/\((\S*)(?::(\d+))(?::(\d+))\)/,jh=(t,e)=>{var s=Oh.exec(t);if(s)return Bn(e,s[1],ms,+s[2],+s[3]);var r=Dh.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=iu(r[1]||ms,r[2]);return Bn(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,Hh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Wh=(t,e)=>{var s=Uh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=Hh.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]||ms,o=iu(n,i);return Bn(e,i=o[1],n=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Xa=/\(error: (.*)\)/;class zh{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 qr(e,"DOMException")}isDOMError(e){return qr(e,"DOMError")}}class qh{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 Rc(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 Vh{constructor(){}match(e){return!!qr(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 w({},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 Gh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Kh{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(Gh);return i&&(s=i[1],r=i[2]),[s,r]}}var Jh=["fatal","error","warning","log","info","debug"];function nu(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 No(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: "+nu(e)}isSeverityLevel(e){return W(e)&&!Nn(e)&&Jh.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(Ah(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Zh{match(e){return No(e)}coerce(e,s){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+nu(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Xh{match(e){return $c(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 Qh{match(e){return qr(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!No(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 $c(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var Zr="$message",Xr="$timestamp",ep=new Set([Zr,Xr]),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:sp(t.max_bytes,Qi.max_bytes)}:w({},Qi)}class tp{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=Fc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[Zr],u=a[Xr];return!W(l)||l.trim().length===0||!W(u)&&!he(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 sp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var ou=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||s)&&!x(v.console)&&v.console){for(var n=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];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)=>ou(t+" "+i,n)};return r},k=ou("[PostHog.js]"),se=k.createLogger,rp=se("[ExternalScriptsLoader]"),en=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return rp.warn(e+" was requested but loading of external scripts is disabled."),s("Loading of external scripts is disabled");var r=C?.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(!C)return s("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,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")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,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)}en(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");en(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);en(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",sr="$device_id",tn="$device_model",Bs="__alias",js="__timers",jn="$autocapture_disabled_server_side",Un="$heatmaps_enabled_server_side",Hn="$exception_capture_enabled_server_side",Wn="$error_tracking_suppression_rules",zn="$error_tracking_capture_extension_exceptions",qn="$web_vitals_enabled_server_side",jo="$dead_clicks_enabled_server_side",Uo="$product_tours_enabled_server_side",Vn="$web_vitals_allowed_metrics",Vt="$session_recording_remote_config",lu="$replay_sample_rate",cu="$replay_override_sampling",uu="$replay_override_linked_flag",du="$replay_override_url_trigger",hu="$replay_override_event_trigger",cs="$sesid",Ho="$session_is_sampled",Bt="$enabled_feature_flags",Us="$active_feature_flags",Rr="$early_access_features",Gn="$feature_flag_details",Hs="$feature_flag_payloads",Tr="$feature_flag_request_id",ei="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Kn="$surveys",ti="$surveys_loaded_at",Jn="$surveys_activated",Nr="$surveys_activated_session",Mr="$surveys_activated_timestamps",Ws="ph_product_tours",Wt="$flag_call_reported",zs="$flag_call_reported_session_id",Lr="$feature_flag_errors",Gs="$feature_flag_evaluated_at",He="$user_state",Yn="$client_session_props",Zn="$capture_rate_limit",Xn="$initial_campaign_params",Qn="$initial_referrer_info",si="$initial_person_info",ri="$epp",br="$posthog_cookieless",pu="$cookieless_mode",fu="$sdk_debug_extensions_init_method",gu="$sdk_debug_extensions_init_time_ms",mu="$sdk_debug_recording_script_not_loaded",Wo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",ts="anonymous",Tt="identified",eo="identified_only",ii="visibilitychange",ni="beforeunload",os="$pageview",sn="$pageleave",rn="$identify",Qa="$groupidentify";function Er(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(fh(t))t.forEach(((r,i)=>e(r,i)));else for(var s in t)Ac.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 Or(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 el=function(t){try{return t()}catch{return}},ip=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){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},zo=function(t){var e={};return Z(t,(function(s,r){(W(s)&&s.length>0||he(s))&&(e[r]=s)})),e},np=["herokuapp.com","vercel.app","netlify.app"];function op(t){var e=t?.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of np)if(s===r)return!1;return!0}function ie(t,e,s,r){var i=r??{},n=i.capture,o=i.passive;t?.addEventListener(e,s,{capture:n!==void 0&&n,passive:o===void 0||o})}function to(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",s=C.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 he(t)&&isFinite(t)&&Math.floor(t)===t});class oi{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 oi(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 oi(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 ap{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var s=this.generateOrAbort();if(x(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 oi.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 lp}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class lp{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>cp().toString(),cp=()=>(tl||(tl=new ap)).generate(),Ps="",up=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,i){if(!C)return!1;try{var n="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),Ps)return Ps;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),E="dmn_chk_"+dt();!Ps&&_--;){var b=m.slice(_).join("."),I=E+"=1;domain=."+b+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",Ps=b)}return Ps})(c);if(!h){var p=(f=>{var g=f.match(up);return g?g[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,r);if(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&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{pt.F(t,"",-1,e)}catch{return}}},nn=null,Q={N(){if(!$e(nn))return nn;var t=!0;if(x(v))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||k.error("localStorage unsupported; falling back to cookie store"),nn=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(s){Q.j(s)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},dp=[sr,"distinct_id",cs,Ho,ri,si,He],Sr={},hp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Sr[t]||null,H:t=>Sr[t]||null,F:(t,e)=>(Sr[t]=e,!0),q(t){delete Sr[t]}},Nt=null,ce={N(){if(!$e(Nt))return Nt;if(Nt=!0,x(v))Nt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Nt=!1),ce.q(t)}catch{Nt=!1}return Nt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(s){ce.j(s)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class pp{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===Ht}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 Ji(e)?1:M(_h,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(Ji(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>Ji(e)))}}function yu(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Se(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(n){return k.error("Error in get_current_url, falling back to window.location.href",n),e}}var wu="__POSTHOG_TOOLBAR__",fp=1,gp=3,mp=11;function sl(t){return t instanceof Element&&(t.id===wu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===fp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===gp}function Eu(t){return!!t&&t.nodeType===mp&&Ft(t.host)}var Su=1e3;function qo(t){return t?Fi(t).split(/\s+/):[]}function rl(t,e){var s=(function(r){var i,n=v==null||(i=v.location)==null?void 0:i.href;return x(n)?void 0:yu(r,n)})(e);return!!(s&&t&&t.some((r=>s.match(r))))}function ai(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 qo(e)}function xu(t){return D(t)?null:Fi(t).split(/(\s+)/).filter((e=>Ks(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rr(t){var e="";return ro(t)&&!Fu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(s){var r;bu(s)&&s.textContent&&(e+=(r=xu(s.textContent))!==null&&r!==void 0?r:"")})),Fi(e)}function on(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Vo=["a","button","form","input","select","textarea","label"];function so(t,e){if(x(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 ku(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var vp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],_p=[...Iu,"+","-","−","–"],il=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,nl=[".ph-no-rageclick",".ph-no-capture"],yp=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Go(t))return!1;var s,r,i,n,o;if(Ke(e)?(s=!!e&&nl,r=void 0,i=!1):(s=(n=e?.css_selector_ignorelist)!==null&&n!==void 0?n:nl,r=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||i&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(yp,(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=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>il(h,f)||il(p,f)))}))})(r,a.map((l=>{var u;return{safeText:rr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,s)}var Go=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Go(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],i=t;i.parentNode&&!Me(i,"body");)if(Eu(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var n=ku(i);if(!n)break;if(e||Vo.indexOf(n.tagName.toLowerCase())>-1)s=!0;else try{var o=v.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(n),i=n}return{parentIsUsefulElement:s,targetElementList:r}};function ro(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Me(r,"body");r=r.parentNode){if(s++>=Su||e.has(r))return!1;e.add(r);var i=ai(r);if(M(i,"ph-sensitive")||M(i,"ph-no-capture"))return!1}if(M(ai(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 Fu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var al=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}))$"),ll=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,wp=[16,15,14,13],bp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function Ep(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 Ks(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Fi(t);var s=e?al.test((t||"").replace(/[- ]/g,"")):(function(i){var n;for(ll.lastIndex=0;n=ll.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of wp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&Ep(d))return!0}}}return!1})(t);if(s)return!1;var r=e?bp.test(t):(function(i){var n;for(cl.lastIndex=0;n=cl.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&ul.test(o)&&ul.test(a)))return!0}return!1})(t);if(r)return!1}return!0}function dl(t){var e=rr(t);return Ks(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=rr(s);e=(e+" "+i).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+Pu(s)).trim())}catch(n){k.error("[AutoCapture]",n)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Sp(t){var e=t.attr__class;if(e)return L(e)?e:qo(e)}var xr=se("[Dead Clicks]"),xp=()=>!0,kp=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(jo)),r=t.instance.config.capture_dead_clicks;return Ke(r)?r:!!te(r)||s};class pl{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({[jo]: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?xr.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?w({},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(C),xr.info("starting...")}}else xr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xr.info("stopping..."))}}var an=se("[SegmentIntegration]"),Au="posthog-js";function $u(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 m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,E=((d=c.exception)==null?void 0:d.values)||[],b=E.map((F=>w({},F,{stacktrace:F.stacktrace?w({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>w({},P,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=E[0])==null?void 0:h.value)||c.message,$exception_type:(p=E[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=E[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=E[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&i&&(I.$sentry_url=(n||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Ip{constructor(e,s,r,i,n,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:s,projectId:r,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(s,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.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=v?.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(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?rt(a/o,0,1,k):1,p=o>1?rt(l/o,0,1,k):1,f=u>1?rt(c/u,0,1,k):1,g=u>1?rt(d/u,0,1,k):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return r.pathname&&(i.$prev_pageview_pathname=r.pathname),r.timestamp&&(i.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),i}}var ln=["flags","surveys"],Cp={[au]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[js]:{exposure:"hidden"},[jn]:{exposure:"event"},[Un]:{exposure:"hidden"},[Hn]:{exposure:"event"},[Wn]:{exposure:"hidden"},[zn]:{exposure:"event"},[qn]:{exposure:"event"},[jo]:{exposure:"event"},[Uo]:{exposure:"hidden"},[Vn]:{exposure:"event"},[Vt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cs]:{exposure:"hidden"},[Ho]:{exposure:"event"},[lu]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Bt]:{exposure:"hidden",storageGroup:"flags"},[Us]:{exposure:"hidden",storageGroup:"flags"},[Rr]:{exposure:"hidden"},[Gn]:{exposure:"hidden",storageGroup:"flags"},[Hs]:{exposure:"hidden",storageGroup:"flags"},[Tr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ei]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"surveys"},[ti]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Jn]:{exposure:"event"},[Nr]:{exposure:"hidden"},[Mr]:{exposure:"hidden"},[Ws]:{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"},[Wt]:{exposure:"hidden"},[zs]:{exposure:"hidden"},[Lr]:{exposure:"hidden"},[Gs]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Yn]:{exposure:"hidden"},[Zn]:{exposure:"hidden"},[Xn]:{exposure:"hidden"},[Qn]:{exposure:"hidden"},[si]:{exposure:"hidden"},[ri]:{exposure:"hidden"},[cu]:{exposure:"event"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[fu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{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"}},Fp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Cp[t];if(e)return e;for(var s of Fp){var r=s[1];if(t.indexOf(s[0])===0)return r}},us=(t,e)=>{try{return JSON.stringify(t,((s,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Fc(t)}},li=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},vs=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{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},ir=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},ci=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},Ru=(t,e)=>t>=e&&kc(),Tu=(t,e,s,r)=>{if(t===0){if(kc()){var i=e+1;return i===s&&r(),i}return e}return 0},kr="https?://(.*)",_s=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Pp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._s],nr="",Ap=["li_fat_id"];function Nu(t,e,s){if(!C)return{};var r,i=e?[..._s,...s||[]]:[],n=Mu(ir(C.URL,i,nr),t),o=(r={},Z(Ap,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,n)}function Mu(t,e){var s=Pp.concat(e||[]),r={};return Z(s,(function(i){var n=vs(t,i);r[i]=n||null})),r}function Lu(t){var e=(function(n){return n?n.search(kr+"google.([^/?]*)")===0?"google":n.search(kr+"bing.com")===0?"bing":n.search(kr+"yahoo.com")===0?"yahoo":n.search(kr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),s=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var i=C?vs(C.referrer,s):"";i.length&&(r.ph_keyword=i)}return r}function gl(){return navigator.language||navigator.userLanguage}var ui="$direct";function Ou(){return C?.referrer||ui}function Du(t,e,s){s===void 0&&(s=!1);var r=t?[..._s,...e||[]]:[],i=s?Ct(re?.href):re?.href,n=i?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:n?ir(n,r,nr):void 0}}function Bu(t,e){var s;e===void 0&&(e=!1);var r=t.r,i=t.u,n=e?Ct(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==ui?ui:(s=li(r))==null?void 0:s.host};if(n){o.$current_url=n;var a=li(n);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(n);ee(o,l)}if(r){var u=Lu(r);ee(o,u)}return o}function ju(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function $p(){try{return new Date().getTimezoneOffset()}catch{return}}var Rp={flags:Gs,surveys:ti},Tp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],ss="main";class cn{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&&k.info("Persistence loaded",e.persistence,w({},this.props)),this.update_config(e,e,s),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(s)&&s>0?s:0}isDisabled(){return!!this.xi}bi(e){Tp.indexOf(e.persistence.toLowerCase())===-1&&(k.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=[...dp,...o];return w({},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];$e(g)||g===""||(p[f]=g)}d=ee(h,p)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,p,f){var g=Q.F(u,c,void 0,void 0,f);try{var m={};l.forEach((_=>{c[_]&&(m[_]=c[_])})),Object.keys(m).length&&pt.F(u,m,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{v?.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=hp: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=Mt(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 ln){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=Mt(s))==null?void 0:r.storageGroup)===e}))}Ii(e,s){var r=Rp[e];if(!r)return!1;var i=s[r],n=this.props[r];return he(i)&&he(n)&&n>i}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Mt(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?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,ss))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,s,ss),ln)){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=Mt(i))==null?void 0:n.storageGroup;o?s[o][i]=r:e[i]=r})),{main:e,groups:s}}Ei(e,s){if(s===ss)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((i,n)=>{var o;r[n]=(o=Mt(n))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(r)}Oi(e,s,r,i){var n=this.Mi(i);if(i===ss||n.dirty||x(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!==ss&&(n.persisted=!0),x(o)||(n.fingerprint=o)):this.Ne.debug&&k.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(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!r&&this.gi)for(var i of ln)Q.q(this.Si(i));r?delete this.ci[ss]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,s,r){if(te(e)){x(s)&&(s="None"),this.$i=x(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=x(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=C?.URL;if(e!==this.mi){var s=Nu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(zo(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Lu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Ou(),$referring_domain:C!=null&&C.referrer&&((e=li(C.referrer))==null?void 0:e.host)||ui},void 0)}set_initial_person_info(){this.props[Xn]||this.props[Qn]||this.register_once({[si]:Du(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};Z([Qn,Xn],(i=>{var n=this.props[i];n&&Z(n,(function(o,a){e["$initial_"+Tn(a)]=o}))}));var s=this.props[si];if(s){var r=(function(i,n){n===void 0&&(n=!1);var o=Bu(i,n),a={};return Z(o,(function(l,u){a["$initial_"+Tn(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[js]||{};r[e]=s,this.Pi(js,r),this.save()}remove_event_timer(e){var s=this.props[js]||{},r=s[e];return x(r)||(delete s[e],this.Pi(js,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=Mt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var s,r=(s=Mt(e))==null?void 0:s.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Ir(t){var e=!0;return{dispose(){if(e){e=!1;var s=t();s&&Se(s.then)&&s.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},As={Activation:"events",Cancellation:"cancelEvents"},un={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},dn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},io={Popover:"popover",Inline:"inline"},Np={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=se("[RateLimiter]");class Mp{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=>{vl.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void vl.warn('could not rate limit - continuing. Error: "'+i?.message+'"',{text:r})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var 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(Zn))!==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=(he(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(Zn,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()&&C&&C.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?.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,ys=Uint32Array,Ko=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]),Jo=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]),_l=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hu=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]},Wu=Hu(Ko,2),no=Wu[1];Wu[0][28]=258,no[258]=28;for(var yl=Hu(Jo,0)[1],zu=new Ae(32768),ne=0;32768>ne;++ne){var rs=(43690&ne)>>>1|(21845&ne)<<1;zu[ne]=((65280&(rs=(61680&(rs=(52428&rs)>>>2|(13107&rs)<<2))>>>4|(3855&rs)<<4))>>>8|(255&rs)<<8)>>>1}var Js=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]=zu[a[t[i]-1]++]>>>15-t[i];return o},Jt=new qe(288);for(ne=0;144>ne;++ne)Jt[ne]=8;for(ne=144;256>ne;++ne)Jt[ne]=9;for(ne=256;280>ne;++ne)Jt[ne]=7;for(ne=280;288>ne;++ne)Jt[ne]=8;var di=new qe(32);for(ne=0;32>ne;++ne)di[ne]=5;var Lp=Js(Jt,9),Op=Js(di,5),qu=function(t){return(t/8>>0)+(7&t&&1)},Vu=function(t,e,s){(s==null||s>t.length)&&(s=t.length);var r=new(t instanceof Ae?Ae:t instanceof ys?ys: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},$s=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},hn=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(F,P){return F.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=oo(s[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var E=n[r].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var b=n[r].s;e>p[b]?g-=1<=0&&g;--r){var I=n[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},oo=function(t,e,s){return t.s==-1?Math.max(oo(t.l,e,s+1),oo(t.r,e,s+1)):e[t.s]=s},wl=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]},Rs=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},ao=function(t,e,s){var r=s.length,i=qu(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)},bl=function(t,e,s,r,i,n,o,a,l,u,c){ot(e,c++,s),++i[256];for(var d=hn(i,15),h=d[0],p=d[1],f=hn(n,15),g=f[0],m=f[1],_=wl(h),E=_[0],b=_[1],I=wl(g),F=I[0],P=I[1],B=new Ae(19),S=0;E.length>S;++S)B[31&E[S]]++;for(S=0;F.length>S;++S)B[31&F[S]]++;for(var A=hn(B,7),R=A[0],N=A[1],T=19;T>4&&!R[_l[T-1]];--T);var O,J,z,H,oe=u+5<<3,pe=Rs(i,Jt)+Rs(n,di)+o,Ie=Rs(i,h)+Rs(n,g)+o+14+3*T+Rs(B,R)+(2*B[16]+3*B[17]+7*B[18]);if(pe>=oe&&Ie>=oe)return ao(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){O=Js(h,p),J=h,z=Js(g,m),H=g;var _e=Js(R,N);for(ot(e,c,b-257),ot(e,c+5,P-1),ot(e,c+10,T-4),c+=14,S=0;T>S;++S)ot(e,c+3*S,R[_l[S]]);c+=3*T;for(var Ce=[E,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=Lp,J=Jt,z=Op,H=di;for(S=0;a>S;++S)if(r[S]>255){var me;$s(e,c,O[257+(me=r[S]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,r[S]>>>23&31),c+=Ko[me]);var ge=31&r[S];$s(e,c,z[ge]),c+=H[ge],ge>3&&($s(e,c,r[S]>>>5&8191),c+=Jo[ge])}else $s(e,c,O[r[S]]),c+=J[r[S]];return $s(e,c,O[256]),c+J[256]},Dp=new ys([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Bp=(function(){for(var t=new ys(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t})(),pn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function jp(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,m){var _=d.length,E=new qe(f+_+5*(1+Math.floor(_/7e3))+g),b=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=ao(b,I,d.subarray(F,P)):(b[F]=!0,I=ao(b,I,d.subarray(F,_)))}else{for(var B=Dp[h-1],S=B>>>13,A=8191&B,R=(1<F;++F){var me=z(F),ge=32767&F,Ye=T[me];if(N[ge]=Ye,T[me]=ge,F>=Re){var Rt=_-F;if((Ie>7e3||Ce>24576)&&Rt>423){I=bl(d,b,0,H,oe,pe,_e,Ce,ae,F-ae,I),Ce=Ie=_e=0,ae=F;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)pe[de]=0}var Ve=2,St=0,ks=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,mr=Math.min(32767,F),vr=Math.min(258,Rt);mr>=Be&&--ks&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;vr>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var _r=Math.min(Be,je-2),Qt=0;for(de=0;_r>de;++de){var es=F-Be+de+32768&32767,Is=es-N[es]+32768&32767;Is>Qt&&(Qt=Is,Ye=es)}}}Be+=(ge=Ye)-(Ye=N[ge])+32768&32767}if(St){H[Ce++]=268435456|no[Ve]<<18|yl[St];var Ta=31&no[Ve],Na=31&yl[St];_e+=Ko[Ta]+Jo[Na],++oe[257+Ta],++pe[Na],Re=F+Ve,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=bl(d,b,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(E,0,f+qu(I)+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&&pn(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),pn(u,c-8,s.d()),pn(u,c-4,r),u}var Up=!!An||!!To,Gu="text/plain",Dr=!1,Ku=(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:"")},Ai=function(t,e,s){var r;s===void 0&&(s=!0);var i=t.split("?"),n=i[0],o=i[1],a=w({},e),l=(r=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,m){x(g)||x(m)||m==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},fn=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===xe.GZipJS){var r=jp((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var f=new qe(d+8+(u-p<<1));f.set(c),c=f}var g=a.charCodeAt(p);128>g?h(g):2048>g?(h(192|g>>>6),h(128|63&g)):g>55295&&57344>g?(h(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),h(128|g>>>12&63),h(128|g>>>6&63),h(128|63&g)):(h(224|g>>>12),h(128|g>>>6&63),h(128|63&g))}return Vu(c,0,d)})(us(e)),{mtime:0});return{contentType:Gu,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(us(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:us(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=us(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:Ai(t.url,{compression:xe.Base64}),encodedBody:fn(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:fn(w({},t,{compression:void 0,Ji:void 0}))};try{e=fn(t)}catch(i){if(Ua(t.compression,vs(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&Ua(t.compression,vs(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?$n(new Uint8Array(s)):ArrayBuffer.isView(s)&&$n(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Dr=!0,r()):{url:t.url,encodedBody:e}},Yu=t=>{try{return Ju(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Hp=(function(){var t=X((function*(e){var s=us(e.data),r=yield(function(n,o,a){return Rn.apply(this,arguments)})(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return w({},e,{Ji:{contentType:Gu,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Wp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Wp.test(t?.message||""),Xu=t=>{var e=Yu(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(Ma){var d=new Ma;u={signal:d.signal,timeout:setTimeout((()=>{var f,g;c=!0,d.abort((f=t.timeout,(g=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",g))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||Zu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;To(s,w({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((g=>{var m={statusCode:f.status,text:g};if(f.status===200)try{m.json=JSON.parse(g)}catch(_){k.error(_)}t.callback==null||t.callback(m)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},lo=t=>{try{var e,s=Ju(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(ke.sendBeacon(r,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:w({},t.data,{batch:h});return lo(w({},t,{data:d(u.slice(0,c))})),void lo(w({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(w({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return Ai(s===xe.GZipJS?Ku(t,"compression"):t,w({},i?{[i]:Date.now().toString()}:{},s===xe.GZipJS?{}:{compression:s}))},Br=[];To&&Br.push({transport:"fetch",method:Xu}),An&&Br.push({transport:"XHR",method(t){var e=Yu(t);if(e){var s=new An,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)}}}),ke!=null&&ke.sendBeacon&&Br.push({transport:"sendBeacon",method:lo});var co=3e3;class zp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt(s?.flush_interval_ms||co,250,5e3,k.createLogger("flush interval"),co),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(w({},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){k.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;x(e[n])&&(e[n]=w({},i,{data:[]})),(r=e[n].data)==null||r.push(i.data)})),this.tr=[],e}}var qp=["retriesPerformedSoFar"];class Vp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Ic(e,qp);lt(s)&&(r.url=Ai(r.url,{retry_count:s})),this._instance._send_request(w({},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(w({retriesPerformedSoFar:s},r));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(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)"),k.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,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var s=e.requestOptions;try{this._instance._send_request(w({},s,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class Gp{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?.clientHeight||0),c=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(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var s of e){var r=v?.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 v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Kp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{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({[Yn]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=i||Kp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Yn]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?Bu(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(zo(this.getSetOnceProps()),((s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Tn(r)]=s})),e}}class Yo{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 Ts=se("[SessionId]");class xl{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 Yo,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,Ts.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){Ts.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((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!$e(s)&&!$e(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({[cs]:[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(cs):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(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({[cs]:[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[cs];return L(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&v&&(v.removeEventListener(ni,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,ni,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))||Ts.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(),Ts.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)&&(Ts.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(n,l,E))),{sessionId:n,windowId:l,sessionStartTimestamp:_,changeReason:c?E:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Qu=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&Wa(s,e))return!0;try{var r=t?.userAgentData;if(r!=null&&r.brands&&r.brands.some((i=>Wa(i?.brand,e))))return!0}catch{}return!!t.webdriver};function ed(){return(ed=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),s=e?.model;return W(s)&&s.length>0?s:void 0}catch(r){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}}))).apply(this,arguments)}var hi=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 gn(t,e,s){return us({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var td={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=>hi(s,r))))),not_regex:(t,e)=>e.every((s=>t.every((r=>!hi(s,r))))),icontains:(t,e)=>e.map(Cr).some((s=>t.map(Cr).some((r=>s.includes(r))))),not_icontains:(t,e)=>e.map(Cr).every((s=>t.map(Cr).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 sd(t,e){return!t||Object.entries(t).every((s=>{var r=s[1],i=e?.[s[0]];if(x(i)||$e(i))return!1;var n=[String(i)],o=td[r.operator];return!!o&&o(r.values,n)}))}var uo="custom",kl="i.posthog.com",Jp=/^\/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("."+kl,".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":uo),this.en[this.apiHost]}rn(e){if(Jp.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===uo)return this.apiHost+s;var i=kl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=se("[Surveys]"),id="seenSurvey_",nd=t=>{try{var e=(s=>((r,i)=>""+id+(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){q.error("Failed to persist survey seen state",s)}},Zp=[un.Popover,un.Widget,un.API],Xp={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},Qp=se("[PostHog ExternalIntegrations]"),ef={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class tf{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 Qp.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(ef[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;s()}}}class sf{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&&Se(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 rf{constructor(e){this._instance=e}initialize(){}get(e){var s=this._instance.persistence;if(typeof e=="string")return s?.get_property(e);var r={};for(var i of e){var n=s?.get_property(i);x(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 Il="extensionsRemoteConfig";class nf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new rf(e),this.onEvent=s=>Ir(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 Ir((()=>{}));var r=n=>{try{s(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(Il,r);return this.un&&r(this.un),Ir(i)},this.vn=new sf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(sr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(sr);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?.sessionId)!==null&&s!==void 0?s:"",windowId:(r=n?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=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 Ir(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,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?Ai(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 Ys={},mn=0,pi=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ns="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",od="Invalid value for property_denylist config: ",of=["token","distinct_id",pu],as="posthog",ad=!Up&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,vn=t=>{var e;return w({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:op(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:pi,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:re&&W(re?.search)&&re.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(s){k.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:eo,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:co},error_tracking:{},_onCapture:pi},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:_p,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))},af=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Pl=t=>{var e={};for(var s of af){var r=s[0],i=s[1];x(t[r])||(e[i]=t[r])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),n};class lf{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,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===Ht&&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 lf,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Yo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=vn(),this.SentryIntegration=Ip,this.sentryIntegration=r=>(function(i,n){var o=$u(i,n);return{name:Au,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 Gp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Mp(this),this.requestRouter=new Yp(this),this.consent=new pp(this),this.externalIntegrations=new tf(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?.({})},set_once:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),n?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,s,r){if(r&&r!==as){var i,n=(i=Ys[r])!==null&&i!==void 0?i:new Te;return n._init(e,s,r),Ys[r]=n,Ys[as][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 k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=vn(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=vn(s.defaults),u=Pl(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&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=s.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new cn(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new cn(w({},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=w({},this.persistence.props),f=w({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new zp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Vp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,B,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:s,thisC:w({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=s.bootstrap)!=null&&i.distinctID||(s.bootstrap=w({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=s.bootstrap)==null?void 0:n.distinctID)!==void 0){var m=s.bootstrap.distinctID,_=this.get_distinct_id(),E=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===ts)this.identify(m);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var b=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?b:m;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?Tt:ts),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:br,$device_id:null},"");else if(!this.get_distinct_id()){var F=this.config.get_device_id(dt());this.register_once({distinct_id:F,$device_id:F},""),this.persistence.set_property(He,ts)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),s.segment?(function(P,B){var S=P.config.segment;if(!S)return B();(function(A,R){var N=A.config.segment;if(!N)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,Tt)),R()},O=N.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(P,(()=>{S.register((A=>{typeof Promise<"u"&&Promise.resolve||an.warn("This browser does not have Promise support, and can not use the segment integration");var R=(N,T)=>{if(!T)return N;N.event.userId||N.event.anonymousId===A.get_distinct_id()||(an.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(an.info("UserId set, identifying with PostHog"),A.identify(N.event.userId));var O=A.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},O,N.event.properties),N};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:N=>R(N,N.event.event),page:N=>R(N,os),identify:N=>R(N,rn),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==pi&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(P=>this.config._onCapture(P.event,P)))),this.config.ip&&k.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return ed.apply(this,arguments)})().then((P=>{P&&this.register({[tn]:P})})).catch(pi),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)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var s,r,i,n,o,a,l,u=performance.now(),c=w({},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,kp)),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){k.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-s);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var s;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var r,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=M(i.supportedCompression,xe.GZipJS)?xe.GZipJS:M(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:eo}),(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){k.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 Uu(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()&&Er(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(sn),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(sn,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ad?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=w({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(s=>{var r,i,n,o=w({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((E=>w({},E,{sent_at:_}))):w({},m,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Br.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(i=(n=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(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=m=>{try{f(m)}catch(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&lh&&typeof Promise<"u"&&!Dr?Hp(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Dr=!0,void g(w({},o,{compression:void 0,url:El(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var E="name"in _?String(_.name):"";return Ha(_)||E===Cc})(m)&&(Dr=!0),g(o)})):f(o)})(w({},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){mn++;try{var s,r=[],i=[],n=[];Er(e,(a=>{if(a)if(L(s=a[0]))n.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&s==="alias"?r.push(a):L(a)&&s.indexOf("capture")!==-1&&Se(this[s])?n.push(a):i.push(a)}));var o=function(a,l){Er(a,(function(u){try{if(L(u[0])){var c=l;Z(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){k.error("Error executing queued PostHog call",u,d)}}))};o(r,this),o(i,this),o(n,this)}finally{mn--}}push(e){if(mn>0&&L(e)&&W(e[0])){var s=Te.prototype[e[0]];Se(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(!x(e)&&W(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=r!=null&&r.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){s!=null&&s.$current_url&&!W(s?.$current_url)&&(k.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||k.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=r?.timestamp||d,p=Ga(r?.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,s||{},h,p)};e===os&&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(ei)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,E,b,I=g?void 0:this.Vn(r?.$set_once,e!==Qa,e===rn);if(I&&(f.$set_once=I),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(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var z;if(l.add(O),L(O))z=[],Er(O,(oe=>{z.push(T(oe))}));else{var H={};Z(O,((oe,pe)=>{l.has(oe)||(H[pe]=T(oe))})),z=H}return z}})(o)),f.timestamp=h,x(r?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return ch.forEach(z),O.forEach(z),J})(f.properties,of)),e===ft.DISMISSED||e===ft.SENT){var F=s?.[dn.SURVEY_ID],P=s?.[dn.SURVEY_ITERATION];nd({id:F,current_iteration:P}),f.$set=w({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",b="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+E+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===ft.SHOWN&&(f.$set=w({},f.$set,{[dn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Np.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=w({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=w({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=r?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),N={method:"POST",url:R,data:f,compression:"best-available",timestampMode:r?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r?._batchKey,transport:r?.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(N):this.In.enqueue(N),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(s=>e(s.event,s)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new nf(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=w({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=w({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Nn(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(F,P,B,S){var A,R,N,T;if(S===void 0&&(S=!1),!Pe)return{};var O,J=F?[..._s,...P||[]]:[],z=(function(vr){for(var je=0;qa.length>je;je++){var _r=qa[je],Qt=_r[1],es=_r[0].exec(vr),Is=es&&(Se(Qt)?Qt(es,vr):Qt);if(Is)return Is}return["",""]})(Pe),H=z[0],oe=z[1],pe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(B)||(Ie.detectGoogleSearchApp=B);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(N=v.screen)==null?void 0:N.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Ye,Rt,de,Ve,St,ks,Be,Fe,mr=ee(zo({$os:H,$os_version:oe,$browser:Xc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Nc||Fe===Tc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Gc?fs:Fe===er||Fe===hs||Fe===tr||Fe===Ln?"Console":Fe===Lc?"Wearable":Fe?Oe:de?.userAgentDataPlatform==="Android"&&((Ve=de?.maxTouchPoints)!==null&&Ve!==void 0?Ve:0)>0?600>Math.min((St=de?.screenWidth)!==null&&St!==void 0?St:0,(ks=de?.screenHeight)!==null&&ks!==void 0?ks:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:fs:"Desktop"),$timezone:ju(),$timezone_offset:$p()}),{$current_url:ir(S?Ct(re?.href):re?.href,J,nr),$host:re?.host,$pathname:re?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Fh(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(mr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),mr})(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(F){a.$sdk_debug_error_capturing_properties=String(F)}if(this.requestRouter.region===uo&&(a.$lib_custom_api_host=this.config.api_host),u=e!==os||n?e!==sn||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===os&&C&&(a.title=C.title),!x(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(),m=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(F=>{F in g&&delete m[F]}));var _={};if(this._n.length>0)for(var E of this._n.slice())try{ee(_,E())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,w({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Fl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!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&&(k.error(Fl),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?.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:Ns}),()=>{})}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:Ns})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:Ns})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=Xp),(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:Ns}}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:Ns})}Jn(e){return!e||Nn(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===br?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,s,r){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(sr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Bs)&&(this.unregister(Bs),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||ts)===ts,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(rn,{distinct_id:e,$anon_distinct_id:i},{$set:s||{},$set_once:r||{}}),this.Sn=gn(e,s,r),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Tt);var u=s||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=gn(e,s,r)}else(s||r)&&this.setPersonProperties(s,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(s||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,s){if((e||s)&&this.Gn("posthog.setPersonProperties")){var r=gn(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):k.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:w({},i,{[e]:s})}),n||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(Qa,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),n&&!r&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,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),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(sr),g=this.get_property(tn),m=this.get_property(Vt),_=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(),x(m)||(p=this.persistence)==null||p.register({[Vt]:m}),(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,ts),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:br,$device_id:null},"");else{var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:e?E:f},""),e||x(g)||this.register({[tn]: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){k.error("Error while destroying feature flags",d)}}else k.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(au)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(s)&&(s=this.get_distinct_id()),e!==s?(this.Kn(Bs,e),this.capture("$create_alias",{alias:e,distinct_id:s})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var s=w({},this.config);if(te(e)){var r,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(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 cn(w({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);Ke(m)&&(this.config.debug=m),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:s,newConfig:w({},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(w({},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:as;return s!==as&&(s=as+"."+s),s}_isIdentified(){var e,s;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((s=this.sessionPersistence)==null?void 0:s.get_property(He))===Tt}Zn(){var e,s;return!(this.config.person_profiles==="never"||this.config.person_profiles===eo&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Bs])&&((s=this.persistence)==null||(s=s.props)==null||!s[ri]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(ri,!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!==Ht)}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 xl(this),this.pageViewManager=new fl(this),this.persistence&&(this.sessionPropsManager=new Sl(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==Ht&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Cl)}opt_out_capturing(){var e,s,r;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Ht&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ht&&(this.register({distinct_id:br,$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())):k.warn(Cl)}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===Ht?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?Qu(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(os,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ii,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,ii,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(s,r,i,n,o){var a=r in s&&!D(s[r]),l=i in s&&!D(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,k)}Pt(e){var s;if(D(this.config.before_send))return e;var r=Object.keys((s=e.properties)!==null&&s!==void 0?s:{}).filter(mh),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),D(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return gh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}n.properties&&!mt(n.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(n.properties&&D(n.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return 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)}}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]]=ip(t.prototype[e[s]])})(Te,["identify"]);class Al{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 _n="$copy_autocapture",yn=se("[AutoCapture]");function wn(t,e){return e.length>t?e.slice(0,t)+"...":e}function cf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function uf(t,e){var s,r,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ft(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Su>c.length;)if(Eu(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!Ft(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,m=[],_={},E=!1,b=!1;if(Z(c,(S=>{var A=ro(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ai(S),"ph-no-capture")&&(b=!0),m.push((function(T,O,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Vo.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?wn(1024,dl(T)):wn(1024,rr(T)));var Ie=ai(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Fu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Ks(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=qo(ge).join(" ")),pe["attr__"+ae.name]=wn(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=cf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,n,o,a,u));var N=(function(T){if(!ro(T))return{};var O={};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&&Ks(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),E){var I,F;m[0].attr__href=E;var P=(I=li(E))==null?void 0:I.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=E)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(S){return S.map((A=>{var R,N,T="";if(A.tag_name&&(T+=A.tag_name),A.attr_class)for(var O of(A.attr_class.sort(),A.attr_class))T+="."+O.replace(/"/g,"");var J=w({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(N=A.nth_of_type)!==null&&N!==void 0?N:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Or(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return z[hl(H[0].toString())]=hl(oe.toString())})),(T+=":")+Or(z).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((A=>{var R,N,T={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(N=A.attr__href)==null?void 0:N.slice(0,2048),attr_class:Sp(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Or(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(s=m[0])!=null&&s.$el_text?{$el_text:(r=m[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Ms=se("[ExceptionAutocapture]"),$l=()=>{},df=se("[TracingHeaders]"),Lt=se("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",Ls="awaiting_config",Fr="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var ho="[SessionRecording]",at=se(ho),hf=se("[Heatmaps]");function bn(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Pr=se("[Product Tours]"),En=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Uo))},pf=["$set_once","$set"],Ze=se("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function is(t,e,s){if(D(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 ff{constructor(e){this.ns=new Yo,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?.event===r?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,s;x((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(!x((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?.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?.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?.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"||!is(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=>is(a.href,s.href,s.href_matching||"exact")));var n,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&is((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=>is(u.text,s.text,s.text_matching||"exact")||is(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;!D(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=>is(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?.properties.$elements}hs(e,s){return s==null||!s.properties||s.properties.length===0||sd(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?.properties)}}class gf{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&&sd(e.propertyFilters,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===As.Activation?this.ws:this.ks).get(e),n=[];return this.As((o=>{n=o.filter((a=>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;x((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 ff(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,As.Activation),this.ks=this.Ps(e,As.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,As.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,As.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(w({},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 he(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=>he(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 mf extends gf{constructor(e){super(e)}Js(){return Jn}Ys(){return Nr}Ms(){return Mr}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Mr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Mr)}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 he(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 q}Ws(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Jn]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Nr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Nr)}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 rd(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 Ar="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",vf=v!=null&&v.location?ci(v.location.hash,"__posthog")||ci(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=se("[Toolbar]"),Bl=se("[FeatureFlags]");class _f{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||(Bl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Bl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var jl=se("[FeatureFlags]"),Ot=se("[FeatureFlags]",{debugEnabled:!0}),Sn=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},Wl=t=>{var e={};for(var s of Or(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Xe=se("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",yf={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>hi(e,t),not_regex:(t,e)=>!hi(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(zl);else if(!this.Ne.disable_web_experiments){if(D(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=vs(e?.search,"__experiment_id"),r=vs(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!D(e.conditions)&&ye.da(e,s)&&ye.va(e)}static da(e,s){var r;if(D(e.conditions)||D((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=yu(s,i.href);return(n=e.conditions)==null||!n.url||yf[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.utm))return!0;var r=Nu();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];k.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(zl):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?.forEach((a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?Qu(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=se("[Conversations]"),Dt="Conversations not available yet.",ql="console",ld="__posthogHandledLogsRequestError",xn=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[ld]=!0,s},Vl=t=>!!t&&typeof t=="object"&&t[ld]===!0,$i={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=jl,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 _f(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 v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],v?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Us,Hs,Tr,et]){var s=this.Oa(e);x(s)||(t[e]=s)}this.fa=t;var r=w({},t),i=this.Oa(Bt);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(Gs);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(!x(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(Bt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(i=this.Oa(Hs))!==null&&i!==void 0?i:{},a=w({},n,t),l=w({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Da(h),variant:Ba(h),reason:void 0,metadata:x(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Gn),e=this.Oa(et),s=this.Oa(jt);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?.[n],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=s?.[n],p=w({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=w({},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:Da(r),variant:Ba(r),payload:Oa(e[s])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);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(Hs),e=this.Oa(jt);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(Wt)}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:w({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(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();x(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({[Lr]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:s,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!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?Ul:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Lr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):s.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Ru(this.Sa,3)}Ua(t){this.Sa=Tu(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?.variant)!==null&&s!==void 0?s:r?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+Sn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s,r=this.getFlagVariants(),i=t in r,n=r[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(Tr)||void 0,u=this.Oa(Gs)||void 0,c=this.Oa(Wt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(zs);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({[Wt]:c,[zs]:s});else{var f,g,m,_,E,b,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(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:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(E=S.metadata)==null?void 0:E.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(F=S.reason)==null?void 0:F.code;T&&(R.$feature_flag_reason=T),S!=null&&(P=S.metadata)!=null&&P.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(B=S.metadata)!=null&&B.original_payload&&(R.$feature_flag_original_payload=S==null||(N=S.metadata)==null?void 0:N.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else s&&this.F({[Wt]:c,[zs]:s});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+Sn)}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();x(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"?xe.Base64:void 0,sentAt:"body",timeoutMs:s.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=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+Sn),e.defaultValue;var s=this.getFeatureFlag(t,e);return x(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=jl);var c=((P,B)=>{var S=P.flags;return S?w({},P,{featureFlags:Object.fromEntries(Object.keys(S).map((A=>{var R;return[A,(R=S[A].variant)!==null&&R!==void 0?R:S[A].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((A=>S[A].enabled)).filter((A=>{var R;return(R=S[A].metadata)==null?void 0:R.payload})).map((A=>{var R;return[A,(R=S[A].metadata)==null?void 0:R.payload]})))}):(P.featureFlags&&B.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 m={};if(h)for(var _=0;h.length>_;_++)m[h[_]]=!0;return{[Us]:h,[Bt]:m,[ei]:!1}}var E=h,b=p,I=d;if(l!=null&&l.partialResponse)E=w({},n,E),b=w({},o,b),I=w({},a,I);else if(i.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=w({},n,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),b=w({},o,Object.fromEntries(Object.entries(b||{}).filter((P=>F.has(P[0]))))),I=w({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=w({},n,E),b=w({},o,b),I=w({},a,I);return w({[Us]:Object.keys(Wl(E)),[Bt]:E||{},[Hs]:b||{},[Gn]:I||{},[ei]:i.minimalFlagCalledEvents===!0},f?{[Tr]:f}:{},g?{[Gs]: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([et,jt]),this.Va(),void Ot.info("All overrides cleared");if(L(t))return this.F({[et]:Hl(t)}),this.Va(),void Ot.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[et]=L(i)?Hl(i):i),n&&(r[jt]=n),Object.keys(r).length&&this.F(r),i===!1&&n===!1?this.q([et,jt]):i===!1?this.q(et):n===!1&&this.q(jt),this.Va(),i===!1?Ot.info("Flag overrides cleared"):i&&Ot.info("Flag overrides set",{flags:i}),void(n===!1?Ot.info("Payload overrides cleared"):n&&Ot.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[et]:t}),this.Va(),void Ot.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(Rr)||[]).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=w({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(o)),[Bt]:o,[ct]:w({},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(Rr);!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({[Rr]: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?.$set||(t!=null&&t.$set_once?{}:t),i=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]:w({},s,n,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=w({},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(Ut)||{},r=w({},s);for(var i of Object.keys(t))r[i]=w({},s[i],t[i]);this.F({[Ut]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:w({},e,{[t]:{}})})}else this.q(Ut)}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}}},wf={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===Ls||this.Ya===Fr?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=Tl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var s=v==null||(e=v.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;C?.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(ho+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(ho+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Vt))==null||!t.enabled),s=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&s&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var s=!x(Object.assign)&&!x(Array.from);this.ro&&s?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Ls&&this.Ya!==Fr&&(this.Ya=Nl),$!=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(Ho),(e=this.Mr)==null||e.unregister(lu)}uo(t,e){if(D(t))return null;var s,r=he(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?.sampleRate,"remote config sampleRate"),u=a??l;D(u)&&this.lo();var c=o?.minimumDurationMilliseconds;r.register({[Vt]:w({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:w({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(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===Ls&&(this.Ya=Fr,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(Vt);return(s==null||(e=s.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Vt);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!D(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({[mu]:!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===Fr||this.Ya===Ls?void 0:(this.Ya=Ls,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Uu(this._instance).load());this.Ya=Nl,(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({[uu]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[cu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?du:hu]:!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))}}},bf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(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(v&&C){var t=s=>{s=s||v?.event;try{this.bo(s)}catch(r){yn.error("Failed to capture event",r)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||v?.event;try{this.bo(s,_n)}catch(r){yn.error("Failed to capture copy/cut event",r)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else yn.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({[jn]: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=C?.querySelectorAll(r);i?.forEach((n=>{t===n&&s.push(r)}))})),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[jn],r=this.co,i=this.instance.Qi()&&!this.fo;if($e(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=on(t);bu(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())&&ol(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===_n;if(r&&(function(d,h,p,f,g,m){var _;if(!v||Go(d)||p!=null&&p.url_allowlist&&!rl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&rl(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var E=p.dom_event_allowlist;if(E&&!E.some((S=>h.type===S)))return!1}var b=Cu(d,f),I=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,A){var R=A?.element_allowlist;if(x(R))return!0;var N,T=function(J){if(R.some((z=>J.tagName.toLowerCase()===z)))return{v:!0}};for(var O of S)if(N=T(O))return N.v;return!1})(F,p)||!so(F,p?.css_selector_allowlist)||so(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:vp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var B=d.tagName.toLowerCase();switch(B){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return I?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(Vo.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=uf(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===_n){var l,u=xu(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var 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 Se(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),r[i]=a,()=>{if(r[i]!==a)for(var l=r[i];Se(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else r[i]=o.next}}catch{return $l}})(v.history,t,(r=>function(i,n,o){r.call(this,i,n,o),s.So(t)}))}}So(t){try{var e,s=v==null||(e=v.location)==null?void 0:e.pathname;if(!s)return;s!==this._o&&this.isEnabled&&this._instance.capture(os,{navigation_type:t}),this._o=s}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[Un]),this.rageclicks=new Al(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 D(this.Ne.capture_heatmaps)?D(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;hf.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({[Un]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){bn(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,ni,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,xp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,ii,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(ni,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ii,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&&Ft(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(M(a,c))return!0;u=ku(u)}return!1})(on(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"),!sl(t.target)&&bn(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(on(t),this.instance.config.rageclick)&&this.Vt(w({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!sl(t.target)&&bn(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Ct(v.location.href):v.location.href,s=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[..._s,...s||[]]:[],i=ir(e,r,nr);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:pl,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",w({$current_url:this.R.url},this.R.metrics.reduce(((s,r)=>w({},s,{["$web_vitals_"+r.name+"_event"]:w({},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},D(s?.name)||D(s?.value))Lt.error("Invalid metric received",s);else{var i=typeof s.navigationURL=="string"?s.navigationURL:void 0,n=this.Bo(i);if(!x(n)){var o=he(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)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=x(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=w({},s,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});x(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Lt.error("Ignoring metric with value >= "+this.Ho,s)}}},this.Uo=()=>{if(!this.vo){var s,r,i,n,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(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 Lt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[qn]),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 D(s)?((e=this._instance.persistence)==null?void 0:e.props[Vn])||["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)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Rl;return t>0&&6e4>=t?Rl:t}get isEnabled(){var t=re?.protocol;if(t!=="http:"&&t!=="https:")return Lt.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&&(Lt.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({[qn]:s}),this._instance.persistence.register({[Vn]: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?.postHogWebVitalsCallbacksByFlavor;r!=null&&r[s]||s==="web-vitals"&&x(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,s,(i=>{i?Lt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var s=this._instance.config.disable_capture_url_hashes?Ct(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[..._s,...r||[]]:[];return ir(s,i,nr)}Lt.error("Could not determine current URL")}}},Ef={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(v&&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){Ms.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Hn]),this.Jo=new yh(w({},(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:Ms})),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=w({},e,t):(x(t)?this.Ko:t)&&(e=w({},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?(Ms.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 Ms.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({[Hn]: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)?Ms.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 Lh([new zh,new Qh,new Vh,new qh,new Zh,new Yh,new Kh,new Xh],(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=Xa.test(h)?h.replace(Xa,"$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(m){if(!m.length)return[];var _=Array.from(m);return _.reverse(),_.slice(0,50).map((E=>{return w({},E,{filename:E.filename||(b=_,b[b.length-1]||{}).filename,function:E.function||ms});var b}))})(u)}})("web:javascript",jh,Wh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(Wn))!==null&&e!==void 0?e:[],this.el=Qr(this.il()),this.rl=new tp(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({[Wn]:this.Xo,[zn]:o})}}}get nl(){var t,e=!!this._instance.get_property(zn),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?.syntheticException,mechanism:{handled: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)=>ep.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(w({[Zr]:t,[Xr]: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&&D(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:w({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?w({},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=td[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!D(t)&&L(t)}}},Sf=w({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({[Uo]:!!e.productTours}),!En(this._instance))return!this.vl&&D((s=this.Mr)==null?void 0:s.props[Ws])||Pr.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&&En(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?Pr.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[Ws];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(En(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||Pr.warn(o):Pr.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({[Ws]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){D(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(Ws)}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)}}},$i),xf={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:w({},Ic(t,pf),{properties:w({},t.properties,f?{$set:w({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:w({},(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=C?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(m,_,E)=>{if(m!=null&&m[_]){var b=m[_];m[_]=E(b),c.push((()=>{m[_]=b}))}},f=m=>{if(h.has(m))return m;var _=d.bl(m);return _&&h.add(_),_},g=m=>m.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(m=>function(_){var E=f(_);return E?m.call(this,E):_})),p(u,"insertBefore",(m=>function(_,E){var b=f(_);return b?m.call(this,b,E):_})),p(u,"replaceChild",(m=>function(_,E){var b=f(_);return b?m.call(this,b,E):E})),[(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((m=>{p(m,"append",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))}))})),[(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((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"after",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];var F=g(b);return b.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var b=f(E);return b?m.call(this,_,b):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var 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(Ml+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;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,(d=>{if(d)return Ze.error(Ml+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.')}}}},kf={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?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(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 df.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()}}},If=w({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return q.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(D(e))return q.warn("Flags not loaded yet. Not loading surveys.");var s=L(e);this.Rl=s?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],s=0;slocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ll);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())q.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var s=t.generateSurveys;if(s)return void this.Dl(s,e);var r=t.loadExternalDependency;if(!r)return void this.$l(Wo);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 q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new mf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var s,r=this._instance.get_property(Kn);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?q.error(a):i.error||q.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)&&(rd(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({[Kn]:c,[ti]:Date.now()});var h={isLoaded:!0};t(c,h),s?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ti);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var s,r={id:t,current_iteration:(s=e?.iteration)!==null&&s!==void 0?s:null};nd(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){q.error("Error in survey callback",s)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!D(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);q.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(D(this._surveyManager))return{eligible:!1,reason:Ar};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(D(this._surveyManager))return{eligible:!1,reason:Ar};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(D(this._surveyManager))return q.warn("init was not called"),{visible:!1,disabledReason:Ar};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return D(this._surveyManager)?(q.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Ar})):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(D(this._surveyManager))q.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(Zp.includes(i.type)){var n=C?.querySelector(e);if(n)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(q.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.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),q.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,s);q.warn("Survey element not found")}else q.warn("Surveys of type "+i.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var s;if(D(this._surveyManager))q.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=w({},r,{appearance:w({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==io.Popover&&e.initialResponses&&q.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 q.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else q.warn("Survey not found")}}cancelPendingSurvey(t){D(this._surveyManager)?q.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},$i),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),to(this.instance.config)||!v||!C)return!1;t=t??v.location,s=s??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var r,i=vf||ci(t.hash,"__posthog")||ci(t.hash,"state"),n=i?el((()=>JSON.parse(atob(decodeURIComponent(i)))))||el((()=>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(Ol)||"{}")).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;!D(e)&&Se(e)?e(t,this.instance):Dl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(wu));if(!v||e)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=w({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(w({},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 Dl.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(r)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(r)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,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)}}},Ff=w({experiments:ye},$i),Pf={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;D(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||to(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var s=t.loadExternalDependency;if(!s)return void this.eu(Wo);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&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":to(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?D(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(Dt),null)}))()}getMessages(t,e){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.getMessages(t,e):(Ue.warn(Dt),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Dt),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Dt),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Dt),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Dt),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Dt),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()}}},Af={logs:class{constructor(t){var e,s=this;this.iu=!1,this.ru=!1,this.rt=se("[logs]"),this.nu=w({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),n=0;r>n;n++)i[n]=arguments[n];i.some(Vl)||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),v&&ie(v,"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?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,E=x(_)?Math.max(m,2048):Math.max(m,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,s);return[new Th(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},ql);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;!D(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){Vl(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(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(Wo)}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(Ru(this.Sa,3))e({kind:"fatal",error:xn(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:xn(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:xn(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=Tu(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,ql,(e=>{this.su=e}))}xu(t,e,s,r,i){if(e.length!==0){var n=e.map((a=>a.record));i([]);var o=ru(n,su(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,D(i)||(e.sessionStartTimestamp=i),D(n)||(e.lastActivityTimestamp=n)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Ct($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},$f={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 Nh(this.hu(),(function(r){var i,n,o,a,l,u=r?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:r?.serviceName,serviceVersion:(n=u?.["service.version"])!==null&&n!==void 0?n:r?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:r?.environment,resourceAttributes:u,beforeSend:r?.beforeSend,flushIntervalMs:(a=r?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(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(w({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)}}},Rf=w({},$i,wf,bf,Ef,Sf,xf,If,kf,Cf,Ff,Pf,Af,$f);Te.__defaultExtensionClasses=w({},Rf);var cd=(function(){Y.SDK_DIST_CHANNEL="npm";var t=Ys[as]=new Te;return(function(){function e(){e.done||(e.done=!0,ad=!1,Z(Ys,(function(s){s._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const ud="CodeFile",dd="GeneratedCode",Tf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function po(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Nf(t={},e=0){const s=po(t.artifactType||t.type||ud),r=po(t.artifactName||t.name||t.fileName||`${dd}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function hd(t={},e=0){const s=kt(t),r=s.artifactType||s.type||ud,i=s.artifactName||s.name||dd;let n=s.fileName||i;return n.endsWith(".dart")||(n+=".dart"),{id:po(s.id)||Nf({...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:pd(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:fd(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Tf[r]||"O"}}function pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const 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 fd(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 fo(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 or(t,e={}){const s=[],r=typeof t=="string"?fo(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?.artifactType&&!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)=>hd(d,h)),l=new Map(o.map((d,h)=>[kt(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=fd(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:pd(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 fi(t){return or(t).artifacts[0]||hd()}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 ws(t){return JSON.stringify(t,null,2)}function Mf(t){return ws({task:"architect",userRequest:String(t??"")})}function Lf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ws(e):ws({task:"generate_bundle",bundleSpec:e})}function Of(t){return ws({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 Zo(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function Df({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:i}){return ws({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(i)})}function gd({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return ws({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(r??"")})}const Gl={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 Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function jf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function md(t,e=0){if(!Le(t)||e>3)return null;if(jf(t))return t;for(const s of Bf){const r=t[s];if(Le(r)){const i=md(r,e+1);if(i)return i}}return null}function gi(t){return Array.isArray(t)?t.some(gi):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(gi):!1}function go(t){return Array.isArray(t)?t.some(go):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(go):!1}function vd(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(Le(t))for(const[s,r]of Object.entries(t)){if(!Le(r))continue;const i=Le(r.categories)?r.categories:{},n=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):r.matched===!0&&e.add(vd(s))}}function Hf(t,e){if(!t)return;const s=Array.isArray(t)?t.flatMap(r=>Le(r)?Object.entries(r):[]):Object.entries(t);for(const[r,i]of s){if(!gi(i))continue;const n=vd(r),o=i?.raiFilterResult?.raiFilterTypeResults||(n==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>gi(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(n)}}function Wf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(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 zf(t){const e=md(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Uf(e.filterSummary,s),Hf(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,i=e.invocationResult||null,n=go(e.filterSummary||e.filterResults);return!r&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...s]}}function qf(t,e){const s=zf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Wf))],i=s.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Kl(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 ${Kl(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 Vf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of Vf(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 Xo(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 Yl(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 Gf(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=Xo(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Yl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Yl(c)),s[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(Jl(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 Kf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Jf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Yf=["Struct","Record"],Zf=[{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=>kn(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=>kn(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 { - const _P({required this.t}); - final double t; -} -class W extends StatefulWidget { - const W({this.value = 1.0}); - final double value; -}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } -var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } -var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>kn(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { - const W({this.textStyle}); - final TextStyle? textStyle; - @override _S createState() => _S(); -} -class _S extends State { @override Widget build(BuildContext c) => const SizedBox(); }`,neg:`class W extends StatefulWidget { - const W({this.width}); - final double? width; - @override _S createState() => _S(); -} -class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function Qe(t,e,s){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:s}}function ar(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function Qf(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;ieg(t).usable);function sg(t=""){const e=ar(t);return tg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:i})=>({id:s,severity:r,message:i}))}function rg(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=Xf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iXl(o.functionName)===r);if(i)return i;const n=o=>!o.functionName.startsWith("_");return s.find(n)||s[0]}function Ri(t=""){return Array.from(ar(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ig(t="",e=""){return Qo(t,e)?.returnType||null}function Ql(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 ng(t,e){const s=Ri(e);if(s.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Ql(l)===i)||s.length>1)return null;const[o]=s,a=`${Ql(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 ea(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function og(t,e,s=""){const r=Qo(e,s)?.functionName;if(!r)return null;const i=String(t||"").split("/").pop(),n=Xo(i,"A");if(n===r)return null;const o=`${ea(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 ag(t="",e=""){return Qo(t,e)!==null}function lg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>Jf.has(r)?!1:!Yf.some(n=>r.endsWith(n))||e.has(r))}function cg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=ig(t,e),i=lg(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 ug(t,e={}){const s=[],r=t.fileName||"",i=t.code||"";if(Kf.has(t.artifactType)||s.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||s.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return s.push(Qe(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(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of sg(i))s.push(Qe(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!ag(i,t.artifactName)&&s.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(Ri(i)),o=cg(i,{functionName:t.artifactName,declaredTypes:n});o&&s.push(Qe(t,"error",o));const a=og(r,i,t.artifactName);a&&s.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=ng(r,i);n&&s.push(Qe(t,"info",n))}return s}function dg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(n=>Ri(n.code||""))),r=e.flatMap(n=>ug(n,{declaredTypes:s})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Zl[n.artifactType]||Zl.CodeFile}));return{valid:r.every(n=>n.severity!=="error"),findings:r,deployHints:i}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function hg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const pg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function fg(t="",e=""){const s=hg(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),i=s.split(` -`).filter(n=>{const o=tc(n);return o===null||!r.has(o)?!0:!pg.test(n)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const gg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function _d(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 wg(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 bg(t,e={}){const s=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),n=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=yg(p),g=p.fixedCode||p.code||"",m=p.codeType||vg[p.artifactType]||Ne.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:m,path:p.deployPath||_g(f,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Ne.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} -${m.content}`).join(` - -`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,_)=>!g.has(_)),o[p.index]=f}const u={...sc(t?.dependencies),...i.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};i.forEach(p=>{ta(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=wg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:n,errors:h}}function Eg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Sg(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 xg(t,e){const r=[Sg(t),Eg(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 kg(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:xg(r,i),content:i.content,fileName:r,path:i.path});return s}function Ig(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 rc={pass:0,warning:1,fail:2},Cg=["manualActions"];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 tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Fg(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 sa(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 mo(...t){return t.filter(Boolean).reduce((e,s)=>rc[s]>rc[e]?s:e,"pass")}function yd(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:sa(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 vo(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])=>tt(s[i]).map(o=>yd(o,n,e)).filter(Boolean))}function Pg(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 _o(t,e=null){const s=De(t);return Cg.flatMap(r=>tt(s[r])).map((r,i)=>Pg(r,i,e)).filter(Boolean)}function Ag(t){let e=typeof t=="string"?fo(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=fo(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 $g(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 Rg(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function Tg(t,e){return tt(t?.relationships).filter(s=>We(s?.from)===We(e.id)||We(s?.to)===We(e.id))}function Ng(t,e){return tt(t?.metadata?.compatibility?.findings).filter(s=>!s?.artifactId||We(s.artifactId)===We(e.id)).map(s=>yd(s,"warning","Compatibility check")).filter(Boolean)}function Mg(t,e,s,r){const i=$g(e,s),n=De(i?.review||i||s.review),o=Object.keys(n).length>0,a=[...vo(n),...Ng(t,s)],l=_o(n,s.id),u=sa(n.status||n.verdict||n.outcome||n.result),c=a.length?mo(...a.map(h=>h.severity)):null,d=mo(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,fixedSource:typeof n.fixedSource=="string"&&n.fixedSource.trim()?n.fixedSource.trim():null,pathHint:Rg(t,s),relationships:Tg(t,s)}}function Lg({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 Og({bundle:t,reviewResult:e}){const s=De(t),r=tt(s.artifacts),{root:i,rawText:n}=Ag(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(b=>Object.keys(b).length)||{},a=tt(i.artifacts||i.files||i.reviews),l=r.map((b,I)=>Mg(s,a,b,I)),u=vo(i),d=[...vo(o),...u],h=[..._o(o),..._o(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,F)=>F.findIndex(P=>P.title===b.title&&P.artifactId===b.artifactId)===I),p=sa(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=mo(p,...d.map(b=>b.severity),...l.map(b=>b.status)),g=o.score??i.score??i.overallScore??n,m=Fg(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)||Lg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:s.title||"Generated artifact bundle",description:s.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:tt(s.deployOrder),relationships:tt(s.relationships),warnings:tt(s.warnings),compatibility:De(s.metadata?.compatibility)}}const Dg=/^\uFEFF/;function Os(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).join(` -`)}function Bg(t){const e=String(t??"").replace(Dg,"");if(!e.trim())return"";const s=e.split(` -`),r=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,n=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,n<0&&(n=d),o.push(c+h)),c+=s[d].length+1}}if(i===0)return Os(s);{const c=yo(e);if(!c.error&&o.every(h=>nc(h,c.commentAndStringRanges)))return Os(s)}if(i===1){const c=Os(s.slice(0,n)),d=Os(s.slice(n+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` - -`)}function jg(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function wd(t){const e=jg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),s=>s[1])}function bd(t){return`${ea(t)}.dart`}function Ug(t){return Xo(t,"W")}const ic={"(":")","[":"]","{":"}"},Hg={")":"(","]":"[","}":"{"},Wg=/[A-Za-z0-9_]/;function yo(t){const e=[{kind:"code",opener:null,openedLine:0}],s=[];let r=1,i=0;const n=(c,d)=>{(c===` -`||c==="\r"&&d!==` -`)&&r++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&s.push({start:c.startIndex,end:t.length})};for(;i0?t[i-1]:"",f=i>1?t[i-2]:"",g=(p==="r"||p==="R")&&!Wg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:i,openedLine:r}),i+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:r}),i++;continue}if(Hg[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${r}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:s}):(a(),{error:o??`line ${r}: unexpected "${c}" with no matching opener`,commentAndStringRanges:s})}n(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:s}}function zg(t){return yo(String(t??"")).error}function nc(t,e){return e.some(({start:s,end:r})=>t>=s&&ttypeof s=="string"?s: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??"")}const qg=/^dependencies\s*:\s*(?:#.*)?$/,Vg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function ra(t){const e=t.match(Vg);return e?e[1]??e[2]??e[3]:null}function Ti(t){const e=t.trim();return e===""||e.startsWith("#")}function pr(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(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;n=0.0.0"}`}function Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const i=s.split(` -`),n=new Set(Sd(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=na(i);if(l){const u=o.map(([c,d])=>oc(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(oc(" ",u,c))});return{yaml:i.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function Yg(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=Ni(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(pr(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` -`),overridden:o,skipped: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"),na(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),Sd(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 Zg=">=3.0.0 <4.0.0",Xg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","integration_test"]);function Cd(t){const e=String(t||"").trim(),s=e[0];return s!=="'"&&s!=='"'||e[e.length-1]!==s?e:e.slice(1,-1).replaceAll(`${s}${s}`,s)}function Qg(t=""){const e=mg(t).filter(s=>!s.startsWith("dart:")&&!s.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function ac(t,e,s){const r=[];for(const[i,n]of t){if(Xg.has(i)&&!n.isScalar){s.add(i);continue}if(!n.isScalar){r.push(i);continue}e[i]=Cd(n.constraint)}return r}function em(t){const e=new Set,s={},r={},i=ac(Ni(t),s,e);i.push(...ac(Gg(t,"dependency_overrides"),r,e));const n=new Set([...Object.keys(s),...e]),{sdk:o}=xd(t);return{sdkConstraint:Cd(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:n,unrepresentable:i}}function tm(t,e,s){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${s.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function sm(t,e){const{sdkConstraint:s,dependencies:r,overrides:i,sdkPackages:n,availablePackages:o,unrepresentable:a}=em(e),l={sdkConstraint:s,dependencies:r,overrides:i,sdkPackages:n},u=[],c=[];for(const d of t){const{className:h,content:p}=d;if(a.length>0){c.push({className:h,reason:`${h} was not compiled before deploying: your project declares ${a.join(", ")} from a source that cannot be reproduced outside the project, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:f}=Qg(p),g=ta(p).filter(m=>!o.has(m));if(f.length>0||g.length>0){c.push({className:h,reason:tm(h,f,g)});continue}u.push({fileName:`${ea(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}function lc(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",i=[];for(const n of s){const o=Fd(n);o&&i.push(o)}return{events:i,buffer:r}}function rm(t){const e=Fd(t);return e?[e]:[]}function Fd(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 im(t,e={}){const{onPhase:s,onLog:r}=e;let i=null,n="";const o=a=>{if(a.event==="phase"){a.message&&s&&s(a.message);return}if(a.event==="log"){a.message&&r&&r(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=lc(n,l.decode(c,{stream:!0}));n=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());n=a.buffer,a.events.forEach(o)}return rm(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 nm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(nm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function om(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 lm(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(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:lm(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 cc(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=mi(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=mi(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function cm(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=mi(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function ns(t){const e=aa(t);return e?e.min:null}const um="https://pub.dev/api/packages/",dm=8e3;function hm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let n=null;for(const o of i){const a=o?.version;if(!a||o.retracted||am(a))continue;const l=o.pubspec?.environment||{};s&&l.sdk&&!cc(l.sdk,s)||r&&l.flutter&&!cc(l.flutter,r)||(!n||mi(a,n)>0)&&(n=a)}return n?{version:n,constraint:`^${n}`}:null}async function pm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:i=fetch}=e;let n;try{const a=await i(`${um}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(dm)});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=hm(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 fm(t,e={}){const s=await Promise.all(t.map(r=>pm(r,e)));return new Map(s.map(({name:r,...i})=>[r,i]))}async function gm(t,e={},s={}){const{resolveVersions:r=fm}=s,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),n=xd(t),o={dartSdkFloor:ns(n.sdk),flutterSdkFloor:ns(n.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Ni(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=ns(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(cm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ns(p)){a.additions[d]=`^${ns(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ns(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const mm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>mm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function vm(t,e={}){const s=t?.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function _m(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 ym(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 wm(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 bs(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 uc(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 Pd(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=bs(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 Mi(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=wm(o),u=Pd(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+=`
    -

    - ${_m(l)} - ${bt(l)} -

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

    - ${ym(l)} - ${bt(l)} -

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

    ${uc(a)}

    `)}return r+="
    ",` -
    -
    -
    - Live Audit Report -
    - ${r} -
    - `}const bm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",Em="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",Sm="https://us.i.posthog.com";cd.init(Em,{api_host:Sm,person_profiles:"identified_only"});function zt(t,e={}){try{cd.capture(t,e)}catch(s){console.error("PostHog tracking failed",s)}}const Je="https://4tgke4.buildship.run",Ad={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},vi="ccc_auth_session",dc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function Es(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=Es({isResolved:!0});const xm=`${Je}/service/runpipeline`,km="bs_user_id",Im="bs_identity_token",Cm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const _i={free:2,professional:50,power:2e3},yi="ccc_subscription",hc=3,Fm=new Set(["active","trialing","paid"]),lr="google/gemini-3.7-flash",jr=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],Pm={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function qt(t){return Pm[t]||t}const Am=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function $d(t){return Am.has(t)}const wo=4,In=8*1024*1024,$m="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Rm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Tm(t){const e=new FormData;return e.append("file",t),(await fetch($m,{method:"POST",body:e})).json()}function Nm(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const s of Object.keys(e)){if(s==="item"||s==="index")continue;const r=e[s];if(r&&typeof r=="object"){if(typeof r.file=="string")return r.file;if(typeof r.url=="string")return r.url}if(typeof r=="string")return r}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function Mm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const s=e.filter(l=>l.size>In);s.length&&ue(`Skipped ${s.length} image(s) over the ${(In/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=In);if(!r.length){t.target.value="";return}const i=wo-Pt.length,o=r.slice(0,i).map(async l=>{const u=await Rm(l);if(!u)return null;let c="";try{c=Nm(await Tm(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!$d(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),r.length>i&&ue(`You can attach up to ${wo} images.`,"info"),la())}function Lm(t){Pt.splice(t,1),la()}function la(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((s,r)=>{const i=document.createElement("div");i.className="prompt-img-thumb",i.innerHTML=`Prompt image`,t.appendChild(i)}),e&&(e.textContent=Pt.length>=wo?"Image limit reached":"Add images"))}function Rd(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),s=$d(e?.value);t.classList.toggle("hidden",!s),!s&&Pt.length&&(Pt=[],la())}const Kt="ccc_usage",Td="google/gemini-3.7-flash",Nd="google/gemini-3.7-flash",Cn="google/gemini-3.7-flash",pc={professional:11,power:49},bo={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},Ur={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 Hr={...Ur};async function Om(){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(Ur),...Object.values(Eo),...Object.values(bo)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:Ur[a]&&(n[a]=Ur[a]));Hr=n}catch{}finally{clearTimeout(e)}}const Eo={"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 Md(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&Eo[n])return Eo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=bo[e];if(s)return s;const r=e.split("_")[0],i=bo[r];return i||"USD"}function fc(t,e){const s=Hr[e]??Hr.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*Hr.USD)}}const st="ccc_api_key_",_t="ccc_session_api_key_",nt="ccc_encryption_key",cr="ccc_encryption_key_scope",Dm="ccc_keystore",wi="keys",ur="ccc_encryption_key_version";let So=null,bi=null,dr=!1,Ei=!1,gc=!1;class Si extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function mc(){if(gc)return;gc=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&ue(t,"warning")}function Ld(){return localStorage.getItem(ur)||""}function xo(){return crypto.randomUUID?.()||Dd(crypto.getRandomValues(new Uint8Array(16)))}function Bm(){const t=Ld();if(t)return t;const e=xo();return localStorage.setItem(ur,e),e}function Ss(){So=null,bi=null,dr=!1,Ei=!1}window.addEventListener("storage",t=>{t.key===ur&&Ss()});function jm(){return new Promise((t,e)=>{const s=indexedDB.open(Dm,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(wi)||r.createObjectStore(wi)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function ca(t,e){const s=await jm();return new Promise((r,i)=>{const n=s.transaction(wi,t);let o;try{o=e(n.objectStore(wi))}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 Um(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Hm(){const t=await ca("readonly",e=>e.get(nt));return Um(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,nt))}async function Wm(){Ss();try{await ca("readwrite",t=>t.delete(nt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function zm(){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 Od(e),sessionStorage.removeItem(nt),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),e}async function vc(t){const e=sessionStorage.getItem(nt);if(e)return Ei=sessionStorage.getItem(cr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Si;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(cr,"session"),Ei=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function qm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(nt))return mc(),dr=!0,vc(t);try{const e=await Hm();if(e)return e;const s=await zm();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Od(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),mc(),dr=!0,vc(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=Bm();bi!==s&&Ss();const r=So||qm(e);So=r,bi=s;try{return await r}catch(i){throw Ss(),i}}async function Vm(t){const e=await ua(),s=bi,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:Dd(o),keyVersion:s,sessionFallback:dr}}async function Gm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Ei)throw new Si;const i=Km(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 Si)throw r;return console.error("Decryption failed:",r),null}}function Dd(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let hr="",xi="",Zs=null,yc=0;async function da(){sessionStorage.getItem(nt)&&await ua(),hr=await Ee("flutterflow"),xi=await Ee("flutterflow_project_id"),Qm(),Xt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),hr&&Hd(hr)}function Bd(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&&(pa(),s.classList.add("open"))}let Et=1;function jd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Li(){const t=jd();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++,Li())}function Ym(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Li(),t.classList.add("open"))}function Zm(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 Ud(){if(G.isVerified&&Yt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Li(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");hr?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Xm()}function Xm(){wc("flutterflow","flutterflow-key-status"),wc("flutterflow_project_id","flutterflow-project-status")}function wc(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),i=s.querySelector("span");ls(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 Xt(){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 Qm(){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"?ls("flutterflow")&&ls("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):ls("flutterflow")||ls("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)"):ls(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)")}),Xt()}async function ev(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await _c("flutterflow",t.value);const s=e?.value.trim()||"";if(s){if(!Oi(s)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await _c("flutterflow_project_id",s)}await da(),fa();const r=document.querySelector("#api-keys-modal .bg-blue-500"),i=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=i,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),Bd()},1e3)}async function tv(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ur,xo()),Ss(),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(cr),localStorage.removeItem(st+"salt"),await Wm(),localStorage.setItem(ur,xo()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await da();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),fa()}function Oi(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function sv(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function rv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;sv("flutterflow-api-key-input",s)}),t.addEventListener("blur",iv(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function iv(t,e){let s;return function(...i){const n=()=>{clearTimeout(s),t(...i)};clearTimeout(s),s=setTimeout(n,e)}}async function Hd(t){const e=document.getElementById("flutterflow-projects-select"),s=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',s&&s.classList.add("hidden");try{const i=await new gr(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)}),xi&&(e.value=xi)}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 nv(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 ov(){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 av(){y.bundleSpec=or(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Di(){const t=fi(y.bundleSpec);y.artifactBundle=or(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=dg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(s=>s.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=fi(y.artifactBundle).id}function Bi(){const t=or(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(r=>[r.id,r.review])),s=new Map(t.artifacts.filter(r=>{const i=r.review;return i&&typeof i.fixedSource=="string"&&i.fixedSource.trim()}).map(r=>[r.id,r.review.fixedSource.trim()]));y.bundleReview=or({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(r=>{const i=s.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...i?{fixedCode:i}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Wd(){const t=ga();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ga(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||fi(t)}function ma(){return ga().code||y.step2Result||""}async function lv(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Wr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function cv(t,e){const s=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${s}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${s}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class gr{constructor(e,s,r="main",i=Wr.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(){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 r of e)try{const i=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();s=new Error(`Export failed: ${i.status} - ${a}`);continue}const n=await i.json(),o=n?.value?.project_zip||n?.project_zip;if(!o){s=new Error("Export response did not include project source.");continue}return o}catch(i){s=i}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){const r=[Wr.production,Wr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let n=0;nsetTimeout(d,1e3*(n+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(n+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const r=JSON.parse(e.value);if(r&&Array.isArray(r.entries))return r.entries.map(i=>({id:i.id,name:i.project?.name||i.id}))}catch(r){console.error("Failed to parse stringified project value:",r)}const s=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(s)?s:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let s=0,r="";for(const i of e){const n=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(n.ok)return i!==e[0]&&console.log(`listProjects answered on legacy path ${i}`),this.parseProjectsResponse(await n.json());if(s=n.status,r=await n.text(),console.warn(`listProjects via ${i} returned ${s}: ${r}`),n.status===401||n.status===403)throw new Error(cv(n.status,r));if(n.status!==404)throw new Error(`List projects failed: ${n.status} - ${r}`)}throw new Error(`List projects failed: ${s} - ${r}`)}}async function va(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}}let r={};if(s.value)try{r=typeof s.value=="string"?JSON.parse(s.value):s.value}catch(i){console.warn("Ignoring malformed push response value:",i)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function _a(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"},zd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,qd=/extends\s+State<\w+>/;function uv(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=zd.test(e),r=qd.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function Vd(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function ya(t,e=new Map){return Gf(t,e)}const ko=new Map;function Gd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function ji(t){ko.delete(Gd(t))}async function wa(t,e,s,r,i=""){const n=kg(e,s);if(n.length===0)return{remoteFiles:s,syncFileMap:e,unverified:[]};const o=sm(n,i),a={...o.manifest,sources:o.sources},l=o.skipped.map(d=>d.reason);l.forEach(d=>console.warn(`[custom class deploy] ${d}`)),console.log(`Provisioning ${n.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(bm,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:n,verification:a,stream:!0})}),c=await im(u,{onPhase:d=>be.setSubstatus(d),onLog:d=>console.log(`[custom class deploy] ${d}`)});if(!c.success){const d=c.details?` ${c.details}`:"";throw new Error(`${c.error||"FlutterFlow custom class provisioning failed."}${d}`)}return ji(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:s,syncFileMap:Ig(e,n),unverified:l}}async function ba(t,e={}){const s=Gd(t);let r=ko.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=Id(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.`);ko.set(s,r)}const i=await gm(r.pubspecYaml,e),n=Yg(r.pubspecYaml,i.overrides),o=Jg(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 dv(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);i&&i.length>3&&s.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`);const n=zg(t.content);if(n&&e.push(`FlutterFlow cannot format this code - ${n}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=wd(t.content),a=Ug(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${bd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:s}}function Kd(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode",fileName:i}=e,n=Bg(t);let o=i||r;if(s==="CustomFunction")o="custom_functions.dart";else if(s==="CustomWidget"){const u=wd(n)[0],c=u?bd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(s){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports -import '/flutter_flow/flutter_flow_theme.dart'; -import '/flutter_flow/flutter_flow_util.dart'; -import 'package:flutter/material.dart'; -// Begin custom widget code -// DO NOT REMOVE OR MODIFY THE CODE ABOVE! - -`:a===U.ACTION?l=`// Automatic FlutterFlow imports -import '/flutter_flow/flutter_flow_theme.dart'; -import '/flutter_flow/flutter_flow_util.dart'; -import 'package:flutter/material.dart'; -// Begin custom action code -// DO NOT REMOVE OR MODIFY THE CODE ABOVE! - -`:a===U.FUNCTION&&(l=`// Automatic FlutterFlow imports -import 'dart:convert'; -import 'dart:math' as math; - -import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:intl/intl.dart'; -import 'package:timeago/timeago.dart' as timeago; -import '/flutter_flow/lat_lng.dart'; -import '/flutter_flow/place.dart'; -import '/flutter_flow/uploaded_file.dart'; - -`),{content:fg(n,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function hv(t){const e={};for(const s of ta(t))e[s]="";return e}function pv(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 fv(t,e,s,r=new Set,i=""){const n=[],o=zd.test(e),a=qd.test(e);return s===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:n.length===0,errors:n}}function Ui(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=>Ri(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=fv(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 V={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:V.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=V.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(V).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===V.PREPARING&&(this.startTime=Date.now()),(t===V.SUCCESS||t===V.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(V.ERROR)},setSuccess(t){this.result=t,this.setState(V.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===V.PREPARING||this.currentState===V.VALIDATING||this.currentState===V.PUSHING}};async function gv(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(V.PREPARING);try{const o=await Ee("flutterflow"),a=await Ee("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Oi(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=fr(),u=new gr(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=r||uv(e,t),h=Vd(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Ui(c);if(!p.valid)throw new Error(`Validation failed: -${p.errors.join(` -`)}`);const f=await ba(u,i),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${n} custom class`,g),_=await ya(m.syncFileMap,m.remoteFiles),E=new Map(m.syncFileMap);E.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const b=await Ea(E),I={project_id:a,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(V.PUSHING),K.setProgress(1,c.size),ji(u),be.set("push");const F=await u.pushCode(I),P=await va(F);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const B=P.errorMessage||_a(P.responseCode);throw new Error(B)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,unverified:m.unverified,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){const e=new JSZip;for(const[s,r]of t.entries())e.file(s,r.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function mv(t,e={}){const{artifactType:s,artifactName:r,fileName:i,pipelineResult:n}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(V.PREPARING);const o=Kd(t,{artifactType:s,artifactName:r,fileName:i}),a=hv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Zs||await Ee("flutterflow_project_id");if(!l)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!u)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Oi(u))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(o.fileName,{artifactName:r,content:o.content,type:o.codeType,path:Vd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,c.size);const d=Ui(c);if(!d.valid)throw new Error(`File validation failed: -${d.errors.join(` -`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(V.PUSHING);const h=fr(),p=new gr(l,u,"main",h),f=await ba(p,a),g=f.yaml,m=await wa(p,c,f.remoteFiles,`Provision ${r} custom class`,g),_=await ya(m.syncFileMap,m.remoteFiles),E=new Map(m.syncFileMap);E.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const b=await Ea(E),I={project_id:u,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),ji(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...pv(o,n),projectId:u};return K.setSuccess({...B,fileCount:c.size,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${o.fileName} to FlutterFlow`,metadata:B,addedDependencies:f.added,unverified:m.unverified,warnings:P.errorMap?Array.from(P.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const B=P.errorMessage||_a(P.responseCode),S=new Error(B);throw S.errorMap=P.errorMap,S}}catch(o){console.error("Commit execution failed:",o),K.setError(o);let a=new Map;if(o.errorMap)a=o.errorMap;else if(o.message&&o.message.includes("{"))try{const l=o.message.match(/\{[\s\S]*\}/);if(l){const u=JSON.parse(l[0]);a=new Map(Object.entries(u))}}catch(l){console.warn("Failed to parse error map from commit response:",l)}return{success:!1,error:o.message,errorMap:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function vv(t,e={}){const{pipelineResult:s}=e;try{if(K.setState(V.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: -${t.errors.join(` -`)}`);const r=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,r.size);const i=Ui(r);if(!i.valid)throw new Error(`File validation failed: -${i.errors.join(` -`)}`);K.setState(V.VALIDATING);const n=await Ee("flutterflow"),o=Zs||await Ee("flutterflow_project_id");if(!n)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!o)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Oi(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=fr(),l=new gr(n,o,"main",a),u=await ba(l,t.dependencies),c=u.yaml,d=await wa(l,r,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await ya(d.syncFileMap,d.remoteFiles),p=new Map(d.syncFileMap);p.set("pubspec.yaml",{content:c,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const f=await Ea(p),g={project_id:o,zipped_custom_code:f,uid:`web_${Date.now()}`,branch_name:l.branchName,serialized_yaml:c,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,r.size),ji(l),be.set("push");const m=await l.pushCode(g),_=await va(m);if(_.success){const I={...s,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((F,P)=>F+P.content.length,0),projectId:o};return K.setSuccess({...I,fileCount:r.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,addedDependencies:u.added,unverified:d.unverified,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const E=_.errorMessage||_a(_.responseCode),b=new Error(E);throw b.errorMap=_.errorMap,b}catch(r){return console.error("Bundle commit execution failed:",r),K.setError(r),{success:!1,error:r.message,errorMap:r.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function _v(t,e=[]){const s=Zo("architect");try{return await ki("architect",Td,Mf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function Hi(t,e,s=[]){const r=Lf(t),i=Zo("generator",y.bundleSpec);try{return await ki("generator",e,r,i,s)}catch(n){if(n.isModelArmor)throw n;if(e!==Cn){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,n.message);try{return await ki("generator",Cn,r,i,s)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${n.message} | fallback (${Cn}): ${o.message}`)}}throw new Error(`Code Generator failed: ${n.message}`)}}async function Wi(t,e=null){const s={...Zo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await ki("review",Nd,Of(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function Sa(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Io(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` - - `):e==="completed"?(s.classList.add("completed"),r.classList.add("completed"),r.innerHTML=` - - `):e==="error"?(s.classList.add("error"),r.classList.add("error"),r.innerHTML=` - - `):r.innerHTML=` - - `)}function 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"),Io(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Io(t,"completed"))}function yv(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 wv(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"),Zt();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 bv(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{zt("Code Copied",{elementId:t});const i=e.closest(".code-container")?.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function Co(t){const e=Po(t);console.log(`Step 1 (Prompt Architect): ${qt(Td)}`),console.log(e!==t?`Step 2 (Code Generator): ${qt(t)} → ${qt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${qt(t)}`),console.log(`Step 3 (Code Review): ${qt(Nd)}`)}async function Ev(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` - - - Refining...`});try{const s=ga(),r=Df({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."});Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(r,t),Di();const i=document.getElementById("step2-output"),n=bs(y.step2Result);i.textContent=n,i.dataset.raw=n,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Mi(y.step3Result);Gi(n,a)}catch(s){console.error("Refinement failed:",s),$t(),ue(Sa(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Xt()}}async function xa(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 Sv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function xv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` - - Fixing…`);try{const i=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});ah(),Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(i,s),Di();const n=document.getElementById("step2-output"),o=bs(y.step2Result);n.textContent=o,n.dataset.raw=o,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Mi(y.step3Result);Gi(o,l),t&&(t.value="")}catch(i){console.error("Fix from errors failed:",i),$t(),ue(Sa(i,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Xt()}}async function Fo(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!t.trim()){ue("Please describe your FlutterFlow widget first.","warning");return}if(!await zv())return;await Dv();const s=Po(e);zt("Pipeline Started",{selectedModel:e,effectiveModel:s,inputLength:t.length});const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,ov(),r.disabled=!0,r.innerHTML=` - - - Running...`,Co(s);try{Zt();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden"),Vi(),ze(1),it(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await _v(t,o),av(),zt("Prompt Architect Completed");const a=document.getElementById("step1-output"),l=bs(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),it(2),ve(2,!0),y.step2Result=await Hi(y.step1Result,s,o),Di(),zt("Code Generator Completed");const u=document.getElementById("step2-output"),c=bs(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi(),zt("Code Review Completed");const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Mi(y.step3Result);Gi(c,h)}catch(i){if(console.error("Pipeline failed:",i),$t(),i.isUsageLimit){const{count:c}=zi();Aa(c,Pa(),{openModal:!0});return}zt("Pipeline Failed",{error:i.message,effectiveModel:Po(document.getElementById("code-generator-model").value)});const o=vm(i,{architect:1,generator:2,review:3});ze(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),u=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),u)if(i.isModelArmor)u.innerHTML=``;else{let c=i.message;i.message.includes("image input")?c=`This model doesn't support image input. Please use ${qt(lr)} for image-based requests or remove image references from your prompt.`:(i.message.includes("Load failed")||i.message.includes("CORS"))&&(c="API connection failed. This might be due to CORS restrictions or network issues. Please check your API key and try again."),u.innerHTML=`
    -

    Connection Error

    -

    ${j(c)}

    -
    -

    Check if API key is valid

    -

    Try using a different model

    -

    Ensure network allows API calls

    -
    -
    `}Io(o,"error")}finally{y.isRunning=!1,r.disabled=!1,r.innerHTML=` - - - Run Pipeline`,Xt()}}function kv(){const t=document.getElementById("code-generator-model").value,e=[lr,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),s=prompt(`Retry with different model? - -Current: ${t} - -Options: -1. ${e[0]} -2. ${e[1]} - -Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],Fo()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],Fo())}async function Iv(){const t=ma();if(!t){ue("No code to commit. Please run the pipeline first.","warning");return}const e=await Ee("flutterflow"),s=await Ee("flutterflow_project_id");if(!e||!s){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ha();return}if(y.artifactBundle?.artifacts?.length>1){await Cv();return}const{artifactType:r,artifactName:i,fileName:n}=Wd(),o=Kd(t,{artifactType:r,artifactName:i,fileName:n}),a=dv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}eh(o,a,null,null)}async function Cv(){const t=await Ee("flutterflow"),e=await Ee("flutterflow_project_id");if(!t||!e){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ha();return}const s=bg(y.artifactBundle);if(s.errors.length>0){ue(`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=Ui(r),n={canProceed:i.valid&&s.errors.length===0,issues:[...s.errors,...i.errors],warnings:[...s.warnings,...i.warnings]};if(!n.canProceed){ue(`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};eh(o,n,s.dependencies,s)}function Fv(t){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[i,n]of e.entries()){const o=Ed(n);s+=`
    • - ${j(i)}: ${j(o)} -
    • `}s+="
    "}s+="
    ",s+=`
    - -
    `;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{Pv(t.error,e)}))}async function Pv(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=Ed(d);i+=`File: ${c} -Error: ${h} - -`}else i+=`${t} -`;const n=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(n,s),Di();const o=document.getElementById("step2-output"),a=bs(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=Mi(y.step3Result);Gi(a,u)}catch(i){console.error("Regeneration failed:",i),$t(),ue(Sa(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Xt()}}async function Av(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const s=await Ee("flutterflow"),r=await Ee("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 $v(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 Rv(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 Tv(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 bc(t,e){const s=Jd(),r=(G.email||s.email)!==t;G.email=t,G.sessionToken=e,G.isVerified=!0,fe=Es({isLoading:!0}),localStorage.setItem(vi,JSON.stringify({email:t,sessionToken:e})),r&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=Es({isResolved:!0}),localStorage.removeItem(vi),localStorage.removeItem(yi)}function Jd(){try{const t=localStorage.getItem(vi);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(vi),{email:null,sessionToken:null}}}async function Nv(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Rv(e);bc(s,r)}catch(s){ue(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Jd();if(s&&r){const i=await Tv(r);i?bc(i.email,i.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Mv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Lv(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),s=document.getElementById("signin-message"),r=t?.value?.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 $v(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(n){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:n}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Ov(){ka(),$a(),Ca(),qi()}function Ca(){const t=G.isVerified&&!!G.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=G.email||""),zr(),qi()}async function Yd(){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(Cm,{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(Ge.userId=i.user_id,Ge.token=i.identity_token||null,Ge.status=i.status,Ge.resolved=!0,sessionStorage.setItem(km,i.user_id),Ge.token&&sessionStorage.setItem(Im,Ge.token),i.usage_count!==void 0){const n=At(),a=(i.usage_month||n)===n?i.usage_count:0;localStorage.setItem(Kt,JSON.stringify({count:a,month:n})),Xs()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Fn=null;function Dv(t=5e3){return Ge.resolved?Promise.resolve():(Fn||(Fn=Yd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Fn,new Promise(e=>setTimeout(e,t))]))}function Zd(){const t=At();try{const e=localStorage.getItem(Kt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Kt,month:t,err:e}),localStorage.removeItem(Kt),{count:0,month:t}}}function At(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function zi(){const t=Zd();return t.month!==At()?{count:0,month:At()}:t}function Bv(){const e={count:zi().count+1,month:At()};return localStorage.setItem(Kt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Yt(){return!!fe.isResolved}function jv(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(_i,e)?e:null}function Uv(t){return t&&Object.entries(Ad).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Hv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Wv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=Hv(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),r=e.metadata||s.metadata||e.customer?.metadata||{},i=$r(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,s.priceId,s.price_id,s.plan?.id,s.price?.id,s.items?.data?.[0]?.price?.id,s.items?.[0]?.price?.id,s.lines?.data?.[0]?.price?.id),n=$r(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=jv($r(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=Fm.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Uv(i)||(a||l?"professional":"free");return Es({tier:u,status:n,periodEnd:$r(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function Pa(){return _i[fe.tier]??_i.free}async function zv(){if(G.isVerified&&(!Yt()||Fa())&&(await Xd({force:!0}),qi()),G.isVerified&&!Yt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=zi(),e=Pa();if(t>=e)return Aa(t,e,{openModal:!0}),!1;const s=Math.floor(e*.8);if(t>=s){const r=e-t;ue(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function Pn(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Aa(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){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Ii();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",G.isVerified),u.classList.remove("hidden"),s.openModal&&Ii()}function Po(t){return fe.tier==="free"&&jr.includes(t)?lr:t}function qv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,i=!(G.isVerified&&!Yt())&&s==="free";Array.from(e.options).forEach(o=>{const a=qt(o.value),l=jr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&jr.includes(e.value)&&(e.value=lr),e.disabled=!1,dc.has(e)||(e.addEventListener("change",()=>{Yt()&&fe.tier==="free"&&jr.includes(e.value)&&(e.value=lr,Ii()),Co(e.value),Rd()}),dc.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(),Co(e.value)}function Xs(){const t=document.getElementById("usage-counter");if(!t)return;if(G.isVerified&&Fa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",zr(),Pn();return}if(G.isVerified&&!Yt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",zr(),Pn();return}const{count:e}=zi(),s=Pa();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",zr(),e>=s&&!y.isRunning?Aa(e,s):Pn()}function zr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Zd(),s=e.month===At()?e.count??0:0,r=_i.free;t.textContent=`${s} / ${r} generations used`}async function Xd(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=Es({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(yi);if(!e&&s)try{const{data:r,email:i,ts:n,version:o}=JSON.parse(s);if(o===hc&&i===G.email&&Date.now()-n<300*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:G.sessionToken,user_id:Ge.userId})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ka(),Ca();return}fe=Es({isResolved:!1,error:i.error});return}fe=Wv(i),localStorage.setItem(yi,JSON.stringify({version:hc,data:fe,email:G.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function $a(){localStorage.removeItem(yi)}async function Vv(t){if(!G.isVerified||!G.sessionToken){Qd(),Ia();return}if(!Ad[t]){ue("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const r=await(await fetch(`${Je}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:G.sessionToken,currency:Md()})})).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"),ue("Could not start checkout. Please try again.","error")}}async function Gv(){if(!G.isVerified||!G.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:G.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"),ue("Could not open billing portal. Please try again.","error")}}async function ki(t,e,s,r={},i=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(xm,{method:"POST",headers:{"Content-Type":"application/json",...Ge.token?{Authorization:`Bearer ${Ge.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ge.userId,step:t,model:e,prompt:s,images:i,context:r})}),u=await l.text();let c={};try{c=u?JSON.parse(u):{}}catch{c={}}if(l.status===429){c.serverCount!==void 0&&(localStorage.setItem(Kt,JSON.stringify({count:c.serverCount,month:At()})),Xs());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=qf(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=At();(c.usage_month||p)===p&&(localStorage.setItem(Kt,JSON.stringify({count:c.usage_count,month:p})),Xs())}else Bv(),Xs();let h=c.output||c.content;if(!h){const p=u?` (body: ${u.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${p}`)}return Array.isArray(h)&&(h=h.map(p=>typeof p=="string"?p:p.text||"").join("")),typeof h!="string"&&(h=JSON.stringify(h)),h}catch(l){throw l.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):l instanceof TypeError?new Error(`BuildShip unreachable: ${l.message}`):l}finally{clearTimeout(a)}}function Kv(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),$a(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),ue("Checkout cancelled.","info"))}function qi(){const t=G.isVerified&&!!G.email,e=fe.tier,s=t&&Fa(),r=!t||Yt(),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"),Jv(r?e:null),qv(),Rd(),Xs()}function Jv(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 Ao(){const t=Md(),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=fc(pc.professional,t)),s&&(s.textContent=fc(pc.power,t));const n="billed monthly";r&&(r.textContent=n),i&&(i.textContent=n)}function Ii(){Ao();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Om().then(()=>Ao())}function Qd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function ue(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-"}),Yv(),await Nv(),Kv(),await Xd(),qi(),Ao(),await lv(),rv();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=fr();t.value=s}Ud(),Yd();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(pa(),Li())}),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===V.PREPARING||r===V.VALIDATING||r===V.PUSHING?(be.phaseId||sh(),Sc(r)):(r===V.SUCCESS||r===V.ERROR)&&(Sc(r),setTimeout(Ci,1e3))})});function Yv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Zv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Zt),document.addEventListener("keydown",Zt))}function Zt(){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",Zt),document.removeEventListener("keydown",Zt),Ud()}let Qs=null;async function Xv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++yc,s=()=>e===yc,r=await Ee("flutterflow"),i=await Ee("flutterflow_project_id");if(s()){if(!r){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new gr(r,"").listProjects();if(!s())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),i&&(t.value=i)}catch(n){if(!s())return;console.error("Failed to load projects for deploy:",n),t.innerHTML=''}}}function Qv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function eh(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,Xv();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 th(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Qs=null}function e_(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 $o(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},s=t.metadata?.fileName||"",r=t.metadata?.projectId||"",i=t.metadata?.artifactType||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",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"),h=t.unverified||[],p=t.warnings||[];(p.length>0||h.length>0)&&c&&d&&(d.innerHTML=[...h.map(g=>`
  • Not verified before deploying: ${j(String(g))}
  • `),...p.map(([g,m])=>`
  • ${j(g)}: ${j(String(m))}
  • `)].join(""),c.classList.remove("hidden"));const f=document.getElementById("commit-success-modal");f&&f.classList.add("open")}function Ro(t){Ci(),Fv(t)}function t_(){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 Ec={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}},s_=[{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(!(!Ec[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=Ec[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=s_.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(r_(e)),rh(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 r_(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 sh(t){be.start(t)}function Ci(){be.stop()}function rh(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 Sc(t){const e={[V.PREPARING]:"prepare",[V.VALIDATING]:"validate",[V.PUSHING]:"project",[V.SUCCESS]:"done"};if(t===V.ERROR){be.timer&&clearInterval(be.timer),be.timer=null,rh(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function i_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function n_(){if(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Qv(),th(),sh({withProvisioning:i_(t)}),t.bundlePlan){const o=await vv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Ci(),o.success?$o(o):Ro(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:i}=Wd(),n=await mv(e.content,{artifactType:s,artifactName:r,fileName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Ci(),n.success?$o(n):Ro(n)}window.runThinkingPipeline=Fo;window.toggleStep=wv;window.toggleSection=yv;window.selectWorkflowStep=ze;window.copyCode=bv;window.retryWithDifferentModel=kv;window.openApiKeysModal=ha;window.closeApiKeysModal=Bd;window.closeWalkthroughModal=Zm;window.openWalkthroughModal=Ym;window.advanceWalkthrough=pa;window.commitToFlutterFlow=gv;function o_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function a_(){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=o_;window.openModelSelector=a_;window.handlePromptImageSelect=Mm;window.removePromptImage=Lm;window.saveApiKeys=ev;window.clearAllApiKeys=tv;window.toggleKeyVisibility=nv;window.handleWelcomeVideoEnd=Zv;window.dismissWelcomeVideo=Zt;window.initiateCommitToFlutterFlow=Iv;window.updateFlutterFlowCredentialStatus=Av;window.closeCommitConfirmModal=th;window.closeCommitSuccessModal=e_;window.showCommitSuccessModal=$o;window.showCommitFailureModal=Ro;window.toggleCodePreview=t_;window.confirmCommitToFlutterFlow=n_;window.runRefinement=Ev;window.regenerateFromPastedErrors=xv;window.clearErrorInput=Sv;window.setFlutterFlowEndpoint=Jm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Mv;window.handleMagicLinkRequest=Lv;window.handleSignOut=Ov;window.startCheckout=Vv;window.openCustomerPortal=Gv;window.openPricingModal=Ii;window.closePricingModal=Qd;let ps=null,ih=null;const xc=120;function Vi(){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"),ih=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}it(1),l_()}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()-ih)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/xc*100,i=Math.min(95,r*(1-Math.exp(-t/(xc*.6)))*1.2);s&&(s.style.width=`${i}%`)},250)}function $t(){ps&&(clearInterval(ps),ps=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 xs(t,e=""){const s={pass:'',warning:'',fail:'',info:''};return``}function nh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function c_(){return Og({bundle:y.artifactBundle,reviewResult:y.step3Result})}function u_(t){return` -
    - ${xs(t.severity)} -
    -
    ${j(t.message)}
    - ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} - ${j(t.source)} -
    -
    - `}function d_(t){return` -
  • -
    - ${j(t.title)} - ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

    `:""} -
    -
  • - `}function h_(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=>` -
    • - ${xs(l.severity)} - - ${j(l.message)} - ${l.suggestion?`${j(l.suggestion)}`:""} - -
    • - `).join("")} -
    - `:"",a=t.manualSteps.length?` -
    -

    ${xs("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=>` -
    • - ${j(l.title)} - ${l.detail&&l.detail!==l.title?`${j(l.detail)}`:""} -
    • - `).join("")} -
    -
    - `:"";e.innerHTML=` -
    -
    -

    ${j(t.summary)}

    - ${o} - ${a} -
    -
    - -
    - Is the generated code correct? -
    - - -
    -
    -
    -
    - `}function p_(t){const e=t.artifacts.find(l=>l.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(u_).join(""):`
    ${xs(s.icon)} ${j(s.message)}
    `,i=e.dependencies?.length?e.dependencies.map(l=>` -
  • ${j(l.name)}${l.version?` ${j(l.version)}`:""}${l.reason?`

    ${j(l.reason)}

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

    ${j(l.description)}

    `:""}
  • - `).join(""):'
  • No relationships for this file
  • ';return` -
    -
    - ${xs(e.status)} ${j(nh(e.status))} -

    ${j(e.artifactName)}

    - ${e.description?`

    ${j(e.description)}

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

    Code Review findings

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

    Manual FlutterFlow steps for this file

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

    Dependencies

    -
      ${i}
    -
    -
    -

    Deployment

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

    Public API

    -
    ${o}
    -
    -
    -

    Imports

    -
    ${n}
    -
    -
    -

    Relationships

    -
      ${a}
    -
    -
    - `}function f_(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=>{const o=n.target.closest(".artifact-tab");o?.dataset?.artifactId&&oh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Ra(){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=c_(),o=ma();if(h_(n),f_(n),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=p_(n)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Gi(t,e){y.selectedArtifactId||(y.selectedArtifactId=fi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),Ra(),Xt();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function oh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function g_(){y.resultsViewMode="summary",Ra()}function m_(){const t=document.getElementById("btn-copy-results"),e=ma();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 v_(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";xa(r,y.step2Result,y.step1Result),zt("Generation Feedback",{feedback:r})}function __(){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 ah(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=m_;window.selectArtifact=oh;window.selectResultsSummary=g_;window.submitResultsFeedback=v_;window.showErrorInputPanel=__;window.hideErrorInputPanel=ah; diff --git a/dist/assets/index-BGahxZRu.css b/dist/assets/index-BGahxZRu.css new file mode 100644 index 0000000..2de90b9 --- /dev/null +++ b/dist/assets/index-BGahxZRu.css @@ -0,0 +1 @@ +@font-face{font-family:Delight;src:url(/assets/Delight-VF-CnVpVuQk.ttf) format("truetype");font-weight:100 900;font-display:swap}:root{--bg: oklch(96.65% .0074 260.73);--surface: oklch(100% 0 0);--surface-translucent: oklch(100% 0 0 / .65);--surface-glass: oklch(100% 0 0 / .72);--surface-sunken: oklch(98.4% .004 260);--fg: oklch(20.77% .0398 265.75);--muted: oklch(48% .02 260);--muted-2: oklch(68% .018 260);--on-dark: oklch(100% 0 0);--border: oklch(90% .012 260);--border-strong: oklch(80% .02 260);--fill-hover: color-mix(in oklch, var(--fg) 5%, var(--surface));--fill-subtle: color-mix(in oklch, var(--fg) 6%, var(--surface));--fill-selected: color-mix(in oklch, var(--fg) 4%, var(--surface));--track: color-mix(in oklch, var(--fg) 7%, var(--surface));--avatar: oklch(88% .02 260);--accent: oklch(63% .22 32);--accent-soft: oklch(from var(--accent) l c h / .18);--accent-ring: oklch(from var(--accent) l c h / .45);--fx-ink: oklch(70% .13 250);--ok: oklch(52% .11 165);--ok-soft: oklch(52% .11 165 / .12);--warn: oklch(66% .13 70);--warn-soft: oklch(66% .13 70 / .14);--bad: oklch(55% .19 25);--bad-soft: oklch(55% .19 25 / .1);--disabled-bg: oklch(88% .015 260);--disabled-fg: oklch(58% .02 260);--font-display: "Delight", "Outfit", "DM Sans", system-ui, sans-serif;--font-body: "Delight", "Outfit", "DM Sans", system-ui, sans-serif;--font-mono: "DM Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--fw-ui: 560;--fw-bold: 620;--fw-black: 700;--ls-display: -.04em;--ls-heading: -.03em;--ls-mono: .13em;--fs-display: 54px;--fs-h2: 28px;--fs-h3: 22px;--fs-h4: 18px;--fs-lead: 17px;--fs-body: 14.5px;--fs-small: 13.5px;--fs-caption: 12.5px;--fs-mono: 11.5px;--fs-micro: 10.5px;--lh-display: 1.04;--lh-heading: 1.15;--lh-body: 1.6;--radius-xl: 22px;--radius-lg: 20px;--radius-md: 16px;--radius-sm: 14px;--radius-control: 12px;--radius-nav: 11px;--radius-icon: 10px;--radius-chip: 999px;--radius-badge: 7px;--shadow-sm: 0 1px 2px oklch(20% .03 260 / .06);--shadow-md: 0 1px 2px oklch(20% .03 260 / .06), 0 18px 46px -22px oklch(20% .03 260 / .3);--shadow-control: 0 2px 6px oklch(20% .03 260 / .22);--shadow-composer: 0 0 0 3px var(--accent-soft), 0 1px 2px oklch(20% .03 260 / .06), 0 0 44px -8px oklch(63% .22 32 / .16), 0 20px 52px -20px oklch(63% .22 32 / .18);--blur-chrome: 14px;--ease: cubic-bezier(.2, 0, 0, 1);--ease-overshoot: cubic-bezier(.32, 1.38, .5, 1);--t-fast: .15s;--t-enter: .22s;--t-reveal: .5s;--t-progress: .7s;--t-ring: .9s;--t-morph: 1.12s;--touch: 44px;--control-h: 46px;--stage-w: 1920px;--stage-h: 1080px;--measure-prose: 62ch;--measure-lead: 68ch}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;transition-delay:0ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}} diff --git a/dist/assets/index-Di9kSiul.js b/dist/assets/index-Di9kSiul.js new file mode 100644 index 0000000..0b8c73b --- /dev/null +++ b/dist/assets/index-Di9kSiul.js @@ -0,0 +1,320 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(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"&&s(o)}).observe(document,{childList:!0,subtree:!0});function r(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 s(i){if(i.ep)return;i.ep=!0;const n=r(i);fetch(i.href,n)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,se=we?.location,Mo=we?.fetch,$n=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,ah=we?.CompressionStream,Pe=ke?.userAgent;function kc(){return!(!v||v.navigator.onLine===!1)}var Cr=typeof globalThis<"u"?globalThis:v;Cr&&typeof self>"u"&&(Cr.self=Cr),Cr&&typeof File>"u"&&(Cr.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(t,e,r,s,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void r(u)}a.done?e(l):Promise.resolve(l).then(s,i)}function X(t){return function(){var e=this,r=arguments;return new Promise((function(s,i){var n=t.apply(e,r);function o(l){La(n,s,i,o,a,"next",l)}function a(l){La(n,s,i,o,a,"throw",l)}o(void 0)}))}}function E(){return E=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var r=arguments[e];for(var s in r)({}).hasOwnProperty.call(r,s)&&(t[s]=r[s])}return t},E.apply(null,arguments)}function Ic(t,e){if(t==null)return{};var r={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(e.indexOf(s)!==-1)continue;r[s]=t[s]}return r}var Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fr,lh=["$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})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),ch=["$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"],uh=["token"],Cc="NativeGzipValidationError",Rn=t=>t.length>=2&&t[0]===31&&t[1]===139,Ua=(t,e)=>t===ja.GZipJS||e===ja.GZipJS||e==="gzip",Ha=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",ys=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Cc,e},dh=(function(){var t=X((function*(e,r){18>e.size&&ys("too-short");var s=new Uint8Array(yield e.slice(0,10).arrayBuffer());Rn(s)&&s[2]===8||ys("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fr)return Fr;Fr=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Fr[c]=d>>>0}return Fr})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(r)&&ys("invalid-crc");var n=r.length>>>0;i.getUint32(4,!0)!==n&&ys("invalid-size")}));return function(e,r){return t.apply(this,arguments)}})();function Tn(){return Tn=X((function*(t,e,r){e===void 0&&(e=!0);try{var s=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(s).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 dh(l,s),l}catch(u){if(r!=null&&r.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Tn.apply(this,arguments)}var hh=["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"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var r=t.toLowerCase();return hh.concat(e).some((s=>{var i=s.toLowerCase();return r.indexOf(i)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Fi=function(t){return t.trim()},Nn=function(t){return t.replace(/^\$/,"")};function Fc(t){var e,r=[];return(e=JSON.stringify(t,(function(s,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(;r.length>0&&r[r.length-1]!==this;)r.pop();if(r.includes(i))return"[Circular]";r.push(i)}return i}})))!==null&&e!==void 0?e:"null"}var Pc=Object.prototype,Ac=Pc.hasOwnProperty,Pi=Pc.toString,L=Array.isArray||function(t){return Pi.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(Ac.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Pi.call(t)=="[object String]",Mn=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Pi.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Pi.call(t)==="[object Boolean]",ph=t=>t instanceof FormData,fh=t=>M(ch,t),gh=t=>M(uh,t);function $c(t){return t===null||typeof t!="object"}function qs(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Lo(t){return typeof Event<"u"&&Rc(t,Event)}function Rc(t,e){try{return t instanceof e}catch{return!1}}var mh=[!0,"true",1,"1","yes"],Yi=t=>M(mh,t),vh=[!1,"false",0,"0","no"];function st(t,e,r,s,i){return e>r&&(s.warn("min cannot be greater than max."),e=r),he(t)?t>r?(s.warn(" cannot be greater than max: "+r+". Using max value instead."),r):e>t?(s.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(s.warn(" must be a number. using max or fallback. max: "+r+", fallback: "+i),st(i||r,e,r,s))}class _h{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,r){var s=Math.floor((r-e.lastAccess)/this.st);s>0&&(e.tokens=Math.min(e.tokens+s*this.nt,this.it),e.lastAccess=e.lastAccess+s*this.st)}consumeRateLimit(e){var r,s=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,s):this.tt[i]=n={tokens:this.it,lastAccess:s},n.tokens===0||(n.tokens--,n.tokens===0&&((r=this.et)==null||r.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Vs="iOS",vt="Android",pr="Tablet",Tc=vt+" "+pr,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qr="Safari",fr="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Vt="Chrome",yh=Vt+" OS",jc=Vt+" "+Vs,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",wh=Do+" Mini",Bo="Edge",Hc="Microsoft "+Bo,ur="Firefox",Wc=ur+" "+Vs,es="Nintendo",ts="PlayStation",dr="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qr,Dr="Windows",Ln=Dr+" Phone",za="Nokia",On="Ouya",Vc="Generic",bh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+pr.toLowerCase(),Dn="Konqueror",Kc="Oculus Browser",Gs="Vivaldi",Jc="Yandex",Ks="Whale",Bn="DuckDuckGo",Yc="Pale Moon",Js="Waterfox",Vr="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Zi=new RegExp("Version/"+le),Eh=new RegExp(dr,"i"),Sh=new RegExp(ts+" \\w+","i"),xh=new RegExp(es+" \\w+","i"),jo=new RegExp(fr+"|PlayBook|BB10","i"),kh={"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"},Xc=function(t,e,r,s){e=e||"";var i=(function(n){return n!=null&&n.brave?Vr:null})(r);return i||(s!=null&&s.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?wh:M(t," OPR/")?Do:jo.test(t)?fr:M(t,"IE"+Oe)||M(t,"WPDesktop")?Uc:M(t,"OculusBrowser")?Kc:M(t,Dc)?Bc:M(t,Bo)||M(t,"Edg/")?Hc:M(t,Gs+"/")?Gs:M(t,"YaBrowser/")?Jc:M(t,Ks+"/")?Ks:M(t,Bn+"/")||M(t,"Ddg/")?Bn:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?jc:M(t,"CrMo")||M(t,Vt)?Vt:M(t,vt)&&M(t,qr)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),Dn.toLowerCase())?Dn:M(t,Vr+"/")?Vr:((n,o)=>o&&M(o,Mc)||(function(a){return M(a,qr)&&!M(a,Vt)&&!M(a,vt)})(n))(t,e)?M(t,Oe)?qc:qr:M(t,"PaleMoon/")?Yc:M(t,Js+"/")?Js:M(t,ur)?ur:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?ur:"")},Ih={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[qr]:[Zi],[qc]:[Zi],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[ur]:[new RegExp(ur+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[Dn]:[new RegExp("Konqueror[:/]?"+le,"i")],[fr]:[new RegExp(fr+" "+le),Zi],[zc]:[new RegExp("android\\s"+le,"i")],[Bc]:[new RegExp(Dc+"\\/"+le)],[Kc]:[new RegExp("OculusBrowser\\/"+le)],[Gs]:[new RegExp(Gs+"\\/"+le)],[Jc]:[new RegExp("YaBrowser\\/"+le)],[Ks]:[new RegExp(Ks+"\\/"+le)],[Vr]:[new RegExp(Vr+"\\/"+le)],[Bn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Js]:[new RegExp(Js+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Ch=function(t,e,r,s){var i=Xc(t,e,r,s),n=Ih[i];if(x(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},qa=[[new RegExp(dr+"; "+dr+" (.*?)[);]","i"),t=>[dr,t&&t[1]||""]],[new RegExp(es,"i"),[es,""]],[new RegExp(ts,"i"),[ts,""]],[jo,[fr,""]],[new RegExp(Dr,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Ln,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Dr+" "+Oe,""];var r=/Windows NT ([0-9.]+)/i.exec(e);if(r&&r[1]){var s=kh[r[1]]||"";return/arm/i.test(e)&&(s="RT"),[Dr,s]}return[Dr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Vs,[t[3],t[4],t[5]||"0"].join(".")]:[Vs,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+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/,[yh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return xh.test(t)?es:Sh.test(t)?ts:Eh.test(t)?dr:new RegExp(On,"i").test(t)?On:new RegExp("("+Ln+"|WPDesktop)","i").test(t)?Ln:/iPad/.test(t)?Nc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Lc:jo.test(t)?fr:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(za,"i").test(t)?za:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Oe).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:Tc:new RegExp("(pda|"+Oe+")","i").test(t)?bh:new RegExp(pr,"i").test(t)&&!new RegExp(pr+" pc","i").test(t)?Gc:""},Fh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(r=t)=="string"&&Fh.test(r)?t:e();var r}function Ct(t){return t&&t.split("#")[0]}function Uo(t,e){var r=setTimeout(t,e);return r?.unref&&r?.unref(),r}function Ka(t,e,r){return Qc.apply(this,arguments)}function Qc(){return(Qc=X((function*(t,e,r){var s;try{return yield Promise.race([t,new Promise(((i,n)=>{s=Uo((()=>{try{r?.(),i()}catch(o){n(o)}}),e)}))])}finally{clearTimeout(s)}}))).apply(this,arguments)}var Ph=t=>t instanceof Error,eu={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}},Ah=eu.info;function tu(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=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Ys(t){var e=[];for(var r in t){var s=t[r];$e(s)||x(s)||e.push({key:r,value:tu(s)})}return e}function $h(t,e){var r=eu[t.level||"info"]||Ah,s=r.text,i=r.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),D(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),D(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=E({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:s,body:{stringValue:t.body},attributes:Ys(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function ru(t,e,r){return E({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":r})}function su(t,e,r,s){return{resourceLogs:[{resource:{attributes:Ys(e)},scopeLogs:[{scope:{name:r,version:s},logRecords:t}]}]}}let Rh=class{constructor(t,e,r,s,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=r,this.ut=s,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 r={record:$h(e,this.ut())};this.ht((()=>this.At(r)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var r=L(e)?e:[e],s=t;for(var i of r)try{var n=i(s);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;s=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return s}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 r=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(r.length!==0)for(var s=r.length,i=0;r.length>0&&s>i;){var n,o;t.ft=0;var a=Math.min(r.length,t.Ct),l=r.slice(0,a),u=su(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),r=(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 r,s=Math.max(0,t-e.ft),i=(r=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&r!==void 0?r:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(s)),yield e.dt()}))()}Lt(){return ru(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var r=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>r.length||(r.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),r.push(t),this._instance.setPersistedProperty(ut.LogsQueue,r),this.kt>r.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Uo((()=>{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 r=e.flush().catch((()=>{}));t!==void 0?yield Ka(r,t):yield r}))()}flushWithTimeout(t){var e=this;return X((function*(){var r=e.flush();yield Ka(r,t,(()=>{r.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 Xi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Ja(t){return String(t)+"000000"}function Ya(t,e,r,s){var i="";return s&&(i=Object.keys(s).sort().map((n=>JSON.stringify(n)+":"+JSON.stringify(s[n]))).join(",")),t+"\0"+e+"\0"+(r??"")+"\0"+i}let Th=class{constructor(t,e,r){this._instance=t,this.Ne=e,this.rt=r,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,r){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:r?.unit,attributes:r?.attributes})}gauge(t,e,r){this.Vt({name:t,type:"gauge",value:e,unit:r?.unit,attributes:r?.attributes})}histogram(t,e,r){this.Vt({name:t,type:"histogram",value:e,unit:r?.unit,attributes:r?.attributes})}flush(){var t=this,e=this.ct,r=(function(){var i=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return i.apply(this,arguments)}})(),s=r().finally((()=>{this.ct===s&&(this.ct=null)}));return this.ct=s,s}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 r,s;try{r=e.attributes?E({},e.attributes):void 0,s=Ya(e.type,e.name,e.unit,r)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(s);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:r,windowStartMs:Date.now()},this.Bt.set(s,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 r;switch(t.type){case"count":t.total=((r=t.total)!==null&&r!==void 0?r: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(Xi.length+1).fill(0)});var s=t.hist;s.count+=1,s.sum+=e,s.min=Math.min(s.min,e),s.max=Math.max(s.max,e),s.bucketCounts[(function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length})(e,Xi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var r=L(e)?e:[e],s=t;for(var i of r)try{var n=i(s);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;s=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return s}$t(){this.Nt||(this.Nt=Uo((()=>{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 r=t.Wt,s=yield t._instance.Jt(t.Gt(e));if(r===t.Wt)switch(s.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:",s.error)}}}))()}Gt(t){return e=this.Xt(t),r=(function(n,o,a){return E({},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()),s=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Ys(r)},scopeMetrics:[{scope:{name:s,version:i},metrics:e}]}]};var e,r,s,i}Xt(t){var e=Ja(Date.now()),r=new Map;for(var s of t.values()){var i,n=Ya(s.type,s.name,s.unit,void 0),o=r.get(n);o||(o=E({name:s.name},s.unit&&{unit:s.unit}),s.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},r.set(n,o));var a=Ys((i=s.attributes)!==null&&i!==void 0?i:{}),l=Ja(s.windowStartMs);if(s.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=s.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(s.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=s.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else s.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:Xi})}return Array.from(r.values())}Yt(t){var e,r;for(var s of t){var i=s[0],n=s[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)+((r=n.total)!==null&&r!==void 0?r: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 ws,Za,Qi;function Nh(t){var e=globalThis._posthogChunkIds;if(e){var r=Object.keys(e);return Qi&&r.length===Za||(Za=r.length,Qi=r.reduce(((s,i)=>{ws||(ws={});var n=ws[i];if(n)s[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[i];if(u&&c){s[u]=c,ws[i]=[u,c];break}}return s}),{})),Qi}}class Mh{constructor(e,r,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=r,this.modifiers=s}buildFromUnknown(e,r){r===void 0&&(r={});var s=r&&r.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(s,r,0).apply(e),n=this.buildParsingContext(r),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var r=this;return X((function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&L(s.stacktrace.frames)&&(s.stacktrace.frames=yield r.applyModifiers(s.stacktrace.frames));return e}))()}coerceFallback(e){var r;return{type:"Error",value:"Unknown error",stack:(r=e.syntheticException)==null?void 0:r.stack,synthetic:!0}}parseStacktrace(e,r){var s,i;return e.cause!=null&&(s=this.parseStacktrace(e.cause,r)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?r.skipFirstLines:0),r.chunkIdMap)),E({},e,{cause:s,stack:i})}applyChunkIds(e,r){return e.map((s=>(s.filename&&r&&(s.chunk_id=r[s.filename]),s)))}applyCoercers(e,r){for(var s of this.coercers)if(s.match(e))return s.coerce(e,r);return this.coerceFallback(r)}applyModifiers(e){var r=this;return X((function*(){var s=e;for(var i of r.modifiers)s=yield i(s);return s}))()}convertToExceptionList(e,r){var s,i,n,o={type:e.type,value:e.value,mechanism:{type:(s=r.type)!==null&&s!==void 0?s:"generic",handled:(i=r.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,E({},r,{handled:!0}))),a}buildParsingContext(e){var r;return{chunkIdMap:Nh(this.stackParser),skipFirstLines:(r=e.skipFirstLines)!==null&&r!==void 0?r:1}}buildCoercingContext(e,r,s){s===void 0&&(s=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,r,o);return this.applyCoercers(n,a)}};return E({},r,{syntheticException:s==0?r.syntheticException:void 0,mechanism:e,apply:n=>i(n,s),next:n=>i(n,s+1)})}}var gr="?";function jn(t,e,r,s,i){var n={platform:t,filename:e,function:r===""?gr:r,in_app:!0};return x(s)||(n.lineno=s),x(i)||(n.colno=i),n}var iu=(t,e)=>{var r=t.indexOf("safari-extension")!==-1,s=t.indexOf("safari-web-extension")!==-1;return r||s?[t.indexOf("@")!==-1?t.split("@")[0]:gr,r?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Lh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Oh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Dh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Bh=(t,e)=>{var r=Lh.exec(t);if(r)return jn(e,r[1],gr,+r[2],+r[3]);var s=Oh.exec(t);if(s){if(s[2]&&s[2].indexOf("eval")===0){var i=Dh.exec(s[2]);i&&(s[2]=i[1],s[3]=i[2],s[4]=i[3])}var n=iu(s[1]||gr,s[2]);return jn(e,n[1],n[0],s[3]?+s[3]:void 0,s[4]?+s[4]:void 0)}},jh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Uh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Hh=(t,e)=>{var r=jh.exec(t);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){var s=Uh.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}var i=r[3],n=r[1]||gr,o=iu(n,i);return jn(e,i=o[1],n=o[0],r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}},Xa=/\(error: (.*)\)/;class Wh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,r){var s=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?r.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var r=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?r+": "+e.message:r}isDOMException(e){return qs(e,"DOMException")}isDOMError(e){return qs(e,"DOMError")}}class zh{match(e){return(function(r){switch({}.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Rc(r,Error)}})(e)}coerce(e,r){return{type:this.getType(e),value:this.getMessage(e,r),stack:this.getStack(e),cause:e.cause?r.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,r){var s=e.message;return String(s.error&&typeof s.error.message=="string"?s.error.message:s)}getStack(e){return e.stacktrace||e.stack||void 0}}class qh{constructor(){}match(e){return!!qs(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,r){var s;if(e.error!=null)return r.apply(e.error);var i=r.apply(e.message);return E({},i,{stack:(s=this.pe(e))!==null&&s!==void 0?s:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var r=e;if(W(r.filename)&&r.filename.length>0){var s,i,n=(s=r.lineno)!==null&&s!==void 0?s:0,o=(i=r.colno)!==null&&i!==void 0?i:0;return`Error + at `+r.filename+":"+n+":"+o}}}var Vh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Gh{match(e){return typeof e=="string"}coerce(e,r){var s,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var r="Error",s=e,i=e.match(Vh);return i&&(r=i[1],s=i[2]),[r,s]}}var Kh=["fatal","error","warning","log","info","debug"];function nu(t,e){e===void 0&&(e=40);var r=Object.keys(t);if(r.sort(),!r.length)return"[object has no keys]";for(var s=r.length;s>0;s--){var i=r.slice(0,s).join(", ");if(e>=i.length)return s===r.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class Jh{match(e){return typeof e=="object"&&e!==null}coerce(e,r){var s,i,n=this.getErrorPropertyFromObject(e);return n?r.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(s=this.getStack(e))!==null&&s!==void 0?s:(i=r.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Lo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var r="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(r+=" with message: '"+e.message+"'"),r}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+nu(e)}isSeverityLevel(e){return W(e)&&!Mn(e)&&Kh.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 r in e)if({}.hasOwnProperty.call(e,r)){var s=e[r];if(Ph(s))return s}}getObjectClassName(e){try{var r=Object.getPrototypeOf(e);return r?r.constructor.name:void 0}catch{return}}}class Yh{match(e){return Lo(e)}coerce(e,r){var s,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+nu(e),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class Zh{match(e){return $c(e)}coerce(e,r){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class Xh{match(e){return qs(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Lo(e))return!1;try{var r=e.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(e,r){var s,i=this.getUnhandledRejectionReason(e);return $c(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}:r.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 Zs="$message",Xs="$timestamp",Qh=new Set([Zs,Xs]),en={enabled:!0,max_bytes:32768};function Qs(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:en.enabled,max_bytes:tp(t.max_bytes,en.max_bytes)}:E({},en)}class ep{constructor(e){this.Ke=[],this.Je=0,this.Ne=Qs(e)}setConfig(e){this.Ne=Qs(e),this.Xe()}add(e){var r=(function(i){var n;try{n=Fc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[Zs],u=a[Xs];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:n}}catch{return}})(e);if(r){var s=(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})(r.json);s>this.Ne.max_bytes||(this.Ke.push({step:r.step,bytes:s}),this.Je+=s,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 tp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var r=Math.floor(t);return 0>r?e:r}var ou=function(t,e){var r=(e===void 0?{}:e).debugEnabled,s={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||r)&&!x(v.console)&&v.console){for(var n=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.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){s.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>ou(t+" "+i,n)};return s},k=ou("[PostHog.js]"),re=k.createLogger,rp=re("[ExternalScriptsLoader]"),tn=(t,e,r)=>{if(t.config.disable_external_dependency_loading)return rp.warn(e+" was requested but loading of external scripts is disabled."),r("Loading of external scripts is disabled");var s=C?.querySelectorAll("script");if(s){for(var i,n=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:r()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,r(void 0,u)})),l.onerror=u=>r(u),{v:void 0})}},o=0;s.length>o;o++)if(i=n())return i.v}var a=()=>{if(!C)return r("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,r(void 0,d)},l.onerror=d=>r(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return r("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,r)=>{if(e!=="remote-config"){var s;if(t.config.strict_script_versioning)s=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}s=t.requestRouter.endpointFor("assets",i)}tn(t,s,r)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");tn(t,o,r)}},$.__PosthogExtensions__.loadSiteApp=(t,e,r)=>{var s=t.requestRouter.endpointFor("api",e);tn(t,s,r)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",rs="$device_id",rn="$device_model",Br="__alias",jr="__timers",Un="$autocapture_disabled_server_side",Hn="$heatmaps_enabled_server_side",Wn="$exception_capture_enabled_server_side",zn="$error_tracking_suppression_rules",qn="$error_tracking_capture_extension_exceptions",Vn="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gn="$web_vitals_allowed_metrics",qt="$session_recording_remote_config",lu="$replay_sample_rate",cu="$replay_override_sampling",uu="$replay_override_linked_flag",du="$replay_override_url_trigger",hu="$replay_override_event_trigger",lr="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Ur="$active_feature_flags",Rs="$early_access_features",Kn="$feature_flag_details",Hr="$feature_flag_payloads",Ts="$feature_flag_request_id",ei="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Jn="$surveys",ti="$surveys_loaded_at",Yn="$surveys_activated",Ns="$surveys_activated_session",Ms="$surveys_activated_timestamps",Wr="ph_product_tours",Wt="$flag_call_reported",zr="$flag_call_reported_session_id",Ls="$feature_flag_errors",Gr="$feature_flag_evaluated_at",He="$user_state",Zn="$client_session_props",Xn="$capture_rate_limit",Qn="$initial_campaign_params",eo="$initial_referrer_info",ri="$initial_person_info",si="$epp",bs="$posthog_cookieless",pu="$cookieless_mode",fu="$sdk_debug_extensions_init_method",gu="$sdk_debug_extensions_init_time_ms",mu="$sdk_debug_recording_script_not_loaded",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",er="anonymous",Tt="identified",to="identified_only",ii="visibilitychange",ni="beforeunload",nr="$pageview",sn="$pageleave",nn="$identify",Qa="$groupidentify";function Es(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(ph(t))t.forEach(((s,i)=>e(s,i)));else for(var r in t)Ac.call(t,r)&&e(t[r],r)}var ee=function(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),s=1;e>s;s++)r[s-1]=arguments[s];for(var i of r)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Os(t){for(var e=Object.keys(t),r=e.length,s=new Array(r);r--;)s[r]=[e[r],t[e[r]]];return s}var el=function(t){try{return t()}catch{return}},sp=function(t){return function(){try{for(var e=arguments.length,r=new Array(e),s=0;e>s;s++)r[s]=arguments[s];return t.apply(this,r)}catch(i){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},Vo=function(t){var e={};return Z(t,(function(r,s){(W(r)&&r.length>0||he(r))&&(e[s]=r)})),e},ip=["herokuapp.com","vercel.app","netlify.app"];function np(t){var e=t?.hostname;if(!W(e))return!1;var r=e.split(".").slice(-2).join(".");for(var s of ip)if(r===s)return!1;return!0}function ie(t,e,r,s){var i=s??{},n=i.capture,o=i.passive;t?.addEventListener(e,r,{capture:n!==void 0&&n,passive:o===void 0||o})}function ro(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",r=C.cookie.split(";").filter((n=>n.length)),s=0;r.length>s;s++){for(var i=r[s];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class oi{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,r,s,i){if(!Number.isInteger(e)||!Number.isInteger(r)||!Number.isInteger(s)||!Number.isInteger(i)||0>e||0>r||0>s||0>i||e>0xffffffffffff||r>4095||s>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|r>>>8,n[7]=r,n[8]=128|s>>>24,n[9]=s>>>16,n[10]=s>>>8,n[11]=s,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new oi(n)}toString(){for(var e="",r=0;this.bytes.length>r;r++)e=e+(this.bytes[r]>>>4).toString(16)+(15&this.bytes[r]).toString(16),r!==3&&r!==5&&r!==7&&r!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new oi(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var r=0;16>r;r++){var s=this.bytes[r]-e.bytes[r];if(s!==0)return Math.sign(s)}return 0}}class op{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var r=this.generateOrAbort();if(x(r))throw new Error("Could not generate UUID after timestamp reset");return r}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 oi.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 ap}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class ap{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>lp().toString(),lp=()=>(tl||(tl=new op)).generate(),Pr="",cp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,r,s,i){if(!C)return!1;try{var n="",o="",a=(function(c,d){if(d){var h=(function(f,m){if(m===void 0&&(m=C),Pr)return Pr;if(!m||["localhost","127.0.0.1"].includes(f))return"";for(var g=f.split("."),_=Math.min(g.length,8),w="dmn_chk_"+dt();!Pr&&_--;){var b=g.slice(_).join("."),I=w+"=1;domain=."+b+";path=/";m.cookie=I+";max-age=3",m.cookie.includes(w)&&(m.cookie=I+";max-age=0",Pr=b)}return Pr})(c);if(!h){var p=(f=>{var m=f.match(cp);return m?m[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,s);if(r){var l=new Date;l.setTime(l.getTime()+864e5*r),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&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{pt.F(t,"",-1,e)}catch{return}}},on=null,Q={N(){if(!$e(on))return on;var t=!0;if(x(v))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||k.error("localStorage unsupported; falling back to cookie store"),on=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(r){Q.j(r)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},up=[rs,"distinct_id",lr,zo,si,ri,He],Ss={},dp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Ss[t]||null,H:t=>Ss[t]||null,F:(t,e)=>(Ss[t]=e,!0),q(t){delete Ss[t]}},Nt=null,ce={N(){if(!$e(Nt))return Nt;if(Nt=!0,x(v))Nt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Nt=!1),ce.q(t)}catch{Nt=!1}return Nt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(r){ce.j(r)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class hp{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===Ht}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,r=e.token,s=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(s?s+r:"__ph_opt_in_out_"+r)}get ei(){var e=this.ii.P(this.ri);return Yi(e)?1:M(vh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,r=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==r){this.ni=r;var s=e==="localStorage"?pt:Q;s.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Yi(s.P(this.ri))),s.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>Yi(e)))}}function yu(t,e){var r,s=t==null||(r=t.config)==null?void 0:r.get_current_url;if(!Se(s))return e;try{var i=s(e);return W(i)&&i?i:e}catch(n){return k.error("Error in get_current_url, falling back to window.location.href",n),e}}var wu="__POSTHOG_TOOLBAR__",pp=1,fp=3,gp=11;function rl(t){return t instanceof Element&&(t.id===wu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===pp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===fp}function Eu(t){return!!t&&t.nodeType===gp&&Ft(t.host)}var Su=1e3;function Go(t){return t?Fi(t).split(/\s+/):[]}function sl(t,e){var r=(function(s){var i,n=v==null||(i=v.location)==null?void 0:i.href;return x(n)?void 0:yu(s,n)})(e);return!!(r&&t&&t.some((s=>r.match(s))))}function ai(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 Go(e)}function xu(t){return D(t)?null:Fi(t).split(/(\s+)/).filter((e=>Kr(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function ss(t){var e="";return io(t)&&!Fu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(r){var s;bu(r)&&r.textContent&&(e+=(s=xu(r.textContent))!==null&&s!==void 0?s:"")})),Fi(e)}function an(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Ko=["a","button","form","input","select","textarea","label"];function so(t,e){if(x(e))return!0;var r,s=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(r=s(i))return r.v;return!1}function ku(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var mp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],vp=[...Iu,"+","-","−","–"],il=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,nl=[".ph-no-rageclick",".ph-no-capture"],_p=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var r,s,i,n,o;if(Ke(e)?(r=!!e&&nl,s=void 0,i=!1):(r=(n=e?.css_selector_ignorelist)!==null&&n!==void 0?n:nl,s=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),r===!1||i&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(_p,(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=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>il(h,f)||il(p,f)))}))})(s,a.map((l=>{var u;return{safeText:ss(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,r)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var r=!1,s=[t],i=t;i.parentNode&&!Me(i,"body");)if(Eu(i.parentNode))s.push(i.parentNode.host),i=i.parentNode.host;else{var n=ku(i);if(!n)break;if(e||Ko.indexOf(n.tagName.toLowerCase())>-1)r=!0;else try{var o=v.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(r=!0)}catch{}s.push(n),i=n}return{parentIsUsefulElement:r,targetElementList:s}};function io(t){for(var e=new Set,r=0,s=t;s.parentNode&&!Me(s,"body");s=s.parentNode){if(r++>=Su||e.has(s))return!1;e.add(s);var i=ai(s);if(M(i,"ph-sensitive")||M(i,"ph-no-capture"))return!1}if(M(ai(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 Fu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var al=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}))$"),ll=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,yp=[16,15,14,13],wp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function bp(t){for(var e=0,r=!1,s=t.length-1;s>=0;s--){var i=t.charCodeAt(s)-48;r&&(i*=2)>9&&(i-=9),e+=i,r=!r}return e%10==0}function Kr(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Fi(t);var r=e?al.test((t||"").replace(/[- ]/g,"")):(function(i){var n;for(ll.lastIndex=0;n=ll.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of yp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&bp(d))return!0}}}return!1})(t);if(r)return!1;var s=e?wp.test(t):(function(i){var n;for(cl.lastIndex=0;n=cl.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&ul.test(o)&&ul.test(a)))return!0}return!1})(t);if(s)return!1}return!0}function dl(t){var e=ss(t);return Kr(e=(e+" "+Pu(t)).trim())?e:""}function Pu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(r){var s;if(r&&((s=r.tagName)==null?void 0:s.toLowerCase())==="span")try{var i=ss(r);e=(e+" "+i).trim(),r.childNodes&&r.childNodes.length&&(e=(e+" "+Pu(r)).trim())}catch(n){k.error("[AutoCapture]",n)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Ep(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xs=re("[Dead Clicks]"),Sp=()=>!0,xp=t=>{var e,r=!((e=t.instance.persistence)==null||!e.get_property(Ho)),s=t.instance.config.capture_dead_clicks;return Ke(s)?s:!!te(s)||r};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,r,s){this.instance=e,this.isEnabled=r,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var r=e.config;"captureDeadClicks"in r&&(this.instance.persistence&&this.instance.persistence.register({[Ho]:r.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var r,s;(r=$.__PosthogExtensions__)!=null&&r.initDeadClicksAutocapture?e():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?xs.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var r=te(this.instance.config.capture_dead_clicks)?E({},this.instance.config.capture_dead_clicks):{};r.__onCapture=this.onCapture,this.onCapture&&(r.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,r),this.si.start(C),xs.info("starting...")}}else xs.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xs.info("stopping..."))}}var ln=re("[SegmentIntegration]"),Au="posthog-js";function $u(t,e){var r=e===void 0?{}:e,s=r.organization,i=r.projectId,n=r.prefix,o=r.severityAllowList,a=o===void 0?["error"]:o,l=r.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,m;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var g=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=g,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],b=w.map((F=>E({},F,{stacktrace:F.stacktrace?E({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>E({},P,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(m=w[0])==null?void 0:m.type,$sentry_tags:c.tags};return s&&i&&(I.$sentry_url=(n||"https://sentry.io/organizations/")+s+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class kp{constructor(e,r,s,i,n,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:r,projectId:s,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(r,s,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:r,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,r){var s,i=this.vi(e,r);return this.ui={pathname:(s=v?.location.pathname)!==null&&s!==void 0?s:"",pageViewId:r,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var r;return this.vi(e,(r=this.ui)==null?void 0:r.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,r){var s=this.ui;if(!s)return{$pageview_id:r};var i={$pageview_id:r,$prev_pageview_id:s.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(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?st(a/o,0,1,k):1,p=o>1?st(l/o,0,1,k):1,f=u>1?st(c/u,0,1,k):1,m=u>1?st(d/u,0,1,k):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:m})}}return s.pathname&&(i.$prev_pageview_pathname=s.pathname),s.timestamp&&(i.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),i}}var cn=["flags","surveys"],Ip={[au]:{exposure:"hidden"},[Br]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[jr]:{exposure:"hidden"},[Un]:{exposure:"event"},[Hn]:{exposure:"hidden"},[Wn]:{exposure:"event"},[zn]:{exposure:"hidden"},[qn]:{exposure:"event"},[Vn]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gn]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[lr]:{exposure:"hidden"},[zo]:{exposure:"event"},[lu]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Bt]:{exposure:"hidden",storageGroup:"flags"},[Ur]:{exposure:"hidden",storageGroup:"flags"},[Rs]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"flags"},[Hr]:{exposure:"hidden",storageGroup:"flags"},[Ts]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ei]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Jn]:{exposure:"hidden",storageGroup:"surveys"},[ti]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yn]:{exposure:"event"},[Ns]:{exposure:"hidden"},[Ms]:{exposure:"hidden"},[Wr]:{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"},[Wt]:{exposure:"hidden"},[zr]:{exposure:"hidden"},[Ls]:{exposure:"hidden"},[Gr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Zn]:{exposure:"hidden"},[Xn]:{exposure:"hidden"},[Qn]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[ri]:{exposure:"hidden"},[si]:{exposure:"hidden"},[cu]:{exposure:"event"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[fu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{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"}},Cp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ip[t];if(e)return e;for(var r of Cp){var s=r[1];if(t.indexOf(r[0])===0)return s}},cr=(t,e)=>{try{return JSON.stringify(t,((r,s)=>typeof s=="bigint"?s.toString():s),e)}catch{return Fc(t)}},li=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},mr=function(t,e){for(var r,s=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;s.length>i;i++){var n=s[i].split("=");if(n[0]===e){r=n;break}}if(!L(r)||2>r.length)return"";var o=r[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},is=function(t,e,r){if(!t||!e||!e.length)return t;for(var s=t.split("#"),i=s[1],n=(s[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]+"="+r):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ci=function(t,e){var r=t.match(new RegExp(e+"=([^&]*)"));return r?r[1]:null},Ru=(t,e)=>t>=e&&kc(),Tu=(t,e,r,s)=>{if(t===0){if(kc()){var i=e+1;return i===r&&s(),i}return e}return 0},ks="https?://(.*)",vr=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Fp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...vr],ns="",Pp=["li_fat_id"];function Nu(t,e,r){if(!C)return{};var s,i=e?[...vr,...r||[]]:[],n=Mu(is(C.URL,i,ns),t),o=(s={},Z(Pp,(function(a){var l=vu(a);s[a]=l||null})),s);return ee(o,n)}function Mu(t,e){var r=Fp.concat(e||[]),s={};return Z(r,(function(i){var n=mr(t,i);s[i]=n||null})),s}function Lu(t){var e=(function(n){return n?n.search(ks+"google.([^/?]*)")===0?"google":n.search(ks+"bing.com")===0?"bing":n.search(ks+"yahoo.com")===0?"yahoo":n.search(ks+"duckduckgo.com")===0?"duckduckgo":null:null})(t),r=e!="yahoo"?"q":"p",s={};if(!$e(e)){s.$search_engine=e;var i=C?mr(C.referrer,r):"";i.length&&(s.ph_keyword=i)}return s}function gl(){return navigator.language||navigator.userLanguage}var ui="$direct";function Ou(){return C?.referrer||ui}function Du(t,e,r){r===void 0&&(r=!1);var s=t?[...vr,...e||[]]:[],i=r?Ct(se?.href):se?.href,n=i?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:n?is(n,s,ns):void 0}}function Bu(t,e){var r;e===void 0&&(e=!1);var s=t.r,i=t.u,n=e?Ct(i):i,o={$referrer:s,$referring_domain:s==null?void 0:s==ui?ui:(r=li(s))==null?void 0:r.host};if(n){o.$current_url=n;var a=li(n);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(n);ee(o,l)}if(s){var u=Lu(s);ee(o,u)}return o}function ju(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Ap(){try{return new Date().getTimezoneOffset()}catch{return}}var $p={flags:Gr,surveys:ti},Rp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],tr="main";class un{constructor(e,r,s){if(s===void 0&&(s=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=s,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&&k.info("Persistence loaded",e.persistence,E({},this.props)),this.update_config(e,e,r),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,r=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(r)&&r>0?r:0}isDisabled(){return!!this.xi}bi(e){Rp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var r,s=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...up,...o];return E({},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 m=c[f];$e(m)||m===""||(p[f]=m)}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 m=Q.F(u,c,void 0,void 0,f);try{var g={};l.forEach((_=>{c[_]&&(g[_]=c[_])})),Object.keys(g).length&&pt.F(u,g,d,h,p,f)}catch(_){Q.j(_)}return m},q(u,c){try{v?.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()?(r=Q,i=!0):n==="localstorage+cookie"&&s.N()?(r=s,i=!0):n==="sessionstorage"&&ce.N()?r=ce:n==="memory"?r=dp:n==="cookie"?r=pt:s.N()?(r=s,i=!0):r=pt,this.fi=i,r}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((r,s)=>{var i=Mt(s);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(r))return;e[s]=r}})),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 cn){var r=Q.H(this.Si(e));if(r&&!mt(r)){var s=this.Mi(e);s.persisted=!0,this.Ti(e)||(s.fingerprint=this.Ei(r,e)),this.Ii(e,r)||ee(this.props,r)}}}Ti(e){return Object.keys(this.props).some((r=>{var s;return((s=Mt(r))==null?void 0:s.storageGroup)===e}))}Ii(e,r){var s=$p[e];if(!s)return!1;var i=r[s],n=this.props[s];return he(i)&&he(n)&&n>i}refreshKey(e){var r;if(!this.xi){var s=this.pi?(r=Mt(e))==null?void 0:r.storageGroup:void 0,i=s?Q.H(this.Si(s)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(s){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?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,tr))}Li(){var e=this.Di(),r=e.main,s=e.groups;for(var i of(this.Oi(this.ii,this.yi,r,tr),cn)){var n,o=s[i];(!mt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},r={flags:{},surveys:{}};return Z(this.props,((s,i)=>{var n,o=(n=Mt(i))==null?void 0:n.storageGroup;o?r[o][i]=s:e[i]=s})),{main:e,groups:r}}Ei(e,r){if(r===tr)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var s={};return Z(e,((i,n)=>{var o;s[n]=(o=Mt(n))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(s)}Oi(e,r,s,i){var n=this.Mi(i);if(i===tr||n.dirty||x(n.fingerprint)){var o;try{if((o=this.Ei(s,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(r,s,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==tr&&(n.persisted=!0),x(o)||(n.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+r+'"; will retry on next save')}}remove(e){var r=(e===void 0?{}:e).keepGroupEntries,s=r!==void 0&&r;if(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!s&&this.gi)for(var i of cn)Q.q(this.Si(i));s?delete this.ci[tr]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,r,s){if(te(e)){x(r)&&(r="None"),this.$i=x(s)?this.ji:s;var i=!1;if(Z(e,((n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==r||(this.Pi(o,n),i=!0)})),i)return this.save(),!0}return!1}register(e,r){if(te(e)){this.$i=x(r)?this.ji:r;var s=!1;if(Z(e,((i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||L(i))&&(this.Pi(n,i),s=!0)})),s)return this.save(),!0}return!1}unregister(e){var r=typeof e=="string"?[e]:e,s=!1;for(var i of r)i in this.props&&(this.Ri(i),s=!0);s&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var r=Nu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Vo(r))||this.register(r),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Lu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Ou(),$referring_domain:C!=null&&C.referrer&&((e=li(C.referrer))==null?void 0:e.host)||ui},void 0)}set_initial_person_info(){this.props[Qn]||this.props[eo]||this.register_once({[ri]:Du(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};Z([eo,Qn],(i=>{var n=this.props[i];n&&Z(n,(function(o,a){e["$initial_"+Nn(a)]=o}))}));var r=this.props[ri];if(r){var s=(function(i,n){n===void 0&&(n=!1);var o=Bu(i,n),a={};return Z(o,(function(l,u){a["$initial_"+Nn(u)]=l})),a})(r,this.Ne.disable_capture_url_hashes);ee(e,s)}return e}safe_merge(e){return Z(this.props,(function(r,s){s in e||(e[s]=r)})),e}update_config(e,r,s){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!s),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==r.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||[],r.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,r){var s=this.props[jr]||{};s[e]=r,this.Pi(jr,s),this.save()}remove_event_timer(e){var r=this.props[jr]||{},s=r[e];return x(s)||(delete r[e],this.Pi(jr,r),this.save()),s}get_property(e){return this.props[e]}set_property(e,r){this.Pi(e,r),this.save()}Pi(e,r){var s;this.props[e]=r,(s=Mt(e))!=null&&s.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var r,s=(r=Mt(e))==null?void 0:r.storageGroup;s&&(this.Mi(s).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Is(t){var e=!0;return{dispose(){if(e){e=!1;var r=t();r&&Se(r.then)&&r.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},Ar={Activation:"events",Cancellation:"cancelEvents"},dn={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},no={Popover:"popover",Inline:"inline"},Tp={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=re("[RateLimiter]");class Np{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=r=>{var s=r.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach((i=>{vl.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void vl.warn('could not rate limit - continuing. Error: "'+i?.message+'"',{text:s})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var r,s,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(r=(s=this.instance.persistence)==null?void 0:s.get_property(Xn))!==null&&r!==void 0?r:{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=(he(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(Xn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var r=this.instance.config.property_denylist;return!L(r)||!r.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&se!=null&&se.pathname)return""+((e=se.origin)!==null&&e!==void 0?e:"")+se.pathname}Hi(e){var r,s,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(r=(s=this.instance).get_session_id)==null?void 0:r.call(s):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 r=this.serverLimits[e||"events"]||!1;return r!==!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((r=>{this.Zi(r.json,r),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()&&C&&C.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var r=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;r!==0&&(this.Ki=setInterval((()=>{this.refresh()}),r))}}Zi(e,r){!e&&r&&(r.statusCode===0?r.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?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var s;(s=this._instance.featureFlags)==null||s.ensureFlagsLoaded()}catch(i){xt.error("Error loading feature flags",i)}}}var qe=Uint8Array,Ae=Uint16Array,_r=Uint32Array,Yo=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]),Zo=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]),_l=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hu=function(t,e){for(var r=new Ae(31),s=0;31>s;++s)r[s]=e+=1<s;++s)for(var n=r[s];r[s+1]>n;++n)i[n]=n-r[s]<<5|s;return[r,i]},Wu=Hu(Yo,2),oo=Wu[1];Wu[0][28]=258,oo[258]=28;for(var yl=Hu(Zo,0)[1],zu=new Ae(32768),ne=0;32768>ne;++ne){var rr=(43690&ne)>>>1|(21845&ne)<<1;zu[ne]=((65280&(rr=(61680&(rr=(52428&rr)>>>2|(13107&rr)<<2))>>>4|(3855&rr)<<4))>>>8|(255&rr)<<8)>>>1}var Jr=function(t,e,r){for(var s=t.length,i=0,n=new Ae(e);s>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(s),i=0;s>i;++i)o[i]=zu[a[t[i]-1]++]>>>15-t[i];return o},Kt=new qe(288);for(ne=0;144>ne;++ne)Kt[ne]=8;for(ne=144;256>ne;++ne)Kt[ne]=9;for(ne=256;280>ne;++ne)Kt[ne]=7;for(ne=280;288>ne;++ne)Kt[ne]=8;var di=new qe(32);for(ne=0;32>ne;++ne)di[ne]=5;var Mp=Jr(Kt,9),Lp=Jr(di,5),qu=function(t){return(t/8>>0)+(7&t&&1)},Vu=function(t,e,r){(r==null||r>t.length)&&(r=t.length);var s=new(t instanceof Ae?Ae:t instanceof _r?_r:qe)(r-e);return s.set(t.subarray(e,r)),s},ot=function(t,e,r){var s=e/8>>0;t[s]|=r<<=7&e,t[s+1]|=r>>>8},$r=function(t,e,r){var s=e/8>>0;t[s]|=r<<=7&e,t[s+1]|=r>>>8,t[s+2]|=r>>>16},pn=function(t,e){for(var r=[],s=0;t.length>s;++s)t[s]&&r.push({s,f:t[s]});var i=r.length,n=r.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(r[0].s+1);return o[r[0].s]=1,[o,1]}r.sort((function(F,P){return F.f-P.f})),r.push({s:-1,f:25001});var a=r[0],l=r[1],u=0,c=1,d=2;for(r[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=r[r[d].f>r[u].f?u++:d++],l=r[u!=c&&r[d].f>r[u].f?u++:d++],r[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(s=1;i>s;++s)n[s].s>h&&(h=n[s].s);var p=new Ae(h+1),f=ao(r[c-1],p,0);if(f>e){s=0;var m=0,g=f-e,_=1<s;++s){var w=n[s].s;if(e>=p[w])break;m+=_-(1<>>=g;m>0;){var b=n[s].s;e>p[b]?m-=1<=0&&m;--s){var I=n[s].s;p[I]==e&&(--p[I],++m)}f=e}return[new qe(p),f]},ao=function(t,e,r){return t.s==-1?Math.max(ao(t.l,e,r+1),ao(t.r,e,r+1)):e[t.s]=r},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var r=new Ae(++e),s=0,i=t[0],n=1,o=function(l){r[s++]=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[r.subarray(0,s),e]},Rr=function(t,e){for(var r=0,s=0;e.length>s;++s)r+=t[s]*e[s];return r},lo=function(t,e,r){var s=r.length,i=qu(e+2);t[i]=255&s,t[i+1]=s>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;s>n;++n)t[i+n+4]=r[n];return 8*(i+4+s)},bl=function(t,e,r,s,i,n,o,a,l,u,c){ot(e,c++,r),++i[256];for(var d=pn(i,15),h=d[0],p=d[1],f=pn(n,15),m=f[0],g=f[1],_=wl(h),w=_[0],b=_[1],I=wl(m),F=I[0],P=I[1],j=new Ae(19),S=0;w.length>S;++S)j[31&w[S]]++;for(S=0;F.length>S;++S)j[31&F[S]]++;for(var A=pn(j,7),R=A[0],N=A[1],T=19;T>4&&!R[_l[T-1]];--T);var O,J,z,H,oe=u+5<<3,pe=Rr(i,Kt)+Rr(n,di)+o,Ie=Rr(i,h)+Rr(n,m)+o+14+3*T+Rr(j,R)+(2*j[16]+3*j[17]+7*j[18]);if(pe>=oe&&Ie>=oe)return lo(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){O=Jr(h,p),J=h,z=Jr(m,g),H=m;var _e=Jr(R,N);for(ot(e,c,b-257),ot(e,c+5,P-1),ot(e,c+10,T-4),c+=14,S=0;T>S;++S)ot(e,c+3*S,R[_l[S]]);c+=3*T;for(var Ce=[w,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=Mp,J=Kt,z=Lp,H=di;for(S=0;a>S;++S)if(s[S]>255){var me;$r(e,c,O[257+(me=s[S]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,s[S]>>>23&31),c+=Yo[me]);var ge=31&s[S];$r(e,c,z[ge]),c+=H[ge],ge>3&&($r(e,c,s[S]>>>5&8191),c+=Zo[ge])}else $r(e,c,O[s[S]]),c+=J[s[S]];return $r(e,c,O[256]),c+J[256]},Op=new _r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Dp=(function(){for(var t=new _r(256),e=0;256>e;++e){for(var r=e,s=9;--s;)r=(1&r&&3988292384)^r>>>1;t[e]=r}return t})(),fn=function(t,e,r){for(;r;++e)t[e]=r,r>>>=8};function Bp(t,e){e===void 0&&(e={});var r=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Dp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),s=t.length;r.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,m,g){var _=d.length,w=new qe(f+_+5*(1+Math.floor(_/7e3))+m),b=w.subarray(f,w.length-m),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(b,I,d.subarray(F,P)):(b[F]=!0,I=lo(b,I,d.subarray(F,_)))}else{for(var j=Op[h-1],S=j>>>13,A=8191&j,R=(1<F;++F){var me=z(F),ge=32767&F,Ye=T[me];if(N[ge]=Ye,T[me]=ge,F>=Re){var Rt=_-F;if((Ie>7e3||Ce>24576)&&Rt>423){I=bl(d,b,0,H,oe,pe,_e,Ce,ae,F-ae,I),Ce=Ie=_e=0,ae=F;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)pe[de]=0}var Ve=2,St=0,kr=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,ms=Math.min(32767,F),vs=Math.min(258,Rt);ms>=Be&&--kr&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;vs>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var _s=Math.min(Be,je-2),Xt=0;for(de=0;_s>de;++de){var Qt=F-Be+de+32768&32767,Ir=Qt-N[Qt]+32768&32767;Ir>Xt&&(Xt=Ir,Ye=Qt)}}}Be+=(ge=Ye)-(Ye=N[ge])+32768&32767}if(St){H[Ce++]=268435456|oo[Ve]<<18|yl[St];var Ta=31&oo[Ve],Na=31&yl[St];_e+=Yo[Ta]+Zo[Na],++oe[257+Ta],++pe[Na],Re=F+Ve,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=bl(d,b,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(w,0,f+qu(I)+m)})(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&&fn(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),fn(u,c-8,r.d()),fn(u,c-4,s),u}var jp=!!$n||!!Mo,Gu="text/plain",Ds=!1,Ku=(t,e)=>{var r=t.split("#"),s=r[1],i=r[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:"")+(s?"#"+s:"")},Ai=function(t,e,r){var s;r===void 0&&(r=!0);var i=t.split("?"),n=i[0],o=i[1],a=E({},e),l=(s=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=r&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&s!==void 0?s:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(m,g){x(m)||x(g)||g==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(m)?m.name:m.toString()),p=encodeURIComponent(g),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},gn=t=>{if(t.Ji)return t.Ji;var e=t.data,r=t.compression;if(e){if(r===xe.GZipJS){var s=Bp((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(g){c[d++]=g},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 m=a.charCodeAt(p);128>m?h(m):2048>m?(h(192|m>>>6),h(128|63&m)):m>55295&&57344>m?(h(240|(m=65536+(1047552&m)|1023&a.charCodeAt(++p))>>>18),h(128|m>>>12&63),h(128|m>>>6&63),h(128|63&m)):(h(224|m>>>12),h(128|m>>>6&63),h(128|63&m))}return Vu(c,0,d)})(cr(e)),{mtime:0});return{contentType:Gu,body:s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),estimatedSize:s.byteLength}}if(r===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(cr(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:cr(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=cr(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,r,s=()=>t.transport==="sendBeacon"?{url:Ai(t.url,{compression:xe.Base64}),encodedBody:gn(E({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gn(E({},t,{compression:void 0,Ji:void 0}))};try{e=gn(t)}catch(i){if(Ua(t.compression,mr(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),s();throw i}return e&&Ua(t.compression,mr(t.url,"compression"))&&!((r=e.body)instanceof ArrayBuffer?Rn(new Uint8Array(r)):ArrayBuffer.isView(r)&&Rn(new Uint8Array(r.buffer,r.byteOffset,r.byteLength)))?(Ds=!0,s()):{url:t.url,encodedBody:e}},Yu=t=>{try{return Ju(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Up=(function(){var t=X((function*(e){var r=cr(e.data),s=yield(function(n,o,a){return Tn.apply(this,arguments)})(r,Y.DEBUG,{rethrow:!0});if(!s)return e;var i=yield s.arrayBuffer();return E({},e,{Ji:{contentType:Gu,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Hp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Hp.test(t?.message||""),Xu=t=>{var e=Yu(t);if(e){var r=e.url,s=e.encodedBody,i=s??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,(function(f,m){l.append(m,f)})),n&&l.append("Content-Type",n);var u=null,c=!1;if(Ma){var d=new Ma;u={signal:d.signal,timeout:setTimeout((()=>{var f,m;c=!0,d.abort((f=t.timeout,(m=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",m))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||Zu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Mo(r,E({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((m=>{var g={statusCode:f.status,text:m};if(f.status===200)try{g.json=JSON.parse(m)}catch(_){k.error(_)}t.callback==null||t.callback(g)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},co=t=>{try{var e,r=Ju(t),s=r.url,i=r.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(ke.sendBeacon(s,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:E({},t.data,{batch:h});return co(E({},t,{data:d(u.slice(0,c))})),void co(E({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(E({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,r,s)=>{var i=s==="query"?e==="POST"?"sent_at":"_":void 0;return Ai(r===xe.GZipJS?Ku(t,"compression"):t,E({},i?{[i]:Date.now().toString()}:{},r===xe.GZipJS?{}:{compression:r}))},Bs=[];Mo&&Bs.push({transport:"fetch",method:Xu}),$n&&Bs.push({transport:"XHR",method(t){var e=Yu(t);if(e){var r=new $n,s=e.encodedBody;r.open(t.method||"GET",e.url,!0);var i=s??{},n=i.contentType,o=i.body;Z(t.headers,(function(a,l){r.setRequestHeader(l,a)})),n&&r.setRequestHeader("Content-Type",n),t.timeout&&(r.timeout=t.timeout),r.onreadystatechange=()=>{if(r.readyState===4){var a={statusCode:r.status,text:r.responseText};if(r.status===200)try{a.json=JSON.parse(r.responseText)}catch{}t.callback==null||t.callback(a)}},r.send(o)}}}),ke!=null&&ke.sendBeacon&&Bs.push({transport:"sendBeacon",method:co});var uo=3e3;class Wp{constructor(e,r){this.Xi=!0,this.tr=[],this.er=st(r?.flush_interval_ms||uo,250,5e3,k.createLogger("flush interval"),uo),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},r=Object.values(e);[...r.filter((s=>s.url.indexOf("/e")===0)),...r.filter((s=>s.url.indexOf("/e")!==0))].map((s=>{this.lr(E({},s,{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 r=this.ar(),s=function(){var n=r[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 r)s()}}),this.er))}lr(e){try{this.ir(e)}catch(r){k.error(r)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(r=>{var s,i=r,n=(i?i.batchKey:null)||i.url;x(e[n])&&(e[n]=E({},i,{data:[]})),(s=e[n].data)==null||s.push(i.data)})),this.tr=[],e}}var zp=["retriesPerformedSoFar"];class qp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var r=e.retriesPerformedSoFar,s=Ic(e,zp);lt(r)&&(s.url=Ai(s.url,{retry_count:r})),this._instance._send_request(E({},s,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(r??0))return void this.At(E({retriesPerformedSoFar:r},s));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(r??0)+" retries.")}s.callback==null||s.callback(i)}}))}At(e){var r=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=r+1;var s=(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))})(r),i=Date.now()+s;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+s;navigator.onLine||(n+=" (Browser is offline)"),k.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(),r=[],s=this.tr.filter((n=>e>n.retryAt||(r.push(n),!1)));if(this.tr=r,s.length>0)for(var i of s)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var r=e.requestOptions;try{this._instance._send_request(E({},r,{transport:"sendBeacon"}))}catch(s){k.error(s)}}this.tr=[]}}class Vp{constructor(e){this.yr=()=>{var r,s,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?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(r=this.br.maxScrollY)!==null&&r!==void 0?r:0),this.br.maxScrollHeight=Math.max(l,(s=this.br.maxScrollHeight)!==null&&s!==void 0?s: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(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var r of e){var s=v?.document.querySelector(r);if(s)return s}}wr(e){var r=e==="y"?"scrollTop":"scrollLeft";if(this._r){var s=this.scrollElement();return s&&s[r]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Gp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,r,s,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=r,this.Mr=s,this.Cr=i||Gp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zn]}getSetOnceProps(){var e,r=(e=this.Sr())==null?void 0:e.props;return r?"r"in r?Bu(r,this._instance.config.disable_capture_url_hashes):{$referring_domain:r.referringDomain,$pathname:r.initialPathName,utm_source:r.utm_source,utm_campaign:r.utm_campaign,utm_medium:r.utm_medium,utm_content:r.utm_content,utm_term:r.utm_term}:{}}getSessionProps(){var e={};return Z(Vo(this.getSetOnceProps()),((r,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+Nn(s)]=r})),e}}class Xo{on(e,r){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(r),()=>{this.Er[e]=this.Er[e].filter((s=>s!==r))}}emit(e,r){for(var s of this.Er[e]||[])s(r);for(var i of this.Er["*"]||[])i(e,r)}constructor(){this.Er={}}}var Tr=re("[SessionId]");class xl{on(e,r){return this.Ir.on(e,r)}constructor(e,r,s){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Xo,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=r||dt,this.Nr=s||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Tr.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){Tr.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((r=>r!==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 r=this.Pr;return!$e(r)&&!$e(e)&&5e3>Math.abs(e-r)}Ur(e,r,s){var i=r!==this._sessionActivityTimestamp,n=!(e!==this.Dr||s!==this._sessionStartTimestamp);this._sessionStartTimestamp=s,this._sessionActivityTimestamp=r,this.Dr=e,n&&!i||n&&this.Zr(r)||(this.Pr=r,this.Mr.register({[lr]:[r,e,s]}))}Gr(){var e,r=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(r)&&r>0}Qr(){this.Gr()?this.Mr.refreshKey(lr):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var r=this.Jr();r[1]===this.Dr&&r[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[lr]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],r=lt(e)?e:0,s=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(r,s)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[lr];return L(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&v&&(v.removeEventListener(ni,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,ni,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,r){if(e===void 0&&(e=!1),r===void 0&&(r=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=r||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(s-o)>864e5,c=!1,d=!1,h=!n,p=n,f=!h&&!e&&this.Lr(s,a);if(f){(f=this.Xr(s))||Tr.info("cross-tab refresh kept the session alive",{sessionId:n});var m=this.Jr();n=m[1],o=m[2]}h||f||u?(n=this.$r(),l=this.Nr(),Tr.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=s,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==p)&&(Tr.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var g=lt(a)&&e&&!u?a:s,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,g,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(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 Qu=function(t,e){if(!t)return!1;var r=t.userAgent;if(r&&Wa(r,e))return!0;try{var s=t?.userAgentData;if(s!=null&&s.brands&&s.brands.some((i=>Wa(i?.brand,e))))return!0}catch{}return!!t.webdriver};function ed(){return(ed=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),r=e?.model;return W(r)&&r.length>0?r:void 0}catch(s){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",s)}}))).apply(this,arguments)}var hi=function(t,e){if(!(function(r){try{new RegExp(r)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function mn(t,e,r){return cr({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:r})}var td={exact:(t,e)=>e.some((r=>t.some((s=>r===s)))),is_not:(t,e)=>e.every((r=>t.every((s=>r!==s)))),regex:(t,e)=>e.some((r=>t.some((s=>hi(r,s))))),not_regex:(t,e)=>e.every((r=>t.every((s=>!hi(r,s))))),icontains:(t,e)=>e.map(Cs).some((r=>t.map(Cs).some((s=>r.includes(s))))),not_icontains:(t,e)=>e.map(Cs).every((r=>t.map(Cs).every((s=>!r.includes(s))))),gt:(t,e)=>e.some((r=>{var s=parseFloat(r);return!isNaN(s)&&t.some((i=>s>parseFloat(i)))})),lt:(t,e)=>e.some((r=>{var s=parseFloat(r);return!isNaN(s)&&t.some((i=>st.toLowerCase();function rd(t,e){return!t||Object.entries(t).every((r=>{var s=r[1],i=e?.[r[0]];if(x(i)||$e(i))return!1;var n=[String(i)],o=td[s.operator];return!!o&&o(s.values,n)}))}var ho="custom",kl="i.posthog.com",Kp=/^\/static\//;class Jp{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,r=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return r||(r=this.apiHost.replace("."+kl,".posthog.com")),r==="https://app.posthog.com"?"https://us.posthog.com":r}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":ho),this.en[this.apiHost]}rn(e){if(Kp.test(e)){var r=this.instance.config.asset_host;if(typeof r=="string")return r.trim().replace(/\/$/,"")||void 0}}endpointFor(e,r){if(r===void 0&&(r=""),r&&(r=r[0]==="/"?r:"/"+r),e==="ui")return this.uiHost+r;if(e==="flags")return this.flagsApiHost+r;if(e==="assets"){var s=this.rn(r);if(s)return""+s+r}if(this.region===ho)return this.apiHost+r;var i=kl+r;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function sd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=re("[Surveys]"),id="seenSurvey_",nd=t=>{try{var e=(r=>((s,i)=>""+id+(function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id})(i))(0,r))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(r){q.error("Failed to persist survey seen state",r)}},Yp=[dn.Popover,dn.Widget,dn.API],Zp={ignoreConditions:!1,ignoreDelay:!1,displayType:no.Popover},Xp=re("[PostHog ExternalIntegrations]"),Qp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class ef{constructor(e){this._instance=e}ai(e,r){var s;(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,(i=>{if(i)return Xp.error("failed to load script",i);r()}))}startIfEnabledOrStop(){var e=this,r=function(){var n,o,a,l=s[0],u=s[1];!u||(n=$.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(Qp[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 s of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;r()}}}class tf{constructor(e,r){this.rt=e,this.nn=r,this.sn=new Map,this.an=!1}add(e){var r=this;return X((function*(){if(r.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(r.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');r.sn.set(e.name,e);try{var s=e.setup(r.nn);s&&(yield s)}catch(n){var i=r.sn.get(e.name)===e;i&&r.sn.delete(e.name),r.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&r.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var r of(this.sn.clear(),e))this.ln(r)}}ln(e){try{var r=e.dispose==null?void 0:e.dispose();r&&Se(r.then)&&r.then(void 0,(s=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',s)}))}catch(s){this.rt.error('Failed to dispose browser extension "'+e.name+'"',s)}}}class rf{constructor(e){this._instance=e}initialize(){}get(e){var r=this._instance.persistence;if(typeof e=="string")return r?.get_property(e);var s={};for(var i of e){var n=r?.get_property(i);x(n)||(s[i]=n)}return s}set(e,r){var s;(s=this._instance.persistence)==null||s.register(typeof e=="string"?{[e]:r}:e)}remove(e){var r;(r=this._instance.persistence)==null||r.unregister(e)}}var Il="extensionsRemoteConfig";class sf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new rf(e),this.onEvent=r=>Is(this.instance.on("eventCaptured",(s=>{try{r({event:s.event,properties:s.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}}))),this.onRemoteConfig=r=>{if(this.an)return Is((()=>{}));var s=n=>{try{r(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(Il,s);return this.un&&s(this.un),Is(i)},this.vn=new tf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(rs))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(rs);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,r;return(e=(r=this.instance.persistence)==null?void 0:r.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,r,s,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(r=n?.sessionId)!==null&&r!==void 0?r:"",windowId:(s=n?.windowId)!==null&&s!==void 0?s:"",sessionStartTimestamp:(i=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,r,s){var i=this;return X((function*(){s?i.instance.capture(e,r,{timestamp:s.timestamp,uuid:s.uuid,$set:s.set,$set_once:s.setOnce}):i.instance.capture(e,r)}))()}registerDynamicEventProperties(e){return Is(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,r){var s=this;return X((function*(){var i;r===void 0&&(r={});var n=s.instance.requestRouter.endpointFor((i=r.target)!==null&&i!==void 0?i:"api",e),o={method:r.method,url:r.query?Ai(n,r.query):n,data:r.body,headers:r.headers,timeout:r.timeoutMs,fireCallbackOnDrop:!0,transport:r.transport,compression:r.compression,timestampMode:r.sentAt};return r.transport==="sendBeacon"?(s.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,s.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Yr={},vn=0,pi=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Nr="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",od="Invalid value for property_denylist config: ",nf=["token","distinct_id",pu],or="posthog",ad=!jp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_n=t=>{var e;return E({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:np(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:pi,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:se&&W(se?.search)&&se.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(r){k.error("Bad HTTP status: "+r.statusCode+" "+r.text)},get_device_id:r=>r,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:pi},(r=>({rageclick:r&&r>="2026-05-30"?{content_ignorelist:vp,ignore_text_selection:!0}:!r||"2025-11-30">r||{content_ignorelist:!0},capture_pageview:!r||"2025-05-24">r||"history_change",session_recording:r&&r>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:r&&r>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:r&&r>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:r&&r>="2026-01-30"?"head":"body",internal_or_test_user_hostname:r&&r>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:r&&r>="2026-05-30"?250:0,split_storage:!(!r||"2026-05-30">r),detect_google_search_app:!(!r||"2026-05-30">r),disable_capture_url_hashes:!(!r||"2026-06-25">r)}))(t))},of=[["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"]],Pl=t=>{var e={};for(var r of of){var s=r[0],i=r[1];x(t[s])||(e[i]=t[s])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),n};class af{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,r){if(e){var s=this.sn.indexOf(e);s!==-1&&this.sn.splice(s,1)}return this.sn.push(r),r.initialize==null||r.initialize(),r}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new af,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_n(),this.SentryIntegration=kp,this.sentryIntegration=s=>(function(i,n){var o=$u(i,n);return{name:Au,processEvent:a=>o(a)}})(this,s),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new Vp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Np(this),this.requestRouter=new Jp(this),this.consent=new hp(this),this.externalIntegrations=new ef(this);var r=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=r.featureFlags&&new r.featureFlags(this),this.toolbar=r.toolbar&&new r.toolbar(this),this.surveys=r.surveys&&new r.surveys(this),this.conversations=r.conversations&&new r.conversations(this),this.logs=r.logs&&new r.logs(this),this.metrics=r.metrics&&new r.metrics(this),this.experiments=r.experiments&&new r.experiments(this),this.exceptions=r.exceptions&&new r.exceptions(this),this.people={set:(s,i,n)=>{var o=W(s)?{[s]:i}:s;this.setPersonProperties(o),n?.({})},set_once:(s,i,n)=>{var o=W(s)?{[s]:i}:s;this.setPersonProperties(void 0,o),n?.({})}},this.on("eventCaptured",(s=>k.info('send "'+s?.event+'"',s)))}init(e,r,s){if(s&&s!==or){var i,n=(i=Yr[s])!==null&&i!==void 0?i:new Te;return n._init(e,r,s),Yr[s]=n,Yr[or][s]=n,n}return this._init(e,r,s)}_init(e,r,s){var i,n;r===void 0&&(r={});var o,a=W(e)?e.trim():"";if(!a)return k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=_n(r.defaults),r.debug=this.Cn(r.debug),this.Mn=r,this.Tn=[],r.person_profiles?this.xn=r.person_profiles:r.process_person&&(this.xn=r.process_person);var l=_n(r.defaults),u=Pl(r),c=ee({},l,u,{name:s,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=r.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new un(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new un(E({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=E({},this.persistence.props),f=E({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Wp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new qp(this),this.__request_queue=[];var m=this.gn();if(m||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,j,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(m)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(m)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:r,thisC:E({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=r.bootstrap)!=null&&i.distinctID||(r.bootstrap=E({},r.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=r.bootstrap)==null?void 0:n.distinctID)!==void 0){var g=r.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(r.bootstrap.isIdentifiedID&&_!=null&&_!==g&&w===er)this.identify(g);else if(r.bootstrap.isIdentifiedID&&_!=null&&_!==g&&w===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var b=this.config.get_device_id(dt()),I=r.bootstrap.isIdentifiedID?b:g;this.persistence.set_property(He,r.bootstrap.isIdentifiedID?Tt:er),this.register({distinct_id:g,$device_id:I})}}if(m)this.register_once({distinct_id:bs,$device_id:null},"");else if(!this.get_distinct_id()){var F=this.config.get_device_id(dt());this.register_once({distinct_id:F,$device_id:F},""),this.persistence.set_property(He,er)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),r.segment?(function(P,j){var S=P.config.segment;if(!S)return j();(function(A,R){var N=A.config.segment;if(!N)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,Tt)),R()},O=N.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(P,(()=>{S.register((A=>{typeof Promise<"u"&&Promise.resolve||ln.warn("This browser does not have Promise support, and can not use the segment integration");var R=(N,T)=>{if(!T)return N;N.event.userId||N.event.anonymousId===A.get_distinct_id()||(ln.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(ln.info("UserId set, identifying with PostHog"),A.identify(N.event.userId));var O=A.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},O,N.event.properties),N};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:N=>R(N,N.event.event),page:N=>R(N,nr),identify:N=>R(N,nn),screen:N=>R(N,"$screen")}})(P)).then((()=>{j()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==pi&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(P=>this.config._onCapture(P.event,P)))),this.config.ip&&k.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return ed.apply(this,arguments)})().then((P=>{P&&this.register({[rn]:P})})).catch(pi),this}Fn(){var e,r,s,i,n,o,a=(e=(r=this.config.__extensionClasses)==null?void 0:r.featureFlags)!==null&&e!==void 0?e:(s=Te.__defaultExtensionClasses)==null?void 0:s.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((i=this.Dn)==null||i.call(this),this.Dn=void 0,this.featureFlags=new a(this)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var r,s,i,n,o,a,l,u=performance.now(),c=E({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(r=this.exceptions)!==null&&r!==void 0?r: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=(s=this.surveys)!==null&&s!==void 0?s: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,xp)),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,r){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-r>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,r)}),0);var s=e.shift();if(s)try{s()}catch(n){k.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-r);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var r;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var s,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=M(i.supportedCompression,xe.GZipJS)?xe.GZipJS:M(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(s=i.analytics)!=null&&s.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(r=this.jn)==null||r.handleRemoteConfig(e),this.sn.forEach((n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(s){k.critical("`loaded` function failed",s)}if(this.Bn(),this.config.internal_or_test_user_hostname&&se!=null&&se.hostname){var e=se.hostname,r=this.config.internal_or_test_user_hostname;(typeof r=="string"?e===r:r.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Uu(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()&&Es(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,r,s,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(r=this.metrics)==null||r.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(sn),(s=this.logs)==null||s.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(sn,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ad?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=E({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(r=>{var s,i,n,o=E({},r);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(s=o.transport)!==null&&s!==void 0?s:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(g,_){return _===void 0&&(_=new Date().toISOString()),L(g)?g.map((w=>E({},w,{sent_at:_}))):E({},g,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Bs.filter((g=>!o.disableTransport||!g.transport||!o.disableTransport.includes(g.transport))),f=(i=(n=(function(g,_){for(var w=0;g.length>w;w++)if(g[w].transport===h)return g[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 m=g=>{try{f(g)}catch(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&ah&&typeof Promise<"u"&&!Ds?Up(o).then((g=>{m(g)})).catch((g=>{if(Ha(g))return Ds=!0,void m(E({},o,{compression:void 0,url:El(r.url,r.method,void 0,r.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return Ha(_)||w===Cc})(g)&&(Ds=!0),m(o)})):f(o)})(E({},e,{callback:r=>{var s,i;this.rateLimiter.checkForLimiting(r),400>r.statusCode||(s=(i=this.config).on_request_error)==null||s.call(i,r),e.callback==null||e.callback(r)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){vn++;try{var r,s=[],i=[],n=[];Es(e,(a=>{if(a)if(L(r=a[0]))n.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&r==="alias"?s.push(a):L(a)&&r.indexOf("capture")!==-1&&Se(this[r])?n.push(a):i.push(a)}));var o=function(a,l){Es(a,(function(u){try{if(L(u[0])){var c=l;Z(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){k.error("Error executing queued PostHog call",u,d)}}))};o(s,this),o(i,this),o(n,this)}finally{vn--}}push(e){if(vn>0&&L(e)&&W(e[0])){var r=Te.prototype[e[0]];Se(r)&&r.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,r,s){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!x(e)&&W(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=s!=null&&s.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){r!=null&&r.$current_url&&!W(r?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),r==null||delete r.$current_url),e!=="$exception"||s!=null&&s.Wn||k.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=s?.timestamp||d,p=Ga(s?.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,r||{},h,p)};e===nr&&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 m=e==="$feature_flag_called"&&f.properties.$feature_flag_has_experiment===!1&&this.get_property(ei)===!0;s?.$set&&!m&&(f.$set=s?.$set);var g=s?.$unset;g&&(f.$unset=g);var _,w,b,I=m?void 0:this.Vn(s?.$set_once,e!==Qa,e===nn);if(I&&(f.$set_once=I),s!=null&&s._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(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var z;if(l.add(O),L(O))z=[],Es(O,(oe=>{z.push(T(oe))}));else{var H={};Z(O,((oe,pe)=>{l.has(oe)||(H[pe]=T(oe))})),z=H}return z}})(o)),f.timestamp=h,x(s?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),m&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return lh.forEach(z),O.forEach(z),J})(f.properties,nf)),e===ft.DISMISSED||e===ft.SENT){var F=r?.[hn.SURVEY_ID],P=r?.[hn.SURVEY_ITERATION];nd({id:F,current_iteration:P}),f.$set=E({},f.$set,{[(_={id:F,current_iteration:P},w=e===ft.SENT?"responded":"dismissed",b="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+w+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===ft.SHOWN&&(f.$set=E({},f.$set,{[hn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Tp.SHOWN){var j=r?.[ml.TOUR_TYPE];j&&(f.$set=E({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+j]:new Date().toISOString()}))}var S=E({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=s?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),N={method:"POST",url:R,data:f,compression:"best-available",timestampMode:s?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:s?._batchKey,transport:s?.transport};return!this.config.request_batching||s&&(s==null||!s._batchKey)||s!=null&&s.send_instantly?this.Pn(N):this.In.enqueue(N),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(r=>e(r.event,r)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new sf(this)}cn(e){this._n.push(e);var r=!0;return()=>{if(r){r=!1;var s=this._n.indexOf(e);s!==-1&&this._n.splice(s,1)}}}calculateEventProperties(e,r,s,i,n){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return r;var o=n?void 0:this.persistence.remove_event_timer(e),a=E({},r);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=E({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mn(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(F,P,j,S){var A,R,N,T;if(S===void 0&&(S=!1),!Pe)return{};var O,J=F?[...vr,...P||[]]:[],z=(function(vs){for(var je=0;qa.length>je;je++){var _s=qa[je],Xt=_s[1],Qt=_s[0].exec(vs),Ir=Qt&&(Se(Xt)?Xt(Qt,vs):Xt);if(Ir)return Ir}return["",""]})(Pe),H=z[0],oe=z[1],pe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(j)||(Ie.detectGoogleSearchApp=j);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(N=v.screen)==null?void 0:N.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Ye,Rt,de,Ve,St,kr,Be,Fe,ms=ee(Vo({$os:H,$os_version:oe,$browser:Xc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Nc||Fe===Tc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Gc?pr:Fe===es||Fe===dr||Fe===ts||Fe===On?"Console":Fe===Lc?"Wearable":Fe?Oe:de?.userAgentDataPlatform==="Android"&&((Ve=de?.maxTouchPoints)!==null&&Ve!==void 0?Ve:0)>0?600>Math.min((St=de?.screenWidth)!==null&&St!==void 0?St:0,(kr=de?.screenHeight)!==null&&kr!==void 0?kr:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:pr:"Desktop"),$timezone:ju(),$timezone_offset:Ap()}),{$current_url:is(S?Ct(se?.href):se?.href,J,ns),$host:se?.host,$pathname:se?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Ch(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(ms.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ms})(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,s.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(F){a.$sdk_debug_error_capturing_properties=String(F)}if(this.requestRouter.region===ho&&(a.$lib_custom_api_host=this.config.api_host),u=e!==nr||n?e!==sn||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,i),a=ee(a,u),e===nr&&C&&(a.title=C.title),!x(o)){var f=s.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 m=this.persistence.properties(),g=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(F=>{F in m&&delete g[F]}));var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,m,g,E({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Fl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,r,s){var i;if(r===void 0&&(r=!0),s===void 0&&(s=!1),!this.persistence||!this.Zn()||this.mn&&!s)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&&(k.error(Fl),a=l(a,"$set_once")),r&&(this.mn=!0),mt(a)?void 0:a}register(e,r){var s;(s=this.persistence)==null||s.register(e,r)}register_once(e,r,s){var i;(i=this.persistence)==null||i.register_once(e,r,s)}register_for_session(e){var r;(r=this.sessionPersistence)==null||r.register(e),Object.keys(e).forEach((s=>this.yn.add(s))),this.Qn()}unregister(e){var r;(r=this.persistence)==null||r.unregister(e)}unregister_for_session(e){var r;(r=this.sessionPersistence)==null||r.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,r){this.register({[e]:r})}An(){this.yn.forEach((e=>{var r;(r=this.sessionPersistence)==null||r.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 r=[];this.yn.forEach((s=>r.push(s))),r.length>0?ce.F(this.bn,r):ce.q(this.bn)}}getFeatureFlag(e,r){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlag(e,r)}getFeatureFlagPayload(e){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagPayload(e)}getFeatureFlagResult(e,r){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagResult(e,r)}getAllFeatureFlags(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,r){var s,i;return(s=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,r))!==null&&s!==void 0?s:r?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,r,s){var i;(i=this.featureFlags)==null||i.updateFlags(e,r,s)}updateEarlyAccessFeatureEnrollment(e,r,s){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,r,s)}getEarlyAccessFeatures(e,r,s){var i;return r===void 0&&(r=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,r,s)}on(e,r){return this.dn.on(e,r)}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:Nr}),()=>{})}onSessionId(e){var r,s;return(r=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&r!==void 0?r:()=>{}}getSurveys(e,r){r===void 0&&(r=!1),this.surveys?this.surveys.getSurveys(e,r):e([],{isLoaded:!1,error:Nr})}getActiveMatchingSurveys(e,r){r===void 0&&(r=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,r):e([],{isLoaded:!1,error:Nr})}renderSurvey(e,r){var s;(s=this.surveys)==null||s.renderSurvey(e,r)}displaySurvey(e,r){var s;r===void 0&&(r=Zp),(s=this.surveys)==null||s.displaySurvey(e,r)}cancelPendingSurvey(e){var r;(r=this.surveys)==null||r.cancelPendingSurvey(e)}canRenderSurvey(e){var r,s;return(r=(s=this.surveys)==null?void 0:s.canRenderSurvey(e))!==null&&r!==void 0?r:{visible:!1,disabledReason:Nr}}canRenderSurveyAsync(e,r){var s,i;return r===void 0&&(r=!1),(s=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,r))!==null&&s!==void 0?s:Promise.resolve({visible:!1,disabledReason:Nr})}Jn(e){return!e||Mn(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===bs?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,r,s){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(rs)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Br)&&(this.unregister(Br),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||er)===er,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:r||{},$set_once:s||{}},!1),this.capture(nn,{distinct_id:e,$anon_distinct_id:i},{$set:r||{},$set_once:s||{}}),this.Sn=mn(e,r,s),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Tt);var u=r||{},c=s||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=mn(e,r,s)}else(r||s)&&this.setPersonProperties(r,s);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(r||s)&&this.reloadFeatureFlags()}}setPersonProperties(e,r){if((e||r)&&this.Gn("posthog.setPersonProperties")){var s=mn(this.get_distinct_id(),e,r);this.Sn!==s?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:r||{}},!0),this.capture("$set",{$set:e||{},$set_once:r||{}}),this.Sn=s):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var r,s=(L(e)?e:[e]).filter((i=>W(i)&&i.length>0));s.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((r=this.featureFlags)==null||r.unsetPersonPropertiesForFlags(s,!0),this.capture("$set",{$unset:s}),this.Sn=null)}group(e,r,s){if(e&&r){var i=this.getGroups(),n=i[e]!==r;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:E({},i,{[e]:r})}),n||s){var o={$group_type:e,$group_key:r};s&&(o.$group_set=s),this.capture(Qa,o)}s&&this.setGroupPropertiesForFlags({[e]:s}),n&&!s&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,r){var s;r===void 0&&(r=!0),(s=this.featureFlags)==null||s.setPersonPropertiesForFlags(e,r)}resetPersonPropertiesForFlags(e){var r;e===void 0&&(e=!0),(r=this.featureFlags)==null||r.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,r){var s;r===void 0&&(r=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((s=this.featureFlags)==null||s.setGroupPropertiesForFlags(e,r))}resetGroupPropertiesForFlags(e){var r;(r=this.featureFlags)==null||r.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,r){var s,i,n,o,a,l,u,c,d,h;if(r===void 0&&(r=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(rs),m=this.get_property(rn),g=this.get_property(qt),_=this.is_capturing();if(this.consent.reset(),r||!_||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."),(s=this.persistence)==null||s.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),x(g)||(p=this.persistence)==null||p.register({[qt]:g}),(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,er),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:bs,$device_id:null},"");else{var w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||x(m)||this.register({[rn]:m})}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 r=this;return X((function*(){var s,i,n,o,a,l,u;if(r.__loaded){(s=r.Un)==null||s.stop(),(i=r.jn)==null||i.dispose(),(n=r.sessionRecording)==null||n.dispose(),(o=r.logs)==null||o.flushLogs("sendBeacon"),(a=r.metrics)==null||a.flush("sendBeacon"),(l=r.In)==null||l.unload(),(u=r.Rn)==null||u.unload();try{var c;(c=r.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,r){var s;this.config.identity_distinct_id=e,this.config.identity_hash=r,this.alias(e),(s=this.conversations)==null||s.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,r;return(e=(r=this.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var r=this.sessionManager.checkAndGetSessionAndWindowId(!0),s=r.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+r.sessionId);if(e!=null&&e.withTimestamp&&s){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!s)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return i}alias(e,r){return e===this.get_property(au)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(r)&&(r=this.get_distinct_id()),e!==r?(this.Kn(Br,e),this.capture("$create_alias",{alias:e,distinct_id:r})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var r=E({},this.config);if(te(e)){var s,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var m=this.En();(s=this.persistence)==null||s.update_config(this.config,r,m),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new un(E({},this.config,{persistence:"sessionStorage"}),m,!1);var g=this.Cn(this.config.debug);Ke(g)&&(this.config.debug=g),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:r,newConfig:E({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(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,r){Y.LIB_NAME=e,Y.LIB_VERSION=r}startSessionRecording(e){var r,s,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)&&((r=this.sessionManager)==null||r.checkAndGetSessionAndWindowId(),l.sampling&&((s=this.sessionRecording)==null||s.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,r){if(this.exceptions){var s=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(E({},i,r))}}addExceptionStep(e,r){var s;(s=this.exceptions)==null||s.addExceptionStep(e,r)}captureLog(e){var r;(r=this.logs)==null||r.captureLog(e)}get logger(){var e,r;return(e=(r=this.logs)==null?void 0:r.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 r,s;return(r=(s=this.toolbar)==null?void 0:s.loadToolbar(e))!==null&&r!==void 0&&r}get_property(e){var r;return(r=this.persistence)==null?void 0:r.props[e]}getSessionProperty(e){var r;return(r=this.sessionPersistence)==null?void 0:r.props[e]}toString(){var e,r=(e=this.config.name)!==null&&e!==void 0?e:or;return r!==or&&(r=or+"."+r),r}_isIdentified(){var e,r;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((r=this.sessionPersistence)==null?void 0:r.get_property(He))===Tt}Zn(){var e,r;return!(this.config.person_profiles==="never"||this.config.person_profiles===to&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Br])&&((r=this.persistence)==null||(r=r.props)==null||!r[si]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(si,!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!==Ht)}es(){var e,r,s,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((s=this.persistence)==null||s.set_disabled(n)),((r=this.sessionPersistence)==null?void 0:r.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var r;if(this.config.cookieless_mode!==ht){if(this.gn()){var s,i,n,o,a;this.Yn(!0,!0),(s=this.sessionManager)==null||s.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new xl(this),this.pageViewManager=new fl(this),this.persistence&&(this.sessionPropsManager=new Sl(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(),(r=this.sessionRecording)==null||r.startIfEnabledOrStop(),this.config.cookieless_mode==Ht&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Cl)}opt_out_capturing(){var e,r,s;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Ht&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ht&&(this.register({distinct_id:bs,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(r=this.sessionManager)==null||r.destroy(),(s=this.pageViewManager)==null||s.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):k.warn(Cl)}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===Ht?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?Qu(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(nr,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ii,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,ii,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(r,s,i,n,o){var a=s in r&&!D(r[s]),l=i in r&&!D(r[i]);return a?r[s]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+s+"' instead. The old field will be removed in a future major version."),r[i])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var r;if(D(this.config.before_send))return e;var s=Object.keys((r=e.properties)!==null&&r!==void 0?r:{}).filter(gh),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),D(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return fh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}n.properties&&!mt(n.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of s)if(n.properties&&D(n.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,r){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:r})}captureTraceMetric(e,r,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:r,$ai_metric_value:String(s)})}Cn(e){var r=Ke(e)&&!e,s=Q.N()&&Q.P("ph_debug")==="true";return!r&&(!!s||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 r=0;e.length>r;r++)t.prototype[e[r]]=sp(t.prototype[e[r]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var r=te(e)?e:{};this.thresholdPx=r.threshold_px||30,this.timeoutMs=r.timeout_ms||1e3,this.clickCount=r.click_count||3,this.clicks=[]}isRageClick(e,r,s){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(r-i.y)s-i.timestamp){if(this.clicks.push({x:e,y:r,timestamp:s}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:r,timestamp:s}];return!1}}var yn="$copy_autocapture",wn=re("[AutoCapture]");function bn(t,e){return e.length>t?e.slice(0,t)+"...":e}function lf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function cf(t,e){var r,s,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ft(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Su>c.length;)if(Eu(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!Ft(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,m,g=[],_={},w=!1,b=!1;if(Z(c,(S=>{var A=io(S);if(Me(S,"a")){var R=S.getAttribute("href");w=!!(A&&R&&Kr(R))&&(u?Ct(R):R)}M(ai(S),"ph-no-capture")&&(b=!0),g.push((function(T,O,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Ko.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?bn(1024,dl(T)):bn(1024,ss(T)));var Ie=ai(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Fu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Kr(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=Go(ge).join(" ")),pe["attr__"+ae.name]=bn(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=lf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,n,o,a,u));var N=(function(T){if(!io(T))return{};var O={};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&&Kr(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(g[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):ss(t)),w){var I,F;g[0].attr__href=w;var P=(I=li(w))==null?void 0:I.host,j=v==null||(F=v.location)==null?void 0:F.host;P&&j&&P!==j&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:g},{$elements_chain:(m=g,(function(S){return S.map((A=>{var R,N,T="";if(A.tag_name&&(T+=A.tag_name),A.attr_class)for(var O of(A.attr_class.sort(),A.attr_class))T+="."+O.replace(/"/g,"");var J=E({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(N=A.nth_of_type)!==null&&N!==void 0?N:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Os(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return z[hl(H[0].toString())]=hl(oe.toString())})),(T+=":")+Os(z).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((A=>{var R,N,T={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(N=A.attr__href)==null?void 0:N.slice(0,2048),attr_class:Ep(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Os(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(m)))},(r=g[0])!=null&&r.$el_text?{$el_text:(s=g[0])==null?void 0:s.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Mr=re("[ExceptionAutocapture]"),$l=()=>{},uf=re("[TracingHeaders]"),Lt=re("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",Lr="awaiting_config",Fs="missing_config";re("[SessionRecording]"),re("[SessionRecording]");var po="[SessionRecording]",at=re(po),df=re("[Heatmaps]");function En(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Ps=re("[Product Tours]"),Sn=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},hf=["$set_once","$set"],Ze=re("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function sr(t,e,r){if(D(t))return!1;switch(r){case"exact":return t===e;case"contains":var s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(s,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class pf{constructor(e){this.ns=new Xo,this.ss=(r,s)=>this.os(r,s)&&this.ls(r,s)&&this.us(r,s)&&this.hs(r,s),this.os=(r,s)=>s==null||!s.event||r?.event===s?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,r;x((e=this._instance)==null?void 0:e._addCaptureHook)||(r=this._instance)==null||r._addCaptureHook(((s,i)=>{this.on(s,i)}))}register(e){var r,s;if(!x((r=this._instance)==null?void 0:r._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(s=this._instance)!=null&&s.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?.selector)}))})),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,r){var s;r!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(r.event))&&this.vs&&((s=this.vs)==null?void 0:s.size)>0&&this.vs.forEach((i=>{this.cs(r,i)&&this.ns.emit("actionCaptured",i.name)}))}fs(e){this.onAction("actionCaptured",(r=>e(r)))}cs(e,r){if(r?.steps==null)return!1;for(var s of r.steps)if(this.ss(e,s))return!0;return!1}onAction(e,r){return this.ns.on(e,r)}ls(e,r){if(r!=null&&r.url){var s,i=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!i||typeof i!="string"||!sr(i,r.url,r.url_matching||"contains"))return!1}return!0}us(e,r){return!!this.ps(e,r)&&!!this.gs(e,r)&&!!this.ys(e,r)}ps(e,r){var s;if(r==null||!r.href)return!0;var i=this.bs(e);if(i.length>0)return i.some((a=>sr(a.href,r.href,r.href_matching||"exact")));var n,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&sr((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",r.href,r.href_matching||"exact")}gs(e,r){var s;if(r==null||!r.text)return!0;var i=this.bs(e);if(i.length>0)return i.some((u=>sr(u.text,r.text,r.text_matching||"exact")||sr(u.$el_text,r.text,r.text_matching||"exact")));var n,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(n=(function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!D(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=r.text,a=r.text_matching||"exact",n.some((u=>sr(u,o,a))))}ys(e,r){var s,i;if(r==null||!r.selector)return!0;var n=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(n!=null&&n.includes(r.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(r.selector_regex&&o)try{return new RegExp(r.selector_regex).test(o)}catch{return!1}return!1}bs(e){var r;return(e==null||(r=e.properties)==null?void 0:r.$elements)==null?[]:e?.properties.$elements}hs(e,r){return r==null||!r.properties||r.properties.length===0||rd(r.properties.reduce(((s,i)=>{var n=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return s[i.key]={values:n,operator:i.operator||"exact"},s}),{}),e?.properties)}}class ff{constructor(e){var r;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(r=this._instance)==null||r.onSessionId==null||r.onSessionId((s=>this.Ss(s)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,r){return!!e&&rd(e.propertyFilters,r?.properties)}Ps(e,r){var s=new Map;return e.forEach((i=>{var n;(n=i.conditions)==null||(n=n[r])==null||(n=n.values)==null||n.forEach((o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(i.id),s.set(o.name,a)}}))})),s}Rs(e,r,s){var i=(s===Ar.Activation?this.ws:this.ks).get(e),n=[];return this.As((o=>{n=o.filter((a=>i?.includes(a.id)))})),n.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,r)}))}register(e){var r;x((r=this._instance)==null?void 0:r._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var r=e.filter((s=>{var i,n;return((i=s.conditions)==null?void 0:i.actions)&&((n=s.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0}));r.length!==0&&(this.Os==null&&(this.Os=new pf(this._instance),this.Os.init(),this.Os.fs((s=>{this.onAction(s)}))),r.forEach((s=>{var i,n,o,a,l;s.conditions&&(i=s.conditions)!=null&&i.actions&&(n=s.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(s.conditions.actions.values),(l=s.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(s.id),this.xs.set(u.name,c||[s.id])}})))})))}Fs(e){var r,s=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}));s.length===0&&i.length===0||((r=this._instance)==null||r._addCaptureHook(((n,o)=>{this.onEvent(n,o)})),this.ws=this.Ps(e,Ar.Activation),this.ks=this.Ps(e,Ar.Cancellation))}onEvent(e,r){var s,i,n=this.Ds(),o=(r==null||(s=r.properties)==null?void 0:s.$survey_id)||(r==null||(i=r.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,r,Ar.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:r,items:this.ws.get(e)});var u=this.Rs(e,r,Ar.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var r;if(e.length!==0){var s=!((r=this._instance)==null||r.get_session_id==null||!r.get_session_id()),i=[];for(var n of e)s&&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((s=>s!==e));var r=this.zs();return!r.includes(e)&&(this.Ws([...r,e]),this.Vs(),!0)}Ns(e){var r=new Set(e);this._s=this._s.filter((n=>!r.has(n)));var s=this.Zs(),i=s.filter((n=>!r.has(n)));i.length!==s.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,r=this.Ms();if(!r)return{};var s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[r];return s&&typeof s=="object"?s:{}}Us(e){if(this.Ms()){var r=this.Qs();this.Ts(E({},r,{[e]:Date.now()}))}}js(e){if(this.Ms()){var r=this.Qs(),s={},i=!1;for(var n of Object.entries(r)){var o=n[0],a=n[1];e.includes(o)?i=!0:s[o]=a}i&&(mt(s)?this.Es():this.Ts(s))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var r=this.Qs()[e];return he(r)?r:void 0}}Zs(){var e,r=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[r])||[]}zs(){var e,r,s=this.Zs();if(s.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(r=this._instance)==null||r.get_session_id==null?void 0:r.get_session_id();return n&&i===n?s:[]}Vs(){var e,r=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();r&&this.Xs(r)}Gs(){this.ta()}Ss(e){var r,s=(r=this._instance)==null||(r=r.persistence)==null?void 0:r.props[this.Ys()];if(s&&s!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter((o=>he(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 gf extends ff{constructor(e){super(e)}Js(){return Yn}Ys(){return Ns}Ms(){return Ms}Ts(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Ms]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ms)}Cs(e){var r,s;this.As((n=>{s=n.find((o=>o.id===e))}));var i=(r=s)==null||(r=r.appearance)==null?void 0:r.surveyPopupDelaySeconds;return he(i)&&i>0}ra(){return ft.SHOWN}As(e){var r;(r=this._instance)==null||r.getSurveys(e)}Bs(e){var r;(r=this._instance)==null||r.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Yn]:e})}Xs(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Ns]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ns)}ea(){return!1}$s(e,r){var s;this.As((n=>{s=n.find((o=>o.id===r))}));var i=!s||(function(n){var o;return sd(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"})(s);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 As="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",mf=v!=null&&v.location?ci(v.location.hash,"__posthog")||ci(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=re("[Toolbar]"),Bl=re("[FeatureFlags]");class vf{constructor(e,r){r===void 0&&(r=!1),this.na=!1,this.update(e,r)}update(e,r){this.sa=((s,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=s.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=s.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!s.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!s.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!s.advanced_feature_flags_dedup_per_session,cacheTtlMs:s.feature_flag_cache_ttl_ms,requestTimeoutMs:s.feature_flag_request_timeout_ms,compression:s.disable_compression?"none":"base64",evaluationContexts:(a=(l=s.evaluation_contexts)!==null&&l!==void 0?l:s.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:L(s.flag_keys)?s.flag_keys:void 0}})(e,r),!e.evaluation_environments||e.evaluation_contexts||this.na||(Bl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Bl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var jl=re("[FeatureFlags]"),Ot=re("[FeatureFlags]",{debugEnabled:!0}),xn=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},r=0;t.length>r;r++)e[t[r]]=!0;return e},Wl=t=>{var e={};for(var r of Os(t||{})){var s=r[1];s&&(e[r[0]]=s)}return e},Xe=re("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",_f={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>hi(e,t),not_regex:(t,e)=>!hi(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var r=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),r.getWebExperiments((i=>{ye.aa("retrieved web experiments from the server"),r.oa=new Map,i.forEach((n=>{if(n.feature_flag_key){var o;r.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=r.oa)==null||o.set(n.feature_flag_key,n));var a=r._instance.getFeatureFlag(n.feature_flag_key);W(a)&&n.variants[a]&&r.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,r._instance)&&r.la(n.name,l,u.transforms)}}))}),s)},this._instance=e,this._instance.onFeatureFlags((s=>{this.onFeatureFlags(s)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(zl);else if(!this.Ne.disable_web_experiments){if(D(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach((r=>{var s;if(this.oa&&(s=this.oa)!=null&&s.has(r)){var i,n=this._instance.getFeatureFlag(r),o=(i=this.oa)==null?void 0:i.get(r);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 r=mr(e?.search,"__experiment_id"),s=mr(e?.search,"__experiment_variant");r&&s&&(ye.aa("previewing web experiments "+r+" && "+s),this.getWebExperiments((i=>{this.ha(parseInt(r),s,i)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,r,s){if(this.Ne.disable_web_experiments&&!s)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!r)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,r,s){var i=s.filter((n=>n.id===e));i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+r+"]"),this.la(i[0].name,r,i[0].variants[r].transforms))}static ua(e,r){return!D(e.conditions)&&ye.da(e,r)&&ye.va(e)}static da(e,r){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=yu(r,i.href);return(n=e.conditions)==null||!n.url||_f[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var r;if(D(e.conditions)||D((r=e.conditions)==null?void 0:r.utm))return!0;var s=Nu();if(s.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)==s.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)==s.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)==s.utm_medium,m=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==s.utm_term;return h&&f&&m&&p}return!1}static aa(e){for(var r=arguments.length,s=new Array(r>1?r-1:0),i=1;r>i;i++)s[i-1]=arguments[i];k.info("[WebExperiments] "+e,s)}la(e,r,s){this._is_bot()?ye.aa(zl):r!=="control"?s.forEach((i=>{if(i.selector){var n;ye.aa("applying transform of variant "+r+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o?.forEach((a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?Qu(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=re("[Conversations]"),Dt="Conversations not available yet.",ql="console",ld="__posthogHandledLogsRequestError",kn=(t,e)=>{var r=t instanceof Error?t:new Error(e);return r[ld]=!0,r},Vl=t=>!!t&&typeof t=="object"&&t[ld]===!0,$i={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=jl,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 vf(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var r;(r=this.Ea)==null||r.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),r=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(r):r();var e,r}Pa(t){if(this.nn===t)return v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],v?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Ur,Hr,Ts,et]){var r=this.Oa(e);x(r)||(t[e]=r)}this.fa=t;var s=E({},t),i=this.Oa(Bt);if(i)for(var n of Object.entries(i))s["$feature/"+n[0]]=n[1];this.pa=s}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Gr);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 r=e&&typeof e=="string"&&e.trim().length>0;return r||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),r})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var r=e&&typeof e=="string"&&e.trim().length>0;return r||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),r}))}initialize(){var t,e,r=this.Ne,s=(t=(e=r.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(s).length){var i,n,o=(i=(n=r.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(s).filter((u=>!!s[u])).reduce(((u,c)=>(u[c]=s[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,r){var s,i,n=r!=null&&r.merge&&(s=this.Oa(Bt))!==null&&s!==void 0?s:{},o=r!=null&&r.merge&&(i=this.Oa(Hr))!==null&&i!==void 0?i:{},a=E({},n,t),l=E({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Da(h),variant:Ba(h),reason:void 0,metadata:x(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Kn),e=this.Oa(et),r=this.Oa(jt);if(!r&&!e)return t||{};var s=ee({},t||{}),i=[...new Set([...Object.keys(r||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=s[n],u=e?.[n],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=r?.[n],p=E({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=E({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),s[n]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:r,finalDetails:s}),this.ca=!0),s}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((r=>{var s=t[r];return{key:r,enabled:Da(s),variant:Ba(s),payload:Oa(e[r])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var r=ee({},t||{}),s=Object.keys(e),i=0;s.length>i;i++)r[s[i]]=e[s[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:r}),this.ca=!0),r}getFlagPayloads(){var t=this.Oa(Hr),e=this.Oa(jt);if(!e)return t||{};for(var r=ee({},t||{}),s=Object.keys(e),i=0;s.length>i;i++)r[s[i]]=e[s[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:r}),this.ca=!0),r}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(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var r={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:E({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(e.deviceId)||(r.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(r.disable_flags=!0);var s=this.Na();s.length&&(r.evaluation_contexts=s);var i=this.qa();x(i)||(r.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({[Ls]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:r,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!r.disable_flags||this.wa){this.ka=!f;var m=[];c.error?m.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Ul:"unknown_error"):c.statusCode!==200&&m.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&m.push("errors_while_computing_flags");var g=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));g&&m.push("quota_limited"),this.F({[Ls]:m}),g?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."):r.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Ru(this.Sa,3)}Ua(t){this.Sa=Tu(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 r;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s=this.getFeatureFlagResult(t,e);return(r=s?.variant)!==null&&r!==void 0?r:s?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+xn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r,s=this.getFlagVariants(),i=t in s,n=s[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(Ts)||void 0,u=this.Oa(Gr)||void 0,c=this.Oa(Wt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(zr);h&&h!==p&&(c={},r=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))r&&this.F({[Wt]:c,[zr]:r});else{var f,m,g,_,w,b,I,F,P,j;L(c[t])?c[t].push(a):c[t]=[a],this.F(E({[Wt]:c},r?{[zr]:r}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Ls))!==null&&f!==void 0?f:[]];x(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:((m=this.Ne.bootstrap)==null||(m=m.featureFlags)==null?void 0:m[t])||null,$feature_flag_bootstrapped_payload:((g=this.Ne.bootstrap)==null||(g=g.featureFlagPayloads)==null?void 0:g[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(w=S.metadata)==null?void 0:w.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(F=S.reason)==null?void 0:F.code;T&&(R.$feature_flag_reason=T),S!=null&&(P=S.metadata)!=null&&P.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(j=S.metadata)!=null&&j.original_payload&&(R.$feature_flag_original_payload=S==null||(N=S.metadata)==null?void 0:N.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else r&&this.F({[Wt]:c,[zr]:r});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((r=>{this.rt.error("Failed to capture feature flag call",r)}))}catch(r){this.rt.error("Failed to capture feature flag call",r)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var r=this;return X((function*(){var s=r.nn;if(s){var i={distinct_id:s.distinctId,token:s.projectToken,person_properties:{$lib:s.library.name,$lib_version:s.library.version}},n=r.Na();n.length&&(i.evaluation_contexts=n);var o,a=r.qa();x(a)||(i.flag_keys=a);try{var l,u=(l=(yield s.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:r.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:r.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void r.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){r.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+xn),e.defaultValue;var r=this.getFeatureFlag(t,e);return x(r)?e.defaultValue:!!r}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,r){this.ja(t,e,r)}ja(t,e,r){if(this.nn){this.ma=!0;var s=(function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,j)=>{var S=P.flags;return S?E({},P,{featureFlags:Object.fromEntries(Object.keys(S).map((A=>{var R;return[A,(R=S[A].variant)!==null&&R!==void 0?R:S[A].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((A=>S[A].enabled)).filter((A=>{var R;return(R=S[A].metadata)==null?void 0:R.payload})).map((A=>{var R;return[A,(R=S[A].metadata)==null?void 0:R.payload]})))}):(P.featureFlags&&j.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,m=i.evaluatedAt;if(L(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var g={};if(h)for(var _=0;h.length>_;_++)g[h[_]]=!0;return{[Ur]:h,[Bt]:g,[ei]:!1}}var w=h,b=p,I=d;if(l!=null&&l.partialResponse)w=E({},n,w),b=E({},o,b),I=E({},a,I);else if(i.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var j;return!((j=d[P])!=null&&j.failed)})));w=E({},n,Object.fromEntries(Object.entries(w).filter((P=>F.has(P[0]))))),b=E({},o,Object.fromEntries(Object.entries(b||{}).filter((P=>F.has(P[0]))))),I=E({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else w=E({},n,w),b=E({},o,b),I=E({},a,I);return E({[Ur]:Object.keys(Wl(w)),[Bt]:w||{},[Hr]:b||{},[Kn]:I||{},[ei]:i.minimalFlagCalledEvents===!0},f?{[Ts]:f}:{},m?{[Gr]:m}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),r,this.rt);s&&this.F(s),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([et,jt]),this.Va(),void Ot.info("All overrides cleared");if(L(t))return this.F({[et]:Hl(t)}),this.Va(),void Ot.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,r=t;this.ca=!!((e=r.suppressWarning)!==null&&e!==void 0&&e);var s={},i=r.flags,n=r.payloads;return i&&(s[et]=L(i)?Hl(i):i),n&&(s[jt]=n),Object.keys(s).length&&this.F(s),i===!1&&n===!1?this.q([et,jt]):i===!1?this.q(et):n===!1&&this.q(jt),this.Va(),i===!1?Ot.info("Flag overrides cleared"):i&&Ot.info("Flag overrides set",{flags:i}),void(n===!1?Ot.info("Payload overrides cleared"):n&&Ot.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[et]:t}),this.Va(),void Ot.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(),r=e.flags,s=e.flagVariants;try{t(r,s)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,r){var s=(this.Oa(Rs)||[]).find((l=>l.flagKey===t)),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};s&&(n.$early_access_feature_name=s.name),r&&(n.$feature_enrollment_stage=r);var o=E({},this.getFlagVariants(),{[t]:e});this.F({[Ur]:Object.keys(Wl(o)),[Bt]:o,[ct]:E({},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,r){e===void 0&&(e=!1);var s=this.Oa(Rs);!s||e?this.Qa(t,r):t(s)}Qa(t,e){var r=this;return X((function*(){var s=r.nn;if(s){var i,n=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield s.sendRequest("/api/early_access_features/?token="+s.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;r.F({[Rs]:i=o.json.earlyAccessFeatures})}catch(a){return void r.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){r.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((r=>e[r])),flagVariants:Object.keys(e).filter((r=>e[r])).reduce(((r,s)=>(r[s]=e[s],r)),{})}}Va(t){this.Fa();var e=this.Ga(),r=e.flags,s=e.flagVariants;this.featureFlagEventHandlers.forEach((i=>{try{i(r,s,{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 r=this.Oa(ct)||{},s=t?.$set||(t!=null&&t.$set_once?{}:t),i=t?.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in r||(n[o]=i[o]));this.F({[ct]:E({},r,n,s)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var r=E({},this.Oa(ct)||{});t.forEach((s=>{delete r[s]})),this.F({[ct]:r}),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 r=this.Oa(Ut)||{},s=E({},r);for(var i of Object.keys(t))s[i]=E({},r[i],t[i]);this.F({[Ut]:s}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:E({},e,{[t]:{}})})}else this.q(Ut)}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}}},yf={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===Lr||this.Ya===Fs?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=Tl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var r=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(r!=null&&r.length)||r.some((s=>s.name==="visible"))})(),this.Ie=()=>{var e;C?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw at.error("started without valid sessionManager"),new Error(po+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(po+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(qt))==null||!t.enabled),r=!this.Ne.disable_session_recording,s=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&r&&!s}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var r=!x(Object.assign)&&!x(Array.from);this.ro&&r?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,r,s;this.ro&&(this.Ya!==Lr&&this.Ya!==Fs&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(r=$.__PosthogExtensions__)!=null&&r.initSessionRecording?this.so(t):(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.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(zo),(e=this.Mr)==null||e.unregister(lu)}uo(t,e){if(D(t))return null;var r,s=he(t)?t:parseFloat(t);return typeof(r=s)!="number"||!Number.isFinite(r)||0>r||r>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):s}ho(t){if(this.Mr){var e,r,s=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?.sampleRate,"remote config sampleRate"),u=a??l;D(u)&&this.lo();var c=o?.minimumDurationMilliseconds;s.register({[qt]:E({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:E({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(r=this._instance.sessionManager)==null?void 0:r.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===Lr&&(this.Ya=Fs,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var r;e===void 0&&(e="log"),(r=this.Ja)!=null&&r.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,r=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(qt);return(r==null||(e=r.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(qt);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(r){return at.warn("persisted remote config for session recording is invalid and will be ignored",r),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,r,s;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({[mu]:!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===Fs||this.Ya===Lr?void 0:(this.Ya=Lr,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Uu(this._instance).load());this.Ya=Nl,(r=(s=this.Ja).setDocumentWasEverVisible)==null||r.call(s,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({[uu]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[cu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,r;this.Ja||(r=this.Mr)==null||r.register({[t==="url"?du:hu]:!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 r;return!((r=this.Ja)==null||!r.tryAddCustomEvent(t,e))}}},wf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,r=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return r.url_allowlist=(t=r.url_allowlist)==null?void 0:t.map((s=>new RegExp(s))),r.url_ignorelist=(e=r.url_ignorelist)==null?void 0:e.map((s=>new RegExp(s))),r}yo(){if(this.isBrowserSupported()){if(v&&C){var t=r=>{r=r||v?.event;try{this.bo(r)}catch(s){wn.error("Failed to capture event",s)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=r=>{r=r||v?.event;try{this.bo(r,yn)}catch(s){wn.error("Failed to capture copy/cut event",s)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else wn.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 r=e.autocapture_opt_out;Ke(r)&&(this.instance.persistence&&this.instance.persistence.register({[Un]:r}),this.co=r),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,r=[];return(e=this.mo)==null||e.forEach((s=>{var i=C?.querySelectorAll(s);i?.forEach((n=>{t===n&&r.push(s)}))})),r}get isEnabled(){var t,e,r=(t=this.instance.persistence)==null?void 0:t.props[Un],s=this.co,i=this.instance.Qi()&&!this.fo;if($e(s)&&!Ke(r)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!r;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var r,s=an(t);bu(s)&&(s=s.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(r=this.rageclicks)!=null&&r.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(s,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===yn;if(s&&(function(d,h,p,f,m,g){var _;if(!v||Jo(d)||p!=null&&p.url_allowlist&&!sl(p.url_allowlist,g)||p!=null&&p.url_ignorelist&&sl(p.url_ignorelist,g))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var b=Cu(d,f),I=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,A){var R=A?.element_allowlist;if(x(R))return!0;var N,T=function(J){if(R.some((z=>J.tagName.toLowerCase()===z)))return{v:!0}};for(var O of S)if(N=T(O))return N.v;return!1})(F,p)||!so(F,p?.css_selector_allowlist)||so(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:mp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var j=d.tagName.toLowerCase();switch(j){case"html":return!1;case"form":return(m||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(m||["change","click"]).indexOf(h.type)>=0;default:return I?(m||["click"]).indexOf(h.type)>=0:(m||["click"]).indexOf(h.type)>=0&&(Ko.indexOf(j)>-1||d.getAttribute("contenteditable")==="true")}})(s,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=cf(s,{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(s);if(a&&a.length>0&&(o.$element_selectors=a),e===yn){var l,u=xu(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var r=this;(function(s,i,n){try{if(!(i in s))return $l;var o={next:s[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 Se(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),s[i]=a,()=>{if(s[i]!==a)for(var l=s[i];Se(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else s[i]=o.next}}catch{return $l}})(v.history,t,(s=>function(i,n,o){s.call(this,i,n,o),r.So(t)}))}}So(t){try{var e,r=v==null||(e=v.location)==null?void 0:e.pathname;if(!r)return;r!==this._o&&this.isEnabled&&this._instance.capture(nr,{navigation_type:t}),this._o=r}catch(s){k.error("Error capturing "+t+" pageview",s)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[Hn]),this.rageclicks=new Al(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 D(this.Ne.capture_heatmaps)?D(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;df.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 r=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Hn]:r}),this.Co=r,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){En(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,ni,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,Sp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,ii,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(ni,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ii,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var r=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=(function(o,a,l){for(var u=o;u&&Ft(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(M(a,c))return!0;u=ku(u)}return!1})(an(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:s),y:t.clientY+(n?0:r),target_fixed:n,type:e}}ke(t,e){var r;if(e===void 0&&(e="click"),!rl(t.target)&&En(t)){var s=this.$o(t,e);(r=this.rageclicks)!=null&&r.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(an(t),this.instance.config.rageclick)&&this.Vt(E({},s,{type:"rageclick"})),this.Vt(s)}}Fo(t){!rl(t.target)&&En(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Ct(v.location.href):v.location.href,r=this.Ne.custom_personal_data_properties,s=this.Ne.mask_personal_data_properties?[...vr,...r||[]]:[],i=is(e,s,ns);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:pl,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",E({$current_url:this.R.url},this.R.metrics.reduce(((r,s)=>E({},r,{["$web_vitals_"+s.name+"_event"]:E({},s),["$web_vitals_"+s.name+"_value"]:s.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=r=>{var s;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(r?.name)||D(r?.value))Lt.error("Invalid metric received",r);else{var i=typeof r.navigationURL=="string"?r.navigationURL:void 0,n=this.Bo(i);if(!x(n)){var o=he(r.navigationId)||typeof r.navigationId=="string"?"navigation:"+r.navigationId:"url:"+n;if(!this.Ho||this.Ho>r.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,r.attribution&&r.attribution.interactionTargetElement&&(r.attribution.interactionTargetElement=void 0);var a=(s=this._instance.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0),l=E({},r,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});x(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Lt.error("Ignoring metric with value >= "+this.Ho,r)}}},this.Uo=()=>{if(!this.vo){var r,s,i,n,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(r=l.onLCP,s=l.onCLS,i=l.onFCP,n=l.onINP),r&&s&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&s(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 Lt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Vn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,r=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(r)?((e=this._instance.persistence)==null?void 0:e.props[Gn])||["CLS","FCP","INP","LCP"]:r}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Rl;return t>0&&6e4>=t?Rl:t}get isEnabled(){var t=se?.protocol;if(t!=="http:"&&t!=="https:")return Lt.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&&(Lt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var r=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,s=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Vn]:r}),this._instance.persistence.register({[Gn]:s})),this.Co=r,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__,r=this.zo,s=e?.postHogWebVitalsCallbacksByFlavor;s!=null&&s[r]||r==="web-vitals"&&x(s)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,r,(i=>{i?Lt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var r=this._instance.config.disable_capture_url_hashes?Ct(e):e,s=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...vr,...s||[]]:[];return is(r,i,ns)}Lt.error("Could not determine current URL")}}},bf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var r;if(v&&this.isEnabled&&(r=$.__PosthogExtensions__)!=null&&r.errorWrappingFunctions){var s=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=s(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){Mr.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Wn]),this.Jo=new _h(E({},(function(r){var s,i,n,o;return r===void 0&&(r={}),{refillRate:(s=(i=r.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:r.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(n=(o=r.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:r.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Mr})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=E({},e,t):(x(t)?this.Ko:t)&&(e=E({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Mr.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"exception-autocapture",(s=>{if(s)return Mr.error("failed to load script",s);t()}))}Qo(){var t,e,r;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(r=this.Go)==null||r.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({[Wn]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,r,s,i=(e=t==null||(r=t.$exception_list)==null||(r=r[0])==null?void 0:r.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Mr.info("Skipping exception capture because of client rate limiting.",{exception:i}):(s=this._instance.exceptions)==null||s.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,r;this.Xo=[],this.tl=new Mh([new Wh,new Xh,new qh,new zh,new Yh,new Jh,new Gh,new Zh],(function(s){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=Xa.test(h)?h.replace(Xa,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of n){var m=f(p,s);if(m){u.push(m);break}}if(u.length>=50)break}}}return(function(g){if(!g.length)return[];var _=Array.from(g);return _.reverse(),_.slice(0,50).map((w=>{return E({},w,{filename:w.filename||(b=_,b[b.length-1]||{}).filename,function:w.function||gr});var b}))})(u)}})("web:javascript",Bh,Hh)),this._instance=t,this.Xo=(e=(r=this._instance.persistence)==null?void 0:r.get_property(zn))!==null&&e!==void 0?e:[],this.el=Qs(this.il()),this.rl=new ep(this.el)}onConfigChange(){this.el=Qs(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,r,s;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(r=i.errorTracking)==null?void 0:r.suppressionRules)!==null&&e!==void 0?e:[],o=(s=i.errorTracking)==null?void 0:s.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[zn]:this.Xo,[qn]:o})}}}get nl(){var t,e=!!this._instance.get_property(qn),r=this._instance.config.error_tracking.captureExtensionExceptions;return(t=r??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var r=(function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce(((a,l)=>Qh.has(l)?(o.push(l),a):(a[l]=n[l],a)),{}),droppedKeys:o}})(this.sl(e)),s=r.sanitizedProperties,i=r.droppedKeys;i.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(E({[Zs]:t,[Xs]:new Date().toISOString()},s))}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 r=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,s=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;s&&(r.$release_id=s);try{var i=this._instance.capture("$exception",r,{_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:E({},t,{$exception_steps:e})}catch(r){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",r),t}}ll(t){this.el.enabled&&this.rl.add({[Zs]:t,[Xs]:new Date().toISOString()})}sl(t){return te(t)?E({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((r,s)=>{var i=s.type,n=s.value;return W(i)&&i.length>0&&r.$exception_types.push(i),W(n)&&n.length>0&&r.$exception_values.push(n),r}),{$exception_types:[],$exception_values:[]});return this.Xo.some((r=>{var s=r.values.map((i=>{var n=td[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 r.type==="OR"?s.some(Boolean):s.every(Boolean)}))}catch(r){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",r),!1}}ul(t){return t.flatMap((e=>{var r,s;return(r=(s=e.stacktrace)==null?void 0:s.frames)!==null&&r!==void 0?r:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,r,s,i,n=(e=(r=t[0].stacktrace)==null?void 0:r.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(s=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&s!==void 0&&s}return!1}al(t){return!D(t)&&L(t)}}},Ef=E({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var r,s;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Sn(this._instance))return!this.vl&&D((r=this.Mr)==null?void 0:r.props[Wr])||Ps.info("product tours disabled; stopping and clearing cached tours"),(s=this.vl)==null||s.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&Sn(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"product-tours",(s=>{s?Ps.error("Could not load product tours script",s):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 r=this.Mr;if(r){var s=r.props[Wr];if(L(s)&&!e)return this.cl=s,void t(s,{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(Sn(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||Ps.warn(o):Ps.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,r&&r.register({[Wr]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){D(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(Wr)}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)}}},$i),Sf={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 r=this.globalsForEvent(e);this.gl.push(r),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,r,s,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:E({},Ic(t,hf),{properties:E({},t.properties,f?{$set:E({},(e=(r=t.properties)==null?void 0:r.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:E({},(s=(i=t.properties)==null?void 0:i.$set_once)!==null&&s!==void 0?s:{},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,r=(e=t.tagName)==null?void 0:e.toLowerCase();return r==="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):r==="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,r,s,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=C?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(g,_,w)=>{if(g!=null&&g[_]){var b=g[_];g[_]=w(b),c.push((()=>{g[_]=b}))}},f=g=>{if(h.has(g))return g;var _=d.bl(g);return _&&h.add(_),_},m=g=>g.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(g=>function(_){var w=f(_);return w?g.call(this,w):_})),p(u,"insertBefore",(g=>function(_,w){var b=f(_);return b?g.call(this,b,w):_})),p(u,"replaceChild",(g=>function(_,w){var b=f(_);return b?g.call(this,b,w):w})),[(e=l.Element)==null?void 0:e.prototype,(r=l.Document)==null?void 0:r.prototype,(s=l.DocumentFragment)==null?void 0:s.prototype].forEach((g=>{p(g,"append",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"prepend",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))}))})),[(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((g=>{p(g,"before",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"after",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"replaceWith",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];var F=m(b);return b.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(g=>function(_,w){var b=f(w);return b?g.call(this,_,b):null})),this.wl=()=>{c.forEach((g=>g())),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 r=this._l();try{var s=t(r);return e&&r(),s}catch(i){throw r(),i}}setupSiteApp(t){var e=this.apps[t.id],r=()=>{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))},s=!1,i=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),s&&r()};try{var n=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),i(a)}})),!1).processEvent;n&&(e.processEvent=n),s=!0}catch(o){Ze.error(Ml+t.id,o),i(!1)}if(s&&e.loaded)try{r()}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 r of t)this.setupSiteApp(r)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var r=this.globalsForEvent(t),s=function(n){try{e.xl((()=>n.processEvent==null?void 0:n.processEvent(r)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))s(i)}}onRemoteConfig(t){var e,r,s,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((r=this.yl)==null||r.call(this),t.ok){var n=t.config;if((s=n.siteApps)!=null&&s.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 Ze.error(Ml+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.')}}}},xf={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,r,s=this.Il();s?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(r=$.__PosthogExtensions__)==null||(r=r.tracingHeadersPatchFns)==null?void 0:r._patchFetch(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"tracing-headers",(s=>{if(s)return uf.error("failed to load script",s);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()}}},kf=E({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return q.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(D(e))return q.warn("Flags not loaded yet. Not loading surveys.");var r=L(e);this.Rl=r?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],r=0;rlocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ll);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())q.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var r=t.generateSurveys;if(r)return void this.Dl(r,e);var s=t.loadExternalDependency;if(!s)return void this.$l(qo);s(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 q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new gf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var r,s=this._instance.get_property(Jn);if(s&&!e)return t(s,{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=>{r=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?q.error(a):i.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(r==null||r({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)&&(sd(p)||(function(f){var m;return!((m=f.conditions)==null||(m=m.actions)==null||(m=m.values)==null||!m.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(n=this._instance.persistence)==null||n.register({[Jn]:c,[ti]:Date.now()});var h={isLoaded:!0};t(c,h),r?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ti);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var r,s={id:t,current_iteration:(r=e?.iteration)!==null&&r!==void 0?r:null};nd(s);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(r){q.error("Error in survey callback",r)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!D(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);q.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((r=>{var s;e=(s=r.find((i=>i.id===t)))!==null&&s!==void 0?s:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:As};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(D(this._surveyManager))return{eligible:!1,reason:As};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(D(this._surveyManager))return q.warn("init was not called"),{visible:!1,disabledReason:As};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return D(this._surveyManager)?(q.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:As})):new Promise((r=>{this.getSurveys((s=>{var i,n=(i=s.find((a=>a.id===t)))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);r({visible:o.eligible,disabledReason:o.reason})}else r({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,r){var s;if(D(this._surveyManager))q.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(Yp.includes(i.type)){var n=C?.querySelector(e);if(n)return(s=i.appearance)!=null&&s.surveyPopupDelaySeconds?(q.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.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,r),q.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,r);q.warn("Survey element not found")}else q.warn("Surveys of type "+i.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var r;if(D(this._surveyManager))q.warn("init was not called");else{var s=this.Hl(t);if(s){var i=s;if((r=s.appearance)!=null&&r.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=E({},s,{appearance:E({},s.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==no.Popover&&e.initialResponses&&q.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(s);if(!n.eligible)return void q.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==no.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else q.warn("Survey not found")}}cancelPendingSurvey(t){D(this._surveyManager)?q.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},$i),If={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,r){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),r===void 0&&(r=void 0),ro(this.instance.config)||!v||!C)return!1;t=t??v.location,r=r??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var s,i=mf||ci(t.hash,"__posthog")||ci(t.hash,"state"),n=i?el((()=>JSON.parse(atob(decodeURIComponent(i)))))||el((()=>JSON.parse(decodeURIComponent(i)))):null;return n&&n.action==="ph_authorize"?((s=n).source="url",s&&Object.keys(s).length>0&&(n.desiredHash?t.hash=n.desiredHash:r?r.replaceState(r.state,"",t.pathname+t.search):t.hash="")):((s=JSON.parse(e.getItem(Ol)||"{}")).source="localstorage",delete s.userIntent),!(!s.token||this.instance.config.token!==s.token||(this.loadToolbar(s),0))}catch{return!1}}Zl(t){var e=$.ph_load_toolbar||$.ph_load_editor;!D(e)&&Se(e)?e(t,this.instance):Dl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(wu));if(!v||e)return!1;var r=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,s=E({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},r?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(E({},s,{source:void 0}))),this.Vl()===2)this.Zl(s);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 Dl.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(s)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(s)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,r){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),r===void 0&&(r=void 0),this.maybeLoadToolbar(t,e,r)}}},Cf=E({experiments:ye},$i),Ff={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;D(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||ro(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var r=t.loadExternalDependency;if(!r)return void this.eu(qo);r(this._instance,"conversations",(s=>{s||!t.initConversations?this.eu("Could not load conversations script",s):this.tu(t.initConversations),this.Kl=!1}))}catch(s){this.eu("Error initializing conversations",s),this.Kl=!1}}else Ue.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,Ue.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else Ue.error("Cannot complete initialization: remote config is null")}eu(t,e){Ue.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():Ue.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":ro(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?D(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,r){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.sendMessage(t,e,r):(Ue.warn(Dt),null)}))()}getMessages(t,e){var r=this;return X((function*(){return r._conversationsManager?r._conversationsManager.getMessages(t,e):(Ue.warn(Dt),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Dt),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Dt),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Dt),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Dt),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Dt),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()}}},Pf={logs:class{constructor(t){var e,r=this;this.iu=!1,this.ru=!1,this.rt=re("[logs]"),this.nu=E({},this.rt,{error(){for(var s=arguments.length,i=new Array(s),n=0;s>n;n++)i[n]=arguments[n];i.some(Vl)||r.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var s,i;this.Sa=0,(s=this.ou)==null||s.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ie(v,"online",this.au)}uu(t,e,r,s){var i,n=(function(o,a){var l,u,c,d,h,p,f,m=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,g=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=x(_)?Math.max(g,2048):Math.max(g,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:m,maxBufferSize:g,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:m,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,r);return[new Rh(this.hu(t,e),n,this.nu,(()=>this.du()),(o=>o()),void 0,s),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var r;(r=this.ou)==null||r.reset(),this.cu=e;var s=this.uu((()=>this.tr),(i=>{this.tr=i}));this.ou=s[0],this.fu=s[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 r;(r=this.lu)==null||r.reset(),this.gu=e;var s=this.uu((()=>this.su),(i=>{this.su=i}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},ql);this.lu=s[0],this.mu=s[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var r=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(r)&&r&&(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){Vl(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(r=>{var s;r||(s=t.logs)==null||!s.initializeLogs?this.rt.error("Could not load logs script",r):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(qo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var r=this._instance;return{get isDisabled(){return!1},get optedOut(){return!r.is_capturing()},getPersistedProperty:s=>s===ut.LogsQueue?t():void 0,setPersistedProperty(s,i){var n;s===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:s=>this.Ot(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Ru(this.Sa,3))e({kind:"fatal",error:kn(void 0,"logs endpoint is unreachable, dropping batch")});else{var r=!1,s=n=>{r||(r=!0,clearTimeout(i),e(n))},i=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),s({kind:"retry-later",error:kn(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)s({kind:"ok"});else if(o===413)s({kind:"too-large"});else if(o!==0&&o!==429&&500>o)s({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"),s({kind:"retry-later",error:kn(n.error,"logs request failed before receiving an HTTP response")})):s({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=Tu(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,ql,(e=>{this.su=e}))}xu(t,e,r,s,i){if(e.length!==0){var n=e.map((a=>a.record));i([]);var o=su(n,ru(r,Y.LIB_NAME,Y.LIB_VERSION),s,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 r=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),s=r.windowId,i=r.sessionStartTimestamp,n=r.lastActivityTimestamp;e.sessionId=r.sessionId,e.windowId=s,D(i)||(e.sessionStartTimestamp=i),D(n)||(e.lastActivityTimestamp=n)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Ct($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Af={metrics:class{constructor(t){this.rt=re("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,r=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===r||((e=this.ou)==null||e.reset(),this.cu=r,this.ou=new Th(this.hu(),(function(s){var i,n,o,a,l,u=s?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:s?.serviceName,serviceVersion:(n=u?.["service.version"])!==null&&n!==void 0?n:s?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:s?.environment,resourceAttributes:u,beforeSend:s?.beforeSend,flushIntervalMs:(a=s?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=s?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(r),this.rt)),this.ou}count(t,e,r){e===void 0&&(e=1),this.vu().count(t,e,r)}gauge(t,e,r){this.vu().gauge(t,e,r)}histogram(t,e,r){this.vu().histogram(t,e,r)}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((r=>this.rt.error("PostHog metrics flush failed:",r)))}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:r=>e.Jt(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((r=>{var s=!1,i=o=>{s||(s=!0,clearTimeout(n),r(o))},n=setTimeout((()=>i({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(E({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},$f=E({},$i,yf,wf,bf,Ef,Sf,kf,xf,If,Cf,Ff,Pf,Af);Te.__defaultExtensionClasses=E({},$f);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Yr[or]=new Te;return(function(){function e(){e.done||(e.done=!0,ad=!1,Z(Yr,(function(r){r._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const cd="CodeFile",ud="GeneratedCode",Rf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function fo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Tf(t={},e=0){const r=fo(t.artifactType||t.type||cd),s=fo(t.artifactName||t.name||t.fileName||`${ud}-${e+1}`);return`${r||"artifact"}-${s||e+1}`}function dd(t={},e=0){const r=kt(t),s=r.artifactType||r.type||cd,i=r.artifactName||r.name||ud;let n=r.fileName||i;return n.endsWith(".dart")||(n+=".dart"),{id:fo(r.id)||Tf({...r,artifactType:s,artifactName:i,fileName:n},e),artifactType:s,artifactName:i,fileName:n,deployPath:r.deployPath||"",description:r.description||"",code:r.code||r.content||"",dependencies:hd(r.dependencies),imports:Array.isArray(r.imports)?r.imports:[],publicApi:Array.isArray(r.publicApi)?r.publicApi:[],relationships:pd(r.relationships),deployStatus:r.deployStatus||"pending",review:r.review||null,metadata:kt(r.metadata),codeType:r.codeType||Rf[s]||"O"}}function hd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const r=kt(e),s=r.name||r.package;return s?{name:s,version:r.version||null,versionRequired:!!(r.versionRequired||r.required),inferred:!!r.inferred,...r.reason?{reason:r.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,r])=>({name:e,version:r||null,inferred:!1})):[]}function pd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const r=kt(e);return!r.from&&!r.to?null:{from:r.from||null,to:r.to||null,type:r.type||"uses",description:r.description||""}}).filter(Boolean):[]}function go(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const r=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!r)return null;try{return JSON.parse(r[1].trim())}catch{return null}}}function os(t,e={}){const r=[],s=typeof t=="string"?go(t):t,n=kt(s||{});!s&&typeof t=="string"&&r.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?.artifactType&&!d?.type&&r.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)=>dd(d,h)),l=new Map(o.map((d,h)=>[kt(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=pd(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:hd(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...r,...Array.isArray(n.warnings)?n.warnings:[]],metadata:kt(n.metadata)}}function fi(t){return os(t).artifacts[0]||dd()}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 yr(t){return JSON.stringify(t,null,2)}function Nf(t){return yr({task:"architect",userRequest:String(t??"")})}function Mf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?yr(e):yr({task:"generate_bundle",bundleSpec:e})}function Lf(t){return yr({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 Qo(t,e=null){const r={stage:t};return e!=null&&(r.bundle=yt(e)),r}function Of({bundleSpec:t,artifactBundle:e,bundleReview:r,artifactId:s,userFeedback:i}){return yr({task:"regenerate_artifact",artifactId:s,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(r),userFeedback:String(i)})}function fd({bundleSpec:t,artifactBundle:e,bundleReview:r,userFeedback:s}){return yr({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(r),userFeedback:String(s??"")})}const Gl={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"},Df=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Bf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function gd(t,e=0){if(!Le(t)||e>3)return null;if(Bf(t))return t;for(const r of Df){const s=t[r];if(Le(s)){const i=gd(s,e+1);if(i)return i}}return null}function gi(t){return Array.isArray(t)?t.some(gi):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(gi):!1}function mo(t){return Array.isArray(t)?t.some(mo):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(mo):!1}function md(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function jf(t,e){if(Le(t))for(const[r,s]of Object.entries(t)){if(!Le(s))continue;const i=Le(s.categories)?s.categories:{},n=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):s.matched===!0&&e.add(md(r))}}function Uf(t,e){if(!t)return;const r=Array.isArray(t)?t.flatMap(s=>Le(s)?Object.entries(s):[]):Object.entries(t);for(const[s,i]of r){if(!gi(i))continue;const n=md(s),o=i?.raiFilterResult?.raiFilterTypeResults||(n==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>gi(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(n)}}function Hf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(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 Wf(t){const e=gd(t);if(!e)return null;const r=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);jf(e.filterSummary,r),Uf(e.filterResults,r);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||r.size>0,i=e.invocationResult||null,n=mo(e.filterSummary||e.filterResults);return!s&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:s?"blocked":"unavailable",invocationResult:i,matchedFilters:[...r]}}function zf(t,e){const r=Wf(t);if(!r)return null;const s=[...new Set(r.matchedFilters.map(Hf))],i=r.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Kl(s)}.`:"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 ${Kl(s)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",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=r.matchedFilters,n}function qf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,r=[];for(const s of qf(t).split(` +`)){if(!/^[A-Za-z_$]/.test(s)||e.test(s))continue;const i=s.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&r.push(i[1])}return r}function ea(t,e){const r=t.replace(/\.dart$/,"");if(e==="W")return r.replace(/(^|_)(\w)/g,(s,i,n)=>n.toUpperCase());if(e==="A"){const s=r.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return s.charAt(0).toLowerCase()+s.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:r}async function Yl(t){const e=new TextEncoder().encode(String(t||"")),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(r),s=>s.toString(16).padStart(2,"0")).join("")}async function Vf(t,e=new Map){const r={},s=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=ea(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Yl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Yl(c)),r[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>s.add(p))}}const i=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(s).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(r),functionsMapContents:JSON.stringify(n)}}const Gf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Kf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Jf=["Struct","Record"],Yf=[{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=>In(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=>In(t).some(e=>{const r=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let s;for(;(s=r.exec(e))!==null;){const i=s[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 { + const _P({required this.t}); + final double t; +} +class W extends StatefulWidget { + const W({this.value = 1.0}); + final double value; +}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>In(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { + const W({this.textStyle}); + final TextStyle? textStyle; + @override _S createState() => _S(); +} +class _S extends State { @override Widget build(BuildContext c) => const SizedBox(); }`,neg:`class W extends StatefulWidget { + const W({this.width}); + final double? width; + @override _S createState() => _S(); +} +class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function Qe(t,e,r){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:r}}function as(t){let e="",r=0;for(;r"&&(r--,r===0))return{inner:t.slice(e+1,s),end:s+1};return null}function Xf(t,e){const r=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!r)return null;let s=0;for(let i=r.index+r[0].length-1;iQf(t).usable);function tg(t=""){const e=as(t);return eg.filter(r=>r.detect(e)).map(({id:r,severity:s,message:i})=>({id:r,severity:s,message:i}))}function rg(t){const e=[],r=t.matchAll(/\bFuture\b/g);for(const s of r){let i=s.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=Zf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iXl(o.functionName)===s);if(i)return i;const n=o=>!o.functionName.startsWith("_");return r.find(n)||r[0]}function Ri(t=""){return Array.from(as(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function sg(t="",e=""){return ta(t,e)?.returnType||null}function Ql(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 ig(t,e){const r=Ri(e);if(r.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(r.some(l=>Ql(l)===i)||r.length>1)return null;const[o]=r,a=`${Ql(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 ra(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function ng(t,e,r=""){const s=ta(e,r)?.functionName;if(!s)return null;const i=String(t||"").split("/").pop(),n=ea(i,"A");if(n===s)return null;const o=`${ra(s)}.dart`;return`File name "${i}" does not match Action "${s}". 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 og(t="",e=""){return ta(t,e)!==null}function ag(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(s=>Kf.has(s)?!1:!Jf.some(n=>s.endsWith(n))||e.has(s))}function lg(t,{functionName:e="",declaredTypes:r=new Set}={}){const s=sg(t,e),i=ag(s,r);if(i.length===0)return null;const[n]=i;let o;return r.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:s===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function cg(t,e={}){const r=[],s=t.fileName||"",i=t.code||"";if(Gf.has(t.artifactType)||r.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),s.endsWith(".dart")||r.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return r.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),r;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||r.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of tg(i))r.push(Qe(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!og(i,t.artifactName)&&r.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(Ri(i)),o=lg(i,{functionName:t.artifactName,declaredTypes:n});o&&r.push(Qe(t,"error",o));const a=ng(s,i,t.artifactName);a&&r.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&r.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=ig(s,i);n&&r.push(Qe(t,"info",n))}return r}function ug(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],r=new Set(e.flatMap(n=>Ri(n.code||""))),s=e.flatMap(n=>cg(n,{declaredTypes:r})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Zl[n.artifactType]||Zl.CodeFile}));return{valid:s.every(n=>n.severity!=="error"),findings:s,deployHints:i}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function dg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const hg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function pg(t="",e=""){const r=dg(t),s=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),i=r.split(` +`).filter(n=>{const o=tc(n);return o===null||!s.has(o)?!0:!hg.test(n)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const fg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function vd(t){let e="",r=0;for(;r{const s=r.name||r.package;if(!s||s==="flutter")return e;const i=r.versionRequired||r.required;return e[s]=i&&r.version||"",e},{})}function yg(t){const e=new Map,r=new Map,s=[];for(const i of t)e.has(i.fileName)?s.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),r.has(i.path)?s.push(`Duplicate deploy path "${i.path}" for artifacts "${r.get(i.path)}" and "${i.artifactId}".`):r.set(i.path,i.artifactId);return s}function wg(t,e={}){const r=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||r.map(p=>p.id)).map(p=>r.find(f=>f.id===p)).filter(Boolean),n=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=_g(p),m=p.fixedCode||p.code||"",g=p.codeType||mg[p.artifactType]||Ne.OTHER;m.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:m,type:g,path:p.deployPath||vg(f,g),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Ne.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:g})=>g.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:g})=>`// ${g.artifactId} +${g.content}`).join(` + +`)},m=new Set(l.slice(1).map(({index:g})=>g));o=o.filter((g,_)=>!m.has(_)),o[p.index]=f}const u={...rc(t?.dependencies),...i.reduce((p,f)=>({...p,...rc(f.dependencies)}),{})},c={};i.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=yg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:n,errors:h}}function bg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Eg(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 Sg(t,e){const s=[Eg(t),bg(e.content),e.artifactName].find(i=>/^[A-Z][A-Za-z0-9_]*$/.test(String(i||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function xg(t,e=new Map){const r=[];for(const[s,i]of t.entries())i.type!=="C"||e.has(i.path)||r.push({artifactId:i.artifactId||s,className:Sg(s,i),content:i.content,fileName:s,path:i.path});return r}function kg(t,e){const r=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!r.has(s.path)))}const sc={pass:0,warning:1,fail:2},Ig=["manualActions"];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 r=e.filter(s=>typeof s=="string").join(` +`);if(r)return r}}return""}function tt(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 r=Number(e);if(Number.isFinite(r))return r;const s=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return s?Number(s[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 ia(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 vo(...t){return t.filter(Boolean).reduce((e,r)=>sc[r]>sc[e]?r:e,"pass")}function _d(t,e="warning",r="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:r};const s=De(t),i=gt(s.message,s.title,s.issue,s.description,s.summary);return i?{severity:ia(s.severity||s.status||s.level)||e,message:i,suggestion:gt(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||r}:null}function _o(t,e="review"){const r=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>tt(r[i]).map(o=>_d(o,n,e)).filter(Boolean))}function Fg(t,e,r=null){if(typeof t=="string")return{id:`${r||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:r,source:"Code Review"};const s=De(t),i=gt(s.title,s.action,s.step,s.message,s.name,s.description);return i?{id:s.id||`${r||"bundle"}-manual-${e+1}`,title:i,detail:gt(s.detail,s.instructions,s.description),location:gt(s.location,s.flutterFlowPath,s.path),timing:gt(s.timing,s.phase)||"unspecified",artifactId:r,source:gt(s.source)||"Code Review"}:null}function yo(t,e=null){const r=De(t);return Ig.flatMap(s=>tt(r[s])).map((s,i)=>Fg(s,i,e)).filter(Boolean)}function Pg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const r=De(e);typeof r.content=="string"&&(e=go(r.content)||e);const s=De(e),i=De(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(i).length?i:s}}function Ag(t,e){const r=[e.id,e.fileName,e.artifactName].map(We);return t.find(s=>{const i=De(s);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(n=>n&&r.includes(n))})||null}function $g(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function Rg(t,e){return tt(t?.relationships).filter(r=>We(r?.from)===We(e.id)||We(r?.to)===We(e.id))}function Tg(t,e){return tt(t?.metadata?.compatibility?.findings).filter(r=>!r?.artifactId||We(r.artifactId)===We(e.id)).map(r=>_d(r,"warning","Compatibility check")).filter(Boolean)}function Ng(t,e,r,s){const i=Ag(e,r),n=De(i?.review||i||r.review),o=Object.keys(n).length>0,a=[..._o(n),...Tg(t,r)],l=yo(n,r.id),u=ia(n.status||n.verdict||n.outcome||n.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...r,index:s,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,fixedSource:typeof n.fixedSource=="string"&&n.fixedSource.trim()?n.fixedSource.trim():null,pathHint:$g(t,r),relationships:Rg(t,r)}}function Mg({status:t,score:e,artifactPresentations:r,manualSteps:s}){const i=r.length;if(i===0&&s.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const n=r.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.`),s.length&&o.push(`Do before deploy: ${s.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function Lg({bundle:t,reviewResult:e}){const r=De(t),s=tt(r.artifacts),{root:i,rawText:n}=Pg(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(b=>Object.keys(b).length)||{},a=tt(i.artifacts||i.files||i.reviews),l=s.map((b,I)=>Ng(r,a,b,I)),u=_o(i),d=[..._o(o),...u],h=[...yo(o),...yo(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,F)=>F.findIndex(P=>P.title===b.title&&P.artifactId===b.artifactId)===I),p=ia(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=vo(p,...d.map(b=>b.severity),...l.map(b=>b.status)),m=o.score??i.score??i.overallScore??n,g=Cg(m),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n)||Mg({status:f,score:g,artifactPresentations:l,manualSteps:h}),w=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:r.title||"Generated artifact bundle",description:r.description||"",status:f,score:g,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:tt(r.deployOrder),relationships:tt(r.relationships),warnings:tt(r.warnings),compatibility:De(r.metadata?.compatibility)}}const Og=/^\uFEFF/;function Or(t){let e=0,r=t.length;for(;ee&&!t[r-1].trim();)r--;return t.slice(e,r).join(` +`)}function Dg(t){const e=String(t??"").replace(Og,"");if(!e.trim())return"";const r=e.split(` +`),s=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,n=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,n<0&&(n=d),o.push(c+h)),c+=r[d].length+1}}if(i===0)return Or(r);{const c=wo(e);if(!c.error&&o.every(h=>nc(h,c.commentAndStringRanges)))return Or(r)}if(i===1){const c=Or(r.slice(0,n)),d=Or(r.slice(n+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` + +`)}function Bg(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function yd(t){const e=Bg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),r=>r[1])}function wd(t){return`${ra(t)}.dart`}function jg(t){return ea(t,"W")}const ic={"(":")","[":"]","{":"}"},Ug={")":"(","]":"[","}":"{"},Hg=/[A-Za-z0-9_]/;function wo(t){const e=[{kind:"code",opener:null,openedLine:0}],r=[];let s=1,i=0;const n=(c,d)=>{(c===` +`||c==="\r"&&d!==` +`)&&s++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&r.push({start:c.startIndex,end:t.length})};for(;i0?t[i-1]:"",f=i>1?t[i-2]:"",m=(p==="r"||p==="R")&&!Hg.test(f);e.push({kind:"string",quote:c,triple:h,raw:m,startIndex:i,openedLine:s}),i+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:s}),i++;continue}if(Ug[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${s}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:r}):(a(),{error:o??`line ${s}: unexpected "${c}" with no matching opener`,commentAndStringRanges:r})}n(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:r}}function Wg(t){return wo(String(t??"")).error}function nc(t,e){return e.some(({start:r,end:s})=>t>=r&&ttypeof r=="string"?r:r?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const zg=/^dependencies\s*:\s*(?:#.*)?$/,qg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Ti(t){const e=t.match(qg);return e?e[1]??e[2]??e[3]:null}function ps(t){const e=t.trim();return e===""||e.startsWith("#")}function xr(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function na(t,e){const r=t.findIndex(n=>e.test(n));if(r===-1)return null;let s=r,i=null;for(let n=r+1;n=0.0.0"}`}function Jg(t,e={}){const r=String(t||""),s=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(s.length===0)return{yaml:r,added:[],alreadyPresent:[]};const i=r.split(` +`),n=new Set(Sd(r)),o=[],a=[];for(const[u,c]of s)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:r,added:[],alreadyPresent:a};const l=oa(i);if(l){const u=o.map(([c,d])=>oc(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(oc(" ",u,c))});return{yaml:i.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Yg(t,e={}){const r=String(t||""),s=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(s.length===0)return{yaml:r,overridden:[],skipped:[]};const i=r.split(` +`),n=Mi(r),o=[],a=[];for(const[l,u]of s){const c=n.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(xr(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` +`),overridden:o,skipped:a}}function Id(t){const e=String(t||""),r=[];return e.trim()?(/^name:\s*\S+/m.test(e)||r.push("pubspec.yaml missing name field"),oa(e.split(` +`))||r.push("pubspec.yaml missing dependencies section"),Sd(e).includes("flutter")||r.push("pubspec.yaml missing Flutter SDK dependency"),{valid:r.length===0,errors:r}):(r.push("pubspec.yaml is empty"),{valid:!1,errors:r})}const Zg=">=3.0.0 <4.0.0";function bo(t){const e=String(t||"").trim(),r=e[0];return r!=="'"&&r!=='"'||e[e.length-1]!==r?e:e.slice(1,-1).replaceAll(`${r}${r}`,r)}function Xg(t=""){const e=gg(t).filter(r=>!r.startsWith("dart:")&&!r.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function ac(t,e,r){const s=[];for(const[i,n]of t){if(n.isScalar){e[i]=bo(n.constraint);continue}if(n.sourceKey==="sdk"){r.add(i);continue}if(n.sourceKey===null&&n.version){e[i]=bo(n.version);continue}s.push(i)}return s}function Qg(t){const e=new Set,r={},s={},i=ac(Mi(t),r,e);i.push(...ac(Gg(t,"dependency_overrides"),s,e));const n=new Set([...Object.keys(r),...e]),{sdk:o}=xd(t);return{sdkConstraint:bo(o)||Zg,dependencies:r,overrides:s,sdkPackages:[...e].sort(),availablePackages:n,unrepresentable:i}}function em(t,e,r){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${r.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function tm(t,e){const{sdkConstraint:r,dependencies:s,overrides:i,sdkPackages:n,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:r,dependencies:s,overrides:i,sdkPackages:n},u=[],c=[],d=a.map(h=>`Your project declares ${h} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${h}. Classes that do not import ${h} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const h of t){const{className:p,content:f}=h,m=sa(f),g=m.filter(b=>a.includes(b));if(g.length>0){c.push({className:p,reason:`${p} was not compiled before deploying: it imports ${g.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Xg(f),w=m.filter(b=>!o.has(b));if(_.length>0||w.length>0){c.push({className:p,reason:em(p,_,w)});continue}u.push({fileName:`${ra(p)}.dart`,content:f})}return{manifest:l,sources:u,skipped:c,approximate:d}}function lc(t,e){const r=`${t}${e}`.split(` +`),s=r.pop()??"",i=[];for(const n of r){const o=Cd(n);o&&i.push(o)}return{events:i,buffer:s}}function rm(t){const e=Cd(t);return e?[e]:[]}function Cd(t){const e=t.trim();if(!e)return null;try{const r=JSON.parse(e);return r&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}async function sm(t,e={}){const{onPhase:r,onLog:s}=e;let i=null,n="";const o=a=>{if(a.event==="phase"){a.message&&r&&r(a.message);return}if(a.event==="log"){a.message&&s&&s(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=lc(n,l.decode(c,{stream:!0}));n=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());n=a.buffer,a.events.forEach(o)}return rm(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 im=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(im);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function nm(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 r=0;r0)}function am(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(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:am(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const r={min:null,minInclusive:!1,max:null,maxInclusive:!1},s=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,n;for(;(n=s.exec(e))!==null;){const[,o,a]=n;if(!wt(a))return null;i=!0,o===">="||o===">"?(r.min=a,r.minInclusive=o===">="):(r.max=a,r.maxInclusive=o==="<=")}return i?r:null}function cc(t,e){const r=aa(t);if(!r||!wt(e))return!1;if(r.min!==null){const s=mi(e,r.min);if(s<0||s===0&&!r.minInclusive)return!1}if(r.max!==null){const s=mi(e,r.max);if(s>0||s===0&&!r.maxInclusive)return!1}return!0}function lm(t,e){const r=aa(t);if(!r||!wt(e))return!1;if(r.max===null)return!0;const s=mi(r.max,e);return s>0?!0:s===0&&r.maxInclusive}function ir(t){const e=aa(t);return e?e.min:null}const cm="https://pub.dev/api/packages/",um=8e3;function dm(t,e={}){const{dartSdkFloor:r=null,flutterSdkFloor:s=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let n=null;for(const o of i){const a=o?.version;if(!a||o.retracted||om(a))continue;const l=o.pubspec?.environment||{};r&&l.sdk&&!cc(l.sdk,r)||s&&l.flutter&&!cc(l.flutter,s)||(!n||mi(a,n)>0)&&(n=a)}return n?{version:n,constraint:`^${n}`}:null}async function hm(t,e={}){const{dartSdkFloor:r=null,flutterSdkFloor:s=null,fetchImpl:i=fetch}=e;let n;try{const a=await i(`${cm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(um)});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=dm(n,{dartSdkFloor:r,flutterSdkFloor:s});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:r?`no published "${t}" release supports Dart ${r}`:`no published "${t}" release could be read`}}async function pm(t,e={}){const r=await Promise.all(t.map(s=>hm(s,e)));return new Map(r.map(({name:s,...i})=>[s,i]))}async function fm(t,e={},r={}){const{resolveVersions:s=pm}=r,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),n=xd(t),o={dartSdkFloor:ir(n.sdk),flutterSdkFloor:ir(n.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Mi(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=ir(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(lm(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 s(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ir(p)){a.additions[d]=`^${ir(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ir(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const gm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>gm[e])}function B(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function mm(t,e={}){const r=t?.pipelineStep;if(r!=null&&e[r]!=null)return e[r];const s=t?.message||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function vm(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[r,s]of Object.entries(e))if(t.toLowerCase().includes(r.toLowerCase()))return s;return"📄"}function _m(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[r,s]of Object.entries(e))if(t.toLowerCase().includes(r.toLowerCase()))return s;return"📝"}function ym(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 wr(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,r=t.match(e);return r?r[1].trim():t.trim()}function uc(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 Fd(t,e="dart",r=globalThis.hljs){if(!t)return"";const s=wr(t);try{return r.highlight(s,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return r.highlight(s,{language:"json"}).value}catch{return bt(s)}}}function Li(t,e={}){const{highlighter:r=globalThis.hljs}=e;let s='
    ';const i=String(t??"").split(` +`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=ym(o),u=Fd(o.trim(),l,r);s+=`
    +
    ${u}
    +
    `,o="",n=!1}else n=!0;continue}if(n){o+=a+` +`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();s+=`
    +

    + ${vm(l)} + ${bt(l)} +

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

    + ${_m(l)} + ${bt(l)} +

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

    ${uc(a)}

    `)}return s+="
    ",` +
    +
    +
    + Live Audit Report +
    + ${s} +
    + `}const wm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Pd={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},vi="ccc_auth_session",dc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function br(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=br({isResolved:!0});const bm=`${Je}/service/runpipeline`,Em="bs_user_id",Sm="bs_identity_token",xm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const _i={free:2,professional:50,power:2e3},yi="ccc_subscription",hc=3,km=new Set(["active","trialing","paid"]),ls="google/gemini-3.7-flash",js=["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"],Im={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function zt(t){return Im[t]||t}const Cm=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Ad(t){return Cm.has(t)}const Eo=4,Cn=8*1024*1024,Fm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Pm(t){return new Promise(e=>{const r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>e(null),r.readAsDataURL(t)})}async function Am(t){const e=new FormData;return e.append("file",t),(await fetch(Fm,{method:"POST",body:e})).json()}function $m(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const r of Object.keys(e)){if(r==="item"||r==="index")continue;const s=e[r];if(s&&typeof s=="object"){if(typeof s.file=="string")return s.file;if(typeof s.url=="string")return s.url}if(typeof s=="string")return s}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function Rm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const r=e.filter(l=>l.size>Cn);r.length&&ue(`Skipped ${r.length} image(s) over the ${(Cn/1024/1024).toFixed(0)} MB limit.`,"warning");const s=e.filter(l=>l.size<=Cn);if(!s.length){t.target.value="";return}const i=Eo-Pt.length,o=s.slice(0,i).map(async l=>{const u=await Pm(l);if(!u)return null;let c="";try{c=$m(await Am(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Ad(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),s.length>i&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Tm(t){Pt.splice(t,1),la()}function la(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((r,s)=>{const i=document.createElement("div");i.className="prompt-img-thumb",i.innerHTML=`Prompt image`,t.appendChild(i)}),e&&(e.textContent=Pt.length>=Eo?"Image limit reached":"Add images"))}function $d(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),r=Ad(e?.value);t.classList.toggle("hidden",!r),!r&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Rd="google/gemini-3.7-flash",Td="google/gemini-3.7-flash",Fn="google/gemini-3.7-flash",pc={professional:11,power:49},So={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"},Us={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 Hs={...Us};async function Nm(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const r=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!r.ok)return;const s=await r.json();if(s.result!=="success"||!s.rates)return;const i=s.rates,n={AUD:1},o=new Set([...Object.keys(Us),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:Us[a]&&(n[a]=Us[a]));Hs=n}catch{}finally{clearTimeout(e)}}const xo={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Nd(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&xo[n])return xo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),r=So[e];if(r)return r;const s=e.split("_")[0],i=So[s];return i||"USD"}function fc(t,e){const r=Hs[e]??Hs.USD,s=t*r,i=Math.round(s*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*Hs.USD)}}const rt="ccc_api_key_",_t="ccc_session_api_key_",nt="ccc_encryption_key",cs="ccc_encryption_key_scope",Mm="ccc_keystore",wi="keys",us="ccc_encryption_key_version";let ko=null,bi=null,ds=!1,Ei=!1,gc=!1;class Si extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function mc(){if(gc)return;gc=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&ue(t,"warning")}function Md(){return localStorage.getItem(us)||""}function Io(){return crypto.randomUUID?.()||Od(crypto.getRandomValues(new Uint8Array(16)))}function Lm(){const t=Md();if(t)return t;const e=Io();return localStorage.setItem(us,e),e}function Er(){ko=null,bi=null,ds=!1,Ei=!1}window.addEventListener("storage",t=>{t.key===us&&Er()});function Om(){return new Promise((t,e)=>{const r=indexedDB.open(Mm,1);r.onupgradeneeded=()=>{const s=r.result;s.objectStoreNames.contains(wi)||s.createObjectStore(wi)},r.onsuccess=()=>t(r.result),r.onerror=()=>e(r.error)})}async function ca(t,e){const r=await Om();return new Promise((s,i)=>{const n=r.transaction(wi,t);let o;try{o=e(n.objectStore(wi))}catch(l){r.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),n.oncomplete=()=>{r.close(),s(a)},n.onerror=()=>{r.close(),i(n.error||new Error("Encryption key transaction failed."))},n.onabort=()=>{r.close(),i(n.error||new Error("Encryption key transaction aborted."))}})}function Dm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Bm(){const t=await ca("readonly",e=>e.get(nt));return Dm(t)?t:null}async function Ld(t){await ca("readwrite",e=>e.put(t,nt))}async function jm(){Er();try{await ca("readwrite",t=>t.delete(nt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Um(){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 Ld(e),sessionStorage.removeItem(nt),sessionStorage.removeItem(cs),localStorage.removeItem(rt+"salt"),e}async function vc(t){const e=sessionStorage.getItem(nt);if(e)return Ei=sessionStorage.getItem(cs)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Si;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.exportKey("jwk",r);return sessionStorage.setItem(nt,JSON.stringify(s)),sessionStorage.setItem(cs,"session"),Ei=!1,crypto.subtle.importKey("jwk",s,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Hm(t){if(sessionStorage.getItem(cs)==="session"&&sessionStorage.getItem(nt))return mc(),ds=!0,vc(t);try{const e=await Bm();if(e)return e;const r=await Um();if(r)return r;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Ld(s),s}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),mc(),ds=!0,vc(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,r=Lm();bi!==r&&Er();const s=ko||Hm(e);ko=s,bi=r;try{return await s}catch(i){throw Er(),i}}async function Wm(t){const e=await ua(),r=bi,s=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,s.encode(t)),o=new Uint8Array(i.length+n.byteLength);return o.set(i),o.set(new Uint8Array(n),i.length),{ciphertext:Od(o),keyVersion:r,sessionFallback:ds}}async function zm(t,e={}){const{isSessionCredential:r=!1}=e;try{const s=await ua({allowSessionFallbackCreation:!1});if(ds&&!r&&!Ei)throw new Si;const i=qm(t),n=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},s,o);return new TextDecoder().decode(a)}catch(s){if(s instanceof Si)throw s;return console.error("Decryption failed:",s),null}}function Od(t){const e=new Uint8Array(t);let r="";for(let s=0;s0}let hs="",xi="",Zr=null,yc=0;async function da(){sessionStorage.getItem(nt)&&await ua(),hs=await Ee("flutterflow"),xi=await Ee("flutterflow_project_id"),Ym(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),hs&&Ud(hs)}function Dd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const r=document.getElementById("walkthrough-modal");r&&(pa(),r.classList.add("open"))}let Et=1;function Bd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Oi(){const t=Bd();t.length&&t.forEach((e,r)=>{const s=r+1;if(s===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=s)}else if(s0&&Et<=t&&(Et++,Oi())}function Gm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Oi(),t.classList.add("open"))}function Km(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const r=document.getElementById("walkthrough-dont-show");r&&r.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function jd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Oi(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");hs?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Jm()}function Jm(){wc("flutterflow","flutterflow-key-status"),wc("flutterflow_project_id","flutterflow-project-status")}function wc(t,e){const r=document.getElementById(e);if(!r)return;const s=r.querySelector(".key-status-dot"),i=r.querySelector("span");ar(t)?(s.className="key-status-dot configured",i.className="text-green-600",i.textContent="User key configured"):(s.className="key-status-dot missing",i.className="text-gray-500",i.textContent="Not configured")}function Zt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),r=document.getElementById("btn-run-pipeline");r&&r.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Ym(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),r=["flutterflow"];e.forEach((s,i)=>{const n=r[i];n==="flutterflow"?ar("flutterflow")&&ar("flutterflow_project_id")?(s.className="key-status-dot configured",s.title="FlutterFlow (Fully configured)"):ar("flutterflow")||ar("flutterflow_project_id")?(s.className="key-status-dot env",s.title="FlutterFlow (Partially configured)"):(s.className="key-status-dot missing",s.title="FlutterFlow (Not configured)"):ar(n)?(s.className="key-status-dot configured",s.title=n.charAt(0).toUpperCase()+n.slice(1)+" (User key)"):(s.className="key-status-dot missing",s.title=n.charAt(0).toUpperCase()+n.slice(1)+" (Not configured)")}),Zt()}async function Zm(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await _c("flutterflow",t.value);const r=e?.value.trim()||"";if(r){if(!Di(r)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await _c("flutterflow_project_id",r)}await da(),fa();const s=document.querySelector("#api-keys-modal .bg-blue-500"),i=s.textContent;s.textContent="Saved!",s.classList.remove("bg-blue-500","hover:bg-blue-600"),s.classList.add("bg-green-500"),setTimeout(()=>{s.textContent=i,s.classList.remove("bg-green-500"),s.classList.add("bg-blue-500","hover:bg-blue-600"),Dd()},1e3)}async function Xm(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(us,Io()),Er(),localStorage.removeItem(rt+"flutterflow"),localStorage.removeItem(rt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(nt),sessionStorage.removeItem(cs),localStorage.removeItem(rt+"salt"),await jm(),localStorage.setItem(us,Io()),localStorage.removeItem(rt+"flutterflow"),localStorage.removeItem(rt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await da();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),fa()}function Di(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Qm(t,e){const r=document.getElementById(t);r&&(r.value?e?r.style.borderColor="#22c55e":r.style.borderColor="#ef4444":r.style.borderColor="")}function ev(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const r=e.target.value.trim().length>0;Qm("flutterflow-api-key-input",r)}),t.addEventListener("blur",tv(async e=>{const r=e.target.value.trim();r&&await Ud(r)},500)))}function tv(t,e){let r;return function(...i){const n=()=>{clearTimeout(r),t(...i)};clearTimeout(r),r=setTimeout(n,e)}}async function Ud(t){const e=document.getElementById("flutterflow-projects-select"),r=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',r&&r.classList.add("hidden");try{const i=await new gs(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)}),xi&&(e.value=xi)}catch(s){console.error("Failed to fetch projects:",s),e.innerHTML='',r&&(r.textContent=`Failed to load projects: ${s.message}`,r.classList.remove("hidden"))}}function rv(t){const e=document.getElementById(t),s=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",s.innerHTML=` + + `):(e.type="password",s.innerHTML=` + + + `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function sv(){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 iv(){y.bundleSpec=os(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Bi(){const t=fi(y.bundleSpec);y.artifactBundle=os(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=ug(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(r=>r.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=fi(y.artifactBundle).id}function ji(){const t=os(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(s=>[s.id,s.review])),r=new Map(t.artifacts.filter(s=>{const i=s.review;return i&&typeof i.fixedSource=="string"&&i.fixedSource.trim()}).map(s=>[s.id,s.review.fixedSource.trim()]));y.bundleReview=os({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(s=>{const i=r.get(s.id)||null;return{...s,review:e.get(s.id)||s.review||y.step3Result||null,...i?{fixedCode:i}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Hd(){const t=ga();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ga(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(r=>r.id===y.selectedArtifactId)||fi(t)}function ma(){return ga().code||y.step2Result||""}async function nv(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Ws={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function ov(t,e){const r=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${r}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${r}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class gs{constructor(e,r,s="main",i=Ws.production){this.apiKey=e,this.baseUrl=i,this._projectId=r,this._branchName=s,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let r=null;for(const s of e)try{const i=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s)});if(!i.ok){const a=await i.text();r=new Error(`Export failed: ${i.status} - ${a}`);continue}const n=await i.json(),o=n?.value?.project_zip||n?.project_zip;if(!o){r=new Error("Export response did not include project source.");continue}return o}catch(i){r=i}throw r||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),r=await JSZip.loadAsync(e,{base64:!0}),s=Object.keys(r.files).filter(a=>!r.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!s)throw new Error("Export did not contain a pubspec.yaml.");const i=s.slice(0,s.length-12),n=new Map,o=Object.keys(r.files).filter(a=>{if(r.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 r.files[a].async("string"))})),{pubspecYaml:await r.files[s].async("string"),files:n}}async pushCodeWithRetry(e,r=3){const s=[Ws.production,Ws.staging],i=Math.max(0,s.indexOf(this._endpoint));for(let n=0;nsetTimeout(d,1e3*(n+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(n+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const s=JSON.parse(e.value);if(s&&Array.isArray(s.entries))return s.entries.map(i=>({id:i.id,name:i.project?.name||i.id}))}catch(s){console.error("Failed to parse stringified project value:",s)}const r=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(r)?r:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let r=0,s="";for(const i of e){const n=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(n.ok)return i!==e[0]&&console.log(`listProjects answered on legacy path ${i}`),this.parseProjectsResponse(await n.json());if(r=n.status,s=await n.text(),console.warn(`listProjects via ${i} returned ${r}: ${s}`),n.status===401||n.status===403)throw new Error(ov(n.status,s));if(n.status!==404)throw new Error(`List projects failed: ${n.status} - ${s}`)}throw new Error(`List projects failed: ${r} - ${s}`)}}async function va(t){const e=t.clone();let r;try{r=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=r.message||`HTTP ${t.status}`,n=new Map;if(r.errors)n=new Map(Object.entries(r.errors));else if(!r.message&&typeof r=="object"){const o=Object.keys(r).filter(a=>a.endsWith(".dart")&&Array.isArray(r[a]));o.length>0&&(n=new Map(Object.entries(r)),i=o.flatMap(l=>r[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:n}}let s={};if(r.value)try{s=typeof r.value=="string"?JSON.parse(r.value):r.value}catch(i){console.warn("Ignoring malformed push response value:",i)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(s))}}function _a(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"},Wd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,zd=/extends\s+State<\w+>/;function av(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 r=Wd.test(e),s=zd.test(e);if(r||s)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 qd(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 ya(t,e=new Map){return Vf(t,e)}const Co=new Map;function Vd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Ui(t){Co.delete(Vd(t))}async function wa(t,e,r,s,i=""){const n=xg(e,r);if(n.length===0)return{remoteFiles:r,syncFileMap:e,unverified:[],approximate:[]};const o=tm(n,i),a={...o.manifest,sources:o.sources},l=o.skipped.map(h=>h.reason);l.forEach(h=>console.warn(`[custom class deploy] ${h}`));const u=o.approximate;u.forEach(h=>console.warn(`[custom class deploy] ${h}`)),console.log(`Provisioning ${n.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const c=await fetch(wm,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:s,customClasses:n,verification:a,stream:!0})}),d=await sm(c,{onPhase:h=>be.setSubstatus(h),onLog:h=>console.log(`[custom class deploy] ${h}`)});if(!d.success){const h=d.details?` ${d.details}`:"";throw new Error(`${d.error||"FlutterFlow custom class provisioning failed."}${h}`)}return Ui(t),d.verificationSkipped&&(console.warn(`[custom class deploy] ${d.verificationSkipped}`),l.push(d.verificationSkipped)),{remoteFiles:r,syncFileMap:kg(e,n),unverified:l,approximate:u}}async function ba(t,e={}){const r=Vd(t);let s=Co.get(r);if(s===void 0){try{s=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=Id(s.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.`);Co.set(r,s)}const i=await fm(s.pubspecYaml,e),n=Yg(s.pubspecYaml,i.overrides),o=Jg(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:s.files}}function lv(t){const e=[],r=[];t.content.length>5e4&&r.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 s=t.content.split(` +`).length;s>500&&r.push(`Code has ${s} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&r.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&r.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&r.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);i&&i.length>3&&r.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`);const n=Wg(t.content);if(n&&e.push(`FlutterFlow cannot format this code - ${n}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=yd(t.content),a=jg(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${wd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:r}}function Gd(t,e={}){const{artifactType:r="CustomWidget",artifactName:s="GeneratedCode",fileName:i}=e,n=Dg(t);let o=i||s;if(r==="CustomFunction")o="custom_functions.dart";else if(r==="CustomWidget"){const u=yd(n)[0],c=u?wd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(r){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'package:flutter/material.dart'; +// Begin custom widget code +// DO NOT REMOVE OR MODIFY THE CODE ABOVE! + +`:a===U.ACTION?l=`// Automatic FlutterFlow imports +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'package:flutter/material.dart'; +// Begin custom action code +// DO NOT REMOVE OR MODIFY THE CODE ABOVE! + +`:a===U.FUNCTION&&(l=`// Automatic FlutterFlow imports +import 'dart:convert'; +import 'dart:math' as math; + +import 'package:flutter/material.dart'; +import 'package:google_fonts/google_fonts.dart'; +import 'package:intl/intl.dart'; +import 'package:timeago/timeago.dart' as timeago; +import '/flutter_flow/lat_lng.dart'; +import '/flutter_flow/place.dart'; +import '/flutter_flow/uploaded_file.dart'; + +`),{content:pg(n,l),fileName:o,codeType:a,artifactType:r,artifactName:s}}function cv(t){const e={};for(const r of sa(t))e[r]="";return e}function uv(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 dv(t,e,r,s=new Set,i=""){const n=[],o=Wd.test(e),a=zd.test(e);return r===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:n.length===0,errors:n}}function Hi(t){const e=[],r=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:r};const s=new Set(Array.from(t.values()).flatMap(i=>Ri(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&&r.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=dv(i,n.content,n.type,s,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:r}}const V={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:V.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=V.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(V).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===V.PREPARING&&(this.startTime=Date.now()),(t===V.SUCCESS||t===V.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(V.ERROR)},setSuccess(t){this.result=t,this.setState(V.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===V.PREPARING||this.currentState===V.VALIDATING||this.currentState===V.PUSHING}};async function hv(t,e,r={}){let{codeType:s="W"}=r;const{pubspecDeps:i={},artifactName:n=e}=r;s==="CustomWidget"&&(s=U.WIDGET),s==="CustomAction"&&(s=U.ACTION),s==="CustomFunction"&&(s=U.FUNCTION),s==="CustomClass"&&(s=U.CODE_FILE),s==="CodeFile"&&(s=U.CODE_FILE),K.reset(),K.setState(V.PREPARING);try{const o=await Ee("flutterflow"),a=await Ee("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Di(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=fs(),u=new gs(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=s||av(e,t),h=qd(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Hi(c);if(!p.valid)throw new Error(`Validation failed: +${p.errors.join(` +`)}`);const f=await ba(u,i),m=f.yaml,g=await wa(u,c,f.remoteFiles,`Provision ${n} custom class`,m),_=await ya(g.syncFileMap,g.remoteFiles),w=new Map(g.syncFileMap);w.set("pubspec.yaml",{content:m,type:"D",path:"pubspec.yaml"}),be.set("package");const b=await Ea(w),I={project_id:a,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:m,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(V.PUSHING),K.setProgress(1,c.size),Ui(u),be.set("push");const F=await u.pushCode(I),P=await va(F);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const j=P.errorMessage||_a(P.responseCode);throw new Error(j)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,unverified:g.unverified,approximate:g.approximate,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){const e=new JSZip;for(const[r,s]of t.entries())e.file(r,s.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function pv(t,e={}){const{artifactType:r,artifactName:s,fileName:i,pipelineResult:n}=e;console.log(`Starting commit for ${s} (${r})`);try{K.setState(V.PREPARING);const o=Gd(t,{artifactType:r,artifactName:s,fileName:i}),a=cv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Zr||await Ee("flutterflow_project_id");if(!l)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!u)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Di(u))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(o.fileName,{artifactName:s,content:o.content,type:o.codeType,path:qd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?s:void 0}),K.setProgress(0,c.size);const d=Hi(c);if(!d.valid)throw new Error(`File validation failed: +${d.errors.join(` +`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(V.PUSHING);const h=fs(),p=new gs(l,u,"main",h),f=await ba(p,a),m=f.yaml,g=await wa(p,c,f.remoteFiles,`Provision ${s} custom class`,m),_=await ya(g.syncFileMap,g.remoteFiles),w=new Map(g.syncFileMap);w.set("pubspec.yaml",{content:m,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const b=await Ea(w),I={project_id:u,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:m,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Ui(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const j={...uv(o,n),projectId:u};return K.setSuccess({...j,fileCount:c.size,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${o.fileName} to FlutterFlow`,metadata:j,addedDependencies:f.added,unverified:g.unverified,approximate:g.approximate,warnings:P.errorMap?Array.from(P.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const j=P.errorMessage||_a(P.responseCode),S=new Error(j);throw S.errorMap=P.errorMap,S}}catch(o){console.error("Commit execution failed:",o),K.setError(o);let a=new Map;if(o.errorMap)a=o.errorMap;else if(o.message&&o.message.includes("{"))try{const l=o.message.match(/\{[\s\S]*\}/);if(l){const u=JSON.parse(l[0]);a=new Map(Object.entries(u))}}catch(l){console.warn("Failed to parse error map from commit response:",l)}return{success:!1,error:o.message,errorMap:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function fv(t,e={}){const{pipelineResult:r}=e;try{if(K.setState(V.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: +${t.errors.join(` +`)}`);const s=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,s.size);const i=Hi(s);if(!i.valid)throw new Error(`File validation failed: +${i.errors.join(` +`)}`);K.setState(V.VALIDATING);const n=await Ee("flutterflow"),o=Zr||await Ee("flutterflow_project_id");if(!n)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!o)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Di(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=fs(),l=new gs(n,o,"main",a),u=await ba(l,t.dependencies),c=u.yaml,d=await wa(l,s,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await ya(d.syncFileMap,d.remoteFiles),p=new Map(d.syncFileMap);p.set("pubspec.yaml",{content:c,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const f=await Ea(p),m={project_id:o,zipped_custom_code:f,uid:`web_${Date.now()}`,branch_name:l.branchName,serialized_yaml:c,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,s.size),Ui(l),be.set("push");const g=await l.pushCode(m),_=await va(g);if(_.success){const I={...r,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((F,P)=>F+P.content.length,0),projectId:o};return K.setSuccess({...I,fileCount:s.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,addedDependencies:u.added,unverified:d.unverified,approximate:d.approximate,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const w=_.errorMessage||_a(_.responseCode),b=new Error(w);throw b.errorMap=_.errorMap,b}catch(s){return console.error("Bundle commit execution failed:",s),K.setError(s),{success:!1,error:s.message,errorMap:s.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function gv(t,e=[]){const r=Qo("architect");try{return await ki("architect",Rd,Nf(t),r,e)}catch(s){throw s.isModelArmor?s:new Error(`Prompt Architect failed: ${s.message}`)}}async function Wi(t,e,r=[]){const s=Mf(t),i=Qo("generator",y.bundleSpec);try{return await ki("generator",e,s,i,r)}catch(n){if(n.isModelArmor)throw n;if(e!==Fn){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,n.message);try{return await ki("generator",Fn,s,i,r)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${n.message} | fallback (${Fn}): ${o.message}`)}}throw new Error(`Code Generator failed: ${n.message}`)}}async function zi(t,e=null){const r={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await ki("review",Td,Lf(t),r)}catch(s){throw s.isModelArmor?s:new Error(`Code Review failed: ${s.message}`)}}function Sa(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Fo(t,e){const r=document.getElementById(`step${t}-item`),s=document.getElementById(`step${t}-status`);!r||!s||(r.classList.remove("active","completed","error"),s.classList.remove("running","completed","error"),e==="active"?(r.classList.add("active"),s.classList.add("running"),s.innerHTML=` + + `):e==="completed"?(r.classList.add("completed"),s.classList.add("completed"),s.innerHTML=` + + `):e==="error"?(r.classList.add("error"),s.classList.add("error"),s.innerHTML=` + + `):s.innerHTML=` + + `)}function ve(t,e){const r=document.getElementById(`step${t}-loading`),s=document.getElementById(`step${t}-result`);e?(r.classList.remove("hidden"),s.classList.add("hidden"),Fo(t,"active")):(r.classList.add("hidden"),s.classList.remove("hidden"),Fo(t,"completed"))}function mv(t){const e=document.getElementById(`${t}-content`),r=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),r&&(r.style.transform="rotate(0deg)")):(e.classList.add("open"),r&&(r.style.transform="rotate(180deg)"))}function vv(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"),Yt();const r=document.getElementById("ready-state");r&&r.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const s=document.getElementById(`step${t}-content`);s&&s.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 _v(t){const e=document.getElementById(t);if(!e)return;const r=e.dataset.raw||e.textContent;navigator.clipboard.writeText(r).then(()=>{const i=e.closest(".code-container")?.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(s=>{console.warn("Failed to copy to clipboard:",s)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Rd)}`),console.log(e!==t?`Step 2 (Code Generator): ${zt(t)} → ${zt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${zt(t)}`),console.log(`Step 3 (Code Review): ${zt(Td)}`)}async function yv(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(r=>{r.disabled=!0,r.innerHTML=` + + + Refining...`});try{const r=ga(),s=Of({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:r.id,userFeedback:"Fix the issues listed in the audit report."});Gi(),it(2),ze(2),ve(2,!0),y.step2Result=await Wi(s,t),Bi();const i=document.getElementById("step2-output"),n=wr(y.step2Result);i.textContent=n,i.dataset.raw=n,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await zi(y.step2Result,y.step1Result),ji();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Li(y.step3Result);Ki(n,a)}catch(r){console.error("Refinement failed:",r),$t(),ue(Sa(r,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(r=>{r.disabled=!1,r.textContent="Refine & Regenerate"}),Zt()}}async function xa(t,e,r){const s=`${Je}/connectFeedback`,i={type:t,code:e,input:r};try{const n=await fetch(s,{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 wv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function bv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const r=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const s=document.getElementById("btn-fix-from-errors");s&&(s.disabled=!0,s.innerHTML=` + + Fixing…`);try{const i=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});oh(),Gi(),it(2),ze(2),ve(2,!0),y.step2Result=await Wi(i,r),Bi();const n=document.getElementById("step2-output"),o=wr(y.step2Result);n.textContent=o,n.dataset.raw=o,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await zi(y.step2Result,y.step1Result),ji();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Li(y.step3Result);Ki(o,l),t&&(t.value="")}catch(i){console.error("Fix from errors failed:",i),$t(),ue(Sa(i,"Failed to fix errors"),"error")}finally{y.isRunning=!1,s&&(s.disabled=!1,s.textContent="Fix Errors & Regenerate"),Zt()}}async function Ao(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!t.trim()){ue("Please describe your FlutterFlow widget first.","warning");return}if(!await Uv())return;await Mv();const r=$o(e);t.length;const s=document.getElementById("btn-run-pipeline");y.isRunning=!0,sv(),s.disabled=!0,s.innerHTML=` + + + Running...`,Po(r);try{Yt();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden"),Gi(),ze(1),it(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await gv(t,o),iv();const a=document.getElementById("step1-output"),l=wr(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),it(2),ve(2,!0),y.step2Result=await Wi(y.step1Result,r,o),Bi();const u=document.getElementById("step2-output"),c=wr(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await zi(y.step2Result,y.step1Result),ji();const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Li(y.step3Result);Ki(c,h)}catch(i){if(console.error("Pipeline failed:",i),$t(),i.isUsageLimit){const{count:c}=qi();Aa(c,Pa(),{openModal:!0});return}i.message,$o(document.getElementById("code-generator-model").value);const o=mm(i,{architect:1,generator:2,review:3});ze(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),u=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),u)if(i.isModelArmor)u.innerHTML=``;else{let c=i.message;i.message.includes("image input")?c=`This model doesn't support image input. Please use ${zt(ls)} for image-based requests or remove image references from your prompt.`:(i.message.includes("Load failed")||i.message.includes("CORS"))&&(c="API connection failed. This might be due to CORS restrictions or network issues. Please check your API key and try again."),u.innerHTML=`
    +

    Connection Error

    +

    ${B(c)}

    +
    +

    Check if API key is valid

    +

    Try using a different model

    +

    Ensure network allows API calls

    +
    +
    `}Fo(o,"error")}finally{y.isRunning=!1,s.disabled=!1,s.innerHTML=` + + + Run Pipeline`,Zt()}}function Ev(){const t=document.getElementById("code-generator-model").value,e=[ls,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(s=>s!==t),r=prompt(`Retry with different model? + +Current: ${t} + +Options: +1. ${e[0]} +2. ${e[1]} + +Enter 1 or 2:`);r==="1"?(document.getElementById("code-generator-model").value=e[0],Ao()):r==="2"&&(document.getElementById("code-generator-model").value=e[1],Ao())}async function Sv(){const t=ma();if(!t){ue("No code to commit. Please run the pipeline first.","warning");return}const e=await Ee("flutterflow"),r=await Ee("flutterflow_project_id");if(!e||!r){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ha();return}if(y.artifactBundle?.artifacts?.length>1){await xv();return}const{artifactType:s,artifactName:i,fileName:n}=Hd(),o=Gd(t,{artifactType:s,artifactName:i,fileName:n}),a=lv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}Qd(o,a,null,null)}async function xv(){const t=await Ee("flutterflow"),e=await Ee("flutterflow_project_id");if(!t||!e){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ha();return}const r=wg(y.artifactBundle);if(r.errors.length>0){ue(`Bundle validation failed: ${r.errors.join("; ")}`,"error");return}const s=new Map(r.fileEntries.map(a=>[a.fileName,{content:a.content,type:a.type,path:a.path}])),i=Hi(s),n={canProceed:i.valid&&r.errors.length===0,issues:[...r.errors,...i.errors],warnings:[...r.warnings,...i.warnings]};if(!n.canProceed){ue(`Bundle validation failed: ${n.issues.join("; ")}`,"error");return}const o={content:r.fileEntries.map(a=>`// ${a.fileName} +${a.content}`).join(` + +`),fileName:`${r.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:r.title};Qd(o,n,r.dependencies,r)}function kv(t){let e=t.errorMap||new Map;!(e instanceof Map)&&typeof e=="object"&&(e=new Map(Object.entries(e)));let r=`
    +

    FlutterFlow Commit Failed

    +

    ${B(t.error)}

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

    Errors:

    +
      `;for(const[i,n]of e.entries()){const o=bd(n);r+=`
    • + ${B(i)}: ${B(o)} +
    • `}r+="
    "}r+="
    ",r+=`
    + +
    `;const s=document.getElementById("step3-output");s&&(s.innerHTML=r,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{Iv(t.error,e)}))}async function Iv(t,e){if(y.isRunning)return;const r=document.getElementById("code-generator-model").value;y.isRunning=!0;const s=document.getElementById("btn-regenerate-from-error");s&&(s.disabled=!0,s.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=bd(d);i+=`File: ${c} +Error: ${h} + +`}else i+=`${t} +`;const n=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Gi(),it(2),ze(2),ve(2,!0),y.step2Result=await Wi(n,r),Bi();const o=document.getElementById("step2-output"),a=wr(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await zi(y.step2Result,y.step1Result),ji();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=Li(y.step3Result);Ki(a,u)}catch(i){console.error("Regeneration failed:",i),$t(),ue(Sa(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,s&&(s.disabled=!1,s.textContent="Fix Errors & Regenerate"),Zt()}}async function Cv(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const r=await Ee("flutterflow"),s=await Ee("flutterflow_project_id");r&&s?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):r||s?(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 Fv(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 Pv(t){try{const r=await(await fetch(`${Je}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(r.error||!r.email||!r.sessionToken)throw new Error(r.error||"Invalid or expired link");return r}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Av(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 r=await e.json();return r.error||!r.email||!r.sessionToken?(console.warn("refreshSession: validation failed",{error:r.error,hasEmail:!!r.email,hasToken:!!r.sessionToken}),null):r}catch(e){return console.error("refreshSession: fetch failed",{url:`${Je}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function bc(t,e){const r=Kd(),s=(G.email||r.email)!==t;G.email=t,G.sessionToken=e,G.isVerified=!0,fe=br({isLoading:!0}),localStorage.setItem(vi,JSON.stringify({email:t,sessionToken:e})),s&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=br({isResolved:!0}),localStorage.removeItem(vi),localStorage.removeItem(yi)}function Kd(){try{const t=localStorage.getItem(vi);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(vi),{email:null,sessionToken:null}}}async function $v(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:r,sessionToken:s}=await Pv(e);bc(r,s)}catch(r){ue(r.message||"Sign-in link invalid or expired.","error")}}else{const{email:r,sessionToken:s}=Kd();if(r&&s){const i=await Av(s);i?bc(i.email,i.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Rv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Tv(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),r=document.getElementById("signin-message"),s=t?.value?.trim();if(!s||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(s)||s.length>254){r&&(r.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),r&&(r.textContent="");try{await Fv(s),t&&(t.value=""),r&&(r.textContent=`Check your email — we sent a link to ${s}`),e&&(e.textContent="Sent!")}catch(n){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:s,err:n}),r&&(r.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Nv(){ka(),$a(),Ca(),Vi()}function Ca(){const t=G.isVerified&&!!G.email,e=document.getElementById("auth-signedout"),r=document.getElementById("auth-signedin"),s=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),r&&r.classList.toggle("hidden",!t),s&&s.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=G.email||""),zs(),Vi()}async function Jd(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),r=e.visitorId,s=await fetch(xm,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:r})});if(!s.ok)throw new Error(`Identity check HTTP ${s.status}`);const i=await s.json();if(Ge.userId=i.user_id,Ge.token=i.identity_token||null,Ge.status=i.status,Ge.resolved=!0,sessionStorage.setItem(Em,i.user_id),Ge.token&&sessionStorage.setItem(Sm,Ge.token),i.usage_count!==void 0){const n=At(),a=(i.usage_month||n)===n?i.usage_count:0;localStorage.setItem(Gt,JSON.stringify({count:a,month:n})),Xr()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Pn=null;function Mv(t=5e3){return Ge.resolved?Promise.resolve():(Pn||(Pn=Jd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Pn,new Promise(e=>setTimeout(e,t))]))}function Yd(){const t=At();try{const e=localStorage.getItem(Gt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Gt,month:t,err:e}),localStorage.removeItem(Gt),{count:0,month:t}}}function At(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function qi(){const t=Yd();return t.month!==At()?{count:0,month:At()}:t}function Lv(){const e={count:qi().count+1,month:At()};return localStorage.setItem(Gt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Jt(){return!!fe.isResolved}function Ov(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(_i,e)?e:null}function Dv(t){return t&&Object.entries(Pd).find(([,e])=>e===t)?.[0]||null}function $s(...t){return t.find(e=>e!=null&&e!=="")}function Bv(...t){return t.find(e=>e&&typeof e=="object")||{}}function jv(t){const e=t.data&&typeof t.data=="object"?t.data:t,r=Bv(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),s=e.metadata||r.metadata||e.customer?.metadata||{},i=$s(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,r.priceId,r.price_id,r.plan?.id,r.price?.id,r.items?.data?.[0]?.price?.id,r.items?.[0]?.price?.id,r.lines?.data?.[0]?.price?.id),n=$s(e.status,e.subscriptionStatus,e.subscription_status,r.status,"none"),o=Ov($s(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,r.tier,r.plan,s.tier,s.plan)),a=km.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Dv(i)||(a||l?"professional":"free");return br({tier:u,status:n,periodEnd:$s(e.periodEnd,e.currentPeriodEnd,e.current_period_end,r.current_period_end,r.periodEnd,null),isResolved:!0})}function Pa(){return _i[fe.tier]??_i.free}async function Uv(){if(G.isVerified&&(!Jt()||Fa())&&(await Zd({force:!0}),Vi()),G.isVerified&&!Jt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=qi(),e=Pa();if(t>=e)return Aa(t,e,{openModal:!0}),!1;const r=Math.floor(e*.8);if(t>=r){const s=e-t;ue(`${s} run${s===1?"":"s"} remaining this month.`,"warning")}return!0}function An(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Aa(t,e,r={}){const s=document.getElementById("walkthrough-modal");s&&s.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){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Ii();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",G.isVerified),u.classList.remove("hidden"),r.openModal&&Ii()}function $o(t){return fe.tier==="free"&&js.includes(t)?ls:t}function Hv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const r=fe.tier,i=!(G.isVerified&&!Jt())&&r==="free";Array.from(e.options).forEach(o=>{const a=zt(o.value),l=js.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&js.includes(e.value)&&(e.value=ls),e.disabled=!1,dc.has(e)||(e.addEventListener("change",()=>{Jt()&&fe.tier==="free"&&js.includes(e.value)&&(e.value=ls,Ii()),Po(e.value),$d()}),dc.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(),Po(e.value)}function Xr(){const t=document.getElementById("usage-counter");if(!t)return;if(G.isVerified&&Fa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",zs(),An();return}if(G.isVerified&&!Jt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",zs(),An();return}const{count:e}=qi(),r=Pa();t.textContent=`${e} / ${r} runs this month`;const s=r>0?e/r:0;t.className=s>=1?"text-xs text-red-600 font-medium":s>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",zs(),e>=r&&!y.isRunning?Aa(e,r):An()}function zs(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Yd(),r=e.month===At()?e.count??0:0,s=_i.free;t.textContent=`${r} / ${s} generations used`}async function Zd(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=br({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const r=localStorage.getItem(yi);if(!e&&r)try{const{data:s,email:i,ts:n,version:o}=JSON.parse(r);if(o===hc&&i===G.email&&Date.now()-n<300*1e3){fe={...s,isLoading:!1,isResolved:s.isResolved!==!1};return}}catch(s){console.warn("Failed to parse subscription cache:",s,"| raw value:",r)}try{const i=await(await fetch(`${Je}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:G.sessionToken,user_id:Ge.userId})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ka(),Ca();return}fe=br({isResolved:!1,error:i.error});return}fe=jv(i),localStorage.setItem(yi,JSON.stringify({version:hc,data:fe,email:G.email,ts:Date.now()}))}catch(s){console.error("fetchSubscription failed:",s),fe={...fe,isLoading:!1,isResolved:!1,error:s.message}}}function $a(){localStorage.removeItem(yi)}async function Wv(t){if(!G.isVerified||!G.sessionToken){Xd(),Ia();return}if(!Pd[t]){ue("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const s=await(await fetch(`${Je}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:G.sessionToken,currency:Nd()})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to create checkout session");const{url:i}=s;window.location.href=i}catch(r){console.error("startCheckout failed:",r),e&&(e.disabled=!1,e.textContent="Subscribe"),ue("Could not start checkout. Please try again.","error")}}async function zv(){if(!G.isVerified||!G.sessionToken){Ia();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const r=await(await fetch(`${Je}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:G.sessionToken})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to open billing portal");const{url:s}=r;window.location.href=s}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),ue("Could not open billing portal. Please try again.","error")}}async function ki(t,e,r,s={},i=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(bm,{method:"POST",headers:{"Content-Type":"application/json",...Ge.token?{Authorization:`Bearer ${Ge.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ge.userId,step:t,model:e,prompt:r,images:i,context:s})}),u=await l.text();let c={};try{c=u?JSON.parse(u):{}}catch{c={}}if(l.status===429){c.serverCount!==void 0&&(localStorage.setItem(Gt,JSON.stringify({count:c.serverCount,month:At()})),Xr());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=zf(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=At();(c.usage_month||p)===p&&(localStorage.setItem(Gt,JSON.stringify({count:c.usage_count,month:p})),Xr())}else Lv(),Xr();let h=c.output||c.content;if(!h){const p=u?` (body: ${u.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${p}`)}return Array.isArray(h)&&(h=h.map(p=>typeof p=="string"?p:p.text||"").join("")),typeof h!="string"&&(h=JSON.stringify(h)),h}catch(l){throw l.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):l instanceof TypeError?new Error(`BuildShip unreachable: ${l.message}`):l}finally{clearTimeout(a)}}function qv(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),$a(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),ue("Checkout cancelled.","info"))}function Vi(){const t=G.isVerified&&!!G.email,e=fe.tier,r=t&&Fa(),s=!t||Jt(),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=r?"Checking…":s?a[e]||"Free":"Plan unavailable",i.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${s?l[e]||l.free:l.unresolved}`}const n=document.getElementById("upgrade-prompt");n&&n.classList.toggle("hidden",!t||r||!s||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||r||s&&e==="free"),Vv(s?e:null),Hv(),$d(),Xr()}function Vv(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 s=document.getElementById("free-tier-current");s&&s.classList.toggle("hidden",t!=="free")}function Ro(){const t=Nd(),e=document.getElementById("pro-price"),r=document.getElementById("power-price"),s=document.getElementById("pro-price-note"),i=document.getElementById("power-price-note");e&&(e.textContent=fc(pc.professional,t)),r&&(r.textContent=fc(pc.power,t));const n="billed monthly";s&&(s.textContent=n),i&&(i.textContent=n)}function Ii(){Ro();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Nm().then(()=>Ro())}function Xd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function ue(t,e="info"){const r={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},s=document.createElement("div");s.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${r[e]||r.info}`,s.textContent=t,document.body.appendChild(s),setTimeout(()=>{s.style.opacity="0",setTimeout(()=>s.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Gv(),await $v(),qv(),await Zd(),Vi(),Ro(),await nv(),ev();const t=document.getElementById("flutterflow-endpoint-select");if(t){const r=fs();t.value=r}jd(),Jd();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(pa(),Oi())}),e.addEventListener("blur",()=>{const r=document.getElementById("walkthrough-modal");Et===2&&r&&r.classList.add("open")}),e.addEventListener("keydown",r=>{if(r.key==="Tab"){const s=document.getElementById("walkthrough-modal");Et===2&&s&&setTimeout(()=>{s.classList.add("open")},100)}})),window.addEventListener("commitStateChange",r=>{const{state:s}=r.detail;s===V.PREPARING||s===V.VALIDATING||s===V.PUSHING?(be.phaseId||th(),Sc(s)):(s===V.SUCCESS||s===V.ERROR)&&(Sc(s),setTimeout(Ci,1e3))})});function Gv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Kv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Yt),document.addEventListener("keydown",Yt))}function Yt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),r=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),r&&r.classList.remove("hidden");const s=document.getElementById("welcome-video-player");s&&s.removeEventListener("click",Yt),document.removeEventListener("keydown",Yt),jd()}let Qr=null;async function Jv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++yc,r=()=>e===yc,s=await Ee("flutterflow"),i=await Ee("flutterflow_project_id");if(r()){if(!s){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new gs(s,"").listProjects();if(!r())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),i&&(t.value=i)}catch(n){if(!r())return;console.error("Failed to load projects for deploy:",n),t.innerHTML=''}}}function Yv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function Qd(t,e,r,s=null){Qr={codeInfo:t,checks:e,deps:r,bundlePlan:s},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=s?`${s.fileEntries.length} files`:t.content.split(` +`).length,Jv();const i=document.getElementById("confirm-deps-list"),n=document.getElementById("confirm-deps-section");r&&Object.keys(r).length>0?(i.innerHTML=Object.entries(r).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 eh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Qr=null}function Zv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const r=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const n of r){const o=document.getElementById(n);o&&(o.textContent="")}const s=document.getElementById("success-warnings-section");s&&s.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function To(t){const e=(g,_)=>{const w=document.getElementById(g);w&&(w.textContent=_||"")},r=t.metadata?.fileName||"",s=t.metadata?.projectId||"",i=t.metadata?.artifactType||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",s),e("success-file-name",r),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&&s&&(u.href=`https://app.flutterflow.io/project/${s}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),h=t.unverified||[],p=t.approximate||[],f=t.warnings||[];(f.length>0||h.length>0||p.length>0)&&c&&d&&(d.innerHTML=[...h.map(g=>`
  • Not verified before deploying: ${B(String(g))}
  • `),...p.map(g=>`
  • Verified approximately: ${B(String(g))}
  • `),...f.map(([g,_])=>`
  • ${B(g)}: ${B(String(_))}
  • `)].join(""),c.classList.remove("hidden"));const m=document.getElementById("commit-success-modal");m&&m.classList.add("open")}function No(t){Ci(),kv(t)}function Xv(){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 Ec={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}},Qv=[{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(!(!Ec[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const r=this.sequence.indexOf("package");this.sequence.splice(r===-1?this.sequence.length:r,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=Ec[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,r=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=Qv.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const s=this.sequence.indexOf(this.phaseId),n=[`Step ${s===-1?1:s+1} of ${this.sequence.length}`];e>=5&&n.push(e_(e)),rh(this.phaseId==="done"?100:r,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 e_(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 th(t){be.start(t)}function Ci(){be.stop()}function rh(t,e,r,s=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=r),a&&(a.textContent=s||"",a.classList.toggle("hidden",!s))}function Sc(t){const e={[V.PREPARING]:"prepare",[V.VALIDATING]:"validate",[V.PUSHING]:"project",[V.SUCCESS]:"done"};if(t===V.ERROR){be.timer&&clearInterval(be.timer),be.timer=null,rh(100,"Failed","Error occurred");return}const r=e[t];r&&be.set(r)}function t_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function r_(){if(!Qr){console.error("No pending commit data");return}const t=Qr;if(Qr=null,Zr=Yv(),eh(),th({withProvisioning:t_(t)}),t.bundlePlan){const o=await fv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zr=null,Ci(),o.success?To(o):No(o);return}const{codeInfo:e}=t,{artifactType:r,artifactName:s,fileName:i}=Hd(),n=await pv(e.content,{artifactType:r,artifactName:s,fileName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zr=null,Ci(),n.success?To(n):No(n)}window.runThinkingPipeline=Ao;window.toggleStep=vv;window.toggleSection=mv;window.selectWorkflowStep=ze;window.copyCode=_v;window.retryWithDifferentModel=Ev;window.openApiKeysModal=ha;window.closeApiKeysModal=Dd;window.closeWalkthroughModal=Km;window.openWalkthroughModal=Gm;window.advanceWalkthrough=pa;window.commitToFlutterFlow=hv;function s_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function i_(){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=s_;window.openModelSelector=i_;window.handlePromptImageSelect=Rm;window.removePromptImage=Tm;window.saveApiKeys=Zm;window.clearAllApiKeys=Xm;window.toggleKeyVisibility=rv;window.handleWelcomeVideoEnd=Kv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=Sv;window.updateFlutterFlowCredentialStatus=Cv;window.closeCommitConfirmModal=eh;window.closeCommitSuccessModal=Zv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=Xv;window.confirmCommitToFlutterFlow=r_;window.runRefinement=yv;window.regenerateFromPastedErrors=bv;window.clearErrorInput=wv;window.setFlutterFlowEndpoint=Vm;window.getFlutterFlowEndpoint=fs;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Rv;window.handleMagicLinkRequest=Tv;window.handleSignOut=Nv;window.startCheckout=Wv;window.openCustomerPortal=zv;window.openPricingModal=Ii;window.closePricingModal=Xd;let hr=null,sh=null;const xc=120;function Gi(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),r=document.getElementById("ready-state");r&&r.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),sh=Date.now();for(let s=1;s<=3;s++){const i=document.getElementById(`pdot-${s}`);i&&(i.className="progress-dot")}it(1),n_()}function it(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},r={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},s=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text");s&&(s.textContent=e[t]||e[1]),i&&(i.textContent=r[t]||r[1]);for(let n=1;n<=3;n++){const o=document.getElementById(`pdot-${n}`);o&&(n{const t=(Date.now()-sh)/1e3,e=document.getElementById("progress-elapsed"),r=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const s=t/xc*100,i=Math.min(95,s*(1-Math.exp(-t/(xc*.6)))*1.2);r&&(r.style.width=`${i}%`)},250)}function $t(){hr&&(clearInterval(hr),hr=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const r=document.getElementById(`pdot-${e}`);r&&(r.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function Sr(t,e=""){const r={pass:'',warning:'',fail:'',info:''};return``}function ih(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function o_(){return Lg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function a_(t){return` +
    + ${Sr(t.severity)} +
    +
    ${B(t.message)}
    + ${t.suggestion?`
    ${B(t.suggestion)}
    `:""} + ${B(t.source)} +
    +
    + `}function l_(t){return` +
  • +
    + ${B(t.title)} + ${t.detail&&t.detail!==t.title?`

    ${B(t.detail)}

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

    ${Sr("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=>` +
    • + ${B(l.title)} + ${l.detail&&l.detail!==l.title?`${B(l.detail)}`:""} +
    • + `).join("")} +
    +
    + `:"";e.innerHTML=` +
    +
    +

    ${B(t.summary)}

    + ${o} + ${a} +
    +
    + +
    + Is the generated code correct? +
    + + +
    +
    +
    +
    + `}function u_(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const r={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],s=e.findings.length?e.findings.map(a_).join(""):`
    ${Sr(r.icon)} ${B(r.message)}
    `,i=e.dependencies?.length?e.dependencies.map(l=>` +
  • ${B(l.name)}${l.version?` ${B(l.version)}`:""}${l.reason?`

    ${B(l.reason)}

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

    ${B(l.description)}

    `:""}
  • + `).join(""):'
  • No relationships for this file
  • ';return` +
    +
    + ${Sr(e.status)} ${B(ih(e.status))} +

    ${B(e.artifactName)}

    + ${e.description?`

    ${B(e.description)}

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

    Code Review findings

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

    Manual FlutterFlow steps for this file

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

    Dependencies

    +
      ${i}
    +
    +
    +

    Deployment

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

    Public API

    +
    ${o}
    +
    +
    +

    Imports

    +
    ${n}
    +
    +
    +

    Relationships

    +
      ${a}
    +
    +
    + `}function d_(t){const e=document.getElementById("bundle-strip"),r=document.getElementById("results-summary-tab"),s=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(r&&r.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),s&&(s.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}s&&(s.innerHTML=t.artifacts.map(n=>` + + `).join(""),s.onclick=n=>{const o=n.target.closest(".artifact-tab");o?.dataset?.artifactId&&nh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Ra(){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"),r=document.getElementById("results-audit-output"),s=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=o_(),o=ma();if(c_(n),d_(n),e&&(e.textContent=""),e){const a=Fd(o);e.innerHTML=a}r&&(r.innerHTML=u_(n)),s&&s.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Ki(t,e){y.selectedArtifactId||(y.selectedArtifactId=fi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const r=document.getElementById("step3-output");r&&(r.textContent=""),Ra(),Zt();const s=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");s&&(s.className="feedback-btn"),i&&(i.className="feedback-btn")}function nh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function h_(){y.resultsViewMode="summary",Ra()}function p_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}})}function f_(t){const e=document.getElementById("btn-feedback-up"),r=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),r.classList.remove("active-down")):(r.classList.toggle("active-down"),e.classList.remove("active-up")),xa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function g_(){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 oh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=p_;window.selectArtifact=nh;window.selectResultsSummary=h_;window.submitResultsFeedback=f_;window.showErrorInputPanel=g_;window.hideErrorInputPanel=oh; diff --git a/dist/index.html b/dist/index.html index 726893a..680613a 100644 --- a/dist/index.html +++ b/dist/index.html @@ -32,41 +32,24 @@ - + +
    @@ -2636,8 +2592,8 @@
    -

    FlutterFlow Custom Code, Solved.

    -

    We speak Dart with a FlutterFlow accent.
    Custom widgets and actions tailored to your project, fully reviewed and deployed in one click

    +

    FlutterFlow Custom Code, Solved.

    +

    We speak Dart with a FlutterFlow accent.
    Custom widgets and actions tailored to your project, fully reviewed and deployed in one click

    diff --git a/index.html b/index.html index 3356f91..2ea2643 100644 --- a/index.html +++ b/index.html @@ -31,42 +31,26 @@ +