From 427e8c029df6ab09f3f094f02c5ec98084972085 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 25 Sep 2026 05:20:47 +0000 Subject: [PATCH 01/18] fix: read every own-key for a dependency's source, count exports, bound sdkPackages Review follow-ups on STU-368. readSourceDirective returned the first own-key, but YAML mapping order is not significant: 'version:' written above 'hosted:' read as a plain constraint and the manifest resolved the package from pub.dev rather than the project's host. Every own-key is now read and any source key wins over 'version:'. extractPackageImports matched only 'import'. A class exporting a git or path package was compiled against a manifest missing it and the analyzer refused the deploy over an unresolvable URI, instead of the class being skipped with a warning. 'export' directives now count. The runner's sdkPackages array had no count bound after the allowlist was removed; it now shares maxDependenciesPerRequest, and package names in every manifest field are capped at pub's 64-character limit. Co-Authored-By: bot_apk --- cloud-run/ffai-runner/bin/server.dart | 21 ++++++++++++++++----- src/customCodeVerification.test.js | 20 ++++++++++++++++++++ src/dartPackageImports.js | 4 +++- src/pubspecSync.js | 26 +++++++++++++++++++++----- src/pubspecSync.test.js | 21 +++++++++++++++++++++ 5 files changed, 81 insertions(+), 11 deletions(-) diff --git a/cloud-run/ffai-runner/bin/server.dart b/cloud-run/ffai-runner/bin/server.dart index 141b3bc..8db93d2 100644 --- a/cloud-run/ffai-runner/bin/server.dart +++ b/cloud-run/ffai-runner/bin/server.dart @@ -5,6 +5,8 @@ import 'dart:io'; const maxClassesPerRequest = 20; const maxCodeBytes = 500000; const maxDependenciesPerRequest = 200; +// pub.dev's own ceiling on a package name. +const maxPackageNameLength = 64; const analysisPackageName = 'ccc_custom_code_analysis'; const defaultSdkConstraint = '>=3.0.0 <4.0.0'; @@ -522,7 +524,7 @@ Map _normalizeDependencyMap(Object? value, String field) { final result = {}; for (final entry in value.entries) { final name = '${entry.key}'; - if (!_packageNamePattern.hasMatch(name)) { + if (!_isValidPackageName(name)) { throw FormatException('Invalid package name in verification.$field: $name.'); } final constraint = '${entry.value}'.trim(); @@ -548,18 +550,27 @@ List _normalizeSdkPackages(Object? value) { if (value is! List) { throw const FormatException('verification.sdkPackages must be an array.'); } + // Bounded like the dependency maps: each entry expands into the generated + // pubspec, so an unbounded array is caller-controlled work before pub get + // ever sees it. + 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 (!_packageNamePattern.hasMatch(name)) { + if (!_isValidPackageName(name)) { throw FormatException('Invalid SDK package name: $name.'); } - if (!result.contains(name)) result.add(name); + result.add(name); } - return result; + return result.toList(); } +bool _isValidPackageName(String name) => + name.length <= maxPackageNameLength && _packageNamePattern.hasMatch(name); + String _validateConstraint( String field, String value, { diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 02e3d4b..9ed4041 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -164,6 +164,26 @@ class UsesPrivateThing {} assert.match(plan.skipped[0].reason, /it imports private_thing/); }); +test("a class that exports the unreproducible dependency is skipped, not refused", () => { + // `export` pulls the package in exactly as `import` does. If exports were + // not read, the class would be compiled against a manifest missing the + // package and the analyzer would refuse the deploy over a URI it could not + // resolve, instead of the class being reported as unverified. + const exportsPrivateThing = `export 'package:private_thing/private_thing.dart'; + +class ReExportsPrivateThing {} +`; + + const plan = planCustomCodeVerification( + [{ className: "ReExportsPrivateThing", content: exportsPrivateThing }], + PROJECT_PUBSPEC, + ); + + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); + assert.match(plan.skipped[0].reason, /it imports private_thing/); +}); + test("an SDK package no list has heard of is reproduced from its pubspec source", () => { // The regression: flutter_web_plugins is a genuine Flutter SDK package that // the hand-kept list omitted, so every project declaring it - which is every diff --git a/src/dartPackageImports.js b/src/dartPackageImports.js index 6f073be..907032d 100644 --- a/src/dartPackageImports.js +++ b/src/dartPackageImports.js @@ -100,7 +100,9 @@ export function extractImportUris(code = "") { export function extractPackageImports(code = "") { const names = []; const seen = new Set(); - const importRegex = /\bimport\s+['"]package:([a-zA-Z0-9_]+)\//g; + // `export 'package:x/x.dart'` pulls the package in exactly as `import` does, + // so both directives name a dependency the code needs. + const importRegex = /\b(?:import|export)\s+['"]package:([a-zA-Z0-9_]+)\//g; const stripped = stripComments(code); let match; diff --git a/src/pubspecSync.js b/src/pubspecSync.js index 1cdbbb9..8c0961c 100644 --- a/src/pubspecSync.js +++ b/src/pubspecSync.js @@ -104,7 +104,7 @@ function splitValueAndComment(rest) { } /** - * Reads the first key of a block-form dependency's own mapping. + * Reads the source key of a block-form dependency's own mapping. * * A block-form entry says where a package comes from on a following, more * deeply indented line: `sdk:`, `git:`, `path:`, a nested `hosted:`, or a @@ -115,29 +115,45 @@ function splitValueAndComment(rest) { * ships a package the list has not heard of, and every project declaring that * package then reads it as unreproducible. * + * YAML mapping order is not significant, so `version:` may precede `hosted:`. + * Every own-key is read and a source key (anything other than `version:`) + * wins over a bare `version:`; a constraint only stands on its own when no + * source accompanies it. + * * @param {string[]} lines - pubspec.yaml split into lines * @param {number} entryIndex - Index of the dependency entry's own line * @param {number} endIndex - Exclusive end of the enclosing block * @param {number} parentIndent - Indent of the dependency entry itself - * @returns {{key: string, value: string}|null} First own-key, or null if the - * entry has no mapping below it + * @returns {{key: string, value: string}|null} Source own-key, else the + * `version:` own-key, or null if the entry has no mapping below it */ function readSourceDirective(lines, entryIndex, endIndex, parentIndent) { + let ownIndent = null; + let version = null; for (let i = entryIndex + 1; i < endIndex; i += 1) { const line = lines[i]; if (isBlankOrComment(line)) continue; + const indent = indentOf(line); // Shallower or equal indent means the entry's mapping has ended and this is // a sibling dependency, so there is nothing of this entry's own to read. - if (indentOf(line) <= parentIndent) return null; + if (indent <= parentIndent) break; + // The first mapping line fixes the own-key indent; anything deeper belongs + // to one of the own-keys (`git:` -> `url:`) and is not a source itself. + if (ownIndent === null) ownIndent = indent; + if (indent !== ownIndent) continue; const trimmed = line.trim(); const key = parseDependencyName(trimmed); if (!key) continue; const { value } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); + if (key === "version") { + version = { key, value }; + continue; + } return { key, value }; } - return null; + return version; } /** diff --git a/src/pubspecSync.test.js b/src/pubspecSync.test.js index 0499a77..ed4dd79 100644 --- a/src/pubspecSync.test.js +++ b/src/pubspecSync.test.js @@ -214,6 +214,27 @@ test("a nested version block is read as a constraint, not as a source", () => { assert.equal(declared.get("intl").sourceValue, "^0.20.3"); }); +test("a hosted source is read even when version: is written before it", () => { + // YAML mapping order is not significant, so this is the same dependency as + // hosted-then-version. Reading only the first own-key would classify it as a + // plain constraint and the verification manifest would resolve it from + // pub.dev instead of the project's own host. + const pubspec = `dependencies: + hosted_thing: + version: ^1.0.0 + hosted: + name: hosted_thing + url: https://example.invalid + plain_thing: + version: ^2.0.0 +`; + const declared = parseExistingDependencies(pubspec); + + assert.equal(declared.get("hosted_thing").sourceKey, "hosted"); + assert.equal(declared.get("plain_thing").sourceKey, "version"); + assert.equal(declared.get("plain_thing").sourceValue, "^2.0.0"); +}); + test("a git source keeps only its first key, whatever the nested shape", () => { const pubspec = `dependencies: private_thing: From 5054723fbc9850141087df5703d679f516d9caa0 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 07:12:45 +0000 Subject: [PATCH 02/18] fix: unreproducible dependency_overrides skip verification project-wide Review follow-up on STU-368. Per-class scoping assumed an unreproducible package only affects classes that name it directly. That holds for a git/path entry in dependencies - a published package cannot depend on an unpublished one - but not for dependency_overrides: an override rewrites resolution for every package in the graph that depends on the overridden name. A class importing an ordinary pub.dev package could then be analysed against different transitive code than the project compiles, and only pubspec.lock - which a deploy never sees - records whether it does. Unrepresentable overrides now skip any class that imports a package: URI at all; dart:-only classes still verify. Regular unreproducible dependencies keep their per-class scoping. Co-Authored-By: Stuart Gardoll --- .../{index-D4d_RpDK.js => index-CPEl05N0.js} | 134 +++++++++--------- dist/index.html | 2 +- src/customCodeVerification.js | 52 ++++++- src/customCodeVerification.test.js | 110 ++++++++++++++ 4 files changed, 223 insertions(+), 75 deletions(-) rename dist/assets/{index-D4d_RpDK.js => index-CPEl05N0.js} (63%) diff --git a/dist/assets/index-D4d_RpDK.js b/dist/assets/index-CPEl05N0.js similarity index 63% rename from dist/assets/index-D4d_RpDK.js rename to dist/assets/index-CPEl05N0.js index efa7947..fe16cb3 100644 --- a/dist/assets/index-D4d_RpDK.js +++ b/dist/assets/index-CPEl05N0.js @@ -1,8 +1,8 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=s(n);fetch(n.href,i)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,Lo=we?.fetch,Ri=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,La=we?.AbortController,ch=we?.CompressionStream,Pe=ke?.userAgent;function Ic(){return!(!v||v.navigator.onLine===!1)}var Fs=typeof globalThis<"u"?globalThis:v;Fs&&typeof self>"u"&&(Fs.self=Fs),Fs&&typeof File>"u"&&(Fs.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Oa(t,e,s,r,n,i,o){try{var a=t[i](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,n)}function X(t){return function(){var e=this,s=arguments;return new Promise((function(r,n){var i=t.apply(e,s);function o(l){Oa(i,r,n,o,a,"next",l)}function a(l){Oa(i,r,n,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 Cc(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 Da=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Ba(t){return typeof t=="string"||t}function ja(t){return typeof t=="string"?t:void 0}var Ps,uh=["$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})({}),Ua=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),dh=["$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"],hh=["token"],Fc="NativeGzipValidationError",Ti=t=>t.length>=2&&t[0]===31&&t[1]===139,Ha=(t,e)=>t===Ua.GZipJS||e===Ua.GZipJS||e==="gzip",Wa=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",wr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Fc,e},ph=(function(){var t=X((function*(e,s){18>e.size&&wr("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());Ti(r)&&r[2]===8||wr("invalid-header");var n=new DataView(yield e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Ps)return Ps;Ps=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Ps[c]=d>>>0}return Ps})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&wr("invalid-crc");var i=s.length>>>0;n.getUint32(4,!0)!==i&&wr("invalid-size")}));return function(e,s){return t.apply(this,arguments)}})();function Ni(){return Ni=X((function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),n=new globalThis.CompressionStream("gzip"),i=n.writable.getWriter(),o=i.write(r).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(n.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield ph(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Ni.apply(this,arguments)}var fh=["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"],za=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return fh.concat(e).some((r=>{var n=r.toLowerCase();return s.indexOf(n)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var An=function(t){return t.trim()},Mi=function(t){return t.replace(/^\$/,"")};function Pc(t){var e,s=[];return(e=JSON.stringify(t,(function(r,n){if(typeof n=="bigint")return n.toString();if(typeof n!="function"&&typeof n!="symbol"){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(n))return"[Circular]";s.push(n)}return n}})))!==null&&e!==void 0?e:"null"}var Ac=Object.prototype,$c=Ac.hasOwnProperty,$n=Ac.toString,L=Array.isArray||function(t){return $n.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($c.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>$n.call(t)=="[object String]",Li=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>$n.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>$n.call(t)==="[object Boolean]",gh=t=>t instanceof FormData,mh=t=>M(dh,t),vh=t=>M(hh,t);function Rc(t){return t===null||typeof t!="object"}function Vr(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Oo(t){return typeof Event<"u"&&Tc(t,Event)}function Tc(t,e){try{return t instanceof e}catch{return!1}}var _h=[!0,"true",1,"1","yes"],Xn=t=>M(_h,t),yh=[!1,"false",0,"0","no"];function rt(t,e,s,r,n){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: "+n),rt(n||s,e,s,r))}class wh{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(),n=String(e),i=this.tt[n];return i?this.ot(i,r):this.tt[n]=i={tokens:this.it,lastAccess:r},i.tokens===0||(i.tokens--,i.tokens===0&&((s=this.et)==null||s.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Gr="iOS",vt="Android",fs="Tablet",Nc=vt+" "+fs,Mc="iPad",Lc="Apple",Oc=Lc+" Watch",Vs="Safari",gs="BlackBerry",Dc="Samsung",Bc=Dc+"Browser",jc=Dc+" Internet",Gt="Chrome",bh=Gt+" OS",Uc=Gt+" "+Gr,Do="Internet Explorer",Hc=Do+" "+Oe,Bo="Opera",Eh=Bo+" Mini",jo="Edge",Wc="Microsoft "+jo,ds="Firefox",zc=ds+" "+Gr,tr="Nintendo",sr="PlayStation",hs="Xbox",qc=vt+" "+Oe,Vc=Oe+" "+Vs,Bs="Windows",Oi=Bs+" Phone",qa="Nokia",Di="Ouya",Gc="Generic",Sh=Gc+" "+Oe.toLowerCase(),Kc=Gc+" "+fs.toLowerCase(),Bi="Konqueror",Jc="Oculus Browser",Kr="Vivaldi",Yc="Yandex",Jr="Whale",ji="DuckDuckGo",Zc="Pale Moon",Yr="Waterfox",Gs="Brave",Xc="Google Search App",le="(\\d+(\\.\\d+)?)",Qn=new RegExp("Version/"+le),xh=new RegExp(hs,"i"),kh=new RegExp(sr+" \\w+","i"),Ih=new RegExp(tr+" \\w+","i"),Uo=new RegExp(gs+"|PlayBook|BB10","i"),Ch={"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"},Qc=function(t,e,s,r){e=e||"";var n=(function(i){return i!=null&&i.brave?Gs:null})(s);return n||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?Xc:M(t," OPR/")&&M(t,"Mini")?Eh:M(t," OPR/")?Bo:Uo.test(t)?gs:M(t,"IE"+Oe)||M(t,"WPDesktop")?Hc:M(t,"OculusBrowser")?Jc:M(t,Bc)?jc:M(t,jo)||M(t,"Edg/")?Wc:M(t,Kr+"/")?Kr:M(t,"YaBrowser/")?Yc:M(t,Jr+"/")?Jr:M(t,ji+"/")||M(t,"Ddg/")?ji:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?Uc:M(t,"CrMo")||M(t,Gt)?Gt:M(t,vt)&&M(t,Vs)?qc:M(t,"FxiOS")?zc:M(t.toLowerCase(),Bi.toLowerCase())?Bi:M(t,Gs+"/")?Gs:((i,o)=>o&&M(o,Lc)||(function(a){return M(a,Vs)&&!M(a,Gt)&&!M(a,vt)})(i))(t,e)?M(t,Oe)?Vc:Vs:M(t,"PaleMoon/")?Zc:M(t,Yr+"/")?Yr:M(t,ds)?ds:M(t,"MSIE")||M(t,"Trident/")?Do:M(t,"Gecko")?ds:"")},Fh={[Hc]:[new RegExp("rv:"+le)],[Wc]:[new RegExp(jo+"?\\/"+le)],[Gt]:[new RegExp("("+Gt+"|CrMo)\\/"+le)],[Uc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Vs]:[Qn],[Vc]:[Qn],[Bo]:[new RegExp("(Opera|OPR)\\/"+le)],[ds]:[new RegExp(ds+"\\/"+le)],[zc]:[new RegExp("FxiOS\\/"+le)],[Bi]:[new RegExp("Konqueror[:/]?"+le,"i")],[gs]:[new RegExp(gs+" "+le),Qn],[qc]:[new RegExp("android\\s"+le,"i")],[jc]:[new RegExp(Bc+"\\/"+le)],[Jc]:[new RegExp("OculusBrowser\\/"+le)],[Kr]:[new RegExp(Kr+"\\/"+le)],[Yc]:[new RegExp("YaBrowser\\/"+le)],[Jr]:[new RegExp(Jr+"\\/"+le)],[Gs]:[new RegExp(Gs+"\\/"+le)],[ji]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Zc]:[new RegExp("PaleMoon\\/"+le)],[Yr]:[new RegExp(Yr+"\\/"+le)],[Xc]:[new RegExp("GSA\\/"+le)],[Do]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Ph=function(t,e,s,r){var n=Qc(t,e,s,r),i=Fh[n];if(x(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},Va=[[new RegExp(hs+"; "+hs+" (.*?)[);]","i"),t=>[hs,t&&t[1]||""]],[new RegExp(tr,"i"),[tr,""]],[new RegExp(sr,"i"),[sr,""]],[Uo,[gs,""]],[new RegExp(Bs,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Oi,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Bs+" "+Oe,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=Ch[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[Bs,r]}return[Bs,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Gr,[t[3],t[4],t[5]||"0"].join(".")]:[Gr,""]],[/(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/,[bh,""]],[/Linux|debian/i,["Linux",""]]],Ga=function(t){return Ih.test(t)?tr:kh.test(t)?sr:xh.test(t)?hs:new RegExp(Di,"i").test(t)?Di:new RegExp("("+Oi+"|WPDesktop)","i").test(t)?Oi:/iPad/.test(t)?Mc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Oc:Uo.test(t)?gs:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(qa,"i").test(t)?qa:/(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:Nc:new RegExp("(pda|"+Oe+")","i").test(t)?Sh:new RegExp(fs,"i").test(t)&&!new RegExp(fs+" pc","i").test(t)?Kc:""},Ah=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ka(t,e){return typeof(s=t)=="string"&&Ah.test(s)?t:e();var s}function Ct(t){return t&&t.split("#")[0]}function Ho(t,e){var s=setTimeout(t,e);return s?.unref&&s?.unref(),s}function Ja(t,e,s){return eu.apply(this,arguments)}function eu(){return(eu=X((function*(t,e,s){var r;try{return yield Promise.race([t,new Promise(((n,i)=>{r=Ho((()=>{try{s?.(),n()}catch(o){i(o)}}),e)}))])}finally{clearTimeout(r)}}))).apply(this,arguments)}var $h=t=>t instanceof Error,tu={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}},Rh=tu.info;function su(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=>su(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Zr(t){var e=[];for(var s in t){var r=t[s];$e(r)||x(r)||e.push({key:s,value:su(r)})}return e}function Th(t,e){var s=tu[t.level||"info"]||Rh,r=s.text,n=s.number,i=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:i,observedTimeUnixNano:i,severityNumber:n,severityText:r,body:{stringValue:t.body},attributes:Zr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function ru(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 nu(t,e,s,r){return{resourceLogs:[{resource:{attributes:Zr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let Nh=class{constructor(t,e,s,r,n,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=n,this.dt=i,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var s={record:Th(e,this.ut())};this.ht((()=>this.At(s)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var n of s)try{var i=n(r);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;r=i}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,n=0;s.length>0&&r>n;){var i,o;t.ft=0;var a=Math.min(s.length,t.Ct),l=s.slice(0,a),u=nu(l.map((d=>d.record)),t.Lt(),(i=t.vt)!==null&&i!==void 0?i: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:[],n+=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),n=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,n.slice(r)),yield e.dt()}))()}Lt(){return ru(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=Ho((()=>{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 Ja(s,t):yield s}))()}flushWithTimeout(t){var e=this;return X((function*(){var s=e.flush();yield Ja(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 ei=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Ya(t){return String(t)+"000000"}function Za(t,e,s,r){var n="";return r&&(n=Object.keys(r).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(r[i]))).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+n}let Mh=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s?.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 n=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return n.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=Za(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 n=this.Bt.get(r);if(!n){if(!this.Qt())return;n={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,n)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(n,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(ei.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(n,i){for(var o=0;i.length>o;o++)if(i[o]>=n)return o;return i.length})(e,ei)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var n of s)try{var i=n(r);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;r=i}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=Ho((()=>{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(i,o,a){return w({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),n=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Zr(s)},scopeMetrics:[{scope:{name:r,version:n},metrics:e}]}]};var e,s,r,n}Xt(t){var e=Ya(Date.now()),s=new Map;for(var r of t.values()){var n,i=Za(r.type,r.name,r.unit,void 0),o=s.get(i);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(i,o));var a=Zr((n=r.attributes)!==null&&n!==void 0?n:{}),l=Ya(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:ei})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var n=r[0],i=r[1],o=this.Bt.get(n);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=i.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(n,i)}}};var br,Xa,ti;function Lh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return ti&&s.length===Xa||(Xa=s.length,ti=s.reduce(((r,n)=>{br||(br={});var i=br[n];if(i)r[i[0]]=i[1];else for(var o=t(n),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[n];if(u&&c){r[u]=c,br[n]=[u,c];break}}return r}),{})),ti}}class Oh{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"},n=this.buildCoercingContext(r,s,0).apply(e),i=this.buildParsingContext(s),o=this.parseStacktrace(n,i);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,n;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(n=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),w({},e,{cause:r,stack:n})}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 n of s.modifiers)r=yield n(r);return r}))()}convertToExceptionList(e,s){var r,n,i,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(n=s.handled)===null||n===void 0||n,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,w({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:Lh(this.stackParser),skipFirstLines:(s=e.skipFirstLines)!==null&&s!==void 0?s:1}}buildCoercingContext(e,s,r){r===void 0&&(r=0);var n=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(i,a)}};return w({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:i=>n(i,r),next:i=>n(i,r+1)})}}var ms="?";function Ui(t,e,s,r,n){var i={platform:t,filename:e,function:s===""?ms:s,in_app:!0};return x(r)||(i.lineno=r),x(n)||(i.colno=n),i}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]},Dh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Bh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,jh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Uh=(t,e)=>{var s=Dh.exec(t);if(s)return Ui(e,s[1],ms,+s[2],+s[3]);var r=Bh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var n=jh.exec(r[2]);n&&(r[2]=n[1],r[3]=n[2],r[4]=n[3])}var i=iu(r[1]||ms,r[2]);return Ui(e,i[1],i[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},Hh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Wh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,zh=(t,e)=>{var s=Hh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=Wh.exec(s[3]);r&&(s[1]=s[1]||"eval",s[3]=r[1],s[4]=r[2],s[5]="")}var n=s[3],i=s[1]||ms,o=iu(i,n);return Ui(e,n=o[1],i=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Qa=/\(error: (.*)\)/;class qh{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 Vr(e,"DOMException")}isDOMError(e){return Vr(e,"DOMError")}}class Vh{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 Tc(s,Error)}})(e)}coerce(e,s){return{type:this.getType(e),value:this.getMessage(e,s),stack:this.getStack(e),cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,s){var r=e.message;return String(r.error&&typeof r.error.message=="string"?r.error.message:r)}getStack(e){return e.stacktrace||e.stack||void 0}}class Gh{constructor(){}match(e){return!!Vr(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,s){var r;if(e.error!=null)return s.apply(e.error);var n=s.apply(e.message);return w({},n,{stack:(r=this.pe(e))!==null&&r!==void 0?r:n.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,n,i=(r=s.lineno)!==null&&r!==void 0?r:0,o=(n=s.colno)!==null&&n!==void 0?n:0;return`Error - at `+s.filename+":"+i+":"+o}}}var Kh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Jh{match(e){return typeof e=="string"}coerce(e,s){var r,n=this.getInfos(e),i=n[0],o=n[1];return{type:i??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,n=e.match(Kh);return n&&(s=n[1],r=n[2]),[s,r]}}var Yh=["fatal","error","warning","log","info","debug"];function ou(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 n=s.slice(0,r).join(", ");if(e>=n.length)return r===s.length?n:n.length>e?n.slice(0,e)+"...":n}return""}class Zh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,n,i=this.getErrorPropertyFromObject(e);return i?s.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(n=s.syntheticException)==null?void 0:n.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Oo(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: "+ou(e)}isSeverityLevel(e){return W(e)&&!Li(e)&&Yh.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($h(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Xh{match(e){return Oo(e)}coerce(e,s){var r,n=e.constructor.name;return{type:n,value:n+" captured as exception with keys: "+ou(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Qh{match(e){return Rc(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 ep{match(e){return Vr(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Oo(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,n=this.getUnhandledRejectionReason(e);return Rc(n)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(n),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(n)}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 Xr="$message",Qr="$timestamp",tp=new Set([Xr,Qr]),si={enabled:!0,max_bytes:32768};function en(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:si.enabled,max_bytes:rp(t.max_bytes,si.max_bytes)}:w({},si)}class sp{constructor(e){this.Ke=[],this.Je=0,this.Ne=en(e)}setConfig(e){this.Ne=en(e),this.Xe()}add(e){var s=(function(n){var i;try{i=Pc(n)}catch{return}try{var o=JSON.parse(i);if(!te(o))return;var a=o,l=a[Xr],u=a[Qr];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:i}}catch{return}})(e);if(s){var r=(function(n){if(typeof TextEncoder<"u")return new TextEncoder().encode(n).length;for(var i=encodeURIComponent(n),o=0,a=0;i.length>a;a++)i[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 rp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var au=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(n){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||s)&&!x(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[n])?v.console[n].__rrweb_original__:v.console[n],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("debug",...i)},info(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("log",...i)},warn(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("warn",...i)},error(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("error",...i)},critical(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(n){r.error("You must initialize PostHog before calling "+n)},createLogger:(n,i)=>au(t+" "+n,i)};return r},k=au("[PostHog.js]"),se=k.createLogger,np=se("[ExternalScriptsLoader]"),ri=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return np.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 n,i=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(n=i())return n.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 n="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;n=n+"&t="+Math.floor(Date.now()/i)*i}r=t.requestRouter.endpointFor("assets",n)}ri(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");ri(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);ri(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var lu="$people_distinct_id",rr="$device_id",ni="$device_model",js="__alias",Us="__timers",Hi="$autocapture_disabled_server_side",Wi="$heatmaps_enabled_server_side",zi="$exception_capture_enabled_server_side",qi="$error_tracking_suppression_rules",Vi="$error_tracking_capture_extension_exceptions",Gi="$web_vitals_enabled_server_side",Wo="$dead_clicks_enabled_server_side",zo="$product_tours_enabled_server_side",Ki="$web_vitals_allowed_metrics",Vt="$session_recording_remote_config",cu="$replay_sample_rate",uu="$replay_override_sampling",du="$replay_override_linked_flag",hu="$replay_override_url_trigger",pu="$replay_override_event_trigger",cs="$sesid",qo="$session_is_sampled",Bt="$enabled_feature_flags",Hs="$active_feature_flags",Tr="$early_access_features",Ji="$feature_flag_details",Ws="$feature_flag_payloads",Nr="$feature_flag_request_id",tn="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Yi="$surveys",sn="$surveys_loaded_at",Zi="$surveys_activated",Mr="$surveys_activated_session",Lr="$surveys_activated_timestamps",zs="ph_product_tours",Wt="$flag_call_reported",qs="$flag_call_reported_session_id",Or="$feature_flag_errors",Ks="$feature_flag_evaluated_at",He="$user_state",Xi="$client_session_props",Qi="$capture_rate_limit",eo="$initial_campaign_params",to="$initial_referrer_info",rn="$initial_person_info",nn="$epp",Er="$posthog_cookieless",fu="$cookieless_mode",gu="$sdk_debug_extensions_init_method",mu="$sdk_debug_extensions_init_time_ms",vu="$sdk_debug_recording_script_not_loaded",Vo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",ts="anonymous",Tt="identified",so="identified_only",on="visibilitychange",an="beforeunload",os="$pageview",ii="$pageleave",oi="$identify",el="$groupidentify";function Sr(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(gh(t))t.forEach(((r,n)=>e(r,n)));else for(var s in t)$c.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 n of s)for(var i in n)n[i]!==void 0&&(t[i]=n[i]);return t};function Dr(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 tl=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(n){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(n)}}},Go=function(t){var e={};return Z(t,(function(s,r){(W(s)&&s.length>0||he(s))&&(e[r]=s)})),e},op=["herokuapp.com","vercel.app","netlify.app"];function ap(t){var e=t?.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of op)if(s===r)return!1;return!0}function ne(t,e,s,r){var n=r??{},i=n.capture,o=n.passive;t?.addEventListener(e,s,{capture:i!==void 0&&i,passive:o===void 0||o})}function ro(t){return t.name==="ph_toolbar_internal"}var _u=t=>{if(C){try{for(var e=t+"=",s=C.cookie.split(";").filter((i=>i.length)),r=0;s.length>r;r++){for(var n=s[r];n.charAt(0)==" ";)n=n.substring(1,n.length);if(n.indexOf(e)===0)return decodeURIComponent(n.substring(e.length,n.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 ln{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,n){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(n)||0>e||0>s||0>r||0>n||e>0xffffffffffff||s>4095||r>1073741823||n>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|s>>>8,i[7]=s,i[8]=128|r>>>24,i[9]=r>>>16,i[10]=r>>>8,i[11]=r,i[12]=n>>>24,i[13]=n>>>16,i[14]=n>>>8,i[15]=n,new ln(i)}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 ln(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 lp{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 ln.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new cp}}var sl,yu=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&&(yu=t=>crypto.getRandomValues(t));class cp{nextUint32(){return this.R.length>this.O||(yu(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>up().toString(),up=()=>(sl||(sl=new lp)).generate(),As="",dp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:_u,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,n){if(!C)return!1;try{var i="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),As)return As;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),b="dmn_chk_"+dt();!As&&_--;){var E=m.slice(_).join("."),I=b+"=1;domain=."+E+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(b)&&(g.cookie=I+";max-age=0",As=E)}return As})(c);if(!h){var p=(f=>{var g=f.match(dp);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),i="; expires="+l.toUTCString()}n&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; 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}}},ai=null,Q={N(){if(!$e(ai))return ai;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"),ai=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)}}},hp=[rr,"distinct_id",cs,qo,nn,rn,He],xr={},pp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>xr[t]||null,H:t=>xr[t]||null,F:(t,e)=>(xr[t]=e,!0),q(t){delete xr[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 fp{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 Xn(e)?1:M(yh,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(Xn(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=>Xn(e)))}}function wu(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Se(r))return e;try{var n=r(e);return W(n)&&n?n:e}catch(i){return k.error("Error in get_current_url, falling back to window.location.href",i),e}}var bu="__POSTHOG_TOOLBAR__",gp=1,mp=3,vp=11;function rl(t){return t instanceof Element&&(t.id===bu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===gp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Eu(t){return!!t&&t.nodeType===mp}function Su(t){return!!t&&t.nodeType===vp&&Ft(t.host)}var xu=1e3;function Ko(t){return t?An(t).split(/\s+/):[]}function nl(t,e){var s=(function(r){var n,i=v==null||(n=v.location)==null?void 0:n.href;return x(i)?void 0:wu(r,i)})(e);return!!(s&&t&&t.some((r=>s.match(r))))}function cn(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 Ko(e)}function ku(t){return D(t)?null:An(t).split(/(\s+)/).filter((e=>Js(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function nr(t){var e="";return io(t)&&!Pu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(s){var r;Eu(s)&&s.textContent&&(e+=(r=ku(s.textContent))!==null&&r!==void 0?r:"")})),An(e)}function li(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Jo=["a","button","form","input","select","textarea","label"];function no(t,e){if(x(e))return!0;var s,r=function(i){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}})(i,o))))return{v:!0}};for(var n of t)if(s=r(n))return s.v;return!1}function Iu(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var _p=[".ph-no-autocapture","[data-ph-no-autocapture]"],Cu=["next","previous","prev",">","<"],yp=[...Cu,"+","-","−","–"],il=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,ol=[".ph-no-rageclick",".ph-no-capture"],wp=["","text","search","email","password","url","tel","number"];function al(t,e){if(!v||Yo(t))return!1;var s,r,n,i,o;if(Ke(e)?(s=!!e&&ol,r=void 0,n=!1):(s=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:ol,r=e?.content_ignorelist,n=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||n&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(wp,(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=Fu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Cu;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:nr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!no(a,s)}var Yo=t=>!t||Me(t,"html")||!Ft(t),Fu=(t,e)=>{if(!v||Yo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],n=t;n.parentNode&&!Me(n,"body");)if(Su(n.parentNode))r.push(n.parentNode.host),n=n.parentNode.host;else{var i=Iu(n);if(!i)break;if(e||Jo.indexOf(i.tagName.toLowerCase())>-1)s=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(i),n=i}return{parentIsUsefulElement:s,targetElementList:r}};function io(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Me(r,"body");r=r.parentNode){if(s++>=xu||e.has(r))return!1;e.add(r);var n=cn(r);if(M(n,"ph-sensitive")||M(n,"ph-no-capture"))return!1}if(M(cn(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 Pu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var ll=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}))$"),cl=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,bp=[16,15,14,13],Ep=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),ul=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),dl=/[0-9A-Za-z_]/;function Sp(t){for(var e=0,s=!1,r=t.length-1;r>=0;r--){var n=t.charCodeAt(r)-48;s&&(n*=2)>9&&(n-=9),e+=n,s=!s}return e%10==0}function Js(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=An(t);var s=e?ll.test((t||"").replace(/[- ]/g,"")):(function(n){var i;for(cl.lastIndex=0;i=cl.exec(n);){var o=i[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of bp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(ll.test(d)&&Sp(d))return!0}}}return!1})(t);if(s)return!1;var r=e?Ep.test(t):(function(n){var i;for(ul.lastIndex=0;i=ul.exec(n);){var o=i[1],a=i[3];if(!(o&&a&&dl.test(o)&&dl.test(a)))return!0}return!1})(t);if(r)return!1}return!0}function hl(t){var e=nr(t);return Js(e=(e+" "+Au(t)).trim())?e:""}function Au(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 n=nr(s);e=(e+" "+n).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+Au(s)).trim())}catch(i){k.error("[AutoCapture]",i)}})),e}function pl(t){return t.replace(/"|\\"/g,'\\"')}function xp(t){var e=t.attr__class;if(e)return L(e)?e:Ko(e)}var kr=se("[Dead Clicks]"),kp=()=>!0,Ip=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Wo)),r=t.instance.config.capture_dead_clicks;return Ke(r)?r:!!te(r)||s};class fl{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({[Wo]: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",(n=>{n?kr.error("failed to load script",n):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),kr.info("starting...")}}else kr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,kr.info("stopping..."))}}var ci=se("[SegmentIntegration]"),$u="posthog-js";function Ru(t,e){var s=e===void 0?{}:e,r=s.organization,n=s.projectId,i=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 _,b=((d=c.exception)==null?void 0:d.values)||[],E=b.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=b[0])==null?void 0:h.value)||c.message,$exception_type:(p=b[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:E,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=b[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=b[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&n&&(I.$sentry_url=(i||"https://sentry.io/organizations/")+r+"/issues/?project="+n+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Cp{constructor(e,s,r,n,i,o){this.name=$u,this.setupOnce=function(a){a(Ru(e,{organization:s,projectId:r,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class gl{constructor(e){this.li=(s,r,n)=>{n&&(n.noSessionId||n.activityTimeout||n.sessionPastMaximumLength||n.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:n}),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,n=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(),n}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 n={$pageview_id:s,$prev_pageview_id:r.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.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;n=ee(n,{$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&&(n.$prev_pageview_pathname=r.pathname),r.timestamp&&(n.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),n}}var ui=["flags","surveys"],Fp={[lu]:{exposure:"hidden"},[js]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Us]:{exposure:"hidden"},[Hi]:{exposure:"event"},[Wi]:{exposure:"hidden"},[zi]:{exposure:"event"},[qi]:{exposure:"hidden"},[Vi]:{exposure:"event"},[Gi]:{exposure:"event"},[Wo]:{exposure:"event"},[zo]:{exposure:"hidden"},[Ki]:{exposure:"event"},[Vt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cs]:{exposure:"hidden"},[qo]:{exposure:"event"},[cu]:{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"},[Hs]:{exposure:"hidden",storageGroup:"flags"},[Tr]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"flags"},[Ws]:{exposure:"hidden",storageGroup:"flags"},[Nr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[tn]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Yi]:{exposure:"hidden",storageGroup:"surveys"},[sn]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Zi]:{exposure:"event"},[Mr]:{exposure:"hidden"},[Lr]:{exposure:"hidden"},[zs]:{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"},[qs]:{exposure:"hidden"},[Or]:{exposure:"hidden"},[Ks]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[to]:{exposure:"hidden"},[rn]:{exposure:"hidden"},[nn]:{exposure:"hidden"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[pu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},[vu]:{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"}},Pp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Fp[t];if(e)return e;for(var s of Pp){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 Pc(t)}},un=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("&"),n=0;r.length>n;n++){var i=r[n].split("=");if(i[0]===e){s=i;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("#"),n=r[1],i=(r[0]||"").split("?"),o=i[1],a=i[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("&")),n!=null&&(h+="#"+n),h},dn=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},Tu=(t,e)=>t>=e&&Ic(),Nu=(t,e,s,r)=>{if(t===0){if(Ic()){var n=e+1;return n===s&&r(),n}return e}return 0},Ir="https?://(.*)",_s=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Ap=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._s],or="",$p=["li_fat_id"];function Mu(t,e,s){if(!C)return{};var r,n=e?[..._s,...s||[]]:[],i=Lu(ir(C.URL,n,or),t),o=(r={},Z($p,(function(a){var l=_u(a);r[a]=l||null})),r);return ee(o,i)}function Lu(t,e){var s=Ap.concat(e||[]),r={};return Z(s,(function(n){var i=vs(t,n);r[n]=i||null})),r}function Ou(t){var e=(function(i){return i?i.search(Ir+"google.([^/?]*)")===0?"google":i.search(Ir+"bing.com")===0?"bing":i.search(Ir+"yahoo.com")===0?"yahoo":i.search(Ir+"duckduckgo.com")===0?"duckduckgo":null:null})(t),s=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var n=C?vs(C.referrer,s):"";n.length&&(r.ph_keyword=n)}return r}function ml(){return navigator.language||navigator.userLanguage}var hn="$direct";function Du(){return C?.referrer||hn}function Bu(t,e,s){s===void 0&&(s=!1);var r=t?[..._s,...e||[]]:[],n=s?Ct(re?.href):re?.href,i=n?.substring(0,1e3);return{r:Du().substring(0,1e3),u:i?ir(i,r,or):void 0}}function ju(t,e){var s;e===void 0&&(e=!1);var r=t.r,n=t.u,i=e?Ct(n):n,o={$referrer:r,$referring_domain:r==null?void 0:r==hn?hn:(s=un(r))==null?void 0:s.host};if(i){o.$current_url=i;var a=un(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Lu(i);ee(o,l)}if(r){var u=Ou(r);ee(o,u)}return o}function Uu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Rp(){try{return new Date().getTimezoneOffset()}catch{return}}var Tp={flags:Ks,surveys:sn},Np=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],ss="main";class di{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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.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 n=()=>this.flush();ne(v,"beforeunload",n,{capture:!1}),ne(v,"pagehide",n,{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){Np.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=[...hp,...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),n=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(s=Q,n=!0):i==="localstorage+cookie"&&r.N()?(s=r,n=!0):i==="sessionstorage"&&ce.N()?s=ce:i==="memory"?s=pp:i==="cookie"?s=pt:r.N()?(s=r,n=!0):s=pt,this.fi=n,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 n=Mt(r);if(!n||n.exposure==="event"){if(n!=null&&n.shouldSkipFromEventProperties!=null&&n.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 ui){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=Tp[e];if(!r)return!1;var n=s[r],i=this.props[r];return he(n)&&he(i)&&i>n}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Mt(e))==null?void 0:s.storageGroup:void 0,n=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(n&&e in n)this.Pi(e,n[e]);else{if(r){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[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 n of(this.Oi(this.ii,this.yi,s,ss),ui)){var i,o=r[n];(!mt(o)||(i=this.ci[n])!=null&&i.persisted)&&this.Oi(Q,this.Si(n),o,n)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,((r,n)=>{var i,o=(i=Mt(n))==null?void 0:i.storageGroup;o?s[o][n]=r:e[n]=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,((n,i)=>{var o;r[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":n})),JSON.stringify(r)}Oi(e,s,r,n){var i=this.Mi(n);if(n===ss||i.dirty||x(i.fingerprint)){var o;try{if((o=this.Ei(r,n))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,n!==ss&&(i.persisted=!0),x(o)||(i.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 n of ui)Q.q(this.Si(n));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 n=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,i),n=!0)})),n)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,((n,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==n||te(n)||L(n))&&(this.Pi(i,n),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var n of s)n in this.props&&(this.Ri(n),r=!0);r&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var s=Mu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Go(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Ou(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Du(),$referring_domain:C!=null&&C.referrer&&((e=un(C.referrer))==null?void 0:e.host)||hn},void 0)}set_initial_person_info(){this.props[eo]||this.props[to]||this.register_once({[rn]:Bu(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([to,eo],(n=>{var i=this.props[n];i&&Z(i,(function(o,a){e["$initial_"+Mi(a)]=o}))}));var s=this.props[rn];if(s){var r=(function(n,i){i===void 0&&(i=!1);var o=ju(n,i),a={};return Z(o,(function(l,u){a["$initial_"+Mi(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 n=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||[]),i=n?this.bi(e):this.ii,o=this.wi(e);if(n||o!==this.pi){var a=this.props;this.clear(),this.ii=i,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[Us]||{};r[e]=s,this.Pi(Us,r),this.save()}remove_event_timer(e){var s=this.props[Us]||{},r=s[e];return x(r)||(delete s[e],this.Pi(Us,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 Cr(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"},$s={Activation:"events",Cancellation:"cancelEvents"},hi={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},pi={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},oo={Popover:"popover",Inline:"inline"},Mp={SHOWN:"product tour shown"},vl={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},_l=se("[RateLimiter]");class Lp{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((n=>{_l.info((n||"events")+" is quota limited."),this.serverLimits[n]=new Date().getTime()+6e4}))}catch(n){return void _l.warn('could not rate limit - continuing. Error: "'+n?.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,n;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(Qi))!==null&&s!==void 0?s:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(n=this.instance.persistence)==null||n.set_property(Qi,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,n=this.captureEventsBurstLimit,i=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 "+i+" events per second and "+n+" 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(n){xt.error("Error applying remote config",n)}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(n){xt.error("Error loading feature flags",n)}}}var qe=Uint8Array,Ae=Uint16Array,ys=Uint32Array,Zo=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]),Xo=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]),yl=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wu=function(t,e){for(var s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var i=s[r];s[r+1]>i;++i)n[i]=i-s[r]<<5|r;return[s,n]},zu=Wu(Zo,2),ao=zu[1];zu[0][28]=258,ao[258]=28;for(var wl=Wu(Xo,0)[1],qu=new Ae(32768),ie=0;32768>ie;++ie){var rs=(43690&ie)>>>1|(21845&ie)<<1;qu[ie]=((65280&(rs=(61680&(rs=(52428&rs)>>>2|(13107&rs)<<2))>>>4|(3855&rs)<<4))>>>8|(255&rs)<<8)>>>1}var Ys=function(t,e,s){for(var r=t.length,n=0,i=new Ae(e);r>n;++n)++i[t[n]-1];var o,a=new Ae(e);for(n=0;e>n;++n)a[n]=a[n-1]+i[n-1]<<1;for(o=new Ae(r),n=0;r>n;++n)o[n]=qu[a[t[n]-1]++]>>>15-t[n];return o},Jt=new qe(288);for(ie=0;144>ie;++ie)Jt[ie]=8;for(ie=144;256>ie;++ie)Jt[ie]=9;for(ie=256;280>ie;++ie)Jt[ie]=7;for(ie=280;288>ie;++ie)Jt[ie]=8;var pn=new qe(32);for(ie=0;32>ie;++ie)pn[ie]=5;var Op=Ys(Jt,9),Dp=Ys(pn,5),Vu=function(t){return(t/8>>0)+(7&t&&1)},Gu=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},Rs=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},fi=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var n=s.length,i=s.slice();if(!n)return[new qe(0),0];if(n==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!=n-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=i[0].s;for(r=1;n>r;++r)i[r].s>h&&(h=i[r].s);var p=new Ae(h+1),f=lo(s[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var b=i[r].s;if(e>=p[b])break;g+=_-(1<>>=m;g>0;){var E=i[r].s;e>p[E]?g-=1<=0&&g;--r){var I=i[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},lo=function(t,e,s){return t.s==-1?Math.max(lo(t.l,e,s+1),lo(t.r,e,s+1)):e[t.s]=s},bl=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new Ae(++e),r=0,n=t[0],i=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==n&&a!=e)++i;else{if(!n&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(n),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(n);i=1,n=t[a]}return[s.subarray(0,r),e]},Ts=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},co=function(t,e,s){var r=s.length,n=Vu(e+2);t[n]=255&r,t[n+1]=r>>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var i=0;r>i;++i)t[n+i+4]=s[i];return 8*(n+4+r)},El=function(t,e,s,r,n,i,o,a,l,u,c){ot(e,c++,s),++n[256];for(var d=fi(n,15),h=d[0],p=d[1],f=fi(i,15),g=f[0],m=f[1],_=bl(h),b=_[0],E=_[1],I=bl(g),F=I[0],P=I[1],B=new Ae(19),S=0;b.length>S;++S)B[31&b[S]]++;for(S=0;F.length>S;++S)B[31&F[S]]++;for(var A=fi(B,7),R=A[0],N=A[1],T=19;T>4&&!R[yl[T-1]];--T);var O,J,z,H,oe=u+5<<3,pe=Ts(n,Jt)+Ts(i,pn)+o,Ie=Ts(n,h)+Ts(i,g)+o+14+3*T+Ts(B,R)+(2*B[16]+3*B[17]+7*B[18]);if(pe>=oe&&Ie>=oe)return co(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){O=Ys(h,p),J=h,z=Ys(g,m),H=g;var _e=Ys(R,N);for(ot(e,c,E-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[yl[S]]);c+=3*T;for(var Ce=[b,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=Op,J=Jt,z=Dp,H=pn;for(S=0;a>S;++S)if(r[S]>255){var me;Rs(e,c,O[257+(me=r[S]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,r[S]>>>23&31),c+=Zo[me]);var ge=31&r[S];Rs(e,c,z[ge]),c+=H[ge],ge>3&&(Rs(e,c,r[S]>>>5&8191),c+=Xo[ge])}else Rs(e,c,O[r[S]]),c+=J[r[S]];return Rs(e,c,O[256]),c+J[256]},Bp=new ys([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),jp=(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})(),gi=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function Up(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=jp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),r=t.length;s.p(t);var n,i,o,a,l,u=(a=10+((n=e).filename&&n.filename.length+1||0),l=8,(function(d,h,p,f,g,m){var _=d.length,b=new qe(f+_+5*(1+Math.floor(_/7e3))+g),E=b.subarray(f,b.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=co(E,I,d.subarray(F,P)):(E[F]=!0,I=co(E,I,d.subarray(F,_)))}else{for(var B=Bp[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=El(d,E,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,Is=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,vr=Math.min(32767,F),_r=Math.min(258,Rt);vr>=Be&&--Is&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;_r>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var yr=Math.min(Be,je-2),Qt=0;for(de=0;yr>de;++de){var es=F-Be+de+32768&32767,Cs=es-N[es]+32768&32767;Cs>Qt&&(Qt=Cs,Ye=es)}}}Be+=(ge=Ye)-(Ye=N[ge])+32768&32767}if(St){H[Ce++]=268435456|ao[Ve]<<18|wl[St];var Na=31&ao[Ve],Ma=31&wl[St];_e+=Zo[Na]+Xo[Ma],++oe[257+Na],++pe[Ma],Re=F+Ve,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=El(d,E,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Gu(b,0,f+Vu(I)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&gi(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),gi(u,c-8,s.d()),gi(u,c-4,r),u}var Hp=!!Ri||!!Lo,Ku="text/plain",Br=!1,Ju=(t,e)=>{var s=t.split("#"),r=s[1],n=s[0].split("?"),i=n[0],o=n[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(r?"#"+r:"")},Rn=function(t,e,s){var r;s===void 0&&(s=!0);var n=t.split("?"),i=n[0],o=n[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?i+"?"+l.join("&"):i},mi=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===xe.GZipJS){var r=Up((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 Gu(c,0,d)})(us(e)),{mtime:0});return{contentType:Ku,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===xe.Base64){var n=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(us(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:us(a)))(n);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=us(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Yu=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:Rn(t.url,{compression:xe.Base64}),encodedBody:mi(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ju(t.url,"compression"),encodedBody:mi(w({},t,{compression:void 0,Ji:void 0}))};try{e=mi(t)}catch(n){if(Ha(t.compression,vs(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",n),r();throw n}return e&&Ha(t.compression,vs(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?Ti(new Uint8Array(s)):ArrayBuffer.isView(s)&&Ti(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Br=!0,r()):{url:t.url,encodedBody:e}},Zu=t=>{try{return Yu(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Wp=(function(){var t=X((function*(e){var s=us(e.data),r=yield(function(i,o,a){return Ni.apply(this,arguments)})(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var n=yield r.arrayBuffer();return w({},e,{Ji:{contentType:Ku,body:n,estimatedSize:n.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),zp=/Failed to fetch|NetworkError|Load failed/i,Xu=t=>t?.name==="TypeError"&&zp.test(t?.message||""),Qu=t=>{var e=Zu(t);if(e){var s=e.url,r=e.encodedBody,n=r??{},i=n.contentType,o=n.body,a=n.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);var u=null,c=!1;if(La){var d=new La;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"||Xu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Lo(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)}}},uo=t=>{try{var e,s=Yu(t),r=s.url,n=s.encodedBody,i=n??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.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 uo(w({},t,{data:d(u.slice(0,c))})),void uo(w({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Qu(w({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},Sl=(t,e,s,r)=>{var n=r==="query"?e==="POST"?"sent_at":"_":void 0;return Rn(s===xe.GZipJS?Ju(t,"compression"):t,w({},n?{[n]:Date.now().toString()}:{},s===xe.GZipJS?{}:{compression:s}))},jr=[];Lo&&jr.push({transport:"fetch",method:Qu}),Ri&&jr.push({transport:"XHR",method(t){var e=Zu(t);if(e){var s=new Ri,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var n=r??{},i=n.contentType,o=n.body;Z(t.headers,(function(a,l){s.setRequestHeader(l,a)})),i&&s.setRequestHeader("Content-Type",i),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&&jr.push({transport:"sendBeacon",method:uo});var ho=3e3;class qp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt(s?.flush_interval_ms||ho,250,5e3,k.createLogger("flush interval"),ho),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 i=s[n],o=new Date().getTime();i.data&&L(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var n 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,n=s,i=(n?n.batchKey:null)||n.url;x(e[i])&&(e[i]=w({},n,{data:[]})),(r=e[i].data)==null||r.push(n.data)})),this.tr=[],e}}var Vp=["retriesPerformedSoFar"];class Gp{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},ne(v,"online",this.vr),ne(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Cc(e,Vp);lt(s)&&(r.url=Rn(r.url,{retry_count:s})),this._instance._send_request(w({},r,{callback:n=>{if(n.statusCode!==200&&(400>n.statusCode||n.statusCode>=500)){if((n.statusCode===0?3:10)>(s??0))return void this.At(w({retriesPerformedSoFar:s},r));n.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(n)}}))}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),n=Date.now()+r;this.tr.push({retryAt:n,requestOptions:e});var i="Enqueued failed request for retry in "+r;navigator.onLine||(i+=" (Browser is offline)"),k.warn(i),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((i=>e>i.retryAt||(s.push(i),!1)));if(this.tr=s,r.length>0)for(var n of r)this.retriableRequest(n.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 Kp{constructor(e){this.yr=()=>{var s,r,n,i;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,(n=this.br.maxContentY)!==null&&n!==void 0?n:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){ne(v,"scroll",this.yr,{capture:!0}),ne(v,"scrollend",this.yr,{capture:!0}),ne(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 Jp=t=>Bu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class xl{constructor(e,s,r,n){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Xi]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=n||Jp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Xi]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?ju(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(Go(this.getSetOnceProps()),((s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Mi(r)]=s})),e}}class Qo{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 n of this.Er["*"]||[])n(e,s)}constructor(){this.Er={}}}var Ns=se("[SessionId]");class kl{on(e,s){return this.Ir.on(e,s)}constructor(e,s,r){var n;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Qo,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 i=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*rt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Ns.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+i+"_window_id",this.Br="ph_"+i+"_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((n=this.Ne.bootstrap)!=null&&n.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){Ns.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 n=s!==this._sessionActivityTimestamp,i=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,i&&!n||i&&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(an,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ne(v,an,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(),n=this.Jr(),i=n[1],o=n[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Ns.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Ns.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Ns.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var b={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((E=>E(i,l,b))),{sessionId:i,windowId:l,sessionStartTimestamp:_,changeReason:c?b: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 ed=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&za(s,e))return!0;try{var r=t?.userAgentData;if(r!=null&&r.brands&&r.brands.some((n=>za(n?.brand,e))))return!0}catch{}return!!t.webdriver};function td(){return(td=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 fn=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 vi(t,e,s){return us({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var sd={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=>fn(s,r))))),not_regex:(t,e)=>e.every((s=>t.every((r=>!fn(s,r))))),icontains:(t,e)=>e.map(Fr).some((s=>t.map(Fr).some((r=>s.includes(r))))),not_icontains:(t,e)=>e.map(Fr).every((s=>t.map(Fr).every((r=>!s.includes(r))))),gt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((n=>r>parseFloat(n)))})),lt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((n=>rt.toLowerCase();function rd(t,e){return!t||Object.entries(t).every((s=>{var r=s[1],n=e?.[s[0]];if(x(n)||$e(n))return!1;var i=[String(n)],o=sd[r.operator];return!!o&&o(r.values,i)}))}var po="custom",Il="i.posthog.com",Yp=/^\/static\//;class Zp{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("."+Il,".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":po),this.en[this.apiHost]}rn(e){if(Yp.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===po)return this.apiHost+s;var n=Il+s;switch(e){case"assets":return"https://"+this.region+"-assets."+n;case"api":return"https://"+this.region+"."+n}}}function nd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=se("[Surveys]"),id="seenSurvey_",od=t=>{try{var e=(s=>((r,n)=>""+id+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(n))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){q.error("Failed to persist survey seen state",s)}},Xp=[hi.Popover,hi.Widget,hi.API],Qp={ignoreConditions:!1,ignoreDelay:!1,displayType:oo.Popover},ef=se("[PostHog ExternalIntegrations]"),tf={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class sf{constructor(e){this._instance=e}ai(e,s){var r;(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,(n=>{if(n)return ef.error("failed to load script",n);s()}))}startIfEnabledOrStop(){var e=this,s=function(){var i,o,a,l=r[0],u=r[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[l]||e.ai(tf[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((n=this._instance.config.integrations)!==null&&n!==void 0?n:{})){var n;s()}}}class rf{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(i){var n=s.sn.get(e.name)===e;n&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',i),n&&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 nf{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 n of e){var i=s?.get_property(n);x(i)||(r[n]=i)}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 Cl="extensionsRemoteConfig";class of{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new nf(e),this.onEvent=s=>Cr(this.instance.on("eventCaptured",(r=>{try{s({event:r.event,properties:r.properties})}catch(n){this.rt.error("Browser extension event listener failed",n)}}))),this.onRemoteConfig=s=>{if(this.an)return Cr((()=>{}));var r=i=>{try{s(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},n=this.instance.dn.on(Cl,r);return this.un&&r(this.un),Cr(n)},this.vn=new rf(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(rr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(rr);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,n,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=i?.sessionId)!==null&&s!==void 0?s:"",windowId:(r=i?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(n=i?.sessionStartTimestamp)!==null&&n!==void 0?n: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 n=this;return X((function*(){r?n.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):n.instance.capture(e,s)}))()}registerDynamicEventProperties(e){return Cr(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Cl,e))}sendRequest(e,s){var r=this;return X((function*(){var n;s===void 0&&(s={});var i=r.instance.requestRouter.endpointFor((n=s.target)!==null&&n!==void 0?n:"api",e),o={method:s.method,url:s.query?Rn(i,s.query):i,data:s.body,headers:s.headers,timeout:s.timeoutMs,fireCallbackOnDrop:!0,transport:s.transport,compression:s.compression,timestampMode:s.sentAt};return s.transport==="sendBeacon"?(r.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,r.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Zs={},_i=0,gn=()=>{},Fl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ms="Surveys module not available",Pl="sanitize_properties is deprecated. Use before_send instead",ad="Invalid value for property_denylist config: ",af=["token","distinct_id",fu],as="posthog",ld=!Hp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,yi=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:ap(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:gn,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:so,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:ho},error_tracking:{},_onCapture:gn},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:yp,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))},lf=[["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"]],Al=t=>{var e={};for(var s of lf){var r=s[0],n=s[1];x(t[r])||(e[n]=t[r])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(i.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?i.property_denylist=t.property_blacklist:L(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(ad+t.property_denylist)),i};class cf{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,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 cf,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Qo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=yi(),this.SentryIntegration=Cp,this.sentryIntegration=r=>(function(n,i){var o=Ru(n,i);return{name:$u,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 Kp(this),this.pageViewManager=new gl(this),this.rateLimiter=new Lp(this),this.requestRouter=new Zp(this),this.consent=new fp(this),this.externalIntegrations=new sf(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,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(o),i?.({})},set_once:(r,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,s,r){if(r&&r!==as){var n,i=(n=Zs[r])!==null&&n!==void 0?n:new Te;return i._init(e,s,r),Zs[r]=i,Zs[as][r]=i,i}return this._init(e,s,r)}_init(e,s,r){var n,i;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=yi(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=yi(s.defaults),u=Al(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 di(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new di(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 qp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Gp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new kl(this),this.sessionPropsManager=new xl(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||(n=s.bootstrap)!=null&&n.distinctID||(s.bootstrap=w({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=s.bootstrap)==null?void 0:i.distinctID)!==void 0){var m=s.bootstrap.distinctID,_=this.get_distinct_id(),b=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&b===ts)this.identify(m);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&b===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 E=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?E: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:Er,$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 ne(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||ci.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()||(ci.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(ci.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,oi),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==gn&&(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 td.apply(this,arguments)})().then((P=>{P&&this.register({[ni]:P})})).catch(gn),this}Fn(){var e,s,r,n,i,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||((n=this.Dn)==null||n.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var s,r,n,i,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=(n=this.logs)!==null&&n!==void 0?n:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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,Ip)),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(i){k.error("Error initializing extension:",i)}}var n=Math.round(performance.now()-s);this.register_for_session({[gu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[mu]:n}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+n+"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,n=e.config;n.supportedCompression&&!this.config.disable_compression&&(this.compression=M(n.supportedCompression,xe.GZipJS)?xe.GZipJS:M(n.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=n.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=n.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:so}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.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 Hu(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Sr(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,s,r,n,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ii),(r=this.logs)==null||r.flushLogs("sendBeacon"),(n=this.In)==null||n.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ii,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ld?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,n,i,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((b=>w({},b,{sent_at:_}))):w({},m,{sent_at:_})})(o.data))),o.url=Sl(o.url,o.method,o.compression,o.timestampMode);var p=jr.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(n=(i=(function(m,_){for(var b=0;m.length>b;b++)if(m[b].transport===h)return m[b]})(p))==null?void 0:i.method)!==null&&n!==void 0?n:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){Xu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&ch&&typeof Promise<"u"&&!Br?Wp(o).then((m=>{g(m)})).catch((m=>{if(Wa(m))return Br=!0,void g(w({},o,{compression:void 0,url:Sl(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var b="name"in _?String(_.name):"";return Wa(_)||b===Fc})(m)&&(Br=!0),g(o)})):f(o)})(w({},e,{callback:s=>{var r,n;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(n=this.config).on_request_error)==null||r.call(n,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){_i++;try{var s,r=[],n=[],i=[];Sr(e,(a=>{if(a)if(L(s=a[0]))i.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])?i.push(a):n.push(a)}));var o=function(a,l){Sr(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(n,this),o(i,this)}finally{_i--}}push(e){if(_i>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 n,i,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=Ka(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(tn)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,b,E,I=g?void 0:this.Vn(r?.$set_once,e!==el,e===oi);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):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=[],Sr(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 uh.forEach(z),O.forEach(z),J})(f.properties,af)),e===ft.DISMISSED||e===ft.SENT){var F=s?.[pi.SURVEY_ID],P=s?.[pi.SURVEY_ITERATION];od({id:F,current_iteration:P}),f.$set=w({},f.$set,{[(_={id:F,current_iteration:P},b=e===ft.SENT?"responded":"dismissed",E="$survey_"+b+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(E="$survey_"+b+"/"+_.id+"/"+_.current_iteration),E)]:!0})}else e===ft.SHOWN&&(f.$set=w({},f.$set,{[pi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Mp.SHOWN){var B=s?.[vl.TOUR_TYPE];B&&(f.$set=w({},f.$set,{[vl.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=Ka(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(n=r?._url)!==null&&n!==void 0?n: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 of(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,n,i){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=i?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[fu]=!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)||Li(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(_r){for(var je=0;Va.length>je;je++){var yr=Va[je],Qt=yr[1],es=yr[0].exec(_r),Cs=es&&(Se(Qt)?Qt(es,_r):Qt);if(Cs)return Cs}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,Is,Be,Fe,vr=ee(Go({$os:H,$os_version:oe,$browser:Qc(Pe,navigator.vendor,pe,Ie),$device:Ga(Pe),$device_type:(Rt=Pe,de=_e,Fe=Ga(Rt),Fe===Mc||Fe===Nc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Kc?fs:Fe===tr||Fe===hs||Fe===sr||Fe===Di?"Console":Fe===Oc?"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,(Is=de?.screenHeight)!==null&&Is!==void 0?Is:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:fs:"Desktop"),$timezone:Uu(),$timezone_offset:Rp()}),{$current_url:ir(S?Ct(re?.href):re?.href,J,or),$host:re?.host,$pathname:re?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Ph(Pe,navigator.vendor,pe,Ie),$browser_language:ml(),$browser_language_prefix:(Ye=ml(),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&&(vr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),vr})(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(i,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===po&&(a.$lib_custom_api_host=this.config.api_host),u=e!==os||i?e!==ii||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,n),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 b of this._n.slice())try{ee(_,b())}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(ad+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var E=this.config.sanitize_properties;E&&(k.error(Pl),a=E(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var n;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var i=this.persistence.get_initial_props(),o=(n=this.sessionPropsManager)==null?void 0:n.getSetOnceProps(),a=ee({},i,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Pl),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 n;(n=this.persistence)==null||n.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,n;return(r=(n=this.featureFlags)==null?void 0:n.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var n;(n=this.featureFlags)==null||n.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var n;(n=this.featureFlags)==null||n.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var n;return s===void 0&&(s=!1),(n=this.featureFlags)==null?void 0:n.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:Ms}),()=>{})}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:Ms})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:Ms})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=Qp),(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:Ms}}canRenderSurveyAsync(e,s){var r,n;return s===void 0&&(s=!1),(r=(n=this.surveys)==null?void 0:n.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Ms})}Jn(e){return!e||Li(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===Er?(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 n=this.get_distinct_id();this.register({$user_id:e}),this.get_property(rr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:n},""),e!==n&&e!==this.get_property(js)&&(this.unregister(js),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||ts)===ts,a=e!==n,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(oi,{distinct_id:e,$anon_distinct_id:n},{$set:s||{},$set_once:r||{}}),this.Sn=vi(e,s,r),(i=this.featureFlags)==null||i.setAnonymousDistinctId(n);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=vi(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=vi(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((n=>W(n)&&n.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 n=this.getGroups(),i=n[e]!==s;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:w({},n,{[e]:s})}),i||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(el,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),i&&!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,n,i,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(rr),g=this.get_property(ni),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(),(n=this.sessionPersistence)==null||n.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[Vt]:m}),(i=this.surveys)==null||i.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:Er,$device_id:null},"");else{var b=this.config.get_device_id(dt());this.register_once({distinct_id:b,$device_id:e?b:f},""),e||x(g)||this.register({[ni]: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,n,i,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(n=s.jn)==null||n.dispose(),(i=s.sessionRecording)==null||i.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,n=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!r)return n;n+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return n}alias(e,s){return e===this.get_property(lu)?(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(js,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,n,i,o,a,l,u,c,d,h,p,f;ee(this.config,Al(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 di(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"))),(n=this.featureFlags)==null||n.updateConfig==null||n.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.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,n,i,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&&((n=this.sessionRecording)==null||n.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.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"),n=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(w({},n,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===so&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[js])&&((s=this.persistence)==null||(s=s.props)==null||!s[nn]))}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(nn,!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,n,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((r=this.persistence)==null||r.set_disabled(i)),((s=this.sessionPersistence)==null?void 0:s.xi)!==i&&((n=this.sessionPersistence)==null||n.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,n,i,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(n=this.pageViewManager)==null||n.destroy(),this.sessionManager=new kl(this),this.pageViewManager=new gl(this),this.persistence&&(this.sessionPropsManager=new xl(this,this.sessionManager,this.persistence));var l,u=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(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(Fl)}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:Er,$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(Fl)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===ht||(this.config.cookieless_mode===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?ed(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(on,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ne(C,on,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,n,i,o){var a=r in s&&!D(s[r]),l=n in s&&!D(s[n]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+n+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[n])})(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(vh),n=L(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of n){if(i=o(i),D(i)){var a="Event '"+e.event+"' was rejected in beforeSend function";return mh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}i.properties&&!mt(i.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(i.properties&&D(i.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 i}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 $l{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 n=this.clicks[this.clicks.length-1];if(n&&Math.abs(e-n.x)+Math.abs(s-n.y)r-n.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 wi="$copy_autocapture",bi=se("[AutoCapture]");function Ei(t,e){return e.length>t?e.slice(0,t)+"...":e}function uf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function df(t,e){var s,r,n=e.e,i=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")&&xu>c.length;)if(Su(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=[],_={},b=!1,E=!1;if(Z(c,(S=>{var A=io(S);if(Me(S,"a")){var R=S.getAttribute("href");b=!!(A&&R&&Js(R))&&(u?Ct(R):R)}M(cn(S),"ph-no-capture")&&(E=!0),m.push((function(T,O,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Jo.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?Ei(1024,hl(T)):Ei(1024,nr(T)));var Ie=cn(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Pu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Js(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=Ko(ge).join(" ")),pe["attr__"+ae.name]=Ei(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=uf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,i,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&&Js(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?hl(t):nr(t)),b){var I,F;m[0].attr__href=b;var P=(I=un(b))==null?void 0:I.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=b)}return{props:ee({$event_type:n.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 Dr(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return z[pl(H[0].toString())]=pl(oe.toString())})),(T+=":")+Dr(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:xp(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Dr(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&&n.type==="click"?{$external_click_url:f}:{},_)}}var Ls=se("[ExceptionAutocapture]"),Rl=()=>{},hf=se("[TracingHeaders]"),Lt=se("[Web Vitals]"),Tl=9e5,Nl="disabled",Ml="lazy_loading",Os="awaiting_config",Pr="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var fo="[SessionRecording]",at=se(fo),pf=se("[Heatmaps]");function Si(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Ar=se("[Product Tours]"),xi=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(zo))},ff=["$set_once","$set"],Ze=se("[SiteApps]"),Ll="Error while initializing PostHog app with config id ";function ns(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 gf{constructor(e){this.ns=new Qo,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,n)=>{this.on(r,n)}))}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 n,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(n=this._instance)==null||n.autocapture.setElementSelectors(i)}}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((n=>{this.cs(s,n)&&this.ns.emit("actionCaptured",n.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,n=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!n||typeof n!="string"||!ns(n,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 n=this.bs(e);if(n.length>0)return n.some((a=>ns(a.href,s.href,s.href_matching||"exact")));var i,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&ns((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var n=this.bs(e);if(n.length>0)return n.some((u=>ns(u.text,s.text,s.text_matching||"exact")||ns(u.$el_text,s.text,s.text_matching||"exact")));var i,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(i=(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",i.some((u=>ns(u,o,a))))}ys(e,s){var r,n;if(s==null||!s.selector)return!0;var i=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(i!=null&&i.includes(s.selector))return!0;var o=(e==null||(n=e.properties)==null?void 0:n.$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||rd(s.properties.reduce(((r,n)=>{var i=L(n.value)?n.value.map(String):n.value!=null?[String(n.value)]:[];return r[n.key]={values:i,operator:n.operator||"exact"},r}),{}),e?.properties)}}class mf{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&&rd(e.propertyFilters,s?.properties)}Ps(e,s){var r=new Map;return e.forEach((n=>{var i;(i=n.conditions)==null||(i=i[s])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(n.id),r.set(o.name,a)}}))})),r}Rs(e,s,r){var n=(r===$s.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>n?.includes(a.id)))})),i.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 n,i;return((n=r.conditions)==null?void 0:n.actions)&&((i=r.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.length)>0}));s.length!==0&&(this.Os==null&&(this.Os=new gf(this._instance),this.Os.init(),this.Os.fs((r=>{this.onAction(r)}))),s.forEach((r=>{var n,i,o,a,l;r.conditions&&(n=r.conditions)!=null&&n.actions&&(i=r.conditions)!=null&&(i=i.actions)!=null&&i.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((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),n=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&n.length===0||((s=this._instance)==null||s._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,$s.Activation),this.ks=this.Ps(e,$s.Cancellation))}onEvent(e,s){var r,n,i=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(n=s.properties)==null?void 0:n.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.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,$s.Cancellation);l.length>0&&(i.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)){i.info("event name matched",{event:e,eventPayload:s,items:this.ws.get(e)});var u=this.Rs(e,s,$s.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()),n=[];for(var i of e)r&&this.Cs(i)?this.qs(i)&&this.Us(i):n.push(i);n.length>0&&(this._s=[...new Set([...this._s,...n])]),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((i=>!s.has(i)));var r=this.Zs(),n=r.filter((i=>!s.has(i)));n.length!==r.length&&(this.Ws(n),n.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={},n=!1;for(var i of Object.entries(s)){var o=i[0],a=i[1];e.includes(o)?n=!0:r[o]=a}n&&(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 n=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return i&&n===i?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 n=this.Zs(),i=this.Qs();n.length>0&&(this.Ws([]),n.filter((o=>he(i[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 vf extends mf{constructor(e){super(e)}Js(){return Zi}Ys(){return Mr}Ms(){return Lr}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Lr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Lr)}Cs(e){var s,r;this.As((i=>{r=i.find((o=>o.id===e))}));var n=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return he(n)&&n>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({[Zi]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Mr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Mr)}ea(){return!1}$s(e,s){var r;this.As((i=>{r=i.find((o=>o.id===s))}));var n=!r||(function(i){var o;return nd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(r);return n?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 $r="SDK is not enabled or survey functionality is not yet loaded",Ol="Disabled. Not loading surveys.",_f=v!=null&&v.location?dn(v.location.hash,"__posthog")||dn(location.hash,"state"):null,Dl="_postHogToolbarParams",Bl=se("[Toolbar]"),jl=se("[FeatureFlags]");class yf{constructor(e,s){s===void 0&&(s=!1),this.na=!1,this.update(e,s)}update(e,s){this.sa=((r,n)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=r.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:n,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||(jl.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)||jl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var Ul=se("[FeatureFlags]"),Ot=se("[FeatureFlags]",{debugEnabled:!0}),ki=`" failed. Feature flags didn't load in time.`,Hl="connection_error",Wl=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},zl=t=>{var e={};for(var s of Dr(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Xe=se("[Error tracking]"),ql="Refusing to render web experiment since the viewer is a likely bot",wf={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>fn(e,t),not_regex:(t,e)=>!fn(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((n=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,n.forEach((i=>{if(i.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=s.oa)==null||o.set(i.feature_flag_key,i));var a=s._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&s.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,s._instance)&&s.la(i.name,l,u.transforms)}}))}),r)},this._instance=e,this._instance.onFeatureFlags((r=>{this.onFeatureFlags(r)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(ql);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 n,i=this._instance.getFeatureFlag(s),o=(n=this.oa)==null?void 0:n.get(s);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].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((n=>{this.ha(parseInt(s),r,n)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var n=this._instance.get_property("$web_experiments");if(n&&!s)return e(n);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,s,r){var n=r.filter((i=>i.id===e));n&&n.length>0&&(ye.aa("Previewing web experiment ["+n[0].name+"] with variant ["+s+"]"),this.la(n[0].name,s,n[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 n=ye.getWindowLocation();if(n){var i,o,a,l=wu(s,n.href);return(i=e.conditions)==null||!i.url||wf[(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=Mu();if(r.utm_source){var n,i,o,a,l,u,c,d,h=(n=e.conditions)==null||(n=n.utm)==null||!n.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.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),n=1;s>n;n++)r[n-1]=arguments[n];k.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(ql):s!=="control"?r.forEach((n=>{if(n.selector){var i;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",n);var o=(i=document)==null?void 0:i.querySelectorAll(n.selector);o?.forEach((a=>{var l=a;n.html&&(l.innerHTML=n.html),n.css&&l.setAttribute("style",n.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?ed(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=se("[Conversations]"),Dt="Conversations not available yet.",Vl="console",cd="__posthogHandledLogsRequestError",Ii=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[cd]=!0,s},Gl=t=>!!t&&typeof t=="object"&&t[cd]===!0,Tn={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=Ul,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 yf(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&&ne(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[Hs,Ws,Nr,et]){var s=this.Oa(e);x(s)||(t[e]=s)}this.fa=t;var r=w({},t),n=this.Oa(Bt);if(n)for(var i of Object.entries(n))r["$feature/"+i[0]]=i[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Ks);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 n,i,o=(n=(i=s.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&n!==void 0?n:{},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,n,i=s!=null&&s.merge&&(r=this.Oa(Bt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(n=this.Oa(Ws))!==null&&n!==void 0?n:{},a=w({},i,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:Ba(h),variant:ja(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(Ji),e=this.Oa(et),s=this.Oa(jt);if(!s&&!e)return t||{};var r=ee({},t||{}),n=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var i of n){var o,a,l=r[i],u=e?.[i],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?.[i],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[i]=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:Ba(r),variant:ja(r),payload:Da(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),n=0;r.length>n;n++)s[r[n]]=e[r[n]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:s}),this.ca=!0),s}getFlagPayloads(){var t=this.Oa(Ws),e=this.Oa(jt);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),n=0;r.length>n;n++)s[r[n]]=e[r[n]];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:Uu()};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 n=this.qa();x(n)||(s.flag_keys=n);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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({[Or]:[Hl]}),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?Hl:"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({[Or]: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:i}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Tu(this.Sa,3)}Ua(t){this.Sa=Nu(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+ki)}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(),n=t in r,i=r[t],o=this.getFlagPayloads()[t],a=String(i),l=this.Oa(Nr)||void 0,u=this.Oa(Ks)||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(qs);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,[qs]:s});else{var f,g,m,_,b,E,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},s?{[qs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Or))!==null&&f!==void 0?f:[]];x(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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||(b=S.metadata)==null?void 0:b.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(E=S==null||(I=S.reason)==null?void 0:I.description)!==null&&E!==void 0?E: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,[qs]:s});if(n)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:Da(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+ki)}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 n={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},i=s.Na();i.length&&(n.evaluation_contexts=i);var o,a=s.qa();x(a)||(n.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:n,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+ki),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(n,i,o,a,l,u){i===void 0&&(i={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=Ul);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)})(n,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=n.requestId,g=n.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{[Hs]:h,[Bt]:m,[tn]:!1}}var b=h,E=p,I=d;if(l!=null&&l.partialResponse)b=w({},i,b),E=w({},o,E),I=w({},a,I);else if(n.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));b=w({},i,Object.fromEntries(Object.entries(b).filter((P=>F.has(P[0]))))),E=w({},o,Object.fromEntries(Object.entries(E||{}).filter((P=>F.has(P[0]))))),I=w({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else b=w({},i,b),E=w({},o,E),I=w({},a,I);return w({[Hs]:Object.keys(zl(b)),[Bt]:b||{},[Ws]:E||{},[Ji]:I||{},[tn]:n.minimalFlagCalledEvents===!0},f?{[Nr]:f}:{},g?{[Ks]: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]:Wl(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={},n=s.flags,i=s.payloads;return n&&(r[et]=L(n)?Wl(n):n),i&&(r[jt]=i),Object.keys(r).length&&this.F(r),n===!1&&i===!1?this.q([et,jt]):n===!1?this.q(et):i===!1&&this.q(jt),this.Va(),n===!1?Ot.info("Flag overrides cleared"):n&&Ot.info("Flag overrides set",{flags:n}),void(i===!1?Ot.info("Payload overrides cleared"):i&&Ot.info("Payload overrides set",{payloads:i}))}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(n){this.rt.error("Error while running feature flags callback",n)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Tr)||[]).find((l=>l.flagKey===t)),n={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:n};r&&(i.$early_access_feature_name=r.name),s&&(i.$feature_enrollment_stage=s);var o=w({},this.getFlagVariants(),{[t]:e});this.F({[Hs]:Object.keys(zl(o)),[Bt]:o,[ct]:w({},this.Oa(ct)||{},n)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).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(Tr);!r||e?this.Qa(t,s):t(r)}Qa(t,e){var s=this;return X((function*(){var r=s.nn;if(r){var n,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Tr]:n=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(n)}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((n=>{try{n(s,r,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}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),n=t?.$set_once,i={};if(n)for(var o in n)({}).hasOwnProperty.call(n,o)&&(o in s||(i[o]=n[o]));this.F({[ct]:w({},s,i,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 n of Object.keys(t))r[n]=w({},s[n],t[n]);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}}},bf={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===Os||this.Ya===Pr?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=Nl,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(fo+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(fo+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ne(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=Nl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Os&&this.Ya!==Pr&&(this.Ya=Ml),$!=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,(n=>{if(n)return at.error("could not load recorder",n);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(qo),(e=this.Mr)==null||e.unregister(cu)}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,n=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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})})};n(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(n)}}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===Os&&(this.Ya=Pr,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({[vu]:!0});var n;if(this.Ja||(this.Ja=(n=$.__PosthogExtensions__)==null?void 0:n.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Pr||this.Ya===Os?void 0:(this.Ya=Os,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Hu(this._instance).load());this.Ya=Ml,(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({[du]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?hu:pu]:!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))}}},Ef={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new $l(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){bi.error("Failed to capture event",r)}};if(ne(C,"submit",t,{capture:!0}),ne(C,"change",t,{capture:!0}),ne(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||v?.event;try{this.bo(s,wi)}catch(r){bi.error("Failed to capture copy/cut event",r)}};ne(C,"copy",e,{capture:!0}),ne(C,"cut",e,{capture:!0})}}}else bi.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({[Hi]: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 n=C?.querySelectorAll(r);n?.forEach((i=>{t===i&&s.push(r)}))})),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Hi],r=this.co,n=this.instance.Qi()&&!this.fo;if($e(r)&&!Ke(s)&&!n)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=li(t);Eu(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())&&al(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var n=e===wi;if(r&&(function(d,h,p,f,g,m){var _;if(!v||Yo(d)||p!=null&&p.url_allowlist&&!nl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&nl(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var b=p.dom_event_allowlist;if(b&&!b.some((S=>h.type===S)))return!1}var E=Fu(d,f),I=E.parentIsUsefulElement,F=E.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)||!no(F,p?.css_selector_allowlist)||no(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:_p))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&&(Jo.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,n,n?["copy","cut"]:void 0,this.instance)){var i=df(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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===wi){var l,u=ku(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,n,i){try{if(!(n in r))return Rl;var o={next:r[n]},a=i((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[n]=a,()=>{if(r[n]!==a)for(var l=r[n];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[n]=o.next}}catch{return Rl}})(v.history,t,(r=>function(n,i,o){r.call(this,n,i,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")};ne(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[Wi]),this.rageclicks=new $l(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;pf.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({[Wi]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Si(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),ne(v,an,this.Po),this.Ro=t=>this.ke(t||v?.event),ne(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ne(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new fl(this.instance,kp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ne(C,on,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(an,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(on,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(),n=this.instance.scrollManager.scrollElement(),i=(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=Iu(u)}return!1})(li(t),["fixed","sticky"],n);return{x:t.clientX+(i?0:r),y:t.clientY+(i?0:s),target_fixed:i,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!rl(t.target)&&Si(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&al(li(t),this.instance.config.rageclick)&&this.Vt(w({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!rl(t.target)&&Si(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||[]]:[],n=ir(e,r,or);this.R=this.R||{},this.R[n]||(this.R[n]=[]),this.R[n].push(t)}}cr(){this.R&&!mt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:fl,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 n=typeof s.navigationURL=="string"?s.navigationURL:void 0,i=this.Bo(n);if(!x(i)){var o=he(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+i;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=i),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,n?{navigationURL:i}:{},{$current_url:i,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,n,i,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,n=l.onFCP,i=l.onINP),s&&r&&n&&i){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&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(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[Gi]),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[Ki])||["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:Tl;return t>0&&6e4>=t?Tl: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({[Gi]:s}),this._instance.persistence.register({[Ki]: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,(n=>{n?Lt.error("failed to load script",n):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,n=this._instance.config.mask_personal_data_properties?[..._s,...r||[]]:[];return ir(s,n,or)}Lt.error("Could not determine current URL")}}},Sf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(v&&this.isEnabled&&(s=$.__PosthogExtensions__)!=null&&s.errorWrappingFunctions){var r=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=n(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(this.captureException.bind(this)))}catch(o){Ls.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[zi]),this.Jo=new wh(w({},(function(s){var r,n,i,o;return s===void 0&&(s={}),{refillRate:(r=(n=s.exceptionRateLimiterRefillRate)!==null&&n!==void 0?n:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(i=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ls})),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?(Ls.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 Ls.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({[zi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,n=(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(n)?Ls.info("Skipping exception capture because of client rate limiting.",{exception:n}):(r=this._instance.exceptions)==null||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,s;this.Xo=[],this.tl=new Oh([new qh,new ep,new Gh,new Vh,new Xh,new Zh,new Jh,new Qh],(function(r){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;n>o;o++)i[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=Qa.test(h)?h.replace(Qa,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of i){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((b=>{return w({},b,{filename:b.filename||(E=_,E[E.length-1]||{}).filename,function:b.function||ms});var E}))})(u)}})("web:javascript",Uh,zh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(qi))!==null&&e!==void 0?e:[],this.el=en(this.il()),this.rl=new sp(this.el)}onConfigChange(){this.el=en(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,s,r;if(t.ok){var n=t.config;if("errorTracking"in n){var i=(e=(s=n.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=n.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[qi]:this.Xo,[Vi]:o})}}}get nl(){var t,e=!!this._instance.get_property(Vi),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(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>tp.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=s.sanitizedProperties,n=s.droppedKeys;n.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:n}),this.rl.add(w({[Xr]:t,[Qr]:new Date().toISOString()},r))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;r&&(s.$release_id=r);try{var n=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return n&&this.rl.clear(),n}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 i}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({[Xr]:t,[Qr]: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 n=r.type,i=r.value;return W(n)&&n.length>0&&s.$exception_types.push(n),W(i)&&i.length>0&&s.$exception_values.push(i),s}),{$exception_types:[],$exception_values:[]});return this.Xo.some((s=>{var r=s.values.map((n=>{var i=sd[n.operator],o=e[n.key];if(!i||!o)return!1;var a=L(n.value)?n.value:[n.value];return a.length>0&&i(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,n,i=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(r=o==null||(n=o.filename)==null?void 0:n.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!D(t)&&L(t)}}},xf=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({[zo]:!!e.productTours}),!xi(this._instance))return!this.vl&&D((s=this.Mr)==null?void 0:s.props[zs])||Ar.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&&xi(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?Ar.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[zs];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:n=>{if(xi(this._instance)){var i=n.statusCode;if(i!==200||!n.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?n.error||Ar.warn(o):Ar.error(o),void t([],{isLoaded:!1,error:o})}var a=L(n.json.product_tours)?n.json.product_tours:[];this.cl=a,s&&s.register({[zs]: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(zs)}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)}}},Tn),kf={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,n,i,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({},Cc(t,ff),{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=(n=t.properties)==null?void 0:n.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",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,n,i,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,_,b)=>{if(m!=null&&m[_]){var E=m[_];m[_]=b(E),c.push((()=>{m[_]=E}))}},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 b=f(_);return b?m.call(this,b):_})),p(u,"insertBefore",(m=>function(_,b){var E=f(_);return E?m.call(this,E,b):_})),p(u,"replaceChild",(m=>function(_,b){var E=f(_);return E?m.call(this,E,b):b})),[(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 b=arguments.length,E=new Array(b),I=0;b>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"prepend",(_=>function(){for(var b=arguments.length,E=new Array(b),I=0;b>I;I++)E[I]=arguments[I];return _.apply(this,g(E))}))})),[(n=l.Element)==null?void 0:n.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var b=arguments.length,E=new Array(b),I=0;b>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"after",(_=>function(){for(var b=arguments.length,E=new Array(b),I=0;b>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"replaceWith",(_=>function(){for(var b=arguments.length,E=new Array(b),I=0;b>I;I++)E[I]=arguments[I];var F=g(E);return E.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,b){var E=f(b);return E?m.call(this,_,E):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var s=this._l();try{var r=t(s);return e&&s(),r}catch(n){throw s(),n}}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,n=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),n(a)}})),!1).processEvent;i&&(e.processEvent=i),r=!0}catch(o){Ze.error(Ll+t.id,o),n(!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(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(s)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var n of Object.values(this.apps))r(n)}}onRemoteConfig(t){var e,s,r,n=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 i=t.config;if((r=i.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=n._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(n._instance,c,(d=>{if(d)return Ze.error(Ll+u,d)}))};for(var a of i.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},If={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 hf.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()}}},Cf=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(n)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ol);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(Vo);r(this._instance,"surveys",(n=>{n||!t.generateSurveys?this.$l("Could not load surveys script",n):this.Dl(t.generateSurveys,e)}))}catch(n){throw this.$l("Error initializing surveys",n),n}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new vf(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(Ol),t([]);var s,r=this._instance.get_property(Yi);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((n=>t(n.surveys,n.context))):(typeof Promise<"u"&&(this.Ll=new Promise((n=>{s=n}))),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:n=>{var i;this.Ll=null;var o=n.statusCode;if(o!==200||!n.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):n.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=n.json.surveys||[],d=c.filter((p=>(function(f){return!(!f.start_date||f.end_date)})(p)&&(nd(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)),(i=this._instance.persistence)==null||i.register({[Yi]:c,[sn]: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(sn);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};od(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((n=>n.id===t)))!==null&&r!==void 0?r:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:$r};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:$r};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:$r};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:$r})):new Promise((s=>{this.getSurveys((r=>{var n,i=(n=r.find((a=>a.id===t)))!==null&&n!==void 0?n:null;if(i){var o=this.zl(i);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 n=typeof t=="string"?this.Hl(t):t;if(n!=null&&n.id)if(Xp.includes(n.type)){var i=C?.querySelector(e);if(i)return(r=n.appearance)!=null&&r.surveyPopupDelaySeconds?(q.info("Rendering survey "+n.id+" with delay of "+n.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+n.id+" with delay of "+((o=n.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(n,i,s),q.info("Survey "+n.id+" rendered")}),1e3*n.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(n,i,s);q.warn("Survey element not found")}else q.warn("Surveys of type "+n.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 n=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(n=w({},r,{appearance:w({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==oo.Popover&&e.initialResponses&&q.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var i=this.Ul(r);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==oo.Inline?this._surveyManager.handlePopoverSurvey(n,e):this.renderSurvey(n,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()}}},Tn),Ff={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),ro(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,n=_f||dn(t.hash,"__posthog")||dn(t.hash,"state"),i=n?tl((()=>JSON.parse(atob(decodeURIComponent(n)))))||tl((()=>JSON.parse(decodeURIComponent(n)))):null;return i&&i.action==="ph_authorize"?((r=i).source="url",r&&Object.keys(r).length>0&&(i.desiredHash?t.hash=i.desiredHash:s?s.replaceState(s.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(Dl)||"{}")).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):Bl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(bu));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(Dl,JSON.stringify(w({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var n;this.Wl(1),(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Bl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(r)})),ne(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)}}},Pf=w({experiments:ye},Tn),Af={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 s=t.loadExternalDependency;if(!s)return void this.eu(Vo);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":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,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()}}},$f={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,n=new Array(r),i=0;r>i;i++)n[i]=arguments[i];n.some(Gl)||s.rt.error(...n)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,n;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(n=this.lu)==null||n.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ne(v,"online",this.au)}uu(t,e,s,r){var n,i=(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,b=x(_)?Math.max(m,2048):Math.max(m,_),E=o?.resourceAttributes;return{serviceName:(d=(h=E?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=E?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=E?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:E,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:b,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((n=this._instance)==null||(n=n.config)==null?void 0:n.logs,s);return[new Nh(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,r),i]}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),(n=>{this.tr=n}));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),(n=>{this.su=n}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},Vl);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){Gl(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(Vo)}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,n){var i;r===ut.LogsQueue&&e((i=n)!==null&&i!==void 0?i:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Tu(this.Sa,3))e({kind:"fatal",error:Ii(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=i=>{s||(s=!0,clearTimeout(n),e(i))},n=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:Ii(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:Ii(i.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=i.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Nu(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,Vl,(e=>{this.su=e}))}xu(t,e,s,r,n){if(e.length!==0){var i=e.map((a=>a.record));n([]);var o=nu(i,ru(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,n=s.sessionStartTimestamp,i=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,D(n)||(e.sessionStartTimestamp=n),D(i)||(e.lastActivityTimestamp=i)}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}}},Rf={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new Mh(this.hu(),(function(r){var n,i,o,a,l,u=r?.resourceAttributes;return{serviceName:(n=u?.["service.name"])!==null&&n!==void 0?n:r?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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,n=o=>{r||(r=!0,clearTimeout(i),s(o))},i=setTimeout((()=>n({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)n({kind:"ok"});else if(a===413)n({kind:"too-large"});else if(a!==0&&a!==429&&500>a)n({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;n({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)}}},Tf=w({},Tn,bf,Ef,Sf,xf,kf,Cf,If,Ff,Pf,Af,$f,Rf);Te.__defaultExtensionClasses=w({},Tf);var ud=(function(){Y.SDK_DIST_CHANNEL="npm";var t=Zs[as]=new Te;return(function(){function e(){e.done||(e.done=!0,ld=!1,Z(Zs,(function(s){s._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ne(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const dd="CodeFile",hd="GeneratedCode",Nf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function go(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Mf(t={},e=0){const s=go(t.artifactType||t.type||dd),r=go(t.artifactName||t.name||t.fileName||`${hd}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function pd(t={},e=0){const s=kt(t),r=s.artifactType||s.type||dd,n=s.artifactName||s.name||hd;let i=s.fileName||n;return i.endsWith(".dart")||(i+=".dart"),{id:go(s.id)||Mf({...s,artifactType:r,artifactName:n,fileName:i},e),artifactType:r,artifactName:n,fileName:i,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:fd(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:gd(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Nf[r]||"O"}}function fd(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 gd(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 mo(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 ar(t,e={}){const s=[],r=typeof t=="string"?mo(t):t,i=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.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)=>pd(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=gd(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:fd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function mn(t){return ar(t).artifacts[0]||pd()}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 Lf(t){return ws({task:"architect",userRequest:String(t??"")})}function Of(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ws(e):ws({task:"generate_bundle",bundleSpec:e})}function Df(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 ea(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function Bf({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:n}){return ws({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(n)})}function md({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 Kl={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"},jf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Uf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function vd(t,e=0){if(!Le(t)||e>3)return null;if(Uf(t))return t;for(const s of jf){const r=t[s];if(Le(r)){const n=vd(r,e+1);if(n)return n}}return null}function vn(t){return Array.isArray(t)?t.some(vn):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(vn):!1}function vo(t){return Array.isArray(t)?t.some(vo):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(vo):!1}function _d(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function Hf(t,e){if(Le(t))for(const[s,r]of Object.entries(t)){if(!Le(r))continue;const n=Le(r.categories)?r.categories:{},i=Object.entries(n).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):r.matched===!0&&e.add(_d(s))}}function Wf(t,e){if(!t)return;const s=Array.isArray(t)?t.flatMap(r=>Le(r)?Object.entries(r):[]):Object.entries(t);for(const[r,n]of s){if(!vn(n))continue;const i=_d(r),o=n?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?n?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>vn(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}function zf(t){return Kl[t]?Kl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Jl(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 qf(t){const e=vd(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Hf(e.filterSummary,s),Wf(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,n=e.invocationResult||null,i=vo(e.filterSummary||e.filterResults);return!r&&!i&&!["PARTIAL","FAILURE"].includes(n)?null:{kind:r?"blocked":"unavailable",invocationResult:n,matchedFilters:[...s]}}function Vf(t,e){const s=qf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(zf))],n=s.kind==="blocked",i=new Error(n?`Safety screening blocked this pipeline step for ${Jl(r)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=n?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=n?"Request blocked for safety":"Safety check unavailable",i.userMessage=n?`The safety check detected ${Jl(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.",i.retryExplanation=n?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=s.matchedFilters,i}function Gf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Yl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of Gf(t).split(` -`)){if(!/^[A-Za-z_$]/.test(r)||e.test(r))continue;const n=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);n&&s.push(n[1])}return s}function ta(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,n,i)=>i.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(n,i,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 Zl(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 Kf(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=ta(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Zl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Zl(c)),s[o]=u,a.type==="F"){const d=Yl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const n=new Set(Yl(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!n.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(i)}}const Jf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Xl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Yf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Zf=["Struct","Record"],Xf=[{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=>Ci(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=>Ci(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 n=r[1];if(!(new RegExp(`this\\.${n}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${n}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=s(n);fetch(n.href,i)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,Mo=we?.fetch,$i=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,n,i,o){try{var a=t[i](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,n)}function X(t){return function(){var e=this,s=arguments;return new Promise((function(r,n){var i=t.apply(e,s);function o(l){La(i,r,n,o,a,"next",l)}function a(l){La(i,r,n,o,a,"throw",l)}o(void 0)}))}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},b.apply(null,arguments)}function 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",Ri=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());Ri(r)&&r[2]===8||yr("invalid-header");var n=new DataView(yield e.slice(e.size-8).arrayBuffer());n.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 i=s.length>>>0;n.getUint32(4,!0)!==i&&yr("invalid-size")}));return function(e,s){return t.apply(this,arguments)}})();function Ti(){return Ti=X((function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),n=new globalThis.CompressionStream("gzip"),i=n.writable.getWriter(),o=i.write(r).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(n.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}})),Ti.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 n=r.toLowerCase();return s.indexOf(n)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Pn=function(t){return t.trim()},Ni=function(t){return t.replace(/^\$/,"")};function Fc(t){var e,s=[];return(e=JSON.stringify(t,(function(r,n){if(typeof n=="bigint")return n.toString();if(typeof n!="function"&&typeof n!="symbol"){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(n))return"[Circular]";s.push(n)}return n}})))!==null&&e!==void 0?e:"null"}var Pc=Object.prototype,Ac=Pc.hasOwnProperty,An=Pc.toString,L=Array.isArray||function(t){return An.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=>An.call(t)=="[object String]",Mi=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>An.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>An.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 Lo(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"],Zn=t=>M(vh,t),_h=[!1,"false",0,"0","no"];function rt(t,e,s,r,n){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: "+n),rt(n||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(),n=String(e),i=this.tt[n];return i?this.ot(i,r):this.tt[n]=i={tokens:this.it,lastAccess:r},i.tokens===0||(i.tokens--,i.tokens===0&&((s=this.et)==null||s.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Vr="iOS",vt="Android",ps="Tablet",Tc=vt+" "+ps,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qs="Safari",fs="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Vt="Chrome",wh=Vt+" OS",jc=Vt+" "+Vr,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",bh=Do+" Mini",Bo="Edge",Hc="Microsoft "+Bo,us="Firefox",Wc=us+" "+Vr,er="Nintendo",tr="PlayStation",ds="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qs,Ds="Windows",Li=Ds+" Phone",za="Nokia",Oi="Ouya",Vc="Generic",Eh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+ps.toLowerCase(),Di="Konqueror",Kc="Oculus Browser",Gr="Vivaldi",Jc="Yandex",Kr="Whale",Bi="DuckDuckGo",Yc="Pale Moon",Jr="Waterfox",Vs="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Xn=new RegExp("Version/"+le),Sh=new RegExp(ds,"i"),xh=new RegExp(tr+" \\w+","i"),kh=new RegExp(er+" \\w+","i"),jo=new RegExp(fs+"|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 n=(function(i){return i!=null&&i.brave?Vs:null})(s);return n||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?bh:M(t," OPR/")?Do:jo.test(t)?fs: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,Gr+"/")?Gr:M(t,"YaBrowser/")?Jc:M(t,Kr+"/")?Kr:M(t,Bi+"/")||M(t,"Ddg/")?Bi: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,qs)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),Di.toLowerCase())?Di:M(t,Vs+"/")?Vs:((i,o)=>o&&M(o,Mc)||(function(a){return M(a,qs)&&!M(a,Vt)&&!M(a,vt)})(i))(t,e)?M(t,Oe)?qc:qs:M(t,"PaleMoon/")?Yc:M(t,Jr+"/")?Jr:M(t,us)?us:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?us:"")},Ch={[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)],[qs]:[Xn],[qc]:[Xn],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[us]:[new RegExp(us+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[Di]:[new RegExp("Konqueror[:/]?"+le,"i")],[fs]:[new RegExp(fs+" "+le),Xn],[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)],[Bi]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Jr]:[new RegExp(Jr+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Fh=function(t,e,s,r){var n=Xc(t,e,s,r),i=Ch[n];if(x(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(ds+"; "+ds+" (.*?)[);]","i"),t=>[ds,t&&t[1]||""]],[new RegExp(er,"i"),[er,""]],[new RegExp(tr,"i"),[tr,""]],[jo,[fs,""]],[new RegExp(Ds,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Li,""];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)?ds:new RegExp(Oi,"i").test(t)?Oi:new RegExp("("+Li+"|WPDesktop)","i").test(t)?Li:/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)?fs:/(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(ps,"i").test(t)&&!new RegExp(ps+" 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 Uo(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(((n,i)=>{r=Uo((()=>{try{s?.(),n()}catch(o){i(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,n=s.number,i=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=b({},o,t.attributes||{}),l={timeUnixNano:i,observedTimeUnixNano:i,severityNumber:n,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 b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function 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,n,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=n,this.dt=i,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 n of s)try{var i=n(r);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;r=i}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,n=0;s.length>0&&r>n;){var i,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(),(i=t.vt)!==null&&i!==void 0?i: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:[],n+=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),n=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,n.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=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 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 Qn=[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 n="";return r&&(n=Object.keys(r).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(r[i]))).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+n}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 n=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return n.apply(this,arguments)}})(),r=s().finally((()=>{this.ct===r&&(this.ct=null)}));return this.ct=r,r}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var s,r;try{s=e.attributes?b({},e.attributes):void 0,r=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 n=this.Bt.get(r);if(!n){if(!this.Qt())return;n={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,n)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(n,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(Qn.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(n,i){for(var o=0;i.length>o;o++)if(i[o]>=n)return o;return i.length})(e,Qn)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var n of s)try{var i=n(r);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;r=i}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$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 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(i,o,a){return b({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),n=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Yr(s)},scopeMetrics:[{scope:{name:r,version:n},metrics:e}]}]};var e,s,r,n}Xt(t){var e=Ja(Date.now()),s=new Map;for(var r of t.values()){var n,i=Ya(r.type,r.name,r.unit,void 0),o=s.get(i);o||(o=b({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(i,o));var a=Yr((n=r.attributes)!==null&&n!==void 0?n:{}),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:Qn})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var n=r[0],i=r[1],o=this.Bt.get(n);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=i.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(n,i)}}};var wr,Za,ei;function Mh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return ei&&s.length===Za||(Za=s.length,ei=s.reduce(((r,n)=>{wr||(wr={});var i=wr[n];if(i)r[i[0]]=i[1];else for(var o=t(n),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[n];if(u&&c){r[u]=c,wr[n]=[u,c];break}}return r}),{})),ei}}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"},n=this.buildCoercingContext(r,s,0).apply(e),i=this.buildParsingContext(s),o=this.parseStacktrace(n,i);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,n;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(n=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),b({},e,{cause:r,stack:n})}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 n of s.modifiers)r=yield n(r);return r}))()}convertToExceptionList(e,s){var r,n,i,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(n=s.handled)===null||n===void 0||n,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},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 n=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(i,a)}};return b({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:i=>n(i,r),next:i=>n(i,r+1)})}}var gs="?";function ji(t,e,s,r,n){var i={platform:t,filename:e,function:s===""?gs:s,in_app:!0};return x(r)||(i.lineno=r),x(n)||(i.colno=n),i}var nu=(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]:gs,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 ji(e,s[1],gs,+s[2],+s[3]);var r=Dh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var n=Bh.exec(r[2]);n&&(r[2]=n[1],r[3]=n[2],r[4]=n[3])}var i=nu(r[1]||gs,r[2]);return ji(e,i[1],i[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 n=s[3],i=s[1]||gs,o=nu(i,n);return ji(e,n=o[1],i=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 n=s.apply(e.message);return b({},n,{stack:(r=this.pe(e))!==null&&r!==void 0?r:n.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,n,i=(r=s.lineno)!==null&&r!==void 0?r:0,o=(n=s.colno)!==null&&n!==void 0?n:0;return`Error + at `+s.filename+":"+i+":"+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,n=this.getInfos(e),i=n[0],o=n[1];return{type:i??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,n=e.match(Gh);return n&&(s=n[1],r=n[2]),[s,r]}}var Jh=["fatal","error","warning","log","info","debug"];function iu(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 n=s.slice(0,r).join(", ");if(e>=n.length)return r===s.length?n:n.length>e?n.slice(0,e)+"...":n}return""}class Yh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,n,i=this.getErrorPropertyFromObject(e);return i?s.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(n=s.syntheticException)==null?void 0:n.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 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: "+iu(e)}isSeverityLevel(e){return W(e)&&!Mi(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 Lo(e)}coerce(e,s){var r,n=e.constructor.name;return{type:n,value:n+" captured as exception with keys: "+iu(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(!Lo(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,n=this.getUnhandledRejectionReason(e);return $c(n)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(n),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(n)}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]),ti={enabled:!0,max_bytes:32768};function Qr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ti.enabled,max_bytes:sp(t.max_bytes,ti.max_bytes)}:b({},ti)}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(n){var i;try{i=Fc(n)}catch{return}try{var o=JSON.parse(i);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:i}}catch{return}})(e);if(s){var r=(function(n){if(typeof TextEncoder<"u")return new TextEncoder().encode(n).length;for(var i=encodeURIComponent(n),o=0,a=0;i.length>a;a++)i[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(n){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||s)&&!x(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[n])?v.console[n].__rrweb_original__:v.console[n],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("debug",...i)},info(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("log",...i)},warn(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("warn",...i)},error(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("error",...i)},critical(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(n){r.error("You must initialize PostHog before calling "+n)},createLogger:(n,i)=>ou(t+" "+n,i)};return r},k=ou("[PostHog.js]"),se=k.createLogger,rp=se("[ExternalScriptsLoader]"),si=(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 n,i=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(n=i())return n.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 n="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;n=n+"&t="+Math.floor(Date.now()/i)*i}r=t.requestRouter.endpointFor("assets",n)}si(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");si(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);si(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",sr="$device_id",ri="$device_model",Bs="__alias",js="__timers",Ui="$autocapture_disabled_server_side",Hi="$heatmaps_enabled_server_side",Wi="$exception_capture_enabled_server_side",zi="$error_tracking_suppression_rules",qi="$error_tracking_capture_extension_exceptions",Vi="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gi="$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",ls="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Us="$active_feature_flags",Rr="$early_access_features",Ki="$feature_flag_details",Hs="$feature_flag_payloads",Tr="$feature_flag_request_id",en="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Ji="$surveys",tn="$surveys_loaded_at",Yi="$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",Zi="$client_session_props",Xi="$capture_rate_limit",Qi="$initial_campaign_params",eo="$initial_referrer_info",sn="$initial_person_info",rn="$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",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",es="anonymous",Tt="identified",to="identified_only",nn="visibilitychange",on="beforeunload",is="$pageview",ni="$pageleave",ii="$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,n)=>e(r,n)));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 n of s)for(var i in n)n[i]!==void 0&&(t[i]=n[i]);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}},np=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(n){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(n)}}},Vo=function(t){var e={};return Z(t,(function(s,r){(W(s)&&s.length>0||he(s))&&(e[r]=s)})),e},ip=["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 ip)if(s===r)return!1;return!0}function ne(t,e,s,r){var n=r??{},i=n.capture,o=n.passive;t?.addEventListener(e,s,{capture:i!==void 0&&i,passive:o===void 0||o})}function so(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",s=C.cookie.split(";").filter((i=>i.length)),r=0;s.length>r;r++){for(var n=s[r];n.charAt(0)==" ";)n=n.substring(1,n.length);if(n.indexOf(e)===0)return decodeURIComponent(n.substring(e.length,n.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 an{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,n){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(n)||0>e||0>s||0>r||0>n||e>0xffffffffffff||s>4095||r>1073741823||n>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|s>>>8,i[7]=s,i[8]=128|r>>>24,i[9]=r>>>16,i[10]=r>>>8,i[11]=r,i[12]=n>>>24,i[13]=n>>>16,i[14]=n>>>8,i[15]=n,new an(i)}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 an(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 an.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,n){if(!C)return!1;try{var i="",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 w=m.slice(_).join("."),I=E+"=1;domain=."+w+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",Ps=w)}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),i="; expires="+l.toUTCString()}n&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; 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}}},oi=null,Q={N(){if(!$e(oi))return oi;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"),oi=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",ls,zo,rn,sn,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 Zn(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(Zn(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=>Zn(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 n=r(e);return W(n)&&n?n:e}catch(i){return k.error("Error in get_current_url, falling back to window.location.href",i),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 Go(t){return t?Pn(t).split(/\s+/):[]}function rl(t,e){var s=(function(r){var n,i=v==null||(n=v.location)==null?void 0:n.href;return x(i)?void 0:yu(r,i)})(e);return!!(s&&t&&t.some((r=>s.match(r))))}function ln(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:Pn(t).split(/(\s+)/).filter((e=>Ks(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rr(t){var e="";return no(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:"")})),Pn(e)}function ai(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 ro(t,e){if(x(e))return!0;var s,r=function(i){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}})(i,o))))return{v:!0}};for(var n of t)if(s=r(n))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,"+","-","−","–"],nl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],yp=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var s,r,n,i,o;if(Ke(e)?(s=!!e&&il,r=void 0,n=!1):(s=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:il,r=e?.content_ignorelist,n=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||n&&(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=>nl(h,f)||nl(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())||""}})))&&!ro(a,s)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],n=t;n.parentNode&&!Me(n,"body");)if(Eu(n.parentNode))r.push(n.parentNode.host),n=n.parentNode.host;else{var i=ku(n);if(!i)break;if(e||Ko.indexOf(i.tagName.toLowerCase())>-1)s=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(i),n=i}return{parentIsUsefulElement:s,targetElementList:r}};function no(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 n=ln(r);if(M(n,"ph-sensitive")||M(n,"ph-no-capture"))return!1}if(M(ln(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 n=t.charCodeAt(r)-48;s&&(n*=2)>9&&(n-=9),e+=n,s=!s}return e%10==0}function Ks(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Pn(t);var s=e?al.test((t||"").replace(/[- ]/g,"")):(function(n){var i;for(ll.lastIndex=0;i=ll.exec(n);){var o=i[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(n){var i;for(cl.lastIndex=0;i=cl.exec(n);){var o=i[1],a=i[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 n=rr(s);e=(e+" "+n).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+Pu(s)).trim())}catch(i){k.error("[AutoCapture]",i)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Sp(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xr=se("[Dead Clicks]"),xp=()=>!0,kp=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Ho)),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({[Ho]: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",(n=>{n?xr.error("failed to load script",n):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(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 li=se("[SegmentIntegration]"),Au="posthog-js";function $u(t,e){var s=e===void 0?{}:e,r=s.organization,n=s.projectId,i=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)||[],w=E.map((F=>b({},F,{stacktrace:F.stacktrace?b({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>b({},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:w,$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&&n&&(I.$sentry_url=(i||"https://sentry.io/organizations/")+r+"/issues/?project="+n+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Ip{constructor(e,s,r,n,i,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:s,projectId:r,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(s,r,n)=>{n&&(n.noSessionId||n.activityTimeout||n.sessionPastMaximumLength||n.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:n}),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,n=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(),n}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 n={$pageview_id:s,$prev_pageview_id:r.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.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;n=ee(n,{$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&&(n.$prev_pageview_pathname=r.pathname),r.timestamp&&(n.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),n}}var ci=["flags","surveys"],Cp={[au]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[js]:{exposure:"hidden"},[Ui]:{exposure:"event"},[Hi]:{exposure:"hidden"},[Wi]:{exposure:"event"},[zi]:{exposure:"hidden"},[qi]:{exposure:"event"},[Vi]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gi]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[ls]:{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"},[Us]:{exposure:"hidden",storageGroup:"flags"},[Rr]:{exposure:"hidden"},[Ki]:{exposure:"hidden",storageGroup:"flags"},[Hs]:{exposure:"hidden",storageGroup:"flags"},[Tr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[en]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"surveys"},[tn]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yi]:{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"},[Zi]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[sn]:{exposure:"hidden"},[rn]:{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}},cs=(t,e)=>{try{return JSON.stringify(t,((s,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Fc(t)}},cn=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},ms=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),n=0;r.length>n;n++){var i=r[n].split("=");if(i[0]===e){s=i;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," ")},nr=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),n=r[1],i=(r[0]||"").split("?"),o=i[1],a=i[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("&")),n!=null&&(h+="#"+n),h},un=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 n=e+1;return n===s&&r(),n}return e}return 0},kr="https?://(.*)",vs=["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",...vs],ir="",Ap=["li_fat_id"];function Nu(t,e,s){if(!C)return{};var r,n=e?[...vs,...s||[]]:[],i=Mu(nr(C.URL,n,ir),t),o=(r={},Z(Ap,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,i)}function Mu(t,e){var s=Pp.concat(e||[]),r={};return Z(s,(function(n){var i=ms(t,n);r[n]=i||null})),r}function Lu(t){var e=(function(i){return i?i.search(kr+"google.([^/?]*)")===0?"google":i.search(kr+"bing.com")===0?"bing":i.search(kr+"yahoo.com")===0?"yahoo":i.search(kr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),s=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var n=C?ms(C.referrer,s):"";n.length&&(r.ph_keyword=n)}return r}function gl(){return navigator.language||navigator.userLanguage}var dn="$direct";function Ou(){return C?.referrer||dn}function Du(t,e,s){s===void 0&&(s=!1);var r=t?[...vs,...e||[]]:[],n=s?Ct(re?.href):re?.href,i=n?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:i?nr(i,r,ir):void 0}}function Bu(t,e){var s;e===void 0&&(e=!1);var r=t.r,n=t.u,i=e?Ct(n):n,o={$referrer:r,$referring_domain:r==null?void 0:r==dn?dn:(s=cn(r))==null?void 0:s.host};if(i){o.$current_url=i;var a=cn(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(i);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:tn},Tp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],ts="main";class ui{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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.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,b({},this.props)),this.update_config(e,e,s),this.save(),v){var n=()=>this.flush();ne(v,"beforeunload",n,{capture:!1}),ne(v,"pagehide",n,{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 b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$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),n=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(s=Q,n=!0):i==="localstorage+cookie"&&r.N()?(s=r,n=!0):i==="sessionstorage"&&ce.N()?s=ce:i==="memory"?s=hp:i==="cookie"?s=pt:r.N()?(s=r,n=!0):s=pt,this.fi=n,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 n=Mt(r);if(!n||n.exposure==="event"){if(n!=null&&n.shouldSkipFromEventProperties!=null&&n.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 ci){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 n=s[r],i=this.props[r];return he(n)&&he(i)&&i>n}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Mt(e))==null?void 0:s.storageGroup:void 0,n=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(n&&e in n)this.Pi(e,n[e]);else{if(r){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[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,ts))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var n of(this.Oi(this.ii,this.yi,s,ts),ci)){var i,o=r[n];(!mt(o)||(i=this.ci[n])!=null&&i.persisted)&&this.Oi(Q,this.Si(n),o,n)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,((r,n)=>{var i,o=(i=Mt(n))==null?void 0:i.storageGroup;o?s[o][n]=r:e[n]=r})),{main:e,groups:s}}Ei(e,s){if(s===ts)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((n,i)=>{var o;r[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":n})),JSON.stringify(r)}Oi(e,s,r,n){var i=this.Mi(n);if(n===ts||i.dirty||x(i.fingerprint)){var o;try{if((o=this.Ei(r,n))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,n!==ts&&(i.persisted=!0),x(o)||(i.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 n of ci)Q.q(this.Si(n));r?delete this.ci[ts]: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 n=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,i),n=!0)})),n)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,((n,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==n||te(n)||L(n))&&(this.Pi(i,n),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var n of s)n in this.props&&(this.Ri(n),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(Vo(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=cn(C.referrer))==null?void 0:e.host)||dn},void 0)}set_initial_person_info(){this.props[Qi]||this.props[eo]||this.register_once({[sn]: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,Qi],(n=>{var i=this.props[n];i&&Z(i,(function(o,a){e["$initial_"+Ni(a)]=o}))}));var s=this.props[sn];if(s){var r=(function(n,i){i===void 0&&(i=!1);var o=Bu(n,i),a={};return Z(o,(function(l,u){a["$initial_"+Ni(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 n=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||[]),i=n?this.bi(e):this.ii,o=this.wi(e);if(n||o!==this.pi){var a=this.props;this.clear(),this.ii=i,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"},di={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hi={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((n=>{vl.info((n||"events")+" is quota limited."),this.serverLimits[n]=new Date().getTime()+6e4}))}catch(n){return void vl.warn('could not rate limit - continuing. Error: "'+n?.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,n;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(Xi))!==null&&s!==void 0?s:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(n=this.instance.persistence)==null||n.set_property(Xi,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,n=this.captureEventsBurstLimit,i=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 "+i+" events per second and "+n+" 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(n){xt.error("Error applying remote config",n)}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(n){xt.error("Error loading feature flags",n)}}}var qe=Uint8Array,Ae=Uint16Array,_s=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 s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var i=s[r];s[r+1]>i;++i)n[i]=i-s[r]<<5|r;return[s,n]},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),ie=0;32768>ie;++ie){var ss=(43690&ie)>>>1|(21845&ie)<<1;zu[ie]=((65280&(ss=(61680&(ss=(52428&ss)>>>2|(13107&ss)<<2))>>>4|(3855&ss)<<4))>>>8|(255&ss)<<8)>>>1}var Js=function(t,e,s){for(var r=t.length,n=0,i=new Ae(e);r>n;++n)++i[t[n]-1];var o,a=new Ae(e);for(n=0;e>n;++n)a[n]=a[n-1]+i[n-1]<<1;for(o=new Ae(r),n=0;r>n;++n)o[n]=zu[a[t[n]-1]++]>>>15-t[n];return o},Kt=new qe(288);for(ie=0;144>ie;++ie)Kt[ie]=8;for(ie=144;256>ie;++ie)Kt[ie]=9;for(ie=256;280>ie;++ie)Kt[ie]=7;for(ie=280;288>ie;++ie)Kt[ie]=8;var hn=new qe(32);for(ie=0;32>ie;++ie)hn[ie]=5;var Lp=Js(Kt,9),Op=Js(hn,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 _s?_s: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},pi=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var n=s.length,i=s.slice();if(!n)return[new qe(0),0];if(n==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!=n-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=i[0].s;for(r=1;n>r;++r)i[r].s>h&&(h=i[r].s);var p=new Ae(h+1),f=ao(s[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var E=i[r].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var w=i[r].s;e>p[w]?g-=1<=0&&g;--r){var I=i[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},ao=function(t,e,s){return t.s==-1?Math.max(ao(t.l,e,s+1),ao(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,n=t[0],i=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==n&&a!=e)++i;else{if(!n&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(n),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(n);i=1,n=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},lo=function(t,e,s){var r=s.length,n=qu(e+2);t[n]=255&r,t[n+1]=r>>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var i=0;r>i;++i)t[n+i+4]=s[i];return 8*(n+4+r)},bl=function(t,e,s,r,n,i,o,a,l,u,c){ot(e,c++,s),++n[256];for(var d=pi(n,15),h=d[0],p=d[1],f=pi(i,15),g=f[0],m=f[1],_=wl(h),E=_[0],w=_[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=pi(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(n,Kt)+Rs(i,hn)+o,Ie=Rs(n,h)+Rs(i,g)+o+14+3*T+Rs(B,R)+(2*B[16]+3*B[17]+7*B[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=Js(h,p),J=h,z=Js(g,m),H=g;var _e=Js(R,N);for(ot(e,c,w-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=Kt,z=Op,H=hn;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+=Yo[me]);var ge=31&r[S];$s(e,c,z[ge]),c+=H[ge],ge>3&&($s(e,c,r[S]>>>5&8191),c+=Zo[ge])}else $s(e,c,O[r[S]]),c+=J[r[S]];return $s(e,c,O[256]),c+J[256]},Dp=new _s([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Bp=(function(){for(var t=new _s(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t})(),fi=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 n,i,o,a,l,u=(a=10+((n=e).filename&&n.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),w=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(w,I,d.subarray(F,P)):(w[F]=!0,I=lo(w,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,w,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),Xt=0;for(de=0;_r>de;++de){var Qt=F-Be+de+32768&32767,Is=Qt-N[Qt]+32768&32767;Is>Xt&&(Xt=Is,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,w,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(E,0,f+qu(I)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&fi(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),fi(u,c-8,s.d()),fi(u,c-4,r),u}var Up=!!$i||!!Mo,Gu="text/plain",Dr=!1,Ku=(t,e)=>{var s=t.split("#"),r=s[1],n=s[0].split("?"),i=n[0],o=n[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(r?"#"+r:"")},$n=function(t,e,s){var r;s===void 0&&(s=!0);var n=t.split("?"),i=n[0],o=n[1],a=b({},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?i+"?"+l.join("&"):i},gi=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)})(cs(e)),{mtime:0});return{contentType:Gu,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===xe.Base64){var n=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(cs(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:cs(a)))(n);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=cs(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:$n(t.url,{compression:xe.Base64}),encodedBody:gi(b({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gi(b({},t,{compression:void 0,Ji:void 0}))};try{e=gi(t)}catch(n){if(Ua(t.compression,ms(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",n),r();throw n}return e&&Ua(t.compression,ms(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?Ri(new Uint8Array(s)):ArrayBuffer.isView(s)&&Ri(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=cs(e.data),r=yield(function(i,o,a){return Ti.apply(this,arguments)})(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var n=yield r.arrayBuffer();return b({},e,{Ji:{contentType:Gu,body:n,estimatedSize:n.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,n=r??{},i=n.contentType,o=n.body,a=n.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);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;Mo(s,b({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)}}},co=t=>{try{var e,s=Ju(t),r=s.url,n=s.encodedBody,i=n??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.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:b({},t.data,{batch:h});return co(b({},t,{data:d(u.slice(0,c))})),void co(b({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(b({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var n=r==="query"?e==="POST"?"sent_at":"_":void 0;return $n(s===xe.GZipJS?Ku(t,"compression"):t,b({},n?{[n]:Date.now().toString()}:{},s===xe.GZipJS?{}:{compression:s}))},Br=[];Mo&&Br.push({transport:"fetch",method:Xu}),$i&&Br.push({transport:"XHR",method(t){var e=Yu(t);if(e){var s=new $i,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var n=r??{},i=n.contentType,o=n.body;Z(t.headers,(function(a,l){s.setRequestHeader(l,a)})),i&&s.setRequestHeader("Content-Type",i),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:co});var uo=3e3;class zp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt(s?.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():{},s=Object.values(e);[...s.filter((r=>r.url.indexOf("/e")===0)),...s.filter((r=>r.url.indexOf("/e")!==0))].map((r=>{this.lr(b({},r,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var s=this.ar(),r=function(){var i=s[n],o=new Date().getTime();i.data&&L(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var n 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,n=s,i=(n?n.batchKey:null)||n.url;x(e[i])&&(e[i]=b({},n,{data:[]})),(r=e[i].data)==null||r.push(n.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},ne(v,"online",this.vr),ne(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Ic(e,qp);lt(s)&&(r.url=$n(r.url,{retry_count:s})),this._instance._send_request(b({},r,{callback:n=>{if(n.statusCode!==200&&(400>n.statusCode||n.statusCode>=500)){if((n.statusCode===0?3:10)>(s??0))return void this.At(b({retriesPerformedSoFar:s},r));n.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(n)}}))}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),n=Date.now()+r;this.tr.push({retryAt:n,requestOptions:e});var i="Enqueued failed request for retry in "+r;navigator.onLine||(i+=" (Browser is offline)"),k.warn(i),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((i=>e>i.retryAt||(s.push(i),!1)));if(this.tr=s,r.length>0)for(var n of r)this.retriableRequest(n.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(b({},s,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class Gp{constructor(e){this.yr=()=>{var s,r,n,i;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,(n=this.br.maxContentY)!==null&&n!==void 0?n:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){ne(v,"scroll",this.yr,{capture:!0}),ne(v,"scrollend",this.yr,{capture:!0}),ne(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,n){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Zi]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=n||Kp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zi]}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(Vo(this.getSetOnceProps()),((s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Ni(r)]=s})),e}}class Xo{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 n of this.Er["*"]||[])n(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 n;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=s||dt,this.Nr=r||dt;var i=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_"+i+"_window_id",this.Br="ph_"+i+"_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((n=this.Ne.bootstrap)!=null&&n.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 n=s!==this._sessionActivityTimestamp,i=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,i&&!n||i&&this.Zr(s)||(this.Pr=s,this.Mr.register({[ls]:[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(ls):(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({[ls]:[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[ls];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(on,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ne(v,on,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(),n=this.Jr(),i=n[1],o=n[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Ts.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Ts.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Ts.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((w=>w(i,l,E))),{sessionId:i,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((n=>Wa(n?.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 pn=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 mi(t,e,s){return cs({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=>pn(s,r))))),not_regex:(t,e)=>e.every((s=>t.every((r=>!pn(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((n=>r>parseFloat(n)))})),lt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((n=>rt.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((s=>{var r=s[1],n=e?.[s[0]];if(x(n)||$e(n))return!1;var i=[String(n)],o=td[r.operator];return!!o&&o(r.values,i)}))}var ho="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":ho),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===ho)return this.apiHost+s;var n=kl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+n;case"api":return"https://"+this.region+"."+n}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=se("[Surveys]"),nd="seenSurvey_",id=t=>{try{var e=(s=>((r,n)=>""+nd+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(n))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){q.error("Failed to persist survey seen state",s)}},Zp=[di.Popover,di.Widget,di.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,(n=>{if(n)return Qp.error("failed to load script",n);s()}))}startIfEnabledOrStop(){var e=this,s=function(){var i,o,a,l=r[0],u=r[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[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((n=this._instance.config.integrations)!==null&&n!==void 0?n:{})){var n;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(i){var n=s.sn.get(e.name)===e;n&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',i),n&&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 n of e){var i=s?.get_property(n);x(i)||(r[n]=i)}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(n){this.rt.error("Browser extension event listener failed",n)}}))),this.onRemoteConfig=s=>{if(this.an)return Ir((()=>{}));var r=i=>{try{s(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},n=this.instance.dn.on(Il,r);return this.un&&r(this.un),Ir(n)},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,n,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=i?.sessionId)!==null&&s!==void 0?s:"",windowId:(r=i?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(n=i?.sessionStartTimestamp)!==null&&n!==void 0?n: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 n=this;return X((function*(){r?n.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):n.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 n;s===void 0&&(s={});var i=r.instance.requestRouter.endpointFor((n=s.target)!==null&&n!==void 0?n:"api",e),o={method:s.method,url:s.query?$n(i,s.query):i,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={},vi=0,fn=()=>{},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],os="posthog",ad=!Up&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_i=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:op(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:fn,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:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:fn},(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],n=s[1];x(t[r])||(e[n]=t[r])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(i.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?i.property_denylist=t.property_blacklist:L(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),i};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 Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_i(),this.SentryIntegration=Ip,this.sentryIntegration=r=>(function(n,i){var o=$u(n,i);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,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(o),i?.({})},set_once:(r,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,s,r){if(r&&r!==os){var n,i=(n=Ys[r])!==null&&n!==void 0?n:new Te;return i._init(e,s,r),Ys[r]=i,Ys[os][r]=i,i}return this._init(e,s,r)}_init(e,s,r){var n,i;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=_i(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=_i(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 ui(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new 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:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(n=s.bootstrap)!=null&&n.distinctID||(s.bootstrap=b({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=s.bootstrap)==null?void 0:i.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===es)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 w=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?w:m;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?Tt:es),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,es)}return ne(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||li.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()||(li.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(li.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,is),identify:N=>R(N,ii),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==fn&&(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({[ri]:P})})).catch(fn),this}Fn(){var e,s,r,n,i,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||((n=this.Dn)==null||n.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var s,r,n,i,o,a,l,u=performance.now(),c=b({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(n=this.logs)!==null&&n!==void 0?n:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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(i){k.error("Error initializing extension:",i)}}var n=Math.round(performance.now()-s);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:n}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+n+"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,n=e.config;n.supportedCompression&&!this.config.disable_compression&&(this.compression=M(n.supportedCompression,xe.GZipJS)?xe.GZipJS:M(n.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=n.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=n.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.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,n,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ni),(r=this.logs)==null||r.flushLogs("sendBeacon"),(n=this.In)==null||n.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ni,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=b({},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,n,i,o=b({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&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=>b({},E,{sent_at:_}))):b({},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=(n=(i=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:i.method)!==null&&n!==void 0?n: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(b({},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)})(b({},e,{callback:s=>{var r,n;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(n=this.config).on_request_error)==null||r.call(n,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){vi++;try{var s,r=[],n=[],i=[];Er(e,(a=>{if(a)if(L(s=a[0]))i.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])?i.push(a):n.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(n,this),o(i,this)}finally{vi--}}push(e){if(vi>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 n,i,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===is&&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(en)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,E,w,I=g?void 0:this.Vn(r?.$set_once,e!==Qa,e===ii);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):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?.[hi.SURVEY_ID],P=s?.[hi.SURVEY_ITERATION];id({id:F,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",w="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(w="$survey_"+E+"/"+_.id+"/"+_.current_iteration),w)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Np.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=b({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=b({},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=(n=r?._url)!==null&&n!==void 0?n: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,n,i){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=i?void 0:this.persistence.remove_event_timer(e),a=b({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mi(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?[...vs,...P||[]]:[],z=(function(vr){for(var je=0;qa.length>je;je++){var _r=qa[je],Xt=_r[1],Qt=_r[0].exec(vr),Is=Qt&&(Se(Xt)?Xt(Qt,vr):Xt);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(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?ps:Fe===er||Fe===ds||Fe===tr||Fe===Oi?"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:ps:"Desktop"),$timezone:ju(),$timezone_offset:$p()}),{$current_url:nr(S?Ct(re?.href):re?.href,J,ir),$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(i,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===ho&&(a.$lib_custom_api_host=this.config.api_host),u=e!==is||i?e!==ni||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,n),a=ee(a,u),e===is&&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,b({},_,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 w=this.config.sanitize_properties;w&&(k.error(Fl),a=w(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var n;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var i=this.persistence.get_initial_props(),o=(n=this.sessionPropsManager)==null?void 0:n.getSetOnceProps(),a=ee({},i,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 n;(n=this.persistence)==null||n.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,n;return(r=(n=this.featureFlags)==null?void 0:n.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var n;(n=this.featureFlags)==null||n.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var n;(n=this.featureFlags)==null||n.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var n;return s===void 0&&(s=!1),(n=this.featureFlags)==null?void 0:n.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,n;return s===void 0&&(s=!1),(r=(n=this.surveys)==null?void 0:n.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Ns})}Jn(e){return!e||Mi(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 n=this.get_distinct_id();this.register({$user_id:e}),this.get_property(sr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:n},""),e!==n&&e!==this.get_property(Bs)&&(this.unregister(Bs),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||es)===es,a=e!==n,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(ii,{distinct_id:e,$anon_distinct_id:n},{$set:s||{},$set_once:r||{}}),this.Sn=mi(e,s,r),(i=this.featureFlags)==null||i.setAnonymousDistinctId(n);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=mi(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=mi(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((n=>W(n)&&n.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 n=this.getGroups(),i=n[e]!==s;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},n,{[e]:s})}),i||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(Qa,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),i&&!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,n,i,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(ri),m=this.get_property(qt),_=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(),(n=this.sessionPersistence)==null||n.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[qt]:m}),(i=this.surveys)==null||i.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,es),(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({[ri]: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,n,i,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(n=s.jn)==null||n.dispose(),(i=s.sessionRecording)==null||i.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,n=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!r)return n;n+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return n}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=b({},this.config);if(te(e)){var r,n,i,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 ui(b({},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:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(n=this.featureFlags)==null||n.updateConfig==null||n.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.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,n,i,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&&((n=this.sessionRecording)==null||n.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.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"),n=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(b({},n,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:os;return s!==os&&(s=os+"."+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===to&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Bs])&&((s=this.persistence)==null||(s=s.props)==null||!s[rn]))}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(rn,!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,n,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((r=this.persistence)==null||r.set_disabled(i)),((s=this.sessionPersistence)==null?void 0:s.xi)!==i&&((n=this.sessionPersistence)==null||n.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,n,i,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(n=this.pageViewManager)==null||n.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=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(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(is,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(nn,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ne(C,nn,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,n,i,o){var a=r in s&&!D(s[r]),l=n in s&&!D(s[n]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+n+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[n])})(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),n=L(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of n){if(i=o(i),D(i)){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}i.properties&&!mt(i.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(i.properties&&D(i.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 i}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]]=np(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 n=this.clicks[this.clicks.length-1];if(n&&Math.abs(e-n.x)+Math.abs(s-n.y)r-n.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 yi="$copy_autocapture",wi=se("[AutoCapture]");function bi(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,n=e.e,i=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,w=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(S),"ph-no-capture")&&(w=!0),m.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"?bi(1024,dl(T)):bi(1024,rr(T)));var Ie=ln(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=Go(ge).join(" ")),pe["attr__"+ae.name]=bi(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,i,o,a,u));var N=(function(T){if(!no(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)})),w)return{props:{},explicitNoCapture:w};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=cn(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:n.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=b({},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&&n.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 po="[SessionRecording]",at=se(po),hf=se("[Heatmaps]");function Ei(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Pr=se("[Product Tours]"),Si=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},pf=["$set_once","$set"],Ze=se("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function rs(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 Xo,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,n)=>{this.on(r,n)}))}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 n,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(n=this._instance)==null||n.autocapture.setElementSelectors(i)}}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((n=>{this.cs(s,n)&&this.ns.emit("actionCaptured",n.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,n=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!n||typeof n!="string"||!rs(n,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 n=this.bs(e);if(n.length>0)return n.some((a=>rs(a.href,s.href,s.href_matching||"exact")));var i,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&rs((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var n=this.bs(e);if(n.length>0)return n.some((u=>rs(u.text,s.text,s.text_matching||"exact")||rs(u.$el_text,s.text,s.text_matching||"exact")));var i,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(i=(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",i.some((u=>rs(u,o,a))))}ys(e,s){var r,n;if(s==null||!s.selector)return!0;var i=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(i!=null&&i.includes(s.selector))return!0;var o=(e==null||(n=e.properties)==null?void 0:n.$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,n)=>{var i=L(n.value)?n.value.map(String):n.value!=null?[String(n.value)]:[];return r[n.key]={values:i,operator:n.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((n=>{var i;(i=n.conditions)==null||(i=i[s])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(n.id),r.set(o.name,a)}}))})),r}Rs(e,s,r){var n=(r===As.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>n?.includes(a.id)))})),i.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 n,i;return((n=r.conditions)==null?void 0:n.actions)&&((i=r.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.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 n,i,o,a,l;r.conditions&&(n=r.conditions)!=null&&n.actions&&(i=r.conditions)!=null&&(i=i.actions)!=null&&i.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((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),n=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&n.length===0||((s=this._instance)==null||s._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,As.Activation),this.ks=this.Ps(e,As.Cancellation))}onEvent(e,s){var r,n,i=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(n=s.properties)==null?void 0:n.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.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&&(i.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)){i.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()),n=[];for(var i of e)r&&this.Cs(i)?this.qs(i)&&this.Us(i):n.push(i);n.length>0&&(this._s=[...new Set([...this._s,...n])]),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((i=>!s.has(i)));var r=this.Zs(),n=r.filter((i=>!s.has(i)));n.length!==r.length&&(this.Ws(n),n.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(b({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},n=!1;for(var i of Object.entries(s)){var o=i[0],a=i[1];e.includes(o)?n=!0:r[o]=a}n&&(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 n=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return i&&n===i?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 n=this.Zs(),i=this.Qs();n.length>0&&(this.Ws([]),n.filter((o=>he(i[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 Yi}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((i=>{r=i.find((o=>o.id===e))}));var n=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return he(n)&&n>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({[Yi]: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((i=>{r=i.find((o=>o.id===s))}));var n=!r||(function(i){var o;return rd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(r);return n?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?un(v.location.hash,"__posthog")||un(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,n)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=r.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:n,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}),xi=`" 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)=>pn(e,t),not_regex:(t,e)=>!pn(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((n=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,n.forEach((i=>{if(i.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=s.oa)==null||o.set(i.feature_flag_key,i));var a=s._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&s.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,s._instance)&&s.la(i.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 n,i=this._instance.getFeatureFlag(s),o=(n=this.oa)==null?void 0:n.get(s);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=ms(e?.search,"__experiment_id"),r=ms(e?.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments((n=>{this.ha(parseInt(s),r,n)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var n=this._instance.get_property("$web_experiments");if(n&&!s)return e(n);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,s,r){var n=r.filter((i=>i.id===e));n&&n.length>0&&(ye.aa("Previewing web experiment ["+n[0].name+"] with variant ["+s+"]"),this.la(n[0].name,s,n[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 n=ye.getWindowLocation();if(n){var i,o,a,l=yu(s,n.href);return(i=e.conditions)==null||!i.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 n,i,o,a,l,u,c,d,h=(n=e.conditions)==null||(n=n.utm)==null||!n.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.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),n=1;s>n;n++)r[n-1]=arguments[n];k.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(zl):s!=="control"?r.forEach((n=>{if(n.selector){var i;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",n);var o=(i=document)==null?void 0:i.querySelectorAll(n.selector);o?.forEach((a=>{var l=a;n.html&&(l.innerHTML=n.html),n.css&&l.setAttribute("style",n.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",ki=(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,Rn={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&&ne(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=b({},t),n=this.Oa(Bt);if(n)for(var i of Object.entries(n))r["$feature/"+i[0]]=i[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 n,i,o=(n=(i=s.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&n!==void 0?n:{},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,n,i=s!=null&&s.merge&&(r=this.Oa(Bt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(n=this.Oa(Hs))!==null&&n!==void 0?n:{},a=b({},i,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled: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(Ki),e=this.Oa(et),s=this.Oa(jt);if(!s&&!e)return t||{};var r=ee({},t||{}),n=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var i of n){var o,a,l=r[i],u=e?.[i],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?.[i],p=b({},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=b({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[i]=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),n=0;r.length>n;n++)s[r[n]]=e[r[n]];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),n=0;r.length>n;n++)s[r[n]]=e[r[n]];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:b({},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 n=this.qa();x(n)||(s.flag_keys=n);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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:i}),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+xi)}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(),n=t in r,i=r[t],o=this.getFlagPayloads()[t],a=String(i),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,w,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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=(w=S==null||(I=S.reason)==null?void 0:I.description)!==null&&w!==void 0?w: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(n)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xi)}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 n={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},i=s.Na();i.length&&(n.evaluation_contexts=i);var o,a=s.qa();x(a)||(n.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:n,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+xi),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(n,i,o,a,l,u){i===void 0&&(i={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,B)=>{var S=P.flags;return S?b({},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)})(n,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=n.requestId,g=n.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,[en]:!1}}var E=h,w=p,I=d;if(l!=null&&l.partialResponse)E=b({},i,E),w=b({},o,w),I=b({},a,I);else if(n.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=b({},i,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),w=b({},o,Object.fromEntries(Object.entries(w||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=b({},i,E),w=b({},o,w),I=b({},a,I);return b({[Us]:Object.keys(Wl(E)),[Bt]:E||{},[Hs]:w||{},[Ki]:I||{},[en]:n.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={},n=s.flags,i=s.payloads;return n&&(r[et]=L(n)?Hl(n):n),i&&(r[jt]=i),Object.keys(r).length&&this.F(r),n===!1&&i===!1?this.q([et,jt]):n===!1?this.q(et):i===!1&&this.q(jt),this.Va(),n===!1?Ot.info("Flag overrides cleared"):n&&Ot.info("Flag overrides set",{flags:n}),void(i===!1?Ot.info("Payload overrides cleared"):i&&Ot.info("Payload overrides set",{payloads:i}))}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(n){this.rt.error("Error while running feature flags callback",n)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Rr)||[]).find((l=>l.flagKey===t)),n={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:n};r&&(i.$early_access_feature_name=r.name),s&&(i.$feature_enrollment_stage=s);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(o)),[Bt]:o,[ct]:b({},this.Oa(ct)||{},n)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).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 n,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Rr]:n=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(n)}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((n=>{try{n(s,r,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}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),n=t?.$set_once,i={};if(n)for(var o in n)({}).hasOwnProperty.call(n,o)&&(o in s||(i[o]=n[o]));this.F({[ct]:b({},s,i,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=b({},this.Oa(ct)||{});t.forEach((r=>{delete s[r]})),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Ut)||{},r=b({},s);for(var n of Object.keys(t))r[n]=b({},s[n],t[n]);this.F({[Ut]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:b({},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(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&&ne(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),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,(n=>{if(n)return at.error("could not load recorder",n);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 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,n=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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({[qt]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({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})})};n(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(n)}}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(qt);return(s==null||(e=s.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(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 n;if(this.Ja||(this.Ja=(n=$.__PosthogExtensions__)==null?void 0:n.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){wi.error("Failed to capture event",r)}};if(ne(C,"submit",t,{capture:!0}),ne(C,"change",t,{capture:!0}),ne(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||v?.event;try{this.bo(s,yi)}catch(r){wi.error("Failed to capture copy/cut event",r)}};ne(C,"copy",e,{capture:!0}),ne(C,"cut",e,{capture:!0})}}}else wi.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({[Ui]: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 n=C?.querySelectorAll(r);n?.forEach((i=>{t===i&&s.push(r)}))})),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Ui],r=this.co,n=this.instance.Qi()&&!this.fo;if($e(r)&&!Ke(s)&&!n)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=ai(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 n=e===yi;if(r&&(function(d,h,p,f,g,m){var _;if(!v||Jo(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 w=Cu(d,f),I=w.parentIsUsefulElement,F=w.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)||!ro(F,p?.css_selector_allowlist)||ro(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&&(Ko.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,n,n?["copy","cut"]:void 0,this.instance)){var i=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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===yi){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,n,i){try{if(!(n in r))return $l;var o={next:r[n]},a=i((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[n]=a,()=>{if(r[n]!==a)for(var l=r[n];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[n]=o.next}}catch{return $l}})(v.history,t,(r=>function(n,i,o){r.call(this,n,i,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(is,{navigation_type:t}),this._o=s}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ne(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[Hi]),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({[Hi]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ei(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),ne(v,on,this.Po),this.Ro=t=>this.ke(t||v?.event),ne(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ne(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),ne(C,nn,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(on,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(nn,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(),n=this.instance.scrollManager.scrollElement(),i=(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})(ai(t),["fixed","sticky"],n);return{x:t.clientX+(i?0:r),y:t.clientY+(i?0:s),target_fixed:i,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!sl(t.target)&&Ei(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(ai(t),this.instance.config.rageclick)&&this.Vt(b({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!sl(t.target)&&Ei(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?[...vs,...s||[]]:[],n=nr(e,r,ir);this.R=this.R||{},this.R[n]||(this.R[n]=[]),this.R[n].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",b({$current_url:this.R.url},this.R.metrics.reduce(((s,r)=>b({},s,{["$web_vitals_"+r.name+"_event"]:b({},r),["$web_vitals_"+r.name+"_value"]:r.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(s?.name)||D(s?.value))Lt.error("Invalid metric received",s);else{var n=typeof s.navigationURL=="string"?s.navigationURL:void 0,i=this.Bo(n);if(!x(i)){var o=he(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+i;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=i),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=b({},s,n?{navigationURL:i}:{},{$current_url:i,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,n,i,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,n=l.onFCP,i=l.onINP),s&&r&&n&&i){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&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(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[Vi]),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[Gi])||["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({[Vi]:s}),this._instance.persistence.register({[Gi]: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,(n=>{n?Lt.error("failed to load script",n):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,n=this._instance.config.mask_personal_data_properties?[...vs,...r||[]]:[];return nr(s,n,ir)}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,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=n(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(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[Wi]),this.Jo=new yh(b({},(function(s){var r,n,i,o;return s===void 0&&(s={}),{refillRate:(r=(n=s.exceptionRateLimiterRefillRate)!==null&&n!==void 0?n:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(i=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i: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=b({},e,t):(x(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(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({[Wi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,n=(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(n)?Ms.info("Skipping exception capture because of client rate limiting.",{exception:n}):(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 n=arguments.length,i=new Array(n>1?n-1:0),o=1;n>o;o++)i[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 i){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 b({},E,{filename:E.filename||(w=_,w[w.length-1]||{}).filename,function:E.function||gs});var w}))})(u)}})("web:javascript",jh,Wh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(zi))!==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 n=t.config;if("errorTracking"in n){var i=(e=(s=n.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=n.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[zi]:this.Xo,[qi]:o})}}}get nl(){var t,e=!!this._instance.get_property(qi),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(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>ep.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=s.sanitizedProperties,n=s.droppedKeys;n.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:n}),this.rl.add(b({[Zr]:t,[Xr]:new Date().toISOString()},r))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;r&&(s.$release_id=r);try{var n=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return n&&this.rl.clear(),n}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 i}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((s,r)=>{var n=r.type,i=r.value;return W(n)&&n.length>0&&s.$exception_types.push(n),W(i)&&i.length>0&&s.$exception_values.push(i),s}),{$exception_types:[],$exception_values:[]});return this.Xo.some((s=>{var r=s.values.map((n=>{var i=td[n.operator],o=e[n.key];if(!i||!o)return!1;var a=L(n.value)?n.value:[n.value];return a.length>0&&i(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,n,i=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(r=o==null||(n=o.filename)==null?void 0:n.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!D(t)&&L(t)}}},Sf=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var s,r;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Si(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&&Si(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:n=>{if(Si(this._instance)){var i=n.statusCode;if(i!==200||!n.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?n.error||Pr.warn(o):Pr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(n.json.product_tours)?n.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)}}},Rn),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,n,i,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},Ic(t,pf),{properties:b({},t.properties,f?{$set:b({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(r=(n=t.properties)==null?void 0:n.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",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,n,i,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 w=m[_];m[_]=E(w),c.push((()=>{m[_]=w}))}},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 w=f(_);return w?m.call(this,w,E):_})),p(u,"replaceChild",(m=>function(_,E){var w=f(_);return w?m.call(this,w,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,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))}))})),[(n=l.Element)==null?void 0:n.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"after",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];var F=g(w);return w.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var w=f(E);return w?m.call(this,_,w):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(n){throw s(),n}}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,n=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),n(a)}})),!1).processEvent;i&&(e.processEvent=i),r=!0}catch(o){Ze.error(Ml+t.id,o),n(!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(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(s)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var n of Object.values(this.apps))r(n)}}onRemoteConfig(t){var e,s,r,n=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 i=t.config;if((r=i.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=n._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(n._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of i.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=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return 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(n)))}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(qo);r(this._instance,"surveys",(n=>{n||!t.generateSurveys?this.$l("Could not load surveys script",n):this.Dl(t.generateSurveys,e)}))}catch(n){throw this.$l("Error initializing surveys",n),n}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(Ji);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((n=>t(n.surveys,n.context))):(typeof Promise<"u"&&(this.Ll=new Promise((n=>{s=n}))),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:n=>{var i;this.Ll=null;var o=n.statusCode;if(o!==200||!n.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):n.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=n.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)),(i=this._instance.persistence)==null||i.register({[Ji]:c,[tn]: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(tn);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};id(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((n=>n.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 n,i=(n=r.find((a=>a.id===t)))!==null&&n!==void 0?n:null;if(i){var o=this.zl(i);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 n=typeof t=="string"?this.Hl(t):t;if(n!=null&&n.id)if(Zp.includes(n.type)){var i=C?.querySelector(e);if(i)return(r=n.appearance)!=null&&r.surveyPopupDelaySeconds?(q.info("Rendering survey "+n.id+" with delay of "+n.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+n.id+" with delay of "+((o=n.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(n,i,s),q.info("Survey "+n.id+" rendered")}),1e3*n.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(n,i,s);q.warn("Survey element not found")}else q.warn("Surveys of type "+n.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 n=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(n=b({},r,{appearance:b({},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 i=this.Ul(r);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(n,e):this.renderSurvey(n,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()}}},Rn),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),so(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,n=vf||un(t.hash,"__posthog")||un(t.hash,"state"),i=n?el((()=>JSON.parse(atob(decodeURIComponent(n)))))||el((()=>JSON.parse(decodeURIComponent(n)))):null;return i&&i.action==="ph_authorize"?((r=i).source="url",r&&Object.keys(r).length>0&&(i.desiredHash?t.hash=i.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=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(b({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var n;this.Wl(1),(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Dl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(r)})),ne(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=b({experiments:ye},Rn),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||so(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(qo);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":so(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=b({},this.rt,{error(){for(var r=arguments.length,n=new Array(r),i=0;r>i;i++)n[i]=arguments[i];n.some(Vl)||s.rt.error(...n)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,n;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(n=this.lu)==null||n.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ne(v,"online",this.au)}uu(t,e,s,r){var n,i=(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,_),w=o?.resourceAttributes;return{serviceName:(d=(h=w?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=w?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=w?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:w,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((n=this._instance)==null||(n=n.config)==null?void 0:n.logs,s);return[new Th(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,r),i]}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),(n=>{this.tr=n}));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),(n=>{this.su=n}),{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(qo)}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,n){var i;r===ut.LogsQueue&&e((i=n)!==null&&i!==void 0?i:[])},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:ki(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=i=>{s||(s=!0,clearTimeout(n),e(i))},n=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:ki(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:ki(i.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=i.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,n){if(e.length!==0){var i=e.map((a=>a.record));n([]);var o=ru(i,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,n=s.sessionStartTimestamp,i=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,D(n)||(e.sessionStartTimestamp=n),D(i)||(e.lastActivityTimestamp=i)}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 n,i,o,a,l,u=r?.resourceAttributes;return{serviceName:(n=u?.["service.name"])!==null&&n!==void 0?n:r?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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,n=o=>{r||(r=!0,clearTimeout(i),s(o))},i=setTimeout((()=>n({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)n({kind:"ok"});else if(a===413)n({kind:"too-large"});else if(a!==0&&a!==429&&500>a)n({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;n({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=b({},Rn,wf,bf,Ef,Sf,xf,If,kf,Cf,Ff,Pf,Af,$f);Te.__defaultExtensionClasses=b({},Rf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Ys[os]=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():ne(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",Tf={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 Nf(t={},e=0){const s=fo(t.artifactType||t.type||cd),r=fo(t.artifactName||t.name||t.fileName||`${ud}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function dd(t={},e=0){const s=kt(t),r=s.artifactType||s.type||cd,n=s.artifactName||s.name||ud;let i=s.fileName||n;return i.endsWith(".dart")||(i+=".dart"),{id:fo(s.id)||Nf({...s,artifactType:r,artifactName:n,fileName:i},e),artifactType:r,artifactName:n,fileName:i,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:hd(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:pd(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Tf[r]||"O"}}function hd(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 pd(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 go(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"?go(t):t,i=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.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)=>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(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:hd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function gn(t){return or(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 ys(t){return JSON.stringify(t,null,2)}function Mf(t){return ys({task:"architect",userRequest:String(t??"")})}function Lf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ys(e):ys({task:"generate_bundle",bundleSpec:e})}function Of(t){return ys({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 s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function Df({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:n}){return ys({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(n)})}function fd({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return ys({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 gd(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 n=gd(r,e+1);if(n)return n}}return null}function mn(t){return Array.isArray(t)?t.some(mn):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(mn):!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 Uf(t,e){if(Le(t))for(const[s,r]of Object.entries(t)){if(!Le(r))continue;const n=Le(r.categories)?r.categories:{},i=Object.entries(n).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):r.matched===!0&&e.add(md(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,n]of s){if(!mn(n))continue;const i=md(r),o=n?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?n?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>mn(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}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=gd(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,n=e.invocationResult||null,i=mo(e.filterSummary||e.filterResults);return!r&&!i&&!["PARTIAL","FAILURE"].includes(n)?null:{kind:r?"blocked":"unavailable",invocationResult:n,matchedFilters:[...s]}}function qf(t,e){const s=zf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Wf))],n=s.kind==="blocked",i=new Error(n?`Safety screening blocked this pipeline step for ${Kl(r)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=n?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=n?"Request blocked for safety":"Safety check unavailable",i.userMessage=n?`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.",i.retryExplanation=n?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=s.matchedFilters,i}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 n=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);n&&s.push(n[1])}return s}function ea(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,n,i)=>i.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(n,i,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=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)),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 n=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!n.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(i)}}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=>Ii(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=>Ii(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 n=r[1];if(!(new RegExp(`this\\.${n}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${n}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { const W({required this.value}); final double value; }`,neg:`class _P { @@ -14,7 +14,7 @@ class W extends StatefulWidget { final double value; }`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } -var x = Image.network(widget.imagePath);`},{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=>Ci(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 { +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=>Ii(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(); @@ -24,51 +24,51 @@ class _S extends State { @override Widget build(BuildContext c) => const Size 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 lr(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function eg(t,e){const s=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!s)return null;let r=0;for(let n=s.index+s[0].length-1;ntg(t).usable);function rg(t=""){const e=lr(t);return sg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:n})=>({id:s,severity:r,message:n}))}function ng(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let n=r.index+6,i=null;const o=n;for(;no;if(t[n]==="<"){const u=Qf(t,n);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),n=u.end,!/\s/.test(t[n]||"")))continue;for(;nQl(o.functionName)===r);if(n)return n;const i=o=>!o.functionName.startsWith("_");return s.find(i)||s[0]}function Nn(t=""){return Array.from(lr(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ig(t="",e=""){return sa(t,e)?.returnType||null}function ec(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 og(t,e){const s=Nn(e);if(s.length===0)return null;const n=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>ec(l)===n)||s.length>1)return null;const[o]=s,a=`${ec(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 ag(t,e,s=""){const r=sa(e,s)?.functionName;if(!r)return null;const n=String(t||"").split("/").pop(),i=ta(n,"A");if(i===r)return null;const o=`${ra(r)}.dart`;return`File name "${n}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function lg(t="",e=""){return sa(t,e)!==null}function cg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>Yf.has(r)?!1:!Zf.some(i=>r.endsWith(i))||e.has(r))}function ug(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=ig(t,e),n=cg(r,s);if(n.length===0)return null;const[i]=n;let o;return s.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:r===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", 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 dg(t,e={}){const s=[],r=t.fileName||"",n=t.code||"";if(Jf.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.")),!n.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(n)||s.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of rg(n))s.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!lg(n,t.artifactName)&&s.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Nn(n)),o=ug(n,{functionName:t.artifactName,declaredTypes:i});o&&s.push(Qe(t,"error",o));const a=ag(r,n,t.artifactName);a&&s.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(n)&&s.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=og(r,n);i&&s.push(Qe(t,"info",i))}return s}function hg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(i=>Nn(i.code||""))),r=e.flatMap(i=>dg(i,{declaredTypes:s})),n=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Xl[i.artifactType]||Xl.CodeFile}));return{valid:r.every(i=>i.severity!=="error"),findings:r,deployHints:n}}const tc="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function sc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function pg(t=""){const e=t.indexOf(tc);return e===-1?t:t.slice(e+tc.length).replace(/^\s*\n/,"")}const fg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function gg(t="",e=""){const s=pg(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(sc).filter(Boolean)),n=s.split(` -`).filter(i=>{const o=sc(i);return o===null||!r.has(o)?!0:!fg.test(i)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+n}const mg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function yd(t){let e="",s=0;for(;s{const r=s.name||s.package;if(!r||r==="flutter")return e;const n=s.versionRequired||s.required;return e[r]=n&&s.version||"",e},{})}function bg(t){const e=new Map,s=new Map,r=[];for(const n of t)e.has(n.fileName)?r.push(`Duplicate deploy file name "${n.fileName}" for artifacts "${e.get(n.fileName)}" and "${n.artifactId}".`):e.set(n.fileName,n.artifactId),s.has(n.path)?r.push(`Duplicate deploy path "${n.path}" for artifacts "${s.get(n.path)}" and "${n.artifactId}".`):s.set(n.path,n.artifactId);return r}function Eg(t,e={}){const s=Array.isArray(t?.artifacts)?t.artifacts:[],n=(e.selectedArtifactIds||t?.deployOrder||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];n.forEach(p=>{const f=wg(p),g=p.fixedCode||p.code||"",m=p.codeType||_g[p.artifactType]||Ne.OTHER;g.trim()||i.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||yg(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} +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 n=s.index+s[0].length-1;neg(t).usable);function sg(t=""){const e=ar(t);return tg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:n})=>({id:s,severity:r,message:n}))}function rg(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let n=r.index+6,i=null;const o=n;for(;no;if(t[n]==="<"){const u=Xf(t,n);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),n=u.end,!/\s/.test(t[n]||"")))continue;for(;nXl(o.functionName)===r);if(n)return n;const i=o=>!o.functionName.startsWith("_");return s.find(i)||s[0]}function Tn(t=""){return Array.from(ar(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ng(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 s=Tn(e);if(s.length===0)return null;const n=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Ql(l)===n)||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 sa(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function og(t,e,s=""){const r=ta(e,s)?.functionName;if(!r)return null;const n=String(t||"").split("/").pop(),i=ea(n,"A");if(i===r)return null;const o=`${sa(r)}.dart`;return`File name "${n}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function ag(t="",e=""){return ta(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(i=>r.endsWith(i))||e.has(r))}function cg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=ng(t,e),n=lg(r,s);if(n.length===0)return null;const[i]=n;let o;return s.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:r===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", 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||"",n=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.")),!n.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(n)||s.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of sg(n))s.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!ag(n,t.artifactName)&&s.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Tn(n)),o=cg(n,{functionName:t.artifactName,declaredTypes:i});o&&s.push(Qe(t,"error",o));const a=og(r,n,t.artifactName);a&&s.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(n)&&s.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=ig(r,n);i&&s.push(Qe(t,"info",i))}return s}function dg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(i=>Tn(i.code||""))),r=e.flatMap(i=>ug(i,{declaredTypes:s})),n=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Zl[i.artifactType]||Zl.CodeFile}));return{valid:r.every(i=>i.severity!=="error"),findings:r,deployHints:n}}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)),n=s.split(` +`).filter(i=>{const o=tc(i);return o===null||!r.has(o)?!0:!pg.test(i)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+n}const gg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function vd(t){let e="",s=0;for(;s{const r=s.name||s.package;if(!r||r==="flutter")return e;const n=s.versionRequired||s.required;return e[r]=n&&s.version||"",e},{})}function yg(t){const e=new Map,s=new Map,r=[];for(const n of t)e.has(n.fileName)?r.push(`Duplicate deploy file name "${n.fileName}" for artifacts "${e.get(n.fileName)}" and "${n.artifactId}".`):e.set(n.fileName,n.artifactId),s.has(n.path)?r.push(`Duplicate deploy path "${n.path}" for artifacts "${s.get(n.path)}" and "${n.artifactId}".`):s.set(n.path,n.artifactId);return r}function wg(t,e={}){const s=Array.isArray(t?.artifacts)?t.artifacts:[],n=(e.selectedArtifactIds||t?.deployOrder||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];n.forEach(p=>{const f=_g(p),g=p.fixedCode||p.code||"",m=p.codeType||mg[p.artifactType]||Ne.OTHER;g.trim()||i.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||vg(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={...rc(t?.dependencies),...n.reduce((p,f)=>({...p,...rc(f.dependencies)}),{})},c={};n.forEach(p=>{na(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=bg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:i,errors:h}}function Sg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function xg(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function kg(t,e){const r=[xg(t),Sg(e.content),e.artifactName].find(n=>/^[A-Z][A-Za-z0-9_]*$/.test(String(n||"")));if(!r)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return r}function Ig(t,e=new Map){const s=[];for(const[r,n]of t.entries())n.type!=="C"||e.has(n.path)||s.push({artifactId:n.artifactId||r,className:kg(r,n),content:n.content,fileName:r,path:n.path});return s}function Cg(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 nc={pass:0,warning:1,fail:2},Fg=["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 Pg(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 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 _o(...t){return t.filter(Boolean).reduce((e,s)=>nc[s]>nc[e]?s:e,"pass")}function wd(t,e="warning",s="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:s};const r=De(t),n=gt(r.message,r.title,r.issue,r.description,r.summary);return n?{severity:ia(r.severity||r.status||r.level)||e,message:n,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function yo(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(([n,i])=>tt(s[n]).map(o=>wd(o,i,e)).filter(Boolean))}function Ag(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),n=gt(r.title,r.action,r.step,r.message,r.name,r.description);return n?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:n,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 wo(t,e=null){const s=De(t);return Fg.flatMap(r=>tt(s[r])).map((r,n)=>Ag(r,n,e)).filter(Boolean)}function $g(t){let e=typeof t=="string"?mo(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=mo(s.content)||e);const r=De(e),n=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(n).length?n:r}}function Rg(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const n=De(r);return[n.id,n.fileName,n.artifactName,n.name].map(We).some(i=>i&&s.includes(i))})||null}function Tg(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(n=>We(n?.artifactId)===We(e.id)||We(n?.fileName)===We(e.fileName))?.pathHint||""}function Ng(t,e){return tt(t?.relationships).filter(s=>We(s?.from)===We(e.id)||We(s?.to)===We(e.id))}function Mg(t,e){return tt(t?.metadata?.compatibility?.findings).filter(s=>!s?.artifactId||We(s.artifactId)===We(e.id)).map(s=>wd(s,"warning","Compatibility check")).filter(Boolean)}function Lg(t,e,s,r){const n=Rg(e,s),i=De(n?.review||n||s.review),o=Object.keys(i).length>0,a=[...yo(i),...Mg(t,s)],l=wo(i,s.id),u=ia(i.status||i.verdict||i.outcome||i.result),c=a.length?_o(...a.map(h=>h.severity)):null,d=_o(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:Tg(t,s),relationships:Ng(t,s)}}function Og({status:t,score:e,artifactPresentations:s,manualSteps:r}){const n=s.length;if(n===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=s.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),n&&o.push(`${n} artifact${n===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Dg({bundle:t,reviewResult:e}){const s=De(t),r=tt(s.artifacts),{root:n,rawText:i}=$g(e),o=[n.bundleReview,n.overallReview,n.overall,n.bundleSummary,n.summaryReview,n.review].map(De).find(E=>Object.keys(E).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((E,I)=>Lg(s,a,E,I)),u=yo(n),d=[...yo(o),...u],h=[...wo(o),...wo(n),...l.flatMap(E=>E.manualSteps)].filter((E,I,F)=>F.findIndex(P=>P.title===E.title&&P.artifactId===E.artifactId)===I),p=ia(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=_o(p,...d.map(E=>E.severity),...l.map(E=>E.status)),g=o.score??n.score??n.overallScore??i,m=Pg(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,n.overallSummary,n.headline,n.summary,n.executiveSummary,n.overview,n.assessment,n.conclusion,i)||Og({status:f,score:m,artifactPresentations:l,manualSteps:h}),b=l.reduce((E,I)=>(E[I.status]+=1,E),{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:b,reviewCoverage:{reviewed:l.filter(E=>E.reviewComplete).length,total:l.length},deployOrder:tt(s.deployOrder),relationships:tt(s.relationships),warnings:tt(s.warnings),compatibility:De(s.metadata?.compatibility)}}const Bg=/^\uFEFF/;function Ds(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).join(` -`)}function jg(t){const e=String(t??"").replace(Bg,"");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 n=0,i=-1;const o=[];{let c=0;for(let d=0;d=0&&(n++,i<0&&(i=d),o.push(c+h)),c+=s[d].length+1}}if(n===0)return Ds(s);{const c=bo(e);if(!c.error&&o.every(h=>oc(h,c.commentAndStringRanges)))return Ds(s)}if(n===1){const c=Ds(s.slice(0,i)),d=Ds(s.slice(i+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cm));o=o.filter((m,_)=>!g.has(_)),o[p.index]=f}const u={...sc(t?.dependencies),...n.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};n.forEach(p=>{ra(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:i,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 r=[Eg(t),bg(e.content),e.artifactName].find(n=>/^[A-Z][A-Za-z0-9_]*$/.test(String(n||"")));if(!r)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return r}function xg(t,e=new Map){const s=[];for(const[r,n]of t.entries())n.type!=="C"||e.has(n.path)||s.push({artifactId:n.artifactId||r,className:Sg(r,n),content:n.content,fileName:r,path:n.path});return s}function kg(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},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 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 Cg(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function na(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,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),n=gt(r.message,r.title,r.issue,r.description,r.summary);return n?{severity:na(r.severity||r.status||r.level)||e,message:n,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function _o(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(([n,i])=>tt(s[n]).map(o=>yd(o,i,e)).filter(Boolean))}function Fg(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),n=gt(r.title,r.action,r.step,r.message,r.name,r.description);return n?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:n,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 yo(t,e=null){const s=De(t);return Ig.flatMap(r=>tt(s[r])).map((r,n)=>Fg(r,n,e)).filter(Boolean)}function Pg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=go(s.content)||e);const r=De(e),n=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(n).length?n:r}}function Ag(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const n=De(r);return[n.id,n.fileName,n.artifactName,n.name].map(We).some(i=>i&&s.includes(i))})||null}function $g(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(n=>We(n?.artifactId)===We(e.id)||We(n?.fileName)===We(e.fileName))?.pathHint||""}function Rg(t,e){return tt(t?.relationships).filter(s=>We(s?.from)===We(e.id)||We(s?.to)===We(e.id))}function Tg(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 Ng(t,e,s,r){const n=Ag(e,s),i=De(n?.review||n||s.review),o=Object.keys(i).length>0,a=[..._o(i),...Tg(t,s)],l=yo(i,s.id),u=na(i.status||i.verdict||i.outcome||i.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:$g(t,s),relationships:Rg(t,s)}}function Mg({status:t,score:e,artifactPresentations:s,manualSteps:r}){const n=s.length;if(n===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=s.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),n&&o.push(`${n} artifact${n===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Lg({bundle:t,reviewResult:e}){const s=De(t),r=tt(s.artifacts),{root:n,rawText:i}=Pg(e),o=[n.bundleReview,n.overallReview,n.overall,n.bundleSummary,n.summaryReview,n.review].map(De).find(w=>Object.keys(w).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((w,I)=>Ng(s,a,w,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(w=>w.manualSteps)].filter((w,I,F)=>F.findIndex(P=>P.title===w.title&&P.artifactId===w.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(w=>w.severity),...l.map(w=>w.status)),g=o.score??n.score??n.overallScore??i,m=Cg(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,n.overallSummary,n.headline,n.summary,n.executiveSummary,n.overview,n.assessment,n.conclusion,i)||Mg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((w,I)=>(w[I.status]+=1,w),{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(w=>w.reviewComplete).length,total:l.length},deployOrder:tt(s.deployOrder),relationships:tt(s.relationships),warnings:tt(s.warnings),compatibility:De(s.metadata?.compatibility)}}const Og=/^\uFEFF/;function Os(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).join(` +`)}function Dg(t){const e=String(t??"").replace(Og,"");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 n=0,i=-1;const o=[];{let c=0;for(let d=0;d=0&&(n++,i<0&&(i=d),o.push(c+h)),c+=s[d].length+1}}if(n===0)return Os(s);{const c=wo(e);if(!c.error&&o.every(h=>ic(h,c.commentAndStringRanges)))return Os(s)}if(n===1){const c=Os(s.slice(0,i)),d=Os(s.slice(i+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` +${d}`,{commentAndStringRanges:g}=wo(f),m=p.length+1+h;if(ic(m,g)){l.push(d);continue}a.push(Os(l)),l=null}const u=a.filter(c=>c.length>0);return u.length===0?"":u.join(` -`)}function Ug(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 bd(t){const e=Ug(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 Ed(t){return`${ra(t)}.dart`}function Hg(t){return ta(t,"W")}const ic={"(":")","[":"]","{":"}"},Wg={")":"(","]":"[","}":"{"},zg=/[A-Za-z0-9_]/;function bo(t){const e=[{kind:"code",opener:null,openedLine:0}],s=[];let r=1,n=0;const i=(c,d)=>{(c===` +`)}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 wd(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),s=>s[1])}function bd(t){return`${sa(t)}.dart`}function jg(t){return ea(t,"W")}const nc={"(":")","[":"]","{":"}"},Ug={")":"(","]":"[","}":"{"},Hg=/[A-Za-z0-9_]/;function wo(t){const e=[{kind:"code",opener:null,openedLine:0}],s=[];let r=1,n=0;const i=(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(;n0?t[n-1]:"",f=n>1?t[n-2]:"",g=(p==="r"||p==="R")&&!zg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:n,openedLine:r}),n+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:r}),n++;continue}if(Wg[c]){if(d.interpolation&&c==="}"){e.pop(),n++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),n++;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})}i(c,t[n+1]),n++}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 qg(t){return bo(String(t??"")).error}function oc(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 Vg=/^dependencies\s*:\s*(?:#.*)?$/,Gg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Mn(t){const e=t.match(Gg);return e?e[1]??e[2]??e[3]:null}function fr(t){const e=t.trim();return e===""||e.startsWith("#")}function ks(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function oa(t,e){const s=t.findIndex(i=>e.test(i));if(s===-1)return null;let r=s,n=null;for(let i=s+1;i=0.0.0"}`}function Yg(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 n=s.split(` -`),i=new Set(kd(s)),o=[],a=[];for(const[u,c]of r)i.has(u)?a.push(u):(o.push([u,c]),i.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=aa(n);if(l){const u=o.map(([c,d])=>ac(l.childIndent,c,d));n.splice(l.endIndex,0,...u)}else n.length>0&&n[n.length-1].trim()!==""&&n.push(""),n.push("dependencies:"),o.forEach(([u,c])=>{n.push(ac(" ",u,c))});return{yaml:n.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function Zg(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 n=s.split(` -`),i=On(s),o=[],a=[];for(const[l,u]of r){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(ks(n[c.lineIndex]));n[c.lineIndex]=`${d}${l}: ${Cd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:n.join(` -`),overridden:o,skipped:a}}function Fd(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),aa(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),kd(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 Xg=">=3.0.0 <4.0.0";function Eo(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=vg(t).filter(s=>!s.startsWith("dart:")&&!s.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function lc(t,e,s){const r=[];for(const[n,i]of t){if(i.isScalar){e[n]=Eo(i.constraint);continue}if(i.sourceKey==="sdk"){s.add(n);continue}if(i.sourceKey==="version"){e[n]=Eo(i.sourceValue);continue}r.push(n)}return r}function em(t){const e=new Set,s={},r={},n=lc(On(t),s,e);n.push(...lc(Kg(t,"dependency_overrides"),r,e));const i=new Set([...Object.keys(s),...e]),{sdk:o}=Id(t);return{sdkConstraint:Eo(o)||Xg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:i,unrepresentable:n}}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:n,sdkPackages:i,availablePackages:o,unrepresentable:a}=em(e),l={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},u=[],c=[];for(const d of t){const{className:h,content:p}=d,f=na(p),g=f.filter(b=>a.includes(b));if(g.length>0){c.push({className:h,reason:`${h} 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:m}=Qg(p),_=f.filter(b=>!o.has(b));if(m.length>0||_.length>0){c.push({className:h,reason:tm(h,m,_)});continue}u.push({fileName:`${ra(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}function cc(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",n=[];for(const i of s){const o=Pd(i);o&&n.push(o)}return{events:n,buffer:r}}function rm(t){const e=Pd(t);return e?[e]:[]}function Pd(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 nm(t,e={}){const{onPhase:s,onLog:r}=e;let n=null,i="";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}n=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=cc(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=cc("",await t.text());i=a.buffer,a.events.forEach(o)}return rm(i).forEach(o),n?{...n,success:n.success===!0||n.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 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 la(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 n=!1,i;for(;(i=r.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;n=!0,o===">="||o===">"?(s.min=a,s.minInclusive=o===">="):(s.max=a,s.maxInclusive=o==="<=")}return n?s:null}function uc(t,e){const s=la(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=_n(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=_n(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function cm(t,e){const s=la(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=_n(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function is(t){const e=la(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,n=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of n){const a=o?.version;if(!a||o.retracted||am(a))continue;const l=o.pubspec?.environment||{};s&&l.sdk&&!uc(l.sdk,s)||r&&l.flutter&&!uc(l.flutter,r)||(!i||_n(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function pm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:n=fetch}=e;let i;try{const a=await n(`${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}"`};i=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(i,{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,...n})=>[r,n]))}async function gm(t,e={},s={}){const{resolveVersions:r=fm}=s,n=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=Id(t),o={dartSdkFloor:is(i.sdk),flutterSdkFloor:is(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(n.length===0)return a;const l=On(t),u=[];for(const[c,d]of n){const h=l.get(c);if(!h){u.push(c);continue}const p=is(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(is(p)){a.additions[d]=`^${is(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${is(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 dc(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 Ad(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=bs(t);try{return s.highlight(r,{language:e}).value}catch(n){console.warn("Syntax highlighting failed:",n);try{return s.highlight(r,{language:"json"}).value}catch{return bt(r)}}}function Dn(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
';const n=String(t??"").split(` -`);let i=!1,o="";for(const a of n){if(a.startsWith("```")){if(i){const l=wm(o),u=Ad(o.trim(),l,s);r+=`
+`){s.push({start:d.startIndex,end:n}),o??=`line ${r}: string starting on line ${d.openedLine} is never closed`,e.pop();continue}if(!d.raw&&c==="\\"){i(t[n+1]??"",t[n+2]??""),n+=2;continue}if(!d.raw&&c==="$"&&t[n+1]==="{"){e.push({kind:"code",opener:null,interpolation:!0}),n+=2;continue}const h=d.triple?3:1;if(c===d.quote&&t.slice(n,n+h)===d.quote.repeat(h)){s.push({start:d.startIndex,end:n+h}),e.pop(),n+=h;continue}i(c,t[n+1]),n++;continue}if(c==="/"&&t[n+1]==="/"){e.push({kind:"line-comment",startIndex:n}),n+=2;continue}if(c==="/"&&t[n+1]==="*"){e.push({kind:"block-comment",startIndex:n,openedLine:r,depth:1}),n+=2;continue}if(c==="'"||c==='"'){const h=t.slice(n,n+3)===c.repeat(3),p=n>0?t[n-1]:"",f=n>1?t[n-2]:"",g=(p==="r"||p==="R")&&!Hg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:n,openedLine:r}),n+=h?3:1;continue}if(nc[c]){e.push({kind:"code",opener:c,openedLine:r}),n++;continue}if(Ug[c]){if(d.interpolation&&c==="}"){e.pop(),n++;continue}if(d.opener&&nc[d.opener]===c){e.pop(),n++;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})}i(c,t[n+1]),n++}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 Wg(t){return wo(String(t??"")).error}function ic(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 zg=/^dependencies\s*:\s*(?:#.*)?$/,qg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Nn(t){const e=t.match(qg);return e?e[1]??e[2]??e[3]:null}function pr(t){const e=t.trim();return e===""||e.startsWith("#")}function xs(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const s=t.findIndex(i=>e.test(i));if(s===-1)return null;let r=s,n=null;for(let i=s+1;i=0.0.0"}`}function Kg(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 n=s.split(` +`),i=new Set(xd(s)),o=[],a=[];for(const[u,c]of r)i.has(u)?a.push(u):(o.push([u,c]),i.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=oa(n);if(l){const u=o.map(([c,d])=>oc(l.childIndent,c,d));n.splice(l.endIndex,0,...u)}else n.length>0&&n[n.length-1].trim()!==""&&n.push(""),n.push("dependencies:"),o.forEach(([u,c])=>{n.push(oc(" ",u,c))});return{yaml:n.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Jg(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 n=s.split(` +`),i=Ln(s),o=[],a=[];for(const[l,u]of r){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(xs(n[c.lineIndex]));n[c.lineIndex]=`${d}${l}: ${Id(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:n.join(` +`),overridden:o,skipped:a}}function Cd(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),oa(e.split(` +`))||s.push("pubspec.yaml missing dependencies section"),xd(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 Yg=">=3.0.0 <4.0.0";function bo(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 Zg(t=""){const e=_d(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[n,i]of t){if(i.isScalar){e[n]=bo(i.constraint);continue}if(i.sourceKey==="sdk"){s.add(n);continue}if(i.sourceKey==="version"){e[n]=bo(i.sourceValue);continue}r.push(n)}return r}function Xg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e),i=ac(Vg(t,"dependency_overrides"),r,e),o=[...n,...i],a=new Set([...Object.keys(s),...e]),{sdk:l}=kd(t);return{sdkConstraint:bo(l)||Yg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:a,unrepresentable:o,unrepresentableOverrides:i}}function Qg(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 em(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a,unrepresentableOverrides:l}=Xg(e),u={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},c=[],d=[];for(const h of t){const{className:p,content:f}=h,g=ra(f),m=g.filter(w=>a.includes(w));if(m.length>0){d.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}if(l.length>0&&_d(f).some(w=>w.startsWith("package:"))){d.push({className:p,reason:`${p} was not compiled before deploying: your project's dependency_overrides redirects ${l.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Zg(f),E=g.filter(w=>!o.has(w));if(_.length>0||E.length>0){d.push({className:p,reason:Qg(p,_,E)});continue}c.push({fileName:`${sa(p)}.dart`,content:f})}return{manifest:u,sources:c,skipped:d}}function lc(t,e){const s=`${t}${e}`.split(` +`),r=s.pop()??"",n=[];for(const i of s){const o=Fd(i);o&&n.push(o)}return{events:n,buffer:r}}function tm(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 sm(t,e={}){const{onPhase:s,onLog:r}=e;let n=null,i="";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}n=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(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());i=a.buffer,a.events.forEach(o)}return tm(i).forEach(o),n?{...n,success:n.success===!0||n.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 rm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(rm);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 s=0;s0)}function om(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:om(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 n=!1,i;for(;(i=r.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;n=!0,o===">="||o===">"?(s.min=a,s.minInclusive=o===">="):(s.max=a,s.maxInclusive=o==="<=")}return n?s:null}function cc(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=vn(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=vn(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function am(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=vn(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function ns(t){const e=aa(t);return e?e.min:null}const lm="https://pub.dev/api/packages/",cm=8e3;function um(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null}=e,n=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of n){const a=o?.version;if(!a||o.retracted||im(a))continue;const l=o.pubspec?.environment||{};s&&l.sdk&&!cc(l.sdk,s)||r&&l.flutter&&!cc(l.flutter,r)||(!i||vn(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function dm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:n=fetch}=e;let i;try{const a=await n(`${lm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(cm)});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}"`};i=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=um(i,{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 hm(t,e={}){const s=await Promise.all(t.map(r=>dm(r,e)));return new Map(s.map(({name:r,...n})=>[r,n]))}async function pm(t,e={},s={}){const{resolveVersions:r=hm}=s,n=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=kd(t),o={dartSdkFloor:ns(i.sdk),flutterSdkFloor:ns(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(n.length===0)return a;const l=Ln(t),u=[];for(const[c,d]of n){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(am(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 fm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>fm[e])}function j(t){return t?bt(t).replace(/\n/g,"
"):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function gm(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 mm(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 vm(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 _m(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 ws(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=ws(t);try{return s.highlight(r,{language:e}).value}catch(n){console.warn("Syntax highlighting failed:",n);try{return s.highlight(r,{language:"json"}).value}catch{return bt(r)}}}function On(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
';const n=String(t??"").split(` +`);let i=!1,o="";for(const a of n){if(a.startsWith("```")){if(i){const l=_m(o),u=Pd(o.trim(),l,s);r+=`
${u}
`,o="",i=!1}else i=!0;continue}if(i){o+=a+` `;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`

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

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

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

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

${dc(a)}

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

${uc(a)}

`)}return r+="
",`
@@ -76,14 +76,14 @@ ${d}`,{commentAndStringRanges:g}=bo(f),m=p.length+1+h;if(oc(m,g)){l.push(d);cont
${r}
- `}const bm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses",Em="phc_KoqpBJCIiWMW5I6HKBM092DVXZbMmE4KkPHqI518pF3",Sm="https://us.i.posthog.com";ud.init(Em,{api_host:Sm,person_profiles:"identified_only"});function zt(t,e={}){try{ud.capture(t,e)}catch(s){console.error("PostHog tracking failed",s)}}const Je="https://4tgke4.buildship.run",$d={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},yn="ccc_auth_session",hc=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 wn={free:2,professional:50,power:2e3},bn="ccc_subscription",pc=3,Fm=new Set(["active","trialing","paid"]),cr="google/gemini-3.7-flash",Ur=["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 Rd(t){return Am.has(t)}const So=4,Fi=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>Fi);s.length&&ue(`Skipped ${s.length} image(s) over the ${(Fi/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=Fi);if(!r.length){t.target.value="";return}const n=So-Pt.length,o=r.slice(0,n).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&&!Rd(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),r.length>n&&ue(`You can attach up to ${So} images.`,"info"),ca())}function Lm(t){Pt.splice(t,1),ca()}function ca(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((s,r)=>{const n=document.createElement("div");n.className="prompt-img-thumb",n.innerHTML=`Prompt image`,t.appendChild(n)}),e&&(e.textContent=Pt.length>=So?"Image limit reached":"Add images"))}function Td(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),s=Rd(e?.value);t.classList.toggle("hidden",!s),!s&&Pt.length&&(Pt=[],ca())}const Kt="ccc_usage",Nd="google/gemini-3.7-flash",Md="google/gemini-3.7-flash",Pi="google/gemini-3.7-flash",fc={professional:11,power:49},xo={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"},Hr={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 Wr={...Hr};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 n=r.rates,i={AUD:1},o=new Set([...Object.keys(Hr),...Object.values(ko),...Object.values(xo)]);for(const a of o)a!=="AUD"&&(typeof n[a]=="number"&&n[a]>0?i[a]=n[a]:Hr[a]&&(i[a]=Hr[a]));Wr=i}catch{}finally{clearTimeout(e)}}const ko={"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 Ld(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&ko[i])return ko[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=xo[e];if(s)return s;const r=e.split("_")[0],n=xo[r];return n||"USD"}function gc(t,e){const s=Wr[e]??Wr.USD,r=t*s,n=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:n>=100||n%1===0?0:2}).format(n)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Wr.USD)}}const st="ccc_api_key_",_t="ccc_session_api_key_",it="ccc_encryption_key",ur="ccc_encryption_key_scope",Dm="ccc_keystore",En="keys",dr="ccc_encryption_key_version";let Io=null,Sn=null,hr=!1,xn=!1,mc=!1;class kn extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function vc(){if(mc)return;mc=!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 Od(){return localStorage.getItem(dr)||""}function Co(){return crypto.randomUUID?.()||Bd(crypto.getRandomValues(new Uint8Array(16)))}function Bm(){const t=Od();if(t)return t;const e=Co();return localStorage.setItem(dr,e),e}function Ss(){Io=null,Sn=null,hr=!1,xn=!1}window.addEventListener("storage",t=>{t.key===dr&&Ss()});function jm(){return new Promise((t,e)=>{const s=indexedDB.open(Dm,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(En)||r.createObjectStore(En)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function ua(t,e){const s=await jm();return new Promise((r,n)=>{const i=s.transaction(En,t);let o;try{o=e(i.objectStore(En))}catch(l){s.close(),n(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>n(o.error),i.oncomplete=()=>{s.close(),r(a)},i.onerror=()=>{s.close(),n(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{s.close(),n(i.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 ua("readonly",e=>e.get(it));return Um(t)?t:null}async function Dd(t){await ua("readwrite",e=>e.put(t,it))}async function Wm(){Ss();try{await ua("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function zm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Dd(e),sessionStorage.removeItem(it),sessionStorage.removeItem(ur),localStorage.removeItem(st+"salt"),e}async function _c(t){const e=sessionStorage.getItem(it);if(e)return xn=sessionStorage.getItem(ur)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new kn;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(it,JSON.stringify(r)),sessionStorage.setItem(ur,"session"),xn=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function qm(t){if(sessionStorage.getItem(ur)==="session"&&sessionStorage.getItem(it))return vc(),hr=!0,_c(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 Dd(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),vc(),hr=!0,_c(t)}}async function da(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=Bm();Sn!==s&&Ss();const r=Io||qm(e);Io=r,Sn=s;try{return await r}catch(n){throw Ss(),n}}async function Vm(t){const e=await da(),s=Sn,r=new TextEncoder,n=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r.encode(t)),o=new Uint8Array(n.length+i.byteLength);return o.set(n),o.set(new Uint8Array(i),n.length),{ciphertext:Bd(o),keyVersion:s,sessionFallback:hr}}async function Gm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await da({allowSessionFallbackCreation:!1});if(hr&&!s&&!xn)throw new kn;const n=Km(t),i=n.slice(0,12),o=n.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof kn)throw r;return console.error("Decryption failed:",r),null}}function Bd(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let pr="",In="",Xs=null,wc=0;async function ha(){sessionStorage.getItem(it)&&await da(),pr=await Ee("flutterflow"),In=await Ee("flutterflow_project_id"),Qm(),Xt()}function pa(){document.getElementById("api-keys-modal").classList.add("open"),ga(),pr&&Wd(pr)}function jd(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&&(fa(),s.classList.add("open"))}let Et=1;function Ud(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Bn(){const t=Ud();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 n=e.querySelector("div:first-child");n&&(n.classList.remove("bg-gray-400"),n.classList.add("bg-blue-500"),n.innerHTML=r)}else if(r0&&Et<=t&&(Et++,Bn())}function Ym(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Bn(),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 Hd(){if(G.isVerified&&Yt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Bn(),e.classList.add("open"))}}async function ga(){const t=document.getElementById("flutterflow-api-key-input");pr?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Xm()}function Xm(){bc("flutterflow","flutterflow-key-status"),bc("flutterflow_project_id","flutterflow-project-status")}function bc(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),n=s.querySelector("span");ls(t)?(r.className="key-status-dot configured",n.className="text-green-600",n.textContent="User key configured"):(r.className="key-status-dot missing",n.className="text-gray-500",n.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,n)=>{const i=s[n];i==="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(i)?(r.className="key-status-dot configured",r.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=i.charAt(0).toUpperCase()+i.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 yc("flutterflow",t.value);const s=e?.value.trim()||"";if(s){if(!jn(s)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await yc("flutterflow_project_id",s)}await ha(),ga();const r=document.querySelector("#api-keys-modal .bg-blue-500"),n=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=n,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),jd()},1e3)}async function tv(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(dr,Co()),Ss(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(ur),localStorage.removeItem(st+"salt"),await Wm(),localStorage.setItem(dr,Co()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await ha();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),ga()}function jn(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",nv(async e=>{const s=e.target.value.trim();s&&await Wd(s)},500)))}function nv(t,e){let s;return function(...n){const i=()=>{clearTimeout(s),t(...n)};clearTimeout(s),s=setTimeout(i,e)}}async function Wd(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 n=await new mr(t,"").listProjects();if(!n||n.length===0){e.innerHTML='';return}e.innerHTML='',n.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),In&&(e.value=In)}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 iv(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + `}const ym="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Ad={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},_n="ccc_auth_session",dc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function bs(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=bs({isResolved:!0});const wm=`${Je}/service/runpipeline`,bm="bs_user_id",Em="bs_identity_token",Sm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const yn={free:2,professional:50,power:2e3},wn="ccc_subscription",hc=3,xm=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"],km={"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 km[t]||t}const Im=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 Im.has(t)}const Eo=4,Ci=8*1024*1024,Cm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Fm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Pm(t){const e=new FormData;return e.append("file",t),(await fetch(Cm,{method:"POST",body:e})).json()}function Am(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 $m(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const s=e.filter(l=>l.size>Ci);s.length&&ue(`Skipped ${s.length} image(s) over the ${(Ci/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=Ci);if(!r.length){t.target.value="";return}const n=Eo-Pt.length,o=r.slice(0,n).map(async l=>{const u=await Fm(l);if(!u)return null;let c="";try{c=Am(await Pm(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>n&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Rm(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 n=document.createElement("div");n.className="prompt-img-thumb",n.innerHTML=`Prompt image`,t.appendChild(n)}),e&&(e.textContent=Pt.length>=Eo?"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 Gt="ccc_usage",Td="google/gemini-3.7-flash",Nd="google/gemini-3.7-flash",Fi="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"},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 Tm(){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 n=r.rates,i={AUD:1},o=new Set([...Object.keys(Ur),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof n[a]=="number"&&n[a]>0?i[a]=n[a]:Ur[a]&&(i[a]=Ur[a]));Hr=i}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 Md(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&xo[i])return xo[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=So[e];if(s)return s;const r=e.split("_")[0],n=So[r];return n||"USD"}function fc(t,e){const s=Hr[e]??Hr.USD,r=t*s,n=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:n>=100||n%1===0?0:2}).format(n)}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_",it="ccc_encryption_key",cr="ccc_encryption_key_scope",Nm="ccc_keystore",bn="keys",ur="ccc_encryption_key_version";let ko=null,En=null,dr=!1,Sn=!1,gc=!1;class xn 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 Io(){return crypto.randomUUID?.()||Dd(crypto.getRandomValues(new Uint8Array(16)))}function Mm(){const t=Ld();if(t)return t;const e=Io();return localStorage.setItem(ur,e),e}function Es(){ko=null,En=null,dr=!1,Sn=!1}window.addEventListener("storage",t=>{t.key===ur&&Es()});function Lm(){return new Promise((t,e)=>{const s=indexedDB.open(Nm,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(bn)||r.createObjectStore(bn)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function ca(t,e){const s=await Lm();return new Promise((r,n)=>{const i=s.transaction(bn,t);let o;try{o=e(i.objectStore(bn))}catch(l){s.close(),n(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>n(o.error),i.oncomplete=()=>{s.close(),r(a)},i.onerror=()=>{s.close(),n(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{s.close(),n(i.error||new Error("Encryption key transaction aborted."))}})}function Om(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Dm(){const t=await ca("readonly",e=>e.get(it));return Om(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,it))}async function Bm(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function jm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Od(e),sessionStorage.removeItem(it),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),e}async function vc(t){const e=sessionStorage.getItem(it);if(e)return Sn=sessionStorage.getItem(cr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new xn;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(it,JSON.stringify(r)),sessionStorage.setItem(cr,"session"),Sn=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Um(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await Dm();if(e)return e;const s=await jm();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=Mm();En!==s&&Es();const r=ko||Um(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function Hm(t){const e=await ua(),s=En,r=new TextEncoder,n=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r.encode(t)),o=new Uint8Array(n.length+i.byteLength);return o.set(n),o.set(new Uint8Array(i),n.length),{ciphertext:Dd(o),keyVersion:s,sessionFallback:dr}}async function Wm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=zm(t),i=n.slice(0,12),o=n.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof xn)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="",kn="",Zs=null,yc=0;async function da(){sessionStorage.getItem(it)&&await ua(),hr=await Ee("flutterflow"),kn=await Ee("flutterflow_project_id"),Jm(),Zt()}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 Dn(){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 n=e.querySelector("div:first-child");n&&(n.classList.remove("bg-gray-400"),n.classList.add("bg-blue-500"),n.innerHTML=r)}else if(r0&&Et<=t&&(Et++,Dn())}function Vm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Gm(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&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Dn(),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",Km()}function Km(){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"),n=s.querySelector("span");as(t)?(r.className="key-status-dot configured",n.className="text-green-600",n.textContent="User key configured"):(r.className="key-status-dot missing",n.className="text-gray-500",n.textContent="Not configured")}function Zt(){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 Jm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,n)=>{const i=s[n];i==="flutterflow"?as("flutterflow")&&as("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):as("flutterflow")||as("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)"):as(i)?(r.className="key-status-dot configured",r.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Zt()}async function Ym(){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(!Bn(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"),n=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=n,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),Bd()},1e3)}async function Zm(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ur,Io()),Es(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),await Bm(),localStorage.setItem(ur,Io()),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 Bn(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Xm(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function Qm(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;Xm("flutterflow-api-key-input",s)}),t.addEventListener("blur",ev(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function ev(t,e){let s;return function(...n){const i=()=>{clearTimeout(s),t(...n)};clearTimeout(s),s=setTimeout(i,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 n=await new gr(t,"").listProjects();if(!n||n.length===0){e.innerHTML='';return}e.innerHTML='',n.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),kn&&(e.value=kn)}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 tv(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=ar(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Un(){const t=mn(y.bundleSpec);y.artifactBundle=ar(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=hg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(s=>s.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=mn(y.artifactBundle).id}function Hn(){const t=ar(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 n=r.review;return n&&typeof n.fixedSource=="string"&&n.fixedSource.trim()}).map(r=>[r.id,r.review.fixedSource.trim()]));y.bundleReview=ar({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(r=>{const n=s.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...n?{fixedCode:n}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function zd(){const t=ma();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ma(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||mn(t)}function va(){return ma().code||y.step2Result||""}async function lv(){try{await ha()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const zr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function 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 mr{constructor(e,s,r="main",n=zr.production){this.apiKey=e,this.baseUrl=n,this._projectId=s,this._branchName=r,this._endpoint=n}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 n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!n.ok){const a=await n.text();s=new Error(`Export failed: ${n.status} - ${a}`);continue}const i=await n.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){s=new Error("Export response did not include project source.");continue}return o}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const n=r.slice(0,r.length-12),i=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(n))return!1;const l=a.slice(n.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(n.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:i}}async pushCodeWithRetry(e,s=3){const r=[zr.production,zr.staging],n=Math.max(0,r.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(n=>({id:n.id,name:n.project?.name||n.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 n of e){const i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return n!==e[0]&&console.log(`listProjects answered on legacy path ${n}`),this.parseProjectsResponse(await i.json());if(s=i.status,r=await i.text(),console.warn(`listProjects via ${n} returned ${s}: ${r}`),i.status===401||i.status===403)throw new Error(cv(i.status,r));if(i.status!==404)throw new Error(`List projects failed: ${i.status} - ${r}`)}throw new Error(`List projects failed: ${s} - ${r}`)}}async function _a(t){const e=t.clone();let s;try{s=await t.json()}catch{const i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let n=s.message||`HTTP ${t.status}`,i=new Map;if(s.errors)i=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&&(i=new Map(Object.entries(s)),n=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:n,errorMap:i}}let r={};if(s.value)try{r=typeof s.value=="string"?JSON.parse(s.value):s.value}catch(n){console.warn("Ignoring malformed push response value:",n)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function ya(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"},qd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,Vd=/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=qd.test(e),r=Vd.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function Gd(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 wa(t,e=new Map){return Kf(t,e)}const Fo=new Map;function Kd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Wn(t){Fo.delete(Kd(t))}async function ba(t,e,s,r,n=""){const i=Ig(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e,unverified:[]};const o=sm(i,n),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 ${i.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:i,verification:a,stream:!0})}),c=await nm(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 Wn(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:s,syncFileMap:Cg(e,i),unverified:l}}async function Ea(t,e={}){const s=Kd(t);let r=Fo.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=Fd(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.`);Fo.set(s,r)}const n=await gm(r.pubspecYaml,e),i=Zg(r.pubspecYaml,n.overrides),o=Yg(i.yaml,n.additions);return n.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${n.additions[a]||"any"}`).join(", "),n.sdk.dartSdkFloor?`(resolved for Dart ${n.sdk.dartSdkFloor})`:""),n.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:i.overridden,warnings:n.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 n=t.content.match(/print\s*\(/g);n&&n.length>3&&s.push(`Code contains ${n.length} print statements. Consider removing debug prints before committing.`);const i=qg(t.content);if(i&&e.push(`FlutterFlow cannot format this code - ${i}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=bd(t.content),a=Hg(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=`${Ed(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 Jd(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode",fileName:n}=e,i=jg(t);let o=n||r;if(s==="CustomFunction")o="custom_functions.dart";else if(s==="CustomWidget"){const u=bd(i)[0],c=u?Ed(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 + `)}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 rv(){y.bundleSpec=or(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function jn(){const t=gn(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=gn(y.artifactBundle).id}function Un(){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 n=r.review;return n&&typeof n.fixedSource=="string"&&n.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 n=s.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...n?{fixedCode:n}:{}}})||[],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)||gn(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 Wr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function iv(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",n=Wr.production){this.apiKey=e,this.baseUrl=n,this._projectId=s,this._branchName=r,this._endpoint=n}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 n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!n.ok){const a=await n.text();s=new Error(`Export failed: ${n.status} - ${a}`);continue}const i=await n.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){s=new Error("Export response did not include project source.");continue}return o}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const n=r.slice(0,r.length-12),i=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(n))return!1;const l=a.slice(n.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(n.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:i}}async pushCodeWithRetry(e,s=3){const r=[Wr.production,Wr.staging],n=Math.max(0,r.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(n=>({id:n.id,name:n.project?.name||n.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 n of e){const i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return n!==e[0]&&console.log(`listProjects answered on legacy path ${n}`),this.parseProjectsResponse(await i.json());if(s=i.status,r=await i.text(),console.warn(`listProjects via ${n} returned ${s}: ${r}`),i.status===401||i.status===403)throw new Error(iv(i.status,r));if(i.status!==404)throw new Error(`List projects failed: ${i.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 i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let n=s.message||`HTTP ${t.status}`,i=new Map;if(s.errors)i=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&&(i=new Map(Object.entries(s)),n=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:n,errorMap:i}}let r={};if(s.value)try{r=typeof s.value=="string"?JSON.parse(s.value):s.value}catch(n){console.warn("Ignoring malformed push response value:",n)}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 ov(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 Co=new Map;function Gd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hn(t){Co.delete(Gd(t))}async function wa(t,e,s,r,n=""){const i=xg(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e,unverified:[]};const o=em(i,n),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 ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(ym,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:i,verification:a,stream:!0})}),c=await sm(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 Hn(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:s,syncFileMap:kg(e,i),unverified:l}}async function ba(t,e={}){const s=Gd(t);let r=Co.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=Cd(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.`);Co.set(s,r)}const n=await pm(r.pubspecYaml,e),i=Jg(r.pubspecYaml,n.overrides),o=Kg(i.yaml,n.additions);return n.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${n.additions[a]||"any"}`).join(", "),n.sdk.dartSdkFloor?`(resolved for Dart ${n.sdk.dartSdkFloor})`:""),n.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:i.overridden,warnings:n.warnings,remoteFiles:r.files}}function av(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 n=t.content.match(/print\s*\(/g);n&&n.length>3&&s.push(`Code contains ${n.length} print statements. Consider removing debug prints before committing.`);const i=Wg(t.content);if(i&&e.push(`FlutterFlow cannot format this code - ${i}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=wd(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=`${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:n}=e,i=Dg(t);let o=n||r;if(s==="CustomFunction")o="custom_functions.dart";else if(s==="CustomWidget"){const u=wd(i)[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'; @@ -109,15 +109,15 @@ import '/flutter_flow/lat_lng.dart'; import '/flutter_flow/place.dart'; import '/flutter_flow/uploaded_file.dart'; -`),{content:gg(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function hv(t){const e={};for(const s of na(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,n=""){const i=[],o=qd.test(e),a=Vd.test(e);return s===U.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:i.length===0,errors:i}}function zn(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(n=>Nn(n.content||"")));for(const[n,i]of t.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${n} is empty`),i.content&&i.content.length>1e5&&s.push(`File ${n} is very large (>100KB)`),n.endsWith(".dart")){const o=fv(n,i.content,i.type,r,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${n}: ${a}`))}if(n==="pubspec.yaml"){const o=Fd(i.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:n={},artifactName:i=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(!jn(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=gr(),u=new mr(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=r||uv(e,t),h=Gd(e,d);c.set(e,{artifactName:i,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=zn(c);if(!p.valid)throw new Error(`Validation failed: +`),{content:fg(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function lv(t){const e={};for(const s of ra(t))e[s]="";return e}function cv(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 uv(t,e,s,r=new Set,n=""){const i=[],o=zd.test(e),a=qd.test(e);return s===U.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:i.length===0,errors:i}}function Wn(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(n=>Tn(n.content||"")));for(const[n,i]of t.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${n} is empty`),i.content&&i.content.length>1e5&&s.push(`File ${n} is very large (>100KB)`),n.endsWith(".dart")){const o=uv(n,i.content,i.type,r,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${n}: ${a}`))}if(n==="pubspec.yaml"){const o=Cd(i.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 dv(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:n={},artifactName:i=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(!Bn(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||ov(e,t),h=Vd(e,d);c.set(e,{artifactName:i,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Wn(c);if(!p.valid)throw new Error(`Validation failed: ${p.errors.join(` -`)}`);const f=await Ea(u,n),g=f.yaml,m=await ba(u,c,f.remoteFiles,`Provision ${i} custom class`,g),_=await wa(m.syncFileMap,m.remoteFiles),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const E=await Sa(b),I={project_id:a,zipped_custom_code:E,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),Wn(u),be.set("push");const F=await u.pushCode(I),P=await _a(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||ya(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 Sa(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:n,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(V.PREPARING);const o=Jd(t,{artifactType:s,artifactName:r,fileName:n}),a=hv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Xs||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(!jn(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:Gd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,c.size);const d=zn(c);if(!d.valid)throw new Error(`File validation failed: +`)}`);const f=await ba(u,n),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${i} 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 w=await Ea(E),I={project_id:a,zipped_custom_code:w,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),Hn(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 hv(t,e={}){const{artifactType:s,artifactName:r,fileName:n,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(V.PREPARING);const o=Kd(t,{artifactType:s,artifactName:r,fileName:n}),a=lv(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(!Bn(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=Wn(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=gr(),p=new mr(l,u,"main",h),f=await Ea(p,a),g=f.yaml,m=await ba(p,c,f.remoteFiles,`Provision ${r} custom class`,g),_=await wa(m.syncFileMap,m.remoteFiles),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const E=await Sa(b),I={project_id:u,zipped_custom_code:E,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Wn(p),be.set("push");const F=await p.pushCode(I),P=await _a(F);if(P.success){const B={...pv(o,i),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||ya(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: +`)}`);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 w=await Ea(E),I={project_id:u,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...cv(o,i),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 pv(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 n=zn(r);if(!n.valid)throw new Error(`File validation failed: +`)}`);const r=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,r.size);const n=Wn(r);if(!n.valid)throw new Error(`File validation failed: ${n.errors.join(` -`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Xs||await Ee("flutterflow_project_id");if(!i)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(!jn(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=gr(),l=new mr(i,o,"main",a),u=await Ea(l,t.dependencies),c=u.yaml,d=await ba(l,r,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await wa(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 Sa(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),Wn(l),be.set("push");const m=await l.pushCode(g),_=await _a(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 b=_.errorMessage||ya(_.responseCode),E=new Error(b);throw E.errorMap=_.errorMap,E}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=ea("architect");try{return await Cn("architect",Nd,Lf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function qn(t,e,s=[]){const r=Of(t),n=ea("generator",y.bundleSpec);try{return await Cn("generator",e,r,n,s)}catch(i){if(i.isModelArmor)throw i;if(e!==Pi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await Cn("generator",Pi,r,n,s)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Pi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function Vn(t,e=null){const s={...ea("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Cn("review",Md,Df(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function xa(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Po(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` +`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Zs||await Ee("flutterflow_project_id");if(!i)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(!Bn(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=fr(),l=new gr(i,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),Hn(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),w=new Error(E);throw w.errorMap=_.errorMap,w}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 fv(t,e=[]){const s=Qo("architect");try{return await In("architect",Td,Mf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function zn(t,e,s=[]){const r=Lf(t),n=Qo("generator",y.bundleSpec);try{return await In("generator",e,r,n,s)}catch(i){if(i.isModelArmor)throw i;if(e!==Fi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await In("generator",Fi,r,n,s)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Fi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function qn(t,e=null){const s={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await In("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 Fo(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=` @@ -125,19 +125,19 @@ ${n.errors.join(` `):r.innerHTML=` - `)}function ve(t,e){const s=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(s.classList.remove("hidden"),r.classList.add("hidden"),Po(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Po(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 n=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};n&&(n.textContent=i[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 n=e.closest(".code-container")?.querySelector(".copy-btn");n&&(n.classList.add("copied"),n.innerHTML=' Copied!',setTimeout(()=>{n.classList.remove("copied"),n.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function Ao(t){const e=Ro(t);console.log(`Step 1 (Prompt Architect): ${qt(Nd)}`),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(Md)}`)}async function Ev(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,ka("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` + `)}function ve(t,e){const s=document.getElementById(`step${t}-loading`),r=document.getElementById(`step${t}-result`);e?(s.classList.remove("hidden"),r.classList.add("hidden"),Fo(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Fo(t,"completed"))}function gv(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 mv(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 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 n=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};n&&(n.textContent=i[t]||"Active Workflow Stage")}function vv(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{const n=e.closest(".code-container")?.querySelector(".copy-btn");n&&(n.classList.add("copied"),n.innerHTML=' Copied!',setTimeout(()=>{n.classList.remove("copied"),n.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Td)}`),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(Nd)}`)}async function _v(){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=ma(),r=Bf({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."});Jn(),nt(2),ze(2),ve(2,!0),y.step2Result=await qn(r,t),Un();const n=document.getElementById("step2-output"),i=bs(y.step2Result);n.textContent=i,n.dataset.raw=i,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await Vn(y.step2Result,y.step1Result),Hn();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Dn(y.step3Result);Yn(i,a)}catch(s){console.error("Refinement failed:",s),$t(),ue(xa(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Xt()}}async function ka(t,e,s){const r=`${Je}/connectFeedback`,n={type:t,code:e,input:s};try{const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function 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,ka("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.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."});Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(r,t),jn();const n=document.getElementById("step2-output"),i=ws(y.step2Result);n.textContent=i,n.dataset.raw=i,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=On(y.step3Result);Jn(i,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"}),Zt()}}async function xa(t,e,s){const r=`${Je}/connectFeedback`,n={type:t,code:e,input:s};try{const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function yv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function wv(){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 n=md({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});lh(),Jn(),nt(2),ze(2),ve(2,!0),y.step2Result=await qn(n,s),Un();const i=document.getElementById("step2-output"),o=bs(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await Vn(y.step2Result,y.step1Result),Hn();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Dn(y.step3Result);Yn(o,l),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),$t(),ue(xa(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Xt()}}async function $o(){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=Ro(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=` + Fixing…`);try{const n=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});ah(),Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(n,s),jn();const i=document.getElementById("step2-output"),o=ws(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=On(y.step3Result);Jn(o,l),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),$t(),ue(Sa(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.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 jv())return;await Nv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,sv(),r.disabled=!0,r.innerHTML=` - Running...`,Ao(s);try{Zt();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");const i=document.getElementById("paywall-exhausted");i&&i.classList.add("hidden"),Jn(),ze(1),nt(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),nt(2),ve(2,!0),y.step2Result=await qn(y.step1Result,s,o),Un(),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),nt(3),ve(3,!0),y.step3Result=await Vn(y.step2Result,y.step1Result),Hn(),zt("Code Review Completed");const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Dn(y.step3Result);Yn(c,h)}catch(n){if(console.error("Pipeline failed:",n),$t(),n.isUsageLimit){const{count:c}=Gn();$a(c,Aa(),{openModal:!0});return}zt("Pipeline Failed",{error:n.message,effectiveModel:Ro(document.getElementById("code-generator-model").value)});const o=vm(n,{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(n.isModelArmor)u.innerHTML=``}Fo(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=[cr,"anthropic/claude-opus-5","openai/gpt-5.6-sol"].filter(r=>r!==t),s=prompt(`Retry with different model? + Run Pipeline`,Zt()}}function bv(){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} @@ -156,14 +156,14 @@ Options: 1. ${e[0]} 2. ${e[1]} -Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],$o()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],$o())}async function Iv(){const t=va();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"),pa();return}if(y.artifactBundle?.artifacts?.length>1){await Cv();return}const{artifactType:r,artifactName:n,fileName:i}=zd(),o=Jd(t,{artifactType:r,artifactName:n,fileName:i}),a=dv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}th(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"),pa();return}const s=Eg(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}])),n=zn(r),i={canProceed:n.valid&&s.errors.length===0,issues:[...s.errors,...n.errors],warnings:[...s.warnings,...n.warnings]};if(!i.canProceed){ue(`Bundle validation failed: ${i.issues.join("; ")}`,"error");return}const o={content:s.fileEntries.map(a=>`// ${a.fileName} +Enter 1 or 2:`);s==="1"?(document.getElementById("code-generator-model").value=e[0],Ao()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],Ao())}async function Ev(){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 Sv();return}const{artifactType:r,artifactName:n,fileName:i}=Wd(),o=Kd(t,{artifactType:r,artifactName:n,fileName:i}),a=av(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}eh(o,a,null,null)}async function Sv(){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=wg(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}])),n=Wn(r),i={canProceed:n.valid&&s.errors.length===0,issues:[...s.errors,...n.errors],warnings:[...s.warnings,...n.warnings]};if(!i.canProceed){ue(`Bundle validation failed: ${i.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};th(o,i,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=`
+`),fileName:`${s.fileEntries.length} files`,codeType:"bundle",artifactType:"Bundle",artifactName:s.title};eh(o,i,s.dependencies,s)}function xv(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[n,i]of e.entries()){const o=Sd(i);s+=`
  • +
      `;for(const[n,i]of e.entries()){const o=Ed(i);s+=`
    • ${j(n)}: ${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=` +
`;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{kv(t.error,e)}))}async function kv(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 n=`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=Sd(d);n+=`File: ${c} +`;if(e&&e.size>0)for(const[c,d]of e.entries()){const h=Ed(d);n+=`File: ${c} Error: ${h} `}else n+=`${t} -`;const i=md({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:n});Jn(),nt(2),ze(2),ve(2,!0),y.step2Result=await qn(i,s),Un();const o=document.getElementById("step2-output"),a=bs(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await Vn(y.step2Result,y.step1Result),Hn();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=Dn(y.step3Result);Yn(a,u)}catch(n){console.error("Regeneration failed:",n),$t(),ue(xa(n,"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 Ec(t,e){const s=Yd(),r=(G.email||s.email)!==t;G.email=t,G.sessionToken=e,G.isVerified=!0,fe=Es({isLoading:!0}),localStorage.setItem(yn,JSON.stringify({email:t,sessionToken:e})),r&&Ra()}function Ia(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=Es({isResolved:!0}),localStorage.removeItem(yn),localStorage.removeItem(bn)}function Yd(){try{const t=localStorage.getItem(yn);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(yn),{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);Ec(s,r)}catch(s){ue(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Yd();if(s&&r){const n=await Tv(r);n?Ec(n.email,n.sessionToken):Ia()}}Fa()}function Ca(){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(i){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:i}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Ov(){Ia(),Ra(),Fa(),Kn()}function Fa(){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 n=document.getElementById("auth-user-email");n&&(n.textContent=G.email||""),qr(),Kn()}async function Zd(){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 n=await r.json();if(Ge.userId=n.user_id,Ge.token=n.identity_token||null,Ge.status=n.status,Ge.resolved=!0,sessionStorage.setItem(km,n.user_id),Ge.token&&sessionStorage.setItem(Im,Ge.token),n.usage_count!==void 0){const i=At(),a=(n.usage_month||i)===i?n.usage_count:0;localStorage.setItem(Kt,JSON.stringify({count:a,month:i})),Qs()}console.log(`Identity resolved: ${n.status} (${n.user_id.slice(0,8)}...) usage: ${n.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Ai=null;function Dv(t=5e3){return Ge.resolved?Promise.resolve():(Ai||(Ai=Zd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Ai,new Promise(e=>setTimeout(e,t))]))}function Xd(){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 Gn(){const t=Xd();return t.month!==At()?{count:0,month:At()}:t}function Bv(){const e={count:Gn().count+1,month:At()};return localStorage.setItem(Kt,JSON.stringify(e)),e}function Pa(){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(wn,e)?e:null}function Uv(t){return t&&Object.entries($d).find(([,e])=>e===t)?.[0]||null}function Rr(...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||{},n=Rr(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),i=Rr(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=jv(Rr(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(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Uv(n)||(a||l?"professional":"free");return Es({tier:u,status:i,periodEnd:Rr(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function Aa(){return wn[fe.tier]??wn.free}async function zv(){if(G.isVerified&&(!Yt()||Pa())&&(await Qd({force:!0}),Kn()),G.isVerified&&!Yt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Gn(),e=Aa();if(t>=e)return $a(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 $i(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function $a(t,e,s={}){const r=document.getElementById("walkthrough-modal");r&&r.classList.remove("open");const n=document.getElementById("ready-state");n&&n.classList.add("hidden");const i=document.getElementById("preview-frame-container");i&&(i.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Fn();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&&Fn()}function Ro(t){return fe.tier==="free"&&Ur.includes(t)?cr:t}function qv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,n=!(G.isVerified&&!Yt())&&s==="free";Array.from(e.options).forEach(o=>{const a=qt(o.value),l=Ur.includes(o.value);o.textContent=l&&n?`${a} (PRO)`:a,o.disabled=!1}),n&&Ur.includes(e.value)&&(e.value=cr),e.disabled=!1,hc.has(e)||(e.addEventListener("change",()=>{Yt()&&fe.tier==="free"&&Ur.includes(e.value)&&(e.value=cr,Fn()),Ao(e.value),Td()}),hc.add(e));let i=document.getElementById("model-selector-free-notice");n?(i||(i=document.createElement("p"),i.id="model-selector-free-notice",i.className="text-xs text-gray-400 mt-1",t.appendChild(i)),i.innerHTML='Free plan — Gemini only. '):i&&i.remove(),Ao(e.value)}function Qs(){const t=document.getElementById("usage-counter");if(!t)return;if(G.isVerified&&Pa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",qr(),$i();return}if(G.isVerified&&!Yt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",qr(),$i();return}const{count:e}=Gn(),s=Aa();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",qr(),e>=s&&!y.isRunning?$a(e,s):$i()}function qr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Xd(),s=e.month===At()?e.count??0:0,r=wn.free;t.textContent=`${s} / ${r} generations used`}async function Qd(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(bn);if(!e&&s)try{const{data:r,email:n,ts:i,version:o}=JSON.parse(s);if(o===pc&&n===G.email&&Date.now()-i<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 n=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(n.error){if(["unauthorized","invalid session","expired session"].some(o=>String(n.error).toLowerCase().includes(o))){Ia(),Fa();return}fe=Es({isResolved:!1,error:n.error});return}fe=Wv(n),localStorage.setItem(bn,JSON.stringify({version:pc,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 Ra(){localStorage.removeItem(bn)}async function Vv(t){if(!G.isVerified||!G.sessionToken){eh(),Ca();return}if(!$d[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:Ld()})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to create checkout session");const{url:n}=r;window.location.href=n}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){Ca();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 Cn(t,e,s,r={},n=[]){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:n,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()})),Qs());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=Vf(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})),Qs())}else Bv(),Qs();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),Ra(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),ue("Checkout cancelled.","info"))}function Kn(){const t=G.isVerified&&!!G.email,e=fe.tier,s=t&&Pa(),r=!t||Yt(),n=document.getElementById("subscription-tier-badge");if(n){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"};n.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",n.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 i=document.getElementById("upgrade-prompt");i&&i.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(),Td(),Qs()}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(([n,{btnId:i,defaultText:o}])=>{const a=document.getElementById(i);a&&(n===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 To(){const t=Ld(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),n=document.getElementById("power-price-note");e&&(e.textContent=gc(fc.professional,t)),s&&(s.textContent=gc(fc.power,t));const i="billed monthly";r&&(r.textContent=i),n&&(n.textContent=i)}function Fn(){To();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Om().then(()=>To())}function eh(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 Qd(),Kn(),To(),await lv(),rv();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=gr();t.value=s}Hd(),Zd();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(fa(),Bn())}),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||rh(),xc(r)):(r===V.SUCCESS||r===V.ERROR)&&(xc(r),setTimeout(Pn,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),Hd()}let er=null;async function Xv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++wc,s=()=>e===wc,r=await Ee("flutterflow"),n=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 mr(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)}),n&&(t.value=n)}catch(i){if(!s())return;console.error("Failed to load projects for deploy:",i),t.innerHTML=''}}}function Qv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function th(t,e,s,r=null){er={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 n=document.getElementById("confirm-deps-list"),i=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(n.innerHTML=Object.entries(s).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
  • • ${bt(u)}: ${d}
  • `}).join(""),i.classList.remove("hidden")):i.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(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 sh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),er=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 i of s){const o=document.getElementById(i);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const n=document.getElementById("success-warnings-list");n&&(n.innerHTML="")}function No(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},s=t.metadata?.fileName||"",r=t.metadata?.projectId||"",n=t.metadata?.artifactType||"",i=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",n),e("success-time",i),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 Mo(t){Pn(),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 Sc={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(!(!Sc[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=Sc[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),i=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&i.push(r_(e)),nh(this.phaseId==="done"?100:s,t.message,i.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 rh(t){be.start(t)}function Pn(){be.stop()}function nh(t,e,s,r=null){const n=document.getElementById("commit-progress-bar"),i=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");n&&(n.style.width=`${Math.round(t*10)/10}%`),i&&(i.textContent=e),o&&(o.textContent=s),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function xc(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,nh(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function n_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function i_(){if(!er){console.error("No pending commit data");return}const t=er;if(er=null,Xs=Qv(),sh(),rh({withProvisioning:n_(t)}),t.bundlePlan){const o=await vv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Xs=null,Pn(),o.success?No(o):Mo(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:n}=zd(),i=await mv(e.content,{artifactType:s,artifactName:r,fileName:n,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Xs=null,Pn(),i.success?No(i):Mo(i)}window.runThinkingPipeline=$o;window.toggleStep=wv;window.toggleSection=yv;window.selectWorkflowStep=ze;window.copyCode=bv;window.retryWithDifferentModel=kv;window.openApiKeysModal=pa;window.closeApiKeysModal=jd;window.closeWalkthroughModal=Zm;window.openWalkthroughModal=Ym;window.advanceWalkthrough=fa;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=iv;window.handleWelcomeVideoEnd=Zv;window.dismissWelcomeVideo=Zt;window.initiateCommitToFlutterFlow=Iv;window.updateFlutterFlowCredentialStatus=Av;window.closeCommitConfirmModal=sh;window.closeCommitSuccessModal=e_;window.showCommitSuccessModal=No;window.showCommitFailureModal=Mo;window.toggleCodePreview=t_;window.confirmCommitToFlutterFlow=i_;window.runRefinement=Ev;window.regenerateFromPastedErrors=xv;window.clearErrorInput=Sv;window.setFlutterFlowEndpoint=Jm;window.getFlutterFlowEndpoint=gr;window.commitProgress=be;window.openSignInModal=Ca;window.closeSignInModal=Mv;window.handleMagicLinkRequest=Lv;window.handleSignOut=Ov;window.startCheckout=Vv;window.openCustomerPortal=Gv;window.openPricingModal=Fn;window.closePricingModal=eh;let ps=null,ih=null;const kc=120;function Jn(){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 n=document.getElementById(`pdot-${r}`);n&&(n.className="progress-dot")}nt(1),l_()}function nt(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"),n=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),n&&(n.textContent=s[t]||s[1]);for(let i=1;i<=3;i++){const o=document.getElementById(`pdot-${i}`);o&&(i{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/kc*100,n=Math.min(95,r*(1-Math.exp(-t/(kc*.6)))*1.2);s&&(s.style.width=`${n}%`)},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 oh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function c_(){return Dg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function u_(t){return` +`;const i=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:n});Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(i,s),jn();const o=document.getElementById("step2-output"),a=ws(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=On(y.step3Result);Jn(a,u)}catch(n){console.error("Regeneration failed:",n),$t(),ue(Sa(n,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Zt()}}async function Iv(){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 Cv(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 Fv(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 Pv(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=bs({isLoading:!0}),localStorage.setItem(_n,JSON.stringify({email:t,sessionToken:e})),r&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=bs({isResolved:!0}),localStorage.removeItem(_n),localStorage.removeItem(wn)}function Jd(){try{const t=localStorage.getItem(_n);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(_n),{email:null,sessionToken:null}}}async function Av(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Fv(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 n=await Pv(r);n?bc(n.email,n.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function $v(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Rv(){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 Cv(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(i){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:i}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Tv(){ka(),$a(),Ca(),Gn()}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 n=document.getElementById("auth-user-email");n&&(n.textContent=G.email||""),zr(),Gn()}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(Sm,{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 n=await r.json();if(Ge.userId=n.user_id,Ge.token=n.identity_token||null,Ge.status=n.status,Ge.resolved=!0,sessionStorage.setItem(bm,n.user_id),Ge.token&&sessionStorage.setItem(Em,Ge.token),n.usage_count!==void 0){const i=At(),a=(n.usage_month||i)===i?n.usage_count:0;localStorage.setItem(Gt,JSON.stringify({count:a,month:i})),Xs()}console.log(`Identity resolved: ${n.status} (${n.user_id.slice(0,8)}...) usage: ${n.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Pi=null;function Nv(t=5e3){return Ge.resolved?Promise.resolve():(Pi||(Pi=Yd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Pi,new Promise(e=>setTimeout(e,t))]))}function Zd(){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 Vn(){const t=Zd();return t.month!==At()?{count:0,month:At()}:t}function Mv(){const e={count:Vn().count+1,month:At()};return localStorage.setItem(Gt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Jt(){return!!fe.isResolved}function Lv(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(yn,e)?e:null}function Ov(t){return t&&Object.entries(Ad).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Dv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Bv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=Dv(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||{},n=$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),i=$r(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=Lv($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=xm.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Ov(n)||(a||l?"professional":"free");return bs({tier:u,status:i,periodEnd:$r(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function Pa(){return yn[fe.tier]??yn.free}async function jv(){if(G.isVerified&&(!Jt()||Fa())&&(await Xd({force:!0}),Gn()),G.isVerified&&!Jt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Vn(),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 Ai(){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 n=document.getElementById("ready-state");n&&n.classList.add("hidden");const i=document.getElementById("preview-frame-container");i&&(i.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Cn();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&&Cn()}function $o(t){return fe.tier==="free"&&jr.includes(t)?lr:t}function Uv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,n=!(G.isVerified&&!Jt())&&s==="free";Array.from(e.options).forEach(o=>{const a=zt(o.value),l=jr.includes(o.value);o.textContent=l&&n?`${a} (PRO)`:a,o.disabled=!1}),n&&jr.includes(e.value)&&(e.value=lr),e.disabled=!1,dc.has(e)||(e.addEventListener("change",()=>{Jt()&&fe.tier==="free"&&jr.includes(e.value)&&(e.value=lr,Cn()),Po(e.value),Rd()}),dc.add(e));let i=document.getElementById("model-selector-free-notice");n?(i||(i=document.createElement("p"),i.id="model-selector-free-notice",i.className="text-xs text-gray-400 mt-1",t.appendChild(i)),i.innerHTML='Free plan — Gemini only. '):i&&i.remove(),Po(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(),Ai();return}if(G.isVerified&&!Jt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",zr(),Ai();return}const{count:e}=Vn(),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):Ai()}function zr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Zd(),s=e.month===At()?e.count??0:0,r=yn.free;t.textContent=`${s} / ${r} generations used`}async function Xd(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=bs({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(wn);if(!e&&s)try{const{data:r,email:n,ts:i,version:o}=JSON.parse(s);if(o===hc&&n===G.email&&Date.now()-i<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 n=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(n.error){if(["unauthorized","invalid session","expired session"].some(o=>String(n.error).toLowerCase().includes(o))){ka(),Ca();return}fe=bs({isResolved:!1,error:n.error});return}fe=Bv(n),localStorage.setItem(wn,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(wn)}async function Hv(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:n}=r;window.location.href=n}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 Wv(){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 In(t,e,s,r={},n=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(wm,{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:n,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(Gt,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(Gt,JSON.stringify({count:c.usage_count,month:p})),Xs())}else Mv(),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 zv(){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 Gn(){const t=G.isVerified&&!!G.email,e=fe.tier,s=t&&Fa(),r=!t||Jt(),n=document.getElementById("subscription-tier-badge");if(n){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"};n.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",n.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 i=document.getElementById("upgrade-prompt");i&&i.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"),qv(r?e:null),Uv(),Rd(),Xs()}function qv(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(([n,{btnId:i,defaultText:o}])=>{const a=document.getElementById(i);a&&(n===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 Ro(){const t=Md(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),n=document.getElementById("power-price-note");e&&(e.textContent=fc(pc.professional,t)),s&&(s.textContent=fc(pc.power,t));const i="billed monthly";r&&(r.textContent=i),n&&(n.textContent=i)}function Cn(){Ro();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Tm().then(()=>Ro())}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-"}),Vv(),await Av(),zv(),await Xd(),Gn(),Ro(),await nv(),Qm();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(),Dn())}),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(Fn,1e3))})});function Vv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Gv(){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"),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",Yt),document.removeEventListener("keydown",Yt),Ud()}let Qs=null;async function Kv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++yc,s=()=>e===yc,r=await Ee("flutterflow"),n=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)}),n&&(t.value=n)}catch(i){if(!s())return;console.error("Failed to load projects for deploy:",i),t.innerHTML=''}}}function Jv(){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,Kv();const n=document.getElementById("confirm-deps-list"),i=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(n.innerHTML=Object.entries(s).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
  • • ${bt(u)}: ${d}
  • `}).join(""),i.classList.remove("hidden")):i.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(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 Yv(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 i of s){const o=document.getElementById(i);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const n=document.getElementById("success-warnings-list");n&&(n.innerHTML="")}function To(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},s=t.metadata?.fileName||"",r=t.metadata?.projectId||"",n=t.metadata?.artifactType||"",i=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",n),e("success-time",i),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 No(t){Fn(),xv(t)}function Zv(){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}},Xv=[{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=Xv.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),i=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&i.push(Qv(e)),rh(this.phaseId==="done"?100:s,t.message,i.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 Qv(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 Fn(){be.stop()}function rh(t,e,s,r=null){const n=document.getElementById("commit-progress-bar"),i=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");n&&(n.style.width=`${Math.round(t*10)/10}%`),i&&(i.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 e_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function t_(){if(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Jv(),th(),sh({withProvisioning:e_(t)}),t.bundlePlan){const o=await pv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Fn(),o.success?To(o):No(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:n}=Wd(),i=await hv(e.content,{artifactType:s,artifactName:r,fileName:n,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Fn(),i.success?To(i):No(i)}window.runThinkingPipeline=Ao;window.toggleStep=mv;window.toggleSection=gv;window.selectWorkflowStep=ze;window.copyCode=vv;window.retryWithDifferentModel=bv;window.openApiKeysModal=ha;window.closeApiKeysModal=Bd;window.closeWalkthroughModal=Gm;window.openWalkthroughModal=Vm;window.advanceWalkthrough=pa;window.commitToFlutterFlow=dv;function s_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function r_(){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=r_;window.handlePromptImageSelect=$m;window.removePromptImage=Rm;window.saveApiKeys=Ym;window.clearAllApiKeys=Zm;window.toggleKeyVisibility=tv;window.handleWelcomeVideoEnd=Gv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=Ev;window.updateFlutterFlowCredentialStatus=Iv;window.closeCommitConfirmModal=th;window.closeCommitSuccessModal=Yv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=Zv;window.confirmCommitToFlutterFlow=t_;window.runRefinement=_v;window.regenerateFromPastedErrors=wv;window.clearErrorInput=yv;window.setFlutterFlowEndpoint=qm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=$v;window.handleMagicLinkRequest=Rv;window.handleSignOut=Tv;window.startCheckout=Hv;window.openCustomerPortal=Wv;window.openPricingModal=Cn;window.closePricingModal=Qd;let hs=null,nh=null;const xc=120;function Kn(){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"),nh=Date.now();for(let r=1;r<=3;r++){const n=document.getElementById(`pdot-${r}`);n&&(n.className="progress-dot")}nt(1),n_()}function nt(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"),n=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),n&&(n.textContent=s[t]||s[1]);for(let i=1;i<=3;i++){const o=document.getElementById(`pdot-${i}`);o&&(i{const t=(Date.now()-nh)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/xc*100,n=Math.min(95,r*(1-Math.exp(-t/(xc*.6)))*1.2);s&&(s.style.width=`${n}%`)},250)}function $t(){hs&&(clearInterval(hs),hs=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 Ss(t,e=""){const s={pass:'',warning:'',fail:'',info:''};return``}function ih(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function i_(){return Lg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function o_(t){return`
    - ${xs(t.severity)} + ${Ss(t.severity)}
    ${j(t.message)}
    ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} ${j(t.source)}
    - `}function d_(t){return` + `}function a_(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,n=r==null?"neutral":r>=80?"pass":r>=60?"warning":"fail",i=r==null?"":r>=80?"Strong":r>=60?"Needs work":"High risk",o=t.findings.length?` + `}function l_(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,n=r==null?"neutral":r>=80?"pass":r>=60?"warning":"fail",i=r==null?"":r>=80?"Strong":r>=60?"Needs work":"High risk",o=t.findings.length?`
      ${t.findings.map(l=>`
    • - ${xs(l.severity)} + ${Ss(l.severity)} ${j(l.message)} ${l.suggestion?`${j(l.suggestion)}`:""} @@ -211,7 +211,7 @@ Error: ${h}
    `:"",a=t.manualSteps.length?`
    -

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

    +

    ${Ss("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=>` @@ -249,14 +249,14 @@ Error: ${h}
    - `}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)}
    `,n=e.dependencies?.length?e.dependencies.map(l=>` + `}function c_(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(o_).join(""):`
    ${Ss(s.icon)} ${j(s.message)}
    `,n=e.dependencies?.length?e.dependencies.map(l=>`
  • ${j(l.name)}${l.version?` ${j(l.version)}`:""}${l.reason?`

    ${j(l.reason)}

    `:""}
  • `).join(""):'
  • No external packages
  • ',i=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(oh(e.status))} + ${Ss(e.status)} ${j(ih(e.status))}

    ${j(e.artifactName)}

    ${e.description?`

    ${j(e.description)}

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

    Manual FlutterFlow steps for this file

    -
      ${e.manualSteps.map(d_).join("")}
    +
      ${e.manualSteps.map(a_).join("")}
    `:""}
    @@ -304,17 +304,17 @@ Error: ${h}
      ${a}
    - `}function f_(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),n=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){n&&(n.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(n){const i=t.artifacts.length;n.textContent=`${i} ${i===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(i=>` + `}function u_(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),n=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){n&&(n.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(n){const i=t.artifacts.length;n.textContent=`${i} ${i===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(i=>` - `).join(""),r.onclick=i=>{const o=i.target.closest(".artifact-tab");o?.dataset?.artifactId&&ah(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Ta(){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"),n=document.getElementById("artifact-results-split"),i=c_(),o=va();if(h_(i),f_(i),e&&(e.textContent=""),e){const a=Ad(o);e.innerHTML=a}s&&(s.innerHTML=p_(i)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),n&&n.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Yn(t,e){y.selectedArtifactId||(y.selectedArtifactId=mn(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),Ta(),Xt();const r=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),n&&(n.className="feedback-btn")}function ah(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ta()}function g_(){y.resultsViewMode="summary",Ta()}function m_(){const t=document.getElementById("btn-copy-results"),e=va();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";ka(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 lh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=m_;window.selectArtifact=ah;window.selectResultsSummary=g_;window.submitResultsFeedback=v_;window.showErrorInputPanel=__;window.hideErrorInputPanel=lh; + `).join(""),r.onclick=i=>{const o=i.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"),n=document.getElementById("artifact-results-split"),i=i_(),o=ma();if(l_(i),u_(i),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=c_(i)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),n&&n.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Jn(t,e){y.selectedArtifactId||(y.selectedArtifactId=gn(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),Ra(),Zt();const r=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),n&&(n.className="feedback-btn")}function oh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function d_(){y.resultsViewMode="summary",Ra()}function h_(){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 p_(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")),xa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function f_(){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=h_;window.selectArtifact=oh;window.selectResultsSummary=d_;window.submitResultsFeedback=p_;window.showErrorInputPanel=f_;window.hideErrorInputPanel=ah; diff --git a/dist/index.html b/dist/index.html index 21d5260..c896f5e 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2420,7 +2420,7 @@ .pm-cards { padding: 0 16px; } } - +
    diff --git a/src/customCodeVerification.js b/src/customCodeVerification.js index 82e0f72..ca7fe63 100644 --- a/src/customCodeVerification.js +++ b/src/customCodeVerification.js @@ -114,6 +114,7 @@ function collect(declared, into, sdkPackages) { * sdkPackages: string[], * availablePackages: Set, * unrepresentable: string[], + * unrepresentableOverrides: string[], * }} */ export function buildAnalysisManifest(projectPubspecYaml) { @@ -121,18 +122,24 @@ export function buildAnalysisManifest(projectPubspecYaml) { const dependencies = {}; const overrides = {}; - const unrepresentable = collect( + // The two blocks are kept apart: a direct dependency only reaches a class + // that names it, but a dependency_overrides entry rewrites resolution for + // every package in the graph that depends on the overridden name, so the + // consequences of dropping one are much wider than dropping the other. + const unrepresentableDependencies = collect( parseExistingDependencies(projectPubspecYaml), dependencies, sdkPackages, ); - unrepresentable.push( - ...collect( - parseDependencyBlock(projectPubspecYaml, "dependency_overrides"), - overrides, - sdkPackages, - ), + const unrepresentableOverrides = collect( + parseDependencyBlock(projectPubspecYaml, "dependency_overrides"), + overrides, + sdkPackages, ); + const unrepresentable = [ + ...unrepresentableDependencies, + ...unrepresentableOverrides, + ]; const availablePackages = new Set([ ...Object.keys(dependencies), @@ -148,6 +155,7 @@ export function buildAnalysisManifest(projectPubspecYaml) { sdkPackages: [...sdkPackages].sort(), availablePackages, unrepresentable, + unrepresentableOverrides, }; } @@ -180,6 +188,17 @@ function skipReason(className, unresolvableImports, missingPackages) { * had not heard of - left every class in the deploy uncompiled, including the * ones that never touched it. * + * The exception is `dependency_overrides`. An override does not wait for a + * class to import it: it rewrites what every package in the graph that + * depends on the overridden name resolves to, so a class that imports a + * perfectly ordinary pub.dev package can still compile against different code + * than the project uses when the import reaches the overridden package + * transitively. Which packages those are is only recorded in the project's + * pubspec.lock, which a deploy never sees, so no per-class rule can separate + * the reachable from the unreachable. An unreproducible override therefore + * skips every class that imports a `package:` URI at all; a class using only + * `dart:` resolves nothing through pub and is still verified. + * * @param {Array<{className: string, content: string}>} classes - Classes to deploy * @param {string} projectPubspecYaml - The project's merged pubspec.yaml * @returns {{manifest: Object, sources: Array<{fileName: string, content: string}>, skipped: Array<{className: string, reason: string}>}} @@ -192,6 +211,7 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { sdkPackages, availablePackages, unrepresentable, + unrepresentableOverrides, } = buildAnalysisManifest(projectPubspecYaml); const manifest = { sdkConstraint, dependencies, overrides, sdkPackages }; @@ -218,6 +238,24 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { continue; } + // A git/path/hosted override poisons resolution for every package that + // transitively depends on the overridden name, and only pubspec.lock - + // which is never pushed - records which packages those are. Verified + // against the wrong transitive code, an analyzer pass would not describe + // what ships, so any class that resolves packages at all is reported + // instead of compiled. `dart:`-only classes need no package resolution + // and are unaffected. + if ( + unrepresentableOverrides.length > 0 && + extractImportUris(content).some((uri) => uri.startsWith("package:")) + ) { + skipped.push({ + className, + reason: `${className} was not compiled before deploying: your project's dependency_overrides redirects ${unrepresentableOverrides.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`, + }); + continue; + } + const { unresolvableImports } = classifyCustomClassImports(content); const missingPackages = importedPackages.filter( (name) => !availablePackages.has(name), diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 9ed4041..9517717 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -184,6 +184,116 @@ class ReExportsPrivateThing {} assert.match(plan.skipped[0].reason, /it imports private_thing/); }); +test("an unreproducible dependency_overrides entry skips every package-importing class", () => { + // core_types is overridden from git, so it resolves differently in the + // project than in the scratch manifest for every package that depends on it. + // Whether this class reaches it transitively through widget_api is only + // recorded in pubspec.lock, which a deploy never sees - so the class cannot + // be verified against the code the project ships. + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + widget_api: ^1.0.0 + +dependency_overrides: + core_types: + git: https://example.invalid/core.git +`; + const importsWidgetApi = `import 'package:widget_api/widget_api.dart'; + +class UsesWidgetApi {} +`; + + const plan = planCustomCodeVerification( + [{ className: "UsesWidgetApi", content: importsWidgetApi }], + pubspec, + ); + + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); + assert.match(plan.skipped[0].reason, /dependency_overrides/); + assert.match(plan.skipped[0].reason, /core_types/); +}); + +test("an unreproducible override skips even a class importing only SDK packages", () => { + // flutter's own transitive dependencies (collection, meta, ...) resolve + // through pub and can be redirected by an override, so an SDK-only import is + // still not guaranteed to compile against the project's code. + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + +dependency_overrides: + collection: + git: https://example.invalid/collection.git +`; + const flutterOnly = `import 'package:flutter/material.dart'; + +class UsesMaterial {} +`; + + const plan = planCustomCodeVerification( + [{ className: "UsesMaterial", content: flutterOnly }], + pubspec, + ); + + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); +}); + +test("a dart:-only class still verifies under an unreproducible override", () => { + // dart: URIs come from the SDK itself, which no dependency_overrides entry + // can re-source, so nothing the class resolves can be redirected. + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + +dependency_overrides: + core_types: + git: https://example.invalid/core.git +`; + const dartOnly = `import 'dart:async'; + +class SchedulesWork {} +`; + + const plan = planCustomCodeVerification( + [{ className: "SchedulesWork", content: dartOnly }], + pubspec, + ); + + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); +}); + +test("a version-constraint override is carried and does not skip anything", () => { + // PROJECT_PUBSPEC overrides intl to 0.20.1 - a constraint the manifest can + // express - so resolution already matches the project's and every + // self-contained class verifies. + const plan = planCustomCodeVerification( + [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], + PROJECT_PUBSPEC, + ); + + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); +}); + test("an SDK package no list has heard of is reproduced from its pubspec source", () => { // The regression: flutter_web_plugins is a genuine Flutter SDK package that // the hand-kept list omitted, so every project declaring it - which is every From 64b824d70ad718aa05710134c3794ef6828db70b Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 07:23:45 +0000 Subject: [PATCH 03/18] fix: read inline dependency mappings and every URI a directive carries Review follow-ups on STU-368. A dependency written as a flow mapping - 'flutter_web_plugins: {sdk: flutter}' - has a nonempty value, so it read as a scalar constraint and the braces were forwarded to the runner, which rejects them and refuses the whole deploy. The parser now reads a flow mapping's own keys with the same source-over-version precedence as block form, and an unreadable mapping is unrepresentable rather than a constraint. Import/export directives can select a different file per platform with 'if (dart.library.x)': every URI literal in the directive is code the class needs. The package scan now reads them all, so a conditional import of an unreproducible dependency leaves the class uncompiled and reported instead of refused on a missing URI. Co-Authored-By: Stuart Gardoll --- dist/assets/index-CPEl05N0.js | 320 ----------------------------- dist/assets/index-DHpvl4SC.js | 320 +++++++++++++++++++++++++++++ dist/index.html | 2 +- src/customCodeVerification.test.js | 49 +++++ src/dartPackageImports.js | 58 +++--- src/dartPackageImports.test.js | 35 +++- src/pubspecSync.js | 113 +++++++++- src/pubspecSync.test.js | 34 +++ 8 files changed, 575 insertions(+), 356 deletions(-) delete mode 100644 dist/assets/index-CPEl05N0.js create mode 100644 dist/assets/index-DHpvl4SC.js diff --git a/dist/assets/index-CPEl05N0.js b/dist/assets/index-CPEl05N0.js deleted file mode 100644 index fe16cb3..0000000 --- a/dist/assets/index-CPEl05N0.js +++ /dev/null @@ -1,320 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))r(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(n){if(n.ep)return;n.ep=!0;const i=s(n);fetch(n.href,i)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,Mo=we?.fetch,$i=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,n,i,o){try{var a=t[i](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,n)}function X(t){return function(){var e=this,s=arguments;return new Promise((function(r,n){var i=t.apply(e,s);function o(l){La(i,r,n,o,a,"next",l)}function a(l){La(i,r,n,o,a,"throw",l)}o(void 0)}))}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},b.apply(null,arguments)}function 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",Ri=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());Ri(r)&&r[2]===8||yr("invalid-header");var n=new DataView(yield e.slice(e.size-8).arrayBuffer());n.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 i=s.length>>>0;n.getUint32(4,!0)!==i&&yr("invalid-size")}));return function(e,s){return t.apply(this,arguments)}})();function Ti(){return Ti=X((function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),n=new globalThis.CompressionStream("gzip"),i=n.writable.getWriter(),o=i.write(r).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(n.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}})),Ti.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 n=r.toLowerCase();return s.indexOf(n)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Pn=function(t){return t.trim()},Ni=function(t){return t.replace(/^\$/,"")};function Fc(t){var e,s=[];return(e=JSON.stringify(t,(function(r,n){if(typeof n=="bigint")return n.toString();if(typeof n!="function"&&typeof n!="symbol"){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(n))return"[Circular]";s.push(n)}return n}})))!==null&&e!==void 0?e:"null"}var Pc=Object.prototype,Ac=Pc.hasOwnProperty,An=Pc.toString,L=Array.isArray||function(t){return An.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=>An.call(t)=="[object String]",Mi=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>An.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>An.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 Lo(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"],Zn=t=>M(vh,t),_h=[!1,"false",0,"0","no"];function rt(t,e,s,r,n){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: "+n),rt(n||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(),n=String(e),i=this.tt[n];return i?this.ot(i,r):this.tt[n]=i={tokens:this.it,lastAccess:r},i.tokens===0||(i.tokens--,i.tokens===0&&((s=this.et)==null||s.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Vr="iOS",vt="Android",ps="Tablet",Tc=vt+" "+ps,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qs="Safari",fs="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Vt="Chrome",wh=Vt+" OS",jc=Vt+" "+Vr,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",bh=Do+" Mini",Bo="Edge",Hc="Microsoft "+Bo,us="Firefox",Wc=us+" "+Vr,er="Nintendo",tr="PlayStation",ds="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qs,Ds="Windows",Li=Ds+" Phone",za="Nokia",Oi="Ouya",Vc="Generic",Eh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+ps.toLowerCase(),Di="Konqueror",Kc="Oculus Browser",Gr="Vivaldi",Jc="Yandex",Kr="Whale",Bi="DuckDuckGo",Yc="Pale Moon",Jr="Waterfox",Vs="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Xn=new RegExp("Version/"+le),Sh=new RegExp(ds,"i"),xh=new RegExp(tr+" \\w+","i"),kh=new RegExp(er+" \\w+","i"),jo=new RegExp(fs+"|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 n=(function(i){return i!=null&&i.brave?Vs:null})(s);return n||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?bh:M(t," OPR/")?Do:jo.test(t)?fs: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,Gr+"/")?Gr:M(t,"YaBrowser/")?Jc:M(t,Kr+"/")?Kr:M(t,Bi+"/")||M(t,"Ddg/")?Bi: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,qs)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),Di.toLowerCase())?Di:M(t,Vs+"/")?Vs:((i,o)=>o&&M(o,Mc)||(function(a){return M(a,qs)&&!M(a,Vt)&&!M(a,vt)})(i))(t,e)?M(t,Oe)?qc:qs:M(t,"PaleMoon/")?Yc:M(t,Jr+"/")?Jr:M(t,us)?us:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?us:"")},Ch={[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)],[qs]:[Xn],[qc]:[Xn],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[us]:[new RegExp(us+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[Di]:[new RegExp("Konqueror[:/]?"+le,"i")],[fs]:[new RegExp(fs+" "+le),Xn],[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)],[Bi]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Jr]:[new RegExp(Jr+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Fh=function(t,e,s,r){var n=Xc(t,e,s,r),i=Ch[n];if(x(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(ds+"; "+ds+" (.*?)[);]","i"),t=>[ds,t&&t[1]||""]],[new RegExp(er,"i"),[er,""]],[new RegExp(tr,"i"),[tr,""]],[jo,[fs,""]],[new RegExp(Ds,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Li,""];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)?ds:new RegExp(Oi,"i").test(t)?Oi:new RegExp("("+Li+"|WPDesktop)","i").test(t)?Li:/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)?fs:/(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(ps,"i").test(t)&&!new RegExp(ps+" 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 Uo(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(((n,i)=>{r=Uo((()=>{try{s?.(),n()}catch(o){i(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,n=s.number,i=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=b({},o,t.attributes||{}),l={timeUnixNano:i,observedTimeUnixNano:i,severityNumber:n,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 b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function 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,n,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=n,this.dt=i,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 n of s)try{var i=n(r);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;r=i}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,n=0;s.length>0&&r>n;){var i,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(),(i=t.vt)!==null&&i!==void 0?i: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:[],n+=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),n=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,n.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=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 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 Qn=[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 n="";return r&&(n=Object.keys(r).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(r[i]))).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+n}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 n=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return n.apply(this,arguments)}})(),r=s().finally((()=>{this.ct===r&&(this.ct=null)}));return this.ct=r,r}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var s,r;try{s=e.attributes?b({},e.attributes):void 0,r=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 n=this.Bt.get(r);if(!n){if(!this.Qt())return;n={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,n)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(n,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(Qn.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(n,i){for(var o=0;i.length>o;o++)if(i[o]>=n)return o;return i.length})(e,Qn)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var n of s)try{var i=n(r);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;r=i}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$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 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(i,o,a){return b({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),n=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Yr(s)},scopeMetrics:[{scope:{name:r,version:n},metrics:e}]}]};var e,s,r,n}Xt(t){var e=Ja(Date.now()),s=new Map;for(var r of t.values()){var n,i=Ya(r.type,r.name,r.unit,void 0),o=s.get(i);o||(o=b({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(i,o));var a=Yr((n=r.attributes)!==null&&n!==void 0?n:{}),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:Qn})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var n=r[0],i=r[1],o=this.Bt.get(n);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=i.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(n,i)}}};var wr,Za,ei;function Mh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return ei&&s.length===Za||(Za=s.length,ei=s.reduce(((r,n)=>{wr||(wr={});var i=wr[n];if(i)r[i[0]]=i[1];else for(var o=t(n),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[n];if(u&&c){r[u]=c,wr[n]=[u,c];break}}return r}),{})),ei}}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"},n=this.buildCoercingContext(r,s,0).apply(e),i=this.buildParsingContext(s),o=this.parseStacktrace(n,i);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,n;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(n=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),b({},e,{cause:r,stack:n})}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 n of s.modifiers)r=yield n(r);return r}))()}convertToExceptionList(e,s){var r,n,i,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(n=s.handled)===null||n===void 0||n,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},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 n=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(i,a)}};return b({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:i=>n(i,r),next:i=>n(i,r+1)})}}var gs="?";function ji(t,e,s,r,n){var i={platform:t,filename:e,function:s===""?gs:s,in_app:!0};return x(r)||(i.lineno=r),x(n)||(i.colno=n),i}var nu=(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]:gs,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 ji(e,s[1],gs,+s[2],+s[3]);var r=Dh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var n=Bh.exec(r[2]);n&&(r[2]=n[1],r[3]=n[2],r[4]=n[3])}var i=nu(r[1]||gs,r[2]);return ji(e,i[1],i[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 n=s[3],i=s[1]||gs,o=nu(i,n);return ji(e,n=o[1],i=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 n=s.apply(e.message);return b({},n,{stack:(r=this.pe(e))!==null&&r!==void 0?r:n.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,n,i=(r=s.lineno)!==null&&r!==void 0?r:0,o=(n=s.colno)!==null&&n!==void 0?n:0;return`Error - at `+s.filename+":"+i+":"+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,n=this.getInfos(e),i=n[0],o=n[1];return{type:i??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,n=e.match(Gh);return n&&(s=n[1],r=n[2]),[s,r]}}var Jh=["fatal","error","warning","log","info","debug"];function iu(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 n=s.slice(0,r).join(", ");if(e>=n.length)return r===s.length?n:n.length>e?n.slice(0,e)+"...":n}return""}class Yh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,n,i=this.getErrorPropertyFromObject(e);return i?s.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(n=s.syntheticException)==null?void 0:n.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 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: "+iu(e)}isSeverityLevel(e){return W(e)&&!Mi(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 Lo(e)}coerce(e,s){var r,n=e.constructor.name;return{type:n,value:n+" captured as exception with keys: "+iu(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(!Lo(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,n=this.getUnhandledRejectionReason(e);return $c(n)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(n),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(n)}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]),ti={enabled:!0,max_bytes:32768};function Qr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ti.enabled,max_bytes:sp(t.max_bytes,ti.max_bytes)}:b({},ti)}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(n){var i;try{i=Fc(n)}catch{return}try{var o=JSON.parse(i);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:i}}catch{return}})(e);if(s){var r=(function(n){if(typeof TextEncoder<"u")return new TextEncoder().encode(n).length;for(var i=encodeURIComponent(n),o=0,a=0;i.length>a;a++)i[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(n){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||s)&&!x(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[n])?v.console[n].__rrweb_original__:v.console[n],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("debug",...i)},info(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("log",...i)},warn(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("warn",...i)},error(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];r.k("error",...i)},critical(){for(var n=arguments.length,i=new Array(n),o=0;n>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(n){r.error("You must initialize PostHog before calling "+n)},createLogger:(n,i)=>ou(t+" "+n,i)};return r},k=ou("[PostHog.js]"),se=k.createLogger,rp=se("[ExternalScriptsLoader]"),si=(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 n,i=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(n=i())return n.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 n="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;n=n+"&t="+Math.floor(Date.now()/i)*i}r=t.requestRouter.endpointFor("assets",n)}si(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");si(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);si(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",sr="$device_id",ri="$device_model",Bs="__alias",js="__timers",Ui="$autocapture_disabled_server_side",Hi="$heatmaps_enabled_server_side",Wi="$exception_capture_enabled_server_side",zi="$error_tracking_suppression_rules",qi="$error_tracking_capture_extension_exceptions",Vi="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gi="$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",ls="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Us="$active_feature_flags",Rr="$early_access_features",Ki="$feature_flag_details",Hs="$feature_flag_payloads",Tr="$feature_flag_request_id",en="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Ji="$surveys",tn="$surveys_loaded_at",Yi="$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",Zi="$client_session_props",Xi="$capture_rate_limit",Qi="$initial_campaign_params",eo="$initial_referrer_info",sn="$initial_person_info",rn="$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",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",es="anonymous",Tt="identified",to="identified_only",nn="visibilitychange",on="beforeunload",is="$pageview",ni="$pageleave",ii="$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,n)=>e(r,n)));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 n of s)for(var i in n)n[i]!==void 0&&(t[i]=n[i]);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}},np=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(n){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(n)}}},Vo=function(t){var e={};return Z(t,(function(s,r){(W(s)&&s.length>0||he(s))&&(e[r]=s)})),e},ip=["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 ip)if(s===r)return!1;return!0}function ne(t,e,s,r){var n=r??{},i=n.capture,o=n.passive;t?.addEventListener(e,s,{capture:i!==void 0&&i,passive:o===void 0||o})}function so(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",s=C.cookie.split(";").filter((i=>i.length)),r=0;s.length>r;r++){for(var n=s[r];n.charAt(0)==" ";)n=n.substring(1,n.length);if(n.indexOf(e)===0)return decodeURIComponent(n.substring(e.length,n.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 an{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,n){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(n)||0>e||0>s||0>r||0>n||e>0xffffffffffff||s>4095||r>1073741823||n>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|s>>>8,i[7]=s,i[8]=128|r>>>24,i[9]=r>>>16,i[10]=r>>>8,i[11]=r,i[12]=n>>>24,i[13]=n>>>16,i[14]=n>>>8,i[15]=n,new an(i)}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 an(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 an.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,n){if(!C)return!1;try{var i="",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 w=m.slice(_).join("."),I=E+"=1;domain=."+w+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",Ps=w)}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),i="; expires="+l.toUTCString()}n&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; 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}}},oi=null,Q={N(){if(!$e(oi))return oi;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"),oi=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",ls,zo,rn,sn,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 Zn(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(Zn(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=>Zn(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 n=r(e);return W(n)&&n?n:e}catch(i){return k.error("Error in get_current_url, falling back to window.location.href",i),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 Go(t){return t?Pn(t).split(/\s+/):[]}function rl(t,e){var s=(function(r){var n,i=v==null||(n=v.location)==null?void 0:n.href;return x(i)?void 0:yu(r,i)})(e);return!!(s&&t&&t.some((r=>s.match(r))))}function ln(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:Pn(t).split(/(\s+)/).filter((e=>Ks(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rr(t){var e="";return no(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:"")})),Pn(e)}function ai(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 ro(t,e){if(x(e))return!0;var s,r=function(i){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}})(i,o))))return{v:!0}};for(var n of t)if(s=r(n))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,"+","-","−","–"],nl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],yp=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var s,r,n,i,o;if(Ke(e)?(s=!!e&&il,r=void 0,n=!1):(s=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:il,r=e?.content_ignorelist,n=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||n&&(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=>nl(h,f)||nl(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())||""}})))&&!ro(a,s)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],n=t;n.parentNode&&!Me(n,"body");)if(Eu(n.parentNode))r.push(n.parentNode.host),n=n.parentNode.host;else{var i=ku(n);if(!i)break;if(e||Ko.indexOf(i.tagName.toLowerCase())>-1)s=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(i),n=i}return{parentIsUsefulElement:s,targetElementList:r}};function no(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 n=ln(r);if(M(n,"ph-sensitive")||M(n,"ph-no-capture"))return!1}if(M(ln(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 n=t.charCodeAt(r)-48;s&&(n*=2)>9&&(n-=9),e+=n,s=!s}return e%10==0}function Ks(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Pn(t);var s=e?al.test((t||"").replace(/[- ]/g,"")):(function(n){var i;for(ll.lastIndex=0;i=ll.exec(n);){var o=i[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(n){var i;for(cl.lastIndex=0;i=cl.exec(n);){var o=i[1],a=i[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 n=rr(s);e=(e+" "+n).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+Pu(s)).trim())}catch(i){k.error("[AutoCapture]",i)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Sp(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xr=se("[Dead Clicks]"),xp=()=>!0,kp=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(Ho)),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({[Ho]: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",(n=>{n?xr.error("failed to load script",n):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(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 li=se("[SegmentIntegration]"),Au="posthog-js";function $u(t,e){var s=e===void 0?{}:e,r=s.organization,n=s.projectId,i=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)||[],w=E.map((F=>b({},F,{stacktrace:F.stacktrace?b({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>b({},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:w,$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&&n&&(I.$sentry_url=(i||"https://sentry.io/organizations/")+r+"/issues/?project="+n+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Ip{constructor(e,s,r,n,i,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:s,projectId:r,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(s,r,n)=>{n&&(n.noSessionId||n.activityTimeout||n.sessionPastMaximumLength||n.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:n}),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,n=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(),n}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 n={$pageview_id:s,$prev_pageview_id:r.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.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;n=ee(n,{$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&&(n.$prev_pageview_pathname=r.pathname),r.timestamp&&(n.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),n}}var ci=["flags","surveys"],Cp={[au]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[js]:{exposure:"hidden"},[Ui]:{exposure:"event"},[Hi]:{exposure:"hidden"},[Wi]:{exposure:"event"},[zi]:{exposure:"hidden"},[qi]:{exposure:"event"},[Vi]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gi]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[ls]:{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"},[Us]:{exposure:"hidden",storageGroup:"flags"},[Rr]:{exposure:"hidden"},[Ki]:{exposure:"hidden",storageGroup:"flags"},[Hs]:{exposure:"hidden",storageGroup:"flags"},[Tr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[en]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"surveys"},[tn]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yi]:{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"},[Zi]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[sn]:{exposure:"hidden"},[rn]:{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}},cs=(t,e)=>{try{return JSON.stringify(t,((s,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Fc(t)}},cn=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},ms=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),n=0;r.length>n;n++){var i=r[n].split("=");if(i[0]===e){s=i;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," ")},nr=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),n=r[1],i=(r[0]||"").split("?"),o=i[1],a=i[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("&")),n!=null&&(h+="#"+n),h},un=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 n=e+1;return n===s&&r(),n}return e}return 0},kr="https?://(.*)",vs=["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",...vs],ir="",Ap=["li_fat_id"];function Nu(t,e,s){if(!C)return{};var r,n=e?[...vs,...s||[]]:[],i=Mu(nr(C.URL,n,ir),t),o=(r={},Z(Ap,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,i)}function Mu(t,e){var s=Pp.concat(e||[]),r={};return Z(s,(function(n){var i=ms(t,n);r[n]=i||null})),r}function Lu(t){var e=(function(i){return i?i.search(kr+"google.([^/?]*)")===0?"google":i.search(kr+"bing.com")===0?"bing":i.search(kr+"yahoo.com")===0?"yahoo":i.search(kr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),s=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var n=C?ms(C.referrer,s):"";n.length&&(r.ph_keyword=n)}return r}function gl(){return navigator.language||navigator.userLanguage}var dn="$direct";function Ou(){return C?.referrer||dn}function Du(t,e,s){s===void 0&&(s=!1);var r=t?[...vs,...e||[]]:[],n=s?Ct(re?.href):re?.href,i=n?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:i?nr(i,r,ir):void 0}}function Bu(t,e){var s;e===void 0&&(e=!1);var r=t.r,n=t.u,i=e?Ct(n):n,o={$referrer:r,$referring_domain:r==null?void 0:r==dn?dn:(s=cn(r))==null?void 0:s.host};if(i){o.$current_url=i;var a=cn(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(i);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:tn},Tp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],ts="main";class ui{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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.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,b({},this.props)),this.update_config(e,e,s),this.save(),v){var n=()=>this.flush();ne(v,"beforeunload",n,{capture:!1}),ne(v,"pagehide",n,{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 b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$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),n=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(s=Q,n=!0):i==="localstorage+cookie"&&r.N()?(s=r,n=!0):i==="sessionstorage"&&ce.N()?s=ce:i==="memory"?s=hp:i==="cookie"?s=pt:r.N()?(s=r,n=!0):s=pt,this.fi=n,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 n=Mt(r);if(!n||n.exposure==="event"){if(n!=null&&n.shouldSkipFromEventProperties!=null&&n.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 ci){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 n=s[r],i=this.props[r];return he(n)&&he(i)&&i>n}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Mt(e))==null?void 0:s.storageGroup:void 0,n=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(n&&e in n)this.Pi(e,n[e]);else{if(r){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[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,ts))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var n of(this.Oi(this.ii,this.yi,s,ts),ci)){var i,o=r[n];(!mt(o)||(i=this.ci[n])!=null&&i.persisted)&&this.Oi(Q,this.Si(n),o,n)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,((r,n)=>{var i,o=(i=Mt(n))==null?void 0:i.storageGroup;o?s[o][n]=r:e[n]=r})),{main:e,groups:s}}Ei(e,s){if(s===ts)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((n,i)=>{var o;r[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":n})),JSON.stringify(r)}Oi(e,s,r,n){var i=this.Mi(n);if(n===ts||i.dirty||x(i.fingerprint)){var o;try{if((o=this.Ei(r,n))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,n!==ts&&(i.persisted=!0),x(o)||(i.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 n of ci)Q.q(this.Si(n));r?delete this.ci[ts]: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 n=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,i),n=!0)})),n)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,((n,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==n||te(n)||L(n))&&(this.Pi(i,n),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var n of s)n in this.props&&(this.Ri(n),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(Vo(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=cn(C.referrer))==null?void 0:e.host)||dn},void 0)}set_initial_person_info(){this.props[Qi]||this.props[eo]||this.register_once({[sn]: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,Qi],(n=>{var i=this.props[n];i&&Z(i,(function(o,a){e["$initial_"+Ni(a)]=o}))}));var s=this.props[sn];if(s){var r=(function(n,i){i===void 0&&(i=!1);var o=Bu(n,i),a={};return Z(o,(function(l,u){a["$initial_"+Ni(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 n=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||[]),i=n?this.bi(e):this.ii,o=this.wi(e);if(n||o!==this.pi){var a=this.props;this.clear(),this.ii=i,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"},di={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hi={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((n=>{vl.info((n||"events")+" is quota limited."),this.serverLimits[n]=new Date().getTime()+6e4}))}catch(n){return void vl.warn('could not rate limit - continuing. Error: "'+n?.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,n;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(Xi))!==null&&s!==void 0?s:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(n=this.instance.persistence)==null||n.set_property(Xi,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,n=this.captureEventsBurstLimit,i=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 "+i+" events per second and "+n+" 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(n){xt.error("Error applying remote config",n)}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(n){xt.error("Error loading feature flags",n)}}}var qe=Uint8Array,Ae=Uint16Array,_s=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 s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var i=s[r];s[r+1]>i;++i)n[i]=i-s[r]<<5|r;return[s,n]},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),ie=0;32768>ie;++ie){var ss=(43690&ie)>>>1|(21845&ie)<<1;zu[ie]=((65280&(ss=(61680&(ss=(52428&ss)>>>2|(13107&ss)<<2))>>>4|(3855&ss)<<4))>>>8|(255&ss)<<8)>>>1}var Js=function(t,e,s){for(var r=t.length,n=0,i=new Ae(e);r>n;++n)++i[t[n]-1];var o,a=new Ae(e);for(n=0;e>n;++n)a[n]=a[n-1]+i[n-1]<<1;for(o=new Ae(r),n=0;r>n;++n)o[n]=zu[a[t[n]-1]++]>>>15-t[n];return o},Kt=new qe(288);for(ie=0;144>ie;++ie)Kt[ie]=8;for(ie=144;256>ie;++ie)Kt[ie]=9;for(ie=256;280>ie;++ie)Kt[ie]=7;for(ie=280;288>ie;++ie)Kt[ie]=8;var hn=new qe(32);for(ie=0;32>ie;++ie)hn[ie]=5;var Lp=Js(Kt,9),Op=Js(hn,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 _s?_s: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},pi=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var n=s.length,i=s.slice();if(!n)return[new qe(0),0];if(n==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!=n-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=i[0].s;for(r=1;n>r;++r)i[r].s>h&&(h=i[r].s);var p=new Ae(h+1),f=ao(s[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var E=i[r].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var w=i[r].s;e>p[w]?g-=1<=0&&g;--r){var I=i[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},ao=function(t,e,s){return t.s==-1?Math.max(ao(t.l,e,s+1),ao(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,n=t[0],i=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==n&&a!=e)++i;else{if(!n&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(n),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(n);i=1,n=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},lo=function(t,e,s){var r=s.length,n=qu(e+2);t[n]=255&r,t[n+1]=r>>>8,t[n+2]=255^t[n],t[n+3]=255^t[n+1];for(var i=0;r>i;++i)t[n+i+4]=s[i];return 8*(n+4+r)},bl=function(t,e,s,r,n,i,o,a,l,u,c){ot(e,c++,s),++n[256];for(var d=pi(n,15),h=d[0],p=d[1],f=pi(i,15),g=f[0],m=f[1],_=wl(h),E=_[0],w=_[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=pi(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(n,Kt)+Rs(i,hn)+o,Ie=Rs(n,h)+Rs(i,g)+o+14+3*T+Rs(B,R)+(2*B[16]+3*B[17]+7*B[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=Js(h,p),J=h,z=Js(g,m),H=g;var _e=Js(R,N);for(ot(e,c,w-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=Kt,z=Op,H=hn;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+=Yo[me]);var ge=31&r[S];$s(e,c,z[ge]),c+=H[ge],ge>3&&($s(e,c,r[S]>>>5&8191),c+=Zo[ge])}else $s(e,c,O[r[S]]),c+=J[r[S]];return $s(e,c,O[256]),c+J[256]},Dp=new _s([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Bp=(function(){for(var t=new _s(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t})(),fi=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 n,i,o,a,l,u=(a=10+((n=e).filename&&n.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),w=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(w,I,d.subarray(F,P)):(w[F]=!0,I=lo(w,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,w,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),Xt=0;for(de=0;_r>de;++de){var Qt=F-Be+de+32768&32767,Is=Qt-N[Qt]+32768&32767;Is>Xt&&(Xt=Is,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,w,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(E,0,f+qu(I)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&fi(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),fi(u,c-8,s.d()),fi(u,c-4,r),u}var Up=!!$i||!!Mo,Gu="text/plain",Dr=!1,Ku=(t,e)=>{var s=t.split("#"),r=s[1],n=s[0].split("?"),i=n[0],o=n[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(r?"#"+r:"")},$n=function(t,e,s){var r;s===void 0&&(s=!0);var n=t.split("?"),i=n[0],o=n[1],a=b({},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?i+"?"+l.join("&"):i},gi=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)})(cs(e)),{mtime:0});return{contentType:Gu,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===xe.Base64){var n=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(cs(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:cs(a)))(n);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=cs(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:$n(t.url,{compression:xe.Base64}),encodedBody:gi(b({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gi(b({},t,{compression:void 0,Ji:void 0}))};try{e=gi(t)}catch(n){if(Ua(t.compression,ms(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",n),r();throw n}return e&&Ua(t.compression,ms(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?Ri(new Uint8Array(s)):ArrayBuffer.isView(s)&&Ri(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=cs(e.data),r=yield(function(i,o,a){return Ti.apply(this,arguments)})(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var n=yield r.arrayBuffer();return b({},e,{Ji:{contentType:Gu,body:n,estimatedSize:n.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,n=r??{},i=n.contentType,o=n.body,a=n.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);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;Mo(s,b({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)}}},co=t=>{try{var e,s=Ju(t),r=s.url,n=s.encodedBody,i=n??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.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:b({},t.data,{batch:h});return co(b({},t,{data:d(u.slice(0,c))})),void co(b({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(b({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var n=r==="query"?e==="POST"?"sent_at":"_":void 0;return $n(s===xe.GZipJS?Ku(t,"compression"):t,b({},n?{[n]:Date.now().toString()}:{},s===xe.GZipJS?{}:{compression:s}))},Br=[];Mo&&Br.push({transport:"fetch",method:Xu}),$i&&Br.push({transport:"XHR",method(t){var e=Yu(t);if(e){var s=new $i,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var n=r??{},i=n.contentType,o=n.body;Z(t.headers,(function(a,l){s.setRequestHeader(l,a)})),i&&s.setRequestHeader("Content-Type",i),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:co});var uo=3e3;class zp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt(s?.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():{},s=Object.values(e);[...s.filter((r=>r.url.indexOf("/e")===0)),...s.filter((r=>r.url.indexOf("/e")!==0))].map((r=>{this.lr(b({},r,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var s=this.ar(),r=function(){var i=s[n],o=new Date().getTime();i.data&&L(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var n 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,n=s,i=(n?n.batchKey:null)||n.url;x(e[i])&&(e[i]=b({},n,{data:[]})),(r=e[i].data)==null||r.push(n.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},ne(v,"online",this.vr),ne(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Ic(e,qp);lt(s)&&(r.url=$n(r.url,{retry_count:s})),this._instance._send_request(b({},r,{callback:n=>{if(n.statusCode!==200&&(400>n.statusCode||n.statusCode>=500)){if((n.statusCode===0?3:10)>(s??0))return void this.At(b({retriesPerformedSoFar:s},r));n.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(n)}}))}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),n=Date.now()+r;this.tr.push({retryAt:n,requestOptions:e});var i="Enqueued failed request for retry in "+r;navigator.onLine||(i+=" (Browser is offline)"),k.warn(i),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((i=>e>i.retryAt||(s.push(i),!1)));if(this.tr=s,r.length>0)for(var n of r)this.retriableRequest(n.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(b({},s,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class Gp{constructor(e){this.yr=()=>{var s,r,n,i;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,(n=this.br.maxContentY)!==null&&n!==void 0?n:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){ne(v,"scroll",this.yr,{capture:!0}),ne(v,"scrollend",this.yr,{capture:!0}),ne(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,n){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Zi]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=n||Kp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zi]}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(Vo(this.getSetOnceProps()),((s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Ni(r)]=s})),e}}class Xo{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 n of this.Er["*"]||[])n(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 n;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=s||dt,this.Nr=r||dt;var i=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_"+i+"_window_id",this.Br="ph_"+i+"_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((n=this.Ne.bootstrap)!=null&&n.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 n=s!==this._sessionActivityTimestamp,i=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,i&&!n||i&&this.Zr(s)||(this.Pr=s,this.Mr.register({[ls]:[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(ls):(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({[ls]:[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[ls];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(on,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ne(v,on,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(),n=this.Jr(),i=n[1],o=n[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Ts.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Ts.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Ts.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((w=>w(i,l,E))),{sessionId:i,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((n=>Wa(n?.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 pn=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 mi(t,e,s){return cs({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=>pn(s,r))))),not_regex:(t,e)=>e.every((s=>t.every((r=>!pn(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((n=>r>parseFloat(n)))})),lt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((n=>rt.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((s=>{var r=s[1],n=e?.[s[0]];if(x(n)||$e(n))return!1;var i=[String(n)],o=td[r.operator];return!!o&&o(r.values,i)}))}var ho="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":ho),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===ho)return this.apiHost+s;var n=kl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+n;case"api":return"https://"+this.region+"."+n}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=se("[Surveys]"),nd="seenSurvey_",id=t=>{try{var e=(s=>((r,n)=>""+nd+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(n))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){q.error("Failed to persist survey seen state",s)}},Zp=[di.Popover,di.Widget,di.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,(n=>{if(n)return Qp.error("failed to load script",n);s()}))}startIfEnabledOrStop(){var e=this,s=function(){var i,o,a,l=r[0],u=r[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[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((n=this._instance.config.integrations)!==null&&n!==void 0?n:{})){var n;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(i){var n=s.sn.get(e.name)===e;n&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',i),n&&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 n of e){var i=s?.get_property(n);x(i)||(r[n]=i)}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(n){this.rt.error("Browser extension event listener failed",n)}}))),this.onRemoteConfig=s=>{if(this.an)return Ir((()=>{}));var r=i=>{try{s(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},n=this.instance.dn.on(Il,r);return this.un&&r(this.un),Ir(n)},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,n,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=i?.sessionId)!==null&&s!==void 0?s:"",windowId:(r=i?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(n=i?.sessionStartTimestamp)!==null&&n!==void 0?n: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 n=this;return X((function*(){r?n.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):n.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 n;s===void 0&&(s={});var i=r.instance.requestRouter.endpointFor((n=s.target)!==null&&n!==void 0?n:"api",e),o={method:s.method,url:s.query?$n(i,s.query):i,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={},vi=0,fn=()=>{},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],os="posthog",ad=!Up&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_i=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:op(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:fn,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:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:fn},(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],n=s[1];x(t[r])||(e[n]=t[r])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(i.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?i.property_denylist=t.property_blacklist:L(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),i};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 Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_i(),this.SentryIntegration=Ip,this.sentryIntegration=r=>(function(n,i){var o=$u(n,i);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,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(o),i?.({})},set_once:(r,n,i)=>{var o=W(r)?{[r]:n}:r;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,s,r){if(r&&r!==os){var n,i=(n=Ys[r])!==null&&n!==void 0?n:new Te;return i._init(e,s,r),Ys[r]=i,Ys[os][r]=i,i}return this._init(e,s,r)}_init(e,s,r){var n,i;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=_i(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=_i(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 ui(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new 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:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(n=s.bootstrap)!=null&&n.distinctID||(s.bootstrap=b({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=s.bootstrap)==null?void 0:i.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===es)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 w=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?w:m;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?Tt:es),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,es)}return ne(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||li.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()||(li.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(li.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,is),identify:N=>R(N,ii),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==fn&&(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({[ri]:P})})).catch(fn),this}Fn(){var e,s,r,n,i,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||((n=this.Dn)==null||n.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var s,r,n,i,o,a,l,u=performance.now(),c=b({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(n=this.logs)!==null&&n!==void 0?n:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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(i){k.error("Error initializing extension:",i)}}var n=Math.round(performance.now()-s);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:n}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+n+"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,n=e.config;n.supportedCompression&&!this.config.disable_compression&&(this.compression=M(n.supportedCompression,xe.GZipJS)?xe.GZipJS:M(n.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=n.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=n.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.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,n,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ni),(r=this.logs)==null||r.flushLogs("sendBeacon"),(n=this.In)==null||n.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ni,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=b({},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,n,i,o=b({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&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=>b({},E,{sent_at:_}))):b({},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=(n=(i=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:i.method)!==null&&n!==void 0?n: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(b({},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)})(b({},e,{callback:s=>{var r,n;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(n=this.config).on_request_error)==null||r.call(n,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){vi++;try{var s,r=[],n=[],i=[];Er(e,(a=>{if(a)if(L(s=a[0]))i.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])?i.push(a):n.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(n,this),o(i,this)}finally{vi--}}push(e){if(vi>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 n,i,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===is&&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(en)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,E,w,I=g?void 0:this.Vn(r?.$set_once,e!==Qa,e===ii);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):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?.[hi.SURVEY_ID],P=s?.[hi.SURVEY_ITERATION];id({id:F,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",w="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(w="$survey_"+E+"/"+_.id+"/"+_.current_iteration),w)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Np.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=b({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=b({},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=(n=r?._url)!==null&&n!==void 0?n: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,n,i){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=i?void 0:this.persistence.remove_event_timer(e),a=b({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mi(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?[...vs,...P||[]]:[],z=(function(vr){for(var je=0;qa.length>je;je++){var _r=qa[je],Xt=_r[1],Qt=_r[0].exec(vr),Is=Qt&&(Se(Xt)?Xt(Qt,vr):Xt);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(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?ps:Fe===er||Fe===ds||Fe===tr||Fe===Oi?"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:ps:"Desktop"),$timezone:ju(),$timezone_offset:$p()}),{$current_url:nr(S?Ct(re?.href):re?.href,J,ir),$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(i,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===ho&&(a.$lib_custom_api_host=this.config.api_host),u=e!==is||i?e!==ni||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,n),a=ee(a,u),e===is&&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,b({},_,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 w=this.config.sanitize_properties;w&&(k.error(Fl),a=w(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var n;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var i=this.persistence.get_initial_props(),o=(n=this.sessionPropsManager)==null?void 0:n.getSetOnceProps(),a=ee({},i,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 n;(n=this.persistence)==null||n.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,n;return(r=(n=this.featureFlags)==null?void 0:n.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var n;(n=this.featureFlags)==null||n.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var n;(n=this.featureFlags)==null||n.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var n;return s===void 0&&(s=!1),(n=this.featureFlags)==null?void 0:n.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,n;return s===void 0&&(s=!1),(r=(n=this.surveys)==null?void 0:n.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Ns})}Jn(e){return!e||Mi(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 n=this.get_distinct_id();this.register({$user_id:e}),this.get_property(sr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:n},""),e!==n&&e!==this.get_property(Bs)&&(this.unregister(Bs),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||es)===es,a=e!==n,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(ii,{distinct_id:e,$anon_distinct_id:n},{$set:s||{},$set_once:r||{}}),this.Sn=mi(e,s,r),(i=this.featureFlags)==null||i.setAnonymousDistinctId(n);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=mi(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=mi(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((n=>W(n)&&n.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 n=this.getGroups(),i=n[e]!==s;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},n,{[e]:s})}),i||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(Qa,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),i&&!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,n,i,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(ri),m=this.get_property(qt),_=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(),(n=this.sessionPersistence)==null||n.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[qt]:m}),(i=this.surveys)==null||i.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,es),(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({[ri]: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,n,i,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(n=s.jn)==null||n.dispose(),(i=s.sessionRecording)==null||i.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,n=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!r)return n;n+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return n}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=b({},this.config);if(te(e)){var r,n,i,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 ui(b({},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:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(n=this.featureFlags)==null||n.updateConfig==null||n.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.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,n,i,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&&((n=this.sessionRecording)==null||n.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.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"),n=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(b({},n,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:os;return s!==os&&(s=os+"."+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===to&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Bs])&&((s=this.persistence)==null||(s=s.props)==null||!s[rn]))}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(rn,!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,n,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((r=this.persistence)==null||r.set_disabled(i)),((s=this.sessionPersistence)==null?void 0:s.xi)!==i&&((n=this.sessionPersistence)==null||n.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,n,i,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(n=this.pageViewManager)==null||n.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=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(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(is,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(nn,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ne(C,nn,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,n,i,o){var a=r in s&&!D(s[r]),l=n in s&&!D(s[n]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+n+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[n])})(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),n=L(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of n){if(i=o(i),D(i)){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}i.properties&&!mt(i.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(i.properties&&D(i.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 i}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]]=np(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 n=this.clicks[this.clicks.length-1];if(n&&Math.abs(e-n.x)+Math.abs(s-n.y)r-n.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 yi="$copy_autocapture",wi=se("[AutoCapture]");function bi(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,n=e.e,i=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,w=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(S),"ph-no-capture")&&(w=!0),m.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"?bi(1024,dl(T)):bi(1024,rr(T)));var Ie=ln(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=Go(ge).join(" ")),pe["attr__"+ae.name]=bi(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,i,o,a,u));var N=(function(T){if(!no(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)})),w)return{props:{},explicitNoCapture:w};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=cn(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:n.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=b({},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&&n.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 po="[SessionRecording]",at=se(po),hf=se("[Heatmaps]");function Ei(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Pr=se("[Product Tours]"),Si=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},pf=["$set_once","$set"],Ze=se("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function rs(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 Xo,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,n)=>{this.on(r,n)}))}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 n,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(n=this._instance)==null||n.autocapture.setElementSelectors(i)}}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((n=>{this.cs(s,n)&&this.ns.emit("actionCaptured",n.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,n=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!n||typeof n!="string"||!rs(n,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 n=this.bs(e);if(n.length>0)return n.some((a=>rs(a.href,s.href,s.href_matching||"exact")));var i,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&rs((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var n=this.bs(e);if(n.length>0)return n.some((u=>rs(u.text,s.text,s.text_matching||"exact")||rs(u.$el_text,s.text,s.text_matching||"exact")));var i,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(i=(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",i.some((u=>rs(u,o,a))))}ys(e,s){var r,n;if(s==null||!s.selector)return!0;var i=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(i!=null&&i.includes(s.selector))return!0;var o=(e==null||(n=e.properties)==null?void 0:n.$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,n)=>{var i=L(n.value)?n.value.map(String):n.value!=null?[String(n.value)]:[];return r[n.key]={values:i,operator:n.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((n=>{var i;(i=n.conditions)==null||(i=i[s])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(n.id),r.set(o.name,a)}}))})),r}Rs(e,s,r){var n=(r===As.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>n?.includes(a.id)))})),i.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 n,i;return((n=r.conditions)==null?void 0:n.actions)&&((i=r.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.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 n,i,o,a,l;r.conditions&&(n=r.conditions)!=null&&n.actions&&(i=r.conditions)!=null&&(i=i.actions)!=null&&i.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((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),n=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&n.length===0||((s=this._instance)==null||s._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,As.Activation),this.ks=this.Ps(e,As.Cancellation))}onEvent(e,s){var r,n,i=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(n=s.properties)==null?void 0:n.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.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&&(i.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)){i.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()),n=[];for(var i of e)r&&this.Cs(i)?this.qs(i)&&this.Us(i):n.push(i);n.length>0&&(this._s=[...new Set([...this._s,...n])]),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((i=>!s.has(i)));var r=this.Zs(),n=r.filter((i=>!s.has(i)));n.length!==r.length&&(this.Ws(n),n.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(b({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},n=!1;for(var i of Object.entries(s)){var o=i[0],a=i[1];e.includes(o)?n=!0:r[o]=a}n&&(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 n=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return i&&n===i?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 n=this.Zs(),i=this.Qs();n.length>0&&(this.Ws([]),n.filter((o=>he(i[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 Yi}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((i=>{r=i.find((o=>o.id===e))}));var n=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return he(n)&&n>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({[Yi]: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((i=>{r=i.find((o=>o.id===s))}));var n=!r||(function(i){var o;return rd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(r);return n?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?un(v.location.hash,"__posthog")||un(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,n)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=r.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:n,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}),xi=`" 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)=>pn(e,t),not_regex:(t,e)=>!pn(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((n=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,n.forEach((i=>{if(i.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=s.oa)==null||o.set(i.feature_flag_key,i));var a=s._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&s.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,s._instance)&&s.la(i.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 n,i=this._instance.getFeatureFlag(s),o=(n=this.oa)==null?void 0:n.get(s);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=ms(e?.search,"__experiment_id"),r=ms(e?.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments((n=>{this.ha(parseInt(s),r,n)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var n=this._instance.get_property("$web_experiments");if(n&&!s)return e(n);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,s,r){var n=r.filter((i=>i.id===e));n&&n.length>0&&(ye.aa("Previewing web experiment ["+n[0].name+"] with variant ["+s+"]"),this.la(n[0].name,s,n[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 n=ye.getWindowLocation();if(n){var i,o,a,l=yu(s,n.href);return(i=e.conditions)==null||!i.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 n,i,o,a,l,u,c,d,h=(n=e.conditions)==null||(n=n.utm)==null||!n.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.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),n=1;s>n;n++)r[n-1]=arguments[n];k.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(zl):s!=="control"?r.forEach((n=>{if(n.selector){var i;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",n);var o=(i=document)==null?void 0:i.querySelectorAll(n.selector);o?.forEach((a=>{var l=a;n.html&&(l.innerHTML=n.html),n.css&&l.setAttribute("style",n.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",ki=(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,Rn={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&&ne(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=b({},t),n=this.Oa(Bt);if(n)for(var i of Object.entries(n))r["$feature/"+i[0]]=i[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 n,i,o=(n=(i=s.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&n!==void 0?n:{},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,n,i=s!=null&&s.merge&&(r=this.Oa(Bt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(n=this.Oa(Hs))!==null&&n!==void 0?n:{},a=b({},i,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled: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(Ki),e=this.Oa(et),s=this.Oa(jt);if(!s&&!e)return t||{};var r=ee({},t||{}),n=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var i of n){var o,a,l=r[i],u=e?.[i],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?.[i],p=b({},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=b({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[i]=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),n=0;r.length>n;n++)s[r[n]]=e[r[n]];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),n=0;r.length>n;n++)s[r[n]]=e[r[n]];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:b({},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 n=this.qa();x(n)||(s.flag_keys=n);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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:i}),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+xi)}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(),n=t in r,i=r[t],o=this.getFlagPayloads()[t],a=String(i),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,w,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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=(w=S==null||(I=S.reason)==null?void 0:I.description)!==null&&w!==void 0?w: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(n)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xi)}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 n={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},i=s.Na();i.length&&(n.evaluation_contexts=i);var o,a=s.qa();x(a)||(n.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:n,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+xi),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(n,i,o,a,l,u){i===void 0&&(i={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,B)=>{var S=P.flags;return S?b({},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)})(n,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=n.requestId,g=n.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,[en]:!1}}var E=h,w=p,I=d;if(l!=null&&l.partialResponse)E=b({},i,E),w=b({},o,w),I=b({},a,I);else if(n.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=b({},i,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),w=b({},o,Object.fromEntries(Object.entries(w||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=b({},i,E),w=b({},o,w),I=b({},a,I);return b({[Us]:Object.keys(Wl(E)),[Bt]:E||{},[Hs]:w||{},[Ki]:I||{},[en]:n.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={},n=s.flags,i=s.payloads;return n&&(r[et]=L(n)?Hl(n):n),i&&(r[jt]=i),Object.keys(r).length&&this.F(r),n===!1&&i===!1?this.q([et,jt]):n===!1?this.q(et):i===!1&&this.q(jt),this.Va(),n===!1?Ot.info("Flag overrides cleared"):n&&Ot.info("Flag overrides set",{flags:n}),void(i===!1?Ot.info("Payload overrides cleared"):i&&Ot.info("Payload overrides set",{payloads:i}))}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(n){this.rt.error("Error while running feature flags callback",n)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Rr)||[]).find((l=>l.flagKey===t)),n={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:n};r&&(i.$early_access_feature_name=r.name),s&&(i.$feature_enrollment_stage=s);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(o)),[Bt]:o,[ct]:b({},this.Oa(ct)||{},n)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).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 n,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Rr]:n=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(n)}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((n=>{try{n(s,r,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}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),n=t?.$set_once,i={};if(n)for(var o in n)({}).hasOwnProperty.call(n,o)&&(o in s||(i[o]=n[o]));this.F({[ct]:b({},s,i,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=b({},this.Oa(ct)||{});t.forEach((r=>{delete s[r]})),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Ut)||{},r=b({},s);for(var n of Object.keys(t))r[n]=b({},s[n],t[n]);this.F({[Ut]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:b({},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(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&&ne(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),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,(n=>{if(n)return at.error("could not load recorder",n);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 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,n=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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({[qt]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({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})})};n(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(n)}}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(qt);return(s==null||(e=s.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(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 n;if(this.Ja||(this.Ja=(n=$.__PosthogExtensions__)==null?void 0:n.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){wi.error("Failed to capture event",r)}};if(ne(C,"submit",t,{capture:!0}),ne(C,"change",t,{capture:!0}),ne(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||v?.event;try{this.bo(s,yi)}catch(r){wi.error("Failed to capture copy/cut event",r)}};ne(C,"copy",e,{capture:!0}),ne(C,"cut",e,{capture:!0})}}}else wi.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({[Ui]: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 n=C?.querySelectorAll(r);n?.forEach((i=>{t===i&&s.push(r)}))})),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[Ui],r=this.co,n=this.instance.Qi()&&!this.fo;if($e(r)&&!Ke(s)&&!n)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=ai(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 n=e===yi;if(r&&(function(d,h,p,f,g,m){var _;if(!v||Jo(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 w=Cu(d,f),I=w.parentIsUsefulElement,F=w.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)||!ro(F,p?.css_selector_allowlist)||ro(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&&(Ko.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,n,n?["copy","cut"]:void 0,this.instance)){var i=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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===yi){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,n,i){try{if(!(n in r))return $l;var o={next:r[n]},a=i((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[n]=a,()=>{if(r[n]!==a)for(var l=r[n];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[n]=o.next}}catch{return $l}})(v.history,t,(r=>function(n,i,o){r.call(this,n,i,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(is,{navigation_type:t}),this._o=s}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ne(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[Hi]),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({[Hi]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ei(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),ne(v,on,this.Po),this.Ro=t=>this.ke(t||v?.event),ne(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ne(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),ne(C,nn,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(on,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(nn,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(),n=this.instance.scrollManager.scrollElement(),i=(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})(ai(t),["fixed","sticky"],n);return{x:t.clientX+(i?0:r),y:t.clientY+(i?0:s),target_fixed:i,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!sl(t.target)&&Ei(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(ai(t),this.instance.config.rageclick)&&this.Vt(b({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!sl(t.target)&&Ei(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?[...vs,...s||[]]:[],n=nr(e,r,ir);this.R=this.R||{},this.R[n]||(this.R[n]=[]),this.R[n].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",b({$current_url:this.R.url},this.R.metrics.reduce(((s,r)=>b({},s,{["$web_vitals_"+r.name+"_event"]:b({},r),["$web_vitals_"+r.name+"_value"]:r.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(s?.name)||D(s?.value))Lt.error("Invalid metric received",s);else{var n=typeof s.navigationURL=="string"?s.navigationURL:void 0,i=this.Bo(n);if(!x(i)){var o=he(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+i;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=i),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=b({},s,n?{navigationURL:i}:{},{$current_url:i,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,n,i,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,n=l.onFCP,i=l.onINP),s&&r&&n&&i){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&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(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[Vi]),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[Gi])||["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({[Vi]:s}),this._instance.persistence.register({[Gi]: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,(n=>{n?Lt.error("failed to load script",n):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,n=this._instance.config.mask_personal_data_properties?[...vs,...r||[]]:[];return nr(s,n,ir)}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,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=n(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(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[Wi]),this.Jo=new yh(b({},(function(s){var r,n,i,o;return s===void 0&&(s={}),{refillRate:(r=(n=s.exceptionRateLimiterRefillRate)!==null&&n!==void 0?n:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(i=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i: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=b({},e,t):(x(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(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({[Wi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,n=(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(n)?Ms.info("Skipping exception capture because of client rate limiting.",{exception:n}):(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 n=arguments.length,i=new Array(n>1?n-1:0),o=1;n>o;o++)i[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 i){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 b({},E,{filename:E.filename||(w=_,w[w.length-1]||{}).filename,function:E.function||gs});var w}))})(u)}})("web:javascript",jh,Wh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(zi))!==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 n=t.config;if("errorTracking"in n){var i=(e=(s=n.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=n.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[zi]:this.Xo,[qi]:o})}}}get nl(){var t,e=!!this._instance.get_property(qi),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(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>ep.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=s.sanitizedProperties,n=s.droppedKeys;n.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:n}),this.rl.add(b({[Zr]:t,[Xr]:new Date().toISOString()},r))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;r&&(s.$release_id=r);try{var n=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return n&&this.rl.clear(),n}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 i}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((s,r)=>{var n=r.type,i=r.value;return W(n)&&n.length>0&&s.$exception_types.push(n),W(i)&&i.length>0&&s.$exception_values.push(i),s}),{$exception_types:[],$exception_values:[]});return this.Xo.some((s=>{var r=s.values.map((n=>{var i=td[n.operator],o=e[n.key];if(!i||!o)return!1;var a=L(n.value)?n.value:[n.value];return a.length>0&&i(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,n,i=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(r=o==null||(n=o.filename)==null?void 0:n.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!D(t)&&L(t)}}},Sf=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var s,r;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Si(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&&Si(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:n=>{if(Si(this._instance)){var i=n.statusCode;if(i!==200||!n.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?n.error||Pr.warn(o):Pr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(n.json.product_tours)?n.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)}}},Rn),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,n,i,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},Ic(t,pf),{properties:b({},t.properties,f?{$set:b({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(r=(n=t.properties)==null?void 0:n.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",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,n,i,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 w=m[_];m[_]=E(w),c.push((()=>{m[_]=w}))}},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 w=f(_);return w?m.call(this,w,E):_})),p(u,"replaceChild",(m=>function(_,E){var w=f(_);return w?m.call(this,w,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,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))}))})),[(n=l.Element)==null?void 0:n.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"after",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];var F=g(w);return w.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var w=f(E);return w?m.call(this,_,w):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(n){throw s(),n}}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,n=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),n(a)}})),!1).processEvent;i&&(e.processEvent=i),r=!0}catch(o){Ze.error(Ml+t.id,o),n(!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(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(s)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var n of Object.values(this.apps))r(n)}}onRemoteConfig(t){var e,s,r,n=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 i=t.config;if((r=i.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=n._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(n._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of i.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=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return 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(n)))}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(qo);r(this._instance,"surveys",(n=>{n||!t.generateSurveys?this.$l("Could not load surveys script",n):this.Dl(t.generateSurveys,e)}))}catch(n){throw this.$l("Error initializing surveys",n),n}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(Ji);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((n=>t(n.surveys,n.context))):(typeof Promise<"u"&&(this.Ll=new Promise((n=>{s=n}))),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:n=>{var i;this.Ll=null;var o=n.statusCode;if(o!==200||!n.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):n.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=n.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)),(i=this._instance.persistence)==null||i.register({[Ji]:c,[tn]: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(tn);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};id(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((n=>n.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 n,i=(n=r.find((a=>a.id===t)))!==null&&n!==void 0?n:null;if(i){var o=this.zl(i);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 n=typeof t=="string"?this.Hl(t):t;if(n!=null&&n.id)if(Zp.includes(n.type)){var i=C?.querySelector(e);if(i)return(r=n.appearance)!=null&&r.surveyPopupDelaySeconds?(q.info("Rendering survey "+n.id+" with delay of "+n.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+n.id+" with delay of "+((o=n.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(n,i,s),q.info("Survey "+n.id+" rendered")}),1e3*n.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(n,i,s);q.warn("Survey element not found")}else q.warn("Surveys of type "+n.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 n=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(n=b({},r,{appearance:b({},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 i=this.Ul(r);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(n,e):this.renderSurvey(n,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()}}},Rn),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),so(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,n=vf||un(t.hash,"__posthog")||un(t.hash,"state"),i=n?el((()=>JSON.parse(atob(decodeURIComponent(n)))))||el((()=>JSON.parse(decodeURIComponent(n)))):null;return i&&i.action==="ph_authorize"?((r=i).source="url",r&&Object.keys(r).length>0&&(i.desiredHash?t.hash=i.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=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(b({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var n;this.Wl(1),(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Dl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(r)})),ne(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=b({experiments:ye},Rn),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||so(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(qo);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":so(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=b({},this.rt,{error(){for(var r=arguments.length,n=new Array(r),i=0;r>i;i++)n[i]=arguments[i];n.some(Vl)||s.rt.error(...n)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,n;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(n=this.lu)==null||n.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ne(v,"online",this.au)}uu(t,e,s,r){var n,i=(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,_),w=o?.resourceAttributes;return{serviceName:(d=(h=w?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=w?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=w?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:w,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((n=this._instance)==null||(n=n.config)==null?void 0:n.logs,s);return[new Th(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,r),i]}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),(n=>{this.tr=n}));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),(n=>{this.su=n}),{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(qo)}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,n){var i;r===ut.LogsQueue&&e((i=n)!==null&&i!==void 0?i:[])},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:ki(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=i=>{s||(s=!0,clearTimeout(n),e(i))},n=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:ki(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:ki(i.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=i.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,n){if(e.length!==0){var i=e.map((a=>a.record));n([]);var o=ru(i,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,n=s.sessionStartTimestamp,i=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,D(n)||(e.sessionStartTimestamp=n),D(i)||(e.lastActivityTimestamp=i)}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 n,i,o,a,l,u=r?.resourceAttributes;return{serviceName:(n=u?.["service.name"])!==null&&n!==void 0?n:r?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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,n=o=>{r||(r=!0,clearTimeout(i),s(o))},i=setTimeout((()=>n({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)n({kind:"ok"});else if(a===413)n({kind:"too-large"});else if(a!==0&&a!==429&&500>a)n({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;n({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=b({},Rn,wf,bf,Ef,Sf,xf,If,kf,Cf,Ff,Pf,Af,$f);Te.__defaultExtensionClasses=b({},Rf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Ys[os]=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():ne(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",Tf={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 Nf(t={},e=0){const s=fo(t.artifactType||t.type||cd),r=fo(t.artifactName||t.name||t.fileName||`${ud}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function dd(t={},e=0){const s=kt(t),r=s.artifactType||s.type||cd,n=s.artifactName||s.name||ud;let i=s.fileName||n;return i.endsWith(".dart")||(i+=".dart"),{id:fo(s.id)||Nf({...s,artifactType:r,artifactName:n,fileName:i},e),artifactType:r,artifactName:n,fileName:i,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:hd(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:pd(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Tf[r]||"O"}}function hd(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 pd(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 go(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"?go(t):t,i=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.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)=>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(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:hd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function gn(t){return or(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 ys(t){return JSON.stringify(t,null,2)}function Mf(t){return ys({task:"architect",userRequest:String(t??"")})}function Lf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ys(e):ys({task:"generate_bundle",bundleSpec:e})}function Of(t){return ys({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 s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function Df({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:n}){return ys({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(n)})}function fd({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return ys({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 gd(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 n=gd(r,e+1);if(n)return n}}return null}function mn(t){return Array.isArray(t)?t.some(mn):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(mn):!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 Uf(t,e){if(Le(t))for(const[s,r]of Object.entries(t)){if(!Le(r))continue;const n=Le(r.categories)?r.categories:{},i=Object.entries(n).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):r.matched===!0&&e.add(md(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,n]of s){if(!mn(n))continue;const i=md(r),o=n?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?n?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>mn(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}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=gd(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,n=e.invocationResult||null,i=mo(e.filterSummary||e.filterResults);return!r&&!i&&!["PARTIAL","FAILURE"].includes(n)?null:{kind:r?"blocked":"unavailable",invocationResult:n,matchedFilters:[...s]}}function qf(t,e){const s=zf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Wf))],n=s.kind==="blocked",i=new Error(n?`Safety screening blocked this pipeline step for ${Kl(r)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=n?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=n?"Request blocked for safety":"Safety check unavailable",i.userMessage=n?`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.",i.retryExplanation=n?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=s.matchedFilters,i}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 n=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);n&&s.push(n[1])}return s}function ea(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,n,i)=>i.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(n,i,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=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)),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 n=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!n.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(i)}}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=>Ii(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=>Ii(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 n=r[1];if(!(new RegExp(`this\\.${n}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${n}\\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=>Ii(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 n=s.index+s[0].length-1;neg(t).usable);function sg(t=""){const e=ar(t);return tg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:n})=>({id:s,severity:r,message:n}))}function rg(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let n=r.index+6,i=null;const o=n;for(;no;if(t[n]==="<"){const u=Xf(t,n);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),n=u.end,!/\s/.test(t[n]||"")))continue;for(;nXl(o.functionName)===r);if(n)return n;const i=o=>!o.functionName.startsWith("_");return s.find(i)||s[0]}function Tn(t=""){return Array.from(ar(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ng(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 s=Tn(e);if(s.length===0)return null;const n=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Ql(l)===n)||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 sa(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function og(t,e,s=""){const r=ta(e,s)?.functionName;if(!r)return null;const n=String(t||"").split("/").pop(),i=ea(n,"A");if(i===r)return null;const o=`${sa(r)}.dart`;return`File name "${n}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function ag(t="",e=""){return ta(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(i=>r.endsWith(i))||e.has(r))}function cg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=ng(t,e),n=lg(r,s);if(n.length===0)return null;const[i]=n;let o;return s.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:r===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", 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||"",n=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.")),!n.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(n)||s.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of sg(n))s.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!ag(n,t.artifactName)&&s.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Tn(n)),o=cg(n,{functionName:t.artifactName,declaredTypes:i});o&&s.push(Qe(t,"error",o));const a=og(r,n,t.artifactName);a&&s.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(n)&&s.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=ig(r,n);i&&s.push(Qe(t,"info",i))}return s}function dg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(i=>Tn(i.code||""))),r=e.flatMap(i=>ug(i,{declaredTypes:s})),n=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Zl[i.artifactType]||Zl.CodeFile}));return{valid:r.every(i=>i.severity!=="error"),findings:r,deployHints:n}}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)),n=s.split(` -`).filter(i=>{const o=tc(i);return o===null||!r.has(o)?!0:!pg.test(i)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+n}const gg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function vd(t){let e="",s=0;for(;s{const r=s.name||s.package;if(!r||r==="flutter")return e;const n=s.versionRequired||s.required;return e[r]=n&&s.version||"",e},{})}function yg(t){const e=new Map,s=new Map,r=[];for(const n of t)e.has(n.fileName)?r.push(`Duplicate deploy file name "${n.fileName}" for artifacts "${e.get(n.fileName)}" and "${n.artifactId}".`):e.set(n.fileName,n.artifactId),s.has(n.path)?r.push(`Duplicate deploy path "${n.path}" for artifacts "${s.get(n.path)}" and "${n.artifactId}".`):s.set(n.path,n.artifactId);return r}function wg(t,e={}){const s=Array.isArray(t?.artifacts)?t.artifacts:[],n=(e.selectedArtifactIds||t?.deployOrder||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];n.forEach(p=>{const f=_g(p),g=p.fixedCode||p.code||"",m=p.codeType||mg[p.artifactType]||Ne.OTHER;g.trim()||i.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||vg(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),...n.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};n.forEach(p=>{ra(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:i,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 r=[Eg(t),bg(e.content),e.artifactName].find(n=>/^[A-Z][A-Za-z0-9_]*$/.test(String(n||"")));if(!r)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return r}function xg(t,e=new Map){const s=[];for(const[r,n]of t.entries())n.type!=="C"||e.has(n.path)||s.push({artifactId:n.artifactId||r,className:Sg(r,n),content:n.content,fileName:r,path:n.path});return s}function kg(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},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 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 Cg(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function na(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,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),n=gt(r.message,r.title,r.issue,r.description,r.summary);return n?{severity:na(r.severity||r.status||r.level)||e,message:n,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function _o(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(([n,i])=>tt(s[n]).map(o=>yd(o,i,e)).filter(Boolean))}function Fg(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),n=gt(r.title,r.action,r.step,r.message,r.name,r.description);return n?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:n,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 yo(t,e=null){const s=De(t);return Ig.flatMap(r=>tt(s[r])).map((r,n)=>Fg(r,n,e)).filter(Boolean)}function Pg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=go(s.content)||e);const r=De(e),n=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(n).length?n:r}}function Ag(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const n=De(r);return[n.id,n.fileName,n.artifactName,n.name].map(We).some(i=>i&&s.includes(i))})||null}function $g(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(n=>We(n?.artifactId)===We(e.id)||We(n?.fileName)===We(e.fileName))?.pathHint||""}function Rg(t,e){return tt(t?.relationships).filter(s=>We(s?.from)===We(e.id)||We(s?.to)===We(e.id))}function Tg(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 Ng(t,e,s,r){const n=Ag(e,s),i=De(n?.review||n||s.review),o=Object.keys(i).length>0,a=[..._o(i),...Tg(t,s)],l=yo(i,s.id),u=na(i.status||i.verdict||i.outcome||i.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:$g(t,s),relationships:Rg(t,s)}}function Mg({status:t,score:e,artifactPresentations:s,manualSteps:r}){const n=s.length;if(n===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=s.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),n&&o.push(`${n} artifact${n===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Lg({bundle:t,reviewResult:e}){const s=De(t),r=tt(s.artifacts),{root:n,rawText:i}=Pg(e),o=[n.bundleReview,n.overallReview,n.overall,n.bundleSummary,n.summaryReview,n.review].map(De).find(w=>Object.keys(w).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((w,I)=>Ng(s,a,w,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(w=>w.manualSteps)].filter((w,I,F)=>F.findIndex(P=>P.title===w.title&&P.artifactId===w.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(w=>w.severity),...l.map(w=>w.status)),g=o.score??n.score??n.overallScore??i,m=Cg(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,n.overallSummary,n.headline,n.summary,n.executiveSummary,n.overview,n.assessment,n.conclusion,i)||Mg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((w,I)=>(w[I.status]+=1,w),{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(w=>w.reviewComplete).length,total:l.length},deployOrder:tt(s.deployOrder),relationships:tt(s.relationships),warnings:tt(s.warnings),compatibility:De(s.metadata?.compatibility)}}const Og=/^\uFEFF/;function Os(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).join(` -`)}function Dg(t){const e=String(t??"").replace(Og,"");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 n=0,i=-1;const o=[];{let c=0;for(let d=0;d=0&&(n++,i<0&&(i=d),o.push(c+h)),c+=s[d].length+1}}if(n===0)return Os(s);{const c=wo(e);if(!c.error&&o.every(h=>ic(h,c.commentAndStringRanges)))return Os(s)}if(n===1){const c=Os(s.slice(0,i)),d=Os(s.slice(i+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 wd(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),s=>s[1])}function bd(t){return`${sa(t)}.dart`}function jg(t){return ea(t,"W")}const nc={"(":")","[":"]","{":"}"},Ug={")":"(","]":"[","}":"{"},Hg=/[A-Za-z0-9_]/;function wo(t){const e=[{kind:"code",opener:null,openedLine:0}],s=[];let r=1,n=0;const i=(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(;n0?t[n-1]:"",f=n>1?t[n-2]:"",g=(p==="r"||p==="R")&&!Hg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:n,openedLine:r}),n+=h?3:1;continue}if(nc[c]){e.push({kind:"code",opener:c,openedLine:r}),n++;continue}if(Ug[c]){if(d.interpolation&&c==="}"){e.pop(),n++;continue}if(d.opener&&nc[d.opener]===c){e.pop(),n++;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})}i(c,t[n+1]),n++}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 Wg(t){return wo(String(t??"")).error}function ic(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 zg=/^dependencies\s*:\s*(?:#.*)?$/,qg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Nn(t){const e=t.match(qg);return e?e[1]??e[2]??e[3]:null}function pr(t){const e=t.trim();return e===""||e.startsWith("#")}function xs(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const s=t.findIndex(i=>e.test(i));if(s===-1)return null;let r=s,n=null;for(let i=s+1;i=0.0.0"}`}function Kg(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 n=s.split(` -`),i=new Set(xd(s)),o=[],a=[];for(const[u,c]of r)i.has(u)?a.push(u):(o.push([u,c]),i.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=oa(n);if(l){const u=o.map(([c,d])=>oc(l.childIndent,c,d));n.splice(l.endIndex,0,...u)}else n.length>0&&n[n.length-1].trim()!==""&&n.push(""),n.push("dependencies:"),o.forEach(([u,c])=>{n.push(oc(" ",u,c))});return{yaml:n.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function Jg(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 n=s.split(` -`),i=Ln(s),o=[],a=[];for(const[l,u]of r){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(xs(n[c.lineIndex]));n[c.lineIndex]=`${d}${l}: ${Id(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:n.join(` -`),overridden:o,skipped:a}}function Cd(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),oa(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),xd(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 Yg=">=3.0.0 <4.0.0";function bo(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 Zg(t=""){const e=_d(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[n,i]of t){if(i.isScalar){e[n]=bo(i.constraint);continue}if(i.sourceKey==="sdk"){s.add(n);continue}if(i.sourceKey==="version"){e[n]=bo(i.sourceValue);continue}r.push(n)}return r}function Xg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e),i=ac(Vg(t,"dependency_overrides"),r,e),o=[...n,...i],a=new Set([...Object.keys(s),...e]),{sdk:l}=kd(t);return{sdkConstraint:bo(l)||Yg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:a,unrepresentable:o,unrepresentableOverrides:i}}function Qg(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 em(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a,unrepresentableOverrides:l}=Xg(e),u={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},c=[],d=[];for(const h of t){const{className:p,content:f}=h,g=ra(f),m=g.filter(w=>a.includes(w));if(m.length>0){d.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}if(l.length>0&&_d(f).some(w=>w.startsWith("package:"))){d.push({className:p,reason:`${p} was not compiled before deploying: your project's dependency_overrides redirects ${l.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Zg(f),E=g.filter(w=>!o.has(w));if(_.length>0||E.length>0){d.push({className:p,reason:Qg(p,_,E)});continue}c.push({fileName:`${sa(p)}.dart`,content:f})}return{manifest:u,sources:c,skipped:d}}function lc(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",n=[];for(const i of s){const o=Fd(i);o&&n.push(o)}return{events:n,buffer:r}}function tm(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 sm(t,e={}){const{onPhase:s,onLog:r}=e;let n=null,i="";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}n=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(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());i=a.buffer,a.events.forEach(o)}return tm(i).forEach(o),n?{...n,success:n.success===!0||n.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 rm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(rm);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 s=0;s0)}function om(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:om(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 n=!1,i;for(;(i=r.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;n=!0,o===">="||o===">"?(s.min=a,s.minInclusive=o===">="):(s.max=a,s.maxInclusive=o==="<=")}return n?s:null}function cc(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=vn(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=vn(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function am(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=vn(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function ns(t){const e=aa(t);return e?e.min:null}const lm="https://pub.dev/api/packages/",cm=8e3;function um(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null}=e,n=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of n){const a=o?.version;if(!a||o.retracted||im(a))continue;const l=o.pubspec?.environment||{};s&&l.sdk&&!cc(l.sdk,s)||r&&l.flutter&&!cc(l.flutter,r)||(!i||vn(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function dm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:n=fetch}=e;let i;try{const a=await n(`${lm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(cm)});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}"`};i=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=um(i,{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 hm(t,e={}){const s=await Promise.all(t.map(r=>dm(r,e)));return new Map(s.map(({name:r,...n})=>[r,n]))}async function pm(t,e={},s={}){const{resolveVersions:r=hm}=s,n=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=kd(t),o={dartSdkFloor:ns(i.sdk),flutterSdkFloor:ns(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(n.length===0)return a;const l=Ln(t),u=[];for(const[c,d]of n){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(am(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 fm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>fm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function gm(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 mm(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 vm(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 _m(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 ws(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=ws(t);try{return s.highlight(r,{language:e}).value}catch(n){console.warn("Syntax highlighting failed:",n);try{return s.highlight(r,{language:"json"}).value}catch{return bt(r)}}}function On(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
    ';const n=String(t??"").split(` -`);let i=!1,o="";for(const a of n){if(a.startsWith("```")){if(i){const l=_m(o),u=Pd(o.trim(),l,s);r+=`
    -
    ${u}
    -
    `,o="",i=!1}else i=!0;continue}if(i){o+=a+` -`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`
    -

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

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

    - ${vm(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 ym="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Ad={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},_n="ccc_auth_session",dc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function bs(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=bs({isResolved:!0});const wm=`${Je}/service/runpipeline`,bm="bs_user_id",Em="bs_identity_token",Sm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const yn={free:2,professional:50,power:2e3},wn="ccc_subscription",hc=3,xm=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"],km={"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 km[t]||t}const Im=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 Im.has(t)}const Eo=4,Ci=8*1024*1024,Cm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Fm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Pm(t){const e=new FormData;return e.append("file",t),(await fetch(Cm,{method:"POST",body:e})).json()}function Am(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 $m(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const s=e.filter(l=>l.size>Ci);s.length&&ue(`Skipped ${s.length} image(s) over the ${(Ci/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=Ci);if(!r.length){t.target.value="";return}const n=Eo-Pt.length,o=r.slice(0,n).map(async l=>{const u=await Fm(l);if(!u)return null;let c="";try{c=Am(await Pm(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>n&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Rm(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 n=document.createElement("div");n.className="prompt-img-thumb",n.innerHTML=`Prompt image`,t.appendChild(n)}),e&&(e.textContent=Pt.length>=Eo?"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 Gt="ccc_usage",Td="google/gemini-3.7-flash",Nd="google/gemini-3.7-flash",Fi="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"},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 Tm(){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 n=r.rates,i={AUD:1},o=new Set([...Object.keys(Ur),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof n[a]=="number"&&n[a]>0?i[a]=n[a]:Ur[a]&&(i[a]=Ur[a]));Hr=i}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 Md(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&xo[i])return xo[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=So[e];if(s)return s;const r=e.split("_")[0],n=So[r];return n||"USD"}function fc(t,e){const s=Hr[e]??Hr.USD,r=t*s,n=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:n>=100||n%1===0?0:2}).format(n)}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_",it="ccc_encryption_key",cr="ccc_encryption_key_scope",Nm="ccc_keystore",bn="keys",ur="ccc_encryption_key_version";let ko=null,En=null,dr=!1,Sn=!1,gc=!1;class xn 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 Io(){return crypto.randomUUID?.()||Dd(crypto.getRandomValues(new Uint8Array(16)))}function Mm(){const t=Ld();if(t)return t;const e=Io();return localStorage.setItem(ur,e),e}function Es(){ko=null,En=null,dr=!1,Sn=!1}window.addEventListener("storage",t=>{t.key===ur&&Es()});function Lm(){return new Promise((t,e)=>{const s=indexedDB.open(Nm,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(bn)||r.createObjectStore(bn)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function ca(t,e){const s=await Lm();return new Promise((r,n)=>{const i=s.transaction(bn,t);let o;try{o=e(i.objectStore(bn))}catch(l){s.close(),n(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>n(o.error),i.oncomplete=()=>{s.close(),r(a)},i.onerror=()=>{s.close(),n(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{s.close(),n(i.error||new Error("Encryption key transaction aborted."))}})}function Om(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Dm(){const t=await ca("readonly",e=>e.get(it));return Om(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,it))}async function Bm(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function jm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Od(e),sessionStorage.removeItem(it),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),e}async function vc(t){const e=sessionStorage.getItem(it);if(e)return Sn=sessionStorage.getItem(cr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new xn;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(it,JSON.stringify(r)),sessionStorage.setItem(cr,"session"),Sn=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function Um(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await Dm();if(e)return e;const s=await jm();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=Mm();En!==s&&Es();const r=ko||Um(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function Hm(t){const e=await ua(),s=En,r=new TextEncoder,n=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:n},e,r.encode(t)),o=new Uint8Array(n.length+i.byteLength);return o.set(n),o.set(new Uint8Array(i),n.length),{ciphertext:Dd(o),keyVersion:s,sessionFallback:dr}}async function Wm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=zm(t),i=n.slice(0,12),o=n.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof xn)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="",kn="",Zs=null,yc=0;async function da(){sessionStorage.getItem(it)&&await ua(),hr=await Ee("flutterflow"),kn=await Ee("flutterflow_project_id"),Jm(),Zt()}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 Dn(){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 n=e.querySelector("div:first-child");n&&(n.classList.remove("bg-gray-400"),n.classList.add("bg-blue-500"),n.innerHTML=r)}else if(r0&&Et<=t&&(Et++,Dn())}function Vm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Gm(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&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Dn(),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",Km()}function Km(){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"),n=s.querySelector("span");as(t)?(r.className="key-status-dot configured",n.className="text-green-600",n.textContent="User key configured"):(r.className="key-status-dot missing",n.className="text-gray-500",n.textContent="Not configured")}function Zt(){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 Jm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,n)=>{const i=s[n];i==="flutterflow"?as("flutterflow")&&as("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):as("flutterflow")||as("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)"):as(i)?(r.className="key-status-dot configured",r.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Zt()}async function Ym(){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(!Bn(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"),n=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=n,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),Bd()},1e3)}async function Zm(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ur,Io()),Es(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),await Bm(),localStorage.setItem(ur,Io()),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 Bn(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function Xm(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function Qm(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;Xm("flutterflow-api-key-input",s)}),t.addEventListener("blur",ev(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function ev(t,e){let s;return function(...n){const i=()=>{clearTimeout(s),t(...n)};clearTimeout(s),s=setTimeout(i,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 n=await new gr(t,"").listProjects();if(!n||n.length===0){e.innerHTML='';return}e.innerHTML='',n.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),kn&&(e.value=kn)}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 tv(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 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 rv(){y.bundleSpec=or(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function jn(){const t=gn(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=gn(y.artifactBundle).id}function Un(){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 n=r.review;return n&&typeof n.fixedSource=="string"&&n.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 n=s.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...n?{fixedCode:n}:{}}})||[],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)||gn(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 Wr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function iv(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",n=Wr.production){this.apiKey=e,this.baseUrl=n,this._projectId=s,this._branchName=r,this._endpoint=n}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 n=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!n.ok){const a=await n.text();s=new Error(`Export failed: ${n.status} - ${a}`);continue}const i=await n.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){s=new Error("Export response did not include project source.");continue}return o}catch(n){s=n}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const n=r.slice(0,r.length-12),i=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(n))return!1;const l=a.slice(n.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(n.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:i}}async pushCodeWithRetry(e,s=3){const r=[Wr.production,Wr.staging],n=Math.max(0,r.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(n=>({id:n.id,name:n.project?.name||n.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 n of e){const i=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return n!==e[0]&&console.log(`listProjects answered on legacy path ${n}`),this.parseProjectsResponse(await i.json());if(s=i.status,r=await i.text(),console.warn(`listProjects via ${n} returned ${s}: ${r}`),i.status===401||i.status===403)throw new Error(iv(i.status,r));if(i.status!==404)throw new Error(`List projects failed: ${i.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 i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let n=s.message||`HTTP ${t.status}`,i=new Map;if(s.errors)i=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&&(i=new Map(Object.entries(s)),n=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:n,errorMap:i}}let r={};if(s.value)try{r=typeof s.value=="string"?JSON.parse(s.value):s.value}catch(n){console.warn("Ignoring malformed push response value:",n)}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 ov(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 Co=new Map;function Gd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hn(t){Co.delete(Gd(t))}async function wa(t,e,s,r,n=""){const i=xg(e,s);if(i.length===0)return{remoteFiles:s,syncFileMap:e,unverified:[]};const o=em(i,n),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 ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(ym,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:i,verification:a,stream:!0})}),c=await sm(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 Hn(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:s,syncFileMap:kg(e,i),unverified:l}}async function ba(t,e={}){const s=Gd(t);let r=Co.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=Cd(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.`);Co.set(s,r)}const n=await pm(r.pubspecYaml,e),i=Jg(r.pubspecYaml,n.overrides),o=Kg(i.yaml,n.additions);return n.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${n.additions[a]||"any"}`).join(", "),n.sdk.dartSdkFloor?`(resolved for Dart ${n.sdk.dartSdkFloor})`:""),n.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:i.overridden,warnings:n.warnings,remoteFiles:r.files}}function av(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 n=t.content.match(/print\s*\(/g);n&&n.length>3&&s.push(`Code contains ${n.length} print statements. Consider removing debug prints before committing.`);const i=Wg(t.content);if(i&&e.push(`FlutterFlow cannot format this code - ${i}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=wd(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=`${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:n}=e,i=Dg(t);let o=n||r;if(s==="CustomFunction")o="custom_functions.dart";else if(s==="CustomWidget"){const u=wd(i)[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(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function lv(t){const e={};for(const s of ra(t))e[s]="";return e}function cv(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 uv(t,e,s,r=new Set,n=""){const i=[],o=zd.test(e),a=qd.test(e);return s===U.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:i.length===0,errors:i}}function Wn(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(n=>Tn(n.content||"")));for(const[n,i]of t.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${n} is empty`),i.content&&i.content.length>1e5&&s.push(`File ${n} is very large (>100KB)`),n.endsWith(".dart")){const o=uv(n,i.content,i.type,r,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${n}: ${a}`))}if(n==="pubspec.yaml"){const o=Cd(i.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 dv(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:n={},artifactName:i=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(!Bn(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||ov(e,t),h=Vd(e,d);c.set(e,{artifactName:i,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Wn(c);if(!p.valid)throw new Error(`Validation failed: -${p.errors.join(` -`)}`);const f=await ba(u,n),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${i} 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 w=await Ea(E),I={project_id:a,zipped_custom_code:w,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),Hn(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 hv(t,e={}){const{artifactType:s,artifactName:r,fileName:n,pipelineResult:i}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(V.PREPARING);const o=Kd(t,{artifactType:s,artifactName:r,fileName:n}),a=lv(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(!Bn(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=Wn(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 w=await Ea(E),I={project_id:u,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...cv(o,i),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 pv(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 n=Wn(r);if(!n.valid)throw new Error(`File validation failed: -${n.errors.join(` -`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Zs||await Ee("flutterflow_project_id");if(!i)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(!Bn(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=fr(),l=new gr(i,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),Hn(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),w=new Error(E);throw w.errorMap=_.errorMap,w}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 fv(t,e=[]){const s=Qo("architect");try{return await In("architect",Td,Mf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function zn(t,e,s=[]){const r=Lf(t),n=Qo("generator",y.bundleSpec);try{return await In("generator",e,r,n,s)}catch(i){if(i.isModelArmor)throw i;if(e!==Fi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await In("generator",Fi,r,n,s)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Fi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function qn(t,e=null){const s={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await In("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 Fo(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"),Fo(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Fo(t,"completed"))}function gv(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 mv(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 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 n=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};n&&(n.textContent=i[t]||"Active Workflow Stage")}function vv(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{const n=e.closest(".code-container")?.querySelector(".copy-btn");n&&(n.classList.add("copied"),n.innerHTML=' Copied!',setTimeout(()=>{n.classList.remove("copied"),n.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Td)}`),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(Nd)}`)}async function _v(){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."});Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(r,t),jn();const n=document.getElementById("step2-output"),i=ws(y.step2Result);n.textContent=i,n.dataset.raw=i,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=On(y.step3Result);Jn(i,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"}),Zt()}}async function xa(t,e,s){const r=`${Je}/connectFeedback`,n={type:t,code:e,input:s};try{const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function yv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function wv(){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 n=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});ah(),Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(n,s),jn();const i=document.getElementById("step2-output"),o=ws(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=On(y.step3Result);Jn(o,l),t&&(t.value="")}catch(n){console.error("Fix from errors failed:",n),$t(),ue(Sa(n,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.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 jv())return;await Nv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,sv(),r.disabled=!0,r.innerHTML=` - - - Running...`,Po(s);try{Yt();const n=document.getElementById("ready-state");n&&n.classList.add("hidden");const i=document.getElementById("paywall-exhausted");i&&i.classList.add("hidden"),Kn(),ze(1),nt(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await fv(t,o),rv();const a=document.getElementById("step1-output"),l=ws(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),nt(2),ve(2,!0),y.step2Result=await zn(y.step1Result,s,o),jn();const u=document.getElementById("step2-output"),c=ws(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=On(y.step3Result);Jn(c,h)}catch(n){if(console.error("Pipeline failed:",n),$t(),n.isUsageLimit){const{count:c}=Vn();Aa(c,Pa(),{openModal:!0});return}n.message,$o(document.getElementById("code-generator-model").value);const o=gm(n,{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(n.isModelArmor)u.innerHTML=``;else{let c=n.message;n.message.includes("image input")?c=`This model doesn't support image input. Please use ${zt(lr)} for image-based requests or remove image references from your prompt.`:(n.message.includes("Load failed")||n.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

    -
    -
    `}Fo(o,"error")}finally{y.isRunning=!1,r.disabled=!1,r.innerHTML=` - - - Run Pipeline`,Zt()}}function bv(){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],Ao()):s==="2"&&(document.getElementById("code-generator-model").value=e[1],Ao())}async function Ev(){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 Sv();return}const{artifactType:r,artifactName:n,fileName:i}=Wd(),o=Kd(t,{artifactType:r,artifactName:n,fileName:i}),a=av(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}eh(o,a,null,null)}async function Sv(){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=wg(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}])),n=Wn(r),i={canProceed:n.valid&&s.errors.length===0,issues:[...s.errors,...n.errors],warnings:[...s.warnings,...n.warnings]};if(!i.canProceed){ue(`Bundle validation failed: ${i.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,i,s.dependencies,s)}function xv(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[n,i]of e.entries()){const o=Ed(i);s+=`
    • - ${j(n)}: ${j(o)} -
    • `}s+="
    "}s+="
    ",s+=`
    - -
    `;const r=document.getElementById("step3-output");r&&(r.innerHTML=s,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{kv(t.error,e)}))}async function kv(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 n=`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);n+=`File: ${c} -Error: ${h} - -`}else n+=`${t} -`;const i=fd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:n});Kn(),nt(2),ze(2),ve(2,!0),y.step2Result=await zn(i,s),jn();const o=document.getElementById("step2-output"),a=ws(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),nt(3),ve(3,!0),y.step3Result=await qn(y.step2Result,y.step1Result),Un();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=On(y.step3Result);Jn(a,u)}catch(n){console.error("Regeneration failed:",n),$t(),ue(Sa(n,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Zt()}}async function Iv(){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 Cv(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 Fv(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 Pv(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=bs({isLoading:!0}),localStorage.setItem(_n,JSON.stringify({email:t,sessionToken:e})),r&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=bs({isResolved:!0}),localStorage.removeItem(_n),localStorage.removeItem(wn)}function Jd(){try{const t=localStorage.getItem(_n);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(_n),{email:null,sessionToken:null}}}async function Av(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Fv(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 n=await Pv(r);n?bc(n.email,n.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function $v(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Rv(){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 Cv(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(i){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:i}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Tv(){ka(),$a(),Ca(),Gn()}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 n=document.getElementById("auth-user-email");n&&(n.textContent=G.email||""),zr(),Gn()}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(Sm,{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 n=await r.json();if(Ge.userId=n.user_id,Ge.token=n.identity_token||null,Ge.status=n.status,Ge.resolved=!0,sessionStorage.setItem(bm,n.user_id),Ge.token&&sessionStorage.setItem(Em,Ge.token),n.usage_count!==void 0){const i=At(),a=(n.usage_month||i)===i?n.usage_count:0;localStorage.setItem(Gt,JSON.stringify({count:a,month:i})),Xs()}console.log(`Identity resolved: ${n.status} (${n.user_id.slice(0,8)}...) usage: ${n.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Pi=null;function Nv(t=5e3){return Ge.resolved?Promise.resolve():(Pi||(Pi=Yd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Pi,new Promise(e=>setTimeout(e,t))]))}function Zd(){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 Vn(){const t=Zd();return t.month!==At()?{count:0,month:At()}:t}function Mv(){const e={count:Vn().count+1,month:At()};return localStorage.setItem(Gt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Jt(){return!!fe.isResolved}function Lv(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(yn,e)?e:null}function Ov(t){return t&&Object.entries(Ad).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Dv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Bv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=Dv(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||{},n=$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),i=$r(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=Lv($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=xm.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Ov(n)||(a||l?"professional":"free");return bs({tier:u,status:i,periodEnd:$r(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function Pa(){return yn[fe.tier]??yn.free}async function jv(){if(G.isVerified&&(!Jt()||Fa())&&(await Xd({force:!0}),Gn()),G.isVerified&&!Jt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Vn(),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 Ai(){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 n=document.getElementById("ready-state");n&&n.classList.add("hidden");const i=document.getElementById("preview-frame-container");i&&(i.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Cn();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&&Cn()}function $o(t){return fe.tier==="free"&&jr.includes(t)?lr:t}function Uv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,n=!(G.isVerified&&!Jt())&&s==="free";Array.from(e.options).forEach(o=>{const a=zt(o.value),l=jr.includes(o.value);o.textContent=l&&n?`${a} (PRO)`:a,o.disabled=!1}),n&&jr.includes(e.value)&&(e.value=lr),e.disabled=!1,dc.has(e)||(e.addEventListener("change",()=>{Jt()&&fe.tier==="free"&&jr.includes(e.value)&&(e.value=lr,Cn()),Po(e.value),Rd()}),dc.add(e));let i=document.getElementById("model-selector-free-notice");n?(i||(i=document.createElement("p"),i.id="model-selector-free-notice",i.className="text-xs text-gray-400 mt-1",t.appendChild(i)),i.innerHTML='Free plan — Gemini only. '):i&&i.remove(),Po(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(),Ai();return}if(G.isVerified&&!Jt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",zr(),Ai();return}const{count:e}=Vn(),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):Ai()}function zr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Zd(),s=e.month===At()?e.count??0:0,r=yn.free;t.textContent=`${s} / ${r} generations used`}async function Xd(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=bs({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(wn);if(!e&&s)try{const{data:r,email:n,ts:i,version:o}=JSON.parse(s);if(o===hc&&n===G.email&&Date.now()-i<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 n=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(n.error){if(["unauthorized","invalid session","expired session"].some(o=>String(n.error).toLowerCase().includes(o))){ka(),Ca();return}fe=bs({isResolved:!1,error:n.error});return}fe=Bv(n),localStorage.setItem(wn,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(wn)}async function Hv(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:n}=r;window.location.href=n}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 Wv(){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 In(t,e,s,r={},n=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(wm,{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:n,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(Gt,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(Gt,JSON.stringify({count:c.usage_count,month:p})),Xs())}else Mv(),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 zv(){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 Gn(){const t=G.isVerified&&!!G.email,e=fe.tier,s=t&&Fa(),r=!t||Jt(),n=document.getElementById("subscription-tier-badge");if(n){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"};n.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",n.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 i=document.getElementById("upgrade-prompt");i&&i.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"),qv(r?e:null),Uv(),Rd(),Xs()}function qv(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(([n,{btnId:i,defaultText:o}])=>{const a=document.getElementById(i);a&&(n===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 Ro(){const t=Md(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),n=document.getElementById("power-price-note");e&&(e.textContent=fc(pc.professional,t)),s&&(s.textContent=fc(pc.power,t));const i="billed monthly";r&&(r.textContent=i),n&&(n.textContent=i)}function Cn(){Ro();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Tm().then(()=>Ro())}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-"}),Vv(),await Av(),zv(),await Xd(),Gn(),Ro(),await nv(),Qm();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(),Dn())}),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(Fn,1e3))})});function Vv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Gv(){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"),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",Yt),document.removeEventListener("keydown",Yt),Ud()}let Qs=null;async function Kv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++yc,s=()=>e===yc,r=await Ee("flutterflow"),n=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)}),n&&(t.value=n)}catch(i){if(!s())return;console.error("Failed to load projects for deploy:",i),t.innerHTML=''}}}function Jv(){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,Kv();const n=document.getElementById("confirm-deps-list"),i=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(n.innerHTML=Object.entries(s).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
  • • ${bt(u)}: ${d}
  • `}).join(""),i.classList.remove("hidden")):i.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(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 Yv(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 i of s){const o=document.getElementById(i);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const n=document.getElementById("success-warnings-list");n&&(n.innerHTML="")}function To(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},s=t.metadata?.fileName||"",r=t.metadata?.projectId||"",n=t.metadata?.artifactType||"",i=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",n),e("success-time",i),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 No(t){Fn(),xv(t)}function Zv(){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}},Xv=[{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=Xv.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),i=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&i.push(Qv(e)),rh(this.phaseId==="done"?100:s,t.message,i.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 Qv(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 Fn(){be.stop()}function rh(t,e,s,r=null){const n=document.getElementById("commit-progress-bar"),i=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");n&&(n.style.width=`${Math.round(t*10)/10}%`),i&&(i.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 e_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function t_(){if(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Jv(),th(),sh({withProvisioning:e_(t)}),t.bundlePlan){const o=await pv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Fn(),o.success?To(o):No(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:n}=Wd(),i=await hv(e.content,{artifactType:s,artifactName:r,fileName:n,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Fn(),i.success?To(i):No(i)}window.runThinkingPipeline=Ao;window.toggleStep=mv;window.toggleSection=gv;window.selectWorkflowStep=ze;window.copyCode=vv;window.retryWithDifferentModel=bv;window.openApiKeysModal=ha;window.closeApiKeysModal=Bd;window.closeWalkthroughModal=Gm;window.openWalkthroughModal=Vm;window.advanceWalkthrough=pa;window.commitToFlutterFlow=dv;function s_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function r_(){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=r_;window.handlePromptImageSelect=$m;window.removePromptImage=Rm;window.saveApiKeys=Ym;window.clearAllApiKeys=Zm;window.toggleKeyVisibility=tv;window.handleWelcomeVideoEnd=Gv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=Ev;window.updateFlutterFlowCredentialStatus=Iv;window.closeCommitConfirmModal=th;window.closeCommitSuccessModal=Yv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=Zv;window.confirmCommitToFlutterFlow=t_;window.runRefinement=_v;window.regenerateFromPastedErrors=wv;window.clearErrorInput=yv;window.setFlutterFlowEndpoint=qm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=$v;window.handleMagicLinkRequest=Rv;window.handleSignOut=Tv;window.startCheckout=Hv;window.openCustomerPortal=Wv;window.openPricingModal=Cn;window.closePricingModal=Qd;let hs=null,nh=null;const xc=120;function Kn(){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"),nh=Date.now();for(let r=1;r<=3;r++){const n=document.getElementById(`pdot-${r}`);n&&(n.className="progress-dot")}nt(1),n_()}function nt(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"),n=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),n&&(n.textContent=s[t]||s[1]);for(let i=1;i<=3;i++){const o=document.getElementById(`pdot-${i}`);o&&(i{const t=(Date.now()-nh)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/xc*100,n=Math.min(95,r*(1-Math.exp(-t/(xc*.6)))*1.2);s&&(s.style.width=`${n}%`)},250)}function $t(){hs&&(clearInterval(hs),hs=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 Ss(t,e=""){const s={pass:'',warning:'',fail:'',info:''};return``}function ih(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function i_(){return Lg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function o_(t){return` -
    - ${Ss(t.severity)} -
    -
    ${j(t.message)}
    - ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} - ${j(t.source)} -
    -
    - `}function a_(t){return` -
  • -
    - ${j(t.title)} - ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

    `:""} -
    -
  • - `}function l_(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,n=r==null?"neutral":r>=80?"pass":r>=60?"warning":"fail",i=r==null?"":r>=80?"Strong":r>=60?"Needs work":"High risk",o=t.findings.length?` -
      - ${t.findings.map(l=>` -
    • - ${Ss(l.severity)} - - ${j(l.message)} - ${l.suggestion?`${j(l.suggestion)}`:""} - -
    • - `).join("")} -
    - `:"",a=t.manualSteps.length?` -
    -

    ${Ss("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 c_(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(o_).join(""):`
    ${Ss(s.icon)} ${j(s.message)}
    `,n=e.dependencies?.length?e.dependencies.map(l=>` -
  • ${j(l.name)}${l.version?` ${j(l.version)}`:""}${l.reason?`

    ${j(l.reason)}

    `:""}
  • - `).join(""):'
  • No external packages
  • ',i=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` -
    -
    - ${Ss(e.status)} ${j(ih(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(a_).join("")}
    -
    - `:""} -
    - File details -
    -
    -

    Dependencies

    -
      ${n}
    -
    -
    -

    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

    -
    ${i}
    -
    -
    -

    Relationships

    -
      ${a}
    -
    -
    - `}function u_(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),n=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){n&&(n.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(n){const i=t.artifacts.length;n.textContent=`${i} ${i===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(i=>` - - `).join(""),r.onclick=i=>{const o=i.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"),n=document.getElementById("artifact-results-split"),i=i_(),o=ma();if(l_(i),u_(i),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=c_(i)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),n&&n.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Jn(t,e){y.selectedArtifactId||(y.selectedArtifactId=gn(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),Ra(),Zt();const r=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),n&&(n.className="feedback-btn")}function oh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function d_(){y.resultsViewMode="summary",Ra()}function h_(){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 p_(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")),xa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function f_(){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=h_;window.selectArtifact=oh;window.selectResultsSummary=d_;window.submitResultsFeedback=p_;window.showErrorInputPanel=f_;window.hideErrorInputPanel=ah; diff --git a/dist/assets/index-DHpvl4SC.js b/dist/assets/index-DHpvl4SC.js new file mode 100644 index 0000000..b632906 --- /dev/null +++ b/dist/assets/index-DHpvl4SC.js @@ -0,0 +1,320 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();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,$i=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,dh=we?.CompressionStream,Pe=ke?.userAgent;function Ic(){return!(!v||v.navigator.onLine===!1)}var Fn=typeof globalThis<"u"?globalThis:v;Fn&&typeof self>"u"&&(Fn.self=Fn),Fn&&typeof File>"u"&&(Fn.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(t,e,n,s,r,i,o){try{var a=t[i](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(s,r)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(s,r){var i=t.apply(e,n);function o(l){La(i,s,r,o,a,"next",l)}function a(l){La(i,s,r,o,a,"throw",l)}o(void 0)}))}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var s in n)({}).hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},b.apply(null,arguments)}function Cc(t,e){if(t==null)return{};var n={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(e.indexOf(s)!==-1)continue;n[s]=t[s]}return n}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 Pn,hh=["$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})({}),ph=["$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"],fh=["token"],Fc="NativeGzipValidationError",Ri=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",Es=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Fc,e},gh=(function(){var t=X((function*(e,n){18>e.size&&Es("too-short");var s=new Uint8Array(yield e.slice(0,10).arrayBuffer());Ri(s)&&s[2]===8||Es("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Pn)return Pn;Pn=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Pn[c]=d>>>0}return Pn})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Es("invalid-crc");var i=n.length>>>0;r.getUint32(4,!0)!==i&&Es("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function Ti(){return Ti=X((function*(t,e,n){e===void 0&&(e=!0);try{var s=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),i=r.writable.getWriter(),o=i.write(s).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield gh(l,s),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Ti.apply(this,arguments)}var mh=["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 n=t.toLowerCase();return mh.concat(e).some((s=>{var r=s.toLowerCase();return n.indexOf(r)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var $r=function(t){return t.trim()},Ni=function(t){return t.replace(/^\$/,"")};function Pc(t){var e,n=[];return(e=JSON.stringify(t,(function(s,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var Ac=Object.prototype,$c=Ac.hasOwnProperty,Rr=Ac.toString,L=Array.isArray||function(t){return Rr.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($c.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Rr.call(t)=="[object String]",Mi=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Rr.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Rr.call(t)==="[object Boolean]",vh=t=>t instanceof FormData,_h=t=>M(ph,t),yh=t=>M(fh,t);function Rc(t){return t===null||typeof t!="object"}function Ks(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Lo(t){return typeof Event<"u"&&Tc(t,Event)}function Tc(t,e){try{return t instanceof e}catch{return!1}}var wh=[!0,"true",1,"1","yes"],Zr=t=>M(wh,t),bh=[!1,"false",0,"0","no"];function st(t,e,n,s,r){return e>n&&(s.warn("min cannot be greater than max."),e=n),he(t)?t>n?(s.warn(" cannot be greater than max: "+n+". Using max value instead."),n):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: "+n+", fallback: "+r),st(r||n,e,n,s))}class Eh{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,n){var s=Math.floor((n-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 n,s=Date.now(),r=String(e),i=this.tt[r];return i?this.ot(i,s):this.tt[r]=i={tokens:this.it,lastAccess:s},i.tokens===0||(i.tokens--,i.tokens===0&&((n=this.et)==null||n.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Js="iOS",vt="Android",fn="Tablet",Nc=vt+" "+fn,Mc="iPad",Lc="Apple",Oc=Lc+" Watch",Vn="Safari",gn="BlackBerry",Dc="Samsung",Bc=Dc+"Browser",jc=Dc+" Internet",Vt="Chrome",Sh=Vt+" OS",Uc=Vt+" "+Js,Oo="Internet Explorer",Hc=Oo+" "+Oe,Do="Opera",xh=Do+" Mini",Bo="Edge",Wc="Microsoft "+Bo,dn="Firefox",zc=dn+" "+Js,ts="Nintendo",ns="PlayStation",hn="Xbox",qc=vt+" "+Oe,Vc=Oe+" "+Vn,Bn="Windows",Li=Bn+" Phone",za="Nokia",Oi="Ouya",Gc="Generic",kh=Gc+" "+Oe.toLowerCase(),Kc=Gc+" "+fn.toLowerCase(),Di="Konqueror",Jc="Oculus Browser",Ys="Vivaldi",Yc="Yandex",Zs="Whale",Bi="DuckDuckGo",Zc="Pale Moon",Xs="Waterfox",Gn="Brave",Xc="Google Search App",le="(\\d+(\\.\\d+)?)",Xr=new RegExp("Version/"+le),Ih=new RegExp(hn,"i"),Ch=new RegExp(ns+" \\w+","i"),Fh=new RegExp(ts+" \\w+","i"),jo=new RegExp(gn+"|PlayBook|BB10","i"),Ph={"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"},Qc=function(t,e,n,s){e=e||"";var r=(function(i){return i!=null&&i.brave?Gn:null})(n);return r||(s!=null&&s.detectGoogleSearchApp&&M(t,"GSA/")?Xc:M(t," OPR/")&&M(t,"Mini")?xh:M(t," OPR/")?Do:jo.test(t)?gn:M(t,"IE"+Oe)||M(t,"WPDesktop")?Hc:M(t,"OculusBrowser")?Jc:M(t,Bc)?jc:M(t,Bo)||M(t,"Edg/")?Wc:M(t,Ys+"/")?Ys:M(t,"YaBrowser/")?Yc:M(t,Zs+"/")?Zs:M(t,Bi+"/")||M(t,"Ddg/")?Bi:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?Uc:M(t,"CrMo")||M(t,Vt)?Vt:M(t,vt)&&M(t,Vn)?qc:M(t,"FxiOS")?zc:M(t.toLowerCase(),Di.toLowerCase())?Di:M(t,Gn+"/")?Gn:((i,o)=>o&&M(o,Lc)||(function(a){return M(a,Vn)&&!M(a,Vt)&&!M(a,vt)})(i))(t,e)?M(t,Oe)?Vc:Vn:M(t,"PaleMoon/")?Zc:M(t,Xs+"/")?Xs:M(t,dn)?dn:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?dn:"")},Ah={[Hc]:[new RegExp("rv:"+le)],[Wc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[Uc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Vn]:[Xr],[Vc]:[Xr],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[dn]:[new RegExp(dn+"\\/"+le)],[zc]:[new RegExp("FxiOS\\/"+le)],[Di]:[new RegExp("Konqueror[:/]?"+le,"i")],[gn]:[new RegExp(gn+" "+le),Xr],[qc]:[new RegExp("android\\s"+le,"i")],[jc]:[new RegExp(Bc+"\\/"+le)],[Jc]:[new RegExp("OculusBrowser\\/"+le)],[Ys]:[new RegExp(Ys+"\\/"+le)],[Yc]:[new RegExp("YaBrowser\\/"+le)],[Zs]:[new RegExp(Zs+"\\/"+le)],[Gn]:[new RegExp(Gn+"\\/"+le)],[Bi]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Zc]:[new RegExp("PaleMoon\\/"+le)],[Xs]:[new RegExp(Xs+"\\/"+le)],[Xc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},$h=function(t,e,n,s){var r=Qc(t,e,n,s),i=Ah[r];if(x(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(hn+"; "+hn+" (.*?)[);]","i"),t=>[hn,t&&t[1]||""]],[new RegExp(ts,"i"),[ts,""]],[new RegExp(ns,"i"),[ns,""]],[jo,[gn,""]],[new RegExp(Bn,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Li,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Bn+" "+Oe,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var s=Ph[n[1]]||"";return/arm/i.test(e)&&(s="RT"),[Bn,s]}return[Bn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Js,[t[3],t[4],t[5]||"0"].join(".")]:[Js,""]],[/(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/,[Sh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return Fh.test(t)?ts:Ch.test(t)?ns:Ih.test(t)?hn:new RegExp(Oi,"i").test(t)?Oi:new RegExp("("+Li+"|WPDesktop)","i").test(t)?Li:/iPad/.test(t)?Mc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Oc:jo.test(t)?gn:/(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:Nc:new RegExp("(pda|"+Oe+")","i").test(t)?kh:new RegExp(fn,"i").test(t)&&!new RegExp(fn+" pc","i").test(t)?Kc:""},Rh=/^[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(n=t)=="string"&&Rh.test(n)?t:e();var n}function Ct(t){return t&&t.split("#")[0]}function Uo(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Ka(t,e,n){return eu.apply(this,arguments)}function eu(){return(eu=X((function*(t,e,n){var s;try{return yield Promise.race([t,new Promise(((r,i)=>{s=Uo((()=>{try{n?.(),r()}catch(o){i(o)}}),e)}))])}finally{clearTimeout(s)}}))).apply(this,arguments)}var Th=t=>t instanceof Error,tu={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}},Nh=tu.info;function nu(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=>nu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Qs(t){var e=[];for(var n in t){var s=t[n];$e(s)||x(s)||e.push({key:n,value:nu(s)})}return e}function Mh(t,e){var n=tu[t.level||"info"]||Nh,s=n.text,r=n.number,i=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=b({},o,t.attributes||{}),l={timeUnixNano:i,observedTimeUnixNano:i,severityNumber:r,severityText:s,body:{stringValue:t.body},attributes:Qs(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,n){return b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function ru(t,e,n,s){return{resourceLogs:[{resource:{attributes:Qs(e)},scopeLogs:[{scope:{name:n,version:s},logRecords:t}]}]}}let Lh=class{constructor(t,e,n,s,r,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=s,this.ht=r,this.dt=i,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Mh(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;s=i}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 n=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var s=n.length,r=0;n.length>0&&s>r;){var i,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=ru(l.map((d=>d.record)),t.Lt(),(i=t.vt)!==null&&i!==void 0?i:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var n,s=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(ut.LogsQueue,r.slice(s)),yield e.dt()}))()}Lt(){return su(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(ut.LogsQueue,n),this.kt>n.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 n=e.flush().catch((()=>{}));t!==void 0?yield Ka(n,t):yield n}))()}flushWithTimeout(t){var e=this;return X((function*(){var n=e.flush();yield Ka(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Qr=[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,n,s){var r="";return s&&(r=Object.keys(s).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(s[i]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let Oh=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),s=n().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 n,s;try{n=e.attributes?b({},e.attributes):void 0,s=Ya(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(s);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(s,r)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Qr.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(r,i){for(var o=0;i.length>o;o++)if(i[o]>=r)return o;return i.length})(e,Qr)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;s=i}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 n=t.Wt,s=yield t._instance.Jt(t.Gt(e));if(n===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),n=(function(i,o,a){return b({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),s=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Qs(n)},scopeMetrics:[{scope:{name:s,version:r},metrics:e}]}]};var e,n,s,r}Xt(t){var e=Ja(Date.now()),n=new Map;for(var s of t.values()){var r,i=Ya(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o=b({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:[]},n.set(i,o));var a=Qs((r=s.attributes)!==null&&r!==void 0?r:{}),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:Qr})}return Array.from(n.values())}Yt(t){var e,n;for(var s of t){var r=s[0],i=s[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=i.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(r,i)}}};var Ss,Za,ei;function Dh(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return ei&&n.length===Za||(Za=n.length,ei=n.reduce(((s,r)=>{Ss||(Ss={});var i=Ss[r];if(i)s[i[0]]=i[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){s[u]=c,Ss[r]=[u,c];break}}return s}),{})),ei}}class Bh{constructor(e,n,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=n,this.modifiers=s}buildFromUnknown(e,n){n===void 0&&(n={});var s=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(s,n,0).apply(e),i=this.buildParsingContext(n),o=this.parseStacktrace(r,i);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var n=this;return X((function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&L(s.stacktrace.frames)&&(s.stacktrace.frames=yield n.applyModifiers(s.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var s,r;return e.cause!=null&&(s=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),b({},e,{cause:s,stack:r})}applyChunkIds(e,n){return e.map((s=>(s.filename&&n&&(s.chunk_id=n[s.filename]),s)))}applyCoercers(e,n){for(var s of this.coercers)if(s.match(e))return s.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return X((function*(){var s=e;for(var r of n.modifiers)s=yield r(s);return s}))()}convertToExceptionList(e,n){var s,r,i,o={type:e.type,value:e.value,mechanism:{type:(s=n.type)!==null&&s!==void 0?s:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Dh(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,s){s===void 0&&(s=0);var r=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(i,a)}};return b({},n,{syntheticException:s==0?n.syntheticException:void 0,mechanism:e,apply:i=>r(i,s),next:i=>r(i,s+1)})}}var mn="?";function ji(t,e,n,s,r){var i={platform:t,filename:e,function:n===""?mn:n,in_app:!0};return x(s)||(i.lineno=s),x(r)||(i.colno=r),i}var iu=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,s=t.indexOf("safari-web-extension")!==-1;return n||s?[t.indexOf("@")!==-1?t.split("@")[0]:mn,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},jh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Uh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Hh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Wh=(t,e)=>{var n=jh.exec(t);if(n)return ji(e,n[1],mn,+n[2],+n[3]);var s=Uh.exec(t);if(s){if(s[2]&&s[2].indexOf("eval")===0){var r=Hh.exec(s[2]);r&&(s[2]=r[1],s[3]=r[2],s[4]=r[3])}var i=iu(s[1]||mn,s[2]);return ji(e,i[1],i[0],s[3]?+s[3]:void 0,s[4]?+s[4]:void 0)}},zh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,qh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Vh=(t,e)=>{var n=zh.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var s=qh.exec(n[3]);s&&(n[1]=n[1]||"eval",n[3]=s[1],n[4]=s[2],n[5]="")}var r=n[3],i=n[1]||mn,o=iu(i,r);return ji(e,r=o[1],i=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},Xa=/\(error: (.*)\)/;class Gh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var s=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return Ks(e,"DOMException")}isDOMError(e){return Ks(e,"DOMError")}}class Kh{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Tc(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var 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 Jh{constructor(){}match(e){return!!Ks(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var s;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return b({},r,{stack:(s=this.pe(e))!==null&&s!==void 0?s:r.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var n=e;if(W(n.filename)&&n.filename.length>0){var s,r,i=(s=n.lineno)!==null&&s!==void 0?s:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error + at `+n.filename+":"+i+":"+o}}}var Yh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Zh{match(e){return typeof e=="string"}coerce(e,n){var s,r=this.getInfos(e),i=r[0],o=r[1];return{type:i??"Error",value:o??e,stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var n="Error",s=e,r=e.match(Yh);return r&&(n=r[1],s=r[2]),[n,s]}}var Xh=["fatal","error","warning","log","info","debug"];function ou(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var s=n.length;s>0;s--){var r=n.slice(0,s).join(", ");if(e>=r.length)return s===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class Qh{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var s,r,i=this.getErrorPropertyFromObject(e);return i?n.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(s=this.getStack(e))!==null&&s!==void 0?s:(r=n.syntheticException)==null?void 0:r.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 n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+ou(e)}isSeverityLevel(e){return W(e)&&!Mi(e)&&Xh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var s=e[n];if(Th(s))return s}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class ep{match(e){return Lo(e)}coerce(e,n){var s,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+ou(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class tp{match(e){return Rc(e)}coerce(e,n){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class np{match(e){return Ks(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Lo(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var s,r=this.getUnhandledRejectionReason(e);return Rc(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var er="$message",tr="$timestamp",sp=new Set([er,tr]),ti={enabled:!0,max_bytes:32768};function nr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ti.enabled,max_bytes:ip(t.max_bytes,ti.max_bytes)}:b({},ti)}class rp{constructor(e){this.Ke=[],this.Je=0,this.Ne=nr(e)}setConfig(e){this.Ne=nr(e),this.Xe()}add(e){var n=(function(r){var i;try{i=Pc(r)}catch{return}try{var o=JSON.parse(i);if(!te(o))return;var a=o,l=a[er],u=a[tr];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:i}}catch{return}})(e);if(n){var s=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var i=encodeURIComponent(r),o=0,a=0;i.length>a;a++)i[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);s>this.Ne.max_bytes||(this.Ke.push({step:n.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 ip(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var au=function(t,e){var n=(e===void 0?{}:e).debugEnabled,s={k(r){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||n)&&!x(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[r])?v.console[r].__rrweb_original__:v.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("debug",...i)},info(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("log",...i)},warn(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("warn",...i)},error(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("error",...i)},critical(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(r){s.error("You must initialize PostHog before calling "+r)},createLogger:(r,i)=>au(t+" "+r,i)};return s},k=au("[PostHog.js]"),ne=k.createLogger,op=ne("[ExternalScriptsLoader]"),ni=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return op.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var s=C?.querySelectorAll("script");if(s){for(var r,i=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;s.length>o;o++)if(r=i())return r.v}var a=()=>{if(!C)return n("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var s;if(t.config.strict_script_versioning)s=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;r=r+"&t="+Math.floor(Date.now()/i)*i}s=t.requestRouter.endpointFor("assets",r)}ni(t,s,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");ni(t,o,n)}},$.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var s=t.requestRouter.endpointFor("api",e);ni(t,s,n)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var lu="$people_distinct_id",ss="$device_id",si="$device_model",jn="__alias",Un="__timers",Ui="$autocapture_disabled_server_side",Hi="$heatmaps_enabled_server_side",Wi="$exception_capture_enabled_server_side",zi="$error_tracking_suppression_rules",qi="$error_tracking_capture_extension_exceptions",Vi="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gi="$web_vitals_allowed_metrics",qt="$session_recording_remote_config",cu="$replay_sample_rate",uu="$replay_override_sampling",du="$replay_override_linked_flag",hu="$replay_override_url_trigger",pu="$replay_override_event_trigger",cn="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Hn="$active_feature_flags",Ms="$early_access_features",Ki="$feature_flag_details",Wn="$feature_flag_payloads",Ls="$feature_flag_request_id",sr="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Ji="$surveys",rr="$surveys_loaded_at",Yi="$surveys_activated",Os="$surveys_activated_session",Ds="$surveys_activated_timestamps",zn="ph_product_tours",Wt="$flag_call_reported",qn="$flag_call_reported_session_id",Bs="$feature_flag_errors",Kn="$feature_flag_evaluated_at",He="$user_state",Zi="$client_session_props",Xi="$capture_rate_limit",Qi="$initial_campaign_params",eo="$initial_referrer_info",ir="$initial_person_info",or="$epp",xs="$posthog_cookieless",fu="$cookieless_mode",gu="$sdk_debug_extensions_init_method",mu="$sdk_debug_extensions_init_time_ms",vu="$sdk_debug_recording_script_not_loaded",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",en="anonymous",Tt="identified",to="identified_only",ar="visibilitychange",lr="beforeunload",on="$pageview",ri="$pageleave",ii="$identify",Qa="$groupidentify";function ks(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(vh(t))t.forEach(((s,r)=>e(s,r)));else for(var n in t)$c.call(t,n)&&e(t[n],n)}var ee=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),s=1;e>s;s++)n[s-1]=arguments[s];for(var r of n)for(var i in r)r[i]!==void 0&&(t[i]=r[i]);return t};function js(t){for(var e=Object.keys(t),n=e.length,s=new Array(n);n--;)s[n]=[e[n],t[e[n]]];return s}var el=function(t){try{return t()}catch{return}},ap=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),s=0;e>s;s++)n[s]=arguments[s];return t.apply(this,n)}catch(r){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(r)}}},Vo=function(t){var e={};return Z(t,(function(n,s){(W(n)&&n.length>0||he(n))&&(e[s]=n)})),e},lp=["herokuapp.com","vercel.app","netlify.app"];function cp(t){var e=t?.hostname;if(!W(e))return!1;var n=e.split(".").slice(-2).join(".");for(var s of lp)if(n===s)return!1;return!0}function re(t,e,n,s){var r=s??{},i=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:i!==void 0&&i,passive:o===void 0||o})}function no(t){return t.name==="ph_toolbar_internal"}var _u=t=>{if(C){try{for(var e=t+"=",n=C.cookie.split(";").filter((i=>i.length)),s=0;n.length>s;s++){for(var r=n[s];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class cr{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,s,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(s)||!Number.isInteger(r)||0>e||0>n||0>s||0>r||e>0xffffffffffff||n>4095||s>1073741823||r>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|n>>>8,i[7]=n,i[8]=128|s>>>24,i[9]=s>>>16,i[10]=s>>>8,i[11]=s,i[12]=r>>>24,i[13]=r>>>16,i[14]=r>>>8,i[15]=r,new cr(i)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new cr(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var s=this.bytes[n]-e.bytes[n];if(s!==0)return Math.sign(s)}return 0}}class up{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var n=this.generateOrAbort();if(x(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return cr.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 dp}}var tl,yu=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&&(yu=t=>crypto.getRandomValues(t));class dp{nextUint32(){return this.R.length>this.O||(yu(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>hp().toString(),hp=()=>(tl||(tl=new up)).generate(),An="",pp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:_u,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,n,s,r){if(!C)return!1;try{var i="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),An)return An;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),E="dmn_chk_"+dt();!An&&_--;){var w=m.slice(_).join("."),I=E+"=1;domain=."+w+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",An=w)}return An})(c);if(!h){var p=(f=>{var g=f.match(pp);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,s);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),i="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; 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}}},oi=null,Q={N(){if(!$e(oi))return oi;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"),oi=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){Q.j(n)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},fp=[ss,"distinct_id",cn,zo,or,ir,He],Is={},gp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Is[t]||null,H:t=>Is[t]||null,F:(t,e)=>(Is[t]=e,!0),q(t){delete Is[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(n){ce.j(n)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class mp{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,n=e.token,s=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(s?s+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return Zr(e)?1:M(bh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==n){this.ni=n;var s=e==="localStorage"?pt:Q;s.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Zr(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=>Zr(e)))}}function wu(t,e){var n,s=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!Se(s))return e;try{var r=s(e);return W(r)&&r?r:e}catch(i){return k.error("Error in get_current_url, falling back to window.location.href",i),e}}var bu="__POSTHOG_TOOLBAR__",vp=1,_p=3,yp=11;function nl(t){return t instanceof Element&&(t.id===bu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===vp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Eu(t){return!!t&&t.nodeType===_p}function Su(t){return!!t&&t.nodeType===yp&&Ft(t.host)}var xu=1e3;function Go(t){return t?$r(t).split(/\s+/):[]}function sl(t,e){var n=(function(s){var r,i=v==null||(r=v.location)==null?void 0:r.href;return x(i)?void 0:wu(s,i)})(e);return!!(n&&t&&t.some((s=>n.match(s))))}function ur(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 ku(t){return D(t)?null:$r(t).split(/(\s+)/).filter((e=>Jn(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rs(t){var e="";return ro(t)&&!Pu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;Eu(n)&&n.textContent&&(e+=(s=ku(n.textContent))!==null&&s!==void 0?s:"")})),$r(e)}function ai(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 n,s=function(i){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}})(i,o))))return{v:!0}};for(var r of t)if(n=s(r))return n.v;return!1}function Iu(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var wp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Cu=["next","previous","prev",">","<"],bp=[...Cu,"+","-","−","–"],rl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],Ep=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var n,s,r,i,o;if(Ke(e)?(n=!!e&&il,s=void 0,r=!1):(n=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:il,s=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(Ep,(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=Fu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Cu;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=>rl(h,f)||rl(p,f)))}))})(s,a.map((l=>{var u;return{safeText:rs(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,n)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Fu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,s=[t],r=t;r.parentNode&&!Me(r,"body");)if(Su(r.parentNode))s.push(r.parentNode.host),r=r.parentNode.host;else{var i=Iu(r);if(!i)break;if(e||Ko.indexOf(i.tagName.toLowerCase())>-1)n=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}s.push(i),r=i}return{parentIsUsefulElement:n,targetElementList:s}};function ro(t){for(var e=new Set,n=0,s=t;s.parentNode&&!Me(s,"body");s=s.parentNode){if(n++>=xu||e.has(s))return!1;e.add(s);var r=ur(s);if(M(r,"ph-sensitive")||M(r,"ph-no-capture"))return!1}if(M(ur(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 Pu(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,Sp=[16,15,14,13],xp=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 kp(t){for(var e=0,n=!1,s=t.length-1;s>=0;s--){var r=t.charCodeAt(s)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Jn(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=$r(t);var n=e?al.test((t||"").replace(/[- ]/g,"")):(function(r){var i;for(ll.lastIndex=0;i=ll.exec(r);){var o=i[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Sp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&kp(d))return!0}}}return!1})(t);if(n)return!1;var s=e?xp.test(t):(function(r){var i;for(cl.lastIndex=0;i=cl.exec(r);){var o=i[1],a=i[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=rs(t);return Jn(e=(e+" "+Au(t)).trim())?e:""}function Au(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;if(n&&((s=n.tagName)==null?void 0:s.toLowerCase())==="span")try{var r=rs(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+Au(n)).trim())}catch(i){k.error("[AutoCapture]",i)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Ip(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var Cs=ne("[Dead Clicks]"),Cp=()=>!0,Fp=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(Ho)),s=t.instance.config.capture_dead_clicks;return Ke(s)?s:!!te(s)||n};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,s){this.instance=e,this.isEnabled=n,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[Ho]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,s;(n=$.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Cs.error("failed to load script",r):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(C),Cs.info("starting...")}}else Cs.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Cs.info("stopping..."))}}var li=ne("[SegmentIntegration]"),$u="posthog-js";function Ru(t,e){var n=e===void 0?{}:e,s=n.organization,r=n.projectId,i=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,E=((d=c.exception)==null?void 0:d.values)||[],w=E.map((F=>b({},F,{stacktrace:F.stacktrace?b({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>b({},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:w,$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 s&&r&&(I.$sentry_url=(i||"https://sentry.io/organizations/")+s+"/issues/?project="+r+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Pp{constructor(e,n,s,r,i,o){this.name=$u,this.setupOnce=function(a){a(Ru(e,{organization:n,projectId:s,prefix:r,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(n,s,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var s,r=this.vi(e,n);return this.ui={pathname:(s=v?.location.pathname)!==null&&s!==void 0?s:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var s=this.ui;if(!s)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:s.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.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,g=u>1?st(d/u,0,1,k):1;r=ee(r,{$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 s.pathname&&(r.$prev_pageview_pathname=s.pathname),s.timestamp&&(r.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),r}}var ci=["flags","surveys"],Ap={[lu]:{exposure:"hidden"},[jn]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Un]:{exposure:"hidden"},[Ui]:{exposure:"event"},[Hi]:{exposure:"hidden"},[Wi]:{exposure:"event"},[zi]:{exposure:"hidden"},[qi]:{exposure:"event"},[Vi]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gi]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cn]:{exposure:"hidden"},[zo]:{exposure:"event"},[cu]:{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"},[Hn]:{exposure:"hidden",storageGroup:"flags"},[Ms]:{exposure:"hidden"},[Ki]:{exposure:"hidden",storageGroup:"flags"},[Wn]:{exposure:"hidden",storageGroup:"flags"},[Ls]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[sr]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"surveys"},[rr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yi]:{exposure:"event"},[Os]:{exposure:"hidden"},[Ds]:{exposure:"hidden"},[zn]:{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"},[qn]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Zi]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[ir]:{exposure:"hidden"},[or]:{exposure:"hidden"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[pu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},[vu]:{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"}},$p=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ap[t];if(e)return e;for(var n of $p){var s=n[1];if(t.indexOf(n[0])===0)return s}},un=(t,e)=>{try{return JSON.stringify(t,((n,s)=>typeof s=="bigint"?s.toString():s),e)}catch{return Pc(t)}},dr=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},vn=function(t,e){for(var n,s=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;s.length>r;r++){var i=s[r].split("=");if(i[0]===e){n=i;break}}if(!L(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},is=function(t,e,n){if(!t||!e||!e.length)return t;for(var s=t.split("#"),r=s[1],i=(s[0]||"").split("?"),o=i[1],a=i[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),r!=null&&(h+="#"+r),h},hr=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Tu=(t,e)=>t>=e&&Ic(),Nu=(t,e,n,s)=>{if(t===0){if(Ic()){var r=e+1;return r===n&&s(),r}return e}return 0},Fs="https?://(.*)",_n=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Rp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._n],os="",Tp=["li_fat_id"];function Mu(t,e,n){if(!C)return{};var s,r=e?[..._n,...n||[]]:[],i=Lu(is(C.URL,r,os),t),o=(s={},Z(Tp,(function(a){var l=_u(a);s[a]=l||null})),s);return ee(o,i)}function Lu(t,e){var n=Rp.concat(e||[]),s={};return Z(n,(function(r){var i=vn(t,r);s[r]=i||null})),s}function Ou(t){var e=(function(i){return i?i.search(Fs+"google.([^/?]*)")===0?"google":i.search(Fs+"bing.com")===0?"bing":i.search(Fs+"yahoo.com")===0?"yahoo":i.search(Fs+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",s={};if(!$e(e)){s.$search_engine=e;var r=C?vn(C.referrer,n):"";r.length&&(s.ph_keyword=r)}return s}function gl(){return navigator.language||navigator.userLanguage}var pr="$direct";function Du(){return C?.referrer||pr}function Bu(t,e,n){n===void 0&&(n=!1);var s=t?[..._n,...e||[]]:[],r=n?Ct(se?.href):se?.href,i=r?.substring(0,1e3);return{r:Du().substring(0,1e3),u:i?is(i,s,os):void 0}}function ju(t,e){var n;e===void 0&&(e=!1);var s=t.r,r=t.u,i=e?Ct(r):r,o={$referrer:s,$referring_domain:s==null?void 0:s==pr?pr:(n=dr(s))==null?void 0:n.host};if(i){o.$current_url=i;var a=dr(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Lu(i);ee(o,l)}if(s){var u=Ou(s);ee(o,u)}return o}function Uu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Np(){try{return new Date().getTimezoneOffset()}catch{return}}var Mp={flags:Kn,surveys:rr},Lp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],tn="main";class ui{constructor(e,n,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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.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,b({},this.props)),this.update_config(e,e,n),this.save(),v){var r=()=>this.flush();re(v,"beforeunload",r,{capture:!1}),re(v,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){Lp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,s=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...fp,...o];return b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$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),r=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(n=Q,r=!0):i==="localstorage+cookie"&&s.N()?(n=s,r=!0):i==="sessionstorage"&&ce.N()?n=ce:i==="memory"?n=gp:i==="cookie"?n=pt:s.N()?(n=s,r=!0):n=pt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((n,s)=>{var r=Mt(s);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[s]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of ci){var n=Q.H(this.Si(e));if(n&&!mt(n)){var s=this.Mi(e);s.persisted=!0,this.Ti(e)||(s.fingerprint=this.Ei(n,e)),this.Ii(e,n)||ee(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var s;return((s=Mt(n))==null?void 0:s.storageGroup)===e}))}Ii(e,n){var s=Mp[e];if(!s)return!1;var r=n[s],i=this.props[s];return he(r)&&he(i)&&i>r}refreshKey(e){var n;if(!this.xi){var s=this.pi?(n=Mt(e))==null?void 0:n.storageGroup:void 0,r=s?Q.H(this.Si(s)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(s){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[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,tn))}Li(){var e=this.Di(),n=e.main,s=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,tn),ci)){var i,o=s[r];(!mt(o)||(i=this.ci[r])!=null&&i.persisted)&&this.Oi(Q,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return Z(this.props,((s,r)=>{var i,o=(i=Mt(r))==null?void 0:i.storageGroup;o?n[o][r]=s:e[r]=s})),{main:e,groups:n}}Ei(e,n){if(n===tn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var s={};return Z(e,((r,i)=>{var o;s[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(s)}Oi(e,n,s,r){var i=this.Mi(r);if(r===tn||i.dirty||x(i.fingerprint)){var o;try{if((o=this.Ei(s,r))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(n,s,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,r!==tn&&(i.persisted=!0),x(o)||(i.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,s=n!==void 0&&n;if(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!s&&this.gi)for(var r of ci)Q.q(this.Si(r));s?delete this.ci[tn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,s){if(te(e)){x(n)&&(n="None"),this.$i=x(s)?this.ji:s;var r=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,i),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(te(e)){this.$i=x(n)?this.ji:n;var s=!1;if(Z(e,((r,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==r||te(r)||L(r))&&(this.Pi(i,r),s=!0)})),s)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,s=!1;for(var r of n)r in this.props&&(this.Ri(r),s=!0);s&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var n=Mu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Vo(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Ou(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Du(),$referring_domain:C!=null&&C.referrer&&((e=dr(C.referrer))==null?void 0:e.host)||pr},void 0)}set_initial_person_info(){this.props[Qi]||this.props[eo]||this.register_once({[ir]:Bu(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,Qi],(r=>{var i=this.props[r];i&&Z(i,(function(o,a){e["$initial_"+Ni(a)]=o}))}));var n=this.props[ir];if(n){var s=(function(r,i){i===void 0&&(i=!1);var o=ju(r,i),a={};return Z(o,(function(l,u){a["$initial_"+Ni(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);ee(e,s)}return e}safe_merge(e){return Z(this.props,(function(n,s){s in e||(e[s]=n)})),e}update_config(e,n,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 r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),i=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=i,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var s=this.props[Un]||{};s[e]=n,this.Pi(Un,s),this.save()}remove_event_timer(e){var n=this.props[Un]||{},s=n[e];return x(s)||(delete n[e],this.Pi(Un,n),this.save()),s}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var s;this.props[e]=n,(s=Mt(e))!=null&&s.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,s=(n=Mt(e))==null?void 0:n.storageGroup;s&&(this.Mi(s).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Ps(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&Se(n.then)&&n.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},$n={Activation:"events",Cancellation:"cancelEvents"},di={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hi={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},io={Popover:"popover",Inline:"inline"},Op={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=ne("[RateLimiter]");class Dp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var s=n.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach((r=>{vl.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void vl.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:s})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,s,r;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(s=this.instance.persistence)==null?void 0:s.get_property(Xi))!==null&&n!==void 0?n:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(r=this.instance.persistence)==null||r.set_property(Xi,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!L(n)||!n.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&se!=null&&se.pathname)return""+((e=se.origin)!==null&&e!==void 0?e:"")+se.pathname}Hi(e){var n,s,r=this.captureEventsBurstLimit,i=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(s=this.instance).get_session_id)==null?void 0:n.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 "+i+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return 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((n=>{this.Zi(n.json,n),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 n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||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(r){xt.error("Error applying remote config",r)}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(r){xt.error("Error loading feature flags",r)}}}var qe=Uint8Array,Ae=Uint16Array,yn=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]),Wu=function(t,e){for(var n=new Ae(31),s=0;31>s;++s)n[s]=e+=1<s;++s)for(var i=n[s];n[s+1]>i;++i)r[i]=i-n[s]<<5|s;return[n,r]},zu=Wu(Yo,2),oo=zu[1];zu[0][28]=258,oo[258]=28;for(var yl=Wu(Zo,0)[1],qu=new Ae(32768),ie=0;32768>ie;++ie){var nn=(43690&ie)>>>1|(21845&ie)<<1;qu[ie]=((65280&(nn=(61680&(nn=(52428&nn)>>>2|(13107&nn)<<2))>>>4|(3855&nn)<<4))>>>8|(255&nn)<<8)>>>1}var Yn=function(t,e,n){for(var s=t.length,r=0,i=new Ae(e);s>r;++r)++i[t[r]-1];var o,a=new Ae(e);for(r=0;e>r;++r)a[r]=a[r-1]+i[r-1]<<1;for(o=new Ae(s),r=0;s>r;++r)o[r]=qu[a[t[r]-1]++]>>>15-t[r];return o},Kt=new qe(288);for(ie=0;144>ie;++ie)Kt[ie]=8;for(ie=144;256>ie;++ie)Kt[ie]=9;for(ie=256;280>ie;++ie)Kt[ie]=7;for(ie=280;288>ie;++ie)Kt[ie]=8;var fr=new qe(32);for(ie=0;32>ie;++ie)fr[ie]=5;var Bp=Yn(Kt,9),jp=Yn(fr,5),Vu=function(t){return(t/8>>0)+(7&t&&1)},Gu=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var s=new(t instanceof Ae?Ae:t instanceof yn?yn:qe)(n-e);return s.set(t.subarray(e,n)),s},ot=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8},Rn=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8,t[s+2]|=n>>>16},pi=function(t,e){for(var n=[],s=0;t.length>s;++s)t[s]&&n.push({s,f:t[s]});var r=n.length,i=n.slice();if(!r)return[new qe(0),0];if(r==1){var o=new qe(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(F,P){return F.f-P.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=i[0].s;for(s=1;r>s;++s)i[s].s>h&&(h=i[s].s);var p=new Ae(h+1),f=ao(n[c-1],p,0);if(f>e){s=0;var g=0,m=f-e,_=1<s;++s){var E=i[s].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var w=i[s].s;e>p[w]?g-=1<=0&&g;--s){var I=i[s].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},ao=function(t,e,n){return t.s==-1?Math.max(ao(t.l,e,n+1),ao(t.r,e,n+1)):e[t.s]=n},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Ae(++e),s=0,r=t[0],i=1,o=function(l){n[s++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++i;else{if(!r&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(r),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(r);i=1,r=t[a]}return[n.subarray(0,s),e]},Tn=function(t,e){for(var n=0,s=0;e.length>s;++s)n+=t[s]*e[s];return n},lo=function(t,e,n){var s=n.length,r=Vu(e+2);t[r]=255&s,t[r+1]=s>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var i=0;s>i;++i)t[r+i+4]=n[i];return 8*(r+4+s)},bl=function(t,e,n,s,r,i,o,a,l,u,c){ot(e,c++,n),++r[256];for(var d=pi(r,15),h=d[0],p=d[1],f=pi(i,15),g=f[0],m=f[1],_=wl(h),E=_[0],w=_[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=pi(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=Tn(r,Kt)+Tn(i,fr)+o,Ie=Tn(r,h)+Tn(i,g)+o+14+3*T+Tn(B,R)+(2*B[16]+3*B[17]+7*B[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=Yn(h,p),J=h,z=Yn(g,m),H=g;var _e=Yn(R,N);for(ot(e,c,w-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=Bp,J=Kt,z=jp,H=fr;for(S=0;a>S;++S)if(s[S]>255){var me;Rn(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];Rn(e,c,z[ge]),c+=H[ge],ge>3&&(Rn(e,c,s[S]>>>5&8191),c+=Zo[ge])}else Rn(e,c,O[s[S]]),c+=J[s[S]];return Rn(e,c,O[256]),c+J[256]},Up=new yn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Hp=(function(){for(var t=new yn(256),e=0;256>e;++e){for(var n=e,s=9;--s;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),fi=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Wp(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Hp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),s=t.length;n.p(t);var r,i,o,a,l,u=(a=10+((r=e).filename&&r.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),w=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(w,I,d.subarray(F,P)):(w[F]=!0,I=lo(w,I,d.subarray(F,_)))}else{for(var B=Up[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,w,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,In=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,ys=Math.min(32767,F),ws=Math.min(258,Rt);ys>=Be&&--In&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;ws>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var bs=Math.min(Be,je-2),Xt=0;for(de=0;bs>de;++de){var Qt=F-Be+de+32768&32767,Cn=Qt-N[Qt]+32768&32767;Cn>Xt&&(Xt=Cn,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,w,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Gu(E,0,f+Vu(I)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&fi(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),fi(u,c-8,n.d()),fi(u,c-4,s),u}var zp=!!$i||!!Mo,Ku="text/plain",Us=!1,Ju=(t,e)=>{var n=t.split("#"),s=n[1],r=n[0].split("?"),i=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(s?"#"+s:"")},Tr=function(t,e,n){var s;n===void 0&&(n=!0);var r=t.split("?"),i=r[0],o=r[1],a=b({},e),l=(s=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=n&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&s!==void 0?s:[],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?i+"?"+l.join("&"):i},gi=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===xe.GZipJS){var s=Wp((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 Gu(c,0,d)})(un(e)),{mtime:0});return{contentType:Ku,body:s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),estimatedSize:s.byteLength}}if(n===xe.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(un(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:un(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=un(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Yu=t=>{var e,n,s=()=>t.transport==="sendBeacon"?{url:Tr(t.url,{compression:xe.Base64}),encodedBody:gi(b({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ju(t.url,"compression"),encodedBody:gi(b({},t,{compression:void 0,Ji:void 0}))};try{e=gi(t)}catch(r){if(Ua(t.compression,vn(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",r),s();throw r}return e&&Ua(t.compression,vn(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?Ri(new Uint8Array(n)):ArrayBuffer.isView(n)&&Ri(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Us=!0,s()):{url:t.url,encodedBody:e}},Zu=t=>{try{return Yu(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},qp=(function(){var t=X((function*(e){var n=un(e.data),s=yield(function(i,o,a){return Ti.apply(this,arguments)})(n,Y.DEBUG,{rethrow:!0});if(!s)return e;var r=yield s.arrayBuffer();return b({},e,{Ji:{contentType:Ku,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Vp=/Failed to fetch|NetworkError|Load failed/i,Xu=t=>t?.name==="TypeError"&&Vp.test(t?.message||""),Qu=t=>{var e=Zu(t);if(e){var n=e.url,s=e.encodedBody,r=s??{},i=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);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"||Xu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Mo(n,b({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)}}},co=t=>{try{var e,n=Yu(t),s=n.url,r=n.encodedBody,i=r??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.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:b({},t.data,{batch:h});return co(b({},t,{data:d(u.slice(0,c))})),void co(b({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Qu(b({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,n,s)=>{var r=s==="query"?e==="POST"?"sent_at":"_":void 0;return Tr(n===xe.GZipJS?Ju(t,"compression"):t,b({},r?{[r]:Date.now().toString()}:{},n===xe.GZipJS?{}:{compression:n}))},Hs=[];Mo&&Hs.push({transport:"fetch",method:Qu}),$i&&Hs.push({transport:"XHR",method(t){var e=Zu(t);if(e){var n=new $i,s=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=s??{},i=r.contentType,o=r.body;Z(t.headers,(function(a,l){n.setRequestHeader(l,a)})),i&&n.setRequestHeader("Content-Type",i),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ke!=null&&ke.sendBeacon&&Hs.push({transport:"sendBeacon",method:co});var uo=3e3;class Gp{constructor(e,n){this.Xi=!0,this.tr=[],this.er=st(n?.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():{},n=Object.values(e);[...n.filter((s=>s.url.indexOf("/e")===0)),...n.filter((s=>s.url.indexOf("/e")!==0))].map((s=>{this.lr(b({},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 n=this.ar(),s=function(){var i=n[r],o=new Date().getTime();i.data&&L(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var r in n)s()}}),this.er))}lr(e){try{this.ir(e)}catch(n){k.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(n=>{var s,r=n,i=(r?r.batchKey:null)||r.url;x(e[i])&&(e[i]=b({},r,{data:[]})),(s=e[i].data)==null||s.push(r.data)})),this.tr=[],e}}var Kp=["retriesPerformedSoFar"];class Jp{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},re(v,"online",this.vr),re(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,s=Cc(e,Kp);lt(n)&&(s.url=Tr(s.url,{retry_count:n})),this._instance._send_request(b({},s,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(b({retriesPerformedSoFar:n},s));r.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}s.callback==null||s.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+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))})(n),r=Date.now()+s;this.tr.push({retryAt:r,requestOptions:e});var i="Enqueued failed request for retry in "+s;navigator.onLine||(i+=" (Browser is offline)"),k.warn(i),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],s=this.tr.filter((i=>e>i.retryAt||(n.push(i),!1)));if(this.tr=n,s.length>0)for(var r of s)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(b({},n,{transport:"sendBeacon"}))}catch(s){k.error(s)}}this.tr=[]}}class Yp{constructor(e){this.yr=()=>{var n,s,r,i;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(s=this.br.maxScrollHeight)!==null&&s!==void 0?s:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){re(v,"scroll",this.yr,{capture:!0}),re(v,"scrollend",this.yr,{capture:!0}),re(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var n of e){var s=v?.document.querySelector(n);if(s)return s}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var s=this.scrollElement();return s&&s[n]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Zp=t=>Bu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,n,s,r){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Zi]:a})}},this._instance=e,this.Tr=n,this.Mr=s,this.Cr=r||Zp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zi]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?ju(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return Z(Vo(this.getSetOnceProps()),((n,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+Ni(s)]=n})),e}}class Xo{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((s=>s!==n))}}emit(e,n){for(var s of this.Er[e]||[])s(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Nn=ne("[SessionId]");class xl{on(e,n){return this.Ir.on(e,n)}constructor(e,n,s){var r;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=n||dt,this.Nr=s||dt;var i=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Nn.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+i+"_window_id",this.Br="ph_"+i+"_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((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Nn.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var n=this.Pr;return!$e(n)&&!$e(e)&&5e3>Math.abs(e-n)}Ur(e,n,s){var r=n!==this._sessionActivityTimestamp,i=!(e!==this.Dr||s!==this._sessionStartTimestamp);this._sessionStartTimestamp=s,this._sessionActivityTimestamp=n,this.Dr=e,i&&!r||i&&this.Zr(n)||(this.Pr=n,this.Mr.register({[cn]:[n,e,s]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(cn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[cn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=lt(e)?e:0,s=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,s)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[cn];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(lr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},re(v,lr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=n||new Date().getTime(),r=this.Jr(),i=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(s-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(s,a);if(f){(f=this.Xr(s))||Nn.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Nn.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=s,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Nn.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:s,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((w=>w(i,l,E))),{sessionId:i,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 ed=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&Wa(n,e))return!0;try{var s=t?.userAgentData;if(s!=null&&s.brands&&s.brands.some((r=>Wa(r?.brand,e))))return!0}catch{}return!!t.webdriver};function td(){return(td=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return W(n)&&n.length>0?n:void 0}catch(s){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",s)}}))).apply(this,arguments)}var gr=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function mi(t,e,n){return un({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var nd={exact:(t,e)=>e.some((n=>t.some((s=>n===s)))),is_not:(t,e)=>e.every((n=>t.every((s=>n!==s)))),regex:(t,e)=>e.some((n=>t.some((s=>gr(n,s))))),not_regex:(t,e)=>e.every((n=>t.every((s=>!gr(n,s))))),icontains:(t,e)=>e.map(As).some((n=>t.map(As).some((s=>n.includes(s))))),not_icontains:(t,e)=>e.map(As).every((n=>t.map(As).every((s=>!n.includes(s))))),gt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>s>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>st.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((n=>{var s=n[1],r=e?.[n[0]];if(x(r)||$e(r))return!1;var i=[String(r)],o=nd[s.operator];return!!o&&o(s.values,i)}))}var ho="custom",kl="i.posthog.com",Xp=/^\/static\//;class Qp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+kl,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":ho),this.en[this.apiHost]}rn(e){if(Xp.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var s=this.rn(n);if(s)return""+s+n}if(this.region===ho)return this.apiHost+n;var r=kl+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=ne("[Surveys]"),id="seenSurvey_",od=t=>{try{var e=(n=>((s,r)=>""+id+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){q.error("Failed to persist survey seen state",n)}},ef=[di.Popover,di.Widget,di.API],tf={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},nf=ne("[PostHog ExternalIntegrations]"),sf={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class rf{constructor(e){this._instance=e}ai(e,n){var s;(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,(r=>{if(r)return nf.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var i,o,a,l=s[0],u=s[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[l]||e.ai(sf[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((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class of{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return X((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var s=e.setup(n.nn);s&&(yield s)}catch(i){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',i),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&Se(n.then)&&n.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 af{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var s={};for(var r of e){var i=n?.get_property(r);x(i)||(s[r]=i)}return s}set(e,n){var s;(s=this._instance.persistence)==null||s.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var Il="extensionsRemoteConfig";class lf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new af(e),this.onEvent=n=>Ps(this.instance.on("eventCaptured",(s=>{try{n({event:s.event,properties:s.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Ps((()=>{}));var s=i=>{try{n(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(Il,s);return this.un&&s(this.un),Ps(r)},this.vn=new of(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(ss))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(ss);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,s,r,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=i?.sessionId)!==null&&n!==void 0?n:"",windowId:(s=i?.windowId)!==null&&s!==void 0?s:"",sessionStartTimestamp:(r=i?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,s){var r=this;return X((function*(){s?r.instance.capture(e,n,{timestamp:s.timestamp,uuid:s.uuid,$set:s.set,$set_once:s.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Ps(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,n){var s=this;return X((function*(){var r;n===void 0&&(n={});var i=s.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Tr(i,n.query):i,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.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 Zn={},vi=0,mr=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Mn="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",ad="Invalid value for property_denylist config: ",cf=["token","distinct_id",fu],an="posthog",ld=!zp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_i=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:cp(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:mr,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults: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(n){k.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:mr},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:bp,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},uf=[["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 n of uf){var s=n[0],r=n[1];x(t[s])||(e[r]=t[s])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(i.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?i.property_denylist=t.property_blacklist:L(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(ad+t.property_denylist)),i};class df{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,n){if(e){var s=this.sn.indexOf(e);s!==-1&&this.sn.splice(s,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new df,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=_i(),this.SentryIntegration=Pp,this.sentryIntegration=s=>(function(r,i){var o=Ru(r,i);return{name:$u,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 Yp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Dp(this),this.requestRouter=new Qp(this),this.consent=new mp(this),this.externalIntegrations=new rf(this);var n=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(o),i?.({})},set_once:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(s=>k.info('send "'+s?.event+'"',s)))}init(e,n,s){if(s&&s!==an){var r,i=(r=Zn[s])!==null&&r!==void 0?r:new Te;return i._init(e,n,s),Zn[s]=i,Zn[an][s]=i,i}return this._init(e,n,s)}_init(e,n,s){var r,i;n===void 0&&(n={});var o,a=W(e)?e.trim():"";if(!a)return k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=_i(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=_i(n.defaults),u=Pl(n),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=n.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new ui(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Gp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Jp(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:n,thisC:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=b({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=n.bootstrap)==null?void 0:i.distinctID)!==void 0){var m=n.bootstrap.distinctID,_=this.get_distinct_id(),E=this.persistence.get_property(He);if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===en)this.identify(m);else if(n.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 w=this.config.get_device_id(dt()),I=n.bootstrap.isIdentifiedID?w:m;this.persistence.set_property(He,n.bootstrap.isIdentifiedID?Tt:en),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:xs,$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,en)}return re(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.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||li.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()||(li.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(li.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,on),identify:N=>R(N,ii),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==mr&&(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 td.apply(this,arguments)})().then((P=>{P&&this.register({[si]:P})})).catch(mr),this}Fn(){var e,n,s,r,i,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(s=Te.__defaultExtensionClasses)==null?void 0:s.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var n,s,r,i,o,a,l,u=performance.now(),c=b({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(s=this.surveys)!==null&&s!==void 0?s:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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,Fp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var s=e.shift();if(s)try{s()}catch(i){k.error("Error initializing extension:",i)}}var r=Math.round(performance.now()-n);this.register_for_session({[gu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[mu]:r}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var s,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=M(r.supportedCompression,xe.GZipJS)?xe.GZipJS:M(r.supportedCompression,xe.Base64)?xe.Base64:void 0),(s=r.analytics)!=null&&s.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.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,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Hu(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()&&ks(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,s,r,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ri),(s=this.logs)==null||s.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ri,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ld?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=b({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var s,r,i,o=b({},n);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(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((E=>b({},E,{sent_at:_}))):b({},m,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Hs.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(r=(i=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:i.method)!==null&&r!==void 0?r:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){Xu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&dh&&typeof Promise<"u"&&!Us?qp(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Us=!0,void g(b({},o,{compression:void 0,url:El(n.url,n.method,void 0,n.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var E="name"in _?String(_.name):"";return Ha(_)||E===Fc})(m)&&(Us=!0),g(o)})):f(o)})(b({},e,{callback:n=>{var s,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(s=(r=this.config).on_request_error)==null||s.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){vi++;try{var n,s=[],r=[],i=[];ks(e,(a=>{if(a)if(L(n=a[0]))i.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&n==="alias"?s.push(a):L(a)&&n.indexOf("capture")!==-1&&Se(this[n])?i.push(a):r.push(a)}));var o=function(a,l){ks(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(r,this),o(i,this)}finally{vi--}}push(e){if(vi>0&&L(e)&&W(e[0])){var n=Te.prototype[e[0]];Se(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,s){var r,i,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){n!=null&&n.$current_url&&!W(n?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||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,n||{},h,p)};e===on&&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(sr)===!0;s?.$set&&!g&&(f.$set=s?.$set);var m=s?.$unset;m&&(f.$unset=m);var _,E,w,I=g?void 0:this.Vn(s?.$set_once,e!==Qa,e===ii);if(I&&(f.$set_once=I),s!=null&&s._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):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=[],ks(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),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return hh.forEach(z),O.forEach(z),J})(f.properties,cf)),e===ft.DISMISSED||e===ft.SENT){var F=n?.[hi.SURVEY_ID],P=n?.[hi.SURVEY_ITERATION];od({id:F,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",w="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(w="$survey_"+E+"/"+_.id+"/"+_.current_iteration),w)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Op.SHOWN){var B=n?.[ml.TOUR_TYPE];B&&(f.$set=b({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=b({},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=(r=s?._url)!==null&&r!==void 0?r: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",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new lf(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var s=this._n.indexOf(e);s!==-1&&this._n.splice(s,1)}}}calculateEventProperties(e,n,s,r,i){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return n;var o=i?void 0:this.persistence.remove_event_timer(e),a=b({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[fu]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mi(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?[..._n,...P||[]]:[],z=(function(ws){for(var je=0;qa.length>je;je++){var bs=qa[je],Xt=bs[1],Qt=bs[0].exec(ws),Cn=Qt&&(Se(Xt)?Xt(Qt,ws):Xt);if(Cn)return Cn}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,In,Be,Fe,ys=ee(Vo({$os:H,$os_version:oe,$browser:Qc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Mc||Fe===Nc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Kc?fn:Fe===ts||Fe===hn||Fe===ns||Fe===Oi?"Console":Fe===Oc?"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,(In=de?.screenHeight)!==null&&In!==void 0?In:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:fn:"Desktop"),$timezone:Uu(),$timezone_offset:Np()}),{$current_url:is(S?Ct(se?.href):se?.href,J,os),$host:se?.host,$pathname:se?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:$h(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&&(ys.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ys})(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(i,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!==on||i?e!==ri||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,r),a=ee(a,u),e===on&&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 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,b({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(ad+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var w=this.config.sanitize_properties;w&&(k.error(Fl),a=w(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,n,s){var r;if(n===void 0&&(n=!0),s===void 0&&(s=!1),!this.persistence||!this.Zn()||this.mn&&!s)return e;var i=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=ee({},i,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Fl),a=l(a,"$set_once")),n&&(this.mn=!0),mt(a)?void 0:a}register(e,n){var s;(s=this.persistence)==null||s.register(e,n)}register_once(e,n,s){var r;(r=this.persistence)==null||r.register_once(e,n,s)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((s=>this.yn.add(s))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var n=[];this.yn.forEach((s=>n.push(s))),n.length>0?ce.F(this.bn,n):ce.q(this.bn)}}getFeatureFlag(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var s,r;return(s=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&s!==void 0?s:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,s){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,s)}updateEarlyAccessFeatureEnrollment(e,n,s){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,s)}getEarlyAccessFeatures(e,n,s){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,s)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Mn}),()=>{})}onSessionId(e){var n,s;return(n=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Mn})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Mn})}renderSurvey(e,n){var s;(s=this.surveys)==null||s.renderSurvey(e,n)}displaySurvey(e,n){var s;n===void 0&&(n=tf),(s=this.surveys)==null||s.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,s;return(n=(s=this.surveys)==null?void 0:s.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Mn}}canRenderSurveyAsync(e,n){var s,r;return n===void 0&&(n=!1),(s=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&s!==void 0?s:Promise.resolve({visible:!1,disabledReason:Mn})}Jn(e){return!e||Mi(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===xs?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,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 r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(ss)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(jn)&&(this.unregister(jn),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||en)===en,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:n||{},$set_once:s||{}},!1),this.capture(ii,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:s||{}}),this.Sn=mi(e,n,s),(i=this.featureFlags)==null||i.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(He,Tt);var u=n||{},c=s||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=mi(e,n,s)}else(n||s)&&this.setPersonProperties(n,s);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(n||s)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var s=mi(this.get_distinct_id(),e,n);this.Sn!==s?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=s):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,s=(L(e)?e:[e]).filter((r=>W(r)&&r.length>0));s.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(s,!0),this.capture("$set",{$unset:s}),this.Sn=null)}group(e,n,s){if(e&&n){var r=this.getGroups(),i=r[e]!==n;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},r,{[e]:n})}),i||s){var o={$group_type:e,$group_key:n};s&&(o.$group_set=s),this.capture(Qa,o)}s&&this.setGroupPropertiesForFlags({[e]:s}),i&&!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,n){var s;n===void 0&&(n=!0),(s=this.featureFlags)==null||s.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var s;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((s=this.featureFlags)==null||s.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var s,r,i,o,a,l,u,c,d,h;if(n===void 0&&(n=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(ss),g=this.get_property(si),m=this.get_property(qt),_=this.is_capturing();if(this.consent.reset(),n||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(s=this.persistence)==null||s.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[qt]:m}),(i=this.surveys)==null||i.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,en),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:xs,$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({[si]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return X((function*(){var s,r,i,o,a,l,u;if(n.__loaded){(s=n.Un)==null||s.stop(),(r=n.jn)==null||r.dispose(),(i=n.sessionRecording)==null||i.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var s;this.config.identity_distinct_id=e,this.config.identity_hash=n,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,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&s){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!s)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(lu)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(jn,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=b({},this.config);if(te(e)){var s,r,i,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var g=this.En();(s=this.persistence)==null||s.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},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:n,newConfig:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){Y.LIB_NAME=e,Y.LIB_VERSION=n}startSessionRecording(e){var n,s,r,i,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((s=this.sessionRecording)==null||s.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var s=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(b({},r,n))}}addExceptionStep(e,n){var s;(s=this.exceptions)==null||s.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,s;return(n=(s=this.toolbar)==null?void 0:s.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:an;return n!==an&&(n=an+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((n=this.sessionPersistence)==null?void 0:n.get_property(He))===Tt}Zn(){var e,n;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[jn])&&((n=this.persistence)==null||(n=n.props)==null||!n[or]))}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(or,!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,n,s,r,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((s=this.persistence)==null||s.set_disabled(i)),((n=this.sessionPersistence)==null?void 0:n.xi)!==i&&((r=this.sessionPersistence)==null||r.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==ht){if(this.gn()){var s,r,i,o,a;this.Yn(!0,!0),(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.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=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==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,n,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:xs,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.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?ed(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(on,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ar,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),re(C,ar,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,s,r,i,o){var a=s in n&&!D(n[s]),l=r in n&&!D(n[r]);return a?n[s]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+s+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var n;if(D(this.config.before_send))return e;var s=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(yh),r=L(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of r){if(i=o(i),D(i)){var a="Event '"+e.event+"' was rejected in beforeSend function";return _h(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}i.properties&&!mt(i.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of s)if(i.properties&&D(i.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 i}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(s)})}Cn(e){var n=Ke(e)&&!e,s=Q.N()&&Q.P("ph_debug")==="true";return!n&&(!!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 n=0;e.length>n;n++)t.prototype[e[n]]=ap(t.prototype[e[n]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var n=te(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,s){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)s-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:s}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:s}];return!1}}var yi="$copy_autocapture",wi=ne("[AutoCapture]");function bi(t,e){return e.length>t?e.slice(0,t)+"...":e}function hf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function pf(t,e){var n,s,r=e.e,i=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")&&xu>c.length;)if(Su(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,w=!1;if(Z(c,(S=>{var A=ro(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Jn(R))&&(u?Ct(R):R)}M(ur(S),"ph-no-capture")&&(w=!0),m.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"?bi(1024,dl(T)):bi(1024,rs(T)));var Ie=ur(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Pu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Jn(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]=bi(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=hf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,i,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&&Jn(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),w)return{props:{},explicitNoCapture:w};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rs(t)),E){var I,F;m[0].attr__href=E;var P=(I=dr(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:r.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=b({},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 js(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+=":")+js(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:Ip(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return js(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(s=m[0])==null?void 0:s.$el_text}:{},f&&r.type==="click"?{$external_click_url:f}:{},_)}}var Ln=ne("[ExceptionAutocapture]"),$l=()=>{},ff=ne("[TracingHeaders]"),Lt=ne("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",On="awaiting_config",$s="missing_config";ne("[SessionRecording]"),ne("[SessionRecording]");var po="[SessionRecording]",at=ne(po),gf=ne("[Heatmaps]");function Ei(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Rs=ne("[Product Tours]"),Si=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},mf=["$set_once","$set"],Ze=ne("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function sn(t,e,n){if(D(t))return!1;switch(n){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 vf{constructor(e){this.ns=new Xo,this.ss=(n,s)=>this.os(n,s)&&this.ls(n,s)&&this.us(n,s)&&this.hs(n,s),this.os=(n,s)=>s==null||!s.event||n?.event===s?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;x((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((s,r)=>{this.on(s,r)}))}register(e){var n,s;if(!x((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(s=this._instance)!=null&&s.autocapture)){var r,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(i)}}on(e,n){var s;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((s=this.vs)==null?void 0:s.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var s of n.steps)if(this.ss(e,s))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var s,r=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!r||typeof r!="string"||!sn(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var s;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>sn(a.href,n.href,n.href_matching||"exact")));var i,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&sn((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var s;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>sn(u.text,n.text,n.text_matching||"exact")||sn(u.$el_text,n.text,n.text_matching||"exact")));var i,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(i=(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=n.text,a=n.text_matching||"exact",i.some((u=>sn(u,o,a))))}ys(e,n){var s,r;if(n==null||!n.selector)return!0;var i=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(i!=null&&i.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||sd(n.properties.reduce(((s,r)=>{var i=L(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return s[r.key]={values:i,operator:r.operator||"exact"},s}),{}),e?.properties)}}class _f{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((s=>this.Ss(s)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&sd(e.propertyFilters,n?.properties)}Ps(e,n){var s=new Map;return e.forEach((r=>{var i;(i=r.conditions)==null||(i=i[n])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(r.id),s.set(o.name,a)}}))})),s}Rs(e,n,s){var r=(s===$n.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>r?.includes(a.id)))})),i.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;x((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((s=>{var r,i;return((r=s.conditions)==null?void 0:r.actions)&&((i=s.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new vf(this._instance),this.Os.init(),this.Os.fs((s=>{this.onAction(s)}))),n.forEach((s=>{var r,i,o,a,l;s.conditions&&(r=s.conditions)!=null&&r.actions&&(i=s.conditions)!=null&&(i=i.actions)!=null&&i.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.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 n,s=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));s.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,$n.Activation),this.ks=this.Ps(e,$n.Cancellation))}onEvent(e,n){var s,r,i=this.Ds(),o=(n==null||(s=n.properties)==null?void 0:s.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,$n.Cancellation);l.length>0&&(i.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)){i.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,$n.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var s=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var i of e)s&&this.Cs(i)?this.qs(i)&&this.Us(i):r.push(i);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((s=>s!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((i=>!n.has(i)));var s=this.Zs(),r=s.filter((i=>!n.has(i)));r.length!==s.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return s&&typeof s=="object"?s:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(b({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),s={},r=!1;for(var i of Object.entries(n)){var o=i[0],a=i[1];e.includes(o)?r=!0:s[o]=a}r&&(mt(s)?this.Es():this.Ts(s))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return he(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,s=this.Zs();if(s.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return i&&r===i?s:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,s=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(s&&s!==e){var r=this.Zs(),i=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>he(i[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 yf extends _f{constructor(e){super(e)}Js(){return Yi}Ys(){return Os}Ms(){return Ds}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Ds]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ds)}Cs(e){var n,s;this.As((i=>{s=i.find((o=>o.id===e))}));var r=(n=s)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return he(r)&&r>0}ra(){return ft.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Yi]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Os]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Os)}ea(){return!1}$s(e,n){var s;this.As((i=>{s=i.find((o=>o.id===n))}));var r=!s||(function(i){var o;return rd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(s);return r?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 Ts="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",wf=v!=null&&v.location?hr(v.location.hash,"__posthog")||hr(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=ne("[Toolbar]"),Bl=ne("[FeatureFlags]");class bf{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((s,r)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=s.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=s.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,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,n),!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=ne("[FeatureFlags]"),Ot=ne("[FeatureFlags]",{debugEnabled:!0}),xi=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},Wl=t=>{var e={};for(var n of js(t||{})){var s=n[1];s&&(e[n[0]]=s)}return e},Xe=ne("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",Ef={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>gr(e,t),not_regex:(t,e)=>!gr(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),n.getWebExperiments((r=>{ye.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((i=>{if(i.feature_flag_key){var o;n.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=n.oa)==null||o.set(i.feature_flag_key,i));var a=n._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&n.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,n._instance)&&n.la(i.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((n=>{var s;if(this.oa&&(s=this.oa)!=null&&s.has(n)){var r,i=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var n=vn(e?.search,"__experiment_id"),s=vn(e?.search,"__experiment_variant");n&&s&&(ye.aa("previewing web experiments "+n+" && "+s),this.getWebExperiments((r=>{this.ha(parseInt(n),s,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,s){if(this.Ne.disable_web_experiments&&!s)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,n,s){var r=s.filter((i=>i.id===e));r&&r.length>0&&(ye.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!D(e.conditions)&&ye.da(e,n)&&ye.va(e)}static da(e,n){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.url))return!0;var r=ye.getWindowLocation();if(r){var i,o,a,l=wu(n,r.href);return(i=e.conditions)==null||!i.url||Ef[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var n;if(D(e.conditions)||D((n=e.conditions)==null?void 0:n.utm))return!0;var s=Mu();if(s.utm_source){var r,i,o,a,l,u,c,d,h=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.utm_campaign)==s.utm_campaign,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,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)==s.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;n>r;r++)s[r-1]=arguments[r];k.info("[WebExperiments] "+e,s)}la(e,n,s){this._is_bot()?ye.aa(zl):n!=="control"?s.forEach((r=>{if(r.selector){var i;ye.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(i=document)==null?void 0:i.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?ed(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=ne("[Conversations]"),Dt="Conversations not available yet.",ql="console",cd="__posthogHandledLogsRequestError",ki=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[cd]=!0,n},Vl=t=>!!t&&typeof t=="object"&&t[cd]===!0,Nr={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 bf(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return v&&re(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[Hn,Wn,Ls,et]){var n=this.Oa(e);x(n)||(t[e]=n)}this.fa=t;var s=b({},t),r=this.Oa(Bt);if(r)for(var i of Object.entries(r))s["$feature/"+i[0]]=i[1];this.pa=s}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Kn);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,s=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(s).length){var r,i,o=(r=(i=n.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&r!==void 0?r:{},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,n){var s,r,i=n!=null&&n.merge&&(s=this.Oa(Bt))!==null&&s!==void 0?s:{},o=n!=null&&n.merge&&(r=this.Oa(Wn))!==null&&r!==void 0?r:{},a=b({},i,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled: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(Ki),e=this.Oa(et),n=this.Oa(jt);if(!n&&!e)return t||{};var s=ee({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var i of r){var o,a,l=s[i],u=e?.[i],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=n?.[i],p=b({},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=b({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),s[i]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:s}),this.ca=!0),s}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var s=t[n];return{key:n,enabled:Da(s),variant:Ba(s),payload:Oa(e[n])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Wn),e=this.Oa(jt);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:b({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:Uu()};x(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var s=this.Na();s.length&&(n.evaluation_contexts=s);var r=this.qa();x(r)||(n.flag_keys=r);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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({[Bs]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?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({[Bs]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,f,{partialResponse:i}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Tu(this.Sa,3)}Ua(t){this.Sa=Nu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s=this.getFeatureFlagResult(t,e);return(n=s?.variant)!==null&&n!==void 0?n:s?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+xi)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,s=this.getFlagVariants(),r=t in s,i=s[t],o=this.getFlagPayloads()[t],a=String(i),l=this.Oa(Ls)||void 0,u=this.Oa(Kn)||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(qn);h&&h!==p&&(c={},n=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Wt]:c,[qn]:n});else{var f,g,m,_,E,w,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[Wt]:c},n?{[qn]:n}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Bs))!==null&&f!==void 0?f:[]];x(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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=(w=S==null||(I=S.reason)==null?void 0:I.description)!==null&&w!==void 0?w: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 n&&this.F({[Wt]:c,[qn]:n});if(r)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xi)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r={distinct_id:s.distinctId,token:s.projectToken,person_properties:{$lib:s.library.name,$lib_version:s.library.version}},i=n.Na();i.length&&(r.evaluation_contexts=i);var o,a=n.qa();x(a)||(r.flag_keys=a);try{var l,u=(l=(yield s.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+xi),e.defaultValue;var n=this.getFeatureFlag(t,e);return x(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var s=(function(r,i,o,a,l,u){i===void 0&&(i={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,B)=>{var S=P.flags;return S?b({},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)})(r,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=r.requestId,g=r.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{[Hn]:h,[Bt]:m,[sr]:!1}}var E=h,w=p,I=d;if(l!=null&&l.partialResponse)E=b({},i,E),w=b({},o,w),I=b({},a,I);else if(r.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=b({},i,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),w=b({},o,Object.fromEntries(Object.entries(w||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=b({},i,E),w=b({},o,w),I=b({},a,I);return b({[Hn]:Object.keys(Wl(E)),[Bt]:E||{},[Wn]:w||{},[Ki]:I||{},[sr]:r.minimalFlagCalledEvents===!0},f?{[Ls]:f}:{},g?{[Kn]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,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,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var s={},r=n.flags,i=n.payloads;return r&&(s[et]=L(r)?Hl(r):r),i&&(s[jt]=i),Object.keys(s).length&&this.F(s),r===!1&&i===!1?this.q([et,jt]):r===!1?this.q(et):i===!1&&this.q(jt),this.Va(),r===!1?Ot.info("Flag overrides cleared"):r&&Ot.info("Flag overrides set",{flags:r}),void(i===!1?Ot.info("Payload overrides cleared"):i&&Ot.info("Payload overrides set",{payloads:i}))}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(),n=e.flags,s=e.flagVariants;try{t(n,s)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var s=(this.Oa(Ms)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:r};s&&(i.$early_access_feature_name=s.name),n&&(i.$feature_enrollment_stage=n);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Hn]:Object.keys(Wl(o)),[Bt]:o,[ct]:b({},this.Oa(ct)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var s=this.Oa(Ms);!s||e?this.Qa(t,n):t(s)}Qa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield s.sendRequest("/api/early_access_features/?token="+s.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Ms]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,s)=>(n[s]=e[s],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,s=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,s,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(ct)||{},s=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,i={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(i[o]=r[o]));this.F({[ct]:b({},n,i,s)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=b({},this.Oa(ct)||{});t.forEach((s=>{delete n[s]})),this.F({[ct]:n}),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 n=this.Oa(Ut)||{},s=b({},n);for(var r of Object.keys(t))s[r]=b({},n[r],t[r]);this.F({[Ut]:s}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:b({},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}}},Sf={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===On||this.Ya===$s?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 n=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.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&&re(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),n=!this.Ne.disable_session_recording,s=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&n&&!s}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!x(Object.assign)&&!x(Array.from);this.ro&&n?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,n,s;this.ro&&(this.Ya!==On&&this.Ya!==$s&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=$.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return at.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(zo),(e=this.Mr)==null||e.unregister(cu)}uo(t,e){if(D(t))return null;var n,s=he(t)?t:parseFloat(t);return typeof(n=s)!="number"||!Number.isFinite(n)||0>n||n>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):s}ho(t){if(this.Mr){var e,n,s=this.Mr,r=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({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})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===On&&(this.Ya=$s,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(qt);return(n==null||(e=n.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(n){return at.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,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({[vu]:!0});var r;if(this.Ja||(this.Ja=(r=$.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===$s||this.Ya===On?void 0:(this.Ya=On,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Hu(this._instance).load());this.Ya=Nl,(n=(s=this.Ja).setDocumentWasEverVisible)==null||n.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({[du]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?hu:pu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},xf={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,n=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((s=>new RegExp(s))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((s=>new RegExp(s))),n}yo(){if(this.isBrowserSupported()){if(v&&C){var t=n=>{n=n||v?.event;try{this.bo(n)}catch(s){wi.error("Failed to capture event",s)}};if(re(C,"submit",t,{capture:!0}),re(C,"change",t,{capture:!0}),re(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||v?.event;try{this.bo(n,yi)}catch(s){wi.error("Failed to capture copy/cut event",s)}};re(C,"copy",e,{capture:!0}),re(C,"cut",e,{capture:!0})}}}else wi.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;Ke(n)&&(this.instance.persistence&&this.instance.persistence.register({[Ui]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((s=>{var r=C?.querySelectorAll(s);r?.forEach((i=>{t===i&&n.push(s)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[Ui],s=this.co,r=this.instance.Qi()&&!this.fo;if($e(s)&&!Ke(n)&&!r)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,s=ai(t);Eu(s)&&(s=s.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(s,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===yi;if(s&&(function(d,h,p,f,g,m){var _;if(!v||Jo(d)||p!=null&&p.url_allowlist&&!sl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&sl(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 w=Fu(d,f),I=w.parentIsUsefulElement,F=w.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?_:wp))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&&(Ko.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(s,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var i=pf(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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(s);if(a&&a.length>0&&(o.$element_selectors=a),e===yi){var l,u=ku(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(s,r,i){try{if(!(r in s))return $l;var o={next:s[r]},a=i((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[r]=a,()=>{if(s[r]!==a)for(var l=s[r];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[r]=o.next}}catch{return $l}})(v.history,t,(s=>function(r,i,o){s.call(this,r,i,o),n.So(t)}))}}So(t){try{var e,n=v==null||(e=v.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(on,{navigation_type:t}),this._o=n}catch(s){k.error("Error capturing "+t+" pageview",s)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};re(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[Hi]),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;gf.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Hi]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ei(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),re(v,lr,this.Po),this.Ro=t=>this.ke(t||v?.event),re(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),re(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,Cp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),re(C,ar,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(lr,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ar,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),i=(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=Iu(u)}return!1})(ai(t),["fixed","sticky"],r);return{x:t.clientX+(i?0:s),y:t.clientY+(i?0:n),target_fixed:i,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!nl(t.target)&&Ei(t)){var s=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(ai(t),this.instance.config.rageclick)&&this.Vt(b({},s,{type:"rageclick"})),this.Vt(s)}}Fo(t){!nl(t.target)&&Ei(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,n=this.Ne.custom_personal_data_properties,s=this.Ne.mask_personal_data_properties?[..._n,...n||[]]:[],r=is(e,s,os);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].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",b({$current_url:this.R.url},this.R.metrics.reduce(((n,s)=>b({},n,{["$web_vitals_"+s.name+"_event"]:b({},s),["$web_vitals_"+s.name+"_value"]:s.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var s;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(n?.name)||D(n?.value))Lt.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,i=this.Bo(r);if(!x(i)){var o=he(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+i;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=i),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(s=this._instance.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0),l=b({},n,r?{navigationURL:i}:{},{$current_url:i,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,n)}}},this.Uo=()=>{if(!this.vo){var n,s,r,i,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(n=l.onLCP,s=l.onCLS,r=l.onFCP,i=l.onINP),n&&s&&r&&i){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(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[Vi]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(n)?((e=this._instance.persistence)==null?void 0:e.props[Gi])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value: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 n=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({[Vi]:n}),this._instance.persistence.register({[Gi]:s})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,n=this.zo,s=e?.postHogWebVitalsCallbacksByFlavor;s!=null&&s[n]||n==="web-vitals"&&x(s)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?Lt.error("failed to load script",r):t()}))}Bo(t){var e=t||v?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?Ct(e):e,s=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[..._n,...s||[]]:[];return is(n,r,os)}Lt.error("Could not determine current URL")}}},kf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(v&&this.isEnabled&&(n=$.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var s=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(this.captureException.bind(this)))}catch(o){Ln.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Wi]),this.Jo=new Eh(b({},(function(n){var s,r,i,o;return n===void 0&&(n={}),{refillRate:(s=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(i=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ln})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=b({},e,t):(x(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ln.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(s=>{if(s)return Ln.error("failed to load script",s);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Wi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,s,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Ln.info("Skipping exception capture because of client rate limiting.",{exception:r}):(s=this._instance.exceptions)==null||s.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Bh([new Gh,new np,new Jh,new Kh,new ep,new Qh,new Zh,new tp],(function(s){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;r>o;o++)i[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 i){var g=f(p,s);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 b({},E,{filename:E.filename||(w=_,w[w.length-1]||{}).filename,function:E.function||mn});var w}))})(u)}})("web:javascript",Wh,Vh)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(zi))!==null&&e!==void 0?e:[],this.el=nr(this.il()),this.rl=new rp(this.el)}onConfigChange(){this.el=nr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,s;if(t.ok){var r=t.config;if("errorTracking"in r){var i=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(s=r.errorTracking)==null?void 0:s.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[zi]:this.Xo,[qi]:o})}}}get nl(){var t,e=!!this._instance.get_property(qi),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var n=(function(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>sp.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),s=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(b({[er]:t,[tr]:new Date().toISOString()},s))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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 n=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,s=typeof(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;s&&(n.$release_id=s);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}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 i}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(n){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[er]:t,[tr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,s)=>{var r=s.type,i=s.value;return W(r)&&r.length>0&&n.$exception_types.push(r),W(i)&&i.length>0&&n.$exception_values.push(i),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var s=n.values.map((r=>{var i=nd[r.operator],o=e[r.key];if(!i||!o)return!1;var a=L(r.value)?r.value:[r.value];return a.length>0&&i(a,o)}));return n.type==="OR"?s.some(Boolean):s.every(Boolean)}))}catch(n){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,s;return(n=(s=e.stacktrace)==null?void 0:s.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,s,r,i=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(s=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&s!==void 0&&s}return!1}al(t){return!D(t)&&L(t)}}},If=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,s;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Si(this._instance))return!this.vl&&D((n=this.Mr)==null?void 0:n.props[zn])||Rs.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&&Si(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(s=>{s?Rs.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 n=this.Mr;if(n){var s=n.props[zn];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:r=>{if(Si(this._instance)){var i=r.statusCode;if(i!==200||!r.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?r.error||Rs.warn(o):Rs.error(o),void t([],{isLoaded:!1,error:o})}var a=L(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[zn]: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(zn)}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)}}},Nr),Cf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,s,r,i,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},Cc(t,mf),{properties:b({},t.properties,f?{$set:b({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(s=(r=t.properties)==null?void 0:r.$set_once)!==null&&s!==void 0?s:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,s,r,i,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 w=m[_];m[_]=E(w),c.push((()=>{m[_]=w}))}},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 w=f(_);return w?m.call(this,w,E):_})),p(u,"replaceChild",(m=>function(_,E){var w=f(_);return w?m.call(this,w,E):E})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(s=l.DocumentFragment)==null?void 0:s.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))}))})),[(r=l.Element)==null?void 0:r.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"after",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];var F=g(w);return w.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var w=f(E);return w?m.call(this,_,w):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var s=t(n);return e&&n(),s}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{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,r=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),s&&n()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;i&&(e.processEvent=i),s=!0}catch(o){Ze.error(Ml+t.id,o),r(!1)}if(s&&e.loaded)try{n()}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 n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),s=function(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(n)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var r of Object.values(this.apps))s(r)}}onRemoteConfig(t){var e,n,s,r=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((n=this.yl)==null||n.call(this),t.ok){var i=t.config;if((s=i.siteApps)!=null&&s.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=r._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of i.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Ff={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,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=(n=$.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(s=>{if(s)return ff.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()}}},Pf=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return 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 n=L(e);this.Rl=n?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(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 n=t.generateSurveys;if(n)return void this.Dl(n,e);var s=t.loadExternalDependency;if(!s)return void this.$l(qo);s(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new yf(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 n,s=this._instance.get_property(Ji);if(s&&!e)return t(s,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var i;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):r.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(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)),(i=this._instance.persistence)==null||i.register({[Ji]:c,[rr]:Date.now()});var h={isLoaded:!0};t(c,h),n?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(rr);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,s={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};od(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(n){q.error("Error in survey callback",n)}}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((n=>{var s;e=(s=n.find((r=>r.id===t)))!==null&&s!==void 0?s:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:Ts};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:Ts};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:Ts};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:Ts})):new Promise((n=>{this.getSurveys((s=>{var r,i=(r=s.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(i){var o=this.zl(i);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var s;if(D(this._surveyManager))q.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(ef.includes(r.type)){var i=C?.querySelector(e);if(i)return(s=r.appearance)!=null&&s.surveyPopupDelaySeconds?(q.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,i,n),q.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,i,n);q.warn("Survey element not found")}else q.warn("Surveys of type "+r.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var n;if(D(this._surveyManager))q.warn("init was not called");else{var s=this.Hl(t);if(s){var r=s;if((n=s.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=b({},s,{appearance:b({},s.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 i=this.Ul(s);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,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()}}},Nr),Af={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),no(this.instance.config)||!v||!C)return!1;t=t??v.location,n=n??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var s,r=wf||hr(t.hash,"__posthog")||hr(t.hash,"state"),i=r?el((()=>JSON.parse(atob(decodeURIComponent(r)))))||el((()=>JSON.parse(decodeURIComponent(r)))):null;return i&&i.action==="ph_authorize"?((s=i).source="url",s&&Object.keys(s).length>0&&(i.desiredHash?t.hash=i.desiredHash:n?n.replaceState(n.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(bu));if(!v||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,s=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(b({},s,{source:void 0}))),this.Vl()===2)this.Zl(s);else if(this.Vl()===0){var r;this.Wl(1),(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Dl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(s)})),re(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(s)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},$f=b({experiments:ye},Nr),Rf={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||no(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(qo);n(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":no(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,n){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.sendMessage(t,e,n):(Ue.warn(Dt),null)}))()}getMessages(t,e){var n=this;return X((function*(){return n._conversationsManager?n._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()}}},Tf={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ne("[logs]"),this.nu=b({},this.rt,{error(){for(var s=arguments.length,r=new Array(s),i=0;s>i;i++)r[i]=arguments[i];r.some(Vl)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var s,r;this.Sa=0,(s=this.ou)==null||s.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&re(v,"online",this.au)}uu(t,e,n,s){var r,i=(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,_),w=o?.resourceAttributes;return{serviceName:(d=(h=w?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=w?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=w?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:w,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new Lh(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,s),i]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var s=this.uu((()=>this.tr),(r=>{this.tr=r}));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 n;(n=this.lu)==null||n.reset(),this.gu=e;var s=this.uu((()=>this.su),(r=>{this.su=r}),{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 n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){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",(n=>{var s;n||(s=t.logs)==null||!s.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(qo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:s=>s===ut.LogsQueue?t():void 0,setPersistedProperty(s,r){var i;s===ut.LogsQueue&&e((i=r)!==null&&i!==void 0?i:[])},Ot:s=>this.Ot(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Tu(this.Sa,3))e({kind:"fatal",error:ki(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,s=i=>{n||(n=!0,clearTimeout(r),e(i))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),s({kind:"retry-later",error:ki(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),s({kind:"retry-later",error:ki(i.error,"logs request failed before receiving an HTTP response")})):s({kind:"retry-later",error:(a=i.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Nu(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,n,s,r){if(e.length!==0){var i=e.map((a=>a.record));r([]);var o=ru(i,su(n,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 n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.windowId,r=n.sessionStartTimestamp,i=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=s,D(r)||(e.sessionStartTimestamp=r),D(i)||(e.lastActivityTimestamp=i)}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}}},Nf={metrics:class{constructor(t){this.rt=ne("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new Oh(this.hu(),(function(s){var r,i,o,a,l,u=s?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:s?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var s=!1,r=o=>{s||(s=!0,clearTimeout(i),n(o))},i=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Mf=b({},Nr,Sf,xf,kf,If,Cf,Pf,Ff,Af,$f,Rf,Tf,Nf);Te.__defaultExtensionClasses=b({},Mf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Zn[an]=new Te;return(function(){function e(){e.done||(e.done=!0,ld=!1,Z(Zn,(function(n){n._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():re(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",Lf={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 Of(t={},e=0){const n=fo(t.artifactType||t.type||ud),s=fo(t.artifactName||t.name||t.fileName||`${dd}-${e+1}`);return`${n||"artifact"}-${s||e+1}`}function hd(t={},e=0){const n=kt(t),s=n.artifactType||n.type||ud,r=n.artifactName||n.name||dd;let i=n.fileName||r;return i.endsWith(".dart")||(i+=".dart"),{id:fo(n.id)||Of({...n,artifactType:s,artifactName:r,fileName:i},e),artifactType:s,artifactName:r,fileName:i,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:pd(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:fd(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:kt(n.metadata),codeType:n.codeType||Lf[s]||"O"}}function pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=kt(e),s=n.name||n.package;return s?{name:s,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function fd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=kt(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function go(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function as(t,e={}){const n=[],s=typeof t=="string"?go(t):t,i=kt(s||{});!s&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>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(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:pd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function vr(t){return as(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 wn(t){return JSON.stringify(t,null,2)}function Df(t){return wn({task:"architect",userRequest:String(t??"")})}function Bf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?wn(e):wn({task:"generate_bundle",bundleSpec:e})}function jf(t){return wn({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 n={stage:t};return e!=null&&(n.bundle=yt(e)),n}function Uf({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:s,userFeedback:r}){return wn({task:"regenerate_artifact",artifactId:s,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),userFeedback:String(r)})}function gd({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:s}){return wn({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),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"},Hf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Wf(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(Wf(t))return t;for(const n of Hf){const s=t[n];if(Le(s)){const r=md(s,e+1);if(r)return r}}return null}function _r(t){return Array.isArray(t)?t.some(_r):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(_r):!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 vd(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function zf(t,e){if(Le(t))for(const[n,s]of Object.entries(t)){if(!Le(s))continue;const r=Le(s.categories)?s.categories:{},i=Object.entries(r).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):s.matched===!0&&e.add(vd(n))}}function qf(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(s=>Le(s)?Object.entries(s):[]):Object.entries(t);for(const[s,r]of n){if(!_r(r))continue;const i=vd(s),o=r?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?r?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>_r(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}function Vf(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 Gf(t){const e=md(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);zf(e.filterSummary,n),qf(e.filterResults,n);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,i=mo(e.filterSummary||e.filterResults);return!s&&!i&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:s?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function Kf(t,e){const n=Gf(t);if(!n)return null;const s=[...new Set(n.matchedFilters.map(Vf))],r=n.kind==="blocked",i=new Error(r?`Safety screening blocked this pipeline step for ${Kl(s)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=r?"Request blocked for safety":"Safety check unavailable",i.userMessage=r?`The safety check detected ${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.",i.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=n.matchedFilters,i}function Jf(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/,n=[];for(const s of Jf(t).split(` +`)){if(!/^[A-Za-z_$]/.test(s)||e.test(s))continue;const r=s.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function ea(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(s,r,i)=>i.toUpperCase());if(e==="A"){const s=n.replace(/(^|_)(\w)/g,(r,i,o)=>o.toUpperCase());return s.charAt(0).toLowerCase()+s.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Yl(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),s=>s.toString(16).padStart(2,"0")).join("")}async function Yf(t,e=new Map){const n={},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)),n[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>s.add(p))}}const r=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(s).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(i)}}const Zf=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/"},Xf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Qf=["Struct","Record"],eg=[{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=>Ii(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=>Ii(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let s;for(;(s=n.exec(e))!==null;){const r=s[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { + const W({required this.value}); + final double value; +}`,neg:`class _P { + const _P({required this.t}); + final double t; +} +class W extends StatefulWidget { + const W({this.value = 1.0}); + final double value; +}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>Ii(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,n){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:n}}function ls(t){let e="",n=0;for(;n"&&(n--,n===0))return{inner:t.slice(e+1,s),end:s+1};return null}function ng(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let s=0;for(let r=n.index+n[0].length-1;rsg(t).usable);function ig(t=""){const e=ls(t);return rg.filter(n=>n.detect(e)).map(({id:n,severity:s,message:r})=>({id:n,severity:s,message:r}))}function og(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const s of n){let r=s.index+6,i=null;const o=r;for(;ro;if(t[r]==="<"){const u=tg(t,r);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rXl(o.functionName)===s);if(r)return r;const i=o=>!o.functionName.startsWith("_");return n.find(i)||n[0]}function Mr(t=""){return Array.from(ls(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ag(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 lg(t,e){const n=Mr(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>Ql(l)===r)||n.length>1)return null;const[o]=n,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 na(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function cg(t,e,n=""){const s=ta(e,n)?.functionName;if(!s)return null;const r=String(t||"").split("/").pop(),i=ea(r,"A");if(i===s)return null;const o=`${na(s)}.dart`;return`File name "${r}" does not match Action "${s}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function ug(t="",e=""){return ta(t,e)!==null}function dg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(s=>Xf.has(s)?!1:!Qf.some(i=>s.endsWith(i))||e.has(s))}function hg(t,{functionName:e="",declaredTypes:n=new Set}={}){const s=ag(t,e),r=dg(s,n);if(r.length===0)return null;const[i]=r;let o;return n.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:s===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function pg(t,e={}){const n=[],s=t.fileName||"",r=t.code||"";if(Zf.has(t.artifactType)||n.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),s.endsWith(".dart")||n.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of ig(r))n.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!ug(r,t.artifactName)&&n.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Mr(r)),o=hg(r,{functionName:t.artifactName,declaredTypes:i});o&&n.push(Qe(t,"error",o));const a=cg(s,r,t.artifactName);a&&n.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=lg(s,r);i&&n.push(Qe(t,"info",i))}return n}function fg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(i=>Mr(i.code||""))),s=e.flatMap(i=>pg(i,{declaredTypes:n})),r=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Zl[i.artifactType]||Zl.CodeFile}));return{valid:s.every(i=>i.severity!=="error"),findings:s,deployHints:r}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function gg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const mg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function vg(t="",e=""){const n=gg(t),s=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),r=n.split(` +`).filter(i=>{const o=tc(i);return o===null||!s.has(o)?!0:!mg.test(i)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const _g=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function _d(t){let e="",n=0;for(;n{const s=n.name||n.package;if(!s||s==="flutter")return e;const r=n.versionRequired||n.required;return e[s]=r&&n.version||"",e},{})}function Eg(t){const e=new Map,n=new Map,s=[];for(const r of t)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return s}function Sg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];r.forEach(p=>{const f=bg(p),g=p.fixedCode||p.code||"",m=p.codeType||yg[p.artifactType]||Ne.OTHER;g.trim()||i.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||wg(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),...r.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};r.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=Eg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:i,errors:h}}function xg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function kg(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 Ig(t,e){const s=[kg(t),xg(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function Cg(t,e=new Map){const n=[];for(const[s,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||s,className:Ig(s,r),content:r.content,fileName:s,path:r.path});return n}function Fg(t,e){const n=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!n.has(s.path)))}const rc={pass:0,warning:1,fail:2},Pg=["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 n=e.filter(s=>typeof s=="string").join(` +`);if(n)return n}}return""}function tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Ag(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return n;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 ra(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,n)=>rc[n]>rc[e]?n:e,"pass")}function bd(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const s=De(t),r=gt(s.message,s.title,s.issue,s.description,s.summary);return r?{severity:ra(s.severity||s.status||s.level)||e,message:r,suggestion:gt(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||n}:null}function _o(t,e="review"){const n=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,i])=>tt(n[r]).map(o=>bd(o,i,e)).filter(Boolean))}function $g(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const s=De(t),r=gt(s.title,s.action,s.step,s.message,s.name,s.description);return r?{id:s.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:gt(s.detail,s.instructions,s.description),location:gt(s.location,s.flutterFlowPath,s.path),timing:gt(s.timing,s.phase)||"unspecified",artifactId:n,source:gt(s.source)||"Code Review"}:null}function yo(t,e=null){const n=De(t);return Pg.flatMap(s=>tt(n[s])).map((s,r)=>$g(s,r,e)).filter(Boolean)}function Rg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=De(e);typeof n.content=="string"&&(e=go(n.content)||e);const s=De(e),r=De(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(r).length?r:s}}function Tg(t,e){const n=[e.id,e.fileName,e.artifactName].map(We);return t.find(s=>{const r=De(s);return[r.id,r.fileName,r.artifactName,r.name].map(We).some(i=>i&&n.includes(i))})||null}function Ng(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(r=>We(r?.artifactId)===We(e.id)||We(r?.fileName)===We(e.fileName))?.pathHint||""}function Mg(t,e){return tt(t?.relationships).filter(n=>We(n?.from)===We(e.id)||We(n?.to)===We(e.id))}function Lg(t,e){return tt(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||We(n.artifactId)===We(e.id)).map(n=>bd(n,"warning","Compatibility check")).filter(Boolean)}function Og(t,e,n,s){const r=Tg(e,n),i=De(r?.review||r||n.review),o=Object.keys(i).length>0,a=[..._o(i),...Lg(t,n)],l=yo(i,n.id),u=ra(i.status||i.verdict||i.outcome||i.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...n,index:s,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:Ng(t,n),relationships:Mg(t,n)}}function Dg({status:t,score:e,artifactPresentations:n,manualSteps:s}){const r=n.length;if(r===0&&s.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Bg({bundle:t,reviewResult:e}){const n=De(t),s=tt(n.artifacts),{root:r,rawText:i}=Rg(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(De).find(w=>Object.keys(w).length)||{},a=tt(r.artifacts||r.files||r.reviews),l=s.map((w,I)=>Og(n,a,w,I)),u=_o(r),d=[..._o(o),...u],h=[...yo(o),...yo(r),...l.flatMap(w=>w.manualSteps)].filter((w,I,F)=>F.findIndex(P=>P.title===w.title&&P.artifactId===w.artifactId)===I),p=ra(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),f=vo(p,...d.map(w=>w.severity),...l.map(w=>w.status)),g=o.score??r.score??r.overallScore??i,m=Ag(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,i)||Dg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((w,I)=>(w[I.status]+=1,w),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(w=>w.reviewComplete).length,total:l.length},deployOrder:tt(n.deployOrder),relationships:tt(n.relationships),warnings:tt(n.warnings),compatibility:De(n.metadata?.compatibility)}}const jg=/^\uFEFF/;function Dn(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` +`)}function Ug(t){const e=String(t??"").replace(jg,"");if(!e.trim())return"";const n=e.split(` +`),s=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,i=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,i<0&&(i=d),o.push(c+h)),c+=n[d].length+1}}if(r===0)return Dn(n);{const c=wo(e);if(!c.error&&o.every(h=>oc(h,c.commentAndStringRanges)))return Dn(n)}if(r===1){const c=Dn(n.slice(0,i)),d=Dn(n.slice(i+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 Hg(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 Ed(t){const e=Hg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),n=>n[1])}function Sd(t){return`${na(t)}.dart`}function Wg(t){return ea(t,"W")}const ic={"(":")","[":"]","{":"}"},zg={")":"(","]":"[","}":"{"},qg=/[A-Za-z0-9_]/;function wo(t){const e=[{kind:"code",opener:null,openedLine:0}],n=[];let s=1,r=0;const i=(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")&&n.push({start:c.startIndex,end:t.length})};for(;r0?t[r-1]:"",f=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!qg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:r,openedLine:s}),r+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:s}),r++;continue}if(zg[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${s}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${s}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}i(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function Vg(t){return wo(String(t??"")).error}function oc(t,e){return e.some(({start:n,end:s})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const Gg=/^dependencies\s*:\s*(?:#.*)?$/,Kg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function fs(t){const e=t.match(Kg);return e?e[1]??e[2]??e[3]:null}function gs(t){const e=t.trim();return e===""||e.startsWith("#")}function kn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const n=t.findIndex(i=>e.test(i));if(n===-1)return null;let s=n,r=null;for(let i=n+1;i=0.0.0"}`}function Zg(t,e={}){const n=String(t||""),s=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(s.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(` +`),i=new Set(Cd(n)),o=[],a=[];for(const[u,c]of s)i.has(u)?a.push(u):(o.push([u,c]),i.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=oa(r);if(l){const u=o.map(([c,d])=>ac(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(ac(" ",u,c))});return{yaml:r.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Xg(t,e={}){const n=String(t||""),s=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(s.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(` +`),i=Lr(n),o=[],a=[];for(const[l,u]of s){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(kn(r[c.lineIndex]));r[c.lineIndex]=`${d}${l}: ${Pd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(` +`),overridden:o,skipped:a}}function Ad(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),oa(e.split(` +`))||n.push("pubspec.yaml missing dependencies section"),Cd(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const Qg=">=3.0.0 <4.0.0";function bo(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function em(t=""){const e=wd(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function lc(t,e,n){const s=[];for(const[r,i]of t){if(i.isScalar){e[r]=bo(i.constraint);continue}if(i.sourceKey==="sdk"){n.add(r);continue}if(i.sourceKey==="version"){e[r]=bo(i.sourceValue);continue}s.push(r)}return s}function tm(t){const e=new Set,n={},s={},r=lc(Lr(t),n,e),i=lc(Jg(t,"dependency_overrides"),s,e),o=[...r,...i],a=new Set([...Object.keys(n),...e]),{sdk:l}=Fd(t);return{sdkConstraint:bo(l)||Qg,dependencies:n,overrides:s,sdkPackages:[...e].sort(),availablePackages:a,unrepresentable:o,unrepresentableOverrides:i}}function nm(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function sm(t,e){const{sdkConstraint:n,dependencies:s,overrides:r,sdkPackages:i,availablePackages:o,unrepresentable:a,unrepresentableOverrides:l}=tm(e),u={sdkConstraint:n,dependencies:s,overrides:r,sdkPackages:i},c=[],d=[];for(const h of t){const{className:p,content:f}=h,g=sa(f),m=g.filter(w=>a.includes(w));if(m.length>0){d.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}if(l.length>0&&wd(f).some(w=>w.startsWith("package:"))){d.push({className:p,reason:`${p} was not compiled before deploying: your project's dependency_overrides redirects ${l.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=em(f),E=g.filter(w=>!o.has(w));if(_.length>0||E.length>0){d.push({className:p,reason:nm(p,_,E)});continue}c.push({fileName:`${na(p)}.dart`,content:f})}return{manifest:u,sources:c,skipped:d}}function cc(t,e){const n=`${t}${e}`.split(` +`),s=n.pop()??"",r=[];for(const i of n){const o=$d(i);o&&r.push(o)}return{events:r,buffer:s}}function rm(t){const e=$d(t);return e?[e]:[]}function $d(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function im(t,e={}){const{onPhase:n,onLog:s}=e;let r=null,i="";const o=a=>{if(a.event==="phase"){a.message&&n&&n(a.message);return}if(a.event==="log"){a.message&&s&&s(a.message);return}r=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=cc(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=cc("",await t.text());i=a.buffer,a.events.forEach(o)}return rm(i).forEach(o),r?{...r,success:r.success===!0||r.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 om=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(om);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function am(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function cm(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:cm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},s=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,i;for(;(i=s.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function uc(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.min!==null){const s=yr(e,n.min);if(s<0||s===0&&!n.minInclusive)return!1}if(n.max!==null){const s=yr(e,n.max);if(s>0||s===0&&!n.maxInclusive)return!1}return!0}function um(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.max===null)return!0;const s=yr(n.max,e);return s>0?!0:s===0&&n.maxInclusive}function rn(t){const e=aa(t);return e?e.min:null}const dm="https://pub.dev/api/packages/",hm=8e3;function pm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of r){const a=o?.version;if(!a||o.retracted||lm(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!uc(l.sdk,n)||s&&l.flutter&&!uc(l.flutter,s)||(!i||yr(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function fm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null,fetchImpl:r=fetch}=e;let i;try{const a=await r(`${dm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(hm)});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}"`};i=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=pm(i,{dartSdkFloor:n,flutterSdkFloor:s});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function gm(t,e={}){const n=await Promise.all(t.map(s=>fm(s,e)));return new Map(n.map(({name:s,...r})=>[s,r]))}async function mm(t,e={},n={}){const{resolveVersions:s=gm}=n,r=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=Fd(t),o={dartSdkFloor:rn(i.sdk),flutterSdkFloor:rn(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Lr(t),u=[];for(const[c,d]of r){const h=l.get(c);if(!h){u.push(c);continue}const p=rn(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(um(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(rn(p)){a.additions[d]=`^${rn(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${rn(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 vm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>vm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function _m(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const s=t?.message||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function ym(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📄"}function wm(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📝"}function bm(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 bn(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function dc(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 Rd(t,e="dart",n=globalThis.hljs){if(!t)return"";const s=bn(t);try{return n.highlight(s,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(s,{language:"json"}).value}catch{return bt(s)}}}function Or(t,e={}){const{highlighter:n=globalThis.hljs}=e;let s='
    ';const r=String(t??"").split(` +`);let i=!1,o="";for(const a of r){if(a.startsWith("```")){if(i){const l=bm(o),u=Rd(o.trim(),l,n);s+=`
    +
    ${u}
    +
    `,o="",i=!1}else i=!0;continue}if(i){o+=a+` +`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();s+=`
    +

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

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

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

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

    ${dc(a)}

    `)}return s+="
    ",` +
    +
    +
    + Live Audit Report +
    + ${s} +
    + `}const Em="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Td={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},wr="ccc_auth_session",hc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function En(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=En({isResolved:!0});const Sm=`${Je}/service/runpipeline`,xm="bs_user_id",km="bs_identity_token",Im=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const br={free:2,professional:50,power:2e3},Er="ccc_subscription",pc=3,Cm=new Set(["active","trialing","paid"]),cs="google/gemini-3.7-flash",Ws=["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"],Fm={"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 Fm[t]||t}const Pm=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 Nd(t){return Pm.has(t)}const Eo=4,Ci=8*1024*1024,Am="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function $m(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function Rm(t){const e=new FormData;return e.append("file",t),(await fetch(Am,{method:"POST",body:e})).json()}function Tm(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const s=e[n];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 Nm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const n=e.filter(l=>l.size>Ci);n.length&&ue(`Skipped ${n.length} image(s) over the ${(Ci/1024/1024).toFixed(0)} MB limit.`,"warning");const s=e.filter(l=>l.size<=Ci);if(!s.length){t.target.value="";return}const r=Eo-Pt.length,o=s.slice(0,r).map(async l=>{const u=await $m(l);if(!u)return null;let c="";try{c=Tm(await Rm(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Nd(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),s.length>r&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Mm(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((n,s)=>{const r=document.createElement("div");r.className="prompt-img-thumb",r.innerHTML=`Prompt image`,t.appendChild(r)}),e&&(e.textContent=Pt.length>=Eo?"Image limit reached":"Add images"))}function Md(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Nd(e?.value);t.classList.toggle("hidden",!n),!n&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Ld="google/gemini-3.7-flash",Od="google/gemini-3.7-flash",Fi="google/gemini-3.7-flash",fc={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"},zs={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 qs={...zs};async function Lm(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const s=await n.json();if(s.result!=="success"||!s.rates)return;const r=s.rates,i={AUD:1},o=new Set([...Object.keys(zs),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?i[a]=r[a]:zs[a]&&(i[a]=zs[a]));qs=i}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 Dd(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&xo[i])return xo[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=So[e];if(n)return n;const s=e.split("_")[0],r=So[s];return r||"USD"}function gc(t,e){const n=qs[e]??qs.USD,s=t*n,r=Math.round(s*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*qs.USD)}}const nt="ccc_api_key_",_t="ccc_session_api_key_",it="ccc_encryption_key",us="ccc_encryption_key_scope",Om="ccc_keystore",Sr="keys",ds="ccc_encryption_key_version";let ko=null,xr=null,hs=!1,kr=!1,mc=!1;class Ir extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function vc(){if(mc)return;mc=!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 Bd(){return localStorage.getItem(ds)||""}function Io(){return crypto.randomUUID?.()||Ud(crypto.getRandomValues(new Uint8Array(16)))}function Dm(){const t=Bd();if(t)return t;const e=Io();return localStorage.setItem(ds,e),e}function Sn(){ko=null,xr=null,hs=!1,kr=!1}window.addEventListener("storage",t=>{t.key===ds&&Sn()});function Bm(){return new Promise((t,e)=>{const n=indexedDB.open(Om,1);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(Sr)||s.createObjectStore(Sr)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function ca(t,e){const n=await Bm();return new Promise((s,r)=>{const i=n.transaction(Sr,t);let o;try{o=e(i.objectStore(Sr))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),i.oncomplete=()=>{n.close(),s(a)},i.onerror=()=>{n.close(),r(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{n.close(),r(i.error||new Error("Encryption key transaction aborted."))}})}function jm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Um(){const t=await ca("readonly",e=>e.get(it));return jm(t)?t:null}async function jd(t){await ca("readwrite",e=>e.put(t,it))}async function Hm(){Sn();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Wm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(e),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),e}async function _c(t){const e=sessionStorage.getItem(it);if(e)return kr=sessionStorage.getItem(us)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Ir;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(it,JSON.stringify(s)),sessionStorage.setItem(us,"session"),kr=!1,crypto.subtle.importKey("jwk",s,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function zm(t){if(sessionStorage.getItem(us)==="session"&&sessionStorage.getItem(it))return vc(),hs=!0,_c(t);try{const e=await Um();if(e)return e;const n=await Wm();if(n)return n;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(s),s}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),vc(),hs=!0,_c(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=Dm();xr!==n&&Sn();const s=ko||zm(e);ko=s,xr=n;try{return await s}catch(r){throw Sn(),r}}async function qm(t){const e=await ua(),n=xr,s=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,s.encode(t)),o=new Uint8Array(r.length+i.byteLength);return o.set(r),o.set(new Uint8Array(i),r.length),{ciphertext:Ud(o),keyVersion:n,sessionFallback:hs}}async function Vm(t,e={}){const{isSessionCredential:n=!1}=e;try{const s=await ua({allowSessionFallbackCreation:!1});if(hs&&!n&&!kr)throw new Ir;const r=Gm(t),i=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},s,o);return new TextDecoder().decode(a)}catch(s){if(s instanceof Ir)throw s;return console.error("Decryption failed:",s),null}}function Ud(t){const e=new Uint8Array(t);let n="";for(let s=0;s0}let ps="",Cr="",Xn=null,wc=0;async function da(){sessionStorage.getItem(it)&&await ua(),ps=await Ee("flutterflow"),Cr=await Ee("flutterflow_project_id"),Xm(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),ps&&qd(ps)}function Hd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-modal");n&&(pa(),n.classList.add("open"))}let Et=1;function Wd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Dr(){const t=Wd();t.length&&t.forEach((e,n)=>{const s=n+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 r=e.querySelector("div:first-child");r&&(r.classList.remove("bg-gray-400"),r.classList.add("bg-blue-500"),r.innerHTML=s)}else if(s0&&Et<=t&&(Et++,Dr())}function Jm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dr(),t.classList.add("open"))}function Ym(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function zd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Dr(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");ps?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Zm()}function Zm(){bc("flutterflow","flutterflow-key-status"),bc("flutterflow_project_id","flutterflow-project-status")}function bc(t,e){const n=document.getElementById(e);if(!n)return;const s=n.querySelector(".key-status-dot"),r=n.querySelector("span");ln(t)?(s.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(s.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function Zt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),n=document.getElementById("btn-run-pipeline");n&&n.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Xm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((s,r)=>{const i=n[r];i==="flutterflow"?ln("flutterflow")&&ln("flutterflow_project_id")?(s.className="key-status-dot configured",s.title="FlutterFlow (Fully configured)"):ln("flutterflow")||ln("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)"):ln(i)?(s.className="key-status-dot configured",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(s.className="key-status-dot missing",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Zt()}async function Qm(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await yc("flutterflow",t.value);const n=e?.value.trim()||"";if(n){if(!Br(n)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await yc("flutterflow_project_id",n)}await da(),fa();const s=document.querySelector("#api-keys-modal .bg-blue-500"),r=s.textContent;s.textContent="Saved!",s.classList.remove("bg-blue-500","hover:bg-blue-600"),s.classList.add("bg-green-500"),setTimeout(()=>{s.textContent=r,s.classList.remove("bg-green-500"),s.classList.add("bg-blue-500","hover:bg-blue-600"),Hd()},1e3)}async function ev(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ds,Io()),Sn(),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),await Hm(),localStorage.setItem(ds,Io()),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"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 Br(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function tv(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function nv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;tv("flutterflow-api-key-input",n)}),t.addEventListener("blur",sv(async e=>{const n=e.target.value.trim();n&&await qd(n)},500)))}function sv(t,e){let n;return function(...r){const i=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(i,e)}}async function qd(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden");try{const r=await new _s(t,"").listProjects();if(!r||r.length===0){e.innerHTML='';return}e.innerHTML='',r.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),Cr&&(e.value=Cr)}catch(s){console.error("Failed to fetch projects:",s),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${s.message}`,n.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 iv(){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 ov(){y.bundleSpec=as(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function jr(){const t=vr(y.bundleSpec);y.artifactBundle=as(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=fg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=vr(y.artifactBundle).id}function Ur(){const t=as(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(s=>[s.id,s.review])),n=new Map(t.artifacts.filter(s=>{const r=s.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(s=>[s.id,s.review.fixedSource.trim()]));y.bundleReview=as({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(s=>{const r=n.get(s.id)||null;return{...s,review:e.get(s.id)||s.review||y.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Vd(){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(n=>n.id===y.selectedArtifactId)||vr(t)}function ma(){return ga().code||y.step2Result||""}async function av(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Vs={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function lv(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class _s{constructor(e,n,s="main",r=Vs.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=s,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const s of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const i=await r.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),s=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!s)throw new Error("Export did not contain a pubspec.yaml.");const r=s.slice(0,s.length-12),i=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[s].async("string"),files:i}}async pushCodeWithRetry(e,n=3){const s=[Vs.production,Vs.staging],r=Math.max(0,s.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(r=>({id:r.id,name:r.project?.name||r.id}))}catch(s){console.error("Failed to parse stringified project value:",s)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,s="";for(const r of e){const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await i.json());if(n=i.status,s=await i.text(),console.warn(`listProjects via ${r} returned ${n}: ${s}`),i.status===401||i.status===403)throw new Error(lv(i.status,s));if(i.status!==404)throw new Error(`List projects failed: ${i.status} - ${s}`)}throw new Error(`List projects failed: ${n} - ${s}`)}}async function va(t){const e=t.clone();let n;try{n=await t.json()}catch{const i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let r=n.message||`HTTP ${t.status}`,i=new Map;if(n.errors)i=new Map(Object.entries(n.errors));else if(!n.message&&typeof n=="object"){const o=Object.keys(n).filter(a=>a.endsWith(".dart")&&Array.isArray(n[a]));o.length>0&&(i=new Map(Object.entries(n)),r=o.flatMap(l=>n[l].map(u=>`${l}: ${u.errorMessage}`)).join(` +`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:r,errorMap:i}}let s={};if(n.value)try{s=typeof n.value=="string"?JSON.parse(n.value):n.value}catch(r){console.warn("Ignoring malformed push response value:",r)}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"},Gd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,Kd=/extends\s+State<\w+>/;function cv(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const n=Gd.test(e),s=Kd.test(e);if(n||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 Jd(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 Yf(t,e)}const Co=new Map;function Yd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hr(t){Co.delete(Yd(t))}async function wa(t,e,n,s,r=""){const i=Cg(e,n);if(i.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[]};const o=sm(i,r),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 ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(Em,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:s,customClasses:i,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 Hr(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:n,syncFileMap:Fg(e,i),unverified:l}}async function ba(t,e={}){const n=Yd(t);let s=Co.get(n);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=Ad(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(n,s)}const r=await mm(s.pubspecYaml,e),i=Xg(s.pubspecYaml,r.overrides),o=Zg(i.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${r.additions[a]||"any"}`).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:i.overridden,warnings:r.warnings,remoteFiles:s.files}}function uv(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const s=t.content.split(` +`).length;s>500&&n.push(`Code has ${s} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const i=Vg(t.content);if(i&&e.push(`FlutterFlow cannot format this code - ${i}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=Ed(t.content),a=Wg(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=`${Sd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function Zd(t,e={}){const{artifactType:n="CustomWidget",artifactName:s="GeneratedCode",fileName:r}=e,i=Ug(t);let o=r||s;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Ed(i)[0],c=u?Sd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(n){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports +import '/flutter_flow/flutter_flow_theme.dart'; +import '/flutter_flow/flutter_flow_util.dart'; +import 'package:flutter/material.dart'; +// 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:vg(i,l),fileName:o,codeType:a,artifactType:n,artifactName:s}}function dv(t){const e={};for(const n of sa(t))e[n]="";return e}function hv(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 pv(t,e,n,s=new Set,r=""){const i=[],o=Gd.test(e),a=Kd.test(e);return n===U.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:i.length===0,errors:i}}function Wr(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const s=new Set(Array.from(t.values()).flatMap(r=>Mr(r.content||"")));for(const[r,i]of t.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${r} is empty`),i.content&&i.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=pv(r,i.content,i.type,s,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Ad(i.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}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 fv(t,e,n={}){let{codeType:s="W"}=n;const{pubspecDeps:r={},artifactName:i=e}=n;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(!Br(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=vs(),u=new _s(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=s||cv(e,t),h=Jd(e,d);c.set(e,{artifactName:i,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Wr(c);if(!p.valid)throw new Error(`Validation failed: +${p.errors.join(` +`)}`);const f=await ba(u,r),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${i} 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 w=await Ea(E),I={project_id:a,zipped_custom_code:w,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),Hr(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[n,s]of t.entries())e.file(n,s.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function gv(t,e={}){const{artifactType:n,artifactName:s,fileName:r,pipelineResult:i}=e;console.log(`Starting commit for ${s} (${n})`);try{K.setState(V.PREPARING);const o=Zd(t,{artifactType:n,artifactName:s,fileName:r}),a=dv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Xn||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(!Br(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:Jd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?s:void 0}),K.setProgress(0,c.size);const d=Wr(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=vs(),p=new _s(l,u,"main",h),f=await ba(p,a),g=f.yaml,m=await wa(p,c,f.remoteFiles,`Provision ${s} 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 w=await Ea(E),I={project_id:u,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Hr(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...hv(o,i),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 mv(t,e={}){const{pipelineResult:n}=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 r=Wr(s);if(!r.valid)throw new Error(`File validation failed: +${r.errors.join(` +`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Xn||await Ee("flutterflow_project_id");if(!i)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(!Br(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=vs(),l=new _s(i,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),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,s.size),Hr(l),be.set("push");const m=await l.pushCode(g),_=await va(m);if(_.success){const I={...n,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,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const E=_.errorMessage||_a(_.responseCode),w=new Error(E);throw w.errorMap=_.errorMap,w}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 vv(t,e=[]){const n=Qo("architect");try{return await Fr("architect",Ld,Df(t),n,e)}catch(s){throw s.isModelArmor?s:new Error(`Prompt Architect failed: ${s.message}`)}}async function zr(t,e,n=[]){const s=Bf(t),r=Qo("generator",y.bundleSpec);try{return await Fr("generator",e,s,r,n)}catch(i){if(i.isModelArmor)throw i;if(e!==Fi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await Fr("generator",Fi,s,r,n)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Fi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function qr(t,e=null){const n={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Fr("review",Od,jf(t),n)}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 n=document.getElementById(`step${t}-item`),s=document.getElementById(`step${t}-status`);!n||!s||(n.classList.remove("active","completed","error"),s.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),s.classList.add("running"),s.innerHTML=` + + `):e==="completed"?(n.classList.add("completed"),s.classList.add("completed"),s.innerHTML=` + + `):e==="error"?(n.classList.add("error"),s.classList.add("error"),s.innerHTML=` + + `):s.innerHTML=` + + `)}function ve(t,e){const n=document.getElementById(`step${t}-loading`),s=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),s.classList.add("hidden"),Fo(t,"active")):(n.classList.add("hidden"),s.classList.remove("hidden"),Fo(t,"completed"))}function _v(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function yv(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 n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const s=document.getElementById(`step${t}-content`);s&&s.classList.remove("hidden");const r=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=i[t]||"Active Workflow Stage")}function wv(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(s=>{console.warn("Failed to copy to clipboard:",s)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Ld)}`),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(Od)}`)}async function bv(){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(n=>{n.disabled=!0,n.innerHTML=` + + + Refining...`});try{const n=ga(),s=Uf({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:n.id,userFeedback:"Fix the issues listed in the audit report."});Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(s,t),jr();const r=document.getElementById("step2-output"),i=bn(y.step2Result);r.textContent=i,r.dataset.raw=i,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Or(y.step3Result);Jr(i,a)}catch(n){console.error("Refinement failed:",n),$t(),ue(Sa(n,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(n=>{n.disabled=!1,n.textContent="Refine & Regenerate"}),Zt()}}async function xa(t,e,n){const s=`${Je}/connectFeedback`,r={type:t,code:e,input:n};try{const i=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function Ev(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Sv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const s=document.getElementById("btn-fix-from-errors");s&&(s.disabled=!0,s.innerHTML=` + + Fixing…`);try{const r=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});uh(),Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(r,n),jr();const i=document.getElementById("step2-output"),o=bn(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Or(y.step3Result);Jr(o,l),t&&(t.value="")}catch(r){console.error("Fix from errors failed:",r),$t(),ue(Sa(r,"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 Wv())return;await Ov();const n=$o(e);t.length;const s=document.getElementById("btn-run-pipeline");y.isRunning=!0,iv(),s.disabled=!0,s.innerHTML=` + + + Running...`,Po(n);try{Yt();const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const i=document.getElementById("paywall-exhausted");i&&i.classList.add("hidden"),Kr(),ze(1),rt(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await vv(t,o),ov();const a=document.getElementById("step1-output"),l=bn(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),rt(2),ve(2,!0),y.step2Result=await zr(y.step1Result,n,o),jr();const u=document.getElementById("step2-output"),c=bn(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Or(y.step3Result);Jr(c,h)}catch(r){if(console.error("Pipeline failed:",r),$t(),r.isUsageLimit){const{count:c}=Vr();Aa(c,Pa(),{openModal:!0});return}r.message,$o(document.getElementById("code-generator-model").value);const o=_m(r,{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(r.isModelArmor)u.innerHTML=``;else{let c=r.message;r.message.includes("image input")?c=`This model doesn't support image input. Please use ${zt(cs)} for image-based requests or remove image references from your prompt.`:(r.message.includes("Load failed")||r.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

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

    FlutterFlow Commit Failed

    +

    ${j(t.error)}

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

    Errors:

    +
      `;for(const[r,i]of e.entries()){const o=xd(i);n+=`
    • + ${j(r)}: ${j(o)} +
    • `}n+="
    "}n+="
    ",n+=`
    + +
    `;const s=document.getElementById("step3-output");s&&(s.innerHTML=n,document.getElementById("btn-regenerate-from-error")?.addEventListener("click",()=>{Fv(t.error,e)}))}async function Fv(t,e){if(y.isRunning)return;const n=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 r=`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=xd(d);r+=`File: ${c} +Error: ${h} + +`}else r+=`${t} +`;const i=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:r});Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(i,n),jr();const o=document.getElementById("step2-output"),a=bn(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=Or(y.step3Result);Jr(a,u)}catch(r){console.error("Regeneration failed:",r),$t(),ue(Sa(r,"Regeneration failed"),"error")}finally{y.isRunning=!1,s&&(s.disabled=!1,s.textContent="Fix Errors & Regenerate"),Zt()}}async function Pv(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const n=await Ee("flutterflow"),s=await Ee("flutterflow_project_id");n&&s?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):n||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 Av(t){try{const e=await fetch(`${Je}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function $v(t){try{const n=await(await fetch(`${Je}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(n.error||!n.email||!n.sessionToken)throw new Error(n.error||"Invalid or expired link");return n}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Rv(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 n=await e.json();return n.error||!n.email||!n.sessionToken?(console.warn("refreshSession: validation failed",{error:n.error,hasEmail:!!n.email,hasToken:!!n.sessionToken}),null):n}catch(e){return console.error("refreshSession: fetch failed",{url:`${Je}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function Ec(t,e){const n=Xd(),s=(G.email||n.email)!==t;G.email=t,G.sessionToken=e,G.isVerified=!0,fe=En({isLoading:!0}),localStorage.setItem(wr,JSON.stringify({email:t,sessionToken:e})),s&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=En({isResolved:!0}),localStorage.removeItem(wr),localStorage.removeItem(Er)}function Xd(){try{const t=localStorage.getItem(wr);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(wr),{email:null,sessionToken:null}}}async function Tv(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:n,sessionToken:s}=await $v(e);Ec(n,s)}catch(n){ue(n.message||"Sign-in link invalid or expired.","error")}}else{const{email:n,sessionToken:s}=Xd();if(n&&s){const r=await Rv(s);r?Ec(r.email,r.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Nv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Mv(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),n=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){n&&(n.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),n&&(n.textContent="");try{await Av(s),t&&(t.value=""),n&&(n.textContent=`Check your email — we sent a link to ${s}`),e&&(e.textContent="Sent!")}catch(i){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:s,err:i}),n&&(n.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Lv(){ka(),$a(),Ca(),Gr()}function Ca(){const t=G.isVerified&&!!G.email,e=document.getElementById("auth-signedout"),n=document.getElementById("auth-signedin"),s=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),n&&n.classList.toggle("hidden",!t),s&&s.classList.toggle("hidden",t);const r=document.getElementById("auth-user-email");r&&(r.textContent=G.email||""),Gs(),Gr()}async function Qd(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),n=e.visitorId,s=await fetch(Im,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:n})});if(!s.ok)throw new Error(`Identity check HTTP ${s.status}`);const r=await s.json();if(Ge.userId=r.user_id,Ge.token=r.identity_token||null,Ge.status=r.status,Ge.resolved=!0,sessionStorage.setItem(xm,r.user_id),Ge.token&&sessionStorage.setItem(km,Ge.token),r.usage_count!==void 0){const i=At(),a=(r.usage_month||i)===i?r.usage_count:0;localStorage.setItem(Gt,JSON.stringify({count:a,month:i})),Qn()}console.log(`Identity resolved: ${r.status} (${r.user_id.slice(0,8)}...) usage: ${r.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Pi=null;function Ov(t=5e3){return Ge.resolved?Promise.resolve():(Pi||(Pi=Qd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Pi,new Promise(e=>setTimeout(e,t))]))}function eh(){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 Vr(){const t=eh();return t.month!==At()?{count:0,month:At()}:t}function Dv(){const e={count:Vr().count+1,month:At()};return localStorage.setItem(Gt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Jt(){return!!fe.isResolved}function Bv(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(br,e)?e:null}function jv(t){return t&&Object.entries(Td).find(([,e])=>e===t)?.[0]||null}function Ns(...t){return t.find(e=>e!=null&&e!=="")}function Uv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Hv(t){const e=t.data&&typeof t.data=="object"?t.data:t,n=Uv(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),s=e.metadata||n.metadata||e.customer?.metadata||{},r=Ns(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,n.priceId,n.price_id,n.plan?.id,n.price?.id,n.items?.data?.[0]?.price?.id,n.items?.[0]?.price?.id,n.lines?.data?.[0]?.price?.id),i=Ns(e.status,e.subscriptionStatus,e.subscription_status,n.status,"none"),o=Bv(Ns(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,n.tier,n.plan,s.tier,s.plan)),a=Cm.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||jv(r)||(a||l?"professional":"free");return En({tier:u,status:i,periodEnd:Ns(e.periodEnd,e.currentPeriodEnd,e.current_period_end,n.current_period_end,n.periodEnd,null),isResolved:!0})}function Pa(){return br[fe.tier]??br.free}async function Wv(){if(G.isVerified&&(!Jt()||Fa())&&(await th({force:!0}),Gr()),G.isVerified&&!Jt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=Vr(),e=Pa();if(t>=e)return Aa(t,e,{openModal:!0}),!1;const n=Math.floor(e*.8);if(t>=n){const s=e-t;ue(`${s} run${s===1?"":"s"} remaining this month.`,"warning")}return!0}function Ai(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Aa(t,e,n={}){const s=document.getElementById("walkthrough-modal");s&&s.classList.remove("open");const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const i=document.getElementById("preview-frame-container");i&&(i.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Pr();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"),n.openModal&&Pr()}function $o(t){return fe.tier==="free"&&Ws.includes(t)?cs:t}function zv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const n=fe.tier,r=!(G.isVerified&&!Jt())&&n==="free";Array.from(e.options).forEach(o=>{const a=zt(o.value),l=Ws.includes(o.value);o.textContent=l&&r?`${a} (PRO)`:a,o.disabled=!1}),r&&Ws.includes(e.value)&&(e.value=cs),e.disabled=!1,hc.has(e)||(e.addEventListener("change",()=>{Jt()&&fe.tier==="free"&&Ws.includes(e.value)&&(e.value=cs,Pr()),Po(e.value),Md()}),hc.add(e));let i=document.getElementById("model-selector-free-notice");r?(i||(i=document.createElement("p"),i.id="model-selector-free-notice",i.className="text-xs text-gray-400 mt-1",t.appendChild(i)),i.innerHTML='Free plan — Gemini only. '):i&&i.remove(),Po(e.value)}function Qn(){const t=document.getElementById("usage-counter");if(!t)return;if(G.isVerified&&Fa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",Gs(),Ai();return}if(G.isVerified&&!Jt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",Gs(),Ai();return}const{count:e}=Vr(),n=Pa();t.textContent=`${e} / ${n} runs this month`;const s=n>0?e/n: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",Gs(),e>=n&&!y.isRunning?Aa(e,n):Ai()}function Gs(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=eh(),n=e.month===At()?e.count??0:0,s=br.free;t.textContent=`${n} / ${s} generations used`}async function th(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=En({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const n=localStorage.getItem(Er);if(!e&&n)try{const{data:s,email:r,ts:i,version:o}=JSON.parse(n);if(o===pc&&r===G.email&&Date.now()-i<300*1e3){fe={...s,isLoading:!1,isResolved:s.isResolved!==!1};return}}catch(s){console.warn("Failed to parse subscription cache:",s,"| raw value:",n)}try{const r=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(r.error){if(["unauthorized","invalid session","expired session"].some(o=>String(r.error).toLowerCase().includes(o))){ka(),Ca();return}fe=En({isResolved:!1,error:r.error});return}fe=Hv(r),localStorage.setItem(Er,JSON.stringify({version:pc,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(Er)}async function qv(t){if(!G.isVerified||!G.sessionToken){nh(),Ia();return}if(!Td[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:Dd()})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to create checkout session");const{url:r}=s;window.location.href=r}catch(n){console.error("startCheckout failed:",n),e&&(e.disabled=!1,e.textContent="Subscribe"),ue("Could not start checkout. Please try again.","error")}}async function Vv(){if(!G.isVerified||!G.sessionToken){Ia();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const n=await(await fetch(`${Je}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:G.sessionToken})})).json();if(n.error||!n.url)throw new Error(n.error||"Failed to open billing portal");const{url:s}=n;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 Fr(t,e,n,s={},r=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(Sm,{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:n,images:r,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()})),Qn());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=Kf(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})),Qn())}else Dv(),Qn();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 Gv(){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 Gr(){const t=G.isVerified&&!!G.email,e=fe.tier,n=t&&Fa(),s=!t||Jt(),r=document.getElementById("subscription-tier-badge");if(r){const a={free:"Free",professional:"Professional",power:"Power Developer"},l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};r.textContent=n?"Checking…":s?a[e]||"Free":"Plan unavailable",r.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${s?l[e]||l.free:l.unresolved}`}const i=document.getElementById("upgrade-prompt");i&&i.classList.toggle("hidden",!t||n||!s||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||n||s&&e==="free"),Kv(s?e:null),zv(),Md(),Qn()}function Kv(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([r,{btnId:i,defaultText:o}])=>{const a=document.getElementById(i);a&&(r===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const s=document.getElementById("free-tier-current");s&&s.classList.toggle("hidden",t!=="free")}function Ro(){const t=Dd(),e=document.getElementById("pro-price"),n=document.getElementById("power-price"),s=document.getElementById("pro-price-note"),r=document.getElementById("power-price-note");e&&(e.textContent=gc(fc.professional,t)),n&&(n.textContent=gc(fc.power,t));const i="billed monthly";s&&(s.textContent=i),r&&(r.textContent=i)}function Pr(){Ro();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Lm().then(()=>Ro())}function nh(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 n={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},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 ${n[e]||n.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-"}),Jv(),await Tv(),Gv(),await th(),Gr(),Ro(),await av(),nv();const t=document.getElementById("flutterflow-endpoint-select");if(t){const n=vs();t.value=n}zd(),Qd();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(pa(),Dr())}),e.addEventListener("blur",()=>{const n=document.getElementById("walkthrough-modal");Et===2&&n&&n.classList.add("open")}),e.addEventListener("keydown",n=>{if(n.key==="Tab"){const s=document.getElementById("walkthrough-modal");Et===2&&s&&setTimeout(()=>{s.classList.add("open")},100)}})),window.addEventListener("commitStateChange",n=>{const{state:s}=n.detail;s===V.PREPARING||s===V.VALIDATING||s===V.PUSHING?(be.phaseId||ih(),xc(s)):(s===V.SUCCESS||s===V.ERROR)&&(xc(s),setTimeout(Ar,1e3))})});function Jv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Yv(){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"),n=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),n&&n.classList.remove("hidden");const s=document.getElementById("welcome-video-player");s&&s.removeEventListener("click",Yt),document.removeEventListener("keydown",Yt),zd()}let es=null;async function Zv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++wc,n=()=>e===wc,s=await Ee("flutterflow"),r=await Ee("flutterflow_project_id");if(n()){if(!s){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new _s(s,"").listProjects();if(!n())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),r&&(t.value=r)}catch(i){if(!n())return;console.error("Failed to load projects for deploy:",i),t.innerHTML=''}}}function Xv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function sh(t,e,n,s=null){es={codeInfo:t,checks:e,deps:n,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,Zv();const r=document.getElementById("confirm-deps-list"),i=document.getElementById("confirm-deps-section");n&&Object.keys(n).length>0?(r.innerHTML=Object.entries(n).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
  • • ${bt(u)}: ${d}
  • `}).join(""),i.classList.remove("hidden")):i.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(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 rh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),es=null}function Qv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const n=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const i of n){const o=document.getElementById(i);o&&(o.textContent="")}const s=document.getElementById("success-warnings-section");s&&s.classList.add("hidden");const r=document.getElementById("success-warnings-list");r&&(r.innerHTML="")}function To(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},n=t.metadata?.fileName||"",s=t.metadata?.projectId||"",r=t.metadata?.artifactType||"",i=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",n),e("success-artifact-type",r),e("success-time",i),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.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 No(t){Ar(),Cv(t)}function e_(){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 Sc={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}},t_=[{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(!(!Sc[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const n=this.sequence.indexOf("package");this.sequence.splice(n===-1?this.sequence.length:n,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Sc[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,n=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=t_.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const s=this.sequence.indexOf(this.phaseId),i=[`Step ${s===-1?1:s+1} of ${this.sequence.length}`];e>=5&&i.push(n_(e)),oh(this.phaseId==="done"?100:n,t.message,i.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 n_(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 ih(t){be.start(t)}function Ar(){be.stop()}function oh(t,e,n,s=null){const r=document.getElementById("commit-progress-bar"),i=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");r&&(r.style.width=`${Math.round(t*10)/10}%`),i&&(i.textContent=e),o&&(o.textContent=n),a&&(a.textContent=s||"",a.classList.toggle("hidden",!s))}function xc(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,oh(100,"Failed","Error occurred");return}const n=e[t];n&&be.set(n)}function s_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function r_(){if(!es){console.error("No pending commit data");return}const t=es;if(es=null,Xn=Xv(),rh(),ih({withProvisioning:s_(t)}),t.bundlePlan){const o=await mv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Xn=null,Ar(),o.success?To(o):No(o);return}const{codeInfo:e}=t,{artifactType:n,artifactName:s,fileName:r}=Vd(),i=await gv(e.content,{artifactType:n,artifactName:s,fileName:r,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Xn=null,Ar(),i.success?To(i):No(i)}window.runThinkingPipeline=Ao;window.toggleStep=yv;window.toggleSection=_v;window.selectWorkflowStep=ze;window.copyCode=wv;window.retryWithDifferentModel=xv;window.openApiKeysModal=ha;window.closeApiKeysModal=Hd;window.closeWalkthroughModal=Ym;window.openWalkthroughModal=Jm;window.advanceWalkthrough=pa;window.commitToFlutterFlow=fv;function i_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function o_(){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=i_;window.openModelSelector=o_;window.handlePromptImageSelect=Nm;window.removePromptImage=Mm;window.saveApiKeys=Qm;window.clearAllApiKeys=ev;window.toggleKeyVisibility=rv;window.handleWelcomeVideoEnd=Yv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=kv;window.updateFlutterFlowCredentialStatus=Pv;window.closeCommitConfirmModal=rh;window.closeCommitSuccessModal=Qv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=e_;window.confirmCommitToFlutterFlow=r_;window.runRefinement=bv;window.regenerateFromPastedErrors=Sv;window.clearErrorInput=Ev;window.setFlutterFlowEndpoint=Km;window.getFlutterFlowEndpoint=vs;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Nv;window.handleMagicLinkRequest=Mv;window.handleSignOut=Lv;window.startCheckout=qv;window.openCustomerPortal=Vv;window.openPricingModal=Pr;window.closePricingModal=nh;let pn=null,ah=null;const kc=120;function Kr(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),n=document.getElementById("ready-state");n&&n.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),ah=Date.now();for(let s=1;s<=3;s++){const r=document.getElementById(`pdot-${s}`);r&&(r.className="progress-dot")}rt(1),a_()}function rt(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},n={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},s=document.getElementById("progress-title-text"),r=document.getElementById("progress-substep-text");s&&(s.textContent=e[t]||e[1]),r&&(r.textContent=n[t]||n[1]);for(let i=1;i<=3;i++){const o=document.getElementById(`pdot-${i}`);o&&(i{const t=(Date.now()-ah)/1e3,e=document.getElementById("progress-elapsed"),n=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const s=t/kc*100,r=Math.min(95,s*(1-Math.exp(-t/(kc*.6)))*1.2);n&&(n.style.width=`${r}%`)},250)}function $t(){pn&&(clearInterval(pn),pn=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const n=document.getElementById(`pdot-${e}`);n&&(n.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function xn(t,e=""){const n={pass:'',warning:'',fail:'',info:''};return``}function lh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function l_(){return Bg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function c_(t){return` +
    + ${xn(t.severity)} +
    +
    ${j(t.message)}
    + ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} + ${j(t.source)} +
    +
    + `}function u_(t){return` +
  • +
    + ${j(t.title)} + ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

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

    ${xn("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 h_(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const n={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],s=e.findings.length?e.findings.map(c_).join(""):`
    ${xn(n.icon)} ${j(n.message)}
    `,r=e.dependencies?.length?e.dependencies.map(l=>` +
  • ${j(l.name)}${l.version?` ${j(l.version)}`:""}${l.reason?`

    ${j(l.reason)}

    `:""}
  • + `).join(""):'
  • No external packages
  • ',i=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` +
    +
    + ${xn(e.status)} ${j(lh(e.status))} +

    ${j(e.artifactName)}

    + ${e.description?`

    ${j(e.description)}

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

    Code Review findings

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

    Manual FlutterFlow steps for this file

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

    Dependencies

    +
      ${r}
    +
    +
    +

    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

    +
    ${i}
    +
    +
    +

    Relationships

    +
      ${a}
    +
    +
    + `}function p_(t){const e=document.getElementById("bundle-strip"),n=document.getElementById("results-summary-tab"),s=document.getElementById("artifact-tabs"),r=document.getElementById("results-file-count");if(n&&n.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){r&&(r.textContent="0 files"),e&&e.classList.remove("visible"),s&&(s.innerHTML="");return}if(r){const i=t.artifacts.length;r.textContent=`${i} ${i===1?"file":"files"}`}s&&(s.innerHTML=t.artifacts.map(i=>` + + `).join(""),s.onclick=i=>{const o=i.target.closest(".artifact-tab");o?.dataset?.artifactId&&ch(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"),n=document.getElementById("results-audit-output"),s=document.getElementById("results-summary-detail"),r=document.getElementById("artifact-results-split"),i=l_(),o=ma();if(d_(i),p_(i),e&&(e.textContent=""),e){const a=Rd(o);e.innerHTML=a}n&&(n.innerHTML=h_(i)),s&&s.classList.toggle("hidden",y.resultsViewMode!=="summary"),r&&r.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Jr(t,e){y.selectedArtifactId||(y.selectedArtifactId=vr(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const n=document.getElementById("step3-output");n&&(n.textContent=""),Ra(),Zt();const s=document.getElementById("btn-feedback-up"),r=document.getElementById("btn-feedback-down");s&&(s.className="feedback-btn"),r&&(r.className="feedback-btn")}function ch(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function f_(){y.resultsViewMode="summary",Ra()}function g_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const n=t.querySelector("span");if(n){const s=n.textContent;n.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),n.textContent=s},2e3)}}})}function m_(t){const e=document.getElementById("btn-feedback-up"),n=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),n.classList.remove("active-down")):(n.classList.toggle("active-down"),e.classList.remove("active-up")),xa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function v_(){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 uh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=g_;window.selectArtifact=ch;window.selectResultsSummary=f_;window.submitResultsFeedback=m_;window.showErrorInputPanel=v_;window.hideErrorInputPanel=uh; diff --git a/dist/index.html b/dist/index.html index c896f5e..60cb94f 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2420,7 +2420,7 @@ .pm-cards { padding: 0 16px; } } - +
    diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 9517717..18c7ed6 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -294,6 +294,55 @@ test("a version-constraint override is carried and does not skip anything", () = assert.deepEqual(plan.skipped, []); }); +test("a conditional import of the unreproducible dependency is skipped, not refused", () => { + // `if (...)` names a second URI the code needs when the condition holds; a + // scan that reads only the first URI would send the class to the runner + // without private_thing in its manifest, and the analyzer's missing-URI + // diagnostic would refuse the deploy instead of reporting it unverified. + const conditional = `import 'package:background_downloader/background_downloader.dart' if (dart.library.io) 'package:private_thing/private_thing.dart'; + +class ConditionallyPrivate {} +`; + + const plan = planCustomCodeVerification( + [{ className: "ConditionallyPrivate", content: conditional }], + PROJECT_PUBSPEC, + ); + + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); + assert.match(plan.skipped[0].reason, /private_thing/); +}); + +test("an SDK dependency declared inline reproduces instead of breaking the manifest", () => { + // `flutter_web_plugins: {sdk: flutter}` is the same declaration as the + // block form; treated as a scalar it would be forwarded as a constraint + // whose braces the runner rejects, refusing the whole deploy. + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + flutter_web_plugins: {sdk: flutter} + background_downloader: ^8.5.0 +`; + + const manifest = buildAnalysisManifest(pubspec); + assert.ok(manifest.sdkPackages.includes("flutter_web_plugins")); + assert.deepEqual(manifest.unrepresentable, []); + assert.equal("flutter_web_plugins" in manifest.dependencies, false); + + const plan = planCustomCodeVerification( + [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], + pubspec, + ); + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); +}); + test("an SDK package no list has heard of is reproduced from its pubspec source", () => { // The regression: flutter_web_plugins is a genuine Flutter SDK package that // the hand-kept list omitted, so every project declaring it - which is every diff --git a/src/dartPackageImports.js b/src/dartPackageImports.js index 907032d..097ac8e 100644 --- a/src/dartPackageImports.js +++ b/src/dartPackageImports.js @@ -56,19 +56,13 @@ function stripComments(code) { return out; } -/** - * Scans Dart source for `package:name/...` imports and returns the - * third-party pub.dev packages it references, in first-seen order. - * - * This is what a generated action's real dependencies are - not whatever an - * AI-authored spec declared alongside it. A declared dependency list can miss - * a package the code actually imports (a manual edit, a regeneration cycle - * that added an import without updating the spec), and FlutterFlow rejects a - * push whose pubspec.yaml omits a package the code imports. - * - * @param {string} code - Dart source - * @returns {string[]} Package names, deduplicated - */ +// A directive can carry further URIs in its `if (...)` clauses - each names +// the file imported when the condition holds, so every quoted literal inside +// an import/export directive is code the class needs. The directive regex +// runs to the closing `;`; string literals can never contain one. +const DIRECTIVE_PATTERN = /\b(?:import|export)\s+(?=['"])[^;]*;/g; +const URI_PATTERN = /(['"])([^'"\n]+)\1/g; + /** * Returns every URI the source imports or exports, in first-seen order. * @@ -83,15 +77,18 @@ function stripComments(code) { export function extractImportUris(code = "") { const uris = []; const seen = new Set(); - const directiveRegex = /\b(?:import|export)\s+(['"])([^'"\n]+)\1/g; const stripped = stripComments(code); - let match; + let directive; - while ((match = directiveRegex.exec(stripped)) !== null) { - const uri = match[2]; - if (seen.has(uri)) continue; - seen.add(uri); - uris.push(uri); + while ((directive = DIRECTIVE_PATTERN.exec(stripped)) !== null) { + URI_PATTERN.lastIndex = 0; + let match; + while ((match = URI_PATTERN.exec(directive[0])) !== null) { + const uri = match[2]; + if (seen.has(uri)) continue; + seen.add(uri); + uris.push(uri); + } } return uris; @@ -101,16 +98,21 @@ export function extractPackageImports(code = "") { const names = []; const seen = new Set(); // `export 'package:x/x.dart'` pulls the package in exactly as `import` does, - // so both directives name a dependency the code needs. - const importRegex = /\b(?:import|export)\s+['"]package:([a-zA-Z0-9_]+)\//g; + // and an `if (...)` clause's alternative URI does the same when its + // condition holds, so every package URI in a directive names a dependency. + const packageUriPattern = /['"]package:([a-zA-Z0-9_]+)\//g; const stripped = stripComments(code); - let match; + let directive; - while ((match = importRegex.exec(stripped)) !== null) { - const name = match[1]; - if (FLUTTER_SDK_PACKAGES.has(name) || seen.has(name)) continue; - seen.add(name); - names.push(name); + while ((directive = DIRECTIVE_PATTERN.exec(stripped)) !== null) { + packageUriPattern.lastIndex = 0; + let match; + while ((match = packageUriPattern.exec(directive[0])) !== null) { + const name = match[1]; + if (FLUTTER_SDK_PACKAGES.has(name) || seen.has(name)) continue; + seen.add(name); + names.push(name); + } } return names; diff --git a/src/dartPackageImports.test.js b/src/dartPackageImports.test.js index 660fb40..f1fa8dd 100644 --- a/src/dartPackageImports.test.js +++ b/src/dartPackageImports.test.js @@ -1,6 +1,9 @@ import assert from "node:assert/strict"; import test from "node:test"; -import { extractPackageImports } from "./dartPackageImports.js"; +import { + extractImportUris, + extractPackageImports, +} from "./dartPackageImports.js"; test("detects a single third-party package import", () => { assert.deepEqual( @@ -70,6 +73,36 @@ test("ignores an import mentioned only in a block comment", () => { assert.deepEqual(extractPackageImports(code), []); }); +test("reads every URI a directive carries, including conditional alternatives", () => { + // `if (dart.library.io) 'x.dart'` selects another file the code needs, so + // both URIs in the directive count. + const code = + "import 'package:public_api/public_api.dart' if (dart.library.io) 'package:private_types/private_types.dart';\n" + + "export 'src/iface.dart' if (dart.library.html) 'package:web_impl/web_impl.dart';\n" + + "class Conditional {}\n"; + + assert.deepEqual(extractPackageImports(code), [ + "public_api", + "private_types", + "web_impl", + ]); + assert.deepEqual(extractImportUris(code), [ + "package:public_api/public_api.dart", + "package:private_types/private_types.dart", + "src/iface.dart", + "package:web_impl/web_impl.dart", + ]); +}); + +test("a conditional URI in a comment is not a dependency", () => { + const code = [ + "// import 'package:a/a.dart' if (dart.library.io) 'package:b/b.dart';", + "class Plain {}", + ].join("\n"); + + assert.deepEqual(extractPackageImports(code), []); +}); + test("still detects a real import on the line after a comment mentioning a different package", () => { const code = [ "// consider package:geocoding/geocoding.dart later", diff --git a/src/pubspecSync.js b/src/pubspecSync.js index 8c0961c..e037060 100644 --- a/src/pubspecSync.js +++ b/src/pubspecSync.js @@ -156,12 +156,107 @@ function readSourceDirective(lines, entryIndex, endIndex, parentIndent) { return version; } +/** + * Reads the source key of a dependency written as an inline flow mapping. + * + * YAML allows the same mapping inline that readSourceDirective reads in block + * form: `name: {sdk: flutter}` is the same declaration as the block form, and + * `name: {version: ^1.0.0, hosted: {name: x, url: y}}` puts version beside its + * source exactly as the block form does. The same precedence applies: a source + * key wins over `version:`. + * + * Without this an inline mapping looks scalar - its value is nonempty - and + * gets forwarded as a version constraint, which the runner then rejects for + * containing braces. A map whose members cannot be read yields key null, so + * the entry is classified unrepresentable rather than sent downstream as + * something it is not. + * + * @param {string} value - The text after `name:` on the dependency's own line + * @returns {{key: string|null, value: string|null}|null} The source own-key, + * else the `version:` own-key, key null for an unreadable mapping, or null + * when the value is not a flow mapping at all + */ +function parseFlowSourceDirective(value) { + const text = String(value || "").trim(); + if (!text.startsWith("{")) return null; + + // Find the closing brace, skipping nested mappings and quoted text. + let quote = null; + let depth = 0; + let end = -1; + for (let i = 0; i < text.length; i += 1) { + const char = text[i]; + if (quote) { + if (char === quote) quote = null; + continue; + } + if (char === "'" || char === '"') { + quote = char; + continue; + } + if (char === "{") depth += 1; + else if (char === "}") { + depth -= 1; + if (depth === 0) { + end = i; + break; + } + if (depth < 0) return { key: null, value: null }; + } + } + if (end === -1) return { key: null, value: null }; + + // Split the members on top-level commas only - a comma inside a nested map + // or a quote belongs to the member, not the map. + const inner = text.slice(1, end); + const segments = []; + quote = null; + depth = 0; + let start = 0; + for (let i = 0; i < inner.length; i += 1) { + const char = inner[i]; + if (quote) { + if (char === quote) quote = null; + continue; + } + if (char === "'" || char === '"') { + quote = char; + continue; + } + if (char === "{" || char === "[") depth += 1; + else if (char === "}" || char === "]") depth -= 1; + else if (char === "," && depth === 0) { + segments.push(inner.slice(start, i)); + start = i + 1; + } + } + segments.push(inner.slice(start)); + + let version = null; + for (const segment of segments) { + const trimmed = segment.trim(); + if (!trimmed) continue; + const key = parseDependencyName(trimmed); + if (!key) return { key: null, value: null }; + const { value: memberValue } = splitValueAndComment( + trimmed.slice(trimmed.indexOf(":") + 1), + ); + if (key === "version") { + version = { key, value: memberValue }; + continue; + } + return { key, value: memberValue }; + } + return version ?? { key: null, value: null }; +} + /** * Reads every package declared under `dependencies:` with its constraint. * * A dependency written in block form (`sdk:`, `git:`, `path:`, or a nested - * `version:`) has no scalar constraint and must never be rewritten as one, so - * it is reported with `isScalar: false`. + * `version:`) or as an inline flow mapping (`{sdk: flutter}`) has no scalar + * constraint and must never be rewritten as one, so it is reported with + * `isScalar: false`. * * @param {string} yamlContent - Raw pubspec.yaml content * @returns {Map} @@ -186,13 +281,17 @@ export function parseExistingDependencies(yamlContent) { const { value, comment } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); - const isScalar = value !== ""; + // An inline `{sdk: flutter}`-style mapping is not a constraint, so it is + // read for its own source keys like a block entry is. + const flowSource = parseFlowSourceDirective(value); + const isScalar = value !== "" && flowSource === null; // A block-form entry carries its source on the next line down. A scalar one // has nothing deeper, and looking anyway would walk into whichever // dependency follows. const directive = isScalar ? null - : readSourceDirective(lines, i, block.endIndex, block.childIndent.length); + : (flowSource ?? + readSourceDirective(lines, i, block.endIndex, block.childIndent.length)); declared.set(name, { constraint: value, @@ -244,13 +343,15 @@ export function parseDependencyBlock(yamlContent, blockName) { const { value, comment } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); - const isScalar = value !== ""; + const flowSource = parseFlowSourceDirective(value); + const isScalar = value !== "" && flowSource === null; // A block-form entry carries its source on the next line down. A scalar one // has nothing deeper, and looking anyway would walk into whichever // dependency follows. const directive = isScalar ? null - : readSourceDirective(lines, i, block.endIndex, block.childIndent.length); + : (flowSource ?? + readSourceDirective(lines, i, block.endIndex, block.childIndent.length)); declared.set(name, { constraint: value, diff --git a/src/pubspecSync.test.js b/src/pubspecSync.test.js index ed4dd79..c799d45 100644 --- a/src/pubspecSync.test.js +++ b/src/pubspecSync.test.js @@ -253,6 +253,40 @@ test("a git source keeps only its first key, whatever the nested shape", () => { assert.equal(declared.get("hosted_thing").sourceKey, "hosted"); }); +test("an inline flow mapping is read as a source, not a constraint", () => { + // YAML permits the same mapping inline: `name: {sdk: flutter}` declares the + // same thing as the block form. Reading it as a scalar would forward braces + // as a version constraint, which the runner rejects. + const pubspec = `dependencies: + flutter: + sdk: flutter + flutter_web_plugins: {sdk: flutter} + private_thing: {git: {url: https://example.invalid/private.git}} + pinned_thing: {version: ^1.2.0} + hosted_thing: {version: ^1.0.0, hosted: {name: hosted_thing, url: https://example.invalid}} +`; + const declared = parseExistingDependencies(pubspec); + + assert.equal(declared.get("flutter_web_plugins").sourceKey, "sdk"); + assert.equal(declared.get("flutter_web_plugins").isScalar, false); + assert.equal(declared.get("private_thing").sourceKey, "git"); + assert.equal(declared.get("pinned_thing").sourceKey, "version"); + assert.equal(declared.get("pinned_thing").sourceValue, "^1.2.0"); + // Mapping order is not significant, so a source key wins over a version + // written before it. + assert.equal(declared.get("hosted_thing").sourceKey, "hosted"); +}); + +test("a flow mapping that cannot be read is unrepresentable, not a constraint", () => { + const pubspec = `dependencies: + broken_thing: {sdk: flutter +`; + const declared = parseExistingDependencies(pubspec); + + assert.equal(declared.get("broken_thing").isScalar, false); + assert.equal(declared.get("broken_thing").sourceKey, null); +}); + test("reads a source from dependency_overrides too", () => { const overrides = parseDependencyBlock( `dependency_overrides: From c90038db7f903c256db51d4511523df021427e93 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 08:18:22 +0000 Subject: [PATCH 04/18] fix: let a semicolon inside a quoted URI pass the directive regex Co-Authored-By: Stuart Gardoll --- .../{index-DHpvl4SC.js => index-DqH8D0VZ.js} | 2 +- dist/index.html | 2 +- src/dartPackageImports.js | 7 +++++-- src/dartPackageImports.test.js | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) rename dist/assets/{index-DHpvl4SC.js => index-DqH8D0VZ.js} (99%) diff --git a/dist/assets/index-DHpvl4SC.js b/dist/assets/index-DqH8D0VZ.js similarity index 99% rename from dist/assets/index-DHpvl4SC.js rename to dist/assets/index-DqH8D0VZ.js index b632906..2357b98 100644 --- a/dist/assets/index-DHpvl4SC.js +++ b/dist/assets/index-DqH8D0VZ.js @@ -28,7 +28,7 @@ class _S extends State { @override Widget build(BuildContext c) => Padding(pa `;)n++;e+=" "}else if(s==="/*"){for(n+=2;n"&&(n--,n===0))return{inner:t.slice(e+1,s),end:s+1};return null}function ng(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let s=0;for(let r=n.index+n[0].length-1;rsg(t).usable);function ig(t=""){const e=ls(t);return rg.filter(n=>n.detect(e)).map(({id:n,severity:s,message:r})=>({id:n,severity:s,message:r}))}function og(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const s of n){let r=s.index+6,i=null;const o=r;for(;ro;if(t[r]==="<"){const u=tg(t,r);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rXl(o.functionName)===s);if(r)return r;const i=o=>!o.functionName.startsWith("_");return n.find(i)||n[0]}function Mr(t=""){return Array.from(ls(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ag(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 lg(t,e){const n=Mr(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>Ql(l)===r)||n.length>1)return null;const[o]=n,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 na(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function cg(t,e,n=""){const s=ta(e,n)?.functionName;if(!s)return null;const r=String(t||"").split("/").pop(),i=ea(r,"A");if(i===s)return null;const o=`${na(s)}.dart`;return`File name "${r}" does not match Action "${s}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function ug(t="",e=""){return ta(t,e)!==null}function dg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(s=>Xf.has(s)?!1:!Qf.some(i=>s.endsWith(i))||e.has(s))}function hg(t,{functionName:e="",declaredTypes:n=new Set}={}){const s=ag(t,e),r=dg(s,n);if(r.length===0)return null;const[i]=r;let o;return n.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:s===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function pg(t,e={}){const n=[],s=t.fileName||"",r=t.code||"";if(Zf.has(t.artifactType)||n.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),s.endsWith(".dart")||n.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of ig(r))n.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!ug(r,t.artifactName)&&n.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Mr(r)),o=hg(r,{functionName:t.artifactName,declaredTypes:i});o&&n.push(Qe(t,"error",o));const a=cg(s,r,t.artifactName);a&&n.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=lg(s,r);i&&n.push(Qe(t,"info",i))}return n}function fg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(i=>Mr(i.code||""))),s=e.flatMap(i=>pg(i,{declaredTypes:n})),r=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Zl[i.artifactType]||Zl.CodeFile}));return{valid:s.every(i=>i.severity!=="error"),findings:s,deployHints:r}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function gg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const mg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function vg(t="",e=""){const n=gg(t),s=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),r=n.split(` `).filter(i=>{const o=tc(i);return o===null||!s.has(o)?!0:!mg.test(i)}).join(` `).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const _g=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function _d(t){let e="",n=0;for(;n{const s=n.name||n.package;if(!s||s==="flutter")return e;const r=n.versionRequired||n.required;return e[s]=r&&n.version||"",e},{})}function Eg(t){const e=new Map,n=new Map,s=[];for(const r of t)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return s}function Sg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];r.forEach(p=>{const f=bg(p),g=p.fixedCode||p.code||"",m=p.codeType||yg[p.artifactType]||Ne.OTHER;g.trim()||i.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||wg(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} +`;)n++;e+=" "}else if(s==="/*"){for(n+=2;n{const s=n.name||n.package;if(!s||s==="flutter")return e;const r=n.versionRequired||n.required;return e[s]=r&&n.version||"",e},{})}function Eg(t){const e=new Map,n=new Map,s=[];for(const r of t)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return s}function Sg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];r.forEach(p=>{const f=bg(p),g=p.fixedCode||p.code||"",m=p.codeType||yg[p.artifactType]||Ne.OTHER;g.trim()||i.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||wg(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),...r.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};r.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=Eg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:i,errors:h}}function xg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function kg(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 Ig(t,e){const s=[kg(t),xg(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function Cg(t,e=new Map){const n=[];for(const[s,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||s,className:Ig(s,r),content:r.content,fileName:s,path:r.path});return n}function Fg(t,e){const n=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!n.has(s.path)))}const rc={pass:0,warning:1,fail:2},Pg=["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 n=e.filter(s=>typeof s=="string").join(` diff --git a/dist/index.html b/dist/index.html index 60cb94f..9363314 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2420,7 +2420,7 @@ .pm-cards { padding: 0 16px; } } - +
    diff --git a/src/dartPackageImports.js b/src/dartPackageImports.js index 097ac8e..90bf02a 100644 --- a/src/dartPackageImports.js +++ b/src/dartPackageImports.js @@ -59,8 +59,11 @@ function stripComments(code) { // A directive can carry further URIs in its `if (...)` clauses - each names // the file imported when the condition holds, so every quoted literal inside // an import/export directive is code the class needs. The directive regex -// runs to the closing `;`; string literals can never contain one. -const DIRECTIVE_PATTERN = /\b(?:import|export)\s+(?=['"])[^;]*;/g; +// runs to the closing `;`, stepping over quoted literals whole because a +// string is the one place a `;` is legal - `import 'src/a;b.dart';` names a +// file, and stopping at its `;` would lose the URI. +const DIRECTIVE_PATTERN = + /\b(?:import|export)\s+(?=['"])(?:'[^'\n]*'|"[^"\n]*"|[^;'"])*;/g; const URI_PATTERN = /(['"])([^'"\n]+)\1/g; /** diff --git a/src/dartPackageImports.test.js b/src/dartPackageImports.test.js index f1fa8dd..f5232dc 100644 --- a/src/dartPackageImports.test.js +++ b/src/dartPackageImports.test.js @@ -94,6 +94,23 @@ test("reads every URI a directive carries, including conditional alternatives", ]); }); +test("a semicolon inside a quoted URI does not end the directive", () => { + // `;` is legal in a Dart URI - `src/a;b.dart` is a real filename. Cutting + // the directive there would lose the URI entirely, and a conditional + // alternative written after it would be lost with it. + const code = + "import 'src/a;b.dart' if (dart.library.io) 'package:io_impl/io_impl.dart' show A;\n" + + "export \"src/b;c.dart\";\n" + + "class Plain {}\n"; + + assert.deepEqual(extractImportUris(code), [ + "src/a;b.dart", + "package:io_impl/io_impl.dart", + "src/b;c.dart", + ]); + assert.deepEqual(extractPackageImports(code), ["io_impl"]); +}); + test("a conditional URI in a comment is not a dependency", () => { const code = [ "// import 'package:a/a.dart' if (dart.library.io) 'package:b/b.dart';", From 5a3be974e25687487faea83235db8efeae449808 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 08:25:11 +0000 Subject: [PATCH 05/18] fix: consume escape pairs so an escaped quote does not end a URI literal Co-Authored-By: Stuart Gardoll --- .../{index-DqH8D0VZ.js => index-BDn1Z4T-.js} | 2 +- dist/index.html | 2 +- src/dartPackageImports.js | 8 +++++--- src/dartPackageImports.test.js | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) rename dist/assets/{index-DqH8D0VZ.js => index-BDn1Z4T-.js} (99%) diff --git a/dist/assets/index-DqH8D0VZ.js b/dist/assets/index-BDn1Z4T-.js similarity index 99% rename from dist/assets/index-DqH8D0VZ.js rename to dist/assets/index-BDn1Z4T-.js index 2357b98..438d2b3 100644 --- a/dist/assets/index-DqH8D0VZ.js +++ b/dist/assets/index-BDn1Z4T-.js @@ -28,7 +28,7 @@ class _S extends State { @override Widget build(BuildContext c) => Padding(pa `;)n++;e+=" "}else if(s==="/*"){for(n+=2;n"&&(n--,n===0))return{inner:t.slice(e+1,s),end:s+1};return null}function ng(t,e){const n=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!n)return null;let s=0;for(let r=n.index+n[0].length-1;rsg(t).usable);function ig(t=""){const e=ls(t);return rg.filter(n=>n.detect(e)).map(({id:n,severity:s,message:r})=>({id:n,severity:s,message:r}))}function og(t){const e=[],n=t.matchAll(/\bFuture\b/g);for(const s of n){let r=s.index+6,i=null;const o=r;for(;ro;if(t[r]==="<"){const u=tg(t,r);if(!u||(i=u.inner.replace(/\s+/g," ").trim(),r=u.end,!/\s/.test(t[r]||"")))continue;for(;rXl(o.functionName)===s);if(r)return r;const i=o=>!o.functionName.startsWith("_");return n.find(i)||n[0]}function Mr(t=""){return Array.from(ls(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ag(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 lg(t,e){const n=Mr(e);if(n.length===0)return null;const r=String(t||"").split("/").pop().replace(/\.dart$/,"");if(n.some(l=>Ql(l)===r)||n.length>1)return null;const[o]=n,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 na(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function cg(t,e,n=""){const s=ta(e,n)?.functionName;if(!s)return null;const r=String(t||"").split("/").pop(),i=ea(r,"A");if(i===s)return null;const o=`${na(s)}.dart`;return`File name "${r}" does not match Action "${s}". FlutterFlow derives the action from the file name, so it looks for "${i}" and reports Action "${i}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${i}".`}function ug(t="",e=""){return ta(t,e)!==null}function dg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(s=>Xf.has(s)?!1:!Qf.some(i=>s.endsWith(i))||e.has(s))}function hg(t,{functionName:e="",declaredTypes:n=new Set}={}){const s=ag(t,e),r=dg(s,n);if(r.length===0)return null;const[i]=r;let o;return n.has(i)?o=`uses Code File type "${i}", which FlutterFlow cannot process as an Action Return Value`:s===i?o="is not a FlutterFlow Action Return Value":o=`uses type "${i}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function pg(t,e={}){const n=[],s=t.fileName||"",r=t.code||"";if(Zf.has(t.artifactType)||n.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),s.endsWith(".dart")||n.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!r.trim())return n.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),n;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)||n.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const i of ig(r))n.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!ug(r,t.artifactName)&&n.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const i=e.declaredTypes||new Set(Mr(r)),o=hg(r,{functionName:t.artifactName,declaredTypes:i});o&&n.push(Qe(t,"error",o));const a=cg(s,r,t.artifactName);a&&n.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(r)&&n.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const i=lg(s,r);i&&n.push(Qe(t,"info",i))}return n}function fg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],n=new Set(e.flatMap(i=>Mr(i.code||""))),s=e.flatMap(i=>pg(i,{declaredTypes:n})),r=e.map(i=>({artifactId:i.id,fileName:i.fileName,pathHint:Zl[i.artifactType]||Zl.CodeFile}));return{valid:s.every(i=>i.severity!=="error"),findings:s,deployHints:r}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function gg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const mg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function vg(t="",e=""){const n=gg(t),s=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),r=n.split(` `).filter(i=>{const o=tc(i);return o===null||!s.has(o)?!0:!mg.test(i)}).join(` `).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+r}const _g=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function _d(t){let e="",n=0;for(;n{const s=n.name||n.package;if(!s||s==="flutter")return e;const r=n.versionRequired||n.required;return e[s]=r&&n.version||"",e},{})}function Eg(t){const e=new Map,n=new Map,s=[];for(const r of t)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return s}function Sg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];r.forEach(p=>{const f=bg(p),g=p.fixedCode||p.code||"",m=p.codeType||yg[p.artifactType]||Ne.OTHER;g.trim()||i.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||wg(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} +`;)n++;e+=" "}else if(s==="/*"){for(n+=2;n{const s=n.name||n.package;if(!s||s==="flutter")return e;const r=n.versionRequired||n.required;return e[s]=r&&n.version||"",e},{})}function Eg(t){const e=new Map,n=new Map,s=[];for(const r of t)e.has(r.fileName)?s.push(`Duplicate deploy file name "${r.fileName}" for artifacts "${e.get(r.fileName)}" and "${r.artifactId}".`):e.set(r.fileName,r.artifactId),n.has(r.path)?s.push(`Duplicate deploy path "${r.path}" for artifacts "${n.get(r.path)}" and "${r.artifactId}".`):n.set(r.path,r.artifactId);return s}function Sg(t,e={}){const n=Array.isArray(t?.artifacts)?t.artifacts:[],r=(e.selectedArtifactIds||t?.deployOrder||n.map(p=>p.id)).map(p=>n.find(f=>f.id===p)).filter(Boolean),i=[...t?.warnings||[]];let o=[];r.forEach(p=>{const f=bg(p),g=p.fixedCode||p.code||"",m=p.codeType||yg[p.artifactType]||Ne.OTHER;g.trim()||i.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||wg(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),...r.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};r.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=Eg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:i,errors:h}}function xg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function kg(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 Ig(t,e){const s=[kg(t),xg(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function Cg(t,e=new Map){const n=[];for(const[s,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||s,className:Ig(s,r),content:r.content,fileName:s,path:r.path});return n}function Fg(t,e){const n=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!n.has(s.path)))}const rc={pass:0,warning:1,fail:2},Pg=["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 n=e.filter(s=>typeof s=="string").join(` diff --git a/dist/index.html b/dist/index.html index 9363314..711d11a 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2420,7 +2420,7 @@ .pm-cards { padding: 0 16px; } } - +
    diff --git a/src/dartPackageImports.js b/src/dartPackageImports.js index 90bf02a..002123d 100644 --- a/src/dartPackageImports.js +++ b/src/dartPackageImports.js @@ -61,10 +61,12 @@ function stripComments(code) { // an import/export directive is code the class needs. The directive regex // runs to the closing `;`, stepping over quoted literals whole because a // string is the one place a `;` is legal - `import 'src/a;b.dart';` names a -// file, and stopping at its `;` would lose the URI. +// file, and stopping at its `;` would lose the URI. String alternatives +// consume `\x` escape pairs so an escaped quote does not end the literal +// early - `'a\'b.dart'` is one URI, not `a\` followed by a stranded quote. const DIRECTIVE_PATTERN = - /\b(?:import|export)\s+(?=['"])(?:'[^'\n]*'|"[^"\n]*"|[^;'"])*;/g; -const URI_PATTERN = /(['"])([^'"\n]+)\1/g; + /\b(?:import|export)\s+(?=['"])(?:'(?:\\.|[^'\\\n])*'|"(?:\\.|[^"\\\n])*"|[^;'"])*;/g; +const URI_PATTERN = /(['"])((?:\\.|[^'"\\\n])+)\1/g; /** * Returns every URI the source imports or exports, in first-seen order. diff --git a/src/dartPackageImports.test.js b/src/dartPackageImports.test.js index f5232dc..42217b8 100644 --- a/src/dartPackageImports.test.js +++ b/src/dartPackageImports.test.js @@ -111,6 +111,21 @@ test("a semicolon inside a quoted URI does not end the directive", () => { assert.deepEqual(extractPackageImports(code), ["io_impl"]); }); +test("an escaped quote inside a URI does not end the literal", () => { + // `'a\'b.dart'` is one URI: the escaped `'` is part of the path, not the + // terminator. Ending the literal early loses the rest of the directive. + const code = + "import 'package:private_thing/a\\'b.dart' show A;\n" + + 'import "src/c\\"d.dart";\n' + + "class Plain {}\n"; + + assert.deepEqual(extractImportUris(code), [ + "package:private_thing/a\\'b.dart", + 'src/c\\"d.dart', + ]); + assert.deepEqual(extractPackageImports(code), ["private_thing"]); +}); + test("a conditional URI in a comment is not a dependency", () => { const code = [ "// import 'package:a/a.dart' if (dart.library.io) 'package:b/b.dart';", From 8837514b01a6e71d9e6091188cc85f25904597ae Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 08:36:10 +0000 Subject: [PATCH 06/18] fix: send sdk: overrides on their own channel and name the wire field correctly Co-Authored-By: Stuart Gardoll --- cloud-run/ffai-runner/bin/server.dart | 22 +++++++-- .../{index-BDn1Z4T-.js => index-BraPi4bv.js} | 42 ++++++++--------- dist/index.html | 2 +- src/cloudRunRunner.test.js | 10 ++++ src/customCodeVerification.js | 30 ++++++++---- src/customCodeVerification.test.js | 46 ++++++++++++++++++- 6 files changed, 115 insertions(+), 37 deletions(-) rename dist/assets/{index-BDn1Z4T-.js => index-BraPi4bv.js} (84%) diff --git a/cloud-run/ffai-runner/bin/server.dart b/cloud-run/ffai-runner/bin/server.dart index 8db93d2..48845a2 100644 --- a/cloud-run/ffai-runner/bin/server.dart +++ b/cloud-run/ffai-runner/bin/server.dart @@ -497,7 +497,8 @@ _VerificationRequest? _normalizeVerification(Object? value) { value['dependencyOverrides'], 'dependencyOverrides', ), - sdkPackages: _normalizeSdkPackages(value['sdkPackages']), + sdkPackages: _normalizeSdkPackages(value['sdkPackages'], 'sdkPackages'), + sdkOverrides: _normalizeSdkPackages(value['sdkOverrides'], 'sdkOverrides'), sources: sources, ); } @@ -545,16 +546,16 @@ Map _normalizeDependencyMap(Object? value, String field) { /// `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) { +List _normalizeSdkPackages(Object? value, String field) { if (value == null) return const []; if (value is! List) { - throw const FormatException('verification.sdkPackages must be an array.'); + throw FormatException('verification.$field must be an array.'); } // Bounded like the dependency maps: each entry expands into the generated // pubspec, so an unbounded array is caller-controlled work before pub get // ever sees it. if (value.length > maxDependenciesPerRequest) { - throw const FormatException('Too many entries in verification.sdkPackages.'); + throw FormatException('Too many entries in verification.$field.'); } final result = {}; @@ -962,6 +963,7 @@ final class _VerificationRequest { required this.dependencies, required this.overrides, required this.sdkPackages, + required this.sdkOverrides, required this.sources, }) : unavailableReason = null; @@ -971,6 +973,7 @@ final class _VerificationRequest { dependencies = const {}, overrides = const {}, sdkPackages = const [], + sdkOverrides = const [], sources = const <_VerificationSource>[]; /// Why this request cannot be compiled, or null when it can. @@ -980,6 +983,7 @@ final class _VerificationRequest { final Map dependencies; final Map overrides; final List sdkPackages; + final List sdkOverrides; final List<_VerificationSource> sources; /// Builds the pubspec the scratch package is compiled from. @@ -1016,13 +1020,21 @@ final class _VerificationRequest { lines.add(' $name: ${_yamlScalar(dependencies[name]!)}'); } - if (overrides.isNotEmpty) { + // SDK-sourced overrides belong in dependency_overrides, not in + // `dependencies` with sdkPackages: an override can share its name with a + // direct dependency, and emitting both under one map writes the key twice. + if (overrides.isNotEmpty || sdkOverrides.isNotEmpty) { lines ..add('') ..add('dependency_overrides:'); for (final name in overrides.keys.toList()..sort()) { lines.add(' $name: ${_yamlScalar(overrides[name]!)}'); } + for (final name in sdkOverrides.toList()..sort()) { + lines + ..add(' $name:') + ..add(' sdk: flutter'); + } } return '${lines.join('\n')}\n'; diff --git a/dist/assets/index-BDn1Z4T-.js b/dist/assets/index-BraPi4bv.js similarity index 84% rename from dist/assets/index-BDn1Z4T-.js rename to dist/assets/index-BraPi4bv.js index 438d2b3..e948662 100644 --- a/dist/assets/index-BDn1Z4T-.js +++ b/dist/assets/index-BraPi4bv.js @@ -1,6 +1,6 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();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,$i=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,dh=we?.CompressionStream,Pe=ke?.userAgent;function Ic(){return!(!v||v.navigator.onLine===!1)}var Fn=typeof globalThis<"u"?globalThis:v;Fn&&typeof self>"u"&&(Fn.self=Fn),Fn&&typeof File>"u"&&(Fn.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(t,e,n,s,r,i,o){try{var a=t[i](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(s,r)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(s,r){var i=t.apply(e,n);function o(l){La(i,s,r,o,a,"next",l)}function a(l){La(i,s,r,o,a,"throw",l)}o(void 0)}))}}function b(){return b=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var s in n)({}).hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},b.apply(null,arguments)}function Cc(t,e){if(t==null)return{};var n={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(e.indexOf(s)!==-1)continue;n[s]=t[s]}return n}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 Pn,hh=["$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})({}),ph=["$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"],fh=["token"],Fc="NativeGzipValidationError",Ri=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",Es=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Fc,e},gh=(function(){var t=X((function*(e,n){18>e.size&&Es("too-short");var s=new Uint8Array(yield e.slice(0,10).arrayBuffer());Ri(s)&&s[2]===8||Es("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Pn)return Pn;Pn=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Pn[c]=d>>>0}return Pn})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Es("invalid-crc");var i=n.length>>>0;r.getUint32(4,!0)!==i&&Es("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function Ti(){return Ti=X((function*(t,e,n){e===void 0&&(e=!0);try{var s=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),i=r.writable.getWriter(),o=i.write(s).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield gh(l,s),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Ti.apply(this,arguments)}var mh=["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 n=t.toLowerCase();return mh.concat(e).some((s=>{var r=s.toLowerCase();return n.indexOf(r)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var $r=function(t){return t.trim()},Ni=function(t){return t.replace(/^\$/,"")};function Pc(t){var e,n=[];return(e=JSON.stringify(t,(function(s,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var Ac=Object.prototype,$c=Ac.hasOwnProperty,Rr=Ac.toString,L=Array.isArray||function(t){return Rr.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($c.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Rr.call(t)=="[object String]",Mi=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Rr.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Rr.call(t)==="[object Boolean]",vh=t=>t instanceof FormData,_h=t=>M(ph,t),yh=t=>M(fh,t);function Rc(t){return t===null||typeof t!="object"}function Ks(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Lo(t){return typeof Event<"u"&&Tc(t,Event)}function Tc(t,e){try{return t instanceof e}catch{return!1}}var wh=[!0,"true",1,"1","yes"],Zr=t=>M(wh,t),bh=[!1,"false",0,"0","no"];function st(t,e,n,s,r){return e>n&&(s.warn("min cannot be greater than max."),e=n),he(t)?t>n?(s.warn(" cannot be greater than max: "+n+". Using max value instead."),n):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: "+n+", fallback: "+r),st(r||n,e,n,s))}class Eh{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,n){var s=Math.floor((n-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 n,s=Date.now(),r=String(e),i=this.tt[r];return i?this.ot(i,s):this.tt[r]=i={tokens:this.it,lastAccess:s},i.tokens===0||(i.tokens--,i.tokens===0&&((n=this.et)==null||n.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Js="iOS",vt="Android",fn="Tablet",Nc=vt+" "+fn,Mc="iPad",Lc="Apple",Oc=Lc+" Watch",Vn="Safari",gn="BlackBerry",Dc="Samsung",Bc=Dc+"Browser",jc=Dc+" Internet",Vt="Chrome",Sh=Vt+" OS",Uc=Vt+" "+Js,Oo="Internet Explorer",Hc=Oo+" "+Oe,Do="Opera",xh=Do+" Mini",Bo="Edge",Wc="Microsoft "+Bo,dn="Firefox",zc=dn+" "+Js,ts="Nintendo",ns="PlayStation",hn="Xbox",qc=vt+" "+Oe,Vc=Oe+" "+Vn,Bn="Windows",Li=Bn+" Phone",za="Nokia",Oi="Ouya",Gc="Generic",kh=Gc+" "+Oe.toLowerCase(),Kc=Gc+" "+fn.toLowerCase(),Di="Konqueror",Jc="Oculus Browser",Ys="Vivaldi",Yc="Yandex",Zs="Whale",Bi="DuckDuckGo",Zc="Pale Moon",Xs="Waterfox",Gn="Brave",Xc="Google Search App",le="(\\d+(\\.\\d+)?)",Xr=new RegExp("Version/"+le),Ih=new RegExp(hn,"i"),Ch=new RegExp(ns+" \\w+","i"),Fh=new RegExp(ts+" \\w+","i"),jo=new RegExp(gn+"|PlayBook|BB10","i"),Ph={"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"},Qc=function(t,e,n,s){e=e||"";var r=(function(i){return i!=null&&i.brave?Gn:null})(n);return r||(s!=null&&s.detectGoogleSearchApp&&M(t,"GSA/")?Xc:M(t," OPR/")&&M(t,"Mini")?xh:M(t," OPR/")?Do:jo.test(t)?gn:M(t,"IE"+Oe)||M(t,"WPDesktop")?Hc:M(t,"OculusBrowser")?Jc:M(t,Bc)?jc:M(t,Bo)||M(t,"Edg/")?Wc:M(t,Ys+"/")?Ys:M(t,"YaBrowser/")?Yc:M(t,Zs+"/")?Zs:M(t,Bi+"/")||M(t,"Ddg/")?Bi:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?Uc:M(t,"CrMo")||M(t,Vt)?Vt:M(t,vt)&&M(t,Vn)?qc:M(t,"FxiOS")?zc:M(t.toLowerCase(),Di.toLowerCase())?Di:M(t,Gn+"/")?Gn:((i,o)=>o&&M(o,Lc)||(function(a){return M(a,Vn)&&!M(a,Vt)&&!M(a,vt)})(i))(t,e)?M(t,Oe)?Vc:Vn:M(t,"PaleMoon/")?Zc:M(t,Xs+"/")?Xs:M(t,dn)?dn:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?dn:"")},Ah={[Hc]:[new RegExp("rv:"+le)],[Wc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[Uc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Vn]:[Xr],[Vc]:[Xr],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[dn]:[new RegExp(dn+"\\/"+le)],[zc]:[new RegExp("FxiOS\\/"+le)],[Di]:[new RegExp("Konqueror[:/]?"+le,"i")],[gn]:[new RegExp(gn+" "+le),Xr],[qc]:[new RegExp("android\\s"+le,"i")],[jc]:[new RegExp(Bc+"\\/"+le)],[Jc]:[new RegExp("OculusBrowser\\/"+le)],[Ys]:[new RegExp(Ys+"\\/"+le)],[Yc]:[new RegExp("YaBrowser\\/"+le)],[Zs]:[new RegExp(Zs+"\\/"+le)],[Gn]:[new RegExp(Gn+"\\/"+le)],[Bi]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Zc]:[new RegExp("PaleMoon\\/"+le)],[Xs]:[new RegExp(Xs+"\\/"+le)],[Xc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},$h=function(t,e,n,s){var r=Qc(t,e,n,s),i=Ah[r];if(x(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(hn+"; "+hn+" (.*?)[);]","i"),t=>[hn,t&&t[1]||""]],[new RegExp(ts,"i"),[ts,""]],[new RegExp(ns,"i"),[ns,""]],[jo,[gn,""]],[new RegExp(Bn,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Li,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Bn+" "+Oe,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var s=Ph[n[1]]||"";return/arm/i.test(e)&&(s="RT"),[Bn,s]}return[Bn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Js,[t[3],t[4],t[5]||"0"].join(".")]:[Js,""]],[/(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/,[Sh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return Fh.test(t)?ts:Ch.test(t)?ns:Ih.test(t)?hn:new RegExp(Oi,"i").test(t)?Oi:new RegExp("("+Li+"|WPDesktop)","i").test(t)?Li:/iPad/.test(t)?Mc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Oc:jo.test(t)?gn:/(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:Nc:new RegExp("(pda|"+Oe+")","i").test(t)?kh:new RegExp(fn,"i").test(t)&&!new RegExp(fn+" pc","i").test(t)?Kc:""},Rh=/^[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(n=t)=="string"&&Rh.test(n)?t:e();var n}function Ct(t){return t&&t.split("#")[0]}function Uo(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Ka(t,e,n){return eu.apply(this,arguments)}function eu(){return(eu=X((function*(t,e,n){var s;try{return yield Promise.race([t,new Promise(((r,i)=>{s=Uo((()=>{try{n?.(),r()}catch(o){i(o)}}),e)}))])}finally{clearTimeout(s)}}))).apply(this,arguments)}var Th=t=>t instanceof Error,tu={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}},Nh=tu.info;function nu(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=>nu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Qs(t){var e=[];for(var n in t){var s=t[n];$e(s)||x(s)||e.push({key:n,value:nu(s)})}return e}function Mh(t,e){var n=tu[t.level||"info"]||Nh,s=n.text,r=n.number,i=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=b({},o,t.attributes||{}),l={timeUnixNano:i,observedTimeUnixNano:i,severityNumber:r,severityText:s,body:{stringValue:t.body},attributes:Qs(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,n){return b({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":n})}function ru(t,e,n,s){return{resourceLogs:[{resource:{attributes:Qs(e)},scopeLogs:[{scope:{name:n,version:s},logRecords:t}]}]}}let Lh=class{constructor(t,e,n,s,r,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=s,this.ht=r,this.dt=i,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Mh(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;s=i}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 n=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var s=n.length,r=0;n.length>0&&s>r;){var i,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=ru(l.map((d=>d.record)),t.Lt(),(i=t.vt)!==null&&i!==void 0?i:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var n,s=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(ut.LogsQueue,r.slice(s)),yield e.dt()}))()}Lt(){return su(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(ut.LogsQueue,n),this.kt>n.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 n=e.flush().catch((()=>{}));t!==void 0?yield Ka(n,t):yield n}))()}flushWithTimeout(t){var e=this;return X((function*(){var n=e.flush();yield Ka(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Qr=[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,n,s){var r="";return s&&(r=Object.keys(s).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(s[i]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let Oh=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),s=n().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 n,s;try{n=e.attributes?b({},e.attributes):void 0,s=Ya(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(s);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(s,r)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Qr.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(r,i){for(var o=0;i.length>o;o++)if(i[o]>=r)return o;return i.length})(e,Qr)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=L(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;s=i}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 n=t.Wt,s=yield t._instance.Jt(t.Gt(e));if(n===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),n=(function(i,o,a){return b({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),s=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Qs(n)},scopeMetrics:[{scope:{name:s,version:r},metrics:e}]}]};var e,n,s,r}Xt(t){var e=Ja(Date.now()),n=new Map;for(var s of t.values()){var r,i=Ya(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o=b({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:[]},n.set(i,o));var a=Qs((r=s.attributes)!==null&&r!==void 0?r:{}),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:Qr})}return Array.from(n.values())}Yt(t){var e,n;for(var s of t){var r=s[0],i=s[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=i.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(r,i)}}};var Ss,Za,ei;function Dh(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return ei&&n.length===Za||(Za=n.length,ei=n.reduce(((s,r)=>{Ss||(Ss={});var i=Ss[r];if(i)s[i[0]]=i[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){s[u]=c,Ss[r]=[u,c];break}}return s}),{})),ei}}class Bh{constructor(e,n,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=n,this.modifiers=s}buildFromUnknown(e,n){n===void 0&&(n={});var s=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(s,n,0).apply(e),i=this.buildParsingContext(n),o=this.parseStacktrace(r,i);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var n=this;return X((function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&L(s.stacktrace.frames)&&(s.stacktrace.frames=yield n.applyModifiers(s.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var s,r;return e.cause!=null&&(s=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),b({},e,{cause:s,stack:r})}applyChunkIds(e,n){return e.map((s=>(s.filename&&n&&(s.chunk_id=n[s.filename]),s)))}applyCoercers(e,n){for(var s of this.coercers)if(s.match(e))return s.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return X((function*(){var s=e;for(var r of n.modifiers)s=yield r(s);return s}))()}convertToExceptionList(e,n){var s,r,i,o={type:e.type,value:e.value,mechanism:{type:(s=n.type)!==null&&s!==void 0?s:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,b({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Dh(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,s){s===void 0&&(s=0);var r=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(i,a)}};return b({},n,{syntheticException:s==0?n.syntheticException:void 0,mechanism:e,apply:i=>r(i,s),next:i=>r(i,s+1)})}}var mn="?";function ji(t,e,n,s,r){var i={platform:t,filename:e,function:n===""?mn:n,in_app:!0};return x(s)||(i.lineno=s),x(r)||(i.colno=r),i}var iu=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,s=t.indexOf("safari-web-extension")!==-1;return n||s?[t.indexOf("@")!==-1?t.split("@")[0]:mn,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},jh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Uh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Hh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Wh=(t,e)=>{var n=jh.exec(t);if(n)return ji(e,n[1],mn,+n[2],+n[3]);var s=Uh.exec(t);if(s){if(s[2]&&s[2].indexOf("eval")===0){var r=Hh.exec(s[2]);r&&(s[2]=r[1],s[3]=r[2],s[4]=r[3])}var i=iu(s[1]||mn,s[2]);return ji(e,i[1],i[0],s[3]?+s[3]:void 0,s[4]?+s[4]:void 0)}},zh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,qh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Vh=(t,e)=>{var n=zh.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var s=qh.exec(n[3]);s&&(n[1]=n[1]||"eval",n[3]=s[1],n[4]=s[2],n[5]="")}var r=n[3],i=n[1]||mn,o=iu(i,r);return ji(e,r=o[1],i=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},Xa=/\(error: (.*)\)/;class Gh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var s=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return Ks(e,"DOMException")}isDOMError(e){return Ks(e,"DOMError")}}class Kh{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Tc(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var 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 Jh{constructor(){}match(e){return!!Ks(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var s;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return b({},r,{stack:(s=this.pe(e))!==null&&s!==void 0?s:r.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var n=e;if(W(n.filename)&&n.filename.length>0){var s,r,i=(s=n.lineno)!==null&&s!==void 0?s:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error - at `+n.filename+":"+i+":"+o}}}var Yh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Zh{match(e){return typeof e=="string"}coerce(e,n){var s,r=this.getInfos(e),i=r[0],o=r[1];return{type:i??"Error",value:o??e,stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var n="Error",s=e,r=e.match(Yh);return r&&(n=r[1],s=r[2]),[n,s]}}var Xh=["fatal","error","warning","log","info","debug"];function ou(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var s=n.length;s>0;s--){var r=n.slice(0,s).join(", ");if(e>=r.length)return s===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class Qh{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var s,r,i=this.getErrorPropertyFromObject(e);return i?n.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(s=this.getStack(e))!==null&&s!==void 0?s:(r=n.syntheticException)==null?void 0:r.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 n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+ou(e)}isSeverityLevel(e){return W(e)&&!Mi(e)&&Xh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var s=e[n];if(Th(s))return s}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class ep{match(e){return Lo(e)}coerce(e,n){var s,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+ou(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class tp{match(e){return Rc(e)}coerce(e,n){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class np{match(e){return Ks(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Lo(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var s,r=this.getUnhandledRejectionReason(e);return Rc(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var er="$message",tr="$timestamp",sp=new Set([er,tr]),ti={enabled:!0,max_bytes:32768};function nr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ti.enabled,max_bytes:ip(t.max_bytes,ti.max_bytes)}:b({},ti)}class rp{constructor(e){this.Ke=[],this.Je=0,this.Ne=nr(e)}setConfig(e){this.Ne=nr(e),this.Xe()}add(e){var n=(function(r){var i;try{i=Pc(r)}catch{return}try{var o=JSON.parse(i);if(!te(o))return;var a=o,l=a[er],u=a[tr];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:i}}catch{return}})(e);if(n){var s=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var i=encodeURIComponent(r),o=0,a=0;i.length>a;a++)i[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);s>this.Ne.max_bytes||(this.Ke.push({step:n.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 ip(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var au=function(t,e){var n=(e===void 0?{}:e).debugEnabled,s={k(r){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||n)&&!x(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[r])?v.console[r].__rrweb_original__:v.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("debug",...i)},info(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("log",...i)},warn(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("warn",...i)},error(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("error",...i)},critical(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(r){s.error("You must initialize PostHog before calling "+r)},createLogger:(r,i)=>au(t+" "+r,i)};return s},k=au("[PostHog.js]"),ne=k.createLogger,op=ne("[ExternalScriptsLoader]"),ni=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return op.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var s=C?.querySelectorAll("script");if(s){for(var r,i=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;s.length>o;o++)if(r=i())return r.v}var a=()=>{if(!C)return n("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var s;if(t.config.strict_script_versioning)s=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;r=r+"&t="+Math.floor(Date.now()/i)*i}s=t.requestRouter.endpointFor("assets",r)}ni(t,s,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");ni(t,o,n)}},$.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var s=t.requestRouter.endpointFor("api",e);ni(t,s,n)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var lu="$people_distinct_id",ss="$device_id",si="$device_model",jn="__alias",Un="__timers",Ui="$autocapture_disabled_server_side",Hi="$heatmaps_enabled_server_side",Wi="$exception_capture_enabled_server_side",zi="$error_tracking_suppression_rules",qi="$error_tracking_capture_extension_exceptions",Vi="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gi="$web_vitals_allowed_metrics",qt="$session_recording_remote_config",cu="$replay_sample_rate",uu="$replay_override_sampling",du="$replay_override_linked_flag",hu="$replay_override_url_trigger",pu="$replay_override_event_trigger",cn="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Hn="$active_feature_flags",Ms="$early_access_features",Ki="$feature_flag_details",Wn="$feature_flag_payloads",Ls="$feature_flag_request_id",sr="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Ji="$surveys",rr="$surveys_loaded_at",Yi="$surveys_activated",Os="$surveys_activated_session",Ds="$surveys_activated_timestamps",zn="ph_product_tours",Wt="$flag_call_reported",qn="$flag_call_reported_session_id",Bs="$feature_flag_errors",Kn="$feature_flag_evaluated_at",He="$user_state",Zi="$client_session_props",Xi="$capture_rate_limit",Qi="$initial_campaign_params",eo="$initial_referrer_info",ir="$initial_person_info",or="$epp",xs="$posthog_cookieless",fu="$cookieless_mode",gu="$sdk_debug_extensions_init_method",mu="$sdk_debug_extensions_init_time_ms",vu="$sdk_debug_recording_script_not_loaded",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",en="anonymous",Tt="identified",to="identified_only",ar="visibilitychange",lr="beforeunload",on="$pageview",ri="$pageleave",ii="$identify",Qa="$groupidentify";function ks(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(vh(t))t.forEach(((s,r)=>e(s,r)));else for(var n in t)$c.call(t,n)&&e(t[n],n)}var ee=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),s=1;e>s;s++)n[s-1]=arguments[s];for(var r of n)for(var i in r)r[i]!==void 0&&(t[i]=r[i]);return t};function js(t){for(var e=Object.keys(t),n=e.length,s=new Array(n);n--;)s[n]=[e[n],t[e[n]]];return s}var el=function(t){try{return t()}catch{return}},ap=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),s=0;e>s;s++)n[s]=arguments[s];return t.apply(this,n)}catch(r){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(r)}}},Vo=function(t){var e={};return Z(t,(function(n,s){(W(n)&&n.length>0||he(n))&&(e[s]=n)})),e},lp=["herokuapp.com","vercel.app","netlify.app"];function cp(t){var e=t?.hostname;if(!W(e))return!1;var n=e.split(".").slice(-2).join(".");for(var s of lp)if(n===s)return!1;return!0}function re(t,e,n,s){var r=s??{},i=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:i!==void 0&&i,passive:o===void 0||o})}function no(t){return t.name==="ph_toolbar_internal"}var _u=t=>{if(C){try{for(var e=t+"=",n=C.cookie.split(";").filter((i=>i.length)),s=0;n.length>s;s++){for(var r=n[s];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class cr{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,s,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(s)||!Number.isInteger(r)||0>e||0>n||0>s||0>r||e>0xffffffffffff||n>4095||s>1073741823||r>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|n>>>8,i[7]=n,i[8]=128|s>>>24,i[9]=s>>>16,i[10]=s>>>8,i[11]=s,i[12]=r>>>24,i[13]=r>>>16,i[14]=r>>>8,i[15]=r,new cr(i)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new cr(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var s=this.bytes[n]-e.bytes[n];if(s!==0)return Math.sign(s)}return 0}}class up{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var n=this.generateOrAbort();if(x(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return cr.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 dp}}var tl,yu=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&&(yu=t=>crypto.getRandomValues(t));class dp{nextUint32(){return this.R.length>this.O||(yu(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>hp().toString(),hp=()=>(tl||(tl=new up)).generate(),An="",pp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:_u,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,n,s,r){if(!C)return!1;try{var i="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),An)return An;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),E="dmn_chk_"+dt();!An&&_--;){var w=m.slice(_).join("."),I=E+"=1;domain=."+w+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",An=w)}return An})(c);if(!h){var p=(f=>{var g=f.match(pp);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,s);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),i="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; 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}}},oi=null,Q={N(){if(!$e(oi))return oi;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"),oi=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){Q.j(n)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},fp=[ss,"distinct_id",cn,zo,or,ir,He],Is={},gp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Is[t]||null,H:t=>Is[t]||null,F:(t,e)=>(Is[t]=e,!0),q(t){delete Is[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(n){ce.j(n)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class mp{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,n=e.token,s=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(s?s+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return Zr(e)?1:M(bh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==n){this.ni=n;var s=e==="localStorage"?pt:Q;s.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Zr(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=>Zr(e)))}}function wu(t,e){var n,s=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!Se(s))return e;try{var r=s(e);return W(r)&&r?r:e}catch(i){return k.error("Error in get_current_url, falling back to window.location.href",i),e}}var bu="__POSTHOG_TOOLBAR__",vp=1,_p=3,yp=11;function nl(t){return t instanceof Element&&(t.id===bu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===vp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Eu(t){return!!t&&t.nodeType===_p}function Su(t){return!!t&&t.nodeType===yp&&Ft(t.host)}var xu=1e3;function Go(t){return t?$r(t).split(/\s+/):[]}function sl(t,e){var n=(function(s){var r,i=v==null||(r=v.location)==null?void 0:r.href;return x(i)?void 0:wu(s,i)})(e);return!!(n&&t&&t.some((s=>n.match(s))))}function ur(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 ku(t){return D(t)?null:$r(t).split(/(\s+)/).filter((e=>Jn(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rs(t){var e="";return ro(t)&&!Pu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;Eu(n)&&n.textContent&&(e+=(s=ku(n.textContent))!==null&&s!==void 0?s:"")})),$r(e)}function ai(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 n,s=function(i){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}})(i,o))))return{v:!0}};for(var r of t)if(n=s(r))return n.v;return!1}function Iu(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var wp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Cu=["next","previous","prev",">","<"],bp=[...Cu,"+","-","−","–"],rl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],Ep=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var n,s,r,i,o;if(Ke(e)?(n=!!e&&il,s=void 0,r=!1):(n=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:il,s=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(Ep,(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=Fu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Cu;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=>rl(h,f)||rl(p,f)))}))})(s,a.map((l=>{var u;return{safeText:rs(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,n)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Fu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,s=[t],r=t;r.parentNode&&!Me(r,"body");)if(Su(r.parentNode))s.push(r.parentNode.host),r=r.parentNode.host;else{var i=Iu(r);if(!i)break;if(e||Ko.indexOf(i.tagName.toLowerCase())>-1)n=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}s.push(i),r=i}return{parentIsUsefulElement:n,targetElementList:s}};function ro(t){for(var e=new Set,n=0,s=t;s.parentNode&&!Me(s,"body");s=s.parentNode){if(n++>=xu||e.has(s))return!1;e.add(s);var r=ur(s);if(M(r,"ph-sensitive")||M(r,"ph-no-capture"))return!1}if(M(ur(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 Pu(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,Sp=[16,15,14,13],xp=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 kp(t){for(var e=0,n=!1,s=t.length-1;s>=0;s--){var r=t.charCodeAt(s)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Jn(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=$r(t);var n=e?al.test((t||"").replace(/[- ]/g,"")):(function(r){var i;for(ll.lastIndex=0;i=ll.exec(r);){var o=i[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Sp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&kp(d))return!0}}}return!1})(t);if(n)return!1;var s=e?xp.test(t):(function(r){var i;for(cl.lastIndex=0;i=cl.exec(r);){var o=i[1],a=i[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=rs(t);return Jn(e=(e+" "+Au(t)).trim())?e:""}function Au(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;if(n&&((s=n.tagName)==null?void 0:s.toLowerCase())==="span")try{var r=rs(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+Au(n)).trim())}catch(i){k.error("[AutoCapture]",i)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Ip(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var Cs=ne("[Dead Clicks]"),Cp=()=>!0,Fp=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(Ho)),s=t.instance.config.capture_dead_clicks;return Ke(s)?s:!!te(s)||n};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,s){this.instance=e,this.isEnabled=n,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[Ho]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,s;(n=$.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Cs.error("failed to load script",r):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=te(this.instance.config.capture_dead_clicks)?b({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(C),Cs.info("starting...")}}else Cs.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Cs.info("stopping..."))}}var li=ne("[SegmentIntegration]"),$u="posthog-js";function Ru(t,e){var n=e===void 0?{}:e,s=n.organization,r=n.projectId,i=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,E=((d=c.exception)==null?void 0:d.values)||[],w=E.map((F=>b({},F,{stacktrace:F.stacktrace?b({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>b({},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:w,$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 s&&r&&(I.$sentry_url=(i||"https://sentry.io/organizations/")+s+"/issues/?project="+r+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Pp{constructor(e,n,s,r,i,o){this.name=$u,this.setupOnce=function(a){a(Ru(e,{organization:n,projectId:s,prefix:r,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(n,s,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var s,r=this.vi(e,n);return this.ui={pathname:(s=v?.location.pathname)!==null&&s!==void 0?s:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var s=this.ui;if(!s)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:s.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.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,g=u>1?st(d/u,0,1,k):1;r=ee(r,{$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 s.pathname&&(r.$prev_pageview_pathname=s.pathname),s.timestamp&&(r.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),r}}var ci=["flags","surveys"],Ap={[lu]:{exposure:"hidden"},[jn]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Un]:{exposure:"hidden"},[Ui]:{exposure:"event"},[Hi]:{exposure:"hidden"},[Wi]:{exposure:"event"},[zi]:{exposure:"hidden"},[qi]:{exposure:"event"},[Vi]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gi]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cn]:{exposure:"hidden"},[zo]:{exposure:"event"},[cu]:{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"},[Hn]:{exposure:"hidden",storageGroup:"flags"},[Ms]:{exposure:"hidden"},[Ki]:{exposure:"hidden",storageGroup:"flags"},[Wn]:{exposure:"hidden",storageGroup:"flags"},[Ls]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[sr]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"surveys"},[rr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yi]:{exposure:"event"},[Os]:{exposure:"hidden"},[Ds]:{exposure:"hidden"},[zn]:{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"},[qn]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Zi]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[ir]:{exposure:"hidden"},[or]:{exposure:"hidden"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[pu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},[vu]:{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"}},$p=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ap[t];if(e)return e;for(var n of $p){var s=n[1];if(t.indexOf(n[0])===0)return s}},un=(t,e)=>{try{return JSON.stringify(t,((n,s)=>typeof s=="bigint"?s.toString():s),e)}catch{return Pc(t)}},dr=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},vn=function(t,e){for(var n,s=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;s.length>r;r++){var i=s[r].split("=");if(i[0]===e){n=i;break}}if(!L(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},is=function(t,e,n){if(!t||!e||!e.length)return t;for(var s=t.split("#"),r=s[1],i=(s[0]||"").split("?"),o=i[1],a=i[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),r!=null&&(h+="#"+r),h},hr=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Tu=(t,e)=>t>=e&&Ic(),Nu=(t,e,n,s)=>{if(t===0){if(Ic()){var r=e+1;return r===n&&s(),r}return e}return 0},Fs="https?://(.*)",_n=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Rp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._n],os="",Tp=["li_fat_id"];function Mu(t,e,n){if(!C)return{};var s,r=e?[..._n,...n||[]]:[],i=Lu(is(C.URL,r,os),t),o=(s={},Z(Tp,(function(a){var l=_u(a);s[a]=l||null})),s);return ee(o,i)}function Lu(t,e){var n=Rp.concat(e||[]),s={};return Z(n,(function(r){var i=vn(t,r);s[r]=i||null})),s}function Ou(t){var e=(function(i){return i?i.search(Fs+"google.([^/?]*)")===0?"google":i.search(Fs+"bing.com")===0?"bing":i.search(Fs+"yahoo.com")===0?"yahoo":i.search(Fs+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",s={};if(!$e(e)){s.$search_engine=e;var r=C?vn(C.referrer,n):"";r.length&&(s.ph_keyword=r)}return s}function gl(){return navigator.language||navigator.userLanguage}var pr="$direct";function Du(){return C?.referrer||pr}function Bu(t,e,n){n===void 0&&(n=!1);var s=t?[..._n,...e||[]]:[],r=n?Ct(se?.href):se?.href,i=r?.substring(0,1e3);return{r:Du().substring(0,1e3),u:i?is(i,s,os):void 0}}function ju(t,e){var n;e===void 0&&(e=!1);var s=t.r,r=t.u,i=e?Ct(r):r,o={$referrer:s,$referring_domain:s==null?void 0:s==pr?pr:(n=dr(s))==null?void 0:n.host};if(i){o.$current_url=i;var a=dr(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Lu(i);ee(o,l)}if(s){var u=Ou(s);ee(o,u)}return o}function Uu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Np(){try{return new Date().getTimezoneOffset()}catch{return}}var Mp={flags:Kn,surveys:rr},Lp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],tn="main";class ui{constructor(e,n,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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.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,b({},this.props)),this.update_config(e,e,n),this.save(),v){var r=()=>this.flush();re(v,"beforeunload",r,{capture:!1}),re(v,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){Lp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,s=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...fp,...o];return b({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$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),r=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(n=Q,r=!0):i==="localstorage+cookie"&&s.N()?(n=s,r=!0):i==="sessionstorage"&&ce.N()?n=ce:i==="memory"?n=gp:i==="cookie"?n=pt:s.N()?(n=s,r=!0):n=pt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((n,s)=>{var r=Mt(s);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[s]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of ci){var n=Q.H(this.Si(e));if(n&&!mt(n)){var s=this.Mi(e);s.persisted=!0,this.Ti(e)||(s.fingerprint=this.Ei(n,e)),this.Ii(e,n)||ee(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var s;return((s=Mt(n))==null?void 0:s.storageGroup)===e}))}Ii(e,n){var s=Mp[e];if(!s)return!1;var r=n[s],i=this.props[s];return he(r)&&he(i)&&i>r}refreshKey(e){var n;if(!this.xi){var s=this.pi?(n=Mt(e))==null?void 0:n.storageGroup:void 0,r=s?Q.H(this.Si(s)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(s){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[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,tn))}Li(){var e=this.Di(),n=e.main,s=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,tn),ci)){var i,o=s[r];(!mt(o)||(i=this.ci[r])!=null&&i.persisted)&&this.Oi(Q,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return Z(this.props,((s,r)=>{var i,o=(i=Mt(r))==null?void 0:i.storageGroup;o?n[o][r]=s:e[r]=s})),{main:e,groups:n}}Ei(e,n){if(n===tn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var s={};return Z(e,((r,i)=>{var o;s[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(s)}Oi(e,n,s,r){var i=this.Mi(r);if(r===tn||i.dirty||x(i.fingerprint)){var o;try{if((o=this.Ei(s,r))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(n,s,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,r!==tn&&(i.persisted=!0),x(o)||(i.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,s=n!==void 0&&n;if(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!s&&this.gi)for(var r of ci)Q.q(this.Si(r));s?delete this.ci[tn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,s){if(te(e)){x(n)&&(n="None"),this.$i=x(s)?this.ji:s;var r=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,i),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(te(e)){this.$i=x(n)?this.ji:n;var s=!1;if(Z(e,((r,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==r||te(r)||L(r))&&(this.Pi(i,r),s=!0)})),s)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,s=!1;for(var r of n)r in this.props&&(this.Ri(r),s=!0);s&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var n=Mu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Vo(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Ou(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Du(),$referring_domain:C!=null&&C.referrer&&((e=dr(C.referrer))==null?void 0:e.host)||pr},void 0)}set_initial_person_info(){this.props[Qi]||this.props[eo]||this.register_once({[ir]:Bu(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,Qi],(r=>{var i=this.props[r];i&&Z(i,(function(o,a){e["$initial_"+Ni(a)]=o}))}));var n=this.props[ir];if(n){var s=(function(r,i){i===void 0&&(i=!1);var o=ju(r,i),a={};return Z(o,(function(l,u){a["$initial_"+Ni(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);ee(e,s)}return e}safe_merge(e){return Z(this.props,(function(n,s){s in e||(e[s]=n)})),e}update_config(e,n,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 r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),i=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=i,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var s=this.props[Un]||{};s[e]=n,this.Pi(Un,s),this.save()}remove_event_timer(e){var n=this.props[Un]||{},s=n[e];return x(s)||(delete n[e],this.Pi(Un,n),this.save()),s}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var s;this.props[e]=n,(s=Mt(e))!=null&&s.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,s=(n=Mt(e))==null?void 0:n.storageGroup;s&&(this.Mi(s).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Ps(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&Se(n.then)&&n.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},$n={Activation:"events",Cancellation:"cancelEvents"},di={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hi={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},io={Popover:"popover",Inline:"inline"},Op={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=ne("[RateLimiter]");class Dp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var s=n.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach((r=>{vl.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void vl.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:s})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,s,r;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(s=this.instance.persistence)==null?void 0:s.get_property(Xi))!==null&&n!==void 0?n:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(r=this.instance.persistence)==null||r.set_property(Xi,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!L(n)||!n.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&se!=null&&se.pathname)return""+((e=se.origin)!==null&&e!==void 0?e:"")+se.pathname}Hi(e){var n,s,r=this.captureEventsBurstLimit,i=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(s=this.instance).get_session_id)==null?void 0:n.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 "+i+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return 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((n=>{this.Zi(n.json,n),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 n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||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(r){xt.error("Error applying remote config",r)}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(r){xt.error("Error loading feature flags",r)}}}var qe=Uint8Array,Ae=Uint16Array,yn=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]),Wu=function(t,e){for(var n=new Ae(31),s=0;31>s;++s)n[s]=e+=1<s;++s)for(var i=n[s];n[s+1]>i;++i)r[i]=i-n[s]<<5|s;return[n,r]},zu=Wu(Yo,2),oo=zu[1];zu[0][28]=258,oo[258]=28;for(var yl=Wu(Zo,0)[1],qu=new Ae(32768),ie=0;32768>ie;++ie){var nn=(43690&ie)>>>1|(21845&ie)<<1;qu[ie]=((65280&(nn=(61680&(nn=(52428&nn)>>>2|(13107&nn)<<2))>>>4|(3855&nn)<<4))>>>8|(255&nn)<<8)>>>1}var Yn=function(t,e,n){for(var s=t.length,r=0,i=new Ae(e);s>r;++r)++i[t[r]-1];var o,a=new Ae(e);for(r=0;e>r;++r)a[r]=a[r-1]+i[r-1]<<1;for(o=new Ae(s),r=0;s>r;++r)o[r]=qu[a[t[r]-1]++]>>>15-t[r];return o},Kt=new qe(288);for(ie=0;144>ie;++ie)Kt[ie]=8;for(ie=144;256>ie;++ie)Kt[ie]=9;for(ie=256;280>ie;++ie)Kt[ie]=7;for(ie=280;288>ie;++ie)Kt[ie]=8;var fr=new qe(32);for(ie=0;32>ie;++ie)fr[ie]=5;var Bp=Yn(Kt,9),jp=Yn(fr,5),Vu=function(t){return(t/8>>0)+(7&t&&1)},Gu=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var s=new(t instanceof Ae?Ae:t instanceof yn?yn:qe)(n-e);return s.set(t.subarray(e,n)),s},ot=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8},Rn=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8,t[s+2]|=n>>>16},pi=function(t,e){for(var n=[],s=0;t.length>s;++s)t[s]&&n.push({s,f:t[s]});var r=n.length,i=n.slice();if(!r)return[new qe(0),0];if(r==1){var o=new qe(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(F,P){return F.f-P.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=i[0].s;for(s=1;r>s;++s)i[s].s>h&&(h=i[s].s);var p=new Ae(h+1),f=ao(n[c-1],p,0);if(f>e){s=0;var g=0,m=f-e,_=1<s;++s){var E=i[s].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var w=i[s].s;e>p[w]?g-=1<=0&&g;--s){var I=i[s].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},ao=function(t,e,n){return t.s==-1?Math.max(ao(t.l,e,n+1),ao(t.r,e,n+1)):e[t.s]=n},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Ae(++e),s=0,r=t[0],i=1,o=function(l){n[s++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++i;else{if(!r&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(r),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(r);i=1,r=t[a]}return[n.subarray(0,s),e]},Tn=function(t,e){for(var n=0,s=0;e.length>s;++s)n+=t[s]*e[s];return n},lo=function(t,e,n){var s=n.length,r=Vu(e+2);t[r]=255&s,t[r+1]=s>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var i=0;s>i;++i)t[r+i+4]=n[i];return 8*(r+4+s)},bl=function(t,e,n,s,r,i,o,a,l,u,c){ot(e,c++,n),++r[256];for(var d=pi(r,15),h=d[0],p=d[1],f=pi(i,15),g=f[0],m=f[1],_=wl(h),E=_[0],w=_[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=pi(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=Tn(r,Kt)+Tn(i,fr)+o,Ie=Tn(r,h)+Tn(i,g)+o+14+3*T+Tn(B,R)+(2*B[16]+3*B[17]+7*B[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=Yn(h,p),J=h,z=Yn(g,m),H=g;var _e=Yn(R,N);for(ot(e,c,w-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=Bp,J=Kt,z=jp,H=fr;for(S=0;a>S;++S)if(s[S]>255){var me;Rn(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];Rn(e,c,z[ge]),c+=H[ge],ge>3&&(Rn(e,c,s[S]>>>5&8191),c+=Zo[ge])}else Rn(e,c,O[s[S]]),c+=J[s[S]];return Rn(e,c,O[256]),c+J[256]},Up=new yn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Hp=(function(){for(var t=new yn(256),e=0;256>e;++e){for(var n=e,s=9;--s;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),fi=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Wp(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Hp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),s=t.length;n.p(t);var r,i,o,a,l,u=(a=10+((r=e).filename&&r.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),w=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(w,I,d.subarray(F,P)):(w[F]=!0,I=lo(w,I,d.subarray(F,_)))}else{for(var B=Up[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,w,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,In=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,ys=Math.min(32767,F),ws=Math.min(258,Rt);ys>=Be&&--In&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;ws>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var bs=Math.min(Be,je-2),Xt=0;for(de=0;bs>de;++de){var Qt=F-Be+de+32768&32767,Cn=Qt-N[Qt]+32768&32767;Cn>Xt&&(Xt=Cn,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,w,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Gu(E,0,f+Vu(I)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&fi(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),fi(u,c-8,n.d()),fi(u,c-4,s),u}var zp=!!$i||!!Mo,Ku="text/plain",Us=!1,Ju=(t,e)=>{var n=t.split("#"),s=n[1],r=n[0].split("?"),i=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(s?"#"+s:"")},Tr=function(t,e,n){var s;n===void 0&&(n=!0);var r=t.split("?"),i=r[0],o=r[1],a=b({},e),l=(s=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=n&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&s!==void 0?s:[],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?i+"?"+l.join("&"):i},gi=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===xe.GZipJS){var s=Wp((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 Gu(c,0,d)})(un(e)),{mtime:0});return{contentType:Ku,body:s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),estimatedSize:s.byteLength}}if(n===xe.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(un(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:un(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=un(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Yu=t=>{var e,n,s=()=>t.transport==="sendBeacon"?{url:Tr(t.url,{compression:xe.Base64}),encodedBody:gi(b({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ju(t.url,"compression"),encodedBody:gi(b({},t,{compression:void 0,Ji:void 0}))};try{e=gi(t)}catch(r){if(Ua(t.compression,vn(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",r),s();throw r}return e&&Ua(t.compression,vn(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?Ri(new Uint8Array(n)):ArrayBuffer.isView(n)&&Ri(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Us=!0,s()):{url:t.url,encodedBody:e}},Zu=t=>{try{return Yu(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},qp=(function(){var t=X((function*(e){var n=un(e.data),s=yield(function(i,o,a){return Ti.apply(this,arguments)})(n,Y.DEBUG,{rethrow:!0});if(!s)return e;var r=yield s.arrayBuffer();return b({},e,{Ji:{contentType:Ku,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Vp=/Failed to fetch|NetworkError|Load failed/i,Xu=t=>t?.name==="TypeError"&&Vp.test(t?.message||""),Qu=t=>{var e=Zu(t);if(e){var n=e.url,s=e.encodedBody,r=s??{},i=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);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"||Xu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Mo(n,b({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)}}},co=t=>{try{var e,n=Yu(t),s=n.url,r=n.encodedBody,i=r??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.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:b({},t.data,{batch:h});return co(b({},t,{data:d(u.slice(0,c))})),void co(b({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Qu(b({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,n,s)=>{var r=s==="query"?e==="POST"?"sent_at":"_":void 0;return Tr(n===xe.GZipJS?Ju(t,"compression"):t,b({},r?{[r]:Date.now().toString()}:{},n===xe.GZipJS?{}:{compression:n}))},Hs=[];Mo&&Hs.push({transport:"fetch",method:Qu}),$i&&Hs.push({transport:"XHR",method(t){var e=Zu(t);if(e){var n=new $i,s=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=s??{},i=r.contentType,o=r.body;Z(t.headers,(function(a,l){n.setRequestHeader(l,a)})),i&&n.setRequestHeader("Content-Type",i),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ke!=null&&ke.sendBeacon&&Hs.push({transport:"sendBeacon",method:co});var uo=3e3;class Gp{constructor(e,n){this.Xi=!0,this.tr=[],this.er=st(n?.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():{},n=Object.values(e);[...n.filter((s=>s.url.indexOf("/e")===0)),...n.filter((s=>s.url.indexOf("/e")!==0))].map((s=>{this.lr(b({},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 n=this.ar(),s=function(){var i=n[r],o=new Date().getTime();i.data&&L(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var r in n)s()}}),this.er))}lr(e){try{this.ir(e)}catch(n){k.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(n=>{var s,r=n,i=(r?r.batchKey:null)||r.url;x(e[i])&&(e[i]=b({},r,{data:[]})),(s=e[i].data)==null||s.push(r.data)})),this.tr=[],e}}var Kp=["retriesPerformedSoFar"];class Jp{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},re(v,"online",this.vr),re(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,s=Cc(e,Kp);lt(n)&&(s.url=Tr(s.url,{retry_count:n})),this._instance._send_request(b({},s,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(b({retriesPerformedSoFar:n},s));r.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}s.callback==null||s.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+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))})(n),r=Date.now()+s;this.tr.push({retryAt:r,requestOptions:e});var i="Enqueued failed request for retry in "+s;navigator.onLine||(i+=" (Browser is offline)"),k.warn(i),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],s=this.tr.filter((i=>e>i.retryAt||(n.push(i),!1)));if(this.tr=n,s.length>0)for(var r of s)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(b({},n,{transport:"sendBeacon"}))}catch(s){k.error(s)}}this.tr=[]}}class Yp{constructor(e){this.yr=()=>{var n,s,r,i;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(s=this.br.maxScrollHeight)!==null&&s!==void 0?s:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){re(v,"scroll",this.yr,{capture:!0}),re(v,"scrollend",this.yr,{capture:!0}),re(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var n of e){var s=v?.document.querySelector(n);if(s)return s}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var s=this.scrollElement();return s&&s[n]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Zp=t=>Bu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,n,s,r){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Zi]:a})}},this._instance=e,this.Tr=n,this.Mr=s,this.Cr=r||Zp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zi]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?ju(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return Z(Vo(this.getSetOnceProps()),((n,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+Ni(s)]=n})),e}}class Xo{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((s=>s!==n))}}emit(e,n){for(var s of this.Er[e]||[])s(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Nn=ne("[SessionId]");class xl{on(e,n){return this.Ir.on(e,n)}constructor(e,n,s){var r;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=n||dt,this.Nr=s||dt;var i=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Nn.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+i+"_window_id",this.Br="ph_"+i+"_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((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Nn.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var n=this.Pr;return!$e(n)&&!$e(e)&&5e3>Math.abs(e-n)}Ur(e,n,s){var r=n!==this._sessionActivityTimestamp,i=!(e!==this.Dr||s!==this._sessionStartTimestamp);this._sessionStartTimestamp=s,this._sessionActivityTimestamp=n,this.Dr=e,i&&!r||i&&this.Zr(n)||(this.Pr=n,this.Mr.register({[cn]:[n,e,s]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(cn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[cn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=lt(e)?e:0,s=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,s)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[cn];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(lr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},re(v,lr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=n||new Date().getTime(),r=this.Jr(),i=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(s-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(s,a);if(f){(f=this.Xr(s))||Nn.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Nn.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=s,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Nn.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:s,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((w=>w(i,l,E))),{sessionId:i,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 ed=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&Wa(n,e))return!0;try{var s=t?.userAgentData;if(s!=null&&s.brands&&s.brands.some((r=>Wa(r?.brand,e))))return!0}catch{}return!!t.webdriver};function td(){return(td=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return W(n)&&n.length>0?n:void 0}catch(s){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",s)}}))).apply(this,arguments)}var gr=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function mi(t,e,n){return un({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var nd={exact:(t,e)=>e.some((n=>t.some((s=>n===s)))),is_not:(t,e)=>e.every((n=>t.every((s=>n!==s)))),regex:(t,e)=>e.some((n=>t.some((s=>gr(n,s))))),not_regex:(t,e)=>e.every((n=>t.every((s=>!gr(n,s))))),icontains:(t,e)=>e.map(As).some((n=>t.map(As).some((s=>n.includes(s))))),not_icontains:(t,e)=>e.map(As).every((n=>t.map(As).every((s=>!n.includes(s))))),gt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>s>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>st.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((n=>{var s=n[1],r=e?.[n[0]];if(x(r)||$e(r))return!1;var i=[String(r)],o=nd[s.operator];return!!o&&o(s.values,i)}))}var ho="custom",kl="i.posthog.com",Xp=/^\/static\//;class Qp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+kl,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":ho),this.en[this.apiHost]}rn(e){if(Xp.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var s=this.rn(n);if(s)return""+s+n}if(this.region===ho)return this.apiHost+n;var r=kl+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=ne("[Surveys]"),id="seenSurvey_",od=t=>{try{var e=(n=>((s,r)=>""+id+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){q.error("Failed to persist survey seen state",n)}},ef=[di.Popover,di.Widget,di.API],tf={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},nf=ne("[PostHog ExternalIntegrations]"),sf={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class rf{constructor(e){this._instance=e}ai(e,n){var s;(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,(r=>{if(r)return nf.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var i,o,a,l=s[0],u=s[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[l]||e.ai(sf[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((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class of{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return X((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var s=e.setup(n.nn);s&&(yield s)}catch(i){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',i),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&Se(n.then)&&n.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 af{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var s={};for(var r of e){var i=n?.get_property(r);x(i)||(s[r]=i)}return s}set(e,n){var s;(s=this._instance.persistence)==null||s.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var Il="extensionsRemoteConfig";class lf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new af(e),this.onEvent=n=>Ps(this.instance.on("eventCaptured",(s=>{try{n({event:s.event,properties:s.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Ps((()=>{}));var s=i=>{try{n(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(Il,s);return this.un&&s(this.un),Ps(r)},this.vn=new of(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(ss))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(ss);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,s,r,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=i?.sessionId)!==null&&n!==void 0?n:"",windowId:(s=i?.windowId)!==null&&s!==void 0?s:"",sessionStartTimestamp:(r=i?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,s){var r=this;return X((function*(){s?r.instance.capture(e,n,{timestamp:s.timestamp,uuid:s.uuid,$set:s.set,$set_once:s.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Ps(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,n){var s=this;return X((function*(){var r;n===void 0&&(n={});var i=s.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Tr(i,n.query):i,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.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 Zn={},vi=0,mr=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Mn="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",ad="Invalid value for property_denylist config: ",cf=["token","distinct_id",fu],an="posthog",ld=!zp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_i=t=>{var e;return b({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:cp(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:mr,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults: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(n){k.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:mr},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:bp,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},uf=[["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 n of uf){var s=n[0],r=n[1];x(t[s])||(e[r]=t[s])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(i.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?i.property_denylist=t.property_blacklist:L(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(ad+t.property_denylist)),i};class df{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,n){if(e){var s=this.sn.indexOf(e);s!==-1&&this.sn.splice(s,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new df,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=_i(),this.SentryIntegration=Pp,this.sentryIntegration=s=>(function(r,i){var o=Ru(r,i);return{name:$u,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 Yp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Dp(this),this.requestRouter=new Qp(this),this.consent=new mp(this),this.externalIntegrations=new rf(this);var n=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(o),i?.({})},set_once:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(s=>k.info('send "'+s?.event+'"',s)))}init(e,n,s){if(s&&s!==an){var r,i=(r=Zn[s])!==null&&r!==void 0?r:new Te;return i._init(e,n,s),Zn[s]=i,Zn[an][s]=i,i}return this._init(e,n,s)}_init(e,n,s){var r,i;n===void 0&&(n={});var o,a=W(e)?e.trim():"";if(!a)return k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=_i(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=_i(n.defaults),u=Pl(n),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=n.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new ui(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=b({},this.persistence.props),f=b({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Gp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Jp(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:n,thisC:b({},this.config),p,s:f}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=b({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=n.bootstrap)==null?void 0:i.distinctID)!==void 0){var m=n.bootstrap.distinctID,_=this.get_distinct_id(),E=this.persistence.get_property(He);if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===en)this.identify(m);else if(n.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 w=this.config.get_device_id(dt()),I=n.bootstrap.isIdentifiedID?w:m;this.persistence.set_property(He,n.bootstrap.isIdentifiedID?Tt:en),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:xs,$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,en)}return re(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.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||li.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()||(li.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(li.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,on),identify:N=>R(N,ii),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==mr&&(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 td.apply(this,arguments)})().then((P=>{P&&this.register({[si]:P})})).catch(mr),this}Fn(){var e,n,s,r,i,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(s=Te.__defaultExtensionClasses)==null?void 0:s.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var n,s,r,i,o,a,l,u=performance.now(),c=b({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(s=this.surveys)!==null&&s!==void 0?s:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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,Fp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var s=e.shift();if(s)try{s()}catch(i){k.error("Error initializing extension:",i)}}var r=Math.round(performance.now()-n);this.register_for_session({[gu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[mu]:r}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var s,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=M(r.supportedCompression,xe.GZipJS)?xe.GZipJS:M(r.supportedCompression,xe.Base64)?xe.Base64:void 0),(s=r.analytics)!=null&&s.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.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,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Hu(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()&&ks(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,s,r,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ri),(s=this.logs)==null||s.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ri,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ld?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=b({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var s,r,i,o=b({},n);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(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((E=>b({},E,{sent_at:_}))):b({},m,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Hs.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(r=(i=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:i.method)!==null&&r!==void 0?r:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){Xu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&dh&&typeof Promise<"u"&&!Us?qp(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Us=!0,void g(b({},o,{compression:void 0,url:El(n.url,n.method,void 0,n.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var E="name"in _?String(_.name):"";return Ha(_)||E===Fc})(m)&&(Us=!0),g(o)})):f(o)})(b({},e,{callback:n=>{var s,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(s=(r=this.config).on_request_error)==null||s.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){vi++;try{var n,s=[],r=[],i=[];ks(e,(a=>{if(a)if(L(n=a[0]))i.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&n==="alias"?s.push(a):L(a)&&n.indexOf("capture")!==-1&&Se(this[n])?i.push(a):r.push(a)}));var o=function(a,l){ks(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(r,this),o(i,this)}finally{vi--}}push(e){if(vi>0&&L(e)&&W(e[0])){var n=Te.prototype[e[0]];Se(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,s){var r,i,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){n!=null&&n.$current_url&&!W(n?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||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,n||{},h,p)};e===on&&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(sr)===!0;s?.$set&&!g&&(f.$set=s?.$set);var m=s?.$unset;m&&(f.$unset=m);var _,E,w,I=g?void 0:this.Vn(s?.$set_once,e!==Qa,e===ii);if(I&&(f.$set_once=I),s!=null&&s._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):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=[],ks(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),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return hh.forEach(z),O.forEach(z),J})(f.properties,cf)),e===ft.DISMISSED||e===ft.SENT){var F=n?.[hi.SURVEY_ID],P=n?.[hi.SURVEY_ITERATION];od({id:F,current_iteration:P}),f.$set=b({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",w="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(w="$survey_"+E+"/"+_.id+"/"+_.current_iteration),w)]:!0})}else e===ft.SHOWN&&(f.$set=b({},f.$set,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Op.SHOWN){var B=n?.[ml.TOUR_TYPE];B&&(f.$set=b({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=b({},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=(r=s?._url)!==null&&r!==void 0?r: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",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new lf(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var s=this._n.indexOf(e);s!==-1&&this._n.splice(s,1)}}}calculateEventProperties(e,n,s,r,i){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return n;var o=i?void 0:this.persistence.remove_event_timer(e),a=b({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[fu]=!0),e==="$snapshot"){var l=b({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mi(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?[..._n,...P||[]]:[],z=(function(ws){for(var je=0;qa.length>je;je++){var bs=qa[je],Xt=bs[1],Qt=bs[0].exec(ws),Cn=Qt&&(Se(Xt)?Xt(Qt,ws):Xt);if(Cn)return Cn}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,In,Be,Fe,ys=ee(Vo({$os:H,$os_version:oe,$browser:Qc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Mc||Fe===Nc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Kc?fn:Fe===ts||Fe===hn||Fe===ns||Fe===Oi?"Console":Fe===Oc?"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,(In=de?.screenHeight)!==null&&In!==void 0?In:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:fn:"Desktop"),$timezone:Uu(),$timezone_offset:Np()}),{$current_url:is(S?Ct(se?.href):se?.href,J,os),$host:se?.host,$pathname:se?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:$h(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&&(ys.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ys})(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(i,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!==on||i?e!==ri||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,r),a=ee(a,u),e===on&&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 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,b({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(ad+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var w=this.config.sanitize_properties;w&&(k.error(Fl),a=w(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,n,s){var r;if(n===void 0&&(n=!0),s===void 0&&(s=!1),!this.persistence||!this.Zn()||this.mn&&!s)return e;var i=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=ee({},i,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Fl),a=l(a,"$set_once")),n&&(this.mn=!0),mt(a)?void 0:a}register(e,n){var s;(s=this.persistence)==null||s.register(e,n)}register_once(e,n,s){var r;(r=this.persistence)==null||r.register_once(e,n,s)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((s=>this.yn.add(s))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var n=[];this.yn.forEach((s=>n.push(s))),n.length>0?ce.F(this.bn,n):ce.q(this.bn)}}getFeatureFlag(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var s,r;return(s=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&s!==void 0?s:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,s){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,s)}updateEarlyAccessFeatureEnrollment(e,n,s){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,s)}getEarlyAccessFeatures(e,n,s){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,s)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Mn}),()=>{})}onSessionId(e){var n,s;return(n=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Mn})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Mn})}renderSurvey(e,n){var s;(s=this.surveys)==null||s.renderSurvey(e,n)}displaySurvey(e,n){var s;n===void 0&&(n=tf),(s=this.surveys)==null||s.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,s;return(n=(s=this.surveys)==null?void 0:s.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Mn}}canRenderSurveyAsync(e,n){var s,r;return n===void 0&&(n=!1),(s=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&s!==void 0?s:Promise.resolve({visible:!1,disabledReason:Mn})}Jn(e){return!e||Mi(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===xs?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,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 r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(ss)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(jn)&&(this.unregister(jn),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||en)===en,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:n||{},$set_once:s||{}},!1),this.capture(ii,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:s||{}}),this.Sn=mi(e,n,s),(i=this.featureFlags)==null||i.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(He,Tt);var u=n||{},c=s||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=mi(e,n,s)}else(n||s)&&this.setPersonProperties(n,s);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(n||s)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var s=mi(this.get_distinct_id(),e,n);this.Sn!==s?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=s):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,s=(L(e)?e:[e]).filter((r=>W(r)&&r.length>0));s.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(s,!0),this.capture("$set",{$unset:s}),this.Sn=null)}group(e,n,s){if(e&&n){var r=this.getGroups(),i=r[e]!==n;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:b({},r,{[e]:n})}),i||s){var o={$group_type:e,$group_key:n};s&&(o.$group_set=s),this.capture(Qa,o)}s&&this.setGroupPropertiesForFlags({[e]:s}),i&&!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,n){var s;n===void 0&&(n=!0),(s=this.featureFlags)==null||s.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var s;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((s=this.featureFlags)==null||s.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var s,r,i,o,a,l,u,c,d,h;if(n===void 0&&(n=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(ss),g=this.get_property(si),m=this.get_property(qt),_=this.is_capturing();if(this.consent.reset(),n||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(s=this.persistence)==null||s.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[qt]:m}),(i=this.surveys)==null||i.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,en),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:xs,$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({[si]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return X((function*(){var s,r,i,o,a,l,u;if(n.__loaded){(s=n.Un)==null||s.stop(),(r=n.jn)==null||r.dispose(),(i=n.sessionRecording)==null||i.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var s;this.config.identity_distinct_id=e,this.config.identity_hash=n,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,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&s){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!s)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(lu)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(jn,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=b({},this.config);if(te(e)){var s,r,i,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var g=this.En();(s=this.persistence)==null||s.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(b({},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:n,newConfig:b({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){Y.LIB_NAME=e,Y.LIB_VERSION=n}startSessionRecording(e){var n,s,r,i,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((s=this.sessionRecording)==null||s.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var s=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(b({},r,n))}}addExceptionStep(e,n){var s;(s=this.exceptions)==null||s.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,s;return(n=(s=this.toolbar)==null?void 0:s.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:an;return n!==an&&(n=an+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((n=this.sessionPersistence)==null?void 0:n.get_property(He))===Tt}Zn(){var e,n;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[jn])&&((n=this.persistence)==null||(n=n.props)==null||!n[or]))}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(or,!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,n,s,r,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((s=this.persistence)==null||s.set_disabled(i)),((n=this.sessionPersistence)==null?void 0:n.xi)!==i&&((r=this.sessionPersistence)==null||r.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==ht){if(this.gn()){var s,r,i,o,a;this.Yn(!0,!0),(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.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=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==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,n,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:xs,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.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?ed(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(on,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ar,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),re(C,ar,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,s,r,i,o){var a=s in n&&!D(n[s]),l=r in n&&!D(n[r]);return a?n[s]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+s+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var n;if(D(this.config.before_send))return e;var s=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(yh),r=L(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of r){if(i=o(i),D(i)){var a="Event '"+e.event+"' was rejected in beforeSend function";return _h(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}i.properties&&!mt(i.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of s)if(i.properties&&D(i.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 i}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(s)})}Cn(e){var n=Ke(e)&&!e,s=Q.N()&&Q.P("ph_debug")==="true";return!n&&(!!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 n=0;e.length>n;n++)t.prototype[e[n]]=ap(t.prototype[e[n]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var n=te(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,s){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)s-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:s}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:s}];return!1}}var yi="$copy_autocapture",wi=ne("[AutoCapture]");function bi(t,e){return e.length>t?e.slice(0,t)+"...":e}function hf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function pf(t,e){var n,s,r=e.e,i=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")&&xu>c.length;)if(Su(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,w=!1;if(Z(c,(S=>{var A=ro(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Jn(R))&&(u?Ct(R):R)}M(ur(S),"ph-no-capture")&&(w=!0),m.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"?bi(1024,dl(T)):bi(1024,rs(T)));var Ie=ur(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Pu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Jn(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]=bi(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=hf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,i,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&&Jn(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),w)return{props:{},explicitNoCapture:w};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rs(t)),E){var I,F;m[0].attr__href=E;var P=(I=dr(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:r.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=b({},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 js(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+=":")+js(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:Ip(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return js(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(s=m[0])==null?void 0:s.$el_text}:{},f&&r.type==="click"?{$external_click_url:f}:{},_)}}var Ln=ne("[ExceptionAutocapture]"),$l=()=>{},ff=ne("[TracingHeaders]"),Lt=ne("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",On="awaiting_config",$s="missing_config";ne("[SessionRecording]"),ne("[SessionRecording]");var po="[SessionRecording]",at=ne(po),gf=ne("[Heatmaps]");function Ei(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Rs=ne("[Product Tours]"),Si=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},mf=["$set_once","$set"],Ze=ne("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function sn(t,e,n){if(D(t))return!1;switch(n){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 vf{constructor(e){this.ns=new Xo,this.ss=(n,s)=>this.os(n,s)&&this.ls(n,s)&&this.us(n,s)&&this.hs(n,s),this.os=(n,s)=>s==null||!s.event||n?.event===s?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;x((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((s,r)=>{this.on(s,r)}))}register(e){var n,s;if(!x((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(s=this._instance)!=null&&s.autocapture)){var r,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(i)}}on(e,n){var s;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((s=this.vs)==null?void 0:s.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var s of n.steps)if(this.ss(e,s))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var s,r=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!r||typeof r!="string"||!sn(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var s;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>sn(a.href,n.href,n.href_matching||"exact")));var i,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&sn((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var s;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>sn(u.text,n.text,n.text_matching||"exact")||sn(u.$el_text,n.text,n.text_matching||"exact")));var i,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(i=(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=n.text,a=n.text_matching||"exact",i.some((u=>sn(u,o,a))))}ys(e,n){var s,r;if(n==null||!n.selector)return!0;var i=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(i!=null&&i.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||sd(n.properties.reduce(((s,r)=>{var i=L(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return s[r.key]={values:i,operator:r.operator||"exact"},s}),{}),e?.properties)}}class _f{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((s=>this.Ss(s)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&sd(e.propertyFilters,n?.properties)}Ps(e,n){var s=new Map;return e.forEach((r=>{var i;(i=r.conditions)==null||(i=i[n])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(r.id),s.set(o.name,a)}}))})),s}Rs(e,n,s){var r=(s===$n.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>r?.includes(a.id)))})),i.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;x((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((s=>{var r,i;return((r=s.conditions)==null?void 0:r.actions)&&((i=s.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new vf(this._instance),this.Os.init(),this.Os.fs((s=>{this.onAction(s)}))),n.forEach((s=>{var r,i,o,a,l;s.conditions&&(r=s.conditions)!=null&&r.actions&&(i=s.conditions)!=null&&(i=i.actions)!=null&&i.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.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 n,s=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));s.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,$n.Activation),this.ks=this.Ps(e,$n.Cancellation))}onEvent(e,n){var s,r,i=this.Ds(),o=(n==null||(s=n.properties)==null?void 0:s.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,$n.Cancellation);l.length>0&&(i.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)){i.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,$n.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var s=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var i of e)s&&this.Cs(i)?this.qs(i)&&this.Us(i):r.push(i);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((s=>s!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((i=>!n.has(i)));var s=this.Zs(),r=s.filter((i=>!n.has(i)));r.length!==s.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return s&&typeof s=="object"?s:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(b({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),s={},r=!1;for(var i of Object.entries(n)){var o=i[0],a=i[1];e.includes(o)?r=!0:s[o]=a}r&&(mt(s)?this.Es():this.Ts(s))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return he(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,s=this.Zs();if(s.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return i&&r===i?s:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,s=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(s&&s!==e){var r=this.Zs(),i=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>he(i[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 yf extends _f{constructor(e){super(e)}Js(){return Yi}Ys(){return Os}Ms(){return Ds}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Ds]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ds)}Cs(e){var n,s;this.As((i=>{s=i.find((o=>o.id===e))}));var r=(n=s)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return he(r)&&r>0}ra(){return ft.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Yi]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Os]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Os)}ea(){return!1}$s(e,n){var s;this.As((i=>{s=i.find((o=>o.id===n))}));var r=!s||(function(i){var o;return rd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(s);return r?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 Ts="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",wf=v!=null&&v.location?hr(v.location.hash,"__posthog")||hr(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=ne("[Toolbar]"),Bl=ne("[FeatureFlags]");class bf{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((s,r)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=s.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=s.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,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,n),!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=ne("[FeatureFlags]"),Ot=ne("[FeatureFlags]",{debugEnabled:!0}),xi=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},Wl=t=>{var e={};for(var n of js(t||{})){var s=n[1];s&&(e[n[0]]=s)}return e},Xe=ne("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",Ef={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>gr(e,t),not_regex:(t,e)=>!gr(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),n.getWebExperiments((r=>{ye.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((i=>{if(i.feature_flag_key){var o;n.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=n.oa)==null||o.set(i.feature_flag_key,i));var a=n._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&n.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,n._instance)&&n.la(i.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((n=>{var s;if(this.oa&&(s=this.oa)!=null&&s.has(n)){var r,i=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var n=vn(e?.search,"__experiment_id"),s=vn(e?.search,"__experiment_variant");n&&s&&(ye.aa("previewing web experiments "+n+" && "+s),this.getWebExperiments((r=>{this.ha(parseInt(n),s,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,s){if(this.Ne.disable_web_experiments&&!s)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,n,s){var r=s.filter((i=>i.id===e));r&&r.length>0&&(ye.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!D(e.conditions)&&ye.da(e,n)&&ye.va(e)}static da(e,n){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.url))return!0;var r=ye.getWindowLocation();if(r){var i,o,a,l=wu(n,r.href);return(i=e.conditions)==null||!i.url||Ef[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var n;if(D(e.conditions)||D((n=e.conditions)==null?void 0:n.utm))return!0;var s=Mu();if(s.utm_source){var r,i,o,a,l,u,c,d,h=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.utm_campaign)==s.utm_campaign,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,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)==s.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;n>r;r++)s[r-1]=arguments[r];k.info("[WebExperiments] "+e,s)}la(e,n,s){this._is_bot()?ye.aa(zl):n!=="control"?s.forEach((r=>{if(r.selector){var i;ye.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(i=document)==null?void 0:i.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?ed(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=ne("[Conversations]"),Dt="Conversations not available yet.",ql="console",cd="__posthogHandledLogsRequestError",ki=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[cd]=!0,n},Vl=t=>!!t&&typeof t=="object"&&t[cd]===!0,Nr={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 bf(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return v&&re(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[Hn,Wn,Ls,et]){var n=this.Oa(e);x(n)||(t[e]=n)}this.fa=t;var s=b({},t),r=this.Oa(Bt);if(r)for(var i of Object.entries(r))s["$feature/"+i[0]]=i[1];this.pa=s}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Kn);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,s=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(s).length){var r,i,o=(r=(i=n.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&r!==void 0?r:{},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,n){var s,r,i=n!=null&&n.merge&&(s=this.Oa(Bt))!==null&&s!==void 0?s:{},o=n!=null&&n.merge&&(r=this.Oa(Wn))!==null&&r!==void 0?r:{},a=b({},i,t),l=b({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled: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(Ki),e=this.Oa(et),n=this.Oa(jt);if(!n&&!e)return t||{};var s=ee({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var i of r){var o,a,l=s[i],u=e?.[i],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=n?.[i],p=b({},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=b({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),s[i]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:s}),this.ca=!0),s}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var s=t[n];return{key:n,enabled:Da(s),variant:Ba(s),payload:Oa(e[n])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Wn),e=this.Oa(jt);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:b({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:Uu()};x(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var s=this.Na();s.length&&(n.evaluation_contexts=s);var r=this.qa();x(r)||(n.flag_keys=r);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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({[Bs]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?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({[Bs]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,f,{partialResponse:i}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Tu(this.Sa,3)}Ua(t){this.Sa=Nu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s=this.getFeatureFlagResult(t,e);return(n=s?.variant)!==null&&n!==void 0?n:s?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+xi)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,s=this.getFlagVariants(),r=t in s,i=s[t],o=this.getFlagPayloads()[t],a=String(i),l=this.Oa(Ls)||void 0,u=this.Oa(Kn)||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(qn);h&&h!==p&&(c={},n=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Wt]:c,[qn]:n});else{var f,g,m,_,E,w,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(b({[Wt]:c},n?{[qn]:n}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Bs))!==null&&f!==void 0?f:[]];x(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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=(w=S==null||(I=S.reason)==null?void 0:I.description)!==null&&w!==void 0?w: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 n&&this.F({[Wt]:c,[qn]:n});if(r)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xi)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r={distinct_id:s.distinctId,token:s.projectToken,person_properties:{$lib:s.library.name,$lib_version:s.library.version}},i=n.Na();i.length&&(r.evaluation_contexts=i);var o,a=n.qa();x(a)||(r.flag_keys=a);try{var l,u=(l=(yield s.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+xi),e.defaultValue;var n=this.getFeatureFlag(t,e);return x(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var s=(function(r,i,o,a,l,u){i===void 0&&(i={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,B)=>{var S=P.flags;return S?b({},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)})(r,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=r.requestId,g=r.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{[Hn]:h,[Bt]:m,[sr]:!1}}var E=h,w=p,I=d;if(l!=null&&l.partialResponse)E=b({},i,E),w=b({},o,w),I=b({},a,I);else if(r.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=b({},i,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),w=b({},o,Object.fromEntries(Object.entries(w||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=b({},i,E),w=b({},o,w),I=b({},a,I);return b({[Hn]:Object.keys(Wl(E)),[Bt]:E||{},[Wn]:w||{},[Ki]:I||{},[sr]:r.minimalFlagCalledEvents===!0},f?{[Ls]:f}:{},g?{[Kn]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,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,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var s={},r=n.flags,i=n.payloads;return r&&(s[et]=L(r)?Hl(r):r),i&&(s[jt]=i),Object.keys(s).length&&this.F(s),r===!1&&i===!1?this.q([et,jt]):r===!1?this.q(et):i===!1&&this.q(jt),this.Va(),r===!1?Ot.info("Flag overrides cleared"):r&&Ot.info("Flag overrides set",{flags:r}),void(i===!1?Ot.info("Payload overrides cleared"):i&&Ot.info("Payload overrides set",{payloads:i}))}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(),n=e.flags,s=e.flagVariants;try{t(n,s)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var s=(this.Oa(Ms)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:r};s&&(i.$early_access_feature_name=s.name),n&&(i.$feature_enrollment_stage=n);var o=b({},this.getFlagVariants(),{[t]:e});this.F({[Hn]:Object.keys(Wl(o)),[Bt]:o,[ct]:b({},this.Oa(ct)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var s=this.Oa(Ms);!s||e?this.Qa(t,n):t(s)}Qa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield s.sendRequest("/api/early_access_features/?token="+s.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Ms]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,s)=>(n[s]=e[s],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,s=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,s,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(ct)||{},s=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,i={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(i[o]=r[o]));this.F({[ct]:b({},n,i,s)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=b({},this.Oa(ct)||{});t.forEach((s=>{delete n[s]})),this.F({[ct]:n}),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 n=this.Oa(Ut)||{},s=b({},n);for(var r of Object.keys(t))s[r]=b({},n[r],t[r]);this.F({[Ut]:s}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:b({},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}}},Sf={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===On||this.Ya===$s?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 n=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.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&&re(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),n=!this.Ne.disable_session_recording,s=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&n&&!s}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!x(Object.assign)&&!x(Array.from);this.ro&&n?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,n,s;this.ro&&(this.Ya!==On&&this.Ya!==$s&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=$.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return at.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(zo),(e=this.Mr)==null||e.unregister(cu)}uo(t,e){if(D(t))return null;var n,s=he(t)?t:parseFloat(t);return typeof(n=s)!="number"||!Number.isFinite(n)||0>n||n>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):s}ho(t){if(this.Mr){var e,n,s=this.Mr,r=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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]:b({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:b({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})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===On&&(this.Ya=$s,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(qt);return(n==null||(e=n.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(n){return at.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,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({[vu]:!0});var r;if(this.Ja||(this.Ja=(r=$.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===$s||this.Ya===On?void 0:(this.Ya=On,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Hu(this._instance).load());this.Ya=Nl,(n=(s=this.Ja).setDocumentWasEverVisible)==null||n.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({[du]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?hu:pu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},xf={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,n=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((s=>new RegExp(s))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((s=>new RegExp(s))),n}yo(){if(this.isBrowserSupported()){if(v&&C){var t=n=>{n=n||v?.event;try{this.bo(n)}catch(s){wi.error("Failed to capture event",s)}};if(re(C,"submit",t,{capture:!0}),re(C,"change",t,{capture:!0}),re(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||v?.event;try{this.bo(n,yi)}catch(s){wi.error("Failed to capture copy/cut event",s)}};re(C,"copy",e,{capture:!0}),re(C,"cut",e,{capture:!0})}}}else wi.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;Ke(n)&&(this.instance.persistence&&this.instance.persistence.register({[Ui]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((s=>{var r=C?.querySelectorAll(s);r?.forEach((i=>{t===i&&n.push(s)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[Ui],s=this.co,r=this.instance.Qi()&&!this.fo;if($e(s)&&!Ke(n)&&!r)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,s=ai(t);Eu(s)&&(s=s.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(s,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===yi;if(s&&(function(d,h,p,f,g,m){var _;if(!v||Jo(d)||p!=null&&p.url_allowlist&&!sl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&sl(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 w=Fu(d,f),I=w.parentIsUsefulElement,F=w.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?_:wp))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&&(Ko.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(s,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var i=pf(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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(s);if(a&&a.length>0&&(o.$element_selectors=a),e===yi){var l,u=ku(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(s,r,i){try{if(!(r in s))return $l;var o={next:s[r]},a=i((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[r]=a,()=>{if(s[r]!==a)for(var l=s[r];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[r]=o.next}}catch{return $l}})(v.history,t,(s=>function(r,i,o){s.call(this,r,i,o),n.So(t)}))}}So(t){try{var e,n=v==null||(e=v.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(on,{navigation_type:t}),this._o=n}catch(s){k.error("Error capturing "+t+" pageview",s)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};re(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[Hi]),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;gf.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Hi]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ei(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),re(v,lr,this.Po),this.Ro=t=>this.ke(t||v?.event),re(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),re(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,Cp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),re(C,ar,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(lr,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ar,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),i=(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=Iu(u)}return!1})(ai(t),["fixed","sticky"],r);return{x:t.clientX+(i?0:s),y:t.clientY+(i?0:n),target_fixed:i,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!nl(t.target)&&Ei(t)){var s=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(ai(t),this.instance.config.rageclick)&&this.Vt(b({},s,{type:"rageclick"})),this.Vt(s)}}Fo(t){!nl(t.target)&&Ei(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,n=this.Ne.custom_personal_data_properties,s=this.Ne.mask_personal_data_properties?[..._n,...n||[]]:[],r=is(e,s,os);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].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",b({$current_url:this.R.url},this.R.metrics.reduce(((n,s)=>b({},n,{["$web_vitals_"+s.name+"_event"]:b({},s),["$web_vitals_"+s.name+"_value"]:s.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var s;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(n?.name)||D(n?.value))Lt.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,i=this.Bo(r);if(!x(i)){var o=he(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+i;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=i),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(s=this._instance.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0),l=b({},n,r?{navigationURL:i}:{},{$current_url:i,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,n)}}},this.Uo=()=>{if(!this.vo){var n,s,r,i,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(n=l.onLCP,s=l.onCLS,r=l.onFCP,i=l.onINP),n&&s&&r&&i){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(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[Vi]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(n)?((e=this._instance.persistence)==null?void 0:e.props[Gi])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value: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 n=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({[Vi]:n}),this._instance.persistence.register({[Gi]:s})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,n=this.zo,s=e?.postHogWebVitalsCallbacksByFlavor;s!=null&&s[n]||n==="web-vitals"&&x(s)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?Lt.error("failed to load script",r):t()}))}Bo(t){var e=t||v?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?Ct(e):e,s=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[..._n,...s||[]]:[];return is(n,r,os)}Lt.error("Could not determine current URL")}}},kf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(v&&this.isEnabled&&(n=$.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var s=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(this.captureException.bind(this)))}catch(o){Ln.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Wi]),this.Jo=new Eh(b({},(function(n){var s,r,i,o;return n===void 0&&(n={}),{refillRate:(s=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(i=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ln})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=b({},e,t):(x(t)?this.Ko:t)&&(e=b({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ln.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(s=>{if(s)return Ln.error("failed to load script",s);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Wi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,s,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?Ln.info("Skipping exception capture because of client rate limiting.",{exception:r}):(s=this._instance.exceptions)==null||s.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Bh([new Gh,new np,new Jh,new Kh,new ep,new Qh,new Zh,new tp],(function(s){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;r>o;o++)i[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 i){var g=f(p,s);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 b({},E,{filename:E.filename||(w=_,w[w.length-1]||{}).filename,function:E.function||mn});var w}))})(u)}})("web:javascript",Wh,Vh)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(zi))!==null&&e!==void 0?e:[],this.el=nr(this.il()),this.rl=new rp(this.el)}onConfigChange(){this.el=nr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,s;if(t.ok){var r=t.config;if("errorTracking"in r){var i=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(s=r.errorTracking)==null?void 0:s.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[zi]:this.Xo,[qi]:o})}}}get nl(){var t,e=!!this._instance.get_property(qi),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var n=(function(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>sp.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),s=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(b({[er]:t,[tr]:new Date().toISOString()},s))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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 n=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,s=typeof(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;s&&(n.$release_id=s);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}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 i}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:b({},t,{$exception_steps:e})}catch(n){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[er]:t,[tr]:new Date().toISOString()})}sl(t){return te(t)?b({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((n,s)=>{var r=s.type,i=s.value;return W(r)&&r.length>0&&n.$exception_types.push(r),W(i)&&i.length>0&&n.$exception_values.push(i),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var s=n.values.map((r=>{var i=nd[r.operator],o=e[r.key];if(!i||!o)return!1;var a=L(r.value)?r.value:[r.value];return a.length>0&&i(a,o)}));return n.type==="OR"?s.some(Boolean):s.every(Boolean)}))}catch(n){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,s;return(n=(s=e.stacktrace)==null?void 0:s.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,s,r,i=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(s=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&s!==void 0&&s}return!1}al(t){return!D(t)&&L(t)}}},If=b({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var n,s;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Si(this._instance))return!this.vl&&D((n=this.Mr)==null?void 0:n.props[zn])||Rs.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&&Si(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(s=>{s?Rs.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 n=this.Mr;if(n){var s=n.props[zn];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:r=>{if(Si(this._instance)){var i=r.statusCode;if(i!==200||!r.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?r.error||Rs.warn(o):Rs.error(o),void t([],{isLoaded:!1,error:o})}var a=L(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[zn]: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(zn)}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)}}},Nr),Cf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,s,r,i,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:b({},Cc(t,mf),{properties:b({},t.properties,f?{$set:b({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:b({},(s=(r=t.properties)==null?void 0:r.$set_once)!==null&&s!==void 0?s:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,s,r,i,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 w=m[_];m[_]=E(w),c.push((()=>{m[_]=w}))}},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 w=f(_);return w?m.call(this,w,E):_})),p(u,"replaceChild",(m=>function(_,E){var w=f(_);return w?m.call(this,w,E):E})),[(e=l.Element)==null?void 0:e.prototype,(n=l.Document)==null?void 0:n.prototype,(s=l.DocumentFragment)==null?void 0:s.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))}))})),[(r=l.Element)==null?void 0:r.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"after",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];return _.apply(this,g(w))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,w=new Array(E),I=0;E>I;I++)w[I]=arguments[I];var F=g(w);return w.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var w=f(E);return w?m.call(this,_,w):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var n=this._l();try{var s=t(n);return e&&n(),s}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{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,r=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),s&&n()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;i&&(e.processEvent=i),s=!0}catch(o){Ze.error(Ml+t.id,o),r(!1)}if(s&&e.loaded)try{n()}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 n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),s=function(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(n)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var r of Object.values(this.apps))s(r)}}onRemoteConfig(t){var e,n,s,r=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((n=this.yl)==null||n.call(this),t.ok){var i=t.config;if((s=i.siteApps)!=null&&s.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=r._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of i.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Ff={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,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=(n=$.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(s=>{if(s)return ff.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()}}},Pf=b({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return 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 n=L(e);this.Rl=n?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(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 n=t.generateSurveys;if(n)return void this.Dl(n,e);var s=t.loadExternalDependency;if(!s)return void this.$l(qo);s(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new yf(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 n,s=this._instance.get_property(Ji);if(s&&!e)return t(s,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var i;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):r.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(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)),(i=this._instance.persistence)==null||i.register({[Ji]:c,[rr]:Date.now()});var h={isLoaded:!0};t(c,h),n?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(rr);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,s={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};od(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(n){q.error("Error in survey callback",n)}}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((n=>{var s;e=(s=n.find((r=>r.id===t)))!==null&&s!==void 0?s:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:Ts};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:Ts};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:Ts};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:Ts})):new Promise((n=>{this.getSurveys((s=>{var r,i=(r=s.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(i){var o=this.zl(i);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var s;if(D(this._surveyManager))q.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(ef.includes(r.type)){var i=C?.querySelector(e);if(i)return(s=r.appearance)!=null&&s.surveyPopupDelaySeconds?(q.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,i,n),q.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,i,n);q.warn("Survey element not found")}else q.warn("Surveys of type "+r.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var n;if(D(this._surveyManager))q.warn("init was not called");else{var s=this.Hl(t);if(s){var r=s;if((n=s.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=b({},s,{appearance:b({},s.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 i=this.Ul(s);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,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()}}},Nr),Af={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),no(this.instance.config)||!v||!C)return!1;t=t??v.location,n=n??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var s,r=wf||hr(t.hash,"__posthog")||hr(t.hash,"state"),i=r?el((()=>JSON.parse(atob(decodeURIComponent(r)))))||el((()=>JSON.parse(decodeURIComponent(r)))):null;return i&&i.action==="ph_authorize"?((s=i).source="url",s&&Object.keys(s).length>0&&(i.desiredHash?t.hash=i.desiredHash:n?n.replaceState(n.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(bu));if(!v||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,s=b({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(b({},s,{source:void 0}))),this.Vl()===2)this.Zl(s);else if(this.Vl()===0){var r;this.Wl(1),(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Dl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(s)})),re(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(s)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},$f=b({experiments:ye},Nr),Rf={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||no(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(qo);n(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":no(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,n){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.sendMessage(t,e,n):(Ue.warn(Dt),null)}))()}getMessages(t,e){var n=this;return X((function*(){return n._conversationsManager?n._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()}}},Tf={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ne("[logs]"),this.nu=b({},this.rt,{error(){for(var s=arguments.length,r=new Array(s),i=0;s>i;i++)r[i]=arguments[i];r.some(Vl)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var s,r;this.Sa=0,(s=this.ou)==null||s.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&re(v,"online",this.au)}uu(t,e,n,s){var r,i=(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,_),w=o?.resourceAttributes;return{serviceName:(d=(h=w?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=w?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=w?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:w,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new Lh(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,s),i]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var s=this.uu((()=>this.tr),(r=>{this.tr=r}));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 n;(n=this.lu)==null||n.reset(),this.gu=e;var s=this.uu((()=>this.su),(r=>{this.su=r}),{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 n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){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",(n=>{var s;n||(s=t.logs)==null||!s.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(qo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:s=>s===ut.LogsQueue?t():void 0,setPersistedProperty(s,r){var i;s===ut.LogsQueue&&e((i=r)!==null&&i!==void 0?i:[])},Ot:s=>this.Ot(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Tu(this.Sa,3))e({kind:"fatal",error:ki(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,s=i=>{n||(n=!0,clearTimeout(r),e(i))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),s({kind:"retry-later",error:ki(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),s({kind:"retry-later",error:ki(i.error,"logs request failed before receiving an HTTP response")})):s({kind:"retry-later",error:(a=i.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Nu(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,n,s,r){if(e.length!==0){var i=e.map((a=>a.record));r([]);var o=ru(i,su(n,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 n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.windowId,r=n.sessionStartTimestamp,i=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=s,D(r)||(e.sessionStartTimestamp=r),D(i)||(e.lastActivityTimestamp=i)}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}}},Nf={metrics:class{constructor(t){this.rt=ne("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new Oh(this.hu(),(function(s){var r,i,o,a,l,u=s?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:s?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var s=!1,r=o=>{s||(s=!0,clearTimeout(i),n(o))},i=setTimeout((()=>r({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(b({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Mf=b({},Nr,Sf,xf,kf,If,Cf,Pf,Ff,Af,$f,Rf,Tf,Nf);Te.__defaultExtensionClasses=b({},Mf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Zn[an]=new Te;return(function(){function e(){e.done||(e.done=!0,ld=!1,Z(Zn,(function(n){n._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():re(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",Lf={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 Of(t={},e=0){const n=fo(t.artifactType||t.type||ud),s=fo(t.artifactName||t.name||t.fileName||`${dd}-${e+1}`);return`${n||"artifact"}-${s||e+1}`}function hd(t={},e=0){const n=kt(t),s=n.artifactType||n.type||ud,r=n.artifactName||n.name||dd;let i=n.fileName||r;return i.endsWith(".dart")||(i+=".dart"),{id:fo(n.id)||Of({...n,artifactType:s,artifactName:r,fileName:i},e),artifactType:s,artifactName:r,fileName:i,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:pd(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:fd(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:kt(n.metadata),codeType:n.codeType||Lf[s]||"O"}}function pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=kt(e),s=n.name||n.package;return s?{name:s,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function fd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=kt(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function go(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function as(t,e={}){const n=[],s=typeof t=="string"?go(t):t,i=kt(s||{});!s&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>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(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:pd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function vr(t){return as(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 wn(t){return JSON.stringify(t,null,2)}function Df(t){return wn({task:"architect",userRequest:String(t??"")})}function Bf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?wn(e):wn({task:"generate_bundle",bundleSpec:e})}function jf(t){return wn({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 n={stage:t};return e!=null&&(n.bundle=yt(e)),n}function Uf({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:s,userFeedback:r}){return wn({task:"regenerate_artifact",artifactId:s,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),userFeedback:String(r)})}function gd({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:s}){return wn({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),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"},Hf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Wf(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(Wf(t))return t;for(const n of Hf){const s=t[n];if(Le(s)){const r=md(s,e+1);if(r)return r}}return null}function _r(t){return Array.isArray(t)?t.some(_r):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(_r):!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 vd(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function zf(t,e){if(Le(t))for(const[n,s]of Object.entries(t)){if(!Le(s))continue;const r=Le(s.categories)?s.categories:{},i=Object.entries(r).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):s.matched===!0&&e.add(vd(n))}}function qf(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(s=>Le(s)?Object.entries(s):[]):Object.entries(t);for(const[s,r]of n){if(!_r(r))continue;const i=vd(s),o=r?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?r?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>_r(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}function Vf(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 Gf(t){const e=md(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);zf(e.filterSummary,n),qf(e.filterResults,n);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,i=mo(e.filterSummary||e.filterResults);return!s&&!i&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:s?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function Kf(t,e){const n=Gf(t);if(!n)return null;const s=[...new Set(n.matchedFilters.map(Vf))],r=n.kind==="blocked",i=new Error(r?`Safety screening blocked this pipeline step for ${Kl(s)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=r?"Request blocked for safety":"Safety check unavailable",i.userMessage=r?`The safety check detected ${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.",i.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=n.matchedFilters,i}function Jf(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/,n=[];for(const s of Jf(t).split(` +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const i of r)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(r){const i={};return r.integrity&&(i.integrity=r.integrity),r.referrerPolicy&&(i.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?i.credentials="include":r.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(r){if(r.ep)return;r.ep=!0;const i=n(r);fetch(r.href,i)}})();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,$i=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,dh=we?.CompressionStream,Pe=ke?.userAgent;function Ic(){return!(!v||v.navigator.onLine===!1)}var Fn=typeof globalThis<"u"?globalThis:v;Fn&&typeof self>"u"&&(Fn.self=Fn),Fn&&typeof File>"u"&&(Fn.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function Oa(t,e,n,s,r,i,o){try{var a=t[i](o),l=a.value}catch(u){return void n(u)}a.done?e(l):Promise.resolve(l).then(s,r)}function X(t){return function(){var e=this,n=arguments;return new Promise((function(s,r){var i=t.apply(e,n);function o(l){Oa(i,s,r,o,a,"next",l)}function a(l){Oa(i,s,r,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 n=arguments[e];for(var s in n)({}).hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},w.apply(null,arguments)}function Cc(t,e){if(t==null)return{};var n={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(e.indexOf(s)!==-1)continue;n[s]=t[s]}return n}var La=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 Pn,hh=["$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})({}),ph=["$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"],fh=["token"],Fc="NativeGzipValidationError",Ri=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",Es=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Fc,e},gh=(function(){var t=X((function*(e,n){18>e.size&&Es("too-short");var s=new Uint8Array(yield e.slice(0,10).arrayBuffer());Ri(s)&&s[2]===8||Es("invalid-header");var r=new DataView(yield e.slice(e.size-8).arrayBuffer());r.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Pn)return Pn;Pn=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Pn[c]=d>>>0}return Pn})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(n)&&Es("invalid-crc");var i=n.length>>>0;r.getUint32(4,!0)!==i&&Es("invalid-size")}));return function(e,n){return t.apply(this,arguments)}})();function Ti(){return Ti=X((function*(t,e,n){e===void 0&&(e=!0);try{var s=new TextEncoder().encode(t),r=new globalThis.CompressionStream("gzip"),i=r.writable.getWriter(),o=i.write(s).then((()=>i.close())).catch((function(){var u=X((function*(c){try{yield i.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(r.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield gh(l,s),l}catch(u){if(n!=null&&n.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Ti.apply(this,arguments)}var mh=["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 n=t.toLowerCase();return mh.concat(e).some((s=>{var r=s.toLowerCase();return n.indexOf(r)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var $r=function(t){return t.trim()},Ni=function(t){return t.replace(/^\$/,"")};function Pc(t){var e,n=[];return(e=JSON.stringify(t,(function(s,r){if(typeof r=="bigint")return r.toString();if(typeof r!="function"&&typeof r!="symbol"){if(r instanceof Error)return{name:r.name,message:r.message,stack:r.stack};if(r&&typeof r=="object"){for(;n.length>0&&n[n.length-1]!==this;)n.pop();if(n.includes(r))return"[Circular]";n.push(r)}return r}})))!==null&&e!==void 0?e:"null"}var Ac=Object.prototype,$c=Ac.hasOwnProperty,Rr=Ac.toString,O=Array.isArray||function(t){return Rr.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!O(t),mt=t=>{if(te(t)){for(var e in t)if($c.call(t,e))return!1;return!0}return!1},k=t=>t===void 0,W=t=>Rr.call(t)=="[object String]",Mi=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>k(t)||$e(t),he=t=>Rr.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Rr.call(t)==="[object Boolean]",vh=t=>t instanceof FormData,_h=t=>M(ph,t),yh=t=>M(fh,t);function Rc(t){return t===null||typeof t!="object"}function Ks(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Oo(t){return typeof Event<"u"&&Tc(t,Event)}function Tc(t,e){try{return t instanceof e}catch{return!1}}var wh=[!0,"true",1,"1","yes"],Zr=t=>M(wh,t),bh=[!1,"false",0,"0","no"];function st(t,e,n,s,r){return e>n&&(s.warn("min cannot be greater than max."),e=n),he(t)?t>n?(s.warn(" cannot be greater than max: "+n+". Using max value instead."),n):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: "+n+", fallback: "+r),st(r||n,e,n,s))}class Eh{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,n){var s=Math.floor((n-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 n,s=Date.now(),r=String(e),i=this.tt[r];return i?this.ot(i,s):this.tt[r]=i={tokens:this.it,lastAccess:s},i.tokens===0||(i.tokens--,i.tokens===0&&((n=this.et)==null||n.call(this,e)),i.tokens===0)}stop(){this.tt={}}}var Le="Mobile",Js="iOS",vt="Android",fn="Tablet",Nc=vt+" "+fn,Mc="iPad",Oc="Apple",Lc=Oc+" Watch",Vn="Safari",gn="BlackBerry",Dc="Samsung",Bc=Dc+"Browser",jc=Dc+" Internet",Vt="Chrome",Sh=Vt+" OS",Uc=Vt+" "+Js,Lo="Internet Explorer",Hc=Lo+" "+Le,Do="Opera",xh=Do+" Mini",Bo="Edge",Wc="Microsoft "+Bo,dn="Firefox",zc=dn+" "+Js,ts="Nintendo",ns="PlayStation",hn="Xbox",qc=vt+" "+Le,Vc=Le+" "+Vn,Bn="Windows",Oi=Bn+" Phone",za="Nokia",Li="Ouya",Gc="Generic",kh=Gc+" "+Le.toLowerCase(),Kc=Gc+" "+fn.toLowerCase(),Di="Konqueror",Jc="Oculus Browser",Ys="Vivaldi",Yc="Yandex",Zs="Whale",Bi="DuckDuckGo",Zc="Pale Moon",Xs="Waterfox",Gn="Brave",Xc="Google Search App",le="(\\d+(\\.\\d+)?)",Xr=new RegExp("Version/"+le),Ih=new RegExp(hn,"i"),Ch=new RegExp(ns+" \\w+","i"),Fh=new RegExp(ts+" \\w+","i"),jo=new RegExp(gn+"|PlayBook|BB10","i"),Ph={"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"},Qc=function(t,e,n,s){e=e||"";var r=(function(i){return i!=null&&i.brave?Gn:null})(n);return r||(s!=null&&s.detectGoogleSearchApp&&M(t,"GSA/")?Xc:M(t," OPR/")&&M(t,"Mini")?xh:M(t," OPR/")?Do:jo.test(t)?gn:M(t,"IE"+Le)||M(t,"WPDesktop")?Hc:M(t,"OculusBrowser")?Jc:M(t,Bc)?jc:M(t,Bo)||M(t,"Edg/")?Wc:M(t,Ys+"/")?Ys:M(t,"YaBrowser/")?Yc:M(t,Zs+"/")?Zs:M(t,Bi+"/")||M(t,"Ddg/")?Bi:M(t,"FBIOS")?"Facebook "+Le:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?Uc:M(t,"CrMo")||M(t,Vt)?Vt:M(t,vt)&&M(t,Vn)?qc:M(t,"FxiOS")?zc:M(t.toLowerCase(),Di.toLowerCase())?Di:M(t,Gn+"/")?Gn:((i,o)=>o&&M(o,Oc)||(function(a){return M(a,Vn)&&!M(a,Vt)&&!M(a,vt)})(i))(t,e)?M(t,Le)?Vc:Vn:M(t,"PaleMoon/")?Zc:M(t,Xs+"/")?Xs:M(t,dn)?dn:M(t,"MSIE")||M(t,"Trident/")?Lo:M(t,"Gecko")?dn:"")},Ah={[Hc]:[new RegExp("rv:"+le)],[Wc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[Uc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[Vn]:[Xr],[Vc]:[Xr],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[dn]:[new RegExp(dn+"\\/"+le)],[zc]:[new RegExp("FxiOS\\/"+le)],[Di]:[new RegExp("Konqueror[:/]?"+le,"i")],[gn]:[new RegExp(gn+" "+le),Xr],[qc]:[new RegExp("android\\s"+le,"i")],[jc]:[new RegExp(Bc+"\\/"+le)],[Jc]:[new RegExp("OculusBrowser\\/"+le)],[Ys]:[new RegExp(Ys+"\\/"+le)],[Yc]:[new RegExp("YaBrowser\\/"+le)],[Zs]:[new RegExp(Zs+"\\/"+le)],[Gn]:[new RegExp(Gn+"\\/"+le)],[Bi]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Zc]:[new RegExp("PaleMoon\\/"+le)],[Xs]:[new RegExp(Xs+"\\/"+le)],[Xc]:[new RegExp("GSA\\/"+le)],[Lo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},$h=function(t,e,n,s){var r=Qc(t,e,n,s),i=Ah[r];if(k(i))return null;for(var o=0;i.length>o;o++){var a=t.match(i[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(hn+"; "+hn+" (.*?)[);]","i"),t=>[hn,t&&t[1]||""]],[new RegExp(ts,"i"),[ts,""]],[new RegExp(ns,"i"),[ns,""]],[jo,[gn,""]],[new RegExp(Bn,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Oi,""];if(new RegExp(Le).test(e)&&!/IEMobile\b/.test(e))return[Bn+" "+Le,""];var n=/Windows NT ([0-9.]+)/i.exec(e);if(n&&n[1]){var s=Ph[n[1]]||"";return/arm/i.test(e)&&(s="RT"),[Bn,s]}return[Bn,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Js,[t[3],t[4],t[5]||"0"].join(".")]:[Js,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=k(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+vt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+vt+")","i"),t=>t&&t[2]?[vt,[t[2],t[3],t[4]||"0"].join(".")]:[vt,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[Sh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return Fh.test(t)?ts:Ch.test(t)?ns:Ih.test(t)?hn:new RegExp(Li,"i").test(t)?Li:new RegExp("("+Oi+"|WPDesktop)","i").test(t)?Oi:/iPad/.test(t)?Mc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Lc:jo.test(t)?gn:/(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(Le).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:Nc:new RegExp("(pda|"+Le+")","i").test(t)?kh:new RegExp(fn,"i").test(t)&&!new RegExp(fn+" pc","i").test(t)?Kc:""},Rh=/^[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(n=t)=="string"&&Rh.test(n)?t:e();var n}function Ct(t){return t&&t.split("#")[0]}function Uo(t,e){var n=setTimeout(t,e);return n?.unref&&n?.unref(),n}function Ka(t,e,n){return eu.apply(this,arguments)}function eu(){return(eu=X((function*(t,e,n){var s;try{return yield Promise.race([t,new Promise(((r,i)=>{s=Uo((()=>{try{n?.(),r()}catch(o){i(o)}}),e)}))])}finally{clearTimeout(s)}}))).apply(this,arguments)}var Th=t=>t instanceof Error,tu={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}},Nh=tu.info;function nu(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(O(t))return{arrayValue:{values:t.map((e=>nu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Qs(t){var e=[];for(var n in t){var s=t[n];$e(s)||k(s)||e.push({key:n,value:nu(s)})}return e}function Mh(t,e){var n=tu[t.level||"info"]||Nh,s=n.text,r=n.number,i=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:i,observedTimeUnixNano:i,severityNumber:r,severityText:s,body:{stringValue:t.body},attributes:Qs(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),k(t.trace_flags)||(l.flags=t.trace_flags),l}function su(t,e,n){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":n})}function ru(t,e,n,s){return{resourceLogs:[{resource:{attributes:Qs(e)},scopeLogs:[{scope:{name:n,version:s},logRecords:t}]}]}}let Oh=class{constructor(t,e,n,s,r,i,o){var a;i===void 0&&(i=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=n,this.ut=s,this.ht=r,this.dt=i,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var n={record:Mh(e,this.ut())};this.ht((()=>this.At(n)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=O(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Log was rejected in beforeSend function"),null;s=i}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 n=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(n.length!==0)for(var s=n.length,r=0;n.length>0&&s>r;){var i,o;t.ft=0;var a=Math.min(n.length,t.Ct),l=n.slice(0,a),u=ru(l.map((d=>d.record)),t.Lt(),(i=t.vt)!==null&&i!==void 0?i:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),n=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],r+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var n,s=Math.max(0,t-e.ft),r=(n=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&n!==void 0?n:[];e._instance.setPersistedProperty(ut.LogsQueue,r.slice(s)),yield e.dt()}))()}Lt(){return su(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var n=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>n.length||(n.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),n.push(t),this._instance.setPersistedProperty(ut.LogsQueue,n),this.kt>n.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 n=e.flush().catch((()=>{}));t!==void 0?yield Ka(n,t):yield n}))()}flushWithTimeout(t){var e=this;return X((function*(){var n=e.flush();yield Ka(n,t,(()=>{n.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Qr=[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,n,s){var r="";return s&&(r=Object.keys(s).sort().map((i=>JSON.stringify(i)+":"+JSON.stringify(s[i]))).join(",")),t+"\0"+e+"\0"+(n??"")+"\0"+r}let Lh=class{constructor(t,e,n){this._instance=t,this.Ne=e,this.rt=n,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,n){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:n?.unit,attributes:n?.attributes})}gauge(t,e,n){this.Vt({name:t,type:"gauge",value:e,unit:n?.unit,attributes:n?.attributes})}histogram(t,e,n){this.Vt({name:t,type:"histogram",value:e,unit:n?.unit,attributes:n?.attributes})}flush(){var t=this,e=this.ct,n=(function(){var r=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return r.apply(this,arguments)}})(),s=n().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 n,s;try{n=e.attributes?w({},e.attributes):void 0,s=Ya(e.type,e.name,e.unit,n)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var r=this.Bt.get(s);if(!r){if(!this.Qt())return;r={name:e.name,type:e.type,unit:e.unit,attributes:n,windowStartMs:Date.now()},this.Bt.set(s,r)}var i=this.Ut.get(e.name);i===void 0?this.Ut.set(e.name,e.type):i===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+i+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(r,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var n;switch(t.type){case"count":t.total=((n=t.total)!==null&&n!==void 0?n:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Qr.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(r,i){for(var o=0;i.length>o;o++)if(i[o]>=r)return o;return i.length})(e,Qr)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var n=O(e)?e:[e],s=t;for(var r of n)try{var i=r(s);if(!i)return this.rt.info("Metric was rejected in beforeSend function"),null;s=i}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 n=t.Wt,s=yield t._instance.Jt(t.Gt(e));if(n===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),n=(function(i,o,a){return w({},i.resourceAttributes,{"service.name":i.serviceName||"unknown_service"},i.environment&&{"deployment.environment":i.environment},i.serviceVersion&&{"service.version":i.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),s=this._instance.getLibraryId(),r=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Qs(n)},scopeMetrics:[{scope:{name:s,version:r},metrics:e}]}]};var e,n,s,r}Xt(t){var e=Ja(Date.now()),n=new Map;for(var s of t.values()){var r,i=Ya(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o=w({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:[]},n.set(i,o));var a=Qs((r=s.attributes)!==null&&r!==void 0?r:{}),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:Qr})}return Array.from(n.values())}Yt(t){var e,n;for(var s of t){var r=s[0],i=s[1],o=this.Bt.get(r);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,i.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((n=i.total)!==null&&n!==void 0?n:0);break;case"gauge":break;case"histogram":if(i.hist)if(o.hist){o.hist.count+=i.hist.count,o.hist.sum+=i.hist.sum,o.hist.min=Math.min(o.hist.min,i.hist.min),o.hist.max=Math.max(o.hist.max,i.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=i.hist.bucketCounts[a]}else o.hist=i.hist}else this.Qt()&&this.Bt.set(r,i)}}};var Ss,Za,ei;function Dh(t){var e=globalThis._posthogChunkIds;if(e){var n=Object.keys(e);return ei&&n.length===Za||(Za=n.length,ei=n.reduce(((s,r)=>{Ss||(Ss={});var i=Ss[r];if(i)s[i[0]]=i[1];else for(var o=t(r),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[r];if(u&&c){s[u]=c,Ss[r]=[u,c];break}}return s}),{})),ei}}class Bh{constructor(e,n,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=n,this.modifiers=s}buildFromUnknown(e,n){n===void 0&&(n={});var s=n&&n.mechanism||{handled:!0,type:"generic"},r=this.buildCoercingContext(s,n,0).apply(e),i=this.buildParsingContext(n),o=this.parseStacktrace(r,i);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var n=this;return X((function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&O(s.stacktrace.frames)&&(s.stacktrace.frames=yield n.applyModifiers(s.stacktrace.frames));return e}))()}coerceFallback(e){var n;return{type:"Error",value:"Unknown error",stack:(n=e.syntheticException)==null?void 0:n.stack,synthetic:!0}}parseStacktrace(e,n){var s,r;return e.cause!=null&&(s=this.parseStacktrace(e.cause,n)),e.stack!=""&&e.stack!=null&&(r=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?n.skipFirstLines:0),n.chunkIdMap)),w({},e,{cause:s,stack:r})}applyChunkIds(e,n){return e.map((s=>(s.filename&&n&&(s.chunk_id=n[s.filename]),s)))}applyCoercers(e,n){for(var s of this.coercers)if(s.match(e))return s.coerce(e,n);return this.coerceFallback(n)}applyModifiers(e){var n=this;return X((function*(){var s=e;for(var r of n.modifiers)s=yield r(s);return s}))()}convertToExceptionList(e,n){var s,r,i,o={type:e.type,value:e.value,mechanism:{type:(s=n.type)!==null&&s!==void 0?s:"generic",handled:(r=n.handled)===null||r===void 0||r,synthetic:(i=e.synthetic)!==null&&i!==void 0&&i}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,w({},n,{handled:!0}))),a}buildParsingContext(e){var n;return{chunkIdMap:Dh(this.stackParser),skipFirstLines:(n=e.skipFirstLines)!==null&&n!==void 0?n:1}}buildCoercingContext(e,n,s){s===void 0&&(s=0);var r=(i,o)=>{if(4>=o){var a=this.buildCoercingContext(e,n,o);return this.applyCoercers(i,a)}};return w({},n,{syntheticException:s==0?n.syntheticException:void 0,mechanism:e,apply:i=>r(i,s),next:i=>r(i,s+1)})}}var mn="?";function ji(t,e,n,s,r){var i={platform:t,filename:e,function:n===""?mn:n,in_app:!0};return k(s)||(i.lineno=s),k(r)||(i.colno=r),i}var iu=(t,e)=>{var n=t.indexOf("safari-extension")!==-1,s=t.indexOf("safari-web-extension")!==-1;return n||s?[t.indexOf("@")!==-1?t.split("@")[0]:mn,n?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},jh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Uh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Hh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Wh=(t,e)=>{var n=jh.exec(t);if(n)return ji(e,n[1],mn,+n[2],+n[3]);var s=Uh.exec(t);if(s){if(s[2]&&s[2].indexOf("eval")===0){var r=Hh.exec(s[2]);r&&(s[2]=r[1],s[3]=r[2],s[4]=r[3])}var i=iu(s[1]||mn,s[2]);return ji(e,i[1],i[0],s[3]?+s[3]:void 0,s[4]?+s[4]:void 0)}},zh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,qh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Vh=(t,e)=>{var n=zh.exec(t);if(n){if(n[3]&&n[3].indexOf(" > eval")>-1){var s=qh.exec(n[3]);s&&(n[1]=n[1]||"eval",n[3]=s[1],n[4]=s[2],n[5]="")}var r=n[3],i=n[1]||mn,o=iu(i,r);return ji(e,r=o[1],i=o[0],n[4]?+n[4]:void 0,n[5]?+n[5]:void 0)}},Xa=/\(error: (.*)\)/;class Gh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,n){var s=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var n=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?n+": "+e.message:n}isDOMException(e){return Ks(e,"DOMException")}isDOMError(e){return Ks(e,"DOMError")}}class Kh{match(e){return(function(n){switch({}.toString.call(n)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Tc(n,Error)}})(e)}coerce(e,n){return{type:this.getType(e),value:this.getMessage(e,n),stack:this.getStack(e),cause:e.cause?n.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,n){var 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 Jh{constructor(){}match(e){return!!Ks(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,n){var s;if(e.error!=null)return n.apply(e.error);var r=n.apply(e.message);return w({},r,{stack:(s=this.pe(e))!==null&&s!==void 0?s:r.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var n=e;if(W(n.filename)&&n.filename.length>0){var s,r,i=(s=n.lineno)!==null&&s!==void 0?s:0,o=(r=n.colno)!==null&&r!==void 0?r:0;return`Error + at `+n.filename+":"+i+":"+o}}}var Yh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Zh{match(e){return typeof e=="string"}coerce(e,n){var s,r=this.getInfos(e),i=r[0],o=r[1];return{type:i??"Error",value:o??e,stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var n="Error",s=e,r=e.match(Yh);return r&&(n=r[1],s=r[2]),[n,s]}}var Xh=["fatal","error","warning","log","info","debug"];function ou(t,e){e===void 0&&(e=40);var n=Object.keys(t);if(n.sort(),!n.length)return"[object has no keys]";for(var s=n.length;s>0;s--){var r=n.slice(0,s).join(", ");if(e>=r.length)return s===n.length?r:r.length>e?r.slice(0,e)+"...":r}return""}class Qh{match(e){return typeof e=="object"&&e!==null}coerce(e,n){var s,r,i=this.getErrorPropertyFromObject(e);return i?n.apply(i):{type:this.getType(e),value:this.getValue(e),stack:(s=this.getStack(e))!==null&&s!==void 0?s:(r=n.syntheticException)==null?void 0:r.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Oo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var n="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(n+=" with message: '"+e.message+"'"),n}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+ou(e)}isSeverityLevel(e){return W(e)&&!Mi(e)&&Xh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var n in e)if({}.hasOwnProperty.call(e,n)){var s=e[n];if(Th(s))return s}}getObjectClassName(e){try{var n=Object.getPrototypeOf(e);return n?n.constructor.name:void 0}catch{return}}}class ep{match(e){return Oo(e)}coerce(e,n){var s,r=e.constructor.name;return{type:r,value:r+" captured as exception with keys: "+ou(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class tp{match(e){return Rc(e)}coerce(e,n){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class np{match(e){return Ks(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Oo(e))return!1;try{var n=e.detail;return n!=null&&typeof n=="object"&&"reason"in n}catch{return!1}}coerce(e,n){var s,r=this.getUnhandledRejectionReason(e);return Rc(r)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(r),stack:(s=n.syntheticException)==null?void 0:s.stack,synthetic:!0}:n.apply(r)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var er="$message",tr="$timestamp",sp=new Set([er,tr]),ti={enabled:!0,max_bytes:32768};function nr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:ti.enabled,max_bytes:ip(t.max_bytes,ti.max_bytes)}:w({},ti)}class rp{constructor(e){this.Ke=[],this.Je=0,this.Ne=nr(e)}setConfig(e){this.Ne=nr(e),this.Xe()}add(e){var n=(function(r){var i;try{i=Pc(r)}catch{return}try{var o=JSON.parse(i);if(!te(o))return;var a=o,l=a[er],u=a[tr];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:i}}catch{return}})(e);if(n){var s=(function(r){if(typeof TextEncoder<"u")return new TextEncoder().encode(r).length;for(var i=encodeURIComponent(r),o=0,a=0;i.length>a;a++)i[a]==="%"?(o+=1,a+=2):o+=1;return o})(n.json);s>this.Ne.max_bytes||(this.Ke.push({step:n.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 ip(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var n=Math.floor(t);return 0>n?e:n}var au=function(t,e){var n=(e===void 0?{}:e).debugEnabled,s={k(r){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||n)&&!k(v.console)&&v.console){for(var i=("__rrweb_original__"in v.console[r])?v.console[r].__rrweb_original__:v.console[r],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];i(t,...a)}},debug(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("debug",...i)},info(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("log",...i)},warn(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("warn",...i)},error(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];s.k("error",...i)},critical(){for(var r=arguments.length,i=new Array(r),o=0;r>o;o++)i[o]=arguments[o];console.error(t,...i)},uninitializedWarning(r){s.error("You must initialize PostHog before calling "+r)},createLogger:(r,i)=>au(t+" "+r,i)};return s},I=au("[PostHog.js]"),ne=I.createLogger,op=ne("[ExternalScriptsLoader]"),ni=(t,e,n)=>{if(t.config.disable_external_dependency_loading)return op.warn(e+" was requested but loading of external scripts is disabled."),n("Loading of external scripts is disabled");var s=C?.querySelectorAll("script");if(s){for(var r,i=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:n()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,n(void 0,u)})),l.onerror=u=>n(u),{v:void 0})}},o=0;s.length>o;o++)if(r=i())return r.v}var a=()=>{if(!C)return n("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,n(void 0,d)},l.onerror=d=>n(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return n("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,n)=>{if(e!=="remote-config"){var s;if(t.config.strict_script_versioning)s=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var r="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var i=3e5;r=r+"&t="+Math.floor(Date.now()/i)*i}s=t.requestRouter.endpointFor("assets",r)}ni(t,s,n)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");ni(t,o,n)}},$.__PosthogExtensions__.loadSiteApp=(t,e,n)=>{var s=t.requestRouter.endpointFor("api",e);ni(t,s,n)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var lu="$people_distinct_id",ss="$device_id",si="$device_model",jn="__alias",Un="__timers",Ui="$autocapture_disabled_server_side",Hi="$heatmaps_enabled_server_side",Wi="$exception_capture_enabled_server_side",zi="$error_tracking_suppression_rules",qi="$error_tracking_capture_extension_exceptions",Vi="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gi="$web_vitals_allowed_metrics",qt="$session_recording_remote_config",cu="$replay_sample_rate",uu="$replay_override_sampling",du="$replay_override_linked_flag",hu="$replay_override_url_trigger",pu="$replay_override_event_trigger",cn="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Hn="$active_feature_flags",Ms="$early_access_features",Ki="$feature_flag_details",Wn="$feature_flag_payloads",Os="$feature_flag_request_id",sr="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Ji="$surveys",rr="$surveys_loaded_at",Yi="$surveys_activated",Ls="$surveys_activated_session",Ds="$surveys_activated_timestamps",zn="ph_product_tours",Wt="$flag_call_reported",qn="$flag_call_reported_session_id",Bs="$feature_flag_errors",Kn="$feature_flag_evaluated_at",He="$user_state",Zi="$client_session_props",Xi="$capture_rate_limit",Qi="$initial_campaign_params",eo="$initial_referrer_info",ir="$initial_person_info",or="$epp",xs="$posthog_cookieless",fu="$cookieless_mode",gu="$sdk_debug_extensions_init_method",mu="$sdk_debug_extensions_init_time_ms",vu="$sdk_debug_recording_script_not_loaded",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",en="anonymous",Tt="identified",to="identified_only",ar="visibilitychange",lr="beforeunload",on="$pageview",ri="$pageleave",ii="$identify",Qa="$groupidentify";function ks(t,e){O(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(O(t))t.forEach(e);else if(vh(t))t.forEach(((s,r)=>e(s,r)));else for(var n in t)$c.call(t,n)&&e(t[n],n)}var ee=function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),s=1;e>s;s++)n[s-1]=arguments[s];for(var r of n)for(var i in r)r[i]!==void 0&&(t[i]=r[i]);return t};function js(t){for(var e=Object.keys(t),n=e.length,s=new Array(n);n--;)s[n]=[e[n],t[e[n]]];return s}var el=function(t){try{return t()}catch{return}},ap=function(t){return function(){try{for(var e=arguments.length,n=new Array(e),s=0;e>s;s++)n[s]=arguments[s];return t.apply(this,n)}catch(r){I.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),I.critical(r)}}},Vo=function(t){var e={};return Z(t,(function(n,s){(W(n)&&n.length>0||he(n))&&(e[s]=n)})),e},lp=["herokuapp.com","vercel.app","netlify.app"];function cp(t){var e=t?.hostname;if(!W(e))return!1;var n=e.split(".").slice(-2).join(".");for(var s of lp)if(n===s)return!1;return!0}function re(t,e,n,s){var r=s??{},i=r.capture,o=r.passive;t?.addEventListener(e,n,{capture:i!==void 0&&i,passive:o===void 0||o})}function no(t){return t.name==="ph_toolbar_internal"}var _u=t=>{if(C){try{for(var e=t+"=",n=C.cookie.split(";").filter((i=>i.length)),s=0;n.length>s;s++){for(var r=n[s];r.charAt(0)==" ";)r=r.substring(1,r.length);if(r.indexOf(e)===0)return decodeURIComponent(r.substring(e.length,r.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class cr{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,n,s,r){if(!Number.isInteger(e)||!Number.isInteger(n)||!Number.isInteger(s)||!Number.isInteger(r)||0>e||0>n||0>s||0>r||e>0xffffffffffff||n>4095||s>1073741823||r>4294967295)throw new RangeError("invalid field value");var i=new Uint8Array(16);return i[0]=e/Math.pow(2,40),i[1]=e/Math.pow(2,32),i[2]=e/Math.pow(2,24),i[3]=e/Math.pow(2,16),i[4]=e/256,i[5]=e,i[6]=112|n>>>8,i[7]=n,i[8]=128|s>>>24,i[9]=s>>>16,i[10]=s>>>8,i[11]=s,i[12]=r>>>24,i[13]=r>>>16,i[14]=r>>>8,i[15]=r,new cr(i)}toString(){for(var e="",n=0;this.bytes.length>n;n++)e=e+(this.bytes[n]>>>4).toString(16)+(15&this.bytes[n]).toString(16),n!==3&&n!==5&&n!==7&&n!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new cr(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var n=0;16>n;n++){var s=this.bytes[n]-e.bytes[n];if(s!==0)return Math.sign(s)}return 0}}class up{generate(){var e=this.generateOrAbort();if(!k(e))return e;this.S=0;var n=this.generateOrAbort();if(k(n))throw new Error("Could not generate UUID after timestamp reset");return n}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return cr.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 dp}}var tl,yu=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&&!k(v.crypto)&&crypto.getRandomValues&&(yu=t=>crypto.getRandomValues(t));class dp{nextUint32(){return this.R.length>this.O||(yu(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>hp().toString(),hp=()=>(tl||(tl=new up)).generate(),An="",pp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){I.error("cookieStore error: "+t)},P:_u,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,n,s,r){if(!C)return!1;try{var i="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),An)return An;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),E="dmn_chk_"+dt();!An&&_--;){var b=m.slice(_).join("."),x=E+"=1;domain=."+b+";path=/";g.cookie=x+";max-age=3",g.cookie.includes(E)&&(g.cookie=x+";max-age=0",An=b)}return An})(c);if(!h){var p=(f=>{var g=f.match(pp);return g?g[0]:""})(c);p!==h&&I.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,s);if(n){var l=new Date;l.setTime(l.getTime()+864e5*n),i="; expires="+l.toUTCString()}r&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+i+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&I.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}}},oi=null,Q={N(){if(!$e(oi))return oi;var t=!0;if(k(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||I.error("localStorage unsupported; falling back to cookie store"),oi=t,t},j(t){I.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(n){Q.j(n)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},fp=[ss,"distinct_id",cn,zo,or,ir,He],Is={},gp={N:()=>!0,j(t){I.error("memoryStorage error: "+t)},P:t=>Is[t]||null,H:t=>Is[t]||null,F:(t,e)=>(Is[t]=e,!0),q(t){delete Is[t]}},Nt=null,ce={N(){if(!$e(Nt))return Nt;if(Nt=!0,k(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){I.error("sessionStorage error: ",t)},P(t){try{return v?.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(n){ce.j(n)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class mp{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,n=e.token,s=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(s?s+n:"__ph_opt_in_out_"+n)}get ei(){var e=this.ii.P(this.ri);return Zr(e)?1:M(bh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,n=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==n){this.ni=n;var s=e==="localStorage"?pt:Q;s.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Zr(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=>Zr(e)))}}function wu(t,e){var n,s=t==null||(n=t.config)==null?void 0:n.get_current_url;if(!Se(s))return e;try{var r=s(e);return W(r)&&r?r:e}catch(i){return I.error("Error in get_current_url, falling back to window.location.href",i),e}}var bu="__POSTHOG_TOOLBAR__",vp=1,_p=3,yp=11;function nl(t){return t instanceof Element&&(t.id===bu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===vp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function Eu(t){return!!t&&t.nodeType===_p}function Su(t){return!!t&&t.nodeType===yp&&Ft(t.host)}var xu=1e3;function Go(t){return t?$r(t).split(/\s+/):[]}function sl(t,e){var n=(function(s){var r,i=v==null||(r=v.location)==null?void 0:r.href;return k(i)?void 0:wu(s,i)})(e);return!!(n&&t&&t.some((s=>n.match(s))))}function ur(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 ku(t){return D(t)?null:$r(t).split(/(\s+)/).filter((e=>Jn(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rs(t){var e="";return ro(t)&&!Pu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;Eu(n)&&n.textContent&&(e+=(s=ku(n.textContent))!==null&&s!==void 0?s:"")})),$r(e)}function ai(t){var e;return k(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(k(e))return!0;var n,s=function(i){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}})(i,o))))return{v:!0}};for(var r of t)if(n=s(r))return n.v;return!1}function Iu(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var wp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Cu=["next","previous","prev",">","<"],bp=[...Cu,"+","-","−","–"],rl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],Ep=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var n,s,r,i,o;if(Ke(e)?(n=!!e&&il,s=void 0,r=!1):(n=(i=e?.css_selector_ignorelist)!==null&&i!==void 0?i:il,s=e?.content_ignorelist,r=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),n===!1||r&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(Ep,(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=Fu(t,!1).targetElementList;return!(function(l,u){if(l===!1||k(l))return!1;var c;if(l===!0)c=Cu;else{if(!O(l))return!1;if(l.length>10)return I.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=>rl(h,f)||rl(p,f)))}))})(s,a.map((l=>{var u;return{safeText:rs(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,n)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Fu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var n=!1,s=[t],r=t;r.parentNode&&!Me(r,"body");)if(Su(r.parentNode))s.push(r.parentNode.host),r=r.parentNode.host;else{var i=Iu(r);if(!i)break;if(e||Ko.indexOf(i.tagName.toLowerCase())>-1)n=!0;else try{var o=v.getComputedStyle(i);o&&o.getPropertyValue("cursor")==="pointer"&&(n=!0)}catch{}s.push(i),r=i}return{parentIsUsefulElement:n,targetElementList:s}};function ro(t){for(var e=new Set,n=0,s=t;s.parentNode&&!Me(s,"body");s=s.parentNode){if(n++>=xu||e.has(s))return!1;e.add(s);var r=ur(s);if(M(r,"ph-sensitive")||M(r,"ph-no-capture"))return!1}if(M(ur(t),"ph-include"))return!0;var i=t.type||"";if(W(i))switch(i.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 Pu(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,Sp=[16,15,14,13],xp=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 kp(t){for(var e=0,n=!1,s=t.length-1;s>=0;s--){var r=t.charCodeAt(s)-48;n&&(r*=2)>9&&(r-=9),e+=r,n=!n}return e%10==0}function Jn(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=$r(t);var n=e?al.test((t||"").replace(/[- ]/g,"")):(function(r){var i;for(ll.lastIndex=0;i=ll.exec(r);){var o=i[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of Sp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&kp(d))return!0}}}return!1})(t);if(n)return!1;var s=e?xp.test(t):(function(r){var i;for(cl.lastIndex=0;i=cl.exec(r);){var o=i[1],a=i[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=rs(t);return Jn(e=(e+" "+Au(t)).trim())?e:""}function Au(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(n){var s;if(n&&((s=n.tagName)==null?void 0:s.toLowerCase())==="span")try{var r=rs(n);e=(e+" "+r).trim(),n.childNodes&&n.childNodes.length&&(e=(e+" "+Au(n)).trim())}catch(i){I.error("[AutoCapture]",i)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Ip(t){var e=t.attr__class;if(e)return O(e)?e:Go(e)}var Cs=ne("[Dead Clicks]"),Cp=()=>!0,Fp=t=>{var e,n=!((e=t.instance.persistence)==null||!e.get_property(Ho)),s=t.instance.config.capture_dead_clicks;return Ke(s)?s:!!te(s)||n};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,n,s){this.instance=e,this.isEnabled=n,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var n=e.config;"captureDeadClicks"in n&&(this.instance.persistence&&this.instance.persistence.register({[Ho]:n.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var n,s;(n=$.__PosthogExtensions__)!=null&&n.initDeadClicksAutocapture?e():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",(r=>{r?Cs.error("failed to load script",r):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var n=te(this.instance.config.capture_dead_clicks)?w({},this.instance.config.capture_dead_clicks):{};n.__onCapture=this.onCapture,this.onCapture&&(n.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,n),this.si.start(C),Cs.info("starting...")}}else Cs.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,Cs.info("stopping..."))}}var li=ne("[SegmentIntegration]"),$u="posthog-js";function Ru(t,e){var n=e===void 0?{}:e,s=n.organization,r=n.projectId,i=n.prefix,o=n.severityAllowList,a=o===void 0?["error"]:o,l=n.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,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}))),x={$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 s&&r&&(x.$sentry_url=(i||"https://sentry.io/organizations/")+s+"/issues/?project="+r+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(x)),c}}class Pp{constructor(e,n,s,r,i,o){this.name=$u,this.setupOnce=function(a){a(Ru(e,{organization:n,projectId:s,prefix:r,severityAllowList:i,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(n,s,r)=>{r&&(r.noSessionId||r.activityTimeout||r.sessionPastMaximumLength||r.crossTabAdoption)&&(I.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:n,changeReason:r}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,n){var s,r=this.vi(e,n);return this.ui={pathname:(s=v?.location.pathname)!==null&&s!==void 0?s:"",pageViewId:n,timestamp:e},this._instance.scrollManager.resetContext(),r}doPageLeave(e){var n;return this.vi(e,(n=this.ui)==null?void 0:n.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,n){var s=this.ui;if(!s)return{$pageview_id:n};var r={$pageview_id:n,$prev_pageview_id:s.pageViewId},i=this._instance.scrollManager.getContext();if(i&&!this._instance.config.disable_scroll_properties){var o=i.maxScrollHeight,a=i.lastScrollY,l=i.maxScrollY,u=i.maxContentHeight,c=i.lastContentY,d=i.maxContentY;if(!(k(o)||k(a)||k(l)||k(u)||k(c)||k(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,I):1,p=o>1?st(l/o,0,1,I):1,f=u>1?st(c/u,0,1,I):1,g=u>1?st(d/u,0,1,I):1;r=ee(r,{$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 s.pathname&&(r.$prev_pageview_pathname=s.pathname),s.timestamp&&(r.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),r}}var ci=["flags","surveys"],Ap={[lu]:{exposure:"hidden"},[jn]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[Un]:{exposure:"hidden"},[Ui]:{exposure:"event"},[Hi]:{exposure:"hidden"},[Wi]:{exposure:"event"},[zi]:{exposure:"hidden"},[qi]:{exposure:"event"},[Vi]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gi]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cn]:{exposure:"hidden"},[zo]:{exposure:"event"},[cu]:{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"},[Hn]:{exposure:"hidden",storageGroup:"flags"},[Ms]:{exposure:"hidden"},[Ki]:{exposure:"hidden",storageGroup:"flags"},[Wn]:{exposure:"hidden",storageGroup:"flags"},[Os]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[sr]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Ji]:{exposure:"hidden",storageGroup:"surveys"},[rr]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yi]:{exposure:"event"},[Ls]:{exposure:"hidden"},[Ds]:{exposure:"hidden"},[zn]:{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"},[qn]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Zi]:{exposure:"hidden"},[Xi]:{exposure:"hidden"},[Qi]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[ir]:{exposure:"hidden"},[or]:{exposure:"hidden"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[pu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},[vu]:{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"}},$p=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ap[t];if(e)return e;for(var n of $p){var s=n[1];if(t.indexOf(n[0])===0)return s}},un=(t,e)=>{try{return JSON.stringify(t,((n,s)=>typeof s=="bigint"?s.toString():s),e)}catch{return Pc(t)}},dr=t=>{var e=C?.createElement("a");return k(e)?null:(e.href=t,e)},vn=function(t,e){for(var n,s=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),r=0;s.length>r;r++){var i=s[r].split("=");if(i[0]===e){n=i;break}}if(!O(n)||2>n.length)return"";var o=n[1];try{o=decodeURIComponent(o)}catch{I.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},is=function(t,e,n){if(!t||!e||!e.length)return t;for(var s=t.split("#"),r=s[1],i=(s[0]||"").split("?"),o=i[1],a=i[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");O(d)&&(e.includes(d[0])?u.push(d[0]+"="+n):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),r!=null&&(h+="#"+r),h},hr=function(t,e){var n=t.match(new RegExp(e+"=([^&]*)"));return n?n[1]:null},Tu=(t,e)=>t>=e&&Ic(),Nu=(t,e,n,s)=>{if(t===0){if(Ic()){var r=e+1;return r===n&&s(),r}return e}return 0},Fs="https?://(.*)",_n=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Rp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._n],os="",Tp=["li_fat_id"];function Mu(t,e,n){if(!C)return{};var s,r=e?[..._n,...n||[]]:[],i=Ou(is(C.URL,r,os),t),o=(s={},Z(Tp,(function(a){var l=_u(a);s[a]=l||null})),s);return ee(o,i)}function Ou(t,e){var n=Rp.concat(e||[]),s={};return Z(n,(function(r){var i=vn(t,r);s[r]=i||null})),s}function Lu(t){var e=(function(i){return i?i.search(Fs+"google.([^/?]*)")===0?"google":i.search(Fs+"bing.com")===0?"bing":i.search(Fs+"yahoo.com")===0?"yahoo":i.search(Fs+"duckduckgo.com")===0?"duckduckgo":null:null})(t),n=e!="yahoo"?"q":"p",s={};if(!$e(e)){s.$search_engine=e;var r=C?vn(C.referrer,n):"";r.length&&(s.ph_keyword=r)}return s}function gl(){return navigator.language||navigator.userLanguage}var pr="$direct";function Du(){return C?.referrer||pr}function Bu(t,e,n){n===void 0&&(n=!1);var s=t?[..._n,...e||[]]:[],r=n?Ct(se?.href):se?.href,i=r?.substring(0,1e3);return{r:Du().substring(0,1e3),u:i?is(i,s,os):void 0}}function ju(t,e){var n;e===void 0&&(e=!1);var s=t.r,r=t.u,i=e?Ct(r):r,o={$referrer:s,$referring_domain:s==null?void 0:s==pr?pr:(n=dr(s))==null?void 0:n.host};if(i){o.$current_url=i;var a=dr(i);o.$host=a?.host,o.$pathname=a?.pathname;var l=Ou(i);ee(o,l)}if(s){var u=Lu(s);ee(o,u)}return o}function Uu(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Np(){try{return new Date().getTimezoneOffset()}catch{return}}var Mp={flags:Kn,surveys:rr},Op=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],tn="main";class ui{constructor(e,n,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=(i=>{var o="";return i.token&&(o=i.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),i.persistence_name?"ph_"+i.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&I.info("Persistence loaded",e.persistence,w({},this.props)),this.update_config(e,e,n),this.save(),v){var r=()=>this.flush();re(v,"beforeunload",r,{capture:!1}),re(v,"pagehide",r,{capture:!1})}}ki(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(n)&&n>0?n:0}isDisabled(){return!!this.xi}bi(e){Op.indexOf(e.persistence.toLowerCase())===-1&&(I.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var n,s=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...fp,...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),r=!1,i=e.persistence.toLowerCase();return i==="localstorage"&&Q.N()?(n=Q,r=!0):i==="localstorage+cookie"&&s.N()?(n=s,r=!0):i==="sessionstorage"&&ce.N()?n=ce:i==="memory"?n=gp:i==="cookie"?n=pt:s.N()?(n=s,r=!0):n=pt,this.fi=r,n}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((n,s)=>{var r=Mt(s);if(!r||r.exposure==="event"){if(r!=null&&r.shouldSkipFromEventProperties!=null&&r.shouldSkipFromEventProperties(n))return;e[s]=n}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of ci){var n=Q.H(this.Si(e));if(n&&!mt(n)){var s=this.Mi(e);s.persisted=!0,this.Ti(e)||(s.fingerprint=this.Ei(n,e)),this.Ii(e,n)||ee(this.props,n)}}}Ti(e){return Object.keys(this.props).some((n=>{var s;return((s=Mt(n))==null?void 0:s.storageGroup)===e}))}Ii(e,n){var s=Mp[e];if(!s)return!1;var r=n[s],i=this.props[s];return he(r)&&he(i)&&i>r}refreshKey(e){var n;if(!this.xi){var s=this.pi?(n=Mt(e))==null?void 0:n.storageGroup:void 0,r=s?Q.H(this.Si(s)):this.ii.H(this.yi);if(r&&e in r)this.Pi(e,r[e]);else{if(s){var i=this.ii.H(this.yi);if(i&&e in i)return void this.Pi(e,i[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?k(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){k(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,tn))}Li(){var e=this.Di(),n=e.main,s=e.groups;for(var r of(this.Oi(this.ii,this.yi,n,tn),ci)){var i,o=s[r];(!mt(o)||(i=this.ci[r])!=null&&i.persisted)&&this.Oi(Q,this.Si(r),o,r)}}Di(){var e={},n={flags:{},surveys:{}};return Z(this.props,((s,r)=>{var i,o=(i=Mt(r))==null?void 0:i.storageGroup;o?n[o][r]=s:e[r]=s})),{main:e,groups:n}}Ei(e,n){if(n===tn)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var s={};return Z(e,((r,i)=>{var o;s[i]=(o=Mt(i))!=null&&o.volatile?"__volatile__":r})),JSON.stringify(s)}Oi(e,n,s,r){var i=this.Mi(r);if(r===tn||i.dirty||k(i.fingerprint)){var o;try{if((o=this.Ei(s,r))===i.fingerprint)return void(i.dirty=!1)}catch{o=void 0}e.F(n,s,this.$i,this.Ni,this.qi,this.Ne.debug)?(i.dirty=!1,r!==tn&&(i.persisted=!0),k(o)||(i.fingerprint=o)):this.Ne.debug&&I.warn('failed to persist storage entry "'+n+'"; will retry on next save')}}remove(e){var n=(e===void 0?{}:e).keepGroupEntries,s=n!==void 0&&n;if(k(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 r of ci)Q.q(this.Si(r));s?delete this.ci[tn]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,n,s){if(te(e)){k(n)&&(n="None"),this.$i=k(s)?this.ji:s;var r=!1;if(Z(e,((i,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==n||(this.Pi(o,i),r=!0)})),r)return this.save(),!0}return!1}register(e,n){if(te(e)){this.$i=k(n)?this.ji:n;var s=!1;if(Z(e,((r,i)=>{e.hasOwnProperty(i)&&(this.props[i]!==r||te(r)||O(r))&&(this.Pi(i,r),s=!0)})),s)return this.save(),!0}return!1}unregister(e){var n=typeof e=="string"?[e]:e,s=!1;for(var r of n)r in this.props&&(this.Ri(r),s=!0);s&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var n=Mu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Vo(n))||this.register(n),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Lu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Du(),$referring_domain:C!=null&&C.referrer&&((e=dr(C.referrer))==null?void 0:e.host)||pr},void 0)}set_initial_person_info(){this.props[Qi]||this.props[eo]||this.register_once({[ir]:Bu(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,Qi],(r=>{var i=this.props[r];i&&Z(i,(function(o,a){e["$initial_"+Ni(a)]=o}))}));var n=this.props[ir];if(n){var s=(function(r,i){i===void 0&&(i=!1);var o=ju(r,i),a={};return Z(o,(function(l,u){a["$initial_"+Ni(u)]=l})),a})(n,this.Ne.disable_capture_url_hashes);ee(e,s)}return e}safe_merge(e){return Z(this.props,(function(n,s){s in e||(e[s]=n)})),e}update_config(e,n,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 r=e.persistence!==n.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],n.cookie_persisted_properties||[]),i=r?this.bi(e):this.ii,o=this.wi(e);if(r||o!==this.pi){var a=this.props;this.clear(),this.ii=i,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,n){var s=this.props[Un]||{};s[e]=n,this.Pi(Un,s),this.save()}remove_event_timer(e){var n=this.props[Un]||{},s=n[e];return k(s)||(delete n[e],this.Pi(Un,n),this.save()),s}get_property(e){return this.props[e]}set_property(e,n){this.Pi(e,n),this.save()}Pi(e,n){var s;this.props[e]=n,(s=Mt(e))!=null&&s.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var n,s=(n=Mt(e))==null?void 0:n.storageGroup;s&&(this.Mi(s).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Ps(t){var e=!0;return{dispose(){if(e){e=!1;var n=t();n&&Se(n.then)&&n.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},$n={Activation:"events",Cancellation:"cancelEvents"},di={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hi={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},io={Popover:"popover",Inline:"inline"},Lp={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=ne("[RateLimiter]");class Dp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=n=>{var s=n.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach((r=>{vl.info((r||"events")+" is quota limited."),this.serverLimits[r]=new Date().getTime()+6e4}))}catch(r){return void vl.warn('could not rate limit - continuing. Error: "'+r?.message+'"',{text:s})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var n,s,r;e===void 0&&(e=!1);var i=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(n=(s=this.instance.persistence)==null?void 0:s.get_property(Xi))!==null&&n!==void 0?n:{tokens:i,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>i&&(l.tokens=i);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,(r=this.instance.persistence)==null||r.set_property(Xi,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var n=this.instance.config.property_denylist;return!O(n)||!n.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 n,s,r=this.captureEventsBurstLimit,i=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(n=(s=this.instance).get_session_id)==null?void 0:n.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 "+i+" events per second and "+r+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var n=this.serverLimits[e||"events"]||!1;return n!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return 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((n=>{this.Zi(n.json,n),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 n=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;n!==0&&(this.Ki=setInterval((()=>{this.refresh()}),n))}}Zi(e,n){!e&&n&&(n.statusCode===0?n.error||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(r){xt.error("Error applying remote config",r)}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(r){xt.error("Error loading feature flags",r)}}}var qe=Uint8Array,Ae=Uint16Array,yn=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]),Wu=function(t,e){for(var n=new Ae(31),s=0;31>s;++s)n[s]=e+=1<s;++s)for(var i=n[s];n[s+1]>i;++i)r[i]=i-n[s]<<5|s;return[n,r]},zu=Wu(Yo,2),oo=zu[1];zu[0][28]=258,oo[258]=28;for(var yl=Wu(Zo,0)[1],qu=new Ae(32768),ie=0;32768>ie;++ie){var nn=(43690&ie)>>>1|(21845&ie)<<1;qu[ie]=((65280&(nn=(61680&(nn=(52428&nn)>>>2|(13107&nn)<<2))>>>4|(3855&nn)<<4))>>>8|(255&nn)<<8)>>>1}var Yn=function(t,e,n){for(var s=t.length,r=0,i=new Ae(e);s>r;++r)++i[t[r]-1];var o,a=new Ae(e);for(r=0;e>r;++r)a[r]=a[r-1]+i[r-1]<<1;for(o=new Ae(s),r=0;s>r;++r)o[r]=qu[a[t[r]-1]++]>>>15-t[r];return o},Kt=new qe(288);for(ie=0;144>ie;++ie)Kt[ie]=8;for(ie=144;256>ie;++ie)Kt[ie]=9;for(ie=256;280>ie;++ie)Kt[ie]=7;for(ie=280;288>ie;++ie)Kt[ie]=8;var fr=new qe(32);for(ie=0;32>ie;++ie)fr[ie]=5;var Bp=Yn(Kt,9),jp=Yn(fr,5),Vu=function(t){return(t/8>>0)+(7&t&&1)},Gu=function(t,e,n){(n==null||n>t.length)&&(n=t.length);var s=new(t instanceof Ae?Ae:t instanceof yn?yn:qe)(n-e);return s.set(t.subarray(e,n)),s},ot=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8},Rn=function(t,e,n){var s=e/8>>0;t[s]|=n<<=7&e,t[s+1]|=n>>>8,t[s+2]|=n>>>16},pi=function(t,e){for(var n=[],s=0;t.length>s;++s)t[s]&&n.push({s,f:t[s]});var r=n.length,i=n.slice();if(!r)return[new qe(0),0];if(r==1){var o=new qe(n[0].s+1);return o[n[0].s]=1,[o,1]}n.sort((function(F,P){return F.f-P.f})),n.push({s:-1,f:25001});var a=n[0],l=n[1],u=0,c=1,d=2;for(n[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=r-1;)a=n[n[d].f>n[u].f?u++:d++],l=n[u!=c&&n[d].f>n[u].f?u++:d++],n[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=i[0].s;for(s=1;r>s;++s)i[s].s>h&&(h=i[s].s);var p=new Ae(h+1),f=ao(n[c-1],p,0);if(f>e){s=0;var g=0,m=f-e,_=1<s;++s){var E=i[s].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var b=i[s].s;e>p[b]?g-=1<=0&&g;--s){var x=i[s].s;p[x]==e&&(--p[x],++g)}f=e}return[new qe(p),f]},ao=function(t,e,n){return t.s==-1?Math.max(ao(t.l,e,n+1),ao(t.r,e,n+1)):e[t.s]=n},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var n=new Ae(++e),s=0,r=t[0],i=1,o=function(l){n[s++]=l},a=1;e>=a;++a)if(t[a]==r&&a!=e)++i;else{if(!r&&i>2){for(;i>138;i-=138)o(32754);i>2&&(o(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(o(r),--i;i>6;i-=6)o(8304);i>2&&(o(i-3<<5|8208),i=0)}for(;i--;)o(r);i=1,r=t[a]}return[n.subarray(0,s),e]},Tn=function(t,e){for(var n=0,s=0;e.length>s;++s)n+=t[s]*e[s];return n},lo=function(t,e,n){var s=n.length,r=Vu(e+2);t[r]=255&s,t[r+1]=s>>>8,t[r+2]=255^t[r],t[r+3]=255^t[r+1];for(var i=0;s>i;++i)t[r+i+4]=n[i];return 8*(r+4+s)},bl=function(t,e,n,s,r,i,o,a,l,u,c){ot(e,c++,n),++r[256];for(var d=pi(r,15),h=d[0],p=d[1],f=pi(i,15),g=f[0],m=f[1],_=wl(h),E=_[0],b=_[1],x=wl(g),F=x[0],P=x[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=pi(B,7),R=A[0],N=A[1],T=19;T>4&&!R[_l[T-1]];--T);var L,J,z,H,oe=u+5<<3,pe=Tn(r,Kt)+Tn(i,fr)+o,Ie=Tn(r,h)+Tn(i,g)+o+14+3*T+Tn(B,R)+(2*B[16]+3*B[17]+7*B[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){L=Yn(h,p),J=h,z=Yn(g,m),H=g;var _e=Yn(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 L=Bp,J=Kt,z=jp,H=fr;for(S=0;a>S;++S)if(s[S]>255){var me;Rn(e,c,L[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];Rn(e,c,z[ge]),c+=H[ge],ge>3&&(Rn(e,c,s[S]>>>5&8191),c+=Zo[ge])}else Rn(e,c,L[s[S]]),c+=J[s[S]];return Rn(e,c,L[256]),c+J[256]},Up=new yn([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Hp=(function(){for(var t=new yn(256),e=0;256>e;++e){for(var n=e,s=9;--s;)n=(1&n&&3988292384)^n>>>1;t[e]=n}return t})(),fi=function(t,e,n){for(;n;++e)t[e]=n,n>>>=8};function Wp(t,e){e===void 0&&(e={});var n=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Hp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),s=t.length;n.p(t);var r,i,o,a,l,u=(a=10+((r=e).filename&&r.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),x=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?x=lo(b,x,d.subarray(F,P)):(b[F]=!0,x=lo(b,x,d.subarray(F,_)))}else{for(var B=Up[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){x=bl(d,b,0,H,oe,pe,_e,Ce,ae,F-ae,x),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,In=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,ys=Math.min(32767,F),ws=Math.min(258,Rt);ys>=Be&&--In&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;ws>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var bs=Math.min(Be,je-2),Xt=0;for(de=0;bs>de;++de){var Qt=F-Be+de+32768&32767,Cn=Qt-N[Qt]+32768&32767;Cn>Xt&&(Xt=Cn,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]]}}x=bl(d,b,!0,H,oe,pe,_e,Ce,ae,F-ae,x)}return Gu(E,0,f+Vu(x)+g)})(i=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(i.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&&fi(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),fi(u,c-8,n.d()),fi(u,c-4,s),u}var zp=!!$i||!!Mo,Ku="text/plain",Us=!1,Ju=(t,e)=>{var n=t.split("#"),s=n[1],r=n[0].split("?"),i=r[0],o=r[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return i+(a?"?"+a:"")+(s?"#"+s:"")},Tr=function(t,e,n){var s;n===void 0&&(n=!0);var r=t.split("?"),i=r[0],o=r[1],a=w({},e),l=(s=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=n&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&s!==void 0?s:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(g,m){k(g)||k(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?i+"?"+l.join("&"):i},gi=t=>{if(t.Ji)return t.Ji;var e=t.data,n=t.compression;if(e){if(n===xe.GZipJS){var s=Wp((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 Gu(c,0,d)})(un(e)),{mtime:0});return{contentType:Ku,body:s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),estimatedSize:s.byteLength}}if(n===xe.Base64){var r=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(un(e)),i=(a=>"data="+encodeURIComponent(typeof a=="string"?a:un(a)))(r);return{contentType:"application/x-www-form-urlencoded",body:i,estimatedSize:new Blob([i]).size}}var o=un(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Yu=t=>{var e,n,s=()=>t.transport==="sendBeacon"?{url:Tr(t.url,{compression:xe.Base64}),encodedBody:gi(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ju(t.url,"compression"),encodedBody:gi(w({},t,{compression:void 0,Ji:void 0}))};try{e=gi(t)}catch(r){if(Ua(t.compression,vn(t.url,"compression")))return I.error("Failed to gzip request body, sending uncompressed payload",r),s();throw r}return e&&Ua(t.compression,vn(t.url,"compression"))&&!((n=e.body)instanceof ArrayBuffer?Ri(new Uint8Array(n)):ArrayBuffer.isView(n)&&Ri(new Uint8Array(n.buffer,n.byteOffset,n.byteLength)))?(Us=!0,s()):{url:t.url,encodedBody:e}},Zu=t=>{try{return Yu(t)}catch(e){return I.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},qp=(function(){var t=X((function*(e){var n=un(e.data),s=yield(function(i,o,a){return Ti.apply(this,arguments)})(n,Y.DEBUG,{rethrow:!0});if(!s)return e;var r=yield s.arrayBuffer();return w({},e,{Ji:{contentType:Ku,body:r,estimatedSize:r.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Vp=/Failed to fetch|NetworkError|Load failed/i,Xu=t=>t?.name==="TypeError"&&Vp.test(t?.message||""),Qu=t=>{var e=Zu(t);if(e){var n=e.url,s=e.encodedBody,r=s??{},i=r.contentType,o=r.body,a=r.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),i&&l.append("Content-Type",i);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"||Xu(f)?I.warn(f):I.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Mo(n,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(_){I.error(_)}t.callback==null||t.callback(m)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},co=t=>{try{var e,n=Yu(t),s=n.url,r=n.encodedBody,i=r??{},o=i.body,a=i.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:i.contentType});if(ke.sendBeacon(s,l))return;var u=O(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(O(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>O(t.data)?h:w({},t.data,{batch:h});return co(w({},t,{data:d(u.slice(0,c))})),void co(w({},t,{data:d(u.slice(c))}))}I.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Qu(w({},t,{Yi:!0}))}catch(h){I.warn("Beacon send failed",h)}},El=(t,e,n,s)=>{var r=s==="query"?e==="POST"?"sent_at":"_":void 0;return Tr(n===xe.GZipJS?Ju(t,"compression"):t,w({},r?{[r]:Date.now().toString()}:{},n===xe.GZipJS?{}:{compression:n}))},Hs=[];Mo&&Hs.push({transport:"fetch",method:Qu}),$i&&Hs.push({transport:"XHR",method(t){var e=Zu(t);if(e){var n=new $i,s=e.encodedBody;n.open(t.method||"GET",e.url,!0);var r=s??{},i=r.contentType,o=r.body;Z(t.headers,(function(a,l){n.setRequestHeader(l,a)})),i&&n.setRequestHeader("Content-Type",i),t.timeout&&(n.timeout=t.timeout),n.onreadystatechange=()=>{if(n.readyState===4){var a={statusCode:n.status,text:n.responseText};if(n.status===200)try{a.json=JSON.parse(n.responseText)}catch{}t.callback==null||t.callback(a)}},n.send(o)}}}),ke!=null&&ke.sendBeacon&&Hs.push({transport:"sendBeacon",method:co});var uo=3e3;class Gp{constructor(e,n){this.Xi=!0,this.tr=[],this.er=st(n?.flush_interval_ms||uo,250,5e3,I.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():{},n=Object.values(e);[...n.filter((s=>s.url.indexOf("/e")===0)),...n.filter((s=>s.url.indexOf("/e")!==0))].map((s=>{this.lr(w({},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 n=this.ar(),s=function(){var i=n[r],o=new Date().getTime();i.data&&O(i.data)&&Z(i.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(i)};for(var r in n)s()}}),this.er))}lr(e){try{this.ir(e)}catch(n){I.error(n)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(n=>{var s,r=n,i=(r?r.batchKey:null)||r.url;k(e[i])&&(e[i]=w({},r,{data:[]})),(s=e[i].data)==null||s.push(r.data)})),this.tr=[],e}}var Kp=["retriesPerformedSoFar"];class Jp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!k(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},re(v,"online",this.vr),re(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var n=e.retriesPerformedSoFar,s=Cc(e,Kp);lt(n)&&(s.url=Tr(s.url,{retry_count:n})),this._instance._send_request(w({},s,{callback:r=>{if(r.statusCode!==200&&(400>r.statusCode||r.statusCode>=500)){if((r.statusCode===0?3:10)>(n??0))return void this.At(w({retriesPerformedSoFar:n},s));r.statusCode===0&&I.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(n??0)+" retries.")}s.callback==null||s.callback(r)}}))}At(e){var n=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=n+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))})(n),r=Date.now()+s;this.tr.push({retryAt:r,requestOptions:e});var i="Enqueued failed request for retry in "+s;navigator.onLine||(i+=" (Browser is offline)"),I.warn(i),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),n=[],s=this.tr.filter((i=>e>i.retryAt||(n.push(i),!1)));if(this.tr=n,s.length>0)for(var r of s)this.retriableRequest(r.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,k(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var n=e.requestOptions;try{this._instance._send_request(w({},n,{transport:"sendBeacon"}))}catch(s){I.error(s)}}this.tr=[]}}class Yp{constructor(e){this.yr=()=>{var n,s,r,i;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(n=this.br.maxScrollY)!==null&&n!==void 0?n:0),this.br.maxScrollHeight=Math.max(l,(s=this.br.maxScrollHeight)!==null&&s!==void 0?s:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(r=this.br.maxContentY)!==null&&r!==void 0?r:0),this.br.maxContentHeight=Math.max(c,(i=this.br.maxContentHeight)!==null&&i!==void 0?i: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(){re(v,"scroll",this.yr,{capture:!0}),re(v,"scrollend",this.yr,{capture:!0}),re(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=O(this._r)?this._r:[this._r];for(var n of e){var s=v?.document.querySelector(n);if(s)return s}}wr(e){var n=e==="y"?"scrollTop":"scrollLeft";if(this._r){var s=this.scrollElement();return s&&s[n]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Zp=t=>Bu(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,n,s,r){this.kr=i=>{var o=this.Sr();if(!o||o.sessionId!==i){var a={sessionId:i,props:this.Cr(this._instance)};this.Mr.register({[Zi]:a})}},this._instance=e,this.Tr=n,this.Mr=s,this.Cr=r||Zp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zi]}getSetOnceProps(){var e,n=(e=this.Sr())==null?void 0:e.props;return n?"r"in n?ju(n,this._instance.config.disable_capture_url_hashes):{$referring_domain:n.referringDomain,$pathname:n.initialPathName,utm_source:n.utm_source,utm_campaign:n.utm_campaign,utm_medium:n.utm_medium,utm_content:n.utm_content,utm_term:n.utm_term}:{}}getSessionProps(){var e={};return Z(Vo(this.getSetOnceProps()),((n,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+Ni(s)]=n})),e}}class Xo{on(e,n){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(n),()=>{this.Er[e]=this.Er[e].filter((s=>s!==n))}}emit(e,n){for(var s of this.Er[e]||[])s(n);for(var r of this.Er["*"]||[])r(e,n)}constructor(){this.Er={}}}var Nn=ne("[SessionId]");class xl{on(e,n){return this.Ir.on(e,n)}constructor(e,n,s){var r;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=n||dt,this.Nr=s||dt;var i=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Nn.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+i+"_window_id",this.Br="ph_"+i+"_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((r=this.Ne.bootstrap)!=null&&r.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Nn.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return k(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((n=>n!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var n=this.Pr;return!$e(n)&&!$e(e)&&5e3>Math.abs(e-n)}Ur(e,n,s){var r=n!==this._sessionActivityTimestamp,i=!(e!==this.Dr||s!==this._sessionStartTimestamp);this._sessionStartTimestamp=s,this._sessionActivityTimestamp=n,this.Dr=e,i&&!r||i&&this.Zr(n)||(this.Pr=n,this.Mr.register({[cn]:[n,e,s]}))}Gr(){var e,n=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(n)&&n>0}Qr(){this.Gr()?this.Mr.refreshKey(cn):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var n=this.Jr();n[1]===this.Dr&&n[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[cn]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],n=lt(e)?e:0,s=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(n,s)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[cn];return O(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&v&&(v.removeEventListener(lr,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},re(v,lr,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,n){if(e===void 0&&(e=!1),n===void 0&&(n=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=n||new Date().getTime(),r=this.Jr(),i=r[1],o=r[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(s-o)>864e5,c=!1,d=!1,h=!i,p=i,f=!h&&!e&&this.Lr(s,a);if(f){(f=this.Xr(s))||Nn.info("cross-tab refresh kept the session alive",{sessionId:i});var g=this.Jr();i=g[1],o=g[2]}h||f||u?(i=this.$r(),l=this.Nr(),Nn.info("new session ID generated",{sessionId:i,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=s,c=!0):(l||(l=this.Nr(),c=!0),(d=i!==p)&&(Nn.info("adopted cross-tab session id",{sessionId:i,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:s,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(i,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(i,l,E))),{sessionId:i,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 ed=function(t,e){if(!t)return!1;var n=t.userAgent;if(n&&Wa(n,e))return!0;try{var s=t?.userAgentData;if(s!=null&&s.brands&&s.brands.some((r=>Wa(r?.brand,e))))return!0}catch{}return!!t.webdriver};function td(){return(td=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),n=e?.model;return W(n)&&n.length>0?n:void 0}catch(s){return void I.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",s)}}))).apply(this,arguments)}var gr=function(t,e){if(!(function(n){try{new RegExp(n)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function mi(t,e,n){return un({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:n})}var nd={exact:(t,e)=>e.some((n=>t.some((s=>n===s)))),is_not:(t,e)=>e.every((n=>t.every((s=>n!==s)))),regex:(t,e)=>e.some((n=>t.some((s=>gr(n,s))))),not_regex:(t,e)=>e.every((n=>t.every((s=>!gr(n,s))))),icontains:(t,e)=>e.map(As).some((n=>t.map(As).some((s=>n.includes(s))))),not_icontains:(t,e)=>e.map(As).every((n=>t.map(As).every((s=>!n.includes(s))))),gt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>s>parseFloat(r)))})),lt:(t,e)=>e.some((n=>{var s=parseFloat(n);return!isNaN(s)&&t.some((r=>st.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((n=>{var s=n[1],r=e?.[n[0]];if(k(r)||$e(r))return!1;var i=[String(r)],o=nd[s.operator];return!!o&&o(s.values,i)}))}var ho="custom",kl="i.posthog.com",Xp=/^\/static\//;class Qp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,n=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return n||(n=this.apiHost.replace("."+kl,".posthog.com")),n==="https://app.posthog.com"?"https://us.posthog.com":n}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":ho),this.en[this.apiHost]}rn(e){if(Xp.test(e)){var n=this.instance.config.asset_host;if(typeof n=="string")return n.trim().replace(/\/$/,"")||void 0}}endpointFor(e,n){if(n===void 0&&(n=""),n&&(n=n[0]==="/"?n:"/"+n),e==="ui")return this.uiHost+n;if(e==="flags")return this.flagsApiHost+n;if(e==="assets"){var s=this.rn(n);if(s)return""+s+n}if(this.region===ho)return this.apiHost+n;var r=kl+n;switch(e){case"assets":return"https://"+this.region+"-assets."+r;case"api":return"https://"+this.region+"."+r}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=ne("[Surveys]"),id="seenSurvey_",od=t=>{try{var e=(n=>((s,r)=>""+id+(function(i){return i.current_iteration&&i.current_iteration>0?i.id+"_"+i.current_iteration:i.id})(r))(0,n))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(n){q.error("Failed to persist survey seen state",n)}},ef=[di.Popover,di.Widget,di.API],tf={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},nf=ne("[PostHog ExternalIntegrations]"),sf={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class rf{constructor(e){this._instance=e}ai(e,n){var s;(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,(r=>{if(r)return nf.error("failed to load script",r);n()}))}startIfEnabledOrStop(){var e=this,n=function(){var i,o,a,l=s[0],u=s[1];!u||(i=$.__PosthogExtensions__)!=null&&(i=i.integrations)!=null&&i[l]||e.ai(sf[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((r=this._instance.config.integrations)!==null&&r!==void 0?r:{})){var r;n()}}}class of{constructor(e,n){this.rt=e,this.nn=n,this.sn=new Map,this.an=!1}add(e){var n=this;return X((function*(){if(n.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(n.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');n.sn.set(e.name,e);try{var s=e.setup(n.nn);s&&(yield s)}catch(i){var r=n.sn.get(e.name)===e;r&&n.sn.delete(e.name),n.rt.error('Failed to set up browser extension "'+e.name+'"',i),r&&n.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var n of(this.sn.clear(),e))this.ln(n)}}ln(e){try{var n=e.dispose==null?void 0:e.dispose();n&&Se(n.then)&&n.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 af{constructor(e){this._instance=e}initialize(){}get(e){var n=this._instance.persistence;if(typeof e=="string")return n?.get_property(e);var s={};for(var r of e){var i=n?.get_property(r);k(i)||(s[r]=i)}return s}set(e,n){var s;(s=this._instance.persistence)==null||s.register(typeof e=="string"?{[e]:n}:e)}remove(e){var n;(n=this._instance.persistence)==null||n.unregister(e)}}var Il="extensionsRemoteConfig";class lf{constructor(e){this.an=!1,this.instance=e,this.rt=I,this.un=e.hn,this.kv=new af(e),this.onEvent=n=>Ps(this.instance.on("eventCaptured",(s=>{try{n({event:s.event,properties:s.properties})}catch(r){this.rt.error("Browser extension event listener failed",r)}}))),this.onRemoteConfig=n=>{if(this.an)return Ps((()=>{}));var s=i=>{try{n(i)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},r=this.instance.dn.on(Il,s);return this.un&&s(this.un),Ps(r)},this.vn=new of(I.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(ss))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(ss);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,n;return(e=(n=this.instance.persistence)==null?void 0:n.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,n,s,r,i=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(n=i?.sessionId)!==null&&n!==void 0?n:"",windowId:(s=i?.windowId)!==null&&s!==void 0?s:"",sessionStartTimestamp:(r=i?.sessionStartTimestamp)!==null&&r!==void 0?r:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,n,s){var r=this;return X((function*(){s?r.instance.capture(e,n,{timestamp:s.timestamp,uuid:s.uuid,$set:s.set,$set_once:s.setOnce}):r.instance.capture(e,n)}))()}registerDynamicEventProperties(e){return Ps(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,n){var s=this;return X((function*(){var r;n===void 0&&(n={});var i=s.instance.requestRouter.endpointFor((r=n.target)!==null&&r!==void 0?r:"api",e),o={method:n.method,url:n.query?Tr(i,n.query):i,data:n.body,headers:n.headers,timeout:n.timeoutMs,fireCallbackOnDrop:!0,transport:n.transport,compression:n.compression,timestampMode:n.sentAt};return n.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 Zn={},vi=0,mr=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Mn="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",ad="Invalid value for property_denylist config: ",cf=["token","distinct_id",fu],an="posthog",ld=!zp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_i=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:cp(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:mr,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults: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(n){I.error("Bad HTTP status: "+n.statusCode+" "+n.text)},get_device_id:n=>n,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:mr},(n=>({rageclick:n&&n>="2026-05-30"?{content_ignorelist:bp,ignore_text_selection:!0}:!n||"2025-11-30">n||{content_ignorelist:!0},capture_pageview:!n||"2025-05-24">n||"history_change",session_recording:n&&n>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:n&&n>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:n&&n>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:n&&n>="2026-01-30"?"head":"body",internal_or_test_user_hostname:n&&n>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:n&&n>="2026-05-30"?250:0,split_storage:!(!n||"2026-05-30">n),detect_google_search_app:!(!n||"2026-05-30">n),disable_capture_url_hashes:!(!n||"2026-06-25">n)}))(t))},uf=[["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 n of uf){var s=n[0],r=n[1];k(t[s])||(e[r]=t[s])}var i=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return k(o)||(k(t.strict_script_versioning)&&(i.strict_script_versioning=!!o),W(o)&&k(t.asset_host)&&(i.asset_host=o)),O(t.property_blacklist)&&(k(t.property_denylist)?i.property_denylist=t.property_blacklist:O(t.property_denylist)?i.property_denylist=[...t.property_blacklist,...t.property_denylist]:I.error(ad+t.property_denylist)),i};class df{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){I.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,n){if(e){var s=this.sn.indexOf(e);s!==-1&&this.sn.splice(s,1)}return this.sn.push(n),n.initialize==null||n.initialize(),n}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new df,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=_i(),this.SentryIntegration=Pp,this.sentryIntegration=s=>(function(r,i){var o=Ru(r,i);return{name:$u,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 Yp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Dp(this),this.requestRouter=new Qp(this),this.consent=new mp(this),this.externalIntegrations=new rf(this);var n=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=n.featureFlags&&new n.featureFlags(this),this.toolbar=n.toolbar&&new n.toolbar(this),this.surveys=n.surveys&&new n.surveys(this),this.conversations=n.conversations&&new n.conversations(this),this.logs=n.logs&&new n.logs(this),this.metrics=n.metrics&&new n.metrics(this),this.experiments=n.experiments&&new n.experiments(this),this.exceptions=n.exceptions&&new n.exceptions(this),this.people={set:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(o),i?.({})},set_once:(s,r,i)=>{var o=W(s)?{[s]:r}:s;this.setPersonProperties(void 0,o),i?.({})}},this.on("eventCaptured",(s=>I.info('send "'+s?.event+'"',s)))}init(e,n,s){if(s&&s!==an){var r,i=(r=Zn[s])!==null&&r!==void 0?r:new Te;return i._init(e,n,s),Zn[s]=i,Zn[an][s]=i,i}return this._init(e,n,s)}_init(e,n,s){var r,i;n===void 0&&(n={});var o,a=W(e)?e.trim():"";if(!a)return I.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=_i(n.defaults),n.debug=this.Cn(n.debug),this.Mn=n,this.Tn=[],n.person_profiles?this.xn=n.person_profiles:n.process_person&&(this.xn=n.process_person);var l=_i(n.defaults),u=Pl(n),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&&I.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=n.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new ui(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(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);O(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 Gp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Jp(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?(I.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(I.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&I.info("Starting in debug mode",{this:this,config:n,thisC:w({},this.config),p,s:f}),!this.config.identity_distinct_id||(r=n.bootstrap)!=null&&r.distinctID||(n.bootstrap=w({},n.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((i=n.bootstrap)==null?void 0:i.distinctID)!==void 0){var m=n.bootstrap.distinctID,_=this.get_distinct_id(),E=this.persistence.get_property(He);if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===en)this.identify(m);else if(n.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===Tt)I.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()),x=n.bootstrap.isIdentifiedID?b:m;this.persistence.set_property(He,n.bootstrap.isIdentifiedID?Tt:en),this.register({distinct_id:m,$device_id:x})}}if(g)this.register_once({distinct_id:xs,$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,en)}return re(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),n.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()},L=N.user();"then"in L&&Se(L.then)?L.then(T):T(L)})(P,(()=>{S.register((A=>{typeof Promise<"u"&&Promise.resolve||li.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()||(li.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(li.info("UserId set, identifying with PostHog"),A.identify(N.event.userId));var L=A.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},L,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,on),identify:N=>R(N,ii),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==mr&&(I.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(P=>this.config._onCapture(P.event,P)))),this.config.ip&&I.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 td.apply(this,arguments)})().then((P=>{P&&this.register({[si]:P})})).catch(mr),this}Fn(){var e,n,s,r,i,o,a=(e=(n=this.config.__extensionClasses)==null?void 0:n.featureFlags)!==null&&e!==void 0?e:(s=Te.__defaultExtensionClasses)==null?void 0:s.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((r=this.Dn)==null||r.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)):(i=(o=this.featureFlags).initialize)==null||i.call(o))}Ln(e){var n,s,r,i,o,a,l,u=performance.now(),c=w({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(n=this.exceptions)!==null&&n!==void 0?n:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(s=this.surveys)!==null&&s!==void 0?s:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(r=this.logs)!==null&&r!==void 0?r:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(i=this.metrics)!==null&&i!==void 0?i: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,Fp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,n){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-n>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,n)}),0);var s=e.shift();if(s)try{s()}catch(i){I.error("Error initializing extension:",i)}}var r=Math.round(performance.now()-n);this.register_for_session({[gu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[mu]:r}),this.config.__preview_deferred_init_extensions&&I.info("PostHog extensions initialized ("+r+"ms)")}Zi(e){var n;if(!C||!C.body)return I.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,r=e.config;r.supportedCompression&&!this.config.disable_compression&&(this.compression=M(r.supportedCompression,xe.GZipJS)?xe.GZipJS:M(r.supportedCompression,xe.Base64)?xe.Base64:void 0),(s=r.analytics)!=null&&s.endpoint&&(this.analyticsDefaultEndpoint=r.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(n=this.jn)==null||n.handleRemoteConfig(e),this.sn.forEach((i=>i.onRemoteConfig==null?void 0:i.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(s){I.critical("`loaded` function failed",s)}if(this.Bn(),this.config.internal_or_test_user_hostname&&se!=null&&se.hostname){var e=se.hostname,n=this.config.internal_or_test_user_hostname;(typeof n=="string"?e===n:n.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Hu(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()&&ks(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,n,s,r,i;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(n=this.metrics)==null||n.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(ri),(s=this.logs)==null||s.flushLogs("sendBeacon"),(r=this.In)==null||r.unload(),(i=this.Rn)==null||i.unload()):this.zn()&&this.capture(ri,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ld?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,(k(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(n=>{var s,r,i,o=w({},n);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(s=o.transport)!==null&&s!==void 0?s:"fetch";h==="sendBeacon"&&k(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=O(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,_){return _===void 0&&(_=new Date().toISOString()),O(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=Hs.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(r=(i=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:i.method)!==null&&r!==void 0?r:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){Xu(_)?I.warn(_):I.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&dh&&typeof Promise<"u"&&!Us?qp(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Us=!0,void g(w({},o,{compression:void 0,url:El(n.url,n.method,void 0,n.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var E="name"in _?String(_.name):"";return Ha(_)||E===Fc})(m)&&(Us=!0),g(o)})):f(o)})(w({},e,{callback:n=>{var s,r;this.rateLimiter.checkForLimiting(n),400>n.statusCode||(s=(r=this.config).on_request_error)==null||s.call(r,n),e.callback==null||e.callback(n)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){vi++;try{var n,s=[],r=[],i=[];ks(e,(a=>{if(a)if(O(n=a[0]))i.push(a);else if(Se(a))try{a.call(this)}catch(l){I.error("Error executing queued PostHog call",a,l)}else O(a)&&n==="alias"?s.push(a):O(a)&&n.indexOf("capture")!==-1&&Se(this[n])?i.push(a):r.push(a)}));var o=function(a,l){ks(a,(function(u){try{if(O(u[0])){var c=l;Z(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){I.error("Error executing queued PostHog call",u,d)}}))};o(s,this),o(r,this),o(i,this)}finally{vi--}}push(e){if(vi>0&&O(e)&&W(e[0])){var n=Te.prototype[e[0]];Se(n)&&n.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,n,s){var r,i,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!k(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){n!=null&&n.$current_url&&!W(n?.$current_url)&&(I.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),n==null||delete n.$current_url),e!=="$exception"||s!=null&&s.Wn||I.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,n||{},h,p)};e===on&&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(sr)===!0;s?.$set&&!g&&(f.$set=s?.$set);var m=s?.$unset;m&&(f.$unset=m);var _,E,b,x=g?void 0:this.Vn(s?.$set_once,e!==Qa,e===ii);if(x&&(f.$set_once=x),s!=null&&s._noTruncate||(i=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,i):T,l=new Set,f=(function T(L,J){if(L!==Object(L))return a?a(L):L;if(!l.has(L)){var z;if(l.add(L),O(L))z=[],ks(L,(oe=>{z.push(T(oe))}));else{var H={};Z(L,((oe,pe)=>{l.has(oe)||(H[pe]=T(oe))})),z=H}return z}})(o)),f.timestamp=h,k(s?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=(function(T,L){L===void 0&&(L=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return hh.forEach(z),L.forEach(z),J})(f.properties,cf)),e===ft.DISMISSED||e===ft.SENT){var F=n?.[hi.SURVEY_ID],P=n?.[hi.SURVEY_ITERATION];od({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,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Lp.SHOWN){var B=n?.[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=(r=s?._url)!==null&&r!==void 0?r: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}I.critical("This capture call is ignored due to client rate limiting.")}}else I.error("No event name provided to posthog.capture")}else I.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(n=>e(n.event,n)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new lf(this)}cn(e){this._n.push(e);var n=!0;return()=>{if(n){n=!1;var s=this._n.indexOf(e);s!==-1&&this._n.splice(s,1)}}}calculateEventProperties(e,n,s,r,i){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return n;var o=i?void 0:this.persistence.remove_event_timer(e),a=w({},n);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[fu]=!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)||Mi(a.distinct_id))&&I.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 L,J=F?[..._n,...P||[]]:[],z=(function(ws){for(var je=0;qa.length>je;je++){var bs=qa[je],Xt=bs[1],Qt=bs[0].exec(ws),Cn=Qt&&(Se(Xt)?Xt(Qt,ws):Xt);if(Cn)return Cn}return["",""]})(Pe),H=z[0],oe=z[1],pe=(L=typeof navigator<"u"?navigator:void 0)!=null&&L.brave?{brave:!0}:{},Ie={};k(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;k(Ce)||(_e.userAgentDataPlatform=Ce),k(Re)||(_e.maxTouchPoints=Re),k(ae)||(_e.screenWidth=ae),k(me)||(_e.screenHeight=me),k(ge)||(_e.devicePixelRatio=ge);var Ye,Rt,de,Ve,St,In,Be,Fe,ys=ee(Vo({$os:H,$os_version:oe,$browser:Qc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Mc||Fe===Nc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Kc?fn:Fe===ts||Fe===hn||Fe===ns||Fe===Li?"Console":Fe===Lc?"Wearable":Fe?Le: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,(In=de?.screenHeight)!==null&&In!==void 0?In:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Le:fn:"Desktop"),$timezone:Uu(),$timezone_offset:Np()}),{$current_url:is(S?Ct(se?.href):se?.href,J,os),$host:se?.host,$pathname:se?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:$h(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&&(ys.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ys})(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(i,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!==on||i?e!==ri||i?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,r),a=ee(a,u),e===on&&C&&(a.title=C.title),!k(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 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){I.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,w({},_,a))).$is_identified=this._isIdentified(),O(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):I.error(ad+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(I.error(Fl),a=b(a,e));var x=this.Zn();return a.$process_person_profile=x,x&&!i&&this.Gn("_calculate_event_properties"),a}Vn(e,n,s){var r;if(n===void 0&&(n=!0),s===void 0&&(s=!1),!this.persistence||!this.Zn()||this.mn&&!s)return e;var i=this.persistence.get_initial_props(),o=(r=this.sessionPropsManager)==null?void 0:r.getSetOnceProps(),a=ee({},i,o||{},e||{}),l=this.config.sanitize_properties;return l&&(I.error(Fl),a=l(a,"$set_once")),n&&(this.mn=!0),mt(a)?void 0:a}register(e,n){var s;(s=this.persistence)==null||s.register(e,n)}register_once(e,n,s){var r;(r=this.persistence)==null||r.register_once(e,n,s)}register_for_session(e){var n;(n=this.sessionPersistence)==null||n.register(e),Object.keys(e).forEach((s=>this.yn.add(s))),this.Qn()}unregister(e){var n;(n=this.persistence)==null||n.unregister(e)}unregister_for_session(e){var n;(n=this.sessionPersistence)==null||n.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,n){this.register({[e]:n})}An(){this.yn.forEach((e=>{var n;(n=this.sessionPersistence)==null||n.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var n=[];this.yn.forEach((s=>n.push(s))),n.length>0?ce.F(this.bn,n):ce.q(this.bn)}}getFeatureFlag(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlag(e,n)}getFeatureFlagPayload(e){var n;return(n=this.featureFlags)==null?void 0:n.getFeatureFlagPayload(e)}getFeatureFlagResult(e,n){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagResult(e,n)}getAllFeatureFlags(){var e,n;return(e=(n=this.featureFlags)==null?void 0:n.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,n){var s,r;return(s=(r=this.featureFlags)==null?void 0:r.isFeatureEnabled(e,n))!==null&&s!==void 0?s:n?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,n,s){var r;(r=this.featureFlags)==null||r.updateFlags(e,n,s)}updateEarlyAccessFeatureEnrollment(e,n,s){var r;(r=this.featureFlags)==null||r.updateEarlyAccessFeatureEnrollment(e,n,s)}getEarlyAccessFeatures(e,n,s){var r;return n===void 0&&(n=!1),(r=this.featureFlags)==null?void 0:r.getEarlyAccessFeatures(e,n,s)}on(e,n){return this.dn.on(e,n)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Mn}),()=>{})}onSessionId(e){var n,s;return(n=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&n!==void 0?n:()=>{}}getSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getSurveys(e,n):e([],{isLoaded:!1,error:Mn})}getActiveMatchingSurveys(e,n){n===void 0&&(n=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,n):e([],{isLoaded:!1,error:Mn})}renderSurvey(e,n){var s;(s=this.surveys)==null||s.renderSurvey(e,n)}displaySurvey(e,n){var s;n===void 0&&(n=tf),(s=this.surveys)==null||s.displaySurvey(e,n)}cancelPendingSurvey(e){var n;(n=this.surveys)==null||n.cancelPendingSurvey(e)}canRenderSurvey(e){var n,s;return(n=(s=this.surveys)==null?void 0:s.canRenderSurvey(e))!==null&&n!==void 0?n:{visible:!1,disabledReason:Mn}}canRenderSurveyAsync(e,n){var s,r;return n===void 0&&(n=!1),(s=(r=this.surveys)==null?void 0:r.canRenderSurveyAsync(e,n))!==null&&s!==void 0?s:Promise.resolve({visible:!1,disabledReason:Mn})}Jn(e){return!e||Mi(e)?(I.critical("Unique user id has not been set in posthog.identify"),!1):e===xs?(I.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())||(I.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,n,s){if(!this.__loaded||!this.persistence)return I.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),I.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var r=this.get_distinct_id();this.register({$user_id:e}),this.get_property(ss)||this.register_once({$had_persisted_distinct_id:!0,$device_id:r},""),e!==r&&e!==this.get_property(jn)&&(this.unregister(jn),this.register({distinct_id:e}));var i,o=(this.persistence.get_property(He)||en)===en,a=e!==r,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:n||{},$set_once:s||{}},!1),this.capture(ii,{distinct_id:e,$anon_distinct_id:r},{$set:n||{},$set_once:s||{}}),this.Sn=mi(e,n,s),(i=this.featureFlags)==null||i.setAnonymousDistinctId(r);else if(l){this.persistence.set_property(He,Tt);var u=n||{},c=s||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=mi(e,n,s)}else(n||s)&&this.setPersonProperties(n,s);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(n||s)&&this.reloadFeatureFlags()}}setPersonProperties(e,n){if((e||n)&&this.Gn("posthog.setPersonProperties")){var s=mi(this.get_distinct_id(),e,n);this.Sn!==s?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:n||{}},!0),this.capture("$set",{$set:e||{},$set_once:n||{}}),this.Sn=s):I.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var n,s=(O(e)?e:[e]).filter((r=>W(r)&&r.length>0));s.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((n=this.featureFlags)==null||n.unsetPersonPropertiesForFlags(s,!0),this.capture("$set",{$unset:s}),this.Sn=null)}group(e,n,s){if(e&&n){var r=this.getGroups(),i=r[e]!==n;if(i&&this.resetGroupPropertiesForFlags(e),this.register({$groups:w({},r,{[e]:n})}),i||s){var o={$group_type:e,$group_key:n};s&&(o.$group_set=s),this.capture(Qa,o)}s&&this.setGroupPropertiesForFlags({[e]:s}),i&&!s&&this.reloadFeatureFlags()}else I.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,n){var s;n===void 0&&(n=!0),(s=this.featureFlags)==null||s.setPersonPropertiesForFlags(e,n)}resetPersonPropertiesForFlags(e){var n;e===void 0&&(e=!0),(n=this.featureFlags)==null||n.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,n){var s;n===void 0&&(n=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((s=this.featureFlags)==null||s.setGroupPropertiesForFlags(e,n))}resetGroupPropertiesForFlags(e){var n;(n=this.featureFlags)==null||n.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,n){var s,r,i,o,a,l,u,c,d,h;if(n===void 0&&(n=!1),I.info("reset"),!this.__loaded)return I.uninitializedWarning("posthog.reset");var p,f=this.get_property(ss),g=this.get_property(si),m=this.get_property(qt),_=this.is_capturing();if(this.consent.reset(),n||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(s=this.persistence)==null||s.clear(),(r=this.sessionPersistence)==null||r.clear(),this.yn.clear(),this.Qn(),k(m)||(p=this.persistence)==null||p.register({[qt]:m}),(i=this.surveys)==null||i.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,en),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:xs,$device_id:null},"");else{var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:e?E:f},""),e||k(g)||this.register({[si]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var n=this;return X((function*(){var s,r,i,o,a,l,u;if(n.__loaded){(s=n.Un)==null||s.stop(),(r=n.jn)==null||r.dispose(),(i=n.sessionRecording)==null||i.dispose(),(o=n.logs)==null||o.flushLogs("sendBeacon"),(a=n.metrics)==null||a.flush("sendBeacon"),(l=n.In)==null||l.unload(),(u=n.Rn)==null||u.unload();try{var c;(c=n.featureFlags)==null||c.destroy()}catch(d){I.error("Error while destroying feature flags",d)}}else I.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,n){var s;this.config.identity_distinct_id=e,this.config.identity_hash=n,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,n;return(e=(n=this.sessionManager)==null?void 0:n.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var n=this.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.sessionStartTimestamp,r=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+n.sessionId);if(e!=null&&e.withTimestamp&&s){var i,o=(i=e.timestampLookBack)!==null&&i!==void 0?i:10;if(!s)return r;r+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return r}alias(e,n){return e===this.get_property(lu)?(I.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(k(n)&&(n=this.get_distinct_id()),e!==n?(this.Kn(jn,e),this.capture("$create_alias",{alias:e,distinct_id:n})):(I.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var n=w({},this.config);if(te(e)){var s,r,i,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var g=this.En();(s=this.persistence)==null||s.update_config(this.config,n,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new ui(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),I.info("set_config",{config:e,oldConfig:n,newConfig:w({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(r=this.featureFlags)==null||r.updateConfig==null||r.updateConfig(this.config,this.Qi()),(i=this.exceptionObserver)==null||i.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,n){Y.LIB_NAME=e,Y.LIB_VERSION=n}startSessionRecording(e){var n,s,r,i,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((n=this.sessionManager)==null||n.checkAndGetSessionAndWindowId(),l.sampling&&((s=this.sessionRecording)==null||s.overrideSampling()),l.linked_flag&&((r=this.sessionRecording)==null||r.overrideLinkedFlag()),l.url_trigger&&((i=this.sessionRecording)==null||i.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,n){if(this.exceptions){var s=new Error("PostHog syntheticException"),r=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(w({},r,n))}}addExceptionStep(e,n){var s;(s=this.exceptions)==null||s.addExceptionStep(e,n)}captureLog(e){var n;(n=this.logs)==null||n.captureLog(e)}get logger(){var e,n;return(e=(n=this.logs)==null?void 0:n.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var n,s;return(n=(s=this.toolbar)==null?void 0:s.loadToolbar(e))!==null&&n!==void 0&&n}get_property(e){var n;return(n=this.persistence)==null?void 0:n.props[e]}getSessionProperty(e){var n;return(n=this.sessionPersistence)==null?void 0:n.props[e]}toString(){var e,n=(e=this.config.name)!==null&&e!==void 0?e:an;return n!==an&&(n=an+"."+n),n}_isIdentified(){var e,n;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((n=this.sessionPersistence)==null?void 0:n.get_property(He))===Tt}Zn(){var e,n;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[jn])&&((n=this.persistence)==null||(n=n.props)==null||!n[or]))}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"?(I.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(or,!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,n,s,r,i=this.En();return((e=this.persistence)==null?void 0:e.xi)!==i&&((s=this.persistence)==null||s.set_disabled(i)),((n=this.sessionPersistence)==null?void 0:n.xi)!==i&&((r=this.sessionPersistence)==null||r.set_disabled(i)),i&&(this.yn.clear(),this.Qn()),i}opt_in_capturing(e){var n;if(this.config.cookieless_mode!==ht){if(this.gn()){var s,r,i,o,a;this.Yn(!0,!0),(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.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=(i=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&i!==void 0?i:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(n=this.sessionRecording)==null||n.startIfEnabledOrStop(),this.config.cookieless_mode==Ht&&((c=this.surveys)==null||c.loadIfEnabled()),(k(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 I.warn(Cl)}opt_out_capturing(){var e,n,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:xs,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(n=this.sessionManager)==null||n.destroy(),(s=this.pageViewManager)==null||s.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):I.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?ed(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(on,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ar,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),re(C,ar,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?(I.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(n,s,r,i,o){var a=s in n&&!D(n[s]),l=r in n&&!D(n[r]);return a?n[s]:!!l&&(o&&o.warn("Config field '"+r+"' is deprecated. Please use '"+s+"' instead. The old field will be removed in a future major version."),n[r])})(e,"advanced_disable_flags","advanced_disable_decide",0,I)}Pt(e){var n;if(D(this.config.before_send))return e;var s=Object.keys((n=e.properties)!==null&&n!==void 0?n:{}).filter(yh),r=O(this.config.before_send)?this.config.before_send:[this.config.before_send],i=e;for(var o of r){if(i=o(i),D(i)){var a="Event '"+e.event+"' was rejected in beforeSend function";return _h(e.event)?I.warn(a+". This can cause unexpected behavior."):I.info(a),null}i.properties&&!mt(i.properties)||I.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of s)if(i.properties&&D(i.properties[l]))return I.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 i}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,n){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:n})}captureTraceMetric(e,n,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:n,$ai_metric_value:String(s)})}Cn(e){var n=Ke(e)&&!e,s=Q.N()&&Q.P("ph_debug")==="true";return!n&&(!!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 n=0;e.length>n;n++)t.prototype[e[n]]=ap(t.prototype[e[n]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var n=te(e)?e:{};this.thresholdPx=n.threshold_px||30,this.timeoutMs=n.timeout_ms||1e3,this.clickCount=n.click_count||3,this.clicks=[]}isRageClick(e,n,s){if(this.disabled)return!1;var r=this.clicks[this.clicks.length-1];if(r&&Math.abs(e-r.x)+Math.abs(n-r.y)s-r.timestamp){if(this.clicks.push({x:e,y:n,timestamp:s}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:n,timestamp:s}];return!1}}var yi="$copy_autocapture",wi=ne("[AutoCapture]");function bi(t,e){return e.length>t?e.slice(0,t)+"...":e}function hf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function pf(t,e){var n,s,r=e.e,i=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")&&xu>c.length;)if(Su(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&&Jn(R))&&(u?Ct(R):R)}M(ur(S),"ph-no-capture")&&(b=!0),m.push((function(T,L,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"?bi(1024,dl(T)):bi(1024,rs(T)));var Ie=ur(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Pu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!L&&Jn(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]=bi(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=hf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,i,o,a,u));var N=(function(T){if(!ro(T))return{};var L={};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&&Jn(H)&&(L[z]=H)}})),L})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rs(t)),E){var x,F;m[0].attr__href=E;var P=(x=dr(E))==null?void 0:x.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=E)}return{props:ee({$event_type:r.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 L of(A.attr_class.sort(),A.attr_class))T+="."+L.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 js(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+=":")+js(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:Ip(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return js(A).filter((L=>L[0].indexOf("attr__")===0)).forEach((L=>T.attributes[L[0]]=L[1])),T}))})(g)))},(n=m[0])!=null&&n.$el_text?{$el_text:(s=m[0])==null?void 0:s.$el_text}:{},f&&r.type==="click"?{$external_click_url:f}:{},_)}}var On=ne("[ExceptionAutocapture]"),$l=()=>{},ff=ne("[TracingHeaders]"),Ot=ne("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",Ln="awaiting_config",$s="missing_config";ne("[SessionRecording]"),ne("[SessionRecording]");var po="[SessionRecording]",at=ne(po),gf=ne("[Heatmaps]");function Ei(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Rs=ne("[Product Tours]"),Si=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},mf=["$set_once","$set"],Ze=ne("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function sn(t,e,n){if(D(t))return!1;switch(n){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 vf{constructor(e){this.ns=new Xo,this.ss=(n,s)=>this.os(n,s)&&this.ls(n,s)&&this.us(n,s)&&this.hs(n,s),this.os=(n,s)=>s==null||!s.event||n?.event===s?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,n;k((e=this._instance)==null?void 0:e._addCaptureHook)||(n=this._instance)==null||n._addCaptureHook(((s,r)=>{this.on(s,r)}))}register(e){var n,s;if(!k((n=this._instance)==null?void 0:n._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(s=this._instance)!=null&&s.autocapture)){var r,i=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&i.add(l?.selector)}))})),(r=this._instance)==null||r.autocapture.setElementSelectors(i)}}on(e,n){var s;n!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(n.event))&&this.vs&&((s=this.vs)==null?void 0:s.size)>0&&this.vs.forEach((r=>{this.cs(n,r)&&this.ns.emit("actionCaptured",r.name)}))}fs(e){this.onAction("actionCaptured",(n=>e(n)))}cs(e,n){if(n?.steps==null)return!1;for(var s of n.steps)if(this.ss(e,s))return!0;return!1}onAction(e,n){return this.ns.on(e,n)}ls(e,n){if(n!=null&&n.url){var s,r=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!r||typeof r!="string"||!sn(r,n.url,n.url_matching||"contains"))return!1}return!0}us(e,n){return!!this.ps(e,n)&&!!this.gs(e,n)&&!!this.ys(e,n)}ps(e,n){var s;if(n==null||!n.href)return!0;var r=this.bs(e);if(r.length>0)return r.some((a=>sn(a.href,n.href,n.href_matching||"exact")));var i,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&sn((i=o.match(/(?::|")href="(.*?)"/))?i[1]:"",n.href,n.href_matching||"exact")}gs(e,n){var s;if(n==null||!n.text)return!0;var r=this.bs(e);if(r.length>0)return r.some((u=>sn(u.text,n.text,n.text_matching||"exact")||sn(u.$el_text,n.text,n.text_matching||"exact")));var i,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(i=(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=n.text,a=n.text_matching||"exact",i.some((u=>sn(u,o,a))))}ys(e,n){var s,r;if(n==null||!n.selector)return!0;var i=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(i!=null&&i.includes(n.selector))return!0;var o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";if(n.selector_regex&&o)try{return new RegExp(n.selector_regex).test(o)}catch{return!1}return!1}bs(e){var n;return(e==null||(n=e.properties)==null?void 0:n.$elements)==null?[]:e?.properties.$elements}hs(e,n){return n==null||!n.properties||n.properties.length===0||sd(n.properties.reduce(((s,r)=>{var i=O(r.value)?r.value.map(String):r.value!=null?[String(r.value)]:[];return s[r.key]={values:i,operator:r.operator||"exact"},s}),{}),e?.properties)}}class _f{constructor(e){var n;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(n=this._instance)==null||n.onSessionId==null||n.onSessionId((s=>this.Ss(s)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,n){return!!e&&sd(e.propertyFilters,n?.properties)}Ps(e,n){var s=new Map;return e.forEach((r=>{var i;(i=r.conditions)==null||(i=i[n])==null||(i=i.values)==null||i.forEach((o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(r.id),s.set(o.name,a)}}))})),s}Rs(e,n,s){var r=(s===$n.Activation?this.ws:this.ks).get(e),i=[];return this.As((o=>{i=o.filter((a=>r?.includes(a.id)))})),i.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,n)}))}register(e){var n;k((n=this._instance)==null?void 0:n._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var n=e.filter((s=>{var r,i;return((r=s.conditions)==null?void 0:r.actions)&&((i=s.conditions)==null||(i=i.actions)==null||(i=i.values)==null?void 0:i.length)>0}));n.length!==0&&(this.Os==null&&(this.Os=new vf(this._instance),this.Os.init(),this.Os.fs((s=>{this.onAction(s)}))),n.forEach((s=>{var r,i,o,a,l;s.conditions&&(r=s.conditions)!=null&&r.actions&&(i=s.conditions)!=null&&(i=i.actions)!=null&&i.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.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 n,s=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.events)&&((a=i.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),r=e.filter((i=>{var o,a;return((o=i.conditions)==null?void 0:o.cancelEvents)&&((a=i.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));s.length===0&&r.length===0||((n=this._instance)==null||n._addCaptureHook(((i,o)=>{this.onEvent(i,o)})),this.ws=this.Ps(e,$n.Activation),this.ks=this.Ps(e,$n.Cancellation))}onEvent(e,n){var s,r,i=this.Ds(),o=(n==null||(s=n.properties)==null?void 0:s.$survey_id)||(n==null||(r=n.properties)==null?void 0:r.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return i.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return i.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,n,$n.Cancellation);l.length>0&&(i.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)){i.info("event name matched",{event:e,eventPayload:n,items:this.ws.get(e)});var u=this.Rs(e,n,$n.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var n;if(e.length!==0){var s=!((n=this._instance)==null||n.get_session_id==null||!n.get_session_id()),r=[];for(var i of e)s&&this.Cs(i)?this.qs(i)&&this.Us(i):r.push(i);r.length>0&&(this._s=[...new Set([...this._s,...r])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((s=>s!==e));var n=this.zs();return!n.includes(e)&&(this.Ws([...n,e]),this.Vs(),!0)}Ns(e){var n=new Set(e);this._s=this._s.filter((i=>!n.has(i)));var s=this.Zs(),r=s.filter((i=>!n.has(i)));r.length!==s.length&&(this.Ws(r),r.length===0&&this.Gs()),this.js(e)}Qs(){var e,n=this.Ms();if(!n)return{};var s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n];return s&&typeof s=="object"?s:{}}Us(e){if(this.Ms()){var n=this.Qs();this.Ts(w({},n,{[e]:Date.now()}))}}js(e){if(this.Ms()){var n=this.Qs(),s={},r=!1;for(var i of Object.entries(n)){var o=i[0],a=i[1];e.includes(o)?r=!0:s[o]=a}r&&(mt(s)?this.Es():this.Ts(s))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var n=this.Qs()[e];return he(n)?n:void 0}}Zs(){var e,n=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[n])||[]}zs(){var e,n,s=this.Zs();if(s.length===0)return[];var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],i=(n=this._instance)==null||n.get_session_id==null?void 0:n.get_session_id();return i&&r===i?s:[]}Vs(){var e,n=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();n&&this.Xs(n)}Gs(){this.ta()}Ss(e){var n,s=(n=this._instance)==null||(n=n.persistence)==null?void 0:n.props[this.Ys()];if(s&&s!==e){var r=this.Zs(),i=this.Qs();r.length>0&&(this.Ws([]),r.filter((o=>he(i[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 yf extends _f{constructor(e){super(e)}Js(){return Yi}Ys(){return Ls}Ms(){return Ds}Ts(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Ds]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ds)}Cs(e){var n,s;this.As((i=>{s=i.find((o=>o.id===e))}));var r=(n=s)==null||(n=n.appearance)==null?void 0:n.surveyPopupDelaySeconds;return he(r)&&r>0}ra(){return ft.SHOWN}As(e){var n;(n=this._instance)==null||n.getSurveys(e)}Bs(e){var n;(n=this._instance)==null||n.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Yi]:e})}Xs(e){var n;(n=this._instance)==null||(n=n.persistence)==null||n.register({[Ls]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ls)}ea(){return!1}$s(e,n){var s;this.As((i=>{s=i.find((o=>o.id===n))}));var r=!s||(function(i){var o;return rd(i)&&!((o=i.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||i.schedule==="always"})(s);return r?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 Ts="SDK is not enabled or survey functionality is not yet loaded",Ol="Disabled. Not loading surveys.",wf=v!=null&&v.location?hr(v.location.hash,"__posthog")||hr(location.hash,"state"):null,Ll="_postHogToolbarParams",Dl=ne("[Toolbar]"),Bl=ne("[FeatureFlags]");class bf{constructor(e,n){n===void 0&&(n=!1),this.na=!1,this.update(e,n)}update(e,n){this.sa=((s,r)=>{var i,o,a,l;return{bootstrap:{featureFlags:(i=s.bootstrap)==null?void 0:i.featureFlags,featureFlagPayloads:(o=s.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:r,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:O(s.flag_keys)?s.flag_keys:void 0}})(e,n),!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),k(e.flag_keys)||O(e.flag_keys)||Bl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var jl=ne("[FeatureFlags]"),Lt=ne("[FeatureFlags]",{debugEnabled:!0}),xi=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},n=0;t.length>n;n++)e[t[n]]=!0;return e},Wl=t=>{var e={};for(var n of js(t||{})){var s=n[1];s&&(e[n[0]]=s)}return e},Xe=ne("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",Ef={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>gr(e,t),not_regex:(t,e)=>!gr(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var n=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),n.getWebExperiments((r=>{ye.aa("retrieved web experiments from the server"),n.oa=new Map,r.forEach((i=>{if(i.feature_flag_key){var o;n.oa&&(ye.aa("setting flag key ",i.feature_flag_key," to web experiment ",i),(o=n.oa)==null||o.set(i.feature_flag_key,i));var a=n._instance.getFeatureFlag(i.feature_flag_key);W(a)&&i.variants[a]&&n.la(i.name,a,i.variants[a].transforms)}else if(i.variants)for(var l in i.variants){var u=i.variants[l];ye.ua(u,n._instance)&&n.la(i.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((n=>{var s;if(this.oa&&(s=this.oa)!=null&&s.has(n)){var r,i=this._instance.getFeatureFlag(n),o=(r=this.oa)==null?void 0:r.get(n);i&&o!=null&&o.variants[i]&&this.la(o.name,i,o.variants[i].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var n=vn(e?.search,"__experiment_id"),s=vn(e?.search,"__experiment_variant");n&&s&&(ye.aa("previewing web experiments "+n+" && "+s),this.getWebExperiments((r=>{this.ha(parseInt(n),s,r)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,n,s){if(this.Ne.disable_web_experiments&&!s)return e([]);var r=this._instance.get_property("$web_experiments");if(r&&!n)return e(r);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:i=>e(i.statusCode===200&&i.json&&i.json.experiments||[])})}ha(e,n,s){var r=s.filter((i=>i.id===e));r&&r.length>0&&(ye.aa("Previewing web experiment ["+r[0].name+"] with variant ["+n+"]"),this.la(r[0].name,n,r[0].variants[n].transforms))}static ua(e,n){return!D(e.conditions)&&ye.da(e,n)&&ye.va(e)}static da(e,n){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.url))return!0;var r=ye.getWindowLocation();if(r){var i,o,a,l=wu(n,r.href);return(i=e.conditions)==null||!i.url||Ef[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var n;if(D(e.conditions)||D((n=e.conditions)==null?void 0:n.utm))return!0;var s=Mu();if(s.utm_source){var r,i,o,a,l,u,c,d,h=(r=e.conditions)==null||(r=r.utm)==null||!r.utm_campaign||((i=e.conditions)==null||(i=i.utm)==null?void 0:i.utm_campaign)==s.utm_campaign,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,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)==s.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;n>r;r++)s[r-1]=arguments[r];I.info("[WebExperiments] "+e,s)}la(e,n,s){this._is_bot()?ye.aa(zl):n!=="control"?s.forEach((r=>{if(r.selector){var i;ye.aa("applying transform of variant "+n+" for experiment "+e+" ",r);var o=(i=document)==null?void 0:i.querySelectorAll(r.selector);o?.forEach((a=>{var l=a;r.html&&(l.innerHTML=r.html),r.css&&l.setAttribute("style",r.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?ed(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=ne("[Conversations]"),Dt="Conversations not available yet.",ql="console",cd="__posthogHandledLogsRequestError",ki=(t,e)=>{var n=t instanceof Error?t:new Error(e);return n[cd]=!0,n},Vl=t=>!!t&&typeof t=="object"&&t[cd]===!0,Nr={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 bf(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var n;(n=this.Ea)==null||n.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),n=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(n):n();var e,n}Pa(t){if(this.nn===t)return v&&re(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[Hn,Wn,Os,et]){var n=this.Oa(e);k(n)||(t[e]=n)}this.fa=t;var s=w({},t),r=this.Oa(Bt);if(r)for(var i of Object.entries(r))s["$feature/"+i[0]]=i[1];this.pa=s}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Kn);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),n})):[]}qa(){var t=this.Ne.flagKeys;if(!k(t))return t.filter((e=>{var n=e&&typeof e=="string"&&e.trim().length>0;return n||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),n}))}initialize(){var t,e,n=this.Ne,s=(t=(e=n.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(s).length){var r,i,o=(r=(i=n.bootstrap)==null?void 0:i.featureFlagPayloads)!==null&&r!==void 0?r:{},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,n){var s,r,i=n!=null&&n.merge&&(s=this.Oa(Bt))!==null&&s!==void 0?s:{},o=n!=null&&n.merge&&(r=this.Oa(Wn))!==null&&r!==void 0?r:{},a=w({},i,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:k(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(Ki),e=this.Oa(et),n=this.Oa(jt);if(!n&&!e)return t||{};var s=ee({},t||{}),r=[...new Set([...Object.keys(n||{}),...Object.keys(e||{})])];for(var i of r){var o,a,l=s[i],u=e?.[i],c=k(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=k(u)?l?.variant:typeof u=="string"?u:void 0,h=n?.[i],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})),s[i]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:n,finalDetails:s}),this.ca=!0),s}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((n=>{var s=t[n];return{key:n,enabled:Da(s),variant:Ba(s),payload:La(e[n])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:n}),this.ca=!0),n}getFlagPayloads(){var t=this.Oa(Wn),e=this.Oa(jt);if(!e)return t||{};for(var n=ee({},t||{}),s=Object.keys(e),r=0;s.length>r;r++)n[s[r]]=e[s[r]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:n}),this.ca=!0),n}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var n={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:w({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:Uu()};k(e.deviceId)||(n.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(n.disable_flags=!0);var s=this.Na();s.length&&(n.evaluation_contexts=s);var r=this.qa();k(r)||(n.flag_keys=r);var i=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(i?"&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({[Bs]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:n,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!n.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?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({[Bs]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):n.disable_flags||this.ja(p,f,{partialResponse:i}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Tu(this.Sa,3)}Ua(t){this.Sa=Nu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var n;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s=this.getFeatureFlagResult(t,e);return(n=s?.variant)!==null&&n!==void 0?n:s?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+xi)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var n,s=this.getFlagVariants(),r=t in s,i=s[t],o=this.getFlagPayloads()[t],a=String(i),l=this.Oa(Os)||void 0,u=this.Oa(Kn)||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(qn);h&&h!==p&&(c={},n=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))n&&this.F({[Wt]:c,[qn]:n});else{var f,g,m,_,E,b,x,F,P,B;O(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},n?{[qn]:n}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Bs))!==null&&f!==void 0?f:[]];k(i)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:i,$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};k(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),k(S==null||(E=S.metadata)==null?void 0:E.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(x=S.reason)==null?void 0:x.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),k(S?.original_variant)&&k(S?.original_enabled)||(R.$feature_flag_original_response=k(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 n&&this.F({[Wt]:c,[qn]:n});if(r)return{key:t,enabled:!!i,variant:typeof i=="string"?i:void 0,payload:La(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xi)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((n=>{this.rt.error("Failed to capture feature flag call",n)}))}catch(n){this.rt.error("Failed to capture feature flag call",n)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r={distinct_id:s.distinctId,token:s.projectToken,person_properties:{$lib:s.library.name,$lib_version:s.library.version}},i=n.Na();i.length&&(r.evaluation_contexts=i);var o,a=n.qa();k(a)||(r.flag_keys=a);try{var l,u=(l=(yield s.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:r,compression:n.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:n.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void n.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){n.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+xi),e.defaultValue;var n=this.getFeatureFlag(t,e);return k(n)?e.defaultValue:!!n}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,n){this.ja(t,e,n)}ja(t,e,n){if(this.nn){this.ma=!0;var s=(function(r,i,o,a,l,u){i===void 0&&(i={}),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)})(r,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=r.requestId,g=r.evaluatedAt;if(O(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{[Hn]:h,[Bt]:m,[sr]:!1}}var E=h,b=p,x=d;if(l!=null&&l.partialResponse)E=w({},i,E),b=w({},o,b),x=w({},a,x);else if(r.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=w({},i,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]))))),x=w({},a,Object.fromEntries(Object.entries(x||{}).filter((P=>F.has(P[0])))))}else E=w({},i,E),b=w({},o,b),x=w({},a,x);return w({[Hn]:Object.keys(Wl(E)),[Bt]:E||{},[Wn]:b||{},[Ki]:x||{},[sr]:r.minimalFlagCalledEvents===!0},f?{[Os]:f}:{},g?{[Kn]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),n,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 Lt.info("All overrides cleared");if(O(t))return this.F({[et]:Hl(t)}),this.Va(),void Lt.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,n=t;this.ca=!!((e=n.suppressWarning)!==null&&e!==void 0&&e);var s={},r=n.flags,i=n.payloads;return r&&(s[et]=O(r)?Hl(r):r),i&&(s[jt]=i),Object.keys(s).length&&this.F(s),r===!1&&i===!1?this.q([et,jt]):r===!1?this.q(et):i===!1&&this.q(jt),this.Va(),r===!1?Lt.info("Flag overrides cleared"):r&&Lt.info("Flag overrides set",{flags:r}),void(i===!1?Lt.info("Payload overrides cleared"):i&&Lt.info("Payload overrides set",{payloads:i}))}if(t&&typeof t=="object")return this.F({[et]:t}),this.Va(),void Lt.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),n=e.flags,s=e.flagVariants;try{t(n,s)}catch(r){this.rt.error("Error while running feature flags callback",r)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,n){var s=(this.Oa(Ms)||[]).find((l=>l.flagKey===t)),r={["$feature_enrollment/"+t]:e},i={$feature_flag:t,$feature_enrollment:e,$set:r};s&&(i.$early_access_feature_name=s.name),n&&(i.$feature_enrollment_stage=n);var o=w({},this.getFlagVariants(),{[t]:e});this.F({[Hn]:Object.keys(Wl(o)),[Bt]:o,[ct]:w({},this.Oa(ct)||{},r)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",i).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,n){e===void 0&&(e=!1);var s=this.Oa(Ms);!s||e?this.Qa(t,n):t(s)}Qa(t,e){var n=this;return X((function*(){var s=n.nn;if(s){var r,i=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield s.sendRequest("/api/early_access_features/?token="+s.projectToken+i,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;n.F({[Ms]:r=o.json.earlyAccessFeatures})}catch(a){return void n.rt.error("Early access feature request failed",a)}try{t(r)}catch(a){n.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((n=>e[n])),flagVariants:Object.keys(e).filter((n=>e[n])).reduce(((n,s)=>(n[s]=e[s],n)),{})}}Va(t){this.Fa();var e=this.Ga(),n=e.flags,s=e.flagVariants;this.featureFlagEventHandlers.forEach((r=>{try{r(n,s,{errorsLoading:t})}catch(i){this.rt.error("Error while running feature flags callback",i)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var n=this.Oa(ct)||{},s=t?.$set||(t!=null&&t.$set_once?{}:t),r=t?.$set_once,i={};if(r)for(var o in r)({}).hasOwnProperty.call(r,o)&&(o in n||(i[o]=r[o]));this.F({[ct]:w({},n,i,s)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var n=w({},this.Oa(ct)||{});t.forEach((s=>{delete n[s]})),this.F({[ct]:n}),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 n=this.Oa(Ut)||{},s=w({},n);for(var r of Object.keys(t))s[r]=w({},n[r],t[r]);this.F({[Ut]:s}),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}}},Sf={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===Ln||this.Ya===$s?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 n=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(n!=null&&n.length)||n.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&&re(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),n=!this.Ne.disable_session_recording,s=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&n&&!s}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var n=!k(Object.assign)&&!k(Array.from);this.ro&&n?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,n,s;this.ro&&(this.Ya!==Ln&&this.Ya!==$s&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(n=$.__PosthogExtensions__)!=null&&n.initSessionRecording?this.so(t):(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,this.ao,(r=>{if(r)return at.error("could not load recorder",r);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(zo),(e=this.Mr)==null||e.unregister(cu)}uo(t,e){if(D(t))return null;var n,s=he(t)?t:parseFloat(t);return typeof(n=s)!="number"||!Number.isFinite(n)||0>n||n>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):s}ho(t){if(this.Mr){var e,n,s=this.Mr,r=()=>{var i,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((i=this.Ne.session_recording)==null?void 0:i.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]: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:k(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};r(),(e=this.Xa)==null||e.call(this),this.Xa=(n=this._instance.sessionManager)==null?void 0:n.onSessionId(r)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Ln&&(this.Ya=$s,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var n;e===void 0&&(e="log"),(n=this.Ja)!=null&&n.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,n=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(qt);return(n==null||(e=n.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(n){return at.warn("persisted remote config for session recording is invalid and will be ignored",n),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,n,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({[vu]:!0});var r;if(this.Ja||(this.Ja=(r=$.__PosthogExtensions__)==null?void 0:r.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===$s||this.Ya===Ln?void 0:(this.Ya=Ln,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Hu(this._instance).load());this.Ya=Nl,(n=(s=this.Ja).setDocumentWasEverVisible)==null||n.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({[du]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,n;this.Ja||(n=this.Mr)==null||n.register({[t==="url"?hu:pu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var n;return!((n=this.Ja)==null||!n.tryAddCustomEvent(t,e))}}},xf={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,n=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return n.url_allowlist=(t=n.url_allowlist)==null?void 0:t.map((s=>new RegExp(s))),n.url_ignorelist=(e=n.url_ignorelist)==null?void 0:e.map((s=>new RegExp(s))),n}yo(){if(this.isBrowserSupported()){if(v&&C){var t=n=>{n=n||v?.event;try{this.bo(n)}catch(s){wi.error("Failed to capture event",s)}};if(re(C,"submit",t,{capture:!0}),re(C,"change",t,{capture:!0}),re(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=n=>{n=n||v?.event;try{this.bo(n,yi)}catch(s){wi.error("Failed to capture copy/cut event",s)}};re(C,"copy",e,{capture:!0}),re(C,"cut",e,{capture:!0})}}}else wi.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var n=e.autocapture_opt_out;Ke(n)&&(this.instance.persistence&&this.instance.persistence.register({[Ui]:n}),this.co=n),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,n=[];return(e=this.mo)==null||e.forEach((s=>{var r=C?.querySelectorAll(s);r?.forEach((i=>{t===i&&n.push(s)}))})),n}get isEnabled(){var t,e,n=(t=this.instance.persistence)==null?void 0:t.props[Ui],s=this.co,r=this.instance.Qi()&&!this.fo;if($e(s)&&!Ke(n)&&!r)return!1;var i=(e=this.co)!==null&&e!==void 0?e:!!n;return!!this.instance.config.autocapture&&!i}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var n,s=ai(t);Eu(s)&&(s=s.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(s,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var r=e===yi;if(s&&(function(d,h,p,f,g,m){var _;if(!v||Jo(d)||p!=null&&p.url_allowlist&&!sl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&sl(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=Fu(d,f),x=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,A){var R=A?.element_allowlist;if(k(R))return!0;var N,T=function(J){if(R.some((z=>J.tagName.toLowerCase()===z)))return{v:!0}};for(var L of S)if(N=T(L))return N.v;return!1})(F,p)||!so(F,p?.css_selector_allowlist)||so(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:wp))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 x?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(Ko.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(s,t,this.Ne,r,r?["copy","cut"]:void 0,this.instance)){var i=pf(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=i.props;if(i.explicitNoCapture)return!1;var a=this.getElementSelectors(s);if(a&&a.length>0&&(o.$element_selectors=a),e===yi){var l,u=ku(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&&(I.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,I.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var n=this;(function(s,r,i){try{if(!(r in s))return $l;var o={next:s[r]},a=i((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[r]=a,()=>{if(s[r]!==a)for(var l=s[r];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[r]=o.next}}catch{return $l}})(v.history,t,(s=>function(r,i,o){s.call(this,r,i,o),n.So(t)}))}}So(t){try{var e,n=v==null||(e=v.location)==null?void 0:e.pathname;if(!n)return;n!==this._o&&this.isEnabled&&this._instance.capture(on,{navigation_type:t}),this._o=n}catch(s){I.error("Error capturing "+t+" pageview",s)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};re(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[Hi]),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;gf.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var n=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Hi]:n}),this.Co=n,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){Ei(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),re(v,lr,this.Po),this.Ro=t=>this.ke(t||v?.event),re(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),re(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,Cp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),re(C,ar,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(lr,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ar,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var n=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),r=this.instance.scrollManager.scrollElement(),i=(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=Iu(u)}return!1})(ai(t),["fixed","sticky"],r);return{x:t.clientX+(i?0:s),y:t.clientY+(i?0:n),target_fixed:i,type:e}}ke(t,e){var n;if(e===void 0&&(e="click"),!nl(t.target)&&Ei(t)){var s=this.$o(t,e);(n=this.rageclicks)!=null&&n.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(ai(t),this.instance.config.rageclick)&&this.Vt(w({},s,{type:"rageclick"})),this.Vt(s)}}Fo(t){!nl(t.target)&&Ei(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,n=this.Ne.custom_personal_data_properties,s=this.Ne.mask_personal_data_properties?[..._n,...n||[]]:[],r=is(e,s,os);this.R=this.R||{},this.R[r]||(this.R[r]=[]),this.R[r].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(((n,s)=>w({},n,{["$web_vitals_"+s.name+"_event"]:w({},s),["$web_vitals_"+s.name+"_value"]:s.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=n=>{var s;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(n?.name)||D(n?.value))Ot.error("Invalid metric received",n);else{var r=typeof n.navigationURL=="string"?n.navigationURL:void 0,i=this.Bo(r);if(!k(i)){var o=he(n.navigationId)||typeof n.navigationId=="string"?"navigation:"+n.navigationId:"url:"+i;if(!this.Ho||this.Ho>n.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),k(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=i),this.R.firstMetricTimestamp=k(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,n.attribution&&n.attribution.interactionTargetElement&&(n.attribution.interactionTargetElement=void 0);var a=(s=this._instance.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0),l=w({},n,r?{navigationURL:i}:{},{$current_url:i,timestamp:Date.now()});k(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 Ot.error("Ignoring metric with value >= "+this.Ho,n)}}},this.Uo=()=>{if(!this.vo){var n,s,r,i,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&k(a)?o?.postHogWebVitalsCallbacks:void 0);if(k(l)||(n=l.onLCP,s=l.onCLS,r=l.onFCP,i=l.onINP),n&&s&&r&&i){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&n(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&i(this.jo.bind(this),u),this.vo=!0}else Ot.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Vi]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,n=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(n)?((e=this._instance.persistence)==null?void 0:e.props[Gi])||["CLS","FCP","INP","LCP"]:n}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Rl;return t>0&&6e4>=t?Rl:t}get isEnabled(){var t=se?.protocol;if(t!=="http:"&&t!=="https:")return Ot.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&&(Ot.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var n=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,s=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Vi]:n}),this._instance.persistence.register({[Gi]:s})),this.Co=n,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,n=this.zo,s=e?.postHogWebVitalsCallbacksByFlavor;s!=null&&s[n]||n==="web-vitals"&&k(s)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,n,(r=>{r?Ot.error("failed to load script",r):t()}))}Bo(t){var e=t||v?.location.href;if(e){var n=this._instance.config.disable_capture_url_hashes?Ct(e):e,s=this._instance.config.custom_personal_data_properties,r=this._instance.config.mask_personal_data_properties?[..._n,...s||[]]:[];return is(n,r,os)}Ot.error("Could not determine current URL")}}},kf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var n;if(v&&this.isEnabled&&(n=$.__PosthogExtensions__)!=null&&n.errorWrappingFunctions){var s=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,r=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,i=$.__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=r(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=i(this.captureException.bind(this)))}catch(o){On.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Wi]),this.Jo=new Eh(w({},(function(n){var s,r,i,o;return n===void 0&&(n={}),{refillRate:(s=(r=n.exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:n.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(i=(o=n.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:n.__exceptionRateLimiterBucketSize)!==null&&i!==void 0?i:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:On})),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):(k(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?(On.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"exception-autocapture",(s=>{if(s)return On.error("failed to load script",s);t()}))}Qo(){var t,e,n;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(n=this.Go)==null||n.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Wi]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,n,s,r=(e=t==null||(n=t.$exception_list)==null||(n=n[0])==null?void 0:n.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(r)?On.info("Skipping exception capture because of client rate limiting.",{exception:r}):(s=this._instance.exceptions)==null||s.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,n;this.Xo=[],this.tl=new Bh([new Gh,new np,new Jh,new Kh,new ep,new Qh,new Zh,new tp],(function(s){for(var r=arguments.length,i=new Array(r>1?r-1:0),o=1;r>o;o++)i[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 i){var g=f(p,s);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||mn});var b}))})(u)}})("web:javascript",Wh,Vh)),this._instance=t,this.Xo=(e=(n=this._instance.persistence)==null?void 0:n.get_property(zi))!==null&&e!==void 0?e:[],this.el=nr(this.il()),this.rl=new rp(this.el)}onConfigChange(){this.el=nr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,n,s;if(t.ok){var r=t.config;if("errorTracking"in r){var i=(e=(n=r.errorTracking)==null?void 0:n.suppressionRules)!==null&&e!==void 0?e:[],o=(s=r.errorTracking)==null?void 0:s.captureExtensionExceptions;this.Xo=i,this._instance.persistence&&this._instance.persistence.register({[zi]:this.Xo,[qi]:o})}}}get nl(){var t,e=!!this._instance.get_property(qi),n=this._instance.config.error_tracking.captureExtensionExceptions;return(t=n??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var n=(function(i){if(!i)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(i).reduce(((a,l)=>sp.has(l)?(o.push(l),a):(a[l]=i[l],a)),{}),droppedKeys:o}})(this.sl(e)),s=n.sanitizedProperties,r=n.droppedKeys;r.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:r}),this.rl.add(w({[er]:t,[tr]:new Date().toISOString()},s))}catch(i){Xe.error("Failed to add exception step. Ignoring breadcrumb.",i)}}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 n=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,s=typeof(i=globalThis._posthogReleaseId)=="string"&&i.length>0?i:void 0;s&&(n.$release_id=s);try{var r=this._instance.capture("$exception",n,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return r&&this.rl.clear(),r}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 i}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:w({},t,{$exception_steps:e})}catch(n){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",n),t}}ll(t){this.el.enabled&&this.rl.add({[er]:t,[tr]: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(((n,s)=>{var r=s.type,i=s.value;return W(r)&&r.length>0&&n.$exception_types.push(r),W(i)&&i.length>0&&n.$exception_values.push(i),n}),{$exception_types:[],$exception_values:[]});return this.Xo.some((n=>{var s=n.values.map((r=>{var i=nd[r.operator],o=e[r.key];if(!i||!o)return!1;var a=O(r.value)?r.value:[r.value];return a.length>0&&i(a,o)}));return n.type==="OR"?s.some(Boolean):s.every(Boolean)}))}catch(n){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",n),!1}}ul(t){return t.flatMap((e=>{var n,s;return(n=(s=e.stacktrace)==null?void 0:s.frames)!==null&&n!==void 0?n:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,n,s,r,i=(e=(n=t[0].stacktrace)==null?void 0:n.frames)!==null&&e!==void 0?e:[],o=i[i.length-1];return(s=o==null||(r=o.filename)==null?void 0:r.includes("posthog.com/static"))!==null&&s!==void 0&&s}return!1}al(t){return!D(t)&&O(t)}}},If=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 n,s;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Si(this._instance))return!this.vl&&D((n=this.Mr)==null?void 0:n.props[zn])||Rs.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&&Si(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"product-tours",(s=>{s?Rs.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),!O(this.cl)||e){var n=this.Mr;if(n){var s=n.props[zn];if(O(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:r=>{if(Si(this._instance)){var i=r.statusCode;if(i!==200||!r.json){var o="Product Tours API could not be loaded, status: "+i;return i===0?r.error||Rs.warn(o):Rs.error(o),void t([],{isLoaded:!1,error:o})}var a=O(r.json.product_tours)?r.json.product_tours:[];this.cl=a,n&&n.register({[zn]: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(zn)}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)}}},Nr),Cf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var n=this.globalsForEvent(e);this.gl.push(n),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,n,s,r,i,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({},Cc(t,mf),{properties:w({},t.properties,f?{$set:w({},(e=(n=t.properties)==null?void 0:n.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:w({},(s=(r=t.properties)==null?void 0:r.$set_once)!==null&&s!==void 0?s:{},p)}:{}),elements_chain:(i=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&i!==void 0?i:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,n=(e=t.tagName)==null?void 0:e.toLowerCase();return n==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):n==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,n,s,r,i,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,(n=l.Document)==null?void 0:n.prototype,(s=l.DocumentFragment)==null?void 0:s.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var E=arguments.length,b=new Array(E),x=0;E>x;x++)b[x]=arguments[x];return _.apply(this,g(b))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,b=new Array(E),x=0;E>x;x++)b[x]=arguments[x];return _.apply(this,g(b))}))})),[(r=l.Element)==null?void 0:r.prototype,(i=l.CharacterData)==null?void 0:i.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,b=new Array(E),x=0;E>x;x++)b[x]=arguments[x];return _.apply(this,g(b))})),p(m,"after",(_=>function(){for(var E=arguments.length,b=new Array(E),x=0;E>x;x++)b[x]=arguments[x];return _.apply(this,g(b))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,b=new Array(E),x=0;E>x;x++)b[x]=arguments[x];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 n=this._l();try{var s=t(n);return e&&n(),s}catch(r){throw n(),r}}setupSiteApp(t){var e=this.apps[t.id],n=()=>{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,r=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),s&&n()};try{var i=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),r(a)}})),!1).processEvent;i&&(e.processEvent=i),s=!0}catch(o){Ze.error(Ml+t.id,o),r(!1)}if(s&&e.loaded)try{n()}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 n of t)this.setupSiteApp(n)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var n=this.globalsForEvent(t),s=function(i){try{e.xl((()=>i.processEvent==null?void 0:i.processEvent(n)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+i.id,o)}};for(var r of Object.values(this.apps))s(r)}}onRemoteConfig(t){var e,n,s,r=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((n=this.yl)==null||n.call(this),t.ok){var i=t.config;if((s=i.siteApps)!=null&&s.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=r._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(r._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of i.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},Ff={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,n,s=this.Il();s?(k(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),k(this.Tl)&&(this.Tl=(n=$.__PosthogExtensions__)==null||(n=n.tracingHeadersPatchFns)==null?void 0:n._patchFetch(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,n;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(n=$.__PosthogExtensions__)==null||n.loadExternalDependency==null||n.loadExternalDependency(this._instance,"tracing-headers",(s=>{if(s)return ff.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 O(t)?(O(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(O(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},Pf=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 n=O(e);this.Rl=n?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],n=0;nlocalStorage.removeItem(r)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ol);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(!k(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var n=t.generateSurveys;if(n)return void this.Dl(n,e);var s=t.loadExternalDependency;if(!s)return void this.$l(qo);s(this._instance,"surveys",(r=>{r||!t.generateSurveys?this.$l("Could not load surveys script",r):this.Dl(t.generateSurveys,e)}))}catch(r){throw this.$l("Error initializing surveys",r),r}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new yf(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(Ol),t([]);var n,s=this._instance.get_property(Ji);if(s&&!e)return t(s,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((r=>t(r.surveys,r.context))):(typeof Promise<"u"&&(this.Ll=new Promise((r=>{n=r}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:r=>{var i;this.Ll=null;var o=r.statusCode;if(o!==200||!r.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):r.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(n==null||n({surveys:[],context:l}))}this.Ol=null;var u,c=r.json.surveys||[],d=c.filter((p=>(function(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)),(i=this._instance.persistence)==null||i.register({[Ji]:c,[rr]:Date.now()});var h={isLoaded:!0};t(c,h),n?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(rr);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var n,s={id:t,current_iteration:(n=e?.iteration)!==null&&n!==void 0?n:null};od(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(n){q.error("Error in survey callback",n)}}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((n=>{var s;e=(s=n.find((r=>r.id===t)))!==null&&s!==void 0?s:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:Ts};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:Ts};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:Ts};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:Ts})):new Promise((n=>{this.getSurveys((s=>{var r,i=(r=s.find((a=>a.id===t)))!==null&&r!==void 0?r:null;if(i){var o=this.zl(i);n({visible:o.eligible,disabledReason:o.reason})}else n({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,n){var s;if(D(this._surveyManager))q.warn("init was not called");else{var r=typeof t=="string"?this.Hl(t):t;if(r!=null&&r.id)if(ef.includes(r.type)){var i=C?.querySelector(e);if(i)return(s=r.appearance)!=null&&s.surveyPopupDelaySeconds?(q.info("Rendering survey "+r.id+" with delay of "+r.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+r.id+" with delay of "+((o=r.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(r,i,n),q.info("Survey "+r.id+" rendered")}),1e3*r.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(r,i,n);q.warn("Survey element not found")}else q.warn("Surveys of type "+r.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var n;if(D(this._surveyManager))q.warn("init was not called");else{var s=this.Hl(t);if(s){var r=s;if((n=s.appearance)!=null&&n.surveyPopupDelaySeconds&&e.ignoreDelay&&(r=w({},s,{appearance:w({},s.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 i=this.Ul(s);if(!i.eligible)return void q.warn("Survey is not eligible to be displayed: ",i.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(r,e):this.renderSurvey(r,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()}}},Nr),Af={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,n){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),no(this.instance.config)||!v||!C)return!1;t=t??v.location,n=n??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var s,r=wf||hr(t.hash,"__posthog")||hr(t.hash,"state"),i=r?el((()=>JSON.parse(atob(decodeURIComponent(r)))))||el((()=>JSON.parse(decodeURIComponent(r)))):null;return i&&i.action==="ph_authorize"?((s=i).source="url",s&&Object.keys(s).length>0&&(i.desiredHash?t.hash=i.desiredHash:n?n.replaceState(n.state,"",t.pathname+t.search):t.hash="")):((s=JSON.parse(e.getItem(Ll)||"{}")).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(bu));if(!v||e)return!1;var n=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,s=w({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},n?{instrument:!1}:{});if(v.localStorage.setItem(Ll,JSON.stringify(w({},s,{source:void 0}))),this.Vl()===2)this.Zl(s);else if(this.Vl()===0){var r;this.Wl(1),(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"toolbar",(i=>{if(i)return Dl.error("[Toolbar] Failed to load",i),void this.Wl(0);this.Wl(2),this.Zl(s)})),re(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(s)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,n){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),n===void 0&&(n=void 0),this.maybeLoadToolbar(t,e,n)}}},$f=w({experiments:ye},Nr),Rf={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||no(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!k(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var n=t.loadExternalDependency;if(!n)return void this.eu(qo);n(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":no(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":k(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,n){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.sendMessage(t,e,n):(Ue.warn(Dt),null)}))()}getMessages(t,e){var n=this;return X((function*(){return n._conversationsManager?n._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()}}},Tf={logs:class{constructor(t){var e,n=this;this.iu=!1,this.ru=!1,this.rt=ne("[logs]"),this.nu=w({},this.rt,{error(){for(var s=arguments.length,r=new Array(s),i=0;s>i;i++)r[i]=arguments[i];r.some(Vl)||n.rt.error(...r)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var s,r;this.Sa=0,(s=this.ou)==null||s.onReconnect(),(r=this.lu)==null||r.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&re(v,"online",this.au)}uu(t,e,n,s){var r,i=(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=k(_)?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}})((r=this._instance)==null||(r=r.config)==null?void 0:r.logs,n);return[new Oh(this.hu(t,e),i,this.nu,(()=>this.du()),(o=>o()),void 0,s),i]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var n;(n=this.ou)==null||n.reset(),this.cu=e;var s=this.uu((()=>this.tr),(r=>{this.tr=r}));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 n;(n=this.lu)==null||n.reset(),this.gu=e;var s=this.uu((()=>this.su),(r=>{this.su=r}),{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 n=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(n)&&n&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){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",(n=>{var s;n||(s=t.logs)==null||!s.initializeLogs?this.rt.error("Could not load logs script",n):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(qo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var n=this._instance;return{get isDisabled(){return!1},get optedOut(){return!n.is_capturing()},getPersistedProperty:s=>s===ut.LogsQueue?t():void 0,setPersistedProperty(s,r){var i;s===ut.LogsQueue&&e((i=r)!==null&&i!==void 0?i:[])},Ot:s=>this.Ot(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Tu(this.Sa,3))e({kind:"fatal",error:ki(void 0,"logs endpoint is unreachable, dropping batch")});else{var n=!1,s=i=>{n||(n=!0,clearTimeout(r),e(i))},r=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),s({kind:"retry-later",error:ki(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:i=>{var o=i.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?(i.error||this.rt.warn("Logs request failed before receiving an HTTP response"),s({kind:"retry-later",error:ki(i.error,"logs request failed before receiving an HTTP response")})):s({kind:"retry-later",error:(a=i.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Nu(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,n,s,r){if(e.length!==0){var i=e.map((a=>a.record));r([]);var o=ru(i,su(n,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 n=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),s=n.windowId,r=n.sessionStartTimestamp,i=n.lastActivityTimestamp;e.sessionId=n.sessionId,e.windowId=s,D(r)||(e.sessionStartTimestamp=r),D(i)||(e.lastActivityTimestamp=i)}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}}},Nf={metrics:class{constructor(t){this.rt=ne("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,n=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===n||((e=this.ou)==null||e.reset(),this.cu=n,this.ou=new Lh(this.hu(),(function(s){var r,i,o,a,l,u=s?.resourceAttributes;return{serviceName:(r=u?.["service.name"])!==null&&r!==void 0?r:s?.serviceName,serviceVersion:(i=u?.["service.version"])!==null&&i!==void 0?i: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}})(n),this.rt)),this.ou}count(t,e,n){e===void 0&&(e=1),this.vu().count(t,e,n)}gauge(t,e,n){this.vu().gauge(t,e,n)}histogram(t,e,n){this.vu().histogram(t,e,n)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((n=>this.rt.error("PostHog metrics flush failed:",n)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:n=>e.Jt(n),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((n=>{var s=!1,r=o=>{s||(s=!0,clearTimeout(i),n(o))},i=setTimeout((()=>r({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)r({kind:"ok"});else if(a===413)r({kind:"too-large"});else if(a!==0&&a!==429&&500>a)r({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;r({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Mf=w({},Nr,Sf,xf,kf,If,Cf,Pf,Ff,Af,$f,Rf,Tf,Nf);Te.__defaultExtensionClasses=w({},Mf);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Zn[an]=new Te;return(function(){function e(){e.done||(e.done=!0,ld=!1,Z(Zn,(function(n){n._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():re(C,"DOMContentLoaded",e,{capture:!1}):v&&I.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const ud="CodeFile",dd="GeneratedCode",Of={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 Lf(t={},e=0){const n=fo(t.artifactType||t.type||ud),s=fo(t.artifactName||t.name||t.fileName||`${dd}-${e+1}`);return`${n||"artifact"}-${s||e+1}`}function hd(t={},e=0){const n=kt(t),s=n.artifactType||n.type||ud,r=n.artifactName||n.name||dd;let i=n.fileName||r;return i.endsWith(".dart")||(i+=".dart"),{id:fo(n.id)||Lf({...n,artifactType:s,artifactName:r,fileName:i},e),artifactType:s,artifactName:r,fileName:i,deployPath:n.deployPath||"",description:n.description||"",code:n.code||n.content||"",dependencies:pd(n.dependencies),imports:Array.isArray(n.imports)?n.imports:[],publicApi:Array.isArray(n.publicApi)?n.publicApi:[],relationships:fd(n.relationships),deployStatus:n.deployStatus||"pending",review:n.review||null,metadata:kt(n.metadata),codeType:n.codeType||Of[s]||"O"}}function pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const n=kt(e),s=n.name||n.package;return s?{name:s,version:n.version||null,versionRequired:!!(n.versionRequired||n.required),inferred:!!n.inferred,...n.reason?{reason:n.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,n])=>({name:e,version:n||null,inferred:!1})):[]}function fd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const n=kt(e);return!n.from&&!n.to?null:{from:n.from||null,to:n.to||null,type:n.type||"uses",description:n.description||""}}).filter(Boolean):[]}function go(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const n=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!n)return null;try{return JSON.parse(n[1].trim())}catch{return null}}}function as(t,e={}){const n=[],s=typeof t=="string"?go(t):t,i=kt(s||{});!s&&typeof t=="string"&&n.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(i.artifacts)?i.artifacts:[{artifactType:i.artifactType||e.artifactType,artifactName:i.artifactName||e.artifactName,fileName:i.fileName||e.fileName,description:i.description,code:i.code||e.code||(typeof t=="string"?t:""),dependencies:i.dependencies||e.dependencies,relationships:i.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&n.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>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(i.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:i.schemaVersion||e.schemaVersion||null,id:i.id||e.id||"bundle-current",title:i.title||i.name||e.title||"Generated artifact bundle",description:i.description||e.description||"",artifacts:a,dependencies:pd(i.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(i.deployOrder)?i.deployOrder.map(u):a.map(d=>d.id),warnings:[...n,...Array.isArray(i.warnings)?i.warnings:[]],metadata:kt(i.metadata)}}function vr(t){return as(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 wn(t){return JSON.stringify(t,null,2)}function Df(t){return wn({task:"architect",userRequest:String(t??"")})}function Bf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?wn(e):wn({task:"generate_bundle",bundleSpec:e})}function jf(t){return wn({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 n={stage:t};return e!=null&&(n.bundle=yt(e)),n}function Uf({bundleSpec:t,artifactBundle:e,bundleReview:n,artifactId:s,userFeedback:r}){return wn({task:"regenerate_artifact",artifactId:s,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),userFeedback:String(r)})}function gd({bundleSpec:t,artifactBundle:e,bundleReview:n,userFeedback:s}){return wn({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(n),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"},Hf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Oe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Wf(t){return Oe(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Oe(t.filterSummary)||Oe(t.filterResults):!1}function md(t,e=0){if(!Oe(t)||e>3)return null;if(Wf(t))return t;for(const n of Hf){const s=t[n];if(Oe(s)){const r=md(s,e+1);if(r)return r}}return null}function _r(t){return Array.isArray(t)?t.some(_r):Oe(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(_r):!1}function mo(t){return Array.isArray(t)?t.some(mo):Oe(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(mo):!1}function vd(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function zf(t,e){if(Oe(t))for(const[n,s]of Object.entries(t)){if(!Oe(s))continue;const r=Oe(s.categories)?s.categories:{},i=Object.entries(r).filter(([,o])=>Oe(o)&&o.matched===!0).map(([o])=>o);i.length>0?i.forEach(o=>e.add(o)):s.matched===!0&&e.add(vd(n))}}function qf(t,e){if(!t)return;const n=Array.isArray(t)?t.flatMap(s=>Oe(s)?Object.entries(s):[]):Object.entries(t);for(const[s,r]of n){if(!_r(r))continue;const i=vd(s),o=r?.raiFilterResult?.raiFilterTypeResults||(i==="rai"?r?.raiFilterTypeResults:null),a=Oe(o)?Object.entries(o).filter(([,l])=>_r(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(i)}}function Vf(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 Gf(t){const e=md(t);if(!e)return null;const n=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);zf(e.filterSummary,n),qf(e.filterResults,n);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||n.size>0,r=e.invocationResult||null,i=mo(e.filterSummary||e.filterResults);return!s&&!i&&!["PARTIAL","FAILURE"].includes(r)?null:{kind:s?"blocked":"unavailable",invocationResult:r,matchedFilters:[...n]}}function Kf(t,e){const n=Gf(t);if(!n)return null;const s=[...new Set(n.matchedFilters.map(Vf))],r=n.kind==="blocked",i=new Error(r?`Safety screening blocked this pipeline step for ${Kl(s)}.`:"Safety screening could not be completed. Please try again.");return i.name="ModelArmorError",i.code=r?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",i.isModelArmor=!0,i.pipelineStep=e,i.userTitle=r?"Request blocked for safety":"Safety check unavailable",i.userMessage=r?`The safety check detected ${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.",i.retryExplanation=r?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",i.matchedFilters=n.matchedFilters,i}function Jf(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/,n=[];for(const s of Jf(t).split(` `)){if(!/^[A-Za-z_$]/.test(s)||e.test(s))continue;const r=s.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);r&&n.push(r[1])}return n}function ea(t,e){const n=t.replace(/\.dart$/,"");if(e==="W")return n.replace(/(^|_)(\w)/g,(s,r,i)=>i.toUpperCase());if(e==="A"){const s=n.replace(/(^|_)(\w)/g,(r,i,o)=>o.toUpperCase());return s.charAt(0).toLowerCase()+s.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:n}async function Yl(t){const e=new TextEncoder().encode(String(t||"")),n=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(n),s=>s.toString(16).padStart(2,"0")).join("")}async function Yf(t,e=new Map){const n={},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)),n[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>s.add(p))}}const r=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),i={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(s).filter(o=>!r.has(o))};return{fileMapContents:JSON.stringify(n),functionsMapContents:JSON.stringify(i)}}const Zf=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/"},Xf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Qf=["Struct","Record"],eg=[{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=>Ii(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=>Ii(t).some(e=>{const n=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let s;for(;(s=n.exec(e))!==null;){const r=s[1];if(!(new RegExp(`this\\.${r}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${r}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { const W({required this.value}); @@ -32,7 +32,7 @@ class _S extends State { @override Widget build(BuildContext c) => Padding(pa ${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),...r.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};r.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=Eg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:i,errors:h}}function xg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function kg(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 Ig(t,e){const s=[kg(t),xg(e.content),e.artifactName].find(r=>/^[A-Z][A-Za-z0-9_]*$/.test(String(r||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function Cg(t,e=new Map){const n=[];for(const[s,r]of t.entries())r.type!=="C"||e.has(r.path)||n.push({artifactId:r.artifactId||s,className:Ig(s,r),content:r.content,fileName:s,path:r.path});return n}function Fg(t,e){const n=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!n.has(s.path)))}const rc={pass:0,warning:1,fail:2},Pg=["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 n=e.filter(s=>typeof s=="string").join(` -`);if(n)return n}}return""}function tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Ag(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return n;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 ra(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,n)=>rc[n]>rc[e]?n:e,"pass")}function bd(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const s=De(t),r=gt(s.message,s.title,s.issue,s.description,s.summary);return r?{severity:ra(s.severity||s.status||s.level)||e,message:r,suggestion:gt(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||n}:null}function _o(t,e="review"){const n=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,i])=>tt(n[r]).map(o=>bd(o,i,e)).filter(Boolean))}function $g(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const s=De(t),r=gt(s.title,s.action,s.step,s.message,s.name,s.description);return r?{id:s.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:gt(s.detail,s.instructions,s.description),location:gt(s.location,s.flutterFlowPath,s.path),timing:gt(s.timing,s.phase)||"unspecified",artifactId:n,source:gt(s.source)||"Code Review"}:null}function yo(t,e=null){const n=De(t);return Pg.flatMap(s=>tt(n[s])).map((s,r)=>$g(s,r,e)).filter(Boolean)}function Rg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=De(e);typeof n.content=="string"&&(e=go(n.content)||e);const s=De(e),r=De(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(r).length?r:s}}function Tg(t,e){const n=[e.id,e.fileName,e.artifactName].map(We);return t.find(s=>{const r=De(s);return[r.id,r.fileName,r.artifactName,r.name].map(We).some(i=>i&&n.includes(i))})||null}function Ng(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(r=>We(r?.artifactId)===We(e.id)||We(r?.fileName)===We(e.fileName))?.pathHint||""}function Mg(t,e){return tt(t?.relationships).filter(n=>We(n?.from)===We(e.id)||We(n?.to)===We(e.id))}function Lg(t,e){return tt(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||We(n.artifactId)===We(e.id)).map(n=>bd(n,"warning","Compatibility check")).filter(Boolean)}function Og(t,e,n,s){const r=Tg(e,n),i=De(r?.review||r||n.review),o=Object.keys(i).length>0,a=[..._o(i),...Lg(t,n)],l=yo(i,n.id),u=ra(i.status||i.verdict||i.outcome||i.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...n,index:s,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:Ng(t,n),relationships:Mg(t,n)}}function Dg({status:t,score:e,artifactPresentations:n,manualSteps:s}){const r=n.length;if(r===0&&s.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Bg({bundle:t,reviewResult:e}){const n=De(t),s=tt(n.artifacts),{root:r,rawText:i}=Rg(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(De).find(w=>Object.keys(w).length)||{},a=tt(r.artifacts||r.files||r.reviews),l=s.map((w,I)=>Og(n,a,w,I)),u=_o(r),d=[..._o(o),...u],h=[...yo(o),...yo(r),...l.flatMap(w=>w.manualSteps)].filter((w,I,F)=>F.findIndex(P=>P.title===w.title&&P.artifactId===w.artifactId)===I),p=ra(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),f=vo(p,...d.map(w=>w.severity),...l.map(w=>w.status)),g=o.score??r.score??r.overallScore??i,m=Ag(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,i)||Dg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((w,I)=>(w[I.status]+=1,w),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(w=>w.reviewComplete).length,total:l.length},deployOrder:tt(n.deployOrder),relationships:tt(n.relationships),warnings:tt(n.warnings),compatibility:De(n.metadata?.compatibility)}}const jg=/^\uFEFF/;function Dn(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` +`);if(n)return n}}return""}function tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Ag(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const n=Number(e);if(Number.isFinite(n))return n;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 ra(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,n)=>rc[n]>rc[e]?n:e,"pass")}function bd(t,e="warning",n="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:n};const s=De(t),r=gt(s.message,s.title,s.issue,s.description,s.summary);return r?{severity:ra(s.severity||s.status||s.level)||e,message:r,suggestion:gt(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||n}:null}function _o(t,e="review"){const n=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([r,i])=>tt(n[r]).map(o=>bd(o,i,e)).filter(Boolean))}function $g(t,e,n=null){if(typeof t=="string")return{id:`${n||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:n,source:"Code Review"};const s=De(t),r=gt(s.title,s.action,s.step,s.message,s.name,s.description);return r?{id:s.id||`${n||"bundle"}-manual-${e+1}`,title:r,detail:gt(s.detail,s.instructions,s.description),location:gt(s.location,s.flutterFlowPath,s.path),timing:gt(s.timing,s.phase)||"unspecified",artifactId:n,source:gt(s.source)||"Code Review"}:null}function yo(t,e=null){const n=De(t);return Pg.flatMap(s=>tt(n[s])).map((s,r)=>$g(s,r,e)).filter(Boolean)}function Rg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const n=De(e);typeof n.content=="string"&&(e=go(n.content)||e);const s=De(e),r=De(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(r).length?r:s}}function Tg(t,e){const n=[e.id,e.fileName,e.artifactName].map(We);return t.find(s=>{const r=De(s);return[r.id,r.fileName,r.artifactName,r.name].map(We).some(i=>i&&n.includes(i))})||null}function Ng(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(r=>We(r?.artifactId)===We(e.id)||We(r?.fileName)===We(e.fileName))?.pathHint||""}function Mg(t,e){return tt(t?.relationships).filter(n=>We(n?.from)===We(e.id)||We(n?.to)===We(e.id))}function Og(t,e){return tt(t?.metadata?.compatibility?.findings).filter(n=>!n?.artifactId||We(n.artifactId)===We(e.id)).map(n=>bd(n,"warning","Compatibility check")).filter(Boolean)}function Lg(t,e,n,s){const r=Tg(e,n),i=De(r?.review||r||n.review),o=Object.keys(i).length>0,a=[..._o(i),...Og(t,n)],l=yo(i,n.id),u=ra(i.status||i.verdict||i.outcome||i.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...n,index:s,status:d,statusReason:o?gt(i.summary,i.overview,i.assessment,i.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof i.fixedSource=="string"&&i.fixedSource.trim()?i.fixedSource.trim():null,pathHint:Ng(t,n),relationships:Mg(t,n)}}function Dg({status:t,score:e,artifactPresentations:n,manualSteps:s}){const r=n.length;if(r===0&&s.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const i=n.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),r&&o.push(`${r} artifact${r===1?"":"s"}: ${i.pass} pass, ${i.warning} warn, ${i.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 Bg({bundle:t,reviewResult:e}){const n=De(t),s=tt(n.artifacts),{root:r,rawText:i}=Rg(e),o=[r.bundleReview,r.overallReview,r.overall,r.bundleSummary,r.summaryReview,r.review].map(De).find(b=>Object.keys(b).length)||{},a=tt(r.artifacts||r.files||r.reviews),l=s.map((b,x)=>Lg(n,a,b,x)),u=_o(r),d=[..._o(o),...u],h=[...yo(o),...yo(r),...l.flatMap(b=>b.manualSteps)].filter((b,x,F)=>F.findIndex(P=>P.title===b.title&&P.artifactId===b.artifactId)===x),p=ra(o.status||o.verdict||o.overallStatus||r.status||r.verdict||r.overallStatus||r.outcome),f=vo(p,...d.map(b=>b.severity),...l.map(b=>b.status)),g=o.score??r.score??r.overallScore??i,m=Ag(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,r.overallSummary,r.headline,r.summary,r.executiveSummary,r.overview,r.assessment,r.conclusion,i)||Dg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((b,x)=>(b[x.status]+=1,b),{pass:0,warning:0,fail:0});return{title:n.title||"Generated artifact bundle",description:n.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:tt(n.deployOrder),relationships:tt(n.relationships),warnings:tt(n.warnings),compatibility:De(n.metadata?.compatibility)}}const jg=/^\uFEFF/;function Dn(t){let e=0,n=t.length;for(;ee&&!t[n-1].trim();)n--;return t.slice(e,n).join(` `)}function Ug(t){const e=String(t??"").replace(jg,"");if(!e.trim())return"";const n=e.split(` `),s=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let r=0,i=-1;const o=[];{let c=0;for(let d=0;d=0&&(r++,i<0&&(i=d),o.push(c+h)),c+=n[d].length+1}}if(r===0)return Dn(n);{const c=wo(e);if(!c.error&&o.every(h=>oc(h,c.commentAndStringRanges)))return Dn(n)}if(r===1){const c=Dn(n.slice(0,i)),d=Dn(n.slice(i+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;c{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&n.push({start:c.startIndex,end:t.length})};for(;r0?t[r-1]:"",f=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!qg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:r,openedLine:s}),r+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:s}),r++;continue}if(zg[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${s}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${s}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}i(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function Vg(t){return wo(String(t??"")).error}function oc(t,e){return e.some(({start:n,end:s})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const Gg=/^dependencies\s*:\s*(?:#.*)?$/,Kg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function fs(t){const e=t.match(Kg);return e?e[1]??e[2]??e[3]:null}function gs(t){const e=t.trim();return e===""||e.startsWith("#")}function kn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const n=t.findIndex(i=>e.test(i));if(n===-1)return null;let s=n,r=null;for(let i=n+1;i0?t[r-1]:"",f=r>1?t[r-2]:"",g=(p==="r"||p==="R")&&!qg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:r,openedLine:s}),r+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:s}),r++;continue}if(zg[c]){if(d.interpolation&&c==="}"){e.pop(),r++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),r++;continue}return d.opener?(a(),{error:o??`line ${s}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:n}):(a(),{error:o??`line ${s}: unexpected "${c}" with no matching opener`,commentAndStringRanges:n})}i(c,t[r+1]),r++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:n}}function Vg(t){return wo(String(t??"")).error}function oc(t,e){return e.some(({start:n,end:s})=>t>=n&&ttypeof n=="string"?n:n?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const Gg=/^dependencies\s*:\s*(?:#.*)?$/,Kg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function fs(t){const e=t.match(Kg);return e?e[1]??e[2]??e[3]:null}function gs(t){const e=t.trim();return e===""||e.startsWith("#")}function kn(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const n=t.findIndex(i=>e.test(i));if(n===-1)return null;let s=n,r=null;for(let i=n+1;i=0.0.0"}`}function Zg(t,e={}){const n=String(t||""),s=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(s.length===0)return{yaml:n,added:[],alreadyPresent:[]};const r=n.split(` `),i=new Set(Cd(n)),o=[],a=[];for(const[u,c]of s)i.has(u)?a.push(u):(o.push([u,c]),i.add(u));if(o.length===0)return{yaml:n,added:[],alreadyPresent:a};const l=oa(r);if(l){const u=o.map(([c,d])=>ac(l.childIndent,c,d));r.splice(l.endIndex,0,...u)}else r.length>0&&r[r.length-1].trim()!==""&&r.push(""),r.push("dependencies:"),o.forEach(([u,c])=>{r.push(ac(" ",u,c))});return{yaml:r.join(` `),added:o.map(([u])=>u),alreadyPresent:a}}function Xg(t,e={}){const n=String(t||""),s=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(s.length===0)return{yaml:n,overridden:[],skipped:[]};const r=n.split(` -`),i=Lr(n),o=[],a=[];for(const[l,u]of s){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(kn(r[c.lineIndex]));r[c.lineIndex]=`${d}${l}: ${Pd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(` +`),i=Or(n),o=[],a=[];for(const[l,u]of s){const c=i.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(kn(r[c.lineIndex]));r[c.lineIndex]=`${d}${l}: ${Pd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:r.join(` `),overridden:o,skipped:a}}function Ad(t){const e=String(t||""),n=[];return e.trim()?(/^name:\s*\S+/m.test(e)||n.push("pubspec.yaml missing name field"),oa(e.split(` -`))||n.push("pubspec.yaml missing dependencies section"),Cd(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const Qg=">=3.0.0 <4.0.0";function bo(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function em(t=""){const e=wd(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function lc(t,e,n){const s=[];for(const[r,i]of t){if(i.isScalar){e[r]=bo(i.constraint);continue}if(i.sourceKey==="sdk"){n.add(r);continue}if(i.sourceKey==="version"){e[r]=bo(i.sourceValue);continue}s.push(r)}return s}function tm(t){const e=new Set,n={},s={},r=lc(Lr(t),n,e),i=lc(Jg(t,"dependency_overrides"),s,e),o=[...r,...i],a=new Set([...Object.keys(n),...e]),{sdk:l}=Fd(t);return{sdkConstraint:bo(l)||Qg,dependencies:n,overrides:s,sdkPackages:[...e].sort(),availablePackages:a,unrepresentable:o,unrepresentableOverrides:i}}function nm(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function sm(t,e){const{sdkConstraint:n,dependencies:s,overrides:r,sdkPackages:i,availablePackages:o,unrepresentable:a,unrepresentableOverrides:l}=tm(e),u={sdkConstraint:n,dependencies:s,overrides:r,sdkPackages:i},c=[],d=[];for(const h of t){const{className:p,content:f}=h,g=sa(f),m=g.filter(w=>a.includes(w));if(m.length>0){d.push({className:p,reason:`${p} was not compiled before deploying: it imports ${m.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}if(l.length>0&&wd(f).some(w=>w.startsWith("package:"))){d.push({className:p,reason:`${p} was not compiled before deploying: your project's dependency_overrides redirects ${l.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=em(f),E=g.filter(w=>!o.has(w));if(_.length>0||E.length>0){d.push({className:p,reason:nm(p,_,E)});continue}c.push({fileName:`${na(p)}.dart`,content:f})}return{manifest:u,sources:c,skipped:d}}function cc(t,e){const n=`${t}${e}`.split(` -`),s=n.pop()??"",r=[];for(const i of n){const o=$d(i);o&&r.push(o)}return{events:r,buffer:s}}function rm(t){const e=$d(t);return e?[e]:[]}function $d(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function im(t,e={}){const{onPhase:n,onLog:s}=e;let r=null,i="";const o=a=>{if(a.event==="phase"){a.message&&n&&n(a.message);return}if(a.event==="log"){a.message&&s&&s(a.message);return}r=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=cc(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=cc("",await t.text());i=a.buffer,a.events.forEach(o)}return rm(i).forEach(o),r?{...r,success:r.success===!0||r.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 om=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(om);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function am(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function cm(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:cm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},s=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,i;for(;(i=s.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function uc(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.min!==null){const s=yr(e,n.min);if(s<0||s===0&&!n.minInclusive)return!1}if(n.max!==null){const s=yr(e,n.max);if(s>0||s===0&&!n.maxInclusive)return!1}return!0}function um(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.max===null)return!0;const s=yr(n.max,e);return s>0?!0:s===0&&n.maxInclusive}function rn(t){const e=aa(t);return e?e.min:null}const dm="https://pub.dev/api/packages/",hm=8e3;function pm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of r){const a=o?.version;if(!a||o.retracted||lm(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!uc(l.sdk,n)||s&&l.flutter&&!uc(l.flutter,s)||(!i||yr(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function fm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null,fetchImpl:r=fetch}=e;let i;try{const a=await r(`${dm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(hm)});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}"`};i=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=pm(i,{dartSdkFloor:n,flutterSdkFloor:s});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function gm(t,e={}){const n=await Promise.all(t.map(s=>fm(s,e)));return new Map(n.map(({name:s,...r})=>[s,r]))}async function mm(t,e={},n={}){const{resolveVersions:s=gm}=n,r=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=Fd(t),o={dartSdkFloor:rn(i.sdk),flutterSdkFloor:rn(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Lr(t),u=[];for(const[c,d]of r){const h=l.get(c);if(!h){u.push(c);continue}const p=rn(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(um(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(rn(p)){a.additions[d]=`^${rn(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${rn(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 vm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>vm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function _m(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const s=t?.message||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function ym(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📄"}function wm(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📝"}function bm(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 bn(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function dc(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 Rd(t,e="dart",n=globalThis.hljs){if(!t)return"";const s=bn(t);try{return n.highlight(s,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(s,{language:"json"}).value}catch{return bt(s)}}}function Or(t,e={}){const{highlighter:n=globalThis.hljs}=e;let s='
    ';const r=String(t??"").split(` +`))||n.push("pubspec.yaml missing dependencies section"),Cd(e).includes("flutter")||n.push("pubspec.yaml missing Flutter SDK dependency"),{valid:n.length===0,errors:n}):(n.push("pubspec.yaml is empty"),{valid:!1,errors:n})}const Qg=">=3.0.0 <4.0.0";function bo(t){const e=String(t||"").trim(),n=e[0];return n!=="'"&&n!=='"'||e[e.length-1]!==n?e:e.slice(1,-1).replaceAll(`${n}${n}`,n)}function em(t=""){const e=wd(t).filter(n=>!n.startsWith("dart:")&&!n.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function lc(t,e,n){const s=[];for(const[r,i]of t){if(i.isScalar){e[r]=bo(i.constraint);continue}if(i.sourceKey==="sdk"){n.add(r);continue}if(i.sourceKey==="version"){e[r]=bo(i.sourceValue);continue}s.push(r)}return s}function tm(t){const e=new Set,n=new Set,s={},r={},i=lc(Or(t),s,e),o=lc(Jg(t,"dependency_overrides"),r,n),a=[...i,...o],l=new Set([...Object.keys(s),...e]),{sdk:u}=Fd(t);return{sdkConstraint:bo(u)||Qg,dependencies:s,dependencyOverrides:r,sdkPackages:[...e].sort(),sdkOverrides:[...n].sort(),availablePackages:l,unrepresentable:a,unrepresentableOverrides:o}}function nm(t,e,n){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${n.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function sm(t,e){const{sdkConstraint:n,dependencies:s,dependencyOverrides:r,sdkPackages:i,sdkOverrides:o,availablePackages:a,unrepresentable:l,unrepresentableOverrides:u}=tm(e),c={sdkConstraint:n,dependencies:s,dependencyOverrides:r,sdkPackages:i,sdkOverrides:o},d=[],h=[];for(const p of t){const{className:f,content:g}=p,m=sa(g),_=m.filter(x=>l.includes(x));if(_.length>0){h.push({className:f,reason:`${f} was not compiled before deploying: it imports ${_.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}if(u.length>0&&wd(g).some(x=>x.startsWith("package:"))){h.push({className:f,reason:`${f} was not compiled before deploying: your project's dependency_overrides redirects ${u.join(", ")} to a source that cannot be reproduced outside it, and an override changes what every package depending on it resolves to - including packages this class reaches transitively - so package resolution could not be matched exactly.`});continue}const{unresolvableImports:E}=em(g),b=m.filter(x=>!a.has(x));if(E.length>0||b.length>0){h.push({className:f,reason:nm(f,E,b)});continue}d.push({fileName:`${na(f)}.dart`,content:g})}return{manifest:c,sources:d,skipped:h}}function cc(t,e){const n=`${t}${e}`.split(` +`),s=n.pop()??"",r=[];for(const i of n){const o=$d(i);o&&r.push(o)}return{events:r,buffer:s}}function rm(t){const e=$d(t);return e?[e]:[]}function $d(t){const e=t.trim();if(!e)return null;try{const n=JSON.parse(e);return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function im(t,e={}){const{onPhase:n,onLog:s}=e;let r=null,i="";const o=a=>{if(a.event==="phase"){a.message&&n&&n(a.message);return}if(a.event==="log"){a.message&&s&&s(a.message);return}r=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=cc(i,l.decode(c,{stream:!0}));i=d.buffer,d.events.forEach(o)}}else{const a=cc("",await t.text());i=a.buffer,a.events.forEach(o)}return rm(i).forEach(o),r?{...r,success:r.success===!0||r.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 om=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(om);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function am(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let n=0;n0)}function cm(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:cm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const n={min:null,minInclusive:!1,max:null,maxInclusive:!1},s=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let r=!1,i;for(;(i=s.exec(e))!==null;){const[,o,a]=i;if(!wt(a))return null;r=!0,o===">="||o===">"?(n.min=a,n.minInclusive=o===">="):(n.max=a,n.maxInclusive=o==="<=")}return r?n:null}function uc(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.min!==null){const s=yr(e,n.min);if(s<0||s===0&&!n.minInclusive)return!1}if(n.max!==null){const s=yr(e,n.max);if(s>0||s===0&&!n.maxInclusive)return!1}return!0}function um(t,e){const n=aa(t);if(!n||!wt(e))return!1;if(n.max===null)return!0;const s=yr(n.max,e);return s>0?!0:s===0&&n.maxInclusive}function rn(t){const e=aa(t);return e?e.min:null}const dm="https://pub.dev/api/packages/",hm=8e3;function pm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null}=e,r=Array.isArray(t?.versions)?t.versions:[];let i=null;for(const o of r){const a=o?.version;if(!a||o.retracted||lm(a))continue;const l=o.pubspec?.environment||{};n&&l.sdk&&!uc(l.sdk,n)||s&&l.flutter&&!uc(l.flutter,s)||(!i||yr(a,i)>0)&&(i=a)}return i?{version:i,constraint:`^${i}`}:null}async function fm(t,e={}){const{dartSdkFloor:n=null,flutterSdkFloor:s=null,fetchImpl:r=fetch}=e;let i;try{const a=await r(`${dm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(hm)});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}"`};i=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=pm(i,{dartSdkFloor:n,flutterSdkFloor:s});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:n?`no published "${t}" release supports Dart ${n}`:`no published "${t}" release could be read`}}async function gm(t,e={}){const n=await Promise.all(t.map(s=>fm(s,e)));return new Map(n.map(({name:s,...r})=>[s,r]))}async function mm(t,e={},n={}){const{resolveVersions:s=gm}=n,r=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=Fd(t),o={dartSdkFloor:rn(i.sdk),flutterSdkFloor:rn(i.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(r.length===0)return a;const l=Or(t),u=[];for(const[c,d]of r){const h=l.get(c);if(!h){u.push(c);continue}const p=rn(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(um(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(rn(p)){a.additions[d]=`^${rn(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${rn(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 vm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>vm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function _m(t,e={}){const n=t?.pipelineStep;if(n!=null&&e[n]!=null)return e[n];const s=t?.message||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function ym(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📄"}function wm(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[n,s]of Object.entries(e))if(t.toLowerCase().includes(n.toLowerCase()))return s;return"📝"}function bm(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 bn(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,n=t.match(e);return n?n[1].trim():t.trim()}function dc(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 Rd(t,e="dart",n=globalThis.hljs){if(!t)return"";const s=bn(t);try{return n.highlight(s,{language:e}).value}catch(r){console.warn("Syntax highlighting failed:",r);try{return n.highlight(s,{language:"json"}).value}catch{return bt(s)}}}function Lr(t,e={}){const{highlighter:n=globalThis.hljs}=e;let s='
    ';const r=String(t??"").split(` `);let i=!1,o="";for(const a of r){if(a.startsWith("```")){if(i){const l=bm(o),u=Rd(o.trim(),l,n);s+=`
    ${u}
    `,o="",i=!1}else i=!0;continue}if(i){o+=a+` @@ -76,12 +76,12 @@ ${d}`,{commentAndStringRanges:g}=wo(f),m=p.length+1+h;if(oc(m,g)){l.push(d);cont
    ${s}
    - `}const Em="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Td={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},wr="ccc_auth_session",hc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function En(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=En({isResolved:!0});const Sm=`${Je}/service/runpipeline`,xm="bs_user_id",km="bs_identity_token",Im=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const br={free:2,professional:50,power:2e3},Er="ccc_subscription",pc=3,Cm=new Set(["active","trialing","paid"]),cs="google/gemini-3.7-flash",Ws=["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"],Fm={"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 Fm[t]||t}const Pm=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 Nd(t){return Pm.has(t)}const Eo=4,Ci=8*1024*1024,Am="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function $m(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function Rm(t){const e=new FormData;return e.append("file",t),(await fetch(Am,{method:"POST",body:e})).json()}function Tm(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const s=e[n];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 Nm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const n=e.filter(l=>l.size>Ci);n.length&&ue(`Skipped ${n.length} image(s) over the ${(Ci/1024/1024).toFixed(0)} MB limit.`,"warning");const s=e.filter(l=>l.size<=Ci);if(!s.length){t.target.value="";return}const r=Eo-Pt.length,o=s.slice(0,r).map(async l=>{const u=await $m(l);if(!u)return null;let c="";try{c=Tm(await Rm(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Nd(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),s.length>r&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Mm(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((n,s)=>{const r=document.createElement("div");r.className="prompt-img-thumb",r.innerHTML=`Prompt image`,t.appendChild(r)}),e&&(e.textContent=Pt.length>=Eo?"Image limit reached":"Add images"))}function Md(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Nd(e?.value);t.classList.toggle("hidden",!n),!n&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Ld="google/gemini-3.7-flash",Od="google/gemini-3.7-flash",Fi="google/gemini-3.7-flash",fc={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"},zs={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 qs={...zs};async function Lm(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const s=await n.json();if(s.result!=="success"||!s.rates)return;const r=s.rates,i={AUD:1},o=new Set([...Object.keys(zs),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?i[a]=r[a]:zs[a]&&(i[a]=zs[a]));qs=i}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 Dd(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&xo[i])return xo[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=So[e];if(n)return n;const s=e.split("_")[0],r=So[s];return r||"USD"}function gc(t,e){const n=qs[e]??qs.USD,s=t*n,r=Math.round(s*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*qs.USD)}}const nt="ccc_api_key_",_t="ccc_session_api_key_",it="ccc_encryption_key",us="ccc_encryption_key_scope",Om="ccc_keystore",Sr="keys",ds="ccc_encryption_key_version";let ko=null,xr=null,hs=!1,kr=!1,mc=!1;class Ir extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function vc(){if(mc)return;mc=!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 Bd(){return localStorage.getItem(ds)||""}function Io(){return crypto.randomUUID?.()||Ud(crypto.getRandomValues(new Uint8Array(16)))}function Dm(){const t=Bd();if(t)return t;const e=Io();return localStorage.setItem(ds,e),e}function Sn(){ko=null,xr=null,hs=!1,kr=!1}window.addEventListener("storage",t=>{t.key===ds&&Sn()});function Bm(){return new Promise((t,e)=>{const n=indexedDB.open(Om,1);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(Sr)||s.createObjectStore(Sr)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function ca(t,e){const n=await Bm();return new Promise((s,r)=>{const i=n.transaction(Sr,t);let o;try{o=e(i.objectStore(Sr))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),i.oncomplete=()=>{n.close(),s(a)},i.onerror=()=>{n.close(),r(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{n.close(),r(i.error||new Error("Encryption key transaction aborted."))}})}function jm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Um(){const t=await ca("readonly",e=>e.get(it));return jm(t)?t:null}async function jd(t){await ca("readwrite",e=>e.put(t,it))}async function Hm(){Sn();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Wm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(e),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),e}async function _c(t){const e=sessionStorage.getItem(it);if(e)return kr=sessionStorage.getItem(us)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Ir;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(it,JSON.stringify(s)),sessionStorage.setItem(us,"session"),kr=!1,crypto.subtle.importKey("jwk",s,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function zm(t){if(sessionStorage.getItem(us)==="session"&&sessionStorage.getItem(it))return vc(),hs=!0,_c(t);try{const e=await Um();if(e)return e;const n=await Wm();if(n)return n;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(s),s}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),vc(),hs=!0,_c(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=Dm();xr!==n&&Sn();const s=ko||zm(e);ko=s,xr=n;try{return await s}catch(r){throw Sn(),r}}async function qm(t){const e=await ua(),n=xr,s=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,s.encode(t)),o=new Uint8Array(r.length+i.byteLength);return o.set(r),o.set(new Uint8Array(i),r.length),{ciphertext:Ud(o),keyVersion:n,sessionFallback:hs}}async function Vm(t,e={}){const{isSessionCredential:n=!1}=e;try{const s=await ua({allowSessionFallbackCreation:!1});if(hs&&!n&&!kr)throw new Ir;const r=Gm(t),i=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},s,o);return new TextDecoder().decode(a)}catch(s){if(s instanceof Ir)throw s;return console.error("Decryption failed:",s),null}}function Ud(t){const e=new Uint8Array(t);let n="";for(let s=0;s0}let ps="",Cr="",Xn=null,wc=0;async function da(){sessionStorage.getItem(it)&&await ua(),ps=await Ee("flutterflow"),Cr=await Ee("flutterflow_project_id"),Xm(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),ps&&qd(ps)}function Hd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-modal");n&&(pa(),n.classList.add("open"))}let Et=1;function Wd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Dr(){const t=Wd();t.length&&t.forEach((e,n)=>{const s=n+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 r=e.querySelector("div:first-child");r&&(r.classList.remove("bg-gray-400"),r.classList.add("bg-blue-500"),r.innerHTML=s)}else if(s0&&Et<=t&&(Et++,Dr())}function Jm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dr(),t.classList.add("open"))}function Ym(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function zd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Dr(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");ps?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Zm()}function Zm(){bc("flutterflow","flutterflow-key-status"),bc("flutterflow_project_id","flutterflow-project-status")}function bc(t,e){const n=document.getElementById(e);if(!n)return;const s=n.querySelector(".key-status-dot"),r=n.querySelector("span");ln(t)?(s.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(s.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function Zt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),n=document.getElementById("btn-run-pipeline");n&&n.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Xm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((s,r)=>{const i=n[r];i==="flutterflow"?ln("flutterflow")&&ln("flutterflow_project_id")?(s.className="key-status-dot configured",s.title="FlutterFlow (Fully configured)"):ln("flutterflow")||ln("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)"):ln(i)?(s.className="key-status-dot configured",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(s.className="key-status-dot missing",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Zt()}async function Qm(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await yc("flutterflow",t.value);const n=e?.value.trim()||"";if(n){if(!Br(n)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await yc("flutterflow_project_id",n)}await da(),fa();const s=document.querySelector("#api-keys-modal .bg-blue-500"),r=s.textContent;s.textContent="Saved!",s.classList.remove("bg-blue-500","hover:bg-blue-600"),s.classList.add("bg-green-500"),setTimeout(()=>{s.textContent=r,s.classList.remove("bg-green-500"),s.classList.add("bg-blue-500","hover:bg-blue-600"),Hd()},1e3)}async function ev(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ds,Io()),Sn(),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),await Hm(),localStorage.setItem(ds,Io()),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"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 Br(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function tv(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function nv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;tv("flutterflow-api-key-input",n)}),t.addEventListener("blur",sv(async e=>{const n=e.target.value.trim();n&&await qd(n)},500)))}function sv(t,e){let n;return function(...r){const i=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(i,e)}}async function qd(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden");try{const r=await new _s(t,"").listProjects();if(!r||r.length===0){e.innerHTML='';return}e.innerHTML='',r.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),Cr&&(e.value=Cr)}catch(s){console.error("Failed to fetch projects:",s),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${s.message}`,n.classList.remove("hidden"))}}function rv(t){const e=document.getElementById(t),s=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",s.innerHTML=` + `}const Em="http://127.0.0.1:8799/deployCustomClasses";const Je="https://4tgke4.buildship.run",Td={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},wr="ccc_auth_session",hc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function En(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=En({isResolved:!0});const Sm=`${Je}/service/runpipeline`,xm="bs_user_id",km="bs_identity_token",Im=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const br={free:2,professional:50,power:2e3},Er="ccc_subscription",pc=3,Cm=new Set(["active","trialing","paid"]),cs="google/gemini-3.7-flash",Ws=["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"],Fm={"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 Fm[t]||t}const Pm=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 Nd(t){return Pm.has(t)}const Eo=4,Ci=8*1024*1024,Am="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function $m(t){return new Promise(e=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=()=>e(null),n.readAsDataURL(t)})}async function Rm(t){const e=new FormData;return e.append("file",t),(await fetch(Am,{method:"POST",body:e})).json()}function Tm(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const n of Object.keys(e)){if(n==="item"||n==="index")continue;const s=e[n];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 Nm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const n=e.filter(l=>l.size>Ci);n.length&&ue(`Skipped ${n.length} image(s) over the ${(Ci/1024/1024).toFixed(0)} MB limit.`,"warning");const s=e.filter(l=>l.size<=Ci);if(!s.length){t.target.value="";return}const r=Eo-Pt.length,o=s.slice(0,r).map(async l=>{const u=await $m(l);if(!u)return null;let c="";try{c=Tm(await Rm(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Nd(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),s.length>r&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Mm(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((n,s)=>{const r=document.createElement("div");r.className="prompt-img-thumb",r.innerHTML=`Prompt image`,t.appendChild(r)}),e&&(e.textContent=Pt.length>=Eo?"Image limit reached":"Add images"))}function Md(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),n=Nd(e?.value);t.classList.toggle("hidden",!n),!n&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Od="google/gemini-3.7-flash",Ld="google/gemini-3.7-flash",Fi="google/gemini-3.7-flash",fc={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"},zs={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 qs={...zs};async function Om(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const n=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!n.ok)return;const s=await n.json();if(s.result!=="success"||!s.rates)return;const r=s.rates,i={AUD:1},o=new Set([...Object.keys(zs),...Object.values(xo),...Object.values(So)]);for(const a of o)a!=="AUD"&&(typeof r[a]=="number"&&r[a]>0?i[a]=r[a]:zs[a]&&(i[a]=zs[a]));qs=i}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 Dd(){try{const i=Intl.DateTimeFormat().resolvedOptions().timeZone;if(i&&xo[i])return xo[i]}catch{}const e=(navigator.language||"en-US").replace("-","_"),n=So[e];if(n)return n;const s=e.split("_")[0],r=So[s];return r||"USD"}function gc(t,e){const n=qs[e]??qs.USD,s=t*n,r=Math.round(s*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:r>=100||r%1===0?0:2}).format(r)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*qs.USD)}}const nt="ccc_api_key_",_t="ccc_session_api_key_",it="ccc_encryption_key",us="ccc_encryption_key_scope",Lm="ccc_keystore",Sr="keys",ds="ccc_encryption_key_version";let ko=null,xr=null,hs=!1,kr=!1,mc=!1;class Ir extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function vc(){if(mc)return;mc=!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 Bd(){return localStorage.getItem(ds)||""}function Io(){return crypto.randomUUID?.()||Ud(crypto.getRandomValues(new Uint8Array(16)))}function Dm(){const t=Bd();if(t)return t;const e=Io();return localStorage.setItem(ds,e),e}function Sn(){ko=null,xr=null,hs=!1,kr=!1}window.addEventListener("storage",t=>{t.key===ds&&Sn()});function Bm(){return new Promise((t,e)=>{const n=indexedDB.open(Lm,1);n.onupgradeneeded=()=>{const s=n.result;s.objectStoreNames.contains(Sr)||s.createObjectStore(Sr)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}async function ca(t,e){const n=await Bm();return new Promise((s,r)=>{const i=n.transaction(Sr,t);let o;try{o=e(i.objectStore(Sr))}catch(l){n.close(),r(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>r(o.error),i.oncomplete=()=>{n.close(),s(a)},i.onerror=()=>{n.close(),r(i.error||new Error("Encryption key transaction failed."))},i.onabort=()=>{n.close(),r(i.error||new Error("Encryption key transaction aborted."))}})}function jm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Um(){const t=await ca("readonly",e=>e.get(it));return jm(t)?t:null}async function jd(t){await ca("readwrite",e=>e.put(t,it))}async function Hm(){Sn();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Wm(){const t=sessionStorage.getItem(it);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(e),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),e}async function _c(t){const e=sessionStorage.getItem(it);if(e)return kr=sessionStorage.getItem(us)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Ir;const n=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),s=await crypto.subtle.exportKey("jwk",n);return sessionStorage.setItem(it,JSON.stringify(s)),sessionStorage.setItem(us,"session"),kr=!1,crypto.subtle.importKey("jwk",s,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function zm(t){if(sessionStorage.getItem(us)==="session"&&sessionStorage.getItem(it))return vc(),hs=!0,_c(t);try{const e=await Um();if(e)return e;const n=await Wm();if(n)return n;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await jd(s),s}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),vc(),hs=!0,_c(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,n=Dm();xr!==n&&Sn();const s=ko||zm(e);ko=s,xr=n;try{return await s}catch(r){throw Sn(),r}}async function qm(t){const e=await ua(),n=xr,s=new TextEncoder,r=crypto.getRandomValues(new Uint8Array(12)),i=await crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,s.encode(t)),o=new Uint8Array(r.length+i.byteLength);return o.set(r),o.set(new Uint8Array(i),r.length),{ciphertext:Ud(o),keyVersion:n,sessionFallback:hs}}async function Vm(t,e={}){const{isSessionCredential:n=!1}=e;try{const s=await ua({allowSessionFallbackCreation:!1});if(hs&&!n&&!kr)throw new Ir;const r=Gm(t),i=r.slice(0,12),o=r.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:i},s,o);return new TextDecoder().decode(a)}catch(s){if(s instanceof Ir)throw s;return console.error("Decryption failed:",s),null}}function Ud(t){const e=new Uint8Array(t);let n="";for(let s=0;s0}let ps="",Cr="",Xn=null,wc=0;async function da(){sessionStorage.getItem(it)&&await ua(),ps=await Ee("flutterflow"),Cr=await Ee("flutterflow_project_id"),Xm(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),ps&&qd(ps)}function Hd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-modal");n&&(pa(),n.classList.add("open"))}let Et=1;function Wd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Dr(){const t=Wd();t.length&&t.forEach((e,n)=>{const s=n+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 r=e.querySelector("div:first-child");r&&(r.classList.remove("bg-gray-400"),r.classList.add("bg-blue-500"),r.innerHTML=s)}else if(s0&&Et<=t&&(Et++,Dr())}function Jm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dr(),t.classList.add("open"))}function Ym(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const n=document.getElementById("walkthrough-dont-show");n&&n.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function zd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Dr(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");ps?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Zm()}function Zm(){bc("flutterflow","flutterflow-key-status"),bc("flutterflow_project_id","flutterflow-project-status")}function bc(t,e){const n=document.getElementById(e);if(!n)return;const s=n.querySelector(".key-status-dot"),r=n.querySelector("span");ln(t)?(s.className="key-status-dot configured",r.className="text-green-600",r.textContent="User key configured"):(s.className="key-status-dot missing",r.className="text-gray-500",r.textContent="Not configured")}function Zt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),n=document.getElementById("btn-run-pipeline");n&&n.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Xm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),n=["flutterflow"];e.forEach((s,r)=>{const i=n[r];i==="flutterflow"?ln("flutterflow")&&ln("flutterflow_project_id")?(s.className="key-status-dot configured",s.title="FlutterFlow (Fully configured)"):ln("flutterflow")||ln("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)"):ln(i)?(s.className="key-status-dot configured",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (User key)"):(s.className="key-status-dot missing",s.title=i.charAt(0).toUpperCase()+i.slice(1)+" (Not configured)")}),Zt()}async function Qm(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await yc("flutterflow",t.value);const n=e?.value.trim()||"";if(n){if(!Br(n)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await yc("flutterflow_project_id",n)}await da(),fa();const s=document.querySelector("#api-keys-modal .bg-blue-500"),r=s.textContent;s.textContent="Saved!",s.classList.remove("bg-blue-500","hover:bg-blue-600"),s.classList.add("bg-green-500"),setTimeout(()=>{s.textContent=r,s.classList.remove("bg-green-500"),s.classList.add("bg-blue-500","hover:bg-blue-600"),Hd()},1e3)}async function ev(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ds,Io()),Sn(),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(it),sessionStorage.removeItem(us),localStorage.removeItem(nt+"salt"),await Hm(),localStorage.setItem(ds,Io()),localStorage.removeItem(nt+"flutterflow"),localStorage.removeItem(nt+"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 Br(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function tv(t,e){const n=document.getElementById(t);n&&(n.value?e?n.style.borderColor="#22c55e":n.style.borderColor="#ef4444":n.style.borderColor="")}function nv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const n=e.target.value.trim().length>0;tv("flutterflow-api-key-input",n)}),t.addEventListener("blur",sv(async e=>{const n=e.target.value.trim();n&&await qd(n)},500)))}function sv(t,e){let n;return function(...r){const i=()=>{clearTimeout(n),t(...r)};clearTimeout(n),n=setTimeout(i,e)}}async function qd(t){const e=document.getElementById("flutterflow-projects-select"),n=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',n&&n.classList.add("hidden");try{const r=await new _s(t,"").listProjects();if(!r||r.length===0){e.innerHTML='';return}e.innerHTML='',r.forEach(i=>{const o=document.createElement("option");o.value=i.id||i.projectId||"",o.textContent=i.name||i.projectName||`Project ${i.id}`,e.appendChild(o)}),Cr&&(e.value=Cr)}catch(s){console.error("Failed to fetch projects:",s),e.innerHTML='',n&&(n.textContent=`Failed to load projects: ${s.message}`,n.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 iv(){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 ov(){y.bundleSpec=as(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function jr(){const t=vr(y.bundleSpec);y.artifactBundle=as(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=fg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=vr(y.artifactBundle).id}function Ur(){const t=as(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(s=>[s.id,s.review])),n=new Map(t.artifacts.filter(s=>{const r=s.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(s=>[s.id,s.review.fixedSource.trim()]));y.bundleReview=as({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(s=>{const r=n.get(s.id)||null;return{...s,review:e.get(s.id)||s.review||y.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Vd(){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(n=>n.id===y.selectedArtifactId)||vr(t)}function ma(){return ga().code||y.step2Result||""}async function av(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Vs={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function lv(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class _s{constructor(e,n,s="main",r=Vs.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=s,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const s of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const i=await r.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),s=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!s)throw new Error("Export did not contain a pubspec.yaml.");const r=s.slice(0,s.length-12),i=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[s].async("string"),files:i}}async pushCodeWithRetry(e,n=3){const s=[Vs.production,Vs.staging],r=Math.max(0,s.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(r=>({id:r.id,name:r.project?.name||r.id}))}catch(s){console.error("Failed to parse stringified project value:",s)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,s="";for(const r of e){const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await i.json());if(n=i.status,s=await i.text(),console.warn(`listProjects via ${r} returned ${n}: ${s}`),i.status===401||i.status===403)throw new Error(lv(i.status,s));if(i.status!==404)throw new Error(`List projects failed: ${i.status} - ${s}`)}throw new Error(`List projects failed: ${n} - ${s}`)}}async function va(t){const e=t.clone();let n;try{n=await t.json()}catch{const i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let r=n.message||`HTTP ${t.status}`,i=new Map;if(n.errors)i=new Map(Object.entries(n.errors));else if(!n.message&&typeof n=="object"){const o=Object.keys(n).filter(a=>a.endsWith(".dart")&&Array.isArray(n[a]));o.length>0&&(i=new Map(Object.entries(n)),r=o.flatMap(l=>n[l].map(u=>`${l}: ${u.errorMessage}`)).join(` + `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function iv(){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 ov(){y.bundleSpec=as(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function jr(){const t=vr(y.bundleSpec);y.artifactBundle=as(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=fg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(n=>n.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=vr(y.artifactBundle).id}function Ur(){const t=as(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(s=>[s.id,s.review])),n=new Map(t.artifacts.filter(s=>{const r=s.review;return r&&typeof r.fixedSource=="string"&&r.fixedSource.trim()}).map(s=>[s.id,s.review.fixedSource.trim()]));y.bundleReview=as({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(s=>{const r=n.get(s.id)||null;return{...s,review:e.get(s.id)||s.review||y.step3Result||null,...r?{fixedCode:r}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Vd(){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(n=>n.id===y.selectedArtifactId)||vr(t)}function ma(){return ga().code||y.step2Result||""}async function av(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Vs={production:"http://127.0.0.1:8799/",staging:"http://127.0.0.1:8799/"};function lv(t,e){const n=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${n}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${n}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class _s{constructor(e,n,s="main",r=Vs.production){this.apiKey=e,this.baseUrl=r,this._projectId=n,this._branchName=s,this._endpoint=r}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let n=null;for(const s of e)try{const r=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(s)});if(!r.ok){const a=await r.text();n=new Error(`Export failed: ${r.status} - ${a}`);continue}const i=await r.json(),o=i?.value?.project_zip||i?.project_zip;if(!o){n=new Error("Export response did not include project source.");continue}return o}catch(r){n=r}throw n||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),n=await JSZip.loadAsync(e,{base64:!0}),s=Object.keys(n.files).filter(a=>!n.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!s)throw new Error("Export did not contain a pubspec.yaml.");const r=s.slice(0,s.length-12),i=new Map,o=Object.keys(n.files).filter(a=>{if(n.files[a].dir||!a.startsWith(r))return!1;const l=a.slice(r.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{i.set(a.slice(r.length),await n.files[a].async("string"))})),{pubspecYaml:await n.files[s].async("string"),files:i}}async pushCodeWithRetry(e,n=3){const s=[Vs.production,Vs.staging],r=Math.max(0,s.indexOf(this._endpoint));for(let i=0;isetTimeout(d,1e3*(i+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(i+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(r=>({id:r.id,name:r.project?.name||r.id}))}catch(s){console.error("Failed to parse stringified project value:",s)}const n=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(n)?n:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let n=0,s="";for(const r of e){const i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(i.ok)return r!==e[0]&&console.log(`listProjects answered on legacy path ${r}`),this.parseProjectsResponse(await i.json());if(n=i.status,s=await i.text(),console.warn(`listProjects via ${r} returned ${n}: ${s}`),i.status===401||i.status===403)throw new Error(lv(i.status,s));if(i.status!==404)throw new Error(`List projects failed: ${i.status} - ${s}`)}throw new Error(`List projects failed: ${n} - ${s}`)}}async function va(t){const e=t.clone();let n;try{n=await t.json()}catch{const i=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:i||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${i}`)}if(!t.ok){let r=n.message||`HTTP ${t.status}`,i=new Map;if(n.errors)i=new Map(Object.entries(n.errors));else if(!n.message&&typeof n=="object"){const o=Object.keys(n).filter(a=>a.endsWith(".dart")&&Array.isArray(n[a]));o.length>0&&(i=new Map(Object.entries(n)),r=o.flatMap(l=>n[l].map(u=>`${l}: ${u.errorMessage}`)).join(` `)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:r,errorMap:i}}let s={};if(n.value)try{s=typeof n.value=="string"?JSON.parse(n.value):n.value}catch(r){console.warn("Ignoring malformed push response value:",r)}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"},Gd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,Kd=/extends\s+State<\w+>/;function cv(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const n=Gd.test(e),s=Kd.test(e);if(n||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 Jd(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 Yf(t,e)}const Co=new Map;function Yd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hr(t){Co.delete(Yd(t))}async function wa(t,e,n,s,r=""){const i=Cg(e,n);if(i.length===0)return{remoteFiles:n,syncFileMap:e,unverified:[]};const o=sm(i,r),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 ${i.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(Em,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:s,customClasses:i,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 Hr(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:n,syncFileMap:Fg(e,i),unverified:l}}async function ba(t,e={}){const n=Yd(t);let s=Co.get(n);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=Ad(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(n,s)}const r=await mm(s.pubspecYaml,e),i=Xg(s.pubspecYaml,r.overrides),o=Zg(i.yaml,r.additions);return r.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${r.additions[a]||"any"}`).join(", "),r.sdk.dartSdkFloor?`(resolved for Dart ${r.sdk.dartSdkFloor})`:""),r.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:i.overridden,warnings:r.warnings,remoteFiles:s.files}}function uv(t){const e=[],n=[];t.content.length>5e4&&n.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const s=t.content.split(` `).length;s>500&&n.push(`Code has ${s} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&n.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&n.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&n.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const r=t.content.match(/print\s*\(/g);r&&r.length>3&&n.push(`Code contains ${r.length} print statements. Consider removing debug prints before committing.`);const i=Vg(t.content);if(i&&e.push(`FlutterFlow cannot format this code - ${i}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=Ed(t.content),a=Wg(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=`${Sd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:n}}function Zd(t,e={}){const{artifactType:n="CustomWidget",artifactName:s="GeneratedCode",fileName:r}=e,i=Ug(t);let o=r||s;if(n==="CustomFunction")o="custom_functions.dart";else if(n==="CustomWidget"){const u=Ed(i)[0],c=u?Sd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(n){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports import '/flutter_flow/flutter_flow_theme.dart'; @@ -111,13 +111,13 @@ import '/flutter_flow/uploaded_file.dart'; `),{content:vg(i,l),fileName:o,codeType:a,artifactType:n,artifactName:s}}function dv(t){const e={};for(const n of sa(t))e[n]="";return e}function hv(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 pv(t,e,n,s=new Set,r=""){const i=[],o=Gd.test(e),a=Kd.test(e);return n===U.WIDGET&&!o&&!a&&i.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:i.length===0,errors:i}}function Wr(t){const e=[],n=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:n};const s=new Set(Array.from(t.values()).flatMap(r=>Mr(r.content||"")));for(const[r,i]of t.entries()){if((!i.content||i.content.trim().length===0)&&e.push(`File ${r} is empty`),i.content&&i.content.length>1e5&&n.push(`File ${r} is very large (>100KB)`),r.endsWith(".dart")){const o=pv(r,i.content,i.type,s,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${r}: ${a}`))}if(r==="pubspec.yaml"){const o=Ad(i.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:n}}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 fv(t,e,n={}){let{codeType:s="W"}=n;const{pubspecDeps:r={},artifactName:i=e}=n;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(!Br(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=vs(),u=new _s(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=s||cv(e,t),h=Jd(e,d);c.set(e,{artifactName:i,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Wr(c);if(!p.valid)throw new Error(`Validation failed: ${p.errors.join(` -`)}`);const f=await ba(u,r),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${i} 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 w=await Ea(E),I={project_id:a,zipped_custom_code:w,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),Hr(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[n,s]of t.entries())e.file(n,s.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function gv(t,e={}){const{artifactType:n,artifactName:s,fileName:r,pipelineResult:i}=e;console.log(`Starting commit for ${s} (${n})`);try{K.setState(V.PREPARING);const o=Zd(t,{artifactType:n,artifactName:s,fileName:r}),a=dv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Xn||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(!Br(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:Jd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?s:void 0}),K.setProgress(0,c.size);const d=Wr(c);if(!d.valid)throw new Error(`File validation failed: +`)}`);const f=await ba(u,r),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${i} 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),x={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),Hr(u),be.set("push");const F=await u.pushCode(x),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[n,s]of t.entries())e.file(n,s.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function gv(t,e={}){const{artifactType:n,artifactName:s,fileName:r,pipelineResult:i}=e;console.log(`Starting commit for ${s} (${n})`);try{K.setState(V.PREPARING);const o=Zd(t,{artifactType:n,artifactName:s,fileName:r}),a=dv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Xn||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(!Br(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:Jd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?s:void 0}),K.setProgress(0,c.size);const d=Wr(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=vs(),p=new _s(l,u,"main",h),f=await ba(p,a),g=f.yaml,m=await wa(p,c,f.remoteFiles,`Provision ${s} 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 w=await Ea(E),I={project_id:u,zipped_custom_code:w,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),Hr(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...hv(o,i),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 mv(t,e={}){const{pipelineResult:n}=e;try{if(K.setState(V.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: +`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(V.PUSHING);const h=vs(),p=new _s(l,u,"main",h),f=await ba(p,a),g=f.yaml,m=await wa(p,c,f.remoteFiles,`Provision ${s} 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),x={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),Hr(p),be.set("push");const F=await p.pushCode(x),P=await va(F);if(P.success){const B={...hv(o,i),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 mv(t,e={}){const{pipelineResult:n}=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 r=Wr(s);if(!r.valid)throw new Error(`File validation failed: +`)}`);const s=new Map(t.fileEntries.map(x=>[x.fileName,{artifactId:x.artifactId,artifactName:x.artifactName,content:x.content,type:x.type,path:x.path,functionName:x.type===U.FUNCTION?x.artifactName:void 0}]));K.setProgress(0,s.size);const r=Wr(s);if(!r.valid)throw new Error(`File validation failed: ${r.errors.join(` -`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Xn||await Ee("flutterflow_project_id");if(!i)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(!Br(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=vs(),l=new _s(i,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),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,s.size),Hr(l),be.set("push");const m=await l.pushCode(g),_=await va(m);if(_.success){const I={...n,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,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const E=_.errorMessage||_a(_.responseCode),w=new Error(E);throw w.errorMap=_.errorMap,w}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 vv(t,e=[]){const n=Qo("architect");try{return await Fr("architect",Ld,Df(t),n,e)}catch(s){throw s.isModelArmor?s:new Error(`Prompt Architect failed: ${s.message}`)}}async function zr(t,e,n=[]){const s=Bf(t),r=Qo("generator",y.bundleSpec);try{return await Fr("generator",e,s,r,n)}catch(i){if(i.isModelArmor)throw i;if(e!==Fi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await Fr("generator",Fi,s,r,n)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Fi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function qr(t,e=null){const n={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Fr("review",Od,jf(t),n)}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 n=document.getElementById(`step${t}-item`),s=document.getElementById(`step${t}-status`);!n||!s||(n.classList.remove("active","completed","error"),s.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),s.classList.add("running"),s.innerHTML=` +`)}`);K.setState(V.VALIDATING);const i=await Ee("flutterflow"),o=Xn||await Ee("flutterflow_project_id");if(!i)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(!Br(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=vs(),l=new _s(i,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),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,s.size),Hr(l),be.set("push");const m=await l.pushCode(g),_=await va(m);if(_.success){const x={...n,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({...x,fileCount:s.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:x,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(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 vv(t,e=[]){const n=Qo("architect");try{return await Fr("architect",Od,Df(t),n,e)}catch(s){throw s.isModelArmor?s:new Error(`Prompt Architect failed: ${s.message}`)}}async function zr(t,e,n=[]){const s=Bf(t),r=Qo("generator",y.bundleSpec);try{return await Fr("generator",e,s,r,n)}catch(i){if(i.isModelArmor)throw i;if(e!==Fi){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,i.message);try{return await Fr("generator",Fi,s,r,n)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${i.message} | fallback (${Fi}): ${o.message}`)}}throw new Error(`Code Generator failed: ${i.message}`)}}async function qr(t,e=null){const n={...Qo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await Fr("review",Ld,jf(t),n)}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 n=document.getElementById(`step${t}-item`),s=document.getElementById(`step${t}-status`);!n||!s||(n.classList.remove("active","completed","error"),s.classList.remove("running","completed","error"),e==="active"?(n.classList.add("active"),s.classList.add("running"),s.innerHTML=` `):e==="completed"?(n.classList.add("completed"),s.classList.add("completed"),s.innerHTML=` @@ -125,15 +125,15 @@ ${r.errors.join(` `):s.innerHTML=` - `)}function ve(t,e){const n=document.getElementById(`step${t}-loading`),s=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),s.classList.add("hidden"),Fo(t,"active")):(n.classList.add("hidden"),s.classList.remove("hidden"),Fo(t,"completed"))}function _v(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function yv(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 n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const s=document.getElementById(`step${t}-content`);s&&s.classList.remove("hidden");const r=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=i[t]||"Active Workflow Stage")}function wv(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(s=>{console.warn("Failed to copy to clipboard:",s)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Ld)}`),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(Od)}`)}async function bv(){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(n=>{n.disabled=!0,n.innerHTML=` + `)}function ve(t,e){const n=document.getElementById(`step${t}-loading`),s=document.getElementById(`step${t}-result`);e?(n.classList.remove("hidden"),s.classList.add("hidden"),Fo(t,"active")):(n.classList.add("hidden"),s.classList.remove("hidden"),Fo(t,"completed"))}function _v(t){const e=document.getElementById(`${t}-content`),n=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),n&&(n.style.transform="rotate(0deg)")):(e.classList.add("open"),n&&(n.style.transform="rotate(180deg)"))}function yv(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 n=document.getElementById("ready-state");n&&n.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const s=document.getElementById(`step${t}-content`);s&&s.classList.remove("hidden");const r=document.getElementById("stage-title"),i={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};r&&(r.textContent=i[t]||"Active Workflow Stage")}function wv(t){const e=document.getElementById(t);if(!e)return;const n=e.dataset.raw||e.textContent;navigator.clipboard.writeText(n).then(()=>{const r=e.closest(".code-container")?.querySelector(".copy-btn");r&&(r.classList.add("copied"),r.innerHTML=' Copied!',setTimeout(()=>{r.classList.remove("copied"),r.innerHTML=' Copy'},2e3))}).catch(s=>{console.warn("Failed to copy to clipboard:",s)})}function Po(t){const e=$o(t);console.log(`Step 1 (Prompt Architect): ${zt(Od)}`),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(Ld)}`)}async function bv(){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(n=>{n.disabled=!0,n.innerHTML=` - Refining...`});try{const n=ga(),s=Uf({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:n.id,userFeedback:"Fix the issues listed in the audit report."});Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(s,t),jr();const r=document.getElementById("step2-output"),i=bn(y.step2Result);r.textContent=i,r.dataset.raw=i,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Or(y.step3Result);Jr(i,a)}catch(n){console.error("Refinement failed:",n),$t(),ue(Sa(n,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(n=>{n.disabled=!1,n.textContent="Refine & Regenerate"}),Zt()}}async function xa(t,e,n){const s=`${Je}/connectFeedback`,r={type:t,code:e,input:n};try{const i=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function Ev(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Sv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const s=document.getElementById("btn-fix-from-errors");s&&(s.disabled=!0,s.innerHTML=` + Refining...`});try{const n=ga(),s=Uf({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:n.id,userFeedback:"Fix the issues listed in the audit report."});Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(s,t),jr();const r=document.getElementById("step2-output"),i=bn(y.step2Result);r.textContent=i,r.dataset.raw=i,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Lr(y.step3Result);Jr(i,a)}catch(n){console.error("Refinement failed:",n),$t(),ue(Sa(n,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(n=>{n.disabled=!1,n.textContent="Refine & Regenerate"}),Zt()}}async function xa(t,e,n){const s=`${Je}/connectFeedback`,r={type:t,code:e,input:n};try{const i=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();return console.error(`callEndpoint failed: ${i.status} ${i.statusText}`,a),{success:!1,status:i.status,error:a}}const o=await i.json();return console.log("Telemetry success:",o),o}catch(i){return console.error("callEndpoint failed:",i),{success:!1,error:i.message}}}function Ev(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Sv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const n=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const s=document.getElementById("btn-fix-from-errors");s&&(s.disabled=!0,s.innerHTML=` - Fixing…`);try{const r=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});uh(),Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(r,n),jr();const i=document.getElementById("step2-output"),o=bn(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Or(y.step3Result);Jr(o,l),t&&(t.value="")}catch(r){console.error("Fix from errors failed:",r),$t(),ue(Sa(r,"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 Wv())return;await Ov();const n=$o(e);t.length;const s=document.getElementById("btn-run-pipeline");y.isRunning=!0,iv(),s.disabled=!0,s.innerHTML=` + Fixing…`);try{const r=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});uh(),Kr(),rt(2),ze(2),ve(2,!0),y.step2Result=await zr(r,n),jr();const i=document.getElementById("step2-output"),o=bn(y.step2Result);i.textContent=o,i.dataset.raw=o,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Lr(y.step3Result);Jr(o,l),t&&(t.value="")}catch(r){console.error("Fix from errors failed:",r),$t(),ue(Sa(r,"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 Wv())return;await Lv();const n=$o(e);t.length;const s=document.getElementById("btn-run-pipeline");y.isRunning=!0,iv(),s.disabled=!0,s.innerHTML=` - Running...`,Po(n);try{Yt();const r=document.getElementById("ready-state");r&&r.classList.add("hidden");const i=document.getElementById("paywall-exhausted");i&&i.classList.add("hidden"),Kr(),ze(1),rt(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await vv(t,o),ov();const a=document.getElementById("step1-output"),l=bn(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),rt(2),ve(2,!0),y.step2Result=await zr(y.step1Result,n,o),jr();const u=document.getElementById("step2-output"),c=bn(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),rt(3),ve(3,!0),y.step3Result=await qr(y.step2Result,y.step1Result),Ur();const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Or(y.step3Result);Jr(c,h)}catch(r){if(console.error("Pipeline failed:",r),$t(),r.isUsageLimit){const{count:c}=Vr();Aa(c,Pa(),{openModal:!0});return}r.message,$o(document.getElementById("code-generator-model").value);const o=_m(r,{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(r.isModelArmor)u.innerHTML=`