From d1dc19cda9ac6fe2fea3f583ae0ff98633938343 Mon Sep 17 00:00:00 2001 From: Stuart Date: Mon, 21 Sep 2026 23:56:13 +1000 Subject: [PATCH 01/15] fix: classify SDK dependencies by their pubspec source, not a name list STU-368. Which packages the Flutter SDK supplies was decided by a hand-maintained name list kept in three places, and flutter_web_plugins was in none of them. Every project declaring it - which is every web-enabled project with a plugin - read it as a dependency that could not be reproduced, and the deploy was refused for a package most of its classes never imported. The project's own pubspec already says where each package comes from; the parser read those lines and threw them away. It now returns them as sourceKey/sourceValue, so the classification is exact and cannot fall behind the SDK: sdk: -> the Flutter SDK, reproduced from the name a nested version: -> a constraint written on its own line git: / path: / nested hosted: -> not expressible in the manifest SDK_DEPENDENCIES is gone. The runner's allowedSdkPackages is gone too - it independently refused the same deploy with 'Unsupported SDK package'. That allowlist was also the only validation of an sdkPackages entry, so the package name pattern now does that job; without the swap a caller-supplied name would reach the generated pubspec unchecked. The runner still writes 'sdk: flutter' itself, so that value never comes from a caller. Refusal is now scoped per class, to that class's own imports, so one git: entry no longer leaves an entire deploy uncompiled. The accept/warn split already existed and is unchanged: a real analyzer error refuses with 422, and a class that could not be compiled is pushed with its warning logged before the provisioning request. Corrects DEPLOYMENT.md, which still described the scaffolding-closure compilation that reverting a1238f0 removed, and still claimed that nothing unverified is deployed. Verified: 274/274 tests, deploy guard 9/9, proxies 30/30, build clean, dart analyze on the runner reports no issues. --- DEPLOYMENT.md | 46 ++++-- cloud-run/ffai-runner/bin/server.dart | 29 ++-- .../{index-BAqMCFqg.js => index-D4d_RpDK.js} | 156 +++++++++--------- dist/index.html | 2 +- src/customCodeVerification.js | 75 ++++++--- src/customCodeVerification.test.js | 119 ++++++++++++- src/pubspecSync.js | 68 +++++++- src/pubspecSync.test.js | 70 ++++++++ 8 files changed, 426 insertions(+), 139 deletions(-) rename dist/assets/{index-BAqMCFqg.js => index-D4d_RpDK.js} (56%) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index e66f583..44943e4 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -79,34 +79,54 @@ in `.dart` untouched so a re-deploy is a no-op and an editor rename survives. Before writing anything to the project the runner compiles the generated classes in a throwaway Flutter package built from the project's own dependency -versions and refuses the deploy (HTTP 422) if the analyzer reports an error. +versions, and refuses the deploy (HTTP 422) if the analyzer reports an error. The FlutterFlow DSL only checks that code is formattable, which accepts a call to a named argument the package never declared. This needs the Flutter SDK in the image, so the runner takes longer to build and to cold-start, and the deploy script raises Cloud Run's request timeout to 900s. -A class that imports FlutterFlow scaffolding (`/backend/schema/structs/index.dart`) -is compiled too: the deploy gathers the transitive closure of each class's -project-relative imports from the export and ships it alongside, bounded by -file and byte caps. The class is written to `lib/custom_code/.dart` - -where FlutterFlow files it, so a relative import resolves from the right -directory - and the project's generated Dart under `lib/`, which is what the -leading slash resolves against. Analysis is scoped to the deployed class files -with `--no-fatal-warnings`, so an error inside the project's own scaffolding, -or a warning-only class, cannot refuse code that compiles. +A class is compiled when every package it imports resolves the same way the +project resolves it. Two cases are left out of the compile set, and each is +reported rather than silently dropped: + +* It imports something FlutterFlow only generates once the app is built - + `/backend/schema/structs/index.dart`, `../flutter_flow/lat_lng.dart`. Those + files do not exist until after the deploy. +* It imports a package the project declares from a source this manifest cannot + express: a `git:` or `path:` source, or a nested `hosted:` block. The scratch + package would resolve different code, and a check against the wrong version + reports a result that does not describe what ships. + +The second case is decided **per class**, from that class's own imports. A +`git:` dependency stops only the classes that import it; classes that do not are +still compiled. Deciding it once for the whole project meant one such entry left +an entire deploy uncompiled. + +**Which packages the Flutter SDK supplies is read from the project's own +pubspec** - a dependency written in block form under `sdk:` is an SDK package by +definition. Nothing keeps a list of SDK package names, because a list goes stale +the moment the SDK ships one it has not heard of, and a stale list reads a +perfectly valid package as unreproducible. That is not hypothetical: a list +missing `flutter_web_plugins` refused whole deploys for projects that declared +it. The manifest is sent as package names and version constraints, never as pubspec.yaml text, and the runner builds the document itself - it runs `pub get` against it on a publicly reachable route, so a caller must not be able to name a git or path source. `dependency_overrides` are carried over, because a scratch package resolving different versions than the project would -approve code the project rejects. +approve code the project rejects. The runner validates each name against a +package-name pattern rather than against a list of SDK packages, and writes +`sdk: flutter` itself, so that value never comes from a caller. A client still sending the older `pubspec` format is recognized, never executed, and its deploy proceeds with the check reported as unavailable. -**Nothing unverified is deployed.** The web app refuses the deploy on any class -it cannot compile, naming each one and why, before the runner is called. +**What could not be verified still deploys, and is reported.** A class with a +real analyzer error refuses the deploy - HTTP 422, naming the error. A class the +deploy could not compile, for either reason above, does not: it is pushed, and +the warning naming it is logged *before* the provisioning request, so it +describes the mutation before it happens rather than after. The runner streams its progress. When the request body sets `"stream": true` the response is NDJSON — one `{"event":"phase"|"log"|"result"}` object per diff --git a/cloud-run/ffai-runner/bin/server.dart b/cloud-run/ffai-runner/bin/server.dart index 2b5a8e4..141b3bc 100644 --- a/cloud-run/ffai-runner/bin/server.dart +++ b/cloud-run/ffai-runner/bin/server.dart @@ -19,15 +19,13 @@ final _packageNamePattern = RegExp(r'^[a-z_][a-z0-9_]*$'); // unrepresentable rather than merely discouraged. final _constraintPattern = RegExp(r'^[A-Za-z0-9^~<>=*+._ -]+$'); -// The packages the Flutter SDK supplies, i.e. the only valid `sdk: flutter` -// entries besides `flutter` itself. -const allowedSdkPackages = { - 'flutter', - 'flutter_test', - 'flutter_driver', - 'flutter_localizations', - 'integration_test', -}; +// Which packages the Flutter SDK supplies is not decided here. A caller names +// the packages its project declares as `sdk: flutter`, and this runner emits +// them as `name: {sdk: flutter}` - a value it writes itself, never one a caller +// sent. There was an allowlist of SDK package names here, and it refused good +// deploys: the client classified a package correctly by its pubspec source, and +// the runner rejected it for not appearing on a list that had gone stale. +// `_packageNamePattern` is what actually keeps a key from carrying YAML. Future main() async { final port = int.tryParse(Platform.environment['PORT'] ?? '') ?? 8080; @@ -538,8 +536,13 @@ Map _normalizeDependencyMap(Object? value, String field) { return result; } -/// Reads the SDK-supplied package names. Restricted to the packages the Flutter -/// SDK actually provides, so a caller cannot request an arbitrary `sdk:` value. +/// Reads the SDK-supplied package names a caller's project declares. +/// +/// Validated as package names rather than against a list of the packages the +/// Flutter SDK happens to ship: a name the SDK does not provide fails +/// `pub get` with an honest error, whereas a list refuses correct deploys the +/// moment it falls behind the SDK. The pattern is the load-bearing check - each +/// name becomes a key in the generated pubspec. List _normalizeSdkPackages(Object? value) { if (value == null) return const []; if (value is! List) { @@ -549,8 +552,8 @@ List _normalizeSdkPackages(Object? value) { final result = []; for (final raw in value) { final name = '$raw'; - if (!allowedSdkPackages.contains(name)) { - throw FormatException('Unsupported SDK package: $name.'); + if (!_packageNamePattern.hasMatch(name)) { + throw FormatException('Invalid SDK package name: $name.'); } if (!result.contains(name)) result.add(name); } diff --git a/dist/assets/index-BAqMCFqg.js b/dist/assets/index-D4d_RpDK.js similarity index 56% rename from dist/assets/index-BAqMCFqg.js rename to dist/assets/index-D4d_RpDK.js index 339dc59..efa7947 100644 --- a/dist/assets/index-BAqMCFqg.js +++ b/dist/assets/index-D4d_RpDK.js @@ -1,8 +1,8 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function s(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function r(i){if(i.ep)return;i.ep=!0;const n=s(i);fetch(i.href,n)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,re=we?.location,To=we?.fetch,An=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,lh=we?.CompressionStream,Pe=ke?.userAgent;function kc(){return!(!v||v.navigator.onLine===!1)}var Cs=typeof globalThis<"u"?globalThis:v;Cs&&typeof self>"u"&&(Cs.self=Cs),Cs&&typeof File>"u"&&(Cs.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(t,e,s,r,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void s(u)}a.done?e(l):Promise.resolve(l).then(r,i)}function X(t){return function(){var e=this,s=arguments;return new Promise((function(r,i){var n=t.apply(e,s);function o(l){La(n,r,i,o,a,"next",l)}function a(l){La(n,r,i,o,a,"throw",l)}o(void 0)}))}}function w(){return w=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},w.apply(null,arguments)}function Ic(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fs,ch=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),uh=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],dh=["token"],Cc="NativeGzipValidationError",$n=t=>t.length>=2&&t[0]===31&&t[1]===139,Ua=(t,e)=>t===ja.GZipJS||e===ja.GZipJS||e==="gzip",Ha=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",yr=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Cc,e},hh=(function(){var t=X((function*(e,s){18>e.size&&yr("too-short");var r=new Uint8Array(yield e.slice(0,10).arrayBuffer());$n(r)&&r[2]===8||yr("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fs)return Fs;Fs=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Fs[c]=d>>>0}return Fs})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(s)&&yr("invalid-crc");var n=s.length>>>0;i.getUint32(4,!0)!==n&&yr("invalid-size")}));return function(e,s){return t.apply(this,arguments)}})();function Rn(){return Rn=X((function*(t,e,s){e===void 0&&(e=!0);try{var r=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(r).then((()=>n.close())).catch((function(){var u=X((function*(c){try{yield n.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(i.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield hh(l,r),l}catch(u){if(s!=null&&s.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Rn.apply(this,arguments)}var ph=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return ph.concat(e).some((r=>{var i=r.toLowerCase();return s.indexOf(i)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Fi=function(t){return t.trim()},Tn=function(t){return t.replace(/^\$/,"")};function Fc(t){var e,s=[];return(e=JSON.stringify(t,(function(r,i){if(typeof i=="bigint")return i.toString();if(typeof i!="function"&&typeof i!="symbol"){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&typeof i=="object"){for(;s.length>0&&s[s.length-1]!==this;)s.pop();if(s.includes(i))return"[Circular]";s.push(i)}return i}})))!==null&&e!==void 0?e:"null"}var Pc=Object.prototype,Ac=Pc.hasOwnProperty,Pi=Pc.toString,L=Array.isArray||function(t){return Pi.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(Ac.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Pi.call(t)=="[object String]",Nn=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Pi.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Pi.call(t)==="[object Boolean]",fh=t=>t instanceof FormData,gh=t=>M(uh,t),mh=t=>M(dh,t);function $c(t){return t===null||typeof t!="object"}function qr(t,e){return{}.toString.call(t)==="[object "+e+"]"}function No(t){return typeof Event<"u"&&Rc(t,Event)}function Rc(t,e){try{return t instanceof e}catch{return!1}}var vh=[!0,"true",1,"1","yes"],Ji=t=>M(vh,t),_h=[!1,"false",0,"0","no"];function rt(t,e,s,r,i){return e>s&&(r.warn("min cannot be greater than max."),e=s),he(t)?t>s?(r.warn(" cannot be greater than max: "+s+". Using max value instead."),s):e>t?(r.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(r.warn(" must be a number. using max or fallback. max: "+s+", fallback: "+i),rt(i||s,e,s,r))}class yh{constructor(e){this.tt={},this.et=e.et,this.it=rt(e.bucketSize,0,100,e.rt),this.nt=rt(e.refillRate,0,this.it,e.rt),this.st=rt(e.refillInterval,0,864e5,e.rt)}ot(e,s){var r=Math.floor((s-e.lastAccess)/this.st);r>0&&(e.tokens=Math.min(e.tokens+r*this.nt,this.it),e.lastAccess=e.lastAccess+r*this.st)}consumeRateLimit(e){var s,r=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,r):this.tt[i]=n={tokens:this.it,lastAccess:r},n.tokens===0||(n.tokens--,n.tokens===0&&((s=this.et)==null||s.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Vr="iOS",vt="Android",fs="Tablet",Tc=vt+" "+fs,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qs="Safari",gs="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Gt="Chrome",wh=Gt+" OS",jc=Gt+" "+Vr,Mo="Internet Explorer",Uc=Mo+" "+Oe,Lo="Opera",bh=Lo+" Mini",Oo="Edge",Hc="Microsoft "+Oo,ds="Firefox",Wc=ds+" "+Vr,er="Nintendo",tr="PlayStation",hs="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qs,Ds="Windows",Mn=Ds+" Phone",za="Nokia",Ln="Ouya",Vc="Generic",Eh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+fs.toLowerCase(),On="Konqueror",Kc="Oculus Browser",Gr="Vivaldi",Jc="Yandex",Kr="Whale",Dn="DuckDuckGo",Yc="Pale Moon",Jr="Waterfox",Vs="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Yi=new RegExp("Version/"+le),Sh=new RegExp(hs,"i"),xh=new RegExp(tr+" \\w+","i"),kh=new RegExp(er+" \\w+","i"),Do=new RegExp(gs+"|PlayBook|BB10","i"),Ih={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Xc=function(t,e,s,r){e=e||"";var i=(function(n){return n!=null&&n.brave?Vs:null})(s);return i||(r!=null&&r.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?bh:M(t," OPR/")?Lo:Do.test(t)?gs:M(t,"IE"+Oe)||M(t,"WPDesktop")?Uc:M(t,"OculusBrowser")?Kc:M(t,Dc)?Bc:M(t,Oo)||M(t,"Edg/")?Hc:M(t,Gr+"/")?Gr:M(t,"YaBrowser/")?Jc:M(t,Kr+"/")?Kr:M(t,Dn+"/")||M(t,"Ddg/")?Dn:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?jc:M(t,"CrMo")||M(t,Gt)?Gt:M(t,vt)&&M(t,qs)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),On.toLowerCase())?On:M(t,Vs+"/")?Vs:((n,o)=>o&&M(o,Mc)||(function(a){return M(a,qs)&&!M(a,Gt)&&!M(a,vt)})(n))(t,e)?M(t,Oe)?qc:qs:M(t,"PaleMoon/")?Yc:M(t,Jr+"/")?Jr:M(t,ds)?ds:M(t,"MSIE")||M(t,"Trident/")?Mo:M(t,"Gecko")?ds:"")},Ch={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Oo+"?\\/"+le)],[Gt]:[new RegExp("("+Gt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[qs]:[Yi],[qc]:[Yi],[Lo]:[new RegExp("(Opera|OPR)\\/"+le)],[ds]:[new RegExp(ds+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[On]:[new RegExp("Konqueror[:/]?"+le,"i")],[gs]:[new RegExp(gs+" "+le),Yi],[zc]:[new RegExp("android\\s"+le,"i")],[Bc]:[new RegExp(Dc+"\\/"+le)],[Kc]:[new RegExp("OculusBrowser\\/"+le)],[Gr]:[new RegExp(Gr+"\\/"+le)],[Jc]:[new RegExp("YaBrowser\\/"+le)],[Kr]:[new RegExp(Kr+"\\/"+le)],[Vs]:[new RegExp(Vs+"\\/"+le)],[Dn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Jr]:[new RegExp(Jr+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Mo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Fh=function(t,e,s,r){var i=Xc(t,e,s,r),n=Ch[i];if(x(n))return null;for(var o=0;n.length>o;o++){var a=t.match(n[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(hs+"; "+hs+" (.*?)[);]","i"),t=>[hs,t&&t[1]||""]],[new RegExp(er,"i"),[er,""]],[new RegExp(tr,"i"),[tr,""]],[Do,[gs,""]],[new RegExp(Ds,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Mn,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Ds+" "+Oe,""];var s=/Windows NT ([0-9.]+)/i.exec(e);if(s&&s[1]){var r=Ih[s[1]]||"";return/arm/i.test(e)&&(r="RT"),[Ds,r]}return[Ds,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Vr,[t[3],t[4],t[5]||"0"].join(".")]:[Vr,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+vt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+vt+")","i"),t=>t&&t[2]?[vt,[t[2],t[3],t[4]||"0"].join(".")]:[vt,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[wh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return kh.test(t)?er:xh.test(t)?tr:Sh.test(t)?hs:new RegExp(Ln,"i").test(t)?Ln:new RegExp("("+Mn+"|WPDesktop)","i").test(t)?Mn:/iPad/.test(t)?Nc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Lc:Do.test(t)?gs:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(za,"i").test(t)?za:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Oe).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:Tc:new RegExp("(pda|"+Oe+")","i").test(t)?Eh:new RegExp(fs,"i").test(t)&&!new RegExp(fs+" pc","i").test(t)?Gc:""},Ph=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(s=t)=="string"&&Ph.test(s)?t:e();var s}function Ct(t){return t&&t.split("#")[0]}function Bo(t,e){var s=setTimeout(t,e);return s?.unref&&s?.unref(),s}function Ka(t,e,s){return Qc.apply(this,arguments)}function Qc(){return(Qc=X((function*(t,e,s){var r;try{return yield Promise.race([t,new Promise(((i,n)=>{r=Bo((()=>{try{s?.(),i()}catch(o){n(o)}}),e)}))])}finally{clearTimeout(r)}}))).apply(this,arguments)}var Ah=t=>t instanceof Error,eu={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},$h=eu.info;function tu(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(L(t))return{arrayValue:{values:t.map((e=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Yr(t){var e=[];for(var s in t){var r=t[s];$e(r)||x(r)||e.push({key:s,value:tu(r)})}return e}function Rh(t,e){var s=eu[t.level||"info"]||$h,r=s.text,i=s.number,n=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),D(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),D(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=w({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:r,body:{stringValue:t.body},attributes:Yr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function su(t,e,s){return w({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function ru(t,e,s,r){return{resourceLogs:[{resource:{attributes:Yr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let Th=class{constructor(t,e,s,r,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=s,this.ut=r,this.ht=i,this.dt=n,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var s={record:Rh(e,this.ut())};this.ht((()=>this.At(s)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return r}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return X((function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally((()=>{t.ct=null}))),t.ct}))()}Ft(){var t=this;return X((function*(){var e;t.Et();var s=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(s.length!==0)for(var r=s.length,i=0;s.length>0&&r>i;){var n,o;t.ft=0;var a=Math.min(s.length,t.Ct),l=s.slice(0,a),u=ru(l.map((d=>d.record)),t.Lt(),(n=t.vt)!==null&&n!==void 0?n:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),s=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var s,r=Math.max(0,t-e.ft),i=(s=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&s!==void 0?s:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(r)),yield e.dt()}))()}Lt(){return su(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var s=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>s.length||(s.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),s.push(t),this._instance.setPersistedProperty(ut.LogsQueue,s),this.kt>s.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Bo((()=>{this.Nt=void 0,this.It()}),t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(ut.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X((function*(){e.Et();var s=e.flush().catch((()=>{}));t!==void 0?yield Ka(s,t):yield s}))()}flushWithTimeout(t){var e=this;return X((function*(){var s=e.flush();yield Ka(s,t,(()=>{s.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Zi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Ja(t){return String(t)+"000000"}function Ya(t,e,s,r){var i="";return r&&(i=Object.keys(r).sort().map((n=>JSON.stringify(n)+":"+JSON.stringify(r[n]))).join(",")),t+"\0"+e+"\0"+(s??"")+"\0"+i}let Nh=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s?.unit,attributes:s?.attributes})}gauge(t,e,s){this.Vt({name:t,type:"gauge",value:e,unit:s?.unit,attributes:s?.attributes})}histogram(t,e,s){this.Vt({name:t,type:"histogram",value:e,unit:s?.unit,attributes:s?.attributes})}flush(){var t=this,e=this.ct,s=(function(){var i=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return i.apply(this,arguments)}})(),r=s().finally((()=>{this.ct===r&&(this.ct=null)}));return this.ct=r,r}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var s,r;try{s=e.attributes?w({},e.attributes):void 0,r=Ya(e.type,e.name,e.unit,s)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(r);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:s,windowStartMs:Date.now()},this.Bt.set(r,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var s;switch(t.type){case"count":t.total=((s=t.total)!==null&&s!==void 0?s:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Zi.length+1).fill(0)});var r=t.hist;r.count+=1,r.sum+=e,r.min=Math.min(r.min,e),r.max=Math.max(r.max,e),r.bucketCounts[(function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length})(e,Zi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var s=L(e)?e:[e],r=t;for(var i of s)try{var n=i(r);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;r=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return r}$t(){this.Nt||(this.Nt=Bo((()=>{this.Nt=void 0,this.flush().catch((t=>{this.rt.error("Metrics flush failed:",t)}))}),this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return X((function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var s=t.Wt,r=yield t._instance.Jt(t.Gt(e));if(s===t.Wt)switch(r.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",r.error)}}}))()}Gt(t){return e=this.Xt(t),s=(function(n,o,a){return w({},n.resourceAttributes,{"service.name":n.serviceName||"unknown_service"},n.environment&&{"deployment.environment":n.environment},n.serviceVersion&&{"service.version":n.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),r=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Yr(s)},scopeMetrics:[{scope:{name:r,version:i},metrics:e}]}]};var e,s,r,i}Xt(t){var e=Ja(Date.now()),s=new Map;for(var r of t.values()){var i,n=Ya(r.type,r.name,r.unit,void 0),o=s.get(n);o||(o=w({name:r.name},r.unit&&{unit:r.unit}),r.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:r.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},s.set(n,o));var a=Yr((i=r.attributes)!==null&&i!==void 0?i:{}),l=Ja(r.windowStartMs);if(r.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=r.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(r.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=r.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else r.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:r.hist.count,sum:r.hist.sum,min:r.hist.min,max:r.hist.max,bucketCounts:r.hist.bucketCounts,explicitBounds:Zi})}return Array.from(s.values())}Yt(t){var e,s;for(var r of t){var i=r[0],n=r[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((s=n.total)!==null&&s!==void 0?s:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var wr,Za,Xi;function Mh(t){var e=globalThis._posthogChunkIds;if(e){var s=Object.keys(e);return Xi&&s.length===Za||(Za=s.length,Xi=s.reduce(((r,i)=>{wr||(wr={});var n=wr[i];if(n)r[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[i];if(u&&c){r[u]=c,wr[i]=[u,c];break}}return r}),{})),Xi}}class Lh{constructor(e,s,r){r===void 0&&(r=[]),this.coercers=e,this.stackParser=s,this.modifiers=r}buildFromUnknown(e,s){s===void 0&&(s={});var r=s&&s.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(r,s,0).apply(e),n=this.buildParsingContext(s),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,r),$exception_level:"error"}}modifyFrames(e){var s=this;return X((function*(){for(var r of e)r.stacktrace&&r.stacktrace.frames&&L(r.stacktrace.frames)&&(r.stacktrace.frames=yield s.applyModifiers(r.stacktrace.frames));return e}))()}coerceFallback(e){var s;return{type:"Error",value:"Unknown error",stack:(s=e.syntheticException)==null?void 0:s.stack,synthetic:!0}}parseStacktrace(e,s){var r,i;return e.cause!=null&&(r=this.parseStacktrace(e.cause,s)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?s.skipFirstLines:0),s.chunkIdMap)),w({},e,{cause:r,stack:i})}applyChunkIds(e,s){return e.map((r=>(r.filename&&s&&(r.chunk_id=s[r.filename]),r)))}applyCoercers(e,s){for(var r of this.coercers)if(r.match(e))return r.coerce(e,s);return this.coerceFallback(s)}applyModifiers(e){var s=this;return X((function*(){var r=e;for(var i of s.modifiers)r=yield i(r);return r}))()}convertToExceptionList(e,s){var r,i,n,o={type:e.type,value:e.value,mechanism:{type:(r=s.type)!==null&&r!==void 0?r:"generic",handled:(i=s.handled)===null||i===void 0||i,synthetic:(n=e.synthetic)!==null&&n!==void 0&&n}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,w({},s,{handled:!0}))),a}buildParsingContext(e){var s;return{chunkIdMap:Mh(this.stackParser),skipFirstLines:(s=e.skipFirstLines)!==null&&s!==void 0?s:1}}buildCoercingContext(e,s,r){r===void 0&&(r=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,s,o);return this.applyCoercers(n,a)}};return w({},s,{syntheticException:r==0?s.syntheticException:void 0,mechanism:e,apply:n=>i(n,r),next:n=>i(n,r+1)})}}var ms="?";function Bn(t,e,s,r,i){var n={platform:t,filename:e,function:s===""?ms:s,in_app:!0};return x(r)||(n.lineno=r),x(i)||(n.colno=i),n}var iu=(t,e)=>{var s=t.indexOf("safari-extension")!==-1,r=t.indexOf("safari-web-extension")!==-1;return s||r?[t.indexOf("@")!==-1?t.split("@")[0]:ms,s?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Oh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Dh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Bh=/\((\S*)(?::(\d+))(?::(\d+))\)/,jh=(t,e)=>{var s=Oh.exec(t);if(s)return Bn(e,s[1],ms,+s[2],+s[3]);var r=Dh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var i=Bh.exec(r[2]);i&&(r[2]=i[1],r[3]=i[2],r[4]=i[3])}var n=iu(r[1]||ms,r[2]);return Bn(e,n[1],n[0],r[3]?+r[3]:void 0,r[4]?+r[4]:void 0)}},Uh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Hh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Wh=(t,e)=>{var s=Uh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=Hh.exec(s[3]);r&&(s[1]=s[1]||"eval",s[3]=r[1],s[4]=r[2],s[5]="")}var i=s[3],n=s[1]||ms,o=iu(n,i);return Bn(e,i=o[1],n=o[0],s[4]?+s[4]:void 0,s[5]?+s[5]:void 0)}},Xa=/\(error: (.*)\)/;class zh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,s){var r=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:r?e.stack:void 0,cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var s=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?s+": "+e.message:s}isDOMException(e){return qr(e,"DOMException")}isDOMError(e){return qr(e,"DOMError")}}class qh{match(e){return(function(s){switch({}.toString.call(s)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Rc(s,Error)}})(e)}coerce(e,s){return{type:this.getType(e),value:this.getMessage(e,s),stack:this.getStack(e),cause:e.cause?s.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,s){var r=e.message;return String(r.error&&typeof r.error.message=="string"?r.error.message:r)}getStack(e){return e.stacktrace||e.stack||void 0}}class Vh{constructor(){}match(e){return!!qr(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,s){var r;if(e.error!=null)return s.apply(e.error);var i=s.apply(e.message);return w({},i,{stack:(r=this.pe(e))!==null&&r!==void 0?r:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var s=e;if(W(s.filename)&&s.filename.length>0){var r,i,n=(r=s.lineno)!==null&&r!==void 0?r:0,o=(i=s.colno)!==null&&i!==void 0?i:0;return`Error - at `+s.filename+":"+n+":"+o}}}var Gh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Kh{match(e){return typeof e=="string"}coerce(e,s){var r,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}getInfos(e){var s="Error",r=e,i=e.match(Gh);return i&&(s=i[1],r=i[2]),[s,r]}}var Jh=["fatal","error","warning","log","info","debug"];function nu(t,e){e===void 0&&(e=40);var s=Object.keys(t);if(s.sort(),!s.length)return"[object has no keys]";for(var r=s.length;r>0;r--){var i=s.slice(0,r).join(", ");if(e>=i.length)return r===s.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class Yh{match(e){return typeof e=="object"&&e!==null}coerce(e,s){var r,i,n=this.getErrorPropertyFromObject(e);return n?s.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(r=this.getStack(e))!==null&&r!==void 0?r:(i=s.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return No(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var s="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(s+=" with message: '"+e.message+"'"),s}if("message"in e&&typeof e.message=="string")return e.message;var r=this.getObjectClassName(e);return(r&&r!=="Object"?"'"+r+"'":"Object")+" captured as exception with keys: "+nu(e)}isSeverityLevel(e){return W(e)&&!Nn(e)&&Jh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(Ah(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Zh{match(e){return No(e)}coerce(e,s){var r,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+nu(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Xh{match(e){return $c(e)}coerce(e,s){var r;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}}}class Qh{match(e){return qr(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!No(e))return!1;try{var s=e.detail;return s!=null&&typeof s=="object"&&"reason"in s}catch{return!1}}coerce(e,s){var r,i=this.getUnhandledRejectionReason(e);return $c(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(r=s.syntheticException)==null?void 0:r.stack,synthetic:!0}:s.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var Zr="$message",Xr="$timestamp",ep=new Set([Zr,Xr]),Qi={enabled:!0,max_bytes:32768};function Qr(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:Qi.enabled,max_bytes:sp(t.max_bytes,Qi.max_bytes)}:w({},Qi)}class tp{constructor(e){this.Ke=[],this.Je=0,this.Ne=Qr(e)}setConfig(e){this.Ne=Qr(e),this.Xe()}add(e){var s=(function(i){var n;try{n=Fc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[Zr],u=a[Xr];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:n}}catch{return}})(e);if(s){var r=(function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var n=encodeURIComponent(i),o=0,a=0;n.length>a;a++)n[a]==="%"?(o+=1,a+=2):o+=1;return o})(s.json);r>this.Ne.max_bytes||(this.Ke.push({step:s.step,bytes:r}),this.Je+=r,this.Xe())}}getAttachable(){return this.Ke.map((e=>e.step))}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function sp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var s=Math.floor(t);return 0>s?e:s}var ou=function(t,e){var s=(e===void 0?{}:e).debugEnabled,r={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||s)&&!x(v.console)&&v.console){for(var n=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];r.k("error",...n)},critical(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];console.error(t,...n)},uninitializedWarning(i){r.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>ou(t+" "+i,n)};return r},k=ou("[PostHog.js]"),se=k.createLogger,rp=se("[ExternalScriptsLoader]"),en=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return rp.warn(e+" was requested but loading of external scripts is disabled."),s("Loading of external scripts is disabled");var r=C?.querySelectorAll("script");if(r){for(var i,n=function(){if(r[o].src===e){var l=r[o];return l.__posthog_loading_callback_fired?{v:s()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,s(void 0,u)})),l.onerror=u=>s(u),{v:void 0})}},o=0;r.length>o;o++)if(i=n())return i.v}var a=()=>{if(!C)return s("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,s(void 0,d)},l.onerror=d=>s(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return s("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,s)=>{if(e!=="remote-config"){var r;if(t.config.strict_script_versioning)r=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var i="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var n=3e5;i=i+"&t="+Math.floor(Date.now()/n)*n}r=t.requestRouter.endpointFor("assets",i)}en(t,r,s)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");en(t,o,s)}},$.__PosthogExtensions__.loadSiteApp=(t,e,s)=>{var r=t.requestRouter.endpointFor("api",e);en(t,r,s)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",sr="$device_id",tn="$device_model",Bs="__alias",js="__timers",jn="$autocapture_disabled_server_side",Un="$heatmaps_enabled_server_side",Hn="$exception_capture_enabled_server_side",Wn="$error_tracking_suppression_rules",zn="$error_tracking_capture_extension_exceptions",qn="$web_vitals_enabled_server_side",jo="$dead_clicks_enabled_server_side",Uo="$product_tours_enabled_server_side",Vn="$web_vitals_allowed_metrics",Vt="$session_recording_remote_config",lu="$replay_sample_rate",cu="$replay_override_sampling",uu="$replay_override_linked_flag",du="$replay_override_url_trigger",hu="$replay_override_event_trigger",cs="$sesid",Ho="$session_is_sampled",Bt="$enabled_feature_flags",Us="$active_feature_flags",Rr="$early_access_features",Gn="$feature_flag_details",Hs="$feature_flag_payloads",Tr="$feature_flag_request_id",ei="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Kn="$surveys",ti="$surveys_loaded_at",Jn="$surveys_activated",Nr="$surveys_activated_session",Mr="$surveys_activated_timestamps",Ws="ph_product_tours",Wt="$flag_call_reported",zs="$flag_call_reported_session_id",Lr="$feature_flag_errors",Gs="$feature_flag_evaluated_at",He="$user_state",Yn="$client_session_props",Zn="$capture_rate_limit",Xn="$initial_campaign_params",Qn="$initial_referrer_info",si="$initial_person_info",ri="$epp",br="$posthog_cookieless",pu="$cookieless_mode",fu="$sdk_debug_extensions_init_method",gu="$sdk_debug_extensions_init_time_ms",mu="$sdk_debug_recording_script_not_loaded",Wo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",ts="anonymous",Tt="identified",eo="identified_only",ii="visibilitychange",ni="beforeunload",os="$pageview",sn="$pageleave",rn="$identify",Qa="$groupidentify";function Er(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(fh(t))t.forEach(((r,i)=>e(r,i)));else for(var s in t)Ac.call(t,s)&&e(t[s],s)}var ee=function(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;e>r;r++)s[r-1]=arguments[r];for(var i of s)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Or(t){for(var e=Object.keys(t),s=e.length,r=new Array(s);s--;)r[s]=[e[s],t[e[s]]];return r}var el=function(t){try{return t()}catch{return}},ip=function(t){return function(){try{for(var e=arguments.length,s=new Array(e),r=0;e>r;r++)s[r]=arguments[r];return t.apply(this,s)}catch(i){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},zo=function(t){var e={};return Z(t,(function(s,r){(W(s)&&s.length>0||he(s))&&(e[r]=s)})),e},np=["herokuapp.com","vercel.app","netlify.app"];function op(t){var e=t?.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of np)if(s===r)return!1;return!0}function ie(t,e,s,r){var i=r??{},n=i.capture,o=i.passive;t?.addEventListener(e,s,{capture:n!==void 0&&n,passive:o===void 0||o})}function to(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",s=C.cookie.split(";").filter((n=>n.length)),r=0;s.length>r;r++){for(var i=s[r];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class oi{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,s,r,i){if(!Number.isInteger(e)||!Number.isInteger(s)||!Number.isInteger(r)||!Number.isInteger(i)||0>e||0>s||0>r||0>i||e>0xffffffffffff||s>4095||r>1073741823||i>4294967295)throw new RangeError("invalid field value");var n=new Uint8Array(16);return n[0]=e/Math.pow(2,40),n[1]=e/Math.pow(2,32),n[2]=e/Math.pow(2,24),n[3]=e/Math.pow(2,16),n[4]=e/256,n[5]=e,n[6]=112|s>>>8,n[7]=s,n[8]=128|r>>>24,n[9]=r>>>16,n[10]=r>>>8,n[11]=r,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new oi(n)}toString(){for(var e="",s=0;this.bytes.length>s;s++)e=e+(this.bytes[s]>>>4).toString(16)+(15&this.bytes[s]).toString(16),s!==3&&s!==5&&s!==7&&s!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new oi(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var s=0;16>s;s++){var r=this.bytes[s]-e.bytes[s];if(r!==0)return Math.sign(r)}return 0}}class ap{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var s=this.generateOrAbort();if(x(s))throw new Error("Could not generate UUID after timestamp reset");return s}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return oi.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new lp}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class lp{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>cp().toString(),cp=()=>(tl||(tl=new ap)).generate(),Ps="",up=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,s,r,i){if(!C)return!1;try{var n="",o="",a=(function(c,d){if(d){var h=(function(f,g){if(g===void 0&&(g=C),Ps)return Ps;if(!g||["localhost","127.0.0.1"].includes(f))return"";for(var m=f.split("."),_=Math.min(m.length,8),E="dmn_chk_"+dt();!Ps&&_--;){var b=m.slice(_).join("."),I=E+"=1;domain=."+b+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(E)&&(g.cookie=I+";max-age=0",Ps=b)}return Ps})(c);if(!h){var p=(f=>{var g=f.match(up);return g?g[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,r);if(s){var l=new Date;l.setTime(l.getTime()+864e5*s),n="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+n+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{pt.F(t,"",-1,e)}catch{return}}},nn=null,Q={N(){if(!$e(nn))return nn;var t=!0;if(x(v))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||k.error("localStorage unsupported; falling back to cookie store"),nn=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(s){Q.j(s)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},dp=[sr,"distinct_id",cs,Ho,ri,si,He],Sr={},hp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Sr[t]||null,H:t=>Sr[t]||null,F:(t,e)=>(Sr[t]=e,!0),q(t){delete Sr[t]}},Nt=null,ce={N(){if(!$e(Nt))return Nt;if(Nt=!0,x(v))Nt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Nt=!1),ce.q(t)}catch{Nt=!1}return Nt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(s){ce.j(s)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class pp{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ht}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,s=e.token,r=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(r?r+s:"__ph_opt_in_out_"+s)}get ei(){var e=this.ii.P(this.ri);return Ji(e)?1:M(_h,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,s=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==s){this.ni=s;var r=e==="localStorage"?pt:Q;r.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Ji(r.P(this.ri))),r.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>Ji(e)))}}function yu(t,e){var s,r=t==null||(s=t.config)==null?void 0:s.get_current_url;if(!Se(r))return e;try{var i=r(e);return W(i)&&i?i:e}catch(n){return k.error("Error in get_current_url, falling back to window.location.href",n),e}}var wu="__POSTHOG_TOOLBAR__",fp=1,gp=3,mp=11;function sl(t){return t instanceof Element&&(t.id===wu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===fp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===gp}function Eu(t){return!!t&&t.nodeType===mp&&Ft(t.host)}var Su=1e3;function qo(t){return t?Fi(t).split(/\s+/):[]}function rl(t,e){var s=(function(r){var i,n=v==null||(i=v.location)==null?void 0:i.href;return x(n)?void 0:yu(r,n)})(e);return!!(s&&t&&t.some((r=>s.match(r))))}function ai(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return qo(e)}function xu(t){return D(t)?null:Fi(t).split(/(\s+)/).filter((e=>Ks(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function rr(t){var e="";return ro(t)&&!Fu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(s){var r;bu(s)&&s.textContent&&(e+=(r=xu(s.textContent))!==null&&r!==void 0?r:"")})),Fi(e)}function on(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Vo=["a","button","form","input","select","textarea","label"];function so(t,e){if(x(e))return!0;var s,r=function(n){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(n,o))))return{v:!0}};for(var i of t)if(s=r(i))return s.v;return!1}function ku(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var vp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],_p=[...Iu,"+","-","−","–"],il=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,nl=[".ph-no-rageclick",".ph-no-capture"],yp=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Go(t))return!1;var s,r,i,n,o;if(Ke(e)?(s=!!e&&nl,r=void 0,i=!1):(s=(n=e?.css_selector_ignorelist)!==null&&n!==void 0?n:nl,r=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),s===!1||i&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(yp,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>il(h,f)||il(p,f)))}))})(r,a.map((l=>{var u;return{safeText:rr(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,s)}var Go=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Go(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var s=!1,r=[t],i=t;i.parentNode&&!Me(i,"body");)if(Eu(i.parentNode))r.push(i.parentNode.host),i=i.parentNode.host;else{var n=ku(i);if(!n)break;if(e||Vo.indexOf(n.tagName.toLowerCase())>-1)s=!0;else try{var o=v.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(s=!0)}catch{}r.push(n),i=n}return{parentIsUsefulElement:s,targetElementList:r}};function ro(t){for(var e=new Set,s=0,r=t;r.parentNode&&!Me(r,"body");r=r.parentNode){if(s++>=Su||e.has(r))return!1;e.add(r);var i=ai(r);if(M(i,"ph-sensitive")||M(i,"ph-no-capture"))return!1}if(M(ai(t),"ph-include"))return!0;var n=t.type||"";if(W(n))switch(n.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!W(o)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(o.replace(/[^a-zA-Z0-9]/g,""))}function Fu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var al=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),ll=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,wp=[16,15,14,13],bp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function Ep(t){for(var e=0,s=!1,r=t.length-1;r>=0;r--){var i=t.charCodeAt(r)-48;s&&(i*=2)>9&&(i-=9),e+=i,s=!s}return e%10==0}function Ks(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Fi(t);var s=e?al.test((t||"").replace(/[- ]/g,"")):(function(i){var n;for(ll.lastIndex=0;n=ll.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of wp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&Ep(d))return!0}}}return!1})(t);if(s)return!1;var r=e?bp.test(t):(function(i){var n;for(cl.lastIndex=0;n=cl.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&ul.test(o)&&ul.test(a)))return!0}return!1})(t);if(r)return!1}return!0}function dl(t){var e=rr(t);return Ks(e=(e+" "+Pu(t)).trim())?e:""}function Pu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(s){var r;if(s&&((r=s.tagName)==null?void 0:r.toLowerCase())==="span")try{var i=rr(s);e=(e+" "+i).trim(),s.childNodes&&s.childNodes.length&&(e=(e+" "+Pu(s)).trim())}catch(n){k.error("[AutoCapture]",n)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Sp(t){var e=t.attr__class;if(e)return L(e)?e:qo(e)}var xr=se("[Dead Clicks]"),xp=()=>!0,kp=t=>{var e,s=!((e=t.instance.persistence)==null||!e.get_property(jo)),r=t.instance.config.capture_dead_clicks;return Ke(r)?r:!!te(r)||s};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,s,r){this.instance=e,this.isEnabled=s,this.onCapture=r,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var s=e.config;"captureDeadClicks"in s&&(this.instance.persistence&&this.instance.persistence.register({[jo]:s.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var s,r;(s=$.__PosthogExtensions__)!=null&&s.initDeadClicksAutocapture?e():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?xr.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var s=te(this.instance.config.capture_dead_clicks)?w({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(C),xr.info("starting...")}}else xr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xr.info("stopping..."))}}var an=se("[SegmentIntegration]"),Au="posthog-js";function $u(t,e){var s=e===void 0?{}:e,r=s.organization,i=s.projectId,n=s.prefix,o=s.severityAllowList,a=o===void 0?["error"]:o,l=s.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,g;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var m=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=m,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,E=((d=c.exception)==null?void 0:d.values)||[],b=E.map((F=>w({},F,{stacktrace:F.stacktrace?w({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>w({},P,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=E[0])==null?void 0:h.value)||c.message,$exception_type:(p=E[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=E[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=E[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&i&&(I.$sentry_url=(n||"https://sentry.io/organizations/")+r+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class Ip{constructor(e,s,r,i,n,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:s,projectId:r,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(s,r,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:s,changeReason:i}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,s){var r,i=this.vi(e,s);return this.ui={pathname:(r=v?.location.pathname)!==null&&r!==void 0?r:"",pageViewId:s,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var s;return this.vi(e,(s=this.ui)==null?void 0:s.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,s){var r=this.ui;if(!r)return{$pageview_id:s};var i={$pageview_id:s,$prev_pageview_id:r.pageViewId},n=this._instance.scrollManager.getContext();if(n&&!this._instance.config.disable_scroll_properties){var o=n.maxScrollHeight,a=n.lastScrollY,l=n.maxScrollY,u=n.maxContentHeight,c=n.lastContentY,d=n.maxContentY;if(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?rt(a/o,0,1,k):1,p=o>1?rt(l/o,0,1,k):1,f=u>1?rt(c/u,0,1,k):1,g=u>1?rt(d/u,0,1,k):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:g})}}return r.pathname&&(i.$prev_pageview_pathname=r.pathname),r.timestamp&&(i.$prev_pageview_duration=(e.getTime()-r.timestamp.getTime())/1e3),i}}var ln=["flags","surveys"],Cp={[au]:{exposure:"hidden"},[Bs]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[js]:{exposure:"hidden"},[jn]:{exposure:"event"},[Un]:{exposure:"hidden"},[Hn]:{exposure:"event"},[Wn]:{exposure:"hidden"},[zn]:{exposure:"event"},[qn]:{exposure:"event"},[jo]:{exposure:"event"},[Uo]:{exposure:"hidden"},[Vn]:{exposure:"event"},[Vt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[cs]:{exposure:"hidden"},[Ho]:{exposure:"event"},[lu]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Bt]:{exposure:"hidden",storageGroup:"flags"},[Us]:{exposure:"hidden",storageGroup:"flags"},[Rr]:{exposure:"hidden"},[Gn]:{exposure:"hidden",storageGroup:"flags"},[Hs]:{exposure:"hidden",storageGroup:"flags"},[Tr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ei]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"surveys"},[ti]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Jn]:{exposure:"event"},[Nr]:{exposure:"hidden"},[Mr]:{exposure:"hidden"},[Ws]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[Wt]:{exposure:"hidden"},[zs]:{exposure:"hidden"},[Lr]:{exposure:"hidden"},[Gs]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Yn]:{exposure:"hidden"},[Zn]:{exposure:"hidden"},[Xn]:{exposure:"hidden"},[Qn]:{exposure:"hidden"},[si]:{exposure:"hidden"},[ri]:{exposure:"hidden"},[cu]:{exposure:"event"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[fu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},$sdk_debug_replay_event_trigger_status:{exposure:"event"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:"event"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:"event"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:"event"},$sdk_debug_replay_trigger_groups_count:{exposure:"event"},$sdk_debug_replay_url_trigger_status:{exposure:"event"},$session_recording_start_reason:{exposure:"event"}},Fp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Cp[t];if(e)return e;for(var s of Fp){var r=s[1];if(t.indexOf(s[0])===0)return r}},us=(t,e)=>{try{return JSON.stringify(t,((s,r)=>typeof r=="bigint"?r.toString():r),e)}catch{return Fc(t)}},li=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},vs=function(t,e){for(var s,r=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;r.length>i;i++){var n=r[i].split("=");if(n[0]===e){s=n;break}}if(!L(s)||2>s.length)return"";var o=s[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},ir=function(t,e,s){if(!t||!e||!e.length)return t;for(var r=t.split("#"),i=r[1],n=(r[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+s):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ci=function(t,e){var s=t.match(new RegExp(e+"=([^&]*)"));return s?s[1]:null},Ru=(t,e)=>t>=e&&kc(),Tu=(t,e,s,r)=>{if(t===0){if(kc()){var i=e+1;return i===s&&r(),i}return e}return 0},kr="https?://(.*)",_s=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Pp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",..._s],nr="",Ap=["li_fat_id"];function Nu(t,e,s){if(!C)return{};var r,i=e?[..._s,...s||[]]:[],n=Mu(ir(C.URL,i,nr),t),o=(r={},Z(Ap,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,n)}function Mu(t,e){var s=Pp.concat(e||[]),r={};return Z(s,(function(i){var n=vs(t,i);r[i]=n||null})),r}function Lu(t){var e=(function(n){return n?n.search(kr+"google.([^/?]*)")===0?"google":n.search(kr+"bing.com")===0?"bing":n.search(kr+"yahoo.com")===0?"yahoo":n.search(kr+"duckduckgo.com")===0?"duckduckgo":null:null})(t),s=e!="yahoo"?"q":"p",r={};if(!$e(e)){r.$search_engine=e;var i=C?vs(C.referrer,s):"";i.length&&(r.ph_keyword=i)}return r}function gl(){return navigator.language||navigator.userLanguage}var ui="$direct";function Ou(){return C?.referrer||ui}function Du(t,e,s){s===void 0&&(s=!1);var r=t?[..._s,...e||[]]:[],i=s?Ct(re?.href):re?.href,n=i?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:n?ir(n,r,nr):void 0}}function Bu(t,e){var s;e===void 0&&(e=!1);var r=t.r,i=t.u,n=e?Ct(i):i,o={$referrer:r,$referring_domain:r==null?void 0:r==ui?ui:(s=li(r))==null?void 0:s.host};if(n){o.$current_url=n;var a=li(n);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(n);ee(o,l)}if(r){var u=Lu(r);ee(o,u)}return o}function ju(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function $p(){try{return new Date().getTimezoneOffset()}catch{return}}var Rp={flags:Gs,surveys:ti},Tp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],ss="main";class cn{constructor(e,s,r){if(r===void 0&&(r=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=r,this.props={},this.mi=void 0,this.yi=(n=>{var o="";return n.token&&(o=n.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),n.persistence_name?"ph_"+n.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&k.info("Persistence loaded",e.persistence,w({},this.props)),this.update_config(e,e,s),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(s)&&s>0?s:0}isDisabled(){return!!this.xi}bi(e){Tp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var s,r=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...dp,...o];return w({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var g=c[f];$e(g)||g===""||(p[f]=g)}d=ee(h,p)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,p,f){var g=Q.F(u,c,void 0,void 0,f);try{var m={};l.forEach((_=>{c[_]&&(m[_]=c[_])})),Object.keys(m).length&&pt.F(u,m,d,h,p,f)}catch(_){Q.j(_)}return g},q(u,c){try{v?.localStorage.removeItem(u),pt.q(u,c)}catch(d){Q.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,n=e.persistence.toLowerCase();return n==="localstorage"&&Q.N()?(s=Q,i=!0):n==="localstorage+cookie"&&r.N()?(s=r,i=!0):n==="sessionstorage"&&ce.N()?s=ce:n==="memory"?s=hp:n==="cookie"?s=pt:r.N()?(s=r,i=!0):s=pt,this.fi=i,s}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((s,r)=>{var i=Mt(r);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(s))return;e[r]=s}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of ln){var s=Q.H(this.Si(e));if(s&&!mt(s)){var r=this.Mi(e);r.persisted=!0,this.Ti(e)||(r.fingerprint=this.Ei(s,e)),this.Ii(e,s)||ee(this.props,s)}}}Ti(e){return Object.keys(this.props).some((s=>{var r;return((r=Mt(s))==null?void 0:r.storageGroup)===e}))}Ii(e,s){var r=Rp[e];if(!r)return!1;var i=s[r],n=this.props[r];return he(i)&&he(n)&&n>i}refreshKey(e){var s;if(!this.xi){var r=this.pi?(s=Mt(e))==null?void 0:s.storageGroup:void 0,i=r?Q.H(this.Si(r)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(r){var n=this.ii.H(this.yi);if(n&&e in n)return void this.Pi(e,n[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,ss))}Li(){var e=this.Di(),s=e.main,r=e.groups;for(var i of(this.Oi(this.ii,this.yi,s,ss),ln)){var n,o=r[i];(!mt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},s={flags:{},surveys:{}};return Z(this.props,((r,i)=>{var n,o=(n=Mt(i))==null?void 0:n.storageGroup;o?s[o][i]=r:e[i]=r})),{main:e,groups:s}}Ei(e,s){if(s===ss)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var r={};return Z(e,((i,n)=>{var o;r[n]=(o=Mt(n))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(r)}Oi(e,s,r,i){var n=this.Mi(i);if(i===ss||n.dirty||x(n.fingerprint)){var o;try{if((o=this.Ei(r,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(s,r,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==ss&&(n.persisted=!0),x(o)||(n.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+s+'"; will retry on next save')}}remove(e){var s=(e===void 0?{}:e).keepGroupEntries,r=s!==void 0&&s;if(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!r&&this.gi)for(var i of ln)Q.q(this.Si(i));r?delete this.ci[ss]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,s,r){if(te(e)){x(s)&&(s="None"),this.$i=x(r)?this.ji:r;var i=!1;if(Z(e,((n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==s||(this.Pi(o,n),i=!0)})),i)return this.save(),!0}return!1}register(e,s){if(te(e)){this.$i=x(s)?this.ji:s;var r=!1;if(Z(e,((i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||L(i))&&(this.Pi(n,i),r=!0)})),r)return this.save(),!0}return!1}unregister(e){var s=typeof e=="string"?[e]:e,r=!1;for(var i of s)i in this.props&&(this.Ri(i),r=!0);r&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var s=Nu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(zo(s))||this.register(s),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Lu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Ou(),$referring_domain:C!=null&&C.referrer&&((e=li(C.referrer))==null?void 0:e.host)||ui},void 0)}set_initial_person_info(){this.props[Xn]||this.props[Qn]||this.register_once({[si]:Du(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};Z([Qn,Xn],(i=>{var n=this.props[i];n&&Z(n,(function(o,a){e["$initial_"+Tn(a)]=o}))}));var s=this.props[si];if(s){var r=(function(i,n){n===void 0&&(n=!1);var o=Bu(i,n),a={};return Z(o,(function(l,u){a["$initial_"+Tn(u)]=l})),a})(s,this.Ne.disable_capture_url_hashes);ee(e,r)}return e}safe_merge(e){return Z(this.props,(function(s,r){r in e||(e[r]=s)})),e}update_config(e,s,r){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!r),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==s.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],s.cookie_persisted_properties||[]),n=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=n,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,s){var r=this.props[js]||{};r[e]=s,this.Pi(js,r),this.save()}remove_event_timer(e){var s=this.props[js]||{},r=s[e];return x(r)||(delete s[e],this.Pi(js,s),this.save()),r}get_property(e){return this.props[e]}set_property(e,s){this.Pi(e,s),this.save()}Pi(e,s){var r;this.props[e]=s,(r=Mt(e))!=null&&r.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var s,r=(s=Mt(e))==null?void 0:s.storageGroup;r&&(this.Mi(r).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Ir(t){var e=!0;return{dispose(){if(e){e=!1;var s=t();s&&Se(s.then)&&s.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},As={Activation:"events",Cancellation:"cancelEvents"},un={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},dn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},io={Popover:"popover",Inline:"inline"},Np={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=se("[RateLimiter]");class Mp{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=s=>{var r=s.text;if(r&&r.length)try{(JSON.parse(r).quota_limited||[]).forEach((i=>{vl.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void vl.warn('could not rate limit - continuing. Error: "'+i?.message+'"',{text:r})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var s,r,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(s=(r=this.instance.persistence)==null?void 0:r.get_property(Zn))!==null&&s!==void 0?s:{tokens:n,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>n&&(l.tokens=n);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(he(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(Zn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var s=this.instance.config.property_denylist;return!L(s)||!s.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&re!=null&&re.pathname)return""+((e=re.origin)!==null&&e!==void 0?e:"")+re.pathname}Hi(e){var s,r,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(s=(r=this.instance).get_session_id)==null?void 0:s.call(r):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+n+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var s=this.serverLimits[e||"events"]||!1;return s!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return xt.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void xt.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return xt.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((s=>{this.Zi(s.json,s),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){xt.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&C&&C.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var s=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;s!==0&&(this.Ki=setInterval((()=>{this.refresh()}),s))}}Zi(e,s){!e&&s&&(s.statusCode===0?s.error||xt.warn("Failed to fetch remote config from PostHog."):xt.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){xt.error("Error applying remote config",i)}if(e?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var r;(r=this._instance.featureFlags)==null||r.ensureFlagsLoaded()}catch(i){xt.error("Error loading feature flags",i)}}}var qe=Uint8Array,Ae=Uint16Array,ys=Uint32Array,Ko=new qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Jo=new qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),_l=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hu=function(t,e){for(var s=new Ae(31),r=0;31>r;++r)s[r]=e+=1<r;++r)for(var n=s[r];s[r+1]>n;++n)i[n]=n-s[r]<<5|r;return[s,i]},Wu=Hu(Ko,2),no=Wu[1];Wu[0][28]=258,no[258]=28;for(var yl=Hu(Jo,0)[1],zu=new Ae(32768),ne=0;32768>ne;++ne){var rs=(43690&ne)>>>1|(21845&ne)<<1;zu[ne]=((65280&(rs=(61680&(rs=(52428&rs)>>>2|(13107&rs)<<2))>>>4|(3855&rs)<<4))>>>8|(255&rs)<<8)>>>1}var Js=function(t,e,s){for(var r=t.length,i=0,n=new Ae(e);r>i;++i)++n[t[i]-1];var o,a=new Ae(e);for(i=0;e>i;++i)a[i]=a[i-1]+n[i-1]<<1;for(o=new Ae(r),i=0;r>i;++i)o[i]=zu[a[t[i]-1]++]>>>15-t[i];return o},Jt=new qe(288);for(ne=0;144>ne;++ne)Jt[ne]=8;for(ne=144;256>ne;++ne)Jt[ne]=9;for(ne=256;280>ne;++ne)Jt[ne]=7;for(ne=280;288>ne;++ne)Jt[ne]=8;var di=new qe(32);for(ne=0;32>ne;++ne)di[ne]=5;var Lp=Js(Jt,9),Op=Js(di,5),qu=function(t){return(t/8>>0)+(7&t&&1)},Vu=function(t,e,s){(s==null||s>t.length)&&(s=t.length);var r=new(t instanceof Ae?Ae:t instanceof ys?ys:qe)(s-e);return r.set(t.subarray(e,s)),r},ot=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8},$s=function(t,e,s){var r=e/8>>0;t[r]|=s<<=7&e,t[r+1]|=s>>>8,t[r+2]|=s>>>16},hn=function(t,e){for(var s=[],r=0;t.length>r;++r)t[r]&&s.push({s:r,f:t[r]});var i=s.length,n=s.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(s[0].s+1);return o[s[0].s]=1,[o,1]}s.sort((function(F,P){return F.f-P.f})),s.push({s:-1,f:25001});var a=s[0],l=s[1],u=0,c=1,d=2;for(s[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=s[s[d].f>s[u].f?u++:d++],l=s[u!=c&&s[d].f>s[u].f?u++:d++],s[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(r=1;i>r;++r)n[r].s>h&&(h=n[r].s);var p=new Ae(h+1),f=oo(s[c-1],p,0);if(f>e){r=0;var g=0,m=f-e,_=1<r;++r){var E=n[r].s;if(e>=p[E])break;g+=_-(1<>>=m;g>0;){var b=n[r].s;e>p[b]?g-=1<=0&&g;--r){var I=n[r].s;p[I]==e&&(--p[I],++g)}f=e}return[new qe(p),f]},oo=function(t,e,s){return t.s==-1?Math.max(oo(t.l,e,s+1),oo(t.r,e,s+1)):e[t.s]=s},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var s=new Ae(++e),r=0,i=t[0],n=1,o=function(l){s[r++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++n;else{if(!i&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(i),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(i);n=1,i=t[a]}return[s.subarray(0,r),e]},Rs=function(t,e){for(var s=0,r=0;e.length>r;++r)s+=t[r]*e[r];return s},ao=function(t,e,s){var r=s.length,i=qu(e+2);t[i]=255&r,t[i+1]=r>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;r>n;++n)t[i+n+4]=s[n];return 8*(i+4+r)},bl=function(t,e,s,r,i,n,o,a,l,u,c){ot(e,c++,s),++i[256];for(var d=hn(i,15),h=d[0],p=d[1],f=hn(n,15),g=f[0],m=f[1],_=wl(h),E=_[0],b=_[1],I=wl(g),F=I[0],P=I[1],B=new Ae(19),S=0;E.length>S;++S)B[31&E[S]]++;for(S=0;F.length>S;++S)B[31&F[S]]++;for(var A=hn(B,7),R=A[0],N=A[1],T=19;T>4&&!R[_l[T-1]];--T);var O,J,z,H,oe=u+5<<3,pe=Rs(i,Jt)+Rs(n,di)+o,Ie=Rs(i,h)+Rs(n,g)+o+14+3*T+Rs(B,R)+(2*B[16]+3*B[17]+7*B[18]);if(pe>=oe&&Ie>=oe)return ao(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){O=Js(h,p),J=h,z=Js(g,m),H=g;var _e=Js(R,N);for(ot(e,c,b-257),ot(e,c+5,P-1),ot(e,c+10,T-4),c+=14,S=0;T>S;++S)ot(e,c+3*S,R[_l[S]]);c+=3*T;for(var Ce=[E,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=Lp,J=Jt,z=Op,H=di;for(S=0;a>S;++S)if(r[S]>255){var me;$s(e,c,O[257+(me=r[S]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,r[S]>>>23&31),c+=Ko[me]);var ge=31&r[S];$s(e,c,z[ge]),c+=H[ge],ge>3&&($s(e,c,r[S]>>>5&8191),c+=Jo[ge])}else $s(e,c,O[r[S]]),c+=J[r[S]];return $s(e,c,O[256]),c+J[256]},Dp=new ys([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Bp=(function(){for(var t=new ys(256),e=0;256>e;++e){for(var s=e,r=9;--r;)s=(1&s&&3988292384)^s>>>1;t[e]=s}return t})(),pn=function(t,e,s){for(;s;++e)t[e]=s,s>>>=8};function jp(t,e){e===void 0&&(e={});var s=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Bp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),r=t.length;s.p(t);var i,n,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,(function(d,h,p,f,g,m){var _=d.length,E=new qe(f+_+5*(1+Math.floor(_/7e3))+g),b=E.subarray(f,E.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=ao(b,I,d.subarray(F,P)):(b[F]=!0,I=ao(b,I,d.subarray(F,_)))}else{for(var B=Dp[h-1],S=B>>>13,A=8191&B,R=(1<F;++F){var me=z(F),ge=32767&F,Ye=T[me];if(N[ge]=Ye,T[me]=ge,F>=Re){var Rt=_-F;if((Ie>7e3||Ce>24576)&&Rt>423){I=bl(d,b,0,H,oe,pe,_e,Ce,ae,F-ae,I),Ce=Ie=_e=0,ae=F;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)pe[de]=0}var Ve=2,St=0,ks=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,mr=Math.min(32767,F),vr=Math.min(258,Rt);mr>=Be&&--ks&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;vr>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var _r=Math.min(Be,je-2),Qt=0;for(de=0;_r>de;++de){var es=F-Be+de+32768&32767,Is=es-N[es]+32768&32767;Is>Qt&&(Qt=Is,Ye=es)}}}Be+=(ge=Ye)-(Ye=N[ge])+32768&32767}if(St){H[Ce++]=268435456|no[Ve]<<18|yl[St];var Ta=31&no[Ve],Na=31&yl[St];_e+=Ko[Ta]+Jo[Na],++oe[257+Ta],++pe[Na],Re=F+Ve,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=bl(d,b,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(E,0,f+qu(I)+g)})(n=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),c=u.length;return(function(d,h){var p=h.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>h.level?4:h.level==9?2:0,d[9]=3,h.mtime!=0&&pn(d,4,Math.floor(new Date(h.mtime||Date.now())/1e3)),p){d[3]=8;for(var f=0;p.length>=f;++f)d[f+10]=p.charCodeAt(f)}})(u,e),pn(u,c-8,s.d()),pn(u,c-4,r),u}var Up=!!An||!!To,Gu="text/plain",Dr=!1,Ku=(t,e)=>{var s=t.split("#"),r=s[1],i=s[0].split("?"),n=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return n+(a?"?"+a:"")+(r?"#"+r:"")},Ai=function(t,e,s){var r;s===void 0&&(s=!0);var i=t.split("?"),n=i[0],o=i[1],a=w({},e),l=(r=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=s&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&r!==void 0?r:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(g,m){x(g)||x(m)||m==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(g)?g.name:g.toString()),p=encodeURIComponent(m),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},fn=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===xe.GZipJS){var r=jp((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(m){c[d++]=m},p=0;u>p;++p){if(d+5>c.length){var f=new qe(d+8+(u-p<<1));f.set(c),c=f}var g=a.charCodeAt(p);128>g?h(g):2048>g?(h(192|g>>>6),h(128|63&g)):g>55295&&57344>g?(h(240|(g=65536+(1047552&g)|1023&a.charCodeAt(++p))>>>18),h(128|g>>>12&63),h(128|g>>>6&63),h(128|63&g)):(h(224|g>>>12),h(128|g>>>6&63),h(128|63&g))}return Vu(c,0,d)})(us(e)),{mtime:0});return{contentType:Gu,body:r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength),estimatedSize:r.byteLength}}if(s===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(us(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:us(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=us(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,s,r=()=>t.transport==="sendBeacon"?{url:Ai(t.url,{compression:xe.Base64}),encodedBody:fn(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:fn(w({},t,{compression:void 0,Ji:void 0}))};try{e=fn(t)}catch(i){if(Ua(t.compression,vs(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),r();throw i}return e&&Ua(t.compression,vs(t.url,"compression"))&&!((s=e.body)instanceof ArrayBuffer?$n(new Uint8Array(s)):ArrayBuffer.isView(s)&&$n(new Uint8Array(s.buffer,s.byteOffset,s.byteLength)))?(Dr=!0,r()):{url:t.url,encodedBody:e}},Yu=t=>{try{return Ju(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Hp=(function(){var t=X((function*(e){var s=us(e.data),r=yield(function(n,o,a){return Rn.apply(this,arguments)})(s,Y.DEBUG,{rethrow:!0});if(!r)return e;var i=yield r.arrayBuffer();return w({},e,{Ji:{contentType:Gu,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Wp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Wp.test(t?.message||""),Xu=t=>{var e=Yu(t);if(e){var s=e.url,r=e.encodedBody,i=r??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,(function(f,g){l.append(g,f)})),n&&l.append("Content-Type",n);var u=null,c=!1;if(Ma){var d=new Ma;u={signal:d.signal,timeout:setTimeout((()=>{var f,g;c=!0,d.abort((f=t.timeout,(g=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",g))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||Zu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;To(s,w({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((g=>{var m={statusCode:f.status,text:g};if(f.status===200)try{m.json=JSON.parse(g)}catch(_){k.error(_)}t.callback==null||t.callback(m)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},lo=t=>{try{var e,s=Ju(t),r=s.url,i=s.encodedBody,n=i??{},o=n.body,a=n.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:n.contentType});if(ke.sendBeacon(r,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:w({},t.data,{batch:h});return lo(w({},t,{data:d(u.slice(0,c))})),void lo(w({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(w({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var i=r==="query"?e==="POST"?"sent_at":"_":void 0;return Ai(s===xe.GZipJS?Ku(t,"compression"):t,w({},i?{[i]:Date.now().toString()}:{},s===xe.GZipJS?{}:{compression:s}))},Br=[];To&&Br.push({transport:"fetch",method:Xu}),An&&Br.push({transport:"XHR",method(t){var e=Yu(t);if(e){var s=new An,r=e.encodedBody;s.open(t.method||"GET",e.url,!0);var i=r??{},n=i.contentType,o=i.body;Z(t.headers,(function(a,l){s.setRequestHeader(l,a)})),n&&s.setRequestHeader("Content-Type",n),t.timeout&&(s.timeout=t.timeout),s.onreadystatechange=()=>{if(s.readyState===4){var a={statusCode:s.status,text:s.responseText};if(s.status===200)try{a.json=JSON.parse(s.responseText)}catch{}t.callback==null||t.callback(a)}},s.send(o)}}}),ke!=null&&ke.sendBeacon&&Br.push({transport:"sendBeacon",method:lo});var co=3e3;class zp{constructor(e,s){this.Xi=!0,this.tr=[],this.er=rt(s?.flush_interval_ms||co,250,5e3,k.createLogger("flush interval"),co),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},s=Object.values(e);[...s.filter((r=>r.url.indexOf("/e")===0)),...s.filter((r=>r.url.indexOf("/e")!==0))].map((r=>{this.lr(w({},r,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var s=this.ar(),r=function(){var n=s[i],o=new Date().getTime();n.data&&L(n.data)&&Z(n.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(n)};for(var i in s)r()}}),this.er))}lr(e){try{this.ir(e)}catch(s){k.error(s)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(s=>{var r,i=s,n=(i?i.batchKey:null)||i.url;x(e[n])&&(e[n]=w({},i,{data:[]})),(r=e[n].data)==null||r.push(i.data)})),this.tr=[],e}}var qp=["retriesPerformedSoFar"];class Vp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var s=e.retriesPerformedSoFar,r=Ic(e,qp);lt(s)&&(r.url=Ai(r.url,{retry_count:s})),this._instance._send_request(w({},r,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(s??0))return void this.At(w({retriesPerformedSoFar:s},r));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(s??0)+" retries.")}r.callback==null||r.callback(i)}}))}At(e){var s=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=s+1;var r=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(s),i=Date.now()+r;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+r;navigator.onLine||(n+=" (Browser is offline)"),k.warn(n),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),s=[],r=this.tr.filter((n=>e>n.retryAt||(s.push(n),!1)));if(this.tr=s,r.length>0)for(var i of r)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var s=e.requestOptions;try{this._instance._send_request(w({},s,{transport:"sendBeacon"}))}catch(r){k.error(r)}}this.tr=[]}}class Gp{constructor(e){this.yr=()=>{var s,r,i,n;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(s=this.br.maxScrollY)!==null&&s!==void 0?s:0),this.br.maxScrollHeight=Math.max(l,(r=this.br.maxScrollHeight)!==null&&r!==void 0?r:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(i=this.br.maxContentY)!==null&&i!==void 0?i:0),this.br.maxContentHeight=Math.max(c,(n=this.br.maxContentHeight)!==null&&n!==void 0?n:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var s of e){var r=v?.document.querySelector(s);if(r)return r}}wr(e){var s=e==="y"?"scrollTop":"scrollLeft";if(this._r){var r=this.scrollElement();return r&&r[s]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Kp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,s,r,i){this.kr=n=>{var o=this.Sr();if(!o||o.sessionId!==n){var a={sessionId:n,props:this.Cr(this._instance)};this.Mr.register({[Yn]:a})}},this._instance=e,this.Tr=s,this.Mr=r,this.Cr=i||Kp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Yn]}getSetOnceProps(){var e,s=(e=this.Sr())==null?void 0:e.props;return s?"r"in s?Bu(s,this._instance.config.disable_capture_url_hashes):{$referring_domain:s.referringDomain,$pathname:s.initialPathName,utm_source:s.utm_source,utm_campaign:s.utm_campaign,utm_medium:s.utm_medium,utm_content:s.utm_content,utm_term:s.utm_term}:{}}getSessionProps(){var e={};return Z(zo(this.getSetOnceProps()),((s,r)=>{r==="$current_url"&&(r="url"),e["$session_entry_"+Tn(r)]=s})),e}}class Yo{on(e,s){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(s),()=>{this.Er[e]=this.Er[e].filter((r=>r!==s))}}emit(e,s){for(var r of this.Er[e]||[])r(s);for(var i of this.Er["*"]||[])i(e,s)}constructor(){this.Er={}}}var Ts=se("[SessionId]");class xl{on(e,s){return this.Ir.on(e,s)}constructor(e,s,r){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Yo,this.Lr=(u,c)=>!(!lt(u)||!lt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===ht)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=s||dt,this.Nr=r||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*rt(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Ts.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+n+"_window_id",this.Br="ph_"+n+"_primary_window_exists",this.Hr()){var o=ce.H(this.jr),a=ce.H(this.Br);o&&!a?this.Or=o:ce.q(this.jr),ce.F(this.Br,!0)}if((i=this.Ne.bootstrap)!=null&&i.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Ts.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((s=>s!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var s=this.Pr;return!$e(s)&&!$e(e)&&5e3>Math.abs(e-s)}Ur(e,s,r){var i=s!==this._sessionActivityTimestamp,n=!(e!==this.Dr||r!==this._sessionStartTimestamp);this._sessionStartTimestamp=r,this._sessionActivityTimestamp=s,this.Dr=e,n&&!i||n&&this.Zr(s)||(this.Pr=s,this.Mr.register({[cs]:[s,e,r]}))}Gr(){var e,s=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(s)&&s>0}Qr(){this.Gr()?this.Mr.refreshKey(cs):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var s=this.Jr();s[1]===this.Dr&&s[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[cs]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],s=lt(e)?e:0,r=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(s,r)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[cs];return L(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&v&&(v.removeEventListener(ni,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,ni,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,s){if(e===void 0&&(e=!1),s===void 0&&(s=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var r=s||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(r-o)>864e5,c=!1,d=!1,h=!n,p=n,f=!h&&!e&&this.Lr(r,a);if(f){(f=this.Xr(r))||Ts.info("cross-tab refresh kept the session alive",{sessionId:n});var g=this.Jr();n=g[1],o=g[2]}h||f||u?(n=this.$r(),l=this.Nr(),Ts.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=r,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==p)&&(Ts.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var m=lt(a)&&e&&!u?a:r,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,m,_),e||this.qr();var E={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(n,l,E))),{sessionId:n,windowId:l,sessionStartTimestamp:_,changeReason:c?E:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Qu=function(t,e){if(!t)return!1;var s=t.userAgent;if(s&&Wa(s,e))return!0;try{var r=t?.userAgentData;if(r!=null&&r.brands&&r.brands.some((i=>Wa(i?.brand,e))))return!0}catch{}return!!t.webdriver};function ed(){return(ed=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),s=e?.model;return W(s)&&s.length>0?s:void 0}catch(r){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",r)}}))).apply(this,arguments)}var hi=function(t,e){if(!(function(s){try{new RegExp(s)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function gn(t,e,s){return us({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:s})}var td={exact:(t,e)=>e.some((s=>t.some((r=>s===r)))),is_not:(t,e)=>e.every((s=>t.every((r=>s!==r)))),regex:(t,e)=>e.some((s=>t.some((r=>hi(s,r))))),not_regex:(t,e)=>e.every((s=>t.every((r=>!hi(s,r))))),icontains:(t,e)=>e.map(Cr).some((s=>t.map(Cr).some((r=>s.includes(r))))),not_icontains:(t,e)=>e.map(Cr).every((s=>t.map(Cr).every((r=>!s.includes(r))))),gt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((i=>r>parseFloat(i)))})),lt:(t,e)=>e.some((s=>{var r=parseFloat(s);return!isNaN(r)&&t.some((i=>rt.toLowerCase();function sd(t,e){return!t||Object.entries(t).every((s=>{var r=s[1],i=e?.[s[0]];if(x(i)||$e(i))return!1;var n=[String(i)],o=td[r.operator];return!!o&&o(r.values,n)}))}var uo="custom",kl="i.posthog.com",Jp=/^\/static\//;class Yp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,s=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return s||(s=this.apiHost.replace("."+kl,".posthog.com")),s==="https://app.posthog.com"?"https://us.posthog.com":s}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":uo),this.en[this.apiHost]}rn(e){if(Jp.test(e)){var s=this.instance.config.asset_host;if(typeof s=="string")return s.trim().replace(/\/$/,"")||void 0}}endpointFor(e,s){if(s===void 0&&(s=""),s&&(s=s[0]==="/"?s:"/"+s),e==="ui")return this.uiHost+s;if(e==="flags")return this.flagsApiHost+s;if(e==="assets"){var r=this.rn(s);if(r)return""+r+s}if(this.region===uo)return this.apiHost+s;var i=kl+s;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function rd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=se("[Surveys]"),id="seenSurvey_",nd=t=>{try{var e=(s=>((r,i)=>""+id+(function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id})(i))(0,s))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(s){q.error("Failed to persist survey seen state",s)}},Zp=[un.Popover,un.Widget,un.API],Xp={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},Qp=se("[PostHog ExternalIntegrations]"),ef={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class tf{constructor(e){this._instance=e}ai(e,s){var r;(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,e,(i=>{if(i)return Qp.error("failed to load script",i);s()}))}startIfEnabledOrStop(){var e=this,s=function(){var n,o,a,l=r[0],u=r[1];!u||(n=$.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(ef[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;s()}}}class sf{constructor(e,s){this.rt=e,this.nn=s,this.sn=new Map,this.an=!1}add(e){var s=this;return X((function*(){if(s.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(s.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');s.sn.set(e.name,e);try{var r=e.setup(s.nn);r&&(yield r)}catch(n){var i=s.sn.get(e.name)===e;i&&s.sn.delete(e.name),s.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&s.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var s of(this.sn.clear(),e))this.ln(s)}}ln(e){try{var s=e.dispose==null?void 0:e.dispose();s&&Se(s.then)&&s.then(void 0,(r=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)}))}catch(r){this.rt.error('Failed to dispose browser extension "'+e.name+'"',r)}}}class rf{constructor(e){this._instance=e}initialize(){}get(e){var s=this._instance.persistence;if(typeof e=="string")return s?.get_property(e);var r={};for(var i of e){var n=s?.get_property(i);x(n)||(r[i]=n)}return r}set(e,s){var r;(r=this._instance.persistence)==null||r.register(typeof e=="string"?{[e]:s}:e)}remove(e){var s;(s=this._instance.persistence)==null||s.unregister(e)}}var Il="extensionsRemoteConfig";class nf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new rf(e),this.onEvent=s=>Ir(this.instance.on("eventCaptured",(r=>{try{s({event:r.event,properties:r.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}}))),this.onRemoteConfig=s=>{if(this.an)return Ir((()=>{}));var r=n=>{try{s(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(Il,r);return this.un&&r(this.un),Ir(i)},this.vn=new sf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(sr))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(sr);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,s;return(e=(s=this.instance.persistence)==null?void 0:s.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,s,r,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(s=n?.sessionId)!==null&&s!==void 0?s:"",windowId:(r=n?.windowId)!==null&&r!==void 0?r:"",sessionStartTimestamp:(i=n?.sessionStartTimestamp)!==null&&i!==void 0?i:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,s,r){var i=this;return X((function*(){r?i.instance.capture(e,s,{timestamp:r.timestamp,uuid:r.uuid,$set:r.set,$set_once:r.setOnce}):i.instance.capture(e,s)}))()}registerDynamicEventProperties(e){return Ir(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,s){var r=this;return X((function*(){var i;s===void 0&&(s={});var n=r.instance.requestRouter.endpointFor((i=s.target)!==null&&i!==void 0?i:"api",e),o={method:s.method,url:s.query?Ai(n,s.query):n,data:s.body,headers:s.headers,timeout:s.timeoutMs,fireCallbackOnDrop:!0,transport:s.transport,compression:s.compression,timestampMode:s.sentAt};return s.transport==="sendBeacon"?(r.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,r.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Ys={},mn=0,pi=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Ns="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",od="Invalid value for property_denylist config: ",of=["token","distinct_id",pu],as="posthog",ad=!Up&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,vn=t=>{var e;return w({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:op(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:pi,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:re&&W(re?.search)&&re.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(s){k.error("Bad HTTP status: "+s.statusCode+" "+s.text)},get_device_id:s=>s,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:eo,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:co},error_tracking:{},_onCapture:pi},(s=>({rageclick:s&&s>="2026-05-30"?{content_ignorelist:_p,ignore_text_selection:!0}:!s||"2025-11-30">s||{content_ignorelist:!0},capture_pageview:!s||"2025-05-24">s||"history_change",session_recording:s&&s>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:s&&s>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:s&&s>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:s&&s>="2026-01-30"?"head":"body",internal_or_test_user_hostname:s&&s>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:s&&s>="2026-05-30"?250:0,split_storage:!(!s||"2026-05-30">s),detect_google_search_app:!(!s||"2026-05-30">s),disable_capture_url_hashes:!(!s||"2026-06-25">s)}))(t))},af=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Pl=t=>{var e={};for(var s of af){var r=s[0],i=s[1];x(t[r])||(e[i]=t[r])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),n};class lf{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,s){if(e){var r=this.sn.indexOf(e);r!==-1&&this.sn.splice(r,1)}return this.sn.push(s),s.initialize==null||s.initialize(),s}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new lf,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Yo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=vn(),this.SentryIntegration=Ip,this.sentryIntegration=r=>(function(i,n){var o=$u(i,n);return{name:Au,processEvent:a=>o(a)}})(this,r),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new Gp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Mp(this),this.requestRouter=new Yp(this),this.consent=new pp(this),this.externalIntegrations=new tf(this);var s=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=s.featureFlags&&new s.featureFlags(this),this.toolbar=s.toolbar&&new s.toolbar(this),this.surveys=s.surveys&&new s.surveys(this),this.conversations=s.conversations&&new s.conversations(this),this.logs=s.logs&&new s.logs(this),this.metrics=s.metrics&&new s.metrics(this),this.experiments=s.experiments&&new s.experiments(this),this.exceptions=s.exceptions&&new s.exceptions(this),this.people={set:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(o),n?.({})},set_once:(r,i,n)=>{var o=W(r)?{[r]:i}:r;this.setPersonProperties(void 0,o),n?.({})}},this.on("eventCaptured",(r=>k.info('send "'+r?.event+'"',r)))}init(e,s,r){if(r&&r!==as){var i,n=(i=Ys[r])!==null&&i!==void 0?i:new Te;return n._init(e,s,r),Ys[r]=n,Ys[as][r]=n,n}return this._init(e,s,r)}_init(e,s,r){var i,n;s===void 0&&(s={});var o,a=W(e)?e.trim():"";if(!a)return k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=vn(s.defaults),s.debug=this.Cn(s.debug),this.Mn=s,this.Tn=[],s.person_profiles?this.xn=s.person_profiles:s.process_person&&(this.xn=s.process_person);var l=vn(s.defaults),u=Pl(s),c=ee({},l,u,{name:r,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=s.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new cn(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new cn(w({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=w({},this.persistence.props),f=w({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new zp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new Vp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,B,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:s,thisC:w({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=s.bootstrap)!=null&&i.distinctID||(s.bootstrap=w({},s.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=s.bootstrap)==null?void 0:n.distinctID)!==void 0){var m=s.bootstrap.distinctID,_=this.get_distinct_id(),E=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===ts)this.identify(m);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&E===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var b=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?b:m;this.persistence.set_property(He,s.bootstrap.isIdentifiedID?Tt:ts),this.register({distinct_id:m,$device_id:I})}}if(g)this.register_once({distinct_id:br,$device_id:null},"");else if(!this.get_distinct_id()){var F=this.config.get_device_id(dt());this.register_once({distinct_id:F,$device_id:F},""),this.persistence.set_property(He,ts)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),s.segment?(function(P,B){var S=P.config.segment;if(!S)return B();(function(A,R){var N=A.config.segment;if(!N)return R();var T=J=>{var z=()=>J.anonymousId()||dt();A.config.get_device_id=z,J.id()&&(A.register({distinct_id:J.id(),$device_id:z()}),A.persistence.set_property(He,Tt)),R()},O=N.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(P,(()=>{S.register((A=>{typeof Promise<"u"&&Promise.resolve||an.warn("This browser does not have Promise support, and can not use the segment integration");var R=(N,T)=>{if(!T)return N;N.event.userId||N.event.anonymousId===A.get_distinct_id()||(an.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(an.info("UserId set, identifying with PostHog"),A.identify(N.event.userId));var O=A.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},O,N.event.properties),N};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:N=>R(N,N.event.event),page:N=>R(N,os),identify:N=>R(N,rn),screen:N=>R(N,"$screen")}})(P)).then((()=>{B()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==pi&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(P=>this.config._onCapture(P.event,P)))),this.config.ip&&k.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return ed.apply(this,arguments)})().then((P=>{P&&this.register({[tn]:P})})).catch(pi),this}Fn(){var e,s,r,i,n,o,a=(e=(s=this.config.__extensionClasses)==null?void 0:s.featureFlags)!==null&&e!==void 0?e:(r=Te.__defaultExtensionClasses)==null?void 0:r.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((i=this.Dn)==null||i.call(this),this.Dn=void 0,this.featureFlags=new a(this)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var s,r,i,n,o,a,l,u=performance.now(),c=w({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(s=this.exceptions)!==null&&s!==void 0?s:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(r=this.surveys)!==null&&r!==void 0?r:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(i=this.logs)!==null&&i!==void 0?i:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(n=this.metrics)!==null&&n!==void 0?n:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,kp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,s){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-s>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,s)}),0);var r=e.shift();if(r)try{r()}catch(n){k.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-s);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var s;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var r,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=M(i.supportedCompression,xe.GZipJS)?xe.GZipJS:M(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(r=i.analytics)!=null&&r.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:eo}),(s=this.jn)==null||s.handleRemoteConfig(e),this.sn.forEach((n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(r){k.critical("`loaded` function failed",r)}if(this.Bn(),this.config.internal_or_test_user_hostname&&re!=null&&re.hostname){var e=re.hostname,s=this.config.internal_or_test_user_hostname;(typeof s=="string"?e===s:s.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Uu(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Er(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,s,r,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(s=this.metrics)==null||s.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(sn),(r=this.logs)==null||r.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(sn,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ad?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=w({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(s=>{var r,i,n,o=w({},s);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(r=o.transport)!==null&&r!==void 0?r:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(m,_){return _===void 0&&(_=new Date().toISOString()),L(m)?m.map((E=>w({},E,{sent_at:_}))):w({},m,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Br.filter((m=>!o.disableTransport||!m.transport||!o.disableTransport.includes(m.transport))),f=(i=(n=(function(m,_){for(var E=0;m.length>E;E++)if(m[E].transport===h)return m[E]})(p))==null?void 0:n.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var g=m=>{try{f(m)}catch(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&lh&&typeof Promise<"u"&&!Dr?Hp(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Dr=!0,void g(w({},o,{compression:void 0,url:El(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var E="name"in _?String(_.name):"";return Ha(_)||E===Cc})(m)&&(Dr=!0),g(o)})):f(o)})(w({},e,{callback:s=>{var r,i;this.rateLimiter.checkForLimiting(s),400>s.statusCode||(r=(i=this.config).on_request_error)==null||r.call(i,s),e.callback==null||e.callback(s)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){mn++;try{var s,r=[],i=[],n=[];Er(e,(a=>{if(a)if(L(s=a[0]))n.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&s==="alias"?r.push(a):L(a)&&s.indexOf("capture")!==-1&&Se(this[s])?n.push(a):i.push(a)}));var o=function(a,l){Er(a,(function(u){try{if(L(u[0])){var c=l;Z(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){k.error("Error executing queued PostHog call",u,d)}}))};o(r,this),o(i,this),o(n,this)}finally{mn--}}push(e){if(mn>0&&L(e)&&W(e[0])){var s=Te.prototype[e[0]];Se(s)&&s.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,s,r){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!x(e)&&W(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=r!=null&&r.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){s!=null&&s.$current_url&&!W(s?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),s==null||delete s.$current_url),e!=="$exception"||r!=null&&r.Wn||k.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=r?.timestamp||d,p=Ga(r?.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,s||{},h,p)};e===os&&this.config.__preview_capture_bot_pageviews&&u&&(f.event="$bot_pageview",f.properties.$browser_type="bot"),c&&(f.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var g=e==="$feature_flag_called"&&f.properties.$feature_flag_has_experiment===!1&&this.get_property(ei)===!0;r?.$set&&!g&&(f.$set=r?.$set);var m=r?.$unset;m&&(f.$unset=m);var _,E,b,I=g?void 0:this.Vn(r?.$set_once,e!==Qa,e===rn);if(I&&(f.$set_once=I),r!=null&&r._noTruncate||(n=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,n):T,l=new Set,f=(function T(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var z;if(l.add(O),L(O))z=[],Er(O,(oe=>{z.push(T(oe))}));else{var H={};Z(O,((oe,pe)=>{l.has(oe)||(H[pe]=T(oe))})),z=H}return z}})(o)),f.timestamp=h,x(r?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),g&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return ch.forEach(z),O.forEach(z),J})(f.properties,of)),e===ft.DISMISSED||e===ft.SENT){var F=s?.[dn.SURVEY_ID],P=s?.[dn.SURVEY_ITERATION];nd({id:F,current_iteration:P}),f.$set=w({},f.$set,{[(_={id:F,current_iteration:P},E=e===ft.SENT?"responded":"dismissed",b="$survey_"+E+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+E+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===ft.SHOWN&&(f.$set=w({},f.$set,{[dn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Np.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=w({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=w({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=r?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),N={method:"POST",url:R,data:f,compression:"best-available",timestampMode:r?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:r?._batchKey,transport:r?.transport};return!this.config.request_batching||r&&(r==null||!r._batchKey)||r!=null&&r.send_instantly?this.Pn(N):this.In.enqueue(N),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(s=>e(s.event,s)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new nf(this)}cn(e){this._n.push(e);var s=!0;return()=>{if(s){s=!1;var r=this._n.indexOf(e);r!==-1&&this._n.splice(r,1)}}}calculateEventProperties(e,s,r,i,n){if(r=r||new Date,!this.persistence||!this.sessionPersistence)return s;var o=n?void 0:this.persistence.remove_event_timer(e),a=w({},s);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=w({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Nn(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(F,P,B,S){var A,R,N,T;if(S===void 0&&(S=!1),!Pe)return{};var O,J=F?[..._s,...P||[]]:[],z=(function(vr){for(var je=0;qa.length>je;je++){var _r=qa[je],Qt=_r[1],es=_r[0].exec(vr),Is=es&&(Se(Qt)?Qt(es,vr):Qt);if(Is)return Is}return["",""]})(Pe),H=z[0],oe=z[1],pe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(B)||(Ie.detectGoogleSearchApp=B);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(N=v.screen)==null?void 0:N.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Ye,Rt,de,Ve,St,ks,Be,Fe,mr=ee(zo({$os:H,$os_version:oe,$browser:Xc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Nc||Fe===Tc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Gc?fs:Fe===er||Fe===hs||Fe===tr||Fe===Ln?"Console":Fe===Lc?"Wearable":Fe?Oe:de?.userAgentDataPlatform==="Android"&&((Ve=de?.maxTouchPoints)!==null&&Ve!==void 0?Ve:0)>0?600>Math.min((St=de?.screenWidth)!==null&&St!==void 0?St:0,(ks=de?.screenHeight)!==null&&ks!==void 0?ks:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:fs:"Desktop"),$timezone:ju(),$timezone_offset:$p()}),{$current_url:ir(S?Ct(re?.href):re?.href,J,nr),$host:re?.host,$pathname:re?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Fh(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(mr.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),mr})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(n,r.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(F){a.$sdk_debug_error_capturing_properties=String(F)}if(this.requestRouter.region===uo&&(a.$lib_custom_api_host=this.config.api_host),u=e!==os||n?e!==sn||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(r):this.pageViewManager.doPageView(r,i),a=ee(a,u),e===os&&C&&(a.title=C.title),!x(o)){var f=r.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Pe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var g=this.persistence.properties(),m=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(F=>{F in g&&delete m[F]}));var _={};if(this._n.length>0)for(var E of this._n.slice())try{ee(_,E())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,w({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Fl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,s,r){var i;if(s===void 0&&(s=!0),r===void 0&&(r=!1),!this.persistence||!this.Zn()||this.mn&&!r)return e;var n=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},n,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Fl),a=l(a,"$set_once")),s&&(this.mn=!0),mt(a)?void 0:a}register(e,s){var r;(r=this.persistence)==null||r.register(e,s)}register_once(e,s,r){var i;(i=this.persistence)==null||i.register_once(e,s,r)}register_for_session(e){var s;(s=this.sessionPersistence)==null||s.register(e),Object.keys(e).forEach((r=>this.yn.add(r))),this.Qn()}unregister(e){var s;(s=this.persistence)==null||s.unregister(e)}unregister_for_session(e){var s;(s=this.sessionPersistence)==null||s.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,s){this.register({[e]:s})}An(){this.yn.forEach((e=>{var s;(s=this.sessionPersistence)==null||s.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var s=[];this.yn.forEach((r=>s.push(r))),s.length>0?ce.F(this.bn,s):ce.q(this.bn)}}getFeatureFlag(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlag(e,s)}getFeatureFlagPayload(e){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagPayload(e)}getFeatureFlagResult(e,s){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagResult(e,s)}getAllFeatureFlags(){var e,s;return(e=(s=this.featureFlags)==null?void 0:s.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,s){var r,i;return(r=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,s))!==null&&r!==void 0?r:s?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,s,r){var i;(i=this.featureFlags)==null||i.updateFlags(e,s,r)}updateEarlyAccessFeatureEnrollment(e,s,r){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,s,r)}getEarlyAccessFeatures(e,s,r){var i;return s===void 0&&(s=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,s,r)}on(e,s){return this.dn.on(e,s)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Ns}),()=>{})}onSessionId(e){var s,r;return(s=(r=this.sessionManager)==null?void 0:r.onSessionId(e))!==null&&s!==void 0?s:()=>{}}getSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getSurveys(e,s):e([],{isLoaded:!1,error:Ns})}getActiveMatchingSurveys(e,s){s===void 0&&(s=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,s):e([],{isLoaded:!1,error:Ns})}renderSurvey(e,s){var r;(r=this.surveys)==null||r.renderSurvey(e,s)}displaySurvey(e,s){var r;s===void 0&&(s=Xp),(r=this.surveys)==null||r.displaySurvey(e,s)}cancelPendingSurvey(e){var s;(s=this.surveys)==null||s.cancelPendingSurvey(e)}canRenderSurvey(e){var s,r;return(s=(r=this.surveys)==null?void 0:r.canRenderSurvey(e))!==null&&s!==void 0?s:{visible:!1,disabledReason:Ns}}canRenderSurveyAsync(e,s){var r,i;return s===void 0&&(s=!1),(r=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,s))!==null&&r!==void 0?r:Promise.resolve({visible:!1,disabledReason:Ns})}Jn(e){return!e||Nn(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===br?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,s,r){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(sr)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Bs)&&(this.unregister(Bs),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||ts)===ts,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:s||{},$set_once:r||{}},!1),this.capture(rn,{distinct_id:e,$anon_distinct_id:i},{$set:s||{},$set_once:r||{}}),this.Sn=gn(e,s,r),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Tt);var u=s||{},c=r||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=gn(e,s,r)}else(s||r)&&this.setPersonProperties(s,r);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(s||r)&&this.reloadFeatureFlags()}}setPersonProperties(e,s){if((e||s)&&this.Gn("posthog.setPersonProperties")){var r=gn(this.get_distinct_id(),e,s);this.Sn!==r?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:s||{}},!0),this.capture("$set",{$set:e||{},$set_once:s||{}}),this.Sn=r):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var s,r=(L(e)?e:[e]).filter((i=>W(i)&&i.length>0));r.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((s=this.featureFlags)==null||s.unsetPersonPropertiesForFlags(r,!0),this.capture("$set",{$unset:r}),this.Sn=null)}group(e,s,r){if(e&&s){var i=this.getGroups(),n=i[e]!==s;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:w({},i,{[e]:s})}),n||r){var o={$group_type:e,$group_key:s};r&&(o.$group_set=r),this.capture(Qa,o)}r&&this.setGroupPropertiesForFlags({[e]:r}),n&&!r&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),(r=this.featureFlags)==null||r.setPersonPropertiesForFlags(e,s)}resetPersonPropertiesForFlags(e){var s;e===void 0&&(e=!0),(s=this.featureFlags)==null||s.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,s){var r;s===void 0&&(s=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((r=this.featureFlags)==null||r.setGroupPropertiesForFlags(e,s))}resetGroupPropertiesForFlags(e){var s;(s=this.featureFlags)==null||s.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,s){var r,i,n,o,a,l,u,c,d,h;if(s===void 0&&(s=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(sr),g=this.get_property(tn),m=this.get_property(Vt),_=this.is_capturing();if(this.consent.reset(),s||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(r=this.persistence)==null||r.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),x(m)||(p=this.persistence)==null||p.register({[Vt]:m}),(n=this.surveys)==null||n.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,ts),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:br,$device_id:null},"");else{var E=this.config.get_device_id(dt());this.register_once({distinct_id:E,$device_id:e?E:f},""),e||x(g)||this.register({[tn]:g})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var s=this;return X((function*(){var r,i,n,o,a,l,u;if(s.__loaded){(r=s.Un)==null||r.stop(),(i=s.jn)==null||i.dispose(),(n=s.sessionRecording)==null||n.dispose(),(o=s.logs)==null||o.flushLogs("sendBeacon"),(a=s.metrics)==null||a.flush("sendBeacon"),(l=s.In)==null||l.unload(),(u=s.Rn)==null||u.unload();try{var c;(c=s.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,s){var r;this.config.identity_distinct_id=e,this.config.identity_hash=s,this.alias(e),(r=this.conversations)==null||r.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,s;return(e=(s=this.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var s=this.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+s.sessionId);if(e!=null&&e.withTimestamp&&r){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!r)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-r)/1e3)-o,0)}return i}alias(e,s){return e===this.get_property(au)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(s)&&(s=this.get_distinct_id()),e!==s?(this.Kn(Bs,e),this.capture("$create_alias",{alias:e,distinct_id:s})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var s=w({},this.config);if(te(e)){var r,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var g=this.En();(r=this.persistence)==null||r.update_config(this.config,s,g),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new cn(w({},this.config,{persistence:"sessionStorage"}),g,!1);var m=this.Cn(this.config.debug);Ke(m)&&(this.config.debug=m),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:s,newConfig:w({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(n=this.exceptionObserver)==null||n.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,s){Y.LIB_NAME=e,Y.LIB_VERSION=s}startSessionRecording(e){var s,r,i,n,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((s=this.sessionManager)==null||s.checkAndGetSessionAndWindowId(),l.sampling&&((r=this.sessionRecording)==null||r.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((n=this.sessionRecording)==null||n.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,s){if(this.exceptions){var r=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:r});return this.exceptions.sendExceptionEvent(w({},i,s))}}addExceptionStep(e,s){var r;(r=this.exceptions)==null||r.addExceptionStep(e,s)}captureLog(e){var s;(s=this.logs)==null||s.captureLog(e)}get logger(){var e,s;return(e=(s=this.logs)==null?void 0:s.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var s,r;return(s=(r=this.toolbar)==null?void 0:r.loadToolbar(e))!==null&&s!==void 0&&s}get_property(e){var s;return(s=this.persistence)==null?void 0:s.props[e]}getSessionProperty(e){var s;return(s=this.sessionPersistence)==null?void 0:s.props[e]}toString(){var e,s=(e=this.config.name)!==null&&e!==void 0?e:as;return s!==as&&(s=as+"."+s),s}_isIdentified(){var e,s;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((s=this.sessionPersistence)==null?void 0:s.get_property(He))===Tt}Zn(){var e,s;return!(this.config.person_profiles==="never"||this.config.person_profiles===eo&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Bs])&&((s=this.persistence)==null||(s=s.props)==null||!s[ri]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(ri,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Ht)}es(){var e,s,r,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((r=this.persistence)==null||r.set_disabled(n)),((s=this.sessionPersistence)==null?void 0:s.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var s;if(this.config.cookieless_mode!==ht){if(this.gn()){var r,i,n,o,a;this.Yn(!0,!0),(r=this.sessionManager)==null||r.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new xl(this),this.pageViewManager=new fl(this),this.persistence&&(this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence));var l,u=(n=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&n!==void 0?n:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(s=this.sessionRecording)==null||s.startIfEnabledOrStop(),this.config.cookieless_mode==Ht&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Cl)}opt_out_capturing(){var e,s,r;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Ht&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ht&&(this.register({distinct_id:br,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(s=this.sessionManager)==null||s.destroy(),(r=this.pageViewManager)==null||r.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):k.warn(Cl)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===ht||(this.config.cookieless_mode===Ht?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?Qu(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(os,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ii,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,ii,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(s,r,i,n,o){var a=r in s&&!D(s[r]),l=i in s&&!D(s[i]);return a?s[r]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+r+"' instead. The old field will be removed in a future major version."),s[i])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var s;if(D(this.config.before_send))return e;var r=Object.keys((s=e.properties)!==null&&s!==void 0?s:{}).filter(mh),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],n=e;for(var o of i){if(n=o(n),D(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return gh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}n.properties&&!mt(n.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of r)if(n.properties&&D(n.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,s){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:s})}captureTraceMetric(e,s,r){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:s,$ai_metric_value:String(r)})}Cn(e){var s=Ke(e)&&!e,r=Q.N()&&Q.P("ph_debug")==="true";return!s&&(!!r||e)}}Te.__defaultExtensionClasses={},Te.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var s=0;e.length>s;s++)t.prototype[e[s]]=ip(t.prototype[e[s]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var s=te(e)?e:{};this.thresholdPx=s.threshold_px||30,this.timeoutMs=s.timeout_ms||1e3,this.clickCount=s.click_count||3,this.clicks=[]}isRageClick(e,s,r){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(s-i.y)r-i.timestamp){if(this.clicks.push({x:e,y:s,timestamp:r}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:s,timestamp:r}];return!1}}var _n="$copy_autocapture",yn=se("[AutoCapture]");function wn(t,e){return e.length>t?e.slice(0,t)+"...":e}function cf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function uf(t,e){var s,r,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ft(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Su>c.length;)if(Eu(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!Ft(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,g,m=[],_={},E=!1,b=!1;if(Z(c,(S=>{var A=ro(S);if(Me(S,"a")){var R=S.getAttribute("href");E=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ai(S),"ph-no-capture")&&(b=!0),m.push((function(T,O,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Vo.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?wn(1024,dl(T)):wn(1024,rr(T)));var Ie=ai(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Fu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Ks(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=qo(ge).join(" ")),pe["attr__"+ae.name]=wn(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=cf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,n,o,a,u));var N=(function(T){if(!ro(T))return{};var O={};return Z(T.attributes,(function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var z=J.name.replace("data-ph-capture-attribute-",""),H=J.value;z&&H&&Ks(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),E){var I,F;m[0].attr__href=E;var P=(I=li(E))==null?void 0:I.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=E)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:m},{$elements_chain:(g=m,(function(S){return S.map((A=>{var R,N,T="";if(A.tag_name&&(T+=A.tag_name),A.attr_class)for(var O of(A.attr_class.sort(),A.attr_class))T+="."+O.replace(/"/g,"");var J=w({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(N=A.nth_of_type)!==null&&N!==void 0?N:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Or(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return z[hl(H[0].toString())]=hl(oe.toString())})),(T+=":")+Or(z).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((A=>{var R,N,T={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(N=A.attr__href)==null?void 0:N.slice(0,2048),attr_class:Sp(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Or(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(g)))},(s=m[0])!=null&&s.$el_text?{$el_text:(r=m[0])==null?void 0:r.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Ms=se("[ExceptionAutocapture]"),$l=()=>{},df=se("[TracingHeaders]"),Lt=se("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",Ls="awaiting_config",Fr="missing_config";se("[SessionRecording]"),se("[SessionRecording]");var ho="[SessionRecording]",at=se(ho),hf=se("[Heatmaps]");function bn(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Pr=se("[Product Tours]"),En=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Uo))},pf=["$set_once","$set"],Ze=se("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function is(t,e,s){if(D(t))return!1;switch(s){case"exact":return t===e;case"contains":var r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(r,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class ff{constructor(e){this.ns=new Yo,this.ss=(s,r)=>this.os(s,r)&&this.ls(s,r)&&this.us(s,r)&&this.hs(s,r),this.os=(s,r)=>r==null||!r.event||s?.event===r?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,s;x((e=this._instance)==null?void 0:e._addCaptureHook)||(s=this._instance)==null||s._addCaptureHook(((r,i)=>{this.on(r,i)}))}register(e){var s,r;if(!x((s=this._instance)==null?void 0:s._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(r=this._instance)!=null&&r.autocapture)){var i,n=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&n.add(l?.selector)}))})),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,s){var r;s!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(s.event))&&this.vs&&((r=this.vs)==null?void 0:r.size)>0&&this.vs.forEach((i=>{this.cs(s,i)&&this.ns.emit("actionCaptured",i.name)}))}fs(e){this.onAction("actionCaptured",(s=>e(s)))}cs(e,s){if(s?.steps==null)return!1;for(var r of s.steps)if(this.ss(e,r))return!0;return!1}onAction(e,s){return this.ns.on(e,s)}ls(e,s){if(s!=null&&s.url){var r,i=e==null||(r=e.properties)==null?void 0:r.$current_url;if(!i||typeof i!="string"||!is(i,s.url,s.url_matching||"contains"))return!1}return!0}us(e,s){return!!this.ps(e,s)&&!!this.gs(e,s)&&!!this.ys(e,s)}ps(e,s){var r;if(s==null||!s.href)return!0;var i=this.bs(e);if(i.length>0)return i.some((a=>is(a.href,s.href,s.href_matching||"exact")));var n,o=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!o&&is((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",s.href,s.href_matching||"exact")}gs(e,s){var r;if(s==null||!s.text)return!0;var i=this.bs(e);if(i.length>0)return i.some((u=>is(u.text,s.text,s.text_matching||"exact")||is(u.$el_text,s.text,s.text_matching||"exact")));var n,o,a,l=(e==null||(r=e.properties)==null?void 0:r.$elements_chain)||"";return!!l&&(n=(function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!D(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=s.text,a=s.text_matching||"exact",n.some((u=>is(u,o,a))))}ys(e,s){var r,i;if(s==null||!s.selector)return!0;var n=e==null||(r=e.properties)==null?void 0:r.$element_selectors;if(n!=null&&n.includes(s.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(s.selector_regex&&o)try{return new RegExp(s.selector_regex).test(o)}catch{return!1}return!1}bs(e){var s;return(e==null||(s=e.properties)==null?void 0:s.$elements)==null?[]:e?.properties.$elements}hs(e,s){return s==null||!s.properties||s.properties.length===0||sd(s.properties.reduce(((r,i)=>{var n=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return r[i.key]={values:n,operator:i.operator||"exact"},r}),{}),e?.properties)}}class gf{constructor(e){var s;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(s=this._instance)==null||s.onSessionId==null||s.onSessionId((r=>this.Ss(r)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,s){return!!e&&sd(e.propertyFilters,s?.properties)}Ps(e,s){var r=new Map;return e.forEach((i=>{var n;(n=i.conditions)==null||(n=n[s])==null||(n=n.values)==null||n.forEach((o=>{if(o!=null&&o.name){var a=r.get(o.name)||[];a.push(i.id),r.set(o.name,a)}}))})),r}Rs(e,s,r){var i=(r===As.Activation?this.ws:this.ks).get(e),n=[];return this.As((o=>{n=o.filter((a=>i?.includes(a.id)))})),n.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[r])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,s)}))}register(e){var s;x((s=this._instance)==null?void 0:s._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var s=e.filter((r=>{var i,n;return((i=r.conditions)==null?void 0:i.actions)&&((n=r.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0}));s.length!==0&&(this.Os==null&&(this.Os=new ff(this._instance),this.Os.init(),this.Os.fs((r=>{this.onAction(r)}))),s.forEach((r=>{var i,n,o,a,l;r.conditions&&(i=r.conditions)!=null&&i.actions&&(n=r.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=r.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(r.conditions.actions.values),(l=r.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(r.id),this.xs.set(u.name,c||[r.id])}})))})))}Fs(e){var s,r=e.filter((n=>{var o,a;return((o=n.conditions)==null?void 0:o.events)&&((a=n.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),i=e.filter((n=>{var o,a;return((o=n.conditions)==null?void 0:o.cancelEvents)&&((a=n.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));r.length===0&&i.length===0||((s=this._instance)==null||s._addCaptureHook(((n,o)=>{this.onEvent(n,o)})),this.ws=this.Ps(e,As.Activation),this.ks=this.Ps(e,As.Cancellation))}onEvent(e,s){var r,i,n=this.Ds(),o=(s==null||(r=s.properties)==null?void 0:r.$survey_id)||(s==null||(i=s.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return n.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return n.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,s,As.Cancellation);l.length>0&&(n.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){n.info("event name matched",{event:e,eventPayload:s,items:this.ws.get(e)});var u=this.Rs(e,s,As.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var s;if(e.length!==0){var r=!((s=this._instance)==null||s.get_session_id==null||!s.get_session_id()),i=[];for(var n of e)r&&this.Cs(n)?this.qs(n)&&this.Us(n):i.push(n);i.length>0&&(this._s=[...new Set([...this._s,...i])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((r=>r!==e));var s=this.zs();return!s.includes(e)&&(this.Ws([...s,e]),this.Vs(),!0)}Ns(e){var s=new Set(e);this._s=this._s.filter((n=>!s.has(n)));var r=this.Zs(),i=r.filter((n=>!s.has(n)));i.length!==r.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,s=this.Ms();if(!s)return{};var r=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s];return r&&typeof r=="object"?r:{}}Us(e){if(this.Ms()){var s=this.Qs();this.Ts(w({},s,{[e]:Date.now()}))}}js(e){if(this.Ms()){var s=this.Qs(),r={},i=!1;for(var n of Object.entries(s)){var o=n[0],a=n[1];e.includes(o)?i=!0:r[o]=a}i&&(mt(r)?this.Es():this.Ts(r))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var s=this.Qs()[e];return he(s)?s:void 0}}Zs(){var e,s=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[s])||[]}zs(){var e,s,r=this.Zs();if(r.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(s=this._instance)==null||s.get_session_id==null?void 0:s.get_session_id();return n&&i===n?r:[]}Vs(){var e,s=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();s&&this.Xs(s)}Gs(){this.ta()}Ss(e){var s,r=(s=this._instance)==null||(s=s.persistence)==null?void 0:s.props[this.Ys()];if(r&&r!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter((o=>he(n[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class mf extends gf{constructor(e){super(e)}Js(){return Jn}Ys(){return Nr}Ms(){return Mr}Ts(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Mr]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Mr)}Cs(e){var s,r;this.As((n=>{r=n.find((o=>o.id===e))}));var i=(s=r)==null||(s=s.appearance)==null?void 0:s.surveyPopupDelaySeconds;return he(i)&&i>0}ra(){return ft.SHOWN}As(e){var s;(s=this._instance)==null||s.getSurveys(e)}Bs(e){var s;(s=this._instance)==null||s.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Jn]:e})}Xs(e){var s;(s=this._instance)==null||(s=s.persistence)==null||s.register({[Nr]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Nr)}ea(){return!1}$s(e,s){var r;this.As((n=>{r=n.find((o=>o.id===s))}));var i=!r||(function(n){var o;return rd(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"})(r);return i?e===ft.SHOWN?"consume":"ignore":e===ft.SHOWN?"persist":e===ft.DISMISSED||e===ft.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var Ar="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",vf=v!=null&&v.location?ci(v.location.hash,"__posthog")||ci(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=se("[Toolbar]"),Bl=se("[FeatureFlags]");class _f{constructor(e,s){s===void 0&&(s=!1),this.na=!1,this.update(e,s)}update(e,s){this.sa=((r,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=r.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=r.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!r.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!r.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!r.advanced_feature_flags_dedup_per_session,cacheTtlMs:r.feature_flag_cache_ttl_ms,requestTimeoutMs:r.feature_flag_request_timeout_ms,compression:r.disable_compression?"none":"base64",evaluationContexts:(a=(l=r.evaluation_contexts)!==null&&l!==void 0?l:r.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:L(r.flag_keys)?r.flag_keys:void 0}})(e,s),!e.evaluation_environments||e.evaluation_contexts||this.na||(Bl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Bl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var jl=se("[FeatureFlags]"),Ot=se("[FeatureFlags]",{debugEnabled:!0}),Sn=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},s=0;t.length>s;s++)e[t[s]]=!0;return e},Wl=t=>{var e={};for(var s of Or(t||{})){var r=s[1];r&&(e[s[0]]=r)}return e},Xe=se("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",yf={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>hi(e,t),not_regex:(t,e)=>!hi(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var s=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(r){r===void 0&&(r=!1),s.getWebExperiments((i=>{ye.aa("retrieved web experiments from the server"),s.oa=new Map,i.forEach((n=>{if(n.feature_flag_key){var o;s.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=s.oa)==null||o.set(n.feature_flag_key,n));var a=s._instance.getFeatureFlag(n.feature_flag_key);W(a)&&n.variants[a]&&s.la(n.name,a,n.variants[a].transforms)}else if(n.variants)for(var l in n.variants){var u=n.variants[l];ye.ua(u,s._instance)&&s.la(n.name,l,u.transforms)}}))}),r)},this._instance=e,this._instance.onFeatureFlags((r=>{this.onFeatureFlags(r)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(zl);else if(!this.Ne.disable_web_experiments){if(D(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach((s=>{var r;if(this.oa&&(r=this.oa)!=null&&r.has(s)){var i,n=this._instance.getFeatureFlag(s),o=(i=this.oa)==null?void 0:i.get(s);n&&o!=null&&o.variants[n]&&this.la(o.name,n,o.variants[n].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var s=vs(e?.search,"__experiment_id"),r=vs(e?.search,"__experiment_variant");s&&r&&(ye.aa("previewing web experiments "+s+" && "+r),this.getWebExperiments((i=>{this.ha(parseInt(s),r,i)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,s,r){if(this.Ne.disable_web_experiments&&!r)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!s)return e(i);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:n=>e(n.statusCode===200&&n.json&&n.json.experiments||[])})}ha(e,s,r){var i=r.filter((n=>n.id===e));i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+s+"]"),this.la(i[0].name,s,i[0].variants[s].transforms))}static ua(e,s){return!D(e.conditions)&&ye.da(e,s)&&ye.va(e)}static da(e,s){var r;if(D(e.conditions)||D((r=e.conditions)==null?void 0:r.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=yu(s,i.href);return(n=e.conditions)==null||!n.url||yf[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.utm))return!0;var r=Nu();if(r.utm_source){var i,n,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((n=e.conditions)==null||(n=n.utm)==null?void 0:n.utm_campaign)==r.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==r.utm_source,f=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==r.utm_medium,g=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==r.utm_term;return h&&f&&g&&p}return!1}static aa(e){for(var s=arguments.length,r=new Array(s>1?s-1:0),i=1;s>i;i++)r[i-1]=arguments[i];k.info("[WebExperiments] "+e,r)}la(e,s,r){this._is_bot()?ye.aa(zl):s!=="control"?r.forEach((i=>{if(i.selector){var n;ye.aa("applying transform of variant "+s+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o?.forEach((a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?Qu(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=se("[Conversations]"),Dt="Conversations not available yet.",ql="console",ld="__posthogHandledLogsRequestError",xn=(t,e)=>{var s=t instanceof Error?t:new Error(e);return s[ld]=!0,s},Vl=t=>!!t&&typeof t=="object"&&t[ld]===!0,$i={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=jl,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new _f(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var s;(s=this.Ea)==null||s.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),s=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(s):s();var e,s}Pa(t){if(this.nn===t)return v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],v?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Us,Hs,Tr,et]){var s=this.Oa(e);x(s)||(t[e]=s)}this.fa=t;var r=w({},t),i=this.Oa(Bt);if(i)for(var n of Object.entries(i))r["$feature/"+n[0]]=n[1];this.pa=r}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Gs);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),s})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var s=e&&typeof e=="string"&&e.trim().length>0;return s||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),s}))}initialize(){var t,e,s=this.Ne,r=(t=(e=s.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(r).length){var i,n,o=(i=(n=s.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(r).filter((u=>!!r[u])).reduce(((u,c)=>(u[c]=r[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,s){var r,i,n=s!=null&&s.merge&&(r=this.Oa(Bt))!==null&&r!==void 0?r:{},o=s!=null&&s.merge&&(i=this.Oa(Hs))!==null&&i!==void 0?i:{},a=w({},n,t),l=w({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Da(h),variant:Ba(h),reason:void 0,metadata:x(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Gn),e=this.Oa(et),s=this.Oa(jt);if(!s&&!e)return t||{};var r=ee({},t||{}),i=[...new Set([...Object.keys(s||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=r[n],u=e?.[n],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=s?.[n],p=w({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=w({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),r[n]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:s,finalDetails:r}),this.ca=!0),r}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((s=>{var r=t[s];return{key:s,enabled:Da(r),variant:Ba(r),payload:Oa(e[s])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:s}),this.ca=!0),s}getFlagPayloads(){var t=this.Oa(Hs),e=this.Oa(jt);if(!e)return t||{};for(var s=ee({},t||{}),r=Object.keys(e),i=0;r.length>i;i++)s[r[i]]=e[r[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:s}),this.ca=!0),s}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var s={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:w({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var i=this.qa();x(i)||(s.flag_keys=i);var n=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(n?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Lr]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:s,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!s.disable_flags||this.wa){this.ka=!f;var g=[];c.error?g.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Ul:"unknown_error"):c.statusCode!==200&&g.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&g.push("errors_while_computing_flags");var m=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));m&&g.push("quota_limited"),this.F({[Lr]:g}),m?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):s.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Ru(this.Sa,3)}Ua(t){this.Sa=Tu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var s;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r=this.getFeatureFlagResult(t,e);return(s=r?.variant)!==null&&s!==void 0?s:r?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+Sn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s,r=this.getFlagVariants(),i=t in r,n=r[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(Tr)||void 0,u=this.Oa(Gs)||void 0,c=this.Oa(Wt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(zs);h&&h!==p&&(c={},s=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))s&&this.F({[Wt]:c,[zs]:s});else{var f,g,m,_,E,b,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(n)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:n,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((g=this.Ne.bootstrap)==null||(g=g.featureFlags)==null?void 0:g[t])||null,$feature_flag_bootstrapped_payload:((m=this.Ne.bootstrap)==null||(m=m.featureFlagPayloads)==null?void 0:m[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(E=S.metadata)==null?void 0:E.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(F=S.reason)==null?void 0:F.code;T&&(R.$feature_flag_reason=T),S!=null&&(P=S.metadata)!=null&&P.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(B=S.metadata)!=null&&B.original_payload&&(R.$feature_flag_original_payload=S==null||(N=S.metadata)==null?void 0:N.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else s&&this.F({[Wt]:c,[zs]:s});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+Sn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((s=>{this.rt.error("Failed to capture feature flag call",s)}))}catch(s){this.rt.error("Failed to capture feature flag call",s)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var s=this;return X((function*(){var r=s.nn;if(r){var i={distinct_id:r.distinctId,token:r.projectToken,person_properties:{$lib:r.library.name,$lib_version:r.library.version}},n=s.Na();n.length&&(i.evaluation_contexts=n);var o,a=s.qa();x(a)||(i.flag_keys=a);try{var l,u=(l=(yield r.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:s.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:s.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void s.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){s.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+Sn),e.defaultValue;var s=this.getFeatureFlag(t,e);return x(s)?e.defaultValue:!!s}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,s){this.ja(t,e,s)}ja(t,e,s){if(this.nn){this.ma=!0;var r=(function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,B)=>{var S=P.flags;return S?w({},P,{featureFlags:Object.fromEntries(Object.keys(S).map((A=>{var R;return[A,(R=S[A].variant)!==null&&R!==void 0?R:S[A].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((A=>S[A].enabled)).filter((A=>{var R;return(R=S[A].metadata)==null?void 0:R.payload})).map((A=>{var R;return[A,(R=S[A].metadata)==null?void 0:R.payload]})))}):(P.featureFlags&&B.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),P)})(i,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=i.requestId,g=i.evaluatedAt;if(L(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var m={};if(h)for(var _=0;h.length>_;_++)m[h[_]]=!0;return{[Us]:h,[Bt]:m,[ei]:!1}}var E=h,b=p,I=d;if(l!=null&&l.partialResponse)E=w({},n,E),b=w({},o,b),I=w({},a,I);else if(i.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var B;return!((B=d[P])!=null&&B.failed)})));E=w({},n,Object.fromEntries(Object.entries(E).filter((P=>F.has(P[0]))))),b=w({},o,Object.fromEntries(Object.entries(b||{}).filter((P=>F.has(P[0]))))),I=w({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else E=w({},n,E),b=w({},o,b),I=w({},a,I);return w({[Us]:Object.keys(Wl(E)),[Bt]:E||{},[Hs]:b||{},[Gn]:I||{},[ei]:i.minimalFlagCalledEvents===!0},f?{[Tr]:f}:{},g?{[Gs]:g}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),s,this.rt);r&&this.F(r),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([et,jt]),this.Va(),void Ot.info("All overrides cleared");if(L(t))return this.F({[et]:Hl(t)}),this.Va(),void Ot.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,s=t;this.ca=!!((e=s.suppressWarning)!==null&&e!==void 0&&e);var r={},i=s.flags,n=s.payloads;return i&&(r[et]=L(i)?Hl(i):i),n&&(r[jt]=n),Object.keys(r).length&&this.F(r),i===!1&&n===!1?this.q([et,jt]):i===!1?this.q(et):n===!1&&this.q(jt),this.Va(),i===!1?Ot.info("Flag overrides cleared"):i&&Ot.info("Flag overrides set",{flags:i}),void(n===!1?Ot.info("Payload overrides cleared"):n&&Ot.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[et]:t}),this.Va(),void Ot.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),s=e.flags,r=e.flagVariants;try{t(s,r)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,s){var r=(this.Oa(Rr)||[]).find((l=>l.flagKey===t)),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};r&&(n.$early_access_feature_name=r.name),s&&(n.$feature_enrollment_stage=s);var o=w({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(o)),[Bt]:o,[ct]:w({},this.Oa(ct)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",n).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,s){e===void 0&&(e=!1);var r=this.Oa(Rr);!r||e?this.Qa(t,s):t(r)}Qa(t,e){var s=this;return X((function*(){var r=s.nn;if(r){var i,n=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield r.sendRequest("/api/early_access_features/?token="+r.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;s.F({[Rr]:i=o.json.earlyAccessFeatures})}catch(a){return void s.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){s.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((s=>e[s])),flagVariants:Object.keys(e).filter((s=>e[s])).reduce(((s,r)=>(s[r]=e[r],s)),{})}}Va(t){this.Fa();var e=this.Ga(),s=e.flags,r=e.flagVariants;this.featureFlagEventHandlers.forEach((i=>{try{i(s,r,{errorsLoading:t})}catch(n){this.rt.error("Error while running feature flags callback",n)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var s=this.Oa(ct)||{},r=t?.$set||(t!=null&&t.$set_once?{}:t),i=t?.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in s||(n[o]=i[o]));this.F({[ct]:w({},s,n,r)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=w({},this.Oa(ct)||{});t.forEach((r=>{delete s[r]})),this.F({[ct]:s}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var s=this.Oa(Ut)||{},r=w({},s);for(var i of Object.keys(t))r[i]=w({},s[i],t[i]);this.F({[Ut]:r}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:w({},e,{[t]:{}})})}else this.q(Ut)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},wf={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Ls||this.Ya===Fr?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=Tl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var s=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(s!=null&&s.length)||s.some((r=>r.name==="visible"))})(),this.Ie=()=>{var e;C?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw at.error("started without valid sessionManager"),new Error(ho+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(ho+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(Vt))==null||!t.enabled),s=!this.Ne.disable_session_recording,r=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&s&&!r}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var s=!x(Object.assign)&&!x(Array.from);this.ro&&s?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,s,r;this.ro&&(this.Ya!==Ls&&this.Ya!==Fr&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(s=$.__PosthogExtensions__)!=null&&s.initSessionRecording?this.so(t):(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,this.ao,(i=>{if(i)return at.error("could not load recorder",i);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(Ho),(e=this.Mr)==null||e.unregister(lu)}uo(t,e){if(D(t))return null;var s,r=he(t)?t:parseFloat(t);return typeof(s=r)!="number"||!Number.isFinite(s)||0>s||s>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):r}ho(t){if(this.Mr){var e,s,r=this.Mr,i=()=>{var n,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((n=this.Ne.session_recording)==null?void 0:n.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;D(u)&&this.lo();var c=o?.minimumDurationMilliseconds;r.register({[Vt]:w({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:w({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(s=this._instance.sessionManager)==null?void 0:s.onSessionId(i)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Ls&&(this.Ya=Fr,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var s;e===void 0&&(e="log"),(s=this.Ja)!=null&&s.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,s=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(Vt);return(s==null||(e=s.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(Vt);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(s){return at.warn("persisted remote config for session recording is invalid and will be ignored",s),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,s,r;if(!this.eo){if((e=$.__PosthogExtensions__)==null||!e.initSessionRecording)return at.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[mu]:!0});var i;if(this.Ja||(this.Ja=(i=$.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Fr||this.Ya===Ls?void 0:(this.Ya=Ls,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Uu(this._instance).load());this.Ya=Nl,(s=(r=this.Ja).setDocumentWasEverVisible)==null||s.call(r,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[cu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,s;this.Ja||(s=this.Mr)==null||s.register({[t==="url"?du:hu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var s;return!((s=this.Ja)==null||!s.tryAddCustomEvent(t,e))}}},bf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,s=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return s.url_allowlist=(t=s.url_allowlist)==null?void 0:t.map((r=>new RegExp(r))),s.url_ignorelist=(e=s.url_ignorelist)==null?void 0:e.map((r=>new RegExp(r))),s}yo(){if(this.isBrowserSupported()){if(v&&C){var t=s=>{s=s||v?.event;try{this.bo(s)}catch(r){yn.error("Failed to capture event",r)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=s=>{s=s||v?.event;try{this.bo(s,_n)}catch(r){yn.error("Failed to capture copy/cut event",r)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else yn.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var s=e.autocapture_opt_out;Ke(s)&&(this.instance.persistence&&this.instance.persistence.register({[jn]:s}),this.co=s),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,s=[];return(e=this.mo)==null||e.forEach((r=>{var i=C?.querySelectorAll(r);i?.forEach((n=>{t===n&&s.push(r)}))})),s}get isEnabled(){var t,e,s=(t=this.instance.persistence)==null?void 0:t.props[jn],r=this.co,i=this.instance.Qi()&&!this.fo;if($e(r)&&!Ke(s)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!s;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var s,r=on(t);bu(r)&&(r=r.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(r,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===_n;if(r&&(function(d,h,p,f,g,m){var _;if(!v||Go(d)||p!=null&&p.url_allowlist&&!rl(p.url_allowlist,m)||p!=null&&p.url_ignorelist&&rl(p.url_ignorelist,m))return!1;if(p!=null&&p.dom_event_allowlist){var E=p.dom_event_allowlist;if(E&&!E.some((S=>h.type===S)))return!1}var b=Cu(d,f),I=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,A){var R=A?.element_allowlist;if(x(R))return!0;var N,T=function(J){if(R.some((z=>J.tagName.toLowerCase()===z)))return{v:!0}};for(var O of S)if(N=T(O))return N.v;return!1})(F,p)||!so(F,p?.css_selector_allowlist)||so(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:vp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var B=d.tagName.toLowerCase();switch(B){case"html":return!1;case"form":return(g||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(g||["change","click"]).indexOf(h.type)>=0;default:return I?(g||["click"]).indexOf(h.type)>=0:(g||["click"]).indexOf(h.type)>=0&&(Vo.indexOf(B)>-1||d.getAttribute("contenteditable")==="true")}})(r,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=uf(r,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=n.props;if(n.explicitNoCapture)return!1;var a=this.getElementSelectors(r);if(a&&a.length>0&&(o.$element_selectors=a),e===_n){var l,u=xu(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var s=this;(function(r,i,n){try{if(!(i in r))return $l;var o={next:r[i]},a=n((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return Se(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),r[i]=a,()=>{if(r[i]!==a)for(var l=r[i];Se(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else r[i]=o.next}}catch{return $l}})(v.history,t,(r=>function(i,n,o){r.call(this,i,n,o),s.So(t)}))}}So(t){try{var e,s=v==null||(e=v.location)==null?void 0:e.pathname;if(!s)return;s!==this._o&&this.isEnabled&&this._instance.capture(os,{navigation_type:t}),this._o=s}catch(r){k.error("Error capturing "+t+" pageview",r)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[Un]),this.rageclicks=new Al(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return te(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return D(this.Ne.capture_heatmaps)?D(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;hf.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var s=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Un]:s}),this.Co=s,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){bn(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,ni,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,xp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,ii,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(ni,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ii,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var s=this.instance.scrollManager.scrollY(),r=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=(function(o,a,l){for(var u=o;u&&Ft(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(M(a,c))return!0;u=ku(u)}return!1})(on(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:r),y:t.clientY+(n?0:s),target_fixed:n,type:e}}ke(t,e){var s;if(e===void 0&&(e="click"),!sl(t.target)&&bn(t)){var r=this.$o(t,e);(s=this.rageclicks)!=null&&s.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(on(t),this.instance.config.rageclick)&&this.Vt(w({},r,{type:"rageclick"})),this.Vt(r)}}Fo(t){!sl(t.target)&&bn(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Ct(v.location.href):v.location.href,s=this.Ne.custom_personal_data_properties,r=this.Ne.mask_personal_data_properties?[..._s,...s||[]]:[],i=ir(e,r,nr);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!mt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:pl,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",w({$current_url:this.R.url},this.R.metrics.reduce(((s,r)=>w({},s,{["$web_vitals_"+r.name+"_event"]:w({},r),["$web_vitals_"+r.name+"_value"]:r.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=s=>{var r;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(s?.name)||D(s?.value))Lt.error("Invalid metric received",s);else{var i=typeof s.navigationURL=="string"?s.navigationURL:void 0,n=this.Bo(i);if(!x(n)){var o=he(s.navigationId)||typeof s.navigationId=="string"?"navigation:"+s.navigationId:"url:"+n;if(!this.Ho||this.Ho>s.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,s.attribution&&s.attribution.interactionTargetElement&&(s.attribution.interactionTargetElement=void 0);var a=(r=this._instance.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0),l=w({},s,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});x(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Lt.error("Ignoring metric with value >= "+this.Ho,s)}}},this.Uo=()=>{if(!this.vo){var s,r,i,n,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(s=l.onLCP,r=l.onCLS,i=l.onFCP,n=l.onINP),s&&r&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&n(this.jo.bind(this),u),this.vo=!0}else Lt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[qn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,s=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(s)?((e=this._instance.persistence)==null?void 0:e.props[Vn])||["CLS","FCP","INP","LCP"]:s}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Rl;return t>0&&6e4>=t?Rl:t}get isEnabled(){var t=re?.protocol;if(t!=="http:"&&t!=="https:")return Lt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ke(this.Wo)?this.Wo:void 0;return Ke(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Lt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var s=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,r=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[qn]:s}),this._instance.persistence.register({[Vn]:r})),this.Co=s,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,s=this.zo,r=e?.postHogWebVitalsCallbacksByFlavor;r!=null&&r[s]||s==="web-vitals"&&x(r)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,s,(i=>{i?Lt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var s=this._instance.config.disable_capture_url_hashes?Ct(e):e,r=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[..._s,...r||[]]:[];return ir(s,i,nr)}Lt.error("Could not determine current URL")}}},Ef={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var s;if(v&&this.isEnabled&&(s=$.__PosthogExtensions__)!=null&&s.errorWrappingFunctions){var r=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=r(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=i(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=n(this.captureException.bind(this)))}catch(o){Ms.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Hn]),this.Jo=new yh(w({},(function(s){var r,i,n,o;return s===void 0&&(s={}),{refillRate:(r=(i=s.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:s.__exceptionRateLimiterRefillRate)!==null&&r!==void 0?r:1,bucketSize:(n=(o=s.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:s.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Ms})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=w({},e,t):(x(t)?this.Ko:t)&&(e=w({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ms.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",(r=>{if(r)return Ms.error("failed to load script",r);t()}))}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Hn]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,s,r,i=(e=t==null||(s=t.$exception_list)==null||(s=s[0])==null?void 0:s.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Ms.info("Skipping exception capture because of client rate limiting.",{exception:i}):(r=this._instance.exceptions)==null||r.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,s;this.Xo=[],this.tl=new Lh([new zh,new Qh,new Vh,new qh,new Zh,new Yh,new Kh,new Xh],(function(r){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;i>o;o++)n[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` -`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=Xa.test(h)?h.replace(Xa,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of n){var g=f(p,r);if(g){u.push(g);break}}if(u.length>=50)break}}}return(function(m){if(!m.length)return[];var _=Array.from(m);return _.reverse(),_.slice(0,50).map((E=>{return w({},E,{filename:E.filename||(b=_,b[b.length-1]||{}).filename,function:E.function||ms});var b}))})(u)}})("web:javascript",jh,Wh)),this._instance=t,this.Xo=(e=(s=this._instance.persistence)==null?void 0:s.get_property(Wn))!==null&&e!==void 0?e:[],this.el=Qr(this.il()),this.rl=new tp(this.el)}onConfigChange(){this.el=Qr(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,s,r;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(s=i.errorTracking)==null?void 0:s.suppressionRules)!==null&&e!==void 0?e:[],o=(r=i.errorTracking)==null?void 0:r.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[Wn]:this.Xo,[zn]:o})}}}get nl(){var t,e=!!this._instance.get_property(zn),s=this._instance.config.error_tracking.captureExtensionExceptions;return(t=s??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var s=(function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce(((a,l)=>ep.has(l)?(o.push(l),a):(a[l]=n[l],a)),{}),droppedKeys:o}})(this.sl(e)),r=s.sanitizedProperties,i=s.droppedKeys;i.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(w({[Zr]:t,[Xr]:new Date().toISOString()},r))}catch(n){Xe.error("Failed to add exception step. Ignoring breadcrumb.",n)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Xe.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void Xe.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void Xe.info("Skipping exception capture because it was thrown by the PostHog SDK")}var s=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,r=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;r&&(s.$release_id=r);try{var i=this._instance.capture("$exception",s,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return Xe.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Xe.error("Failed to process exception event. Ignoring this exception.",o)}var n}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:w({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?w({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((s,r)=>{var i=r.type,n=r.value;return W(i)&&i.length>0&&s.$exception_types.push(i),W(n)&&n.length>0&&s.$exception_values.push(n),s}),{$exception_types:[],$exception_values:[]});return this.Xo.some((s=>{var r=s.values.map((i=>{var n=td[i.operator],o=e[i.key];if(!n||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&n(a,o)}));return s.type==="OR"?r.some(Boolean):r.every(Boolean)}))}catch(s){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",s),!1}}ul(t){return t.flatMap((e=>{var s,r;return(s=(r=e.stacktrace)==null?void 0:r.frames)!==null&&s!==void 0?s:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,s,r,i,n=(e=(s=t[0].stacktrace)==null?void 0:s.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(r=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&r!==void 0&&r}return!1}al(t){return!D(t)&&L(t)}}},Sf=w({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var s,r;if(this.Mr&&this.Mr.register({[Uo]:!!e.productTours}),!En(this._instance))return!this.vl&&D((s=this.Mr)==null?void 0:s.props[Ws])||Pr.info("product tours disabled; stopping and clearing cached tours"),(r=this.vl)==null||r.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&En(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"product-tours",(r=>{r?Pr.error("Could not load product tours script",r):t()}))}fl(){var t;!this.vl&&(t=$.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=$.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!L(this.cl)||e){var s=this.Mr;if(s){var r=s.props[Ws];if(L(r)&&!e)return this.cl=r,void t(r,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:i=>{if(En(this._instance)){var n=i.statusCode;if(n!==200||!i.json){var o="Product Tours API could not be loaded, status: "+n;return n===0?i.error||Pr.warn(o):Pr.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,s&&s.register({[Ws]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){D(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Ws)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},$i),xf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var s=this.globalsForEvent(e);this.gl.push(s),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,s,r,i,n,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:w({},Ic(t,pf),{properties:w({},t.properties,f?{$set:w({},(e=(s=t.properties)==null?void 0:s.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:w({},(r=(i=t.properties)==null?void 0:i.$set_once)!==null&&r!==void 0?r:{},p)}:{}),elements_chain:(n=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&n!==void 0?n:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,s=(e=t.tagName)==null?void 0:e.toLowerCase();return s==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):s==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,s,r,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=C?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(m,_,E)=>{if(m!=null&&m[_]){var b=m[_];m[_]=E(b),c.push((()=>{m[_]=b}))}},f=m=>{if(h.has(m))return m;var _=d.bl(m);return _&&h.add(_),_},g=m=>m.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(m=>function(_){var E=f(_);return E?m.call(this,E):_})),p(u,"insertBefore",(m=>function(_,E){var b=f(_);return b?m.call(this,b,E):_})),p(u,"replaceChild",(m=>function(_,E){var b=f(_);return b?m.call(this,b,E):E})),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"prepend",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))}))})),[(i=l.Element)==null?void 0:i.prototype,(n=l.CharacterData)==null?void 0:n.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((m=>{p(m,"before",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"after",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];return _.apply(this,g(b))})),p(m,"replaceWith",(_=>function(){for(var E=arguments.length,b=new Array(E),I=0;E>I;I++)b[I]=arguments[I];var F=g(b);return b.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(m=>function(_,E){var b=f(E);return b?m.call(this,_,b):null})),this.wl=()=>{c.forEach((m=>m())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var s=this._l();try{var r=t(s);return e&&s(),r}catch(i){throw s(),i}}setupSiteApp(t){var e=this.apps[t.id],s=()=>{var o;!e.errored&&this.gl.length&&(Ze.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},r=!1,i=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),r&&s()};try{var n=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),i(a)}})),!1).processEvent;n&&(e.processEvent=n),r=!0}catch(o){Ze.error(Ml+t.id,o),i(!1)}if(r&&e.loaded)try{s()}catch(o){Ze.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var s of t)this.setupSiteApp(s)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var s=this.globalsForEvent(t),r=function(n){try{e.xl((()=>n.processEvent==null?void 0:n.processEvent(s)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))r(i)}}onRemoteConfig(t){var e,s,r,i=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((s=this.yl)==null||s.call(this),t.ok){var n=t.config;if((r=n.siteApps)!=null&&r.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of n.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},kf={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,s,r=this.Il();r?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(s=$.__PosthogExtensions__)==null||(s=s.tracingHeadersPatchFns)==null?void 0:s._patchFetch(r,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"tracing-headers",(r=>{if(r)return df.error("failed to load script",r);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return L(t)?(L(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(L(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},If=w({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return q.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(D(e))return q.warn("Flags not loaded yet. Not loading surveys.");var s=L(e);this.Rl=s?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],s=0;slocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ll);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())q.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var s=t.generateSurveys;if(s)return void this.Dl(s,e);var r=t.loadExternalDependency;if(!r)return void this.$l(Wo);r(this._instance,"surveys",(i=>{i||!t.generateSurveys?this.$l("Could not load surveys script",i):this.Dl(t.generateSurveys,e)}))}catch(i){throw this.$l("Error initializing surveys",i),i}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new mf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var s,r=this._instance.get_property(Kn);if(r&&!e)return t(r,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((i=>t(i.surveys,i.context))):(typeof Promise<"u"&&(this.Ll=new Promise((i=>{s=i}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:i=>{var n;this.Ll=null;var o=i.statusCode;if(o!==200||!i.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):i.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(s==null||s({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter((p=>(function(f){return!(!f.start_date||f.end_date)})(p)&&(rd(p)||(function(f){var g;return!((g=f.conditions)==null||(g=g.actions)==null||(g=g.values)==null||!g.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(n=this._instance.persistence)==null||n.register({[Kn]:c,[ti]:Date.now()});var h={isLoaded:!0};t(c,h),s?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ti);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var s,r={id:t,current_iteration:(s=e?.iteration)!==null&&s!==void 0?s:null};nd(r);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(s){q.error("Error in survey callback",s)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!D(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);q.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((s=>{var r;e=(r=s.find((i=>i.id===t)))!==null&&r!==void 0?r:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:Ar};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(D(this._surveyManager))return{eligible:!1,reason:Ar};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(D(this._surveyManager))return q.warn("init was not called"),{visible:!1,disabledReason:Ar};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return D(this._surveyManager)?(q.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:Ar})):new Promise((s=>{this.getSurveys((r=>{var i,n=(i=r.find((a=>a.id===t)))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);s({visible:o.eligible,disabledReason:o.reason})}else s({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,s){var r;if(D(this._surveyManager))q.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(Zp.includes(i.type)){var n=C?.querySelector(e);if(n)return(r=i.appearance)!=null&&r.surveyPopupDelaySeconds?(q.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+i.id+" with delay of "+((o=i.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(i,n,s),q.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,s);q.warn("Survey element not found")}else q.warn("Surveys of type "+i.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var s;if(D(this._surveyManager))q.warn("init was not called");else{var r=this.Hl(t);if(r){var i=r;if((s=r.appearance)!=null&&s.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=w({},r,{appearance:w({},r.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==io.Popover&&e.initialResponses&&q.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(r);if(!n.eligible)return void q.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==io.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else q.warn("Survey not found")}}cancelPendingSurvey(t){D(this._surveyManager)?q.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},$i),Cf={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,s){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),to(this.instance.config)||!v||!C)return!1;t=t??v.location,s=s??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var r,i=vf||ci(t.hash,"__posthog")||ci(t.hash,"state"),n=i?el((()=>JSON.parse(atob(decodeURIComponent(i)))))||el((()=>JSON.parse(decodeURIComponent(i)))):null;return n&&n.action==="ph_authorize"?((r=n).source="url",r&&Object.keys(r).length>0&&(n.desiredHash?t.hash=n.desiredHash:s?s.replaceState(s.state,"",t.pathname+t.search):t.hash="")):((r=JSON.parse(e.getItem(Ol)||"{}")).source="localstorage",delete r.userIntent),!(!r.token||this.instance.config.token!==r.token||(this.loadToolbar(r),0))}catch{return!1}}Zl(t){var e=$.ph_load_toolbar||$.ph_load_editor;!D(e)&&Se(e)?e(t,this.instance):Dl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(wu));if(!v||e)return!1;var s=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,r=w({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(w({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var i;this.Wl(1),(i=$.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",(n=>{if(n)return Dl.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(r)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(r)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,s){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),s===void 0&&(s=void 0),this.maybeLoadToolbar(t,e,s)}}},Ff=w({experiments:ye},$i),Pf={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;D(e)||(Ke(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||to(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var s=t.loadExternalDependency;if(!s)return void this.eu(Wo);s(this._instance,"conversations",(r=>{r||!t.initConversations?this.eu("Could not load conversations script",r):this.tu(t.initConversations),this.Kl=!1}))}catch(r){this.eu("Error initializing conversations",r),this.Kl=!1}}else Ue.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,Ue.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else Ue.error("Cannot complete initialization: remote config is null")}eu(t,e){Ue.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():Ue.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":to(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?D(this.Jl)||!this.Jl.token?"missing_token":$!=null&&$.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,s){var r=this;return X((function*(){return r._conversationsManager?r._conversationsManager.sendMessage(t,e,s):(Ue.warn(Dt),null)}))()}getMessages(t,e){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.getMessages(t,e):(Ue.warn(Dt),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Dt),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Dt),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Dt),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Dt),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Dt),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},Af={logs:class{constructor(t){var e,s=this;this.iu=!1,this.ru=!1,this.rt=se("[logs]"),this.nu=w({},this.rt,{error(){for(var r=arguments.length,i=new Array(r),n=0;r>n;n++)i[n]=arguments[n];i.some(Vl)||s.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var r,i;this.Sa=0,(r=this.ou)==null||r.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ie(v,"online",this.au)}uu(t,e,s,r){var i,n=(function(o,a){var l,u,c,d,h,p,f,g=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,m=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,E=x(_)?Math.max(m,2048):Math.max(m,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:g,maxBufferSize:m,maxQueueSize:E,maxBatchRecordsPerPost:100,rateCapWindowMs:g,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,s);return[new Th(this.hu(t,e),n,this.nu,(()=>this.du()),(o=>o()),void 0,r),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var s;(s=this.ou)==null||s.reset(),this.cu=e;var r=this.uu((()=>this.tr),(i=>{this.tr=i}));this.ou=r[0],this.fu=r[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var s;(s=this.lu)==null||s.reset(),this.gu=e;var r=this.uu((()=>this.su),(i=>{this.su=i}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},ql);this.lu=r[0],this.mu=r[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var s=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(s)&&s&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){Vl(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(s=>{var r;s||(r=t.logs)==null||!r.initializeLogs?this.rt.error("Could not load logs script",s):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(Wo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var s=this._instance;return{get isDisabled(){return!1},get optedOut(){return!s.is_capturing()},getPersistedProperty:r=>r===ut.LogsQueue?t():void 0,setPersistedProperty(r,i){var n;r===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:r=>this.Ot(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Ru(this.Sa,3))e({kind:"fatal",error:xn(void 0,"logs endpoint is unreachable, dropping batch")});else{var s=!1,r=n=>{s||(s=!0,clearTimeout(i),e(n))},i=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),r({kind:"retry-later",error:xn(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:n=>{var o=n.statusCode;if(this.ku(o),o>=200&&300>o)r({kind:"ok"});else if(o===413)r({kind:"too-large"});else if(o!==0&&o!==429&&500>o)r({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(n.error||this.rt.warn("Logs request failed before receiving an HTTP response"),r({kind:"retry-later",error:xn(n.error,"logs request failed before receiving an HTTP response")})):r({kind:"retry-later",error:(a=n.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Tu(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,Y.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,ql,(e=>{this.su=e}))}xu(t,e,s,r,i){if(e.length!==0){var n=e.map((a=>a.record));i([]);var o=ru(n,su(s,Y.LIB_NAME,Y.LIB_VERSION),r,Y.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var s=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),r=s.windowId,i=s.sessionStartTimestamp,n=s.lastActivityTimestamp;e.sessionId=s.sessionId,e.windowId=r,D(i)||(e.sessionStartTimestamp=i),D(n)||(e.lastActivityTimestamp=n)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Ct($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},$f={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new Nh(this.hu(),(function(r){var i,n,o,a,l,u=r?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:r?.serviceName,serviceVersion:(n=u?.["service.version"])!==null&&n!==void 0?n:r?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:r?.environment,resourceAttributes:u,beforeSend:r?.beforeSend,flushIntervalMs:(a=r?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=r?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(s),this.rt)),this.ou}count(t,e,s){e===void 0&&(e=1),this.vu().count(t,e,s)}gauge(t,e,s){this.vu().gauge(t,e,s)}histogram(t,e,s){this.vu().histogram(t,e,s)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((s=>this.rt.error("PostHog metrics flush failed:",s)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:s=>e.Jt(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((s=>{var r=!1,i=o=>{r||(r=!0,clearTimeout(n),s(o))},n=setTimeout((()=>i({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(w({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},Rf=w({},$i,wf,bf,Ef,Sf,xf,If,kf,Cf,Ff,Pf,Af,$f);Te.__defaultExtensionClasses=w({},Rf);var cd=(function(){Y.SDK_DIST_CHANNEL="npm";var t=Ys[as]=new Te;return(function(){function e(){e.done||(e.done=!0,ad=!1,Z(Ys,(function(s){s._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const ud="CodeFile",dd="GeneratedCode",Tf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function po(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Nf(t={},e=0){const s=po(t.artifactType||t.type||ud),r=po(t.artifactName||t.name||t.fileName||`${dd}-${e+1}`);return`${s||"artifact"}-${r||e+1}`}function hd(t={},e=0){const s=kt(t),r=s.artifactType||s.type||ud,i=s.artifactName||s.name||dd;let n=s.fileName||i;return n.endsWith(".dart")||(n+=".dart"),{id:po(s.id)||Nf({...s,artifactType:r,artifactName:i,fileName:n},e),artifactType:r,artifactName:i,fileName:n,deployPath:s.deployPath||"",description:s.description||"",code:s.code||s.content||"",dependencies:pd(s.dependencies),imports:Array.isArray(s.imports)?s.imports:[],publicApi:Array.isArray(s.publicApi)?s.publicApi:[],relationships:fd(s.relationships),deployStatus:s.deployStatus||"pending",review:s.review||null,metadata:kt(s.metadata),codeType:s.codeType||Tf[r]||"O"}}function pd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const s=kt(e),r=s.name||s.package;return r?{name:r,version:s.version||null,versionRequired:!!(s.versionRequired||s.required),inferred:!!s.inferred,...s.reason?{reason:s.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,s])=>({name:e,version:s||null,inferred:!1})):[]}function fd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const s=kt(e);return!s.from&&!s.to?null:{from:s.from||null,to:s.to||null,type:s.type||"uses",description:s.description||""}}).filter(Boolean):[]}function fo(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const s=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!s)return null;try{return JSON.parse(s[1].trim())}catch{return null}}}function or(t,e={}){const s=[],r=typeof t=="string"?fo(t):t,n=kt(r||{});!r&&typeof t=="string"&&s.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(n.artifacts)?n.artifacts:[{artifactType:n.artifactType||e.artifactType,artifactName:n.artifactName||e.artifactName,fileName:n.fileName||e.fileName,description:n.description,code:n.code||e.code||(typeof t=="string"?t:""),dependencies:n.dependencies||e.dependencies,relationships:n.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&s.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>hd(d,h)),l=new Map(o.map((d,h)=>[kt(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=fd(n.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:n.schemaVersion||e.schemaVersion||null,id:n.id||e.id||"bundle-current",title:n.title||n.name||e.title||"Generated artifact bundle",description:n.description||e.description||"",artifacts:a,dependencies:pd(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...s,...Array.isArray(n.warnings)?n.warnings:[]],metadata:kt(n.metadata)}}function fi(t){return or(t).artifacts[0]||hd()}function yt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function ws(t){return JSON.stringify(t,null,2)}function Mf(t){return ws({task:"architect",userRequest:String(t??"")})}function Lf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ws(e):ws({task:"generate_bundle",bundleSpec:e})}function Of(t){return ws({task:"review_bundle",generatedBundle:yt(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function Zo(t,e=null){const s={stage:t};return e!=null&&(s.bundle=yt(e)),s}function Df({bundleSpec:t,artifactBundle:e,bundleReview:s,artifactId:r,userFeedback:i}){return ws({task:"regenerate_artifact",artifactId:r,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(i)})}function gd({bundleSpec:t,artifactBundle:e,bundleReview:s,userFeedback:r}){return ws({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(s),userFeedback:String(r??"")})}const Gl={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},Bf=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function jf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function md(t,e=0){if(!Le(t)||e>3)return null;if(jf(t))return t;for(const s of Bf){const r=t[s];if(Le(r)){const i=md(r,e+1);if(i)return i}}return null}function gi(t){return Array.isArray(t)?t.some(gi):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(gi):!1}function go(t){return Array.isArray(t)?t.some(go):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(go):!1}function vd(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function Uf(t,e){if(Le(t))for(const[s,r]of Object.entries(t)){if(!Le(r))continue;const i=Le(r.categories)?r.categories:{},n=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):r.matched===!0&&e.add(vd(s))}}function Hf(t,e){if(!t)return;const s=Array.isArray(t)?t.flatMap(r=>Le(r)?Object.entries(r):[]):Object.entries(t);for(const[r,i]of s){if(!gi(i))continue;const n=vd(r),o=i?.raiFilterResult?.raiFilterTypeResults||(n==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>gi(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(n)}}function Wf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function zf(t){const e=md(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);Uf(e.filterSummary,s),Hf(e.filterResults,s);const r=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||s.size>0,i=e.invocationResult||null,n=go(e.filterSummary||e.filterResults);return!r&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:r?"blocked":"unavailable",invocationResult:i,matchedFilters:[...s]}}function qf(t,e){const s=zf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Wf))],i=s.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Kl(r)}.`:"Safety screening could not be completed. Please try again.");return n.name="ModelArmorError",n.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",n.isModelArmor=!0,n.pipelineStep=e,n.userTitle=i?"Request blocked for safety":"Safety check unavailable",n.userMessage=i?`The safety check detected ${Kl(r)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",n.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",n.matchedFilters=s.matchedFilters,n}function Vf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of Vf(t).split(` -`)){if(!/^[A-Za-z_$]/.test(r)||e.test(r))continue;const i=r.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&s.push(i[1])}return s}function Xo(t,e){const s=t.replace(/\.dart$/,"");if(e==="W")return s.replace(/(^|_)(\w)/g,(r,i,n)=>n.toUpperCase());if(e==="A"){const r=s.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return r.charAt(0).toLowerCase()+r.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:s}async function Yl(t){const e=new TextEncoder().encode(String(t||"")),s=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(s),r=>r.toString(16).padStart(2,"0")).join("")}async function Gf(t,e=new Map){const s={},r=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=Xo(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Yl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Yl(c)),s[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>r.add(p))}}const i=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(r).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(s),functionsMapContents:JSON.stringify(n)}}const Kf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Jf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Yf=["Struct","Record"],Zf=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>kn(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } -class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>kn(t).some(e=>{const s=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let r;for(;(r=s.exec(e))!==null;){const i=r[1];if(!(new RegExp(`this\\.${i}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${i}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { +(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 { 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=>kn(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { +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 { const W({this.textStyle}); final TextStyle? textStyle; @override _S createState() => _S(); @@ -24,37 +24,37 @@ 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 ar(t){let e="",s=0;for(;s"&&(s--,s===0))return{inner:t.slice(e+1,r),end:r+1};return null}function Qf(t,e){const s=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!s)return null;let r=0;for(let i=s.index+s[0].length-1;ieg(t).usable);function sg(t=""){const e=ar(t);return tg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:i})=>({id:s,severity:r,message:i}))}function rg(t){const e=[],s=t.matchAll(/\bFuture\b/g);for(const r of s){let i=r.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=Xf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iXl(o.functionName)===r);if(i)return i;const n=o=>!o.functionName.startsWith("_");return s.find(n)||s[0]}function Ri(t=""){return Array.from(ar(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function ig(t="",e=""){return Qo(t,e)?.returnType||null}function Ql(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function ng(t,e){const s=Ri(e);if(s.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(s.some(l=>Ql(l)===i)||s.length>1)return null;const[o]=s,a=`${Ql(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function ea(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function og(t,e,s=""){const r=Qo(e,s)?.functionName;if(!r)return null;const i=String(t||"").split("/").pop(),n=Xo(i,"A");if(n===r)return null;const o=`${ea(r)}.dart`;return`File name "${i}" does not match Action "${r}". FlutterFlow derives the action from the file name, so it looks for "${n}" and reports Action "${n}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${n}".`}function ag(t="",e=""){return Qo(t,e)!==null}function lg(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>Jf.has(r)?!1:!Yf.some(n=>r.endsWith(n))||e.has(r))}function cg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=ig(t,e),i=lg(r,s);if(i.length===0)return null;const[n]=i;let o;return s.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:r===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${r}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function ug(t,e={}){const s=[],r=t.fileName||"",i=t.code||"";if(Kf.has(t.artifactType)||s.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),r.endsWith(".dart")||s.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return s.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),s;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||s.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of sg(i))s.push(Qe(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!ag(i,t.artifactName)&&s.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(Ri(i)),o=cg(i,{functionName:t.artifactName,declaredTypes:n});o&&s.push(Qe(t,"error",o));const a=og(r,i,t.artifactName);a&&s.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&s.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=ng(r,i);n&&s.push(Qe(t,"info",n))}return s}function dg(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(n=>Ri(n.code||""))),r=e.flatMap(n=>ug(n,{declaredTypes:s})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Zl[n.artifactType]||Zl.CodeFile}));return{valid:r.every(n=>n.severity!=="error"),findings:r,deployHints:i}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function hg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const pg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function fg(t="",e=""){const s=hg(t),r=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),i=s.split(` -`).filter(n=>{const o=tc(n);return o===null||!r.has(o)?!0:!pg.test(n)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const gg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function _d(t){let e="",s=0;for(;s{const r=s.name||s.package;if(!r||r==="flutter")return e;const i=s.versionRequired||s.required;return e[r]=i&&s.version||"",e},{})}function wg(t){const e=new Map,s=new Map,r=[];for(const i of t)e.has(i.fileName)?r.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),s.has(i.path)?r.push(`Duplicate deploy path "${i.path}" for artifacts "${s.get(i.path)}" and "${i.artifactId}".`):s.set(i.path,i.artifactId);return r}function bg(t,e={}){const s=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||s.map(p=>p.id)).map(p=>s.find(f=>f.id===p)).filter(Boolean),n=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=yg(p),g=p.fixedCode||p.code||"",m=p.codeType||vg[p.artifactType]||Ne.OTHER;g.trim()||n.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:f,content:g,type:m,path:p.deployPath||_g(f,m),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Ne.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:m})=>m.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:m})=>`// ${m.artifactId} +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} ${m.content}`).join(` -`)},g=new Set(l.slice(1).map(({index:m})=>m));o=o.filter((m,_)=>!g.has(_)),o[p.index]=f}const u={...sc(t?.dependencies),...i.reduce((p,f)=>({...p,...sc(f.dependencies)}),{})},c={};i.forEach(p=>{ta(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=wg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:n,errors:h}}function Eg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Sg(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function xg(t,e){const r=[Sg(t),Eg(e.content),e.artifactName].find(i=>/^[A-Z][A-Za-z0-9_]*$/.test(String(i||"")));if(!r)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return r}function kg(t,e=new Map){const s=[];for(const[r,i]of t.entries())i.type!=="C"||e.has(i.path)||s.push({artifactId:i.artifactId||r,className:xg(r,i),content:i.content,fileName:r,path:i.path});return s}function Ig(t,e){const s=new Set(e.map(r=>r.path));return new Map(Array.from(t.entries()).filter(([,r])=>!s.has(r.path)))}const rc={pass:0,warning:1,fail:2},Cg=["manualActions"];function De(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function gt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const s=e.filter(r=>typeof r=="string").join(` -`);if(s)return s}}return""}function tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Fg(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const s=Number(e);if(Number.isFinite(s))return s;const r=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return r?Number(r[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function sa(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function mo(...t){return t.filter(Boolean).reduce((e,s)=>rc[s]>rc[e]?s:e,"pass")}function yd(t,e="warning",s="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:s};const r=De(t),i=gt(r.message,r.title,r.issue,r.description,r.summary);return i?{severity:sa(r.severity||r.status||r.level)||e,message:i,suggestion:gt(r.suggestion,r.fix,r.recommendation,r.action),source:r.source||s}:null}function vo(t,e="review"){const s=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>tt(s[i]).map(o=>yd(o,n,e)).filter(Boolean))}function Pg(t,e,s=null){if(typeof t=="string")return{id:`${s||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:s,source:"Code Review"};const r=De(t),i=gt(r.title,r.action,r.step,r.message,r.name,r.description);return i?{id:r.id||`${s||"bundle"}-manual-${e+1}`,title:i,detail:gt(r.detail,r.instructions,r.description),location:gt(r.location,r.flutterFlowPath,r.path),timing:gt(r.timing,r.phase)||"unspecified",artifactId:s,source:gt(r.source)||"Code Review"}:null}function _o(t,e=null){const s=De(t);return Cg.flatMap(r=>tt(s[r])).map((r,i)=>Pg(r,i,e)).filter(Boolean)}function Ag(t){let e=typeof t=="string"?fo(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const s=De(e);typeof s.content=="string"&&(e=fo(s.content)||e);const r=De(e),i=De(r.reviewResult||r.codeReview||r.result);return{rawText:"",root:Object.keys(i).length?i:r}}function $g(t,e){const s=[e.id,e.fileName,e.artifactName].map(We);return t.find(r=>{const i=De(r);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(n=>n&&s.includes(n))})||null}function Rg(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function Tg(t,e){return tt(t?.relationships).filter(s=>We(s?.from)===We(e.id)||We(s?.to)===We(e.id))}function Ng(t,e){return tt(t?.metadata?.compatibility?.findings).filter(s=>!s?.artifactId||We(s.artifactId)===We(e.id)).map(s=>yd(s,"warning","Compatibility check")).filter(Boolean)}function Mg(t,e,s,r){const i=$g(e,s),n=De(i?.review||i||s.review),o=Object.keys(n).length>0,a=[...vo(n),...Ng(t,s)],l=_o(n,s.id),u=sa(n.status||n.verdict||n.outcome||n.result),c=a.length?mo(...a.map(h=>h.severity)):null,d=mo(u,c,o?null:"warning");return{...s,index:r,status:d,statusReason:o?gt(n.summary,n.overview,n.assessment,n.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof n.fixedSource=="string"&&n.fixedSource.trim()?n.fixedSource.trim():null,pathHint:Rg(t,s),relationships:Tg(t,s)}}function Lg({status:t,score:e,artifactPresentations:s,manualSteps:r}){const i=s.length;if(i===0&&r.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const n=s.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),i&&o.push(`${i} artifact${i===1?"":"s"}: ${n.pass} pass, ${n.warning} warn, ${n.fail} fail.`),r.length&&o.push(`Do before deploy: ${r.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function Og({bundle:t,reviewResult:e}){const s=De(t),r=tt(s.artifacts),{root:i,rawText:n}=Ag(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(b=>Object.keys(b).length)||{},a=tt(i.artifacts||i.files||i.reviews),l=r.map((b,I)=>Mg(s,a,b,I)),u=vo(i),d=[...vo(o),...u],h=[..._o(o),..._o(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,F)=>F.findIndex(P=>P.title===b.title&&P.artifactId===b.artifactId)===I),p=sa(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=mo(p,...d.map(b=>b.severity),...l.map(b=>b.status)),g=o.score??i.score??i.overallScore??n,m=Fg(g),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n)||Lg({status:f,score:m,artifactPresentations:l,manualSteps:h}),E=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:s.title||"Generated artifact bundle",description:s.description||"",status:f,score:m,summary:_,findings:d,manualSteps:h,artifacts:l,counts:E,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:tt(s.deployOrder),relationships:tt(s.relationships),warnings:tt(s.warnings),compatibility:De(s.metadata?.compatibility)}}const Dg=/^\uFEFF/;function Os(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).join(` -`)}function Bg(t){const e=String(t??"").replace(Dg,"");if(!e.trim())return"";const s=e.split(` -`),r=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,n=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,n<0&&(n=d),o.push(c+h)),c+=s[d].length+1}}if(i===0)return Os(s);{const c=yo(e);if(!c.error&&o.every(h=>nc(h,c.commentAndStringRanges)))return Os(s)}if(i===1){const c=Os(s.slice(0,n)),d=Os(s.slice(n+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cm));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;cc.length>0);return u.length===0?"":u.join(` +${d}`,{commentAndStringRanges:g}=bo(f),m=p.length+1+h;if(oc(m,g)){l.push(d);continue}a.push(Ds(l)),l=null}const u=a.filter(c=>c.length>0);return u.length===0?"":u.join(` -`)}function jg(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function wd(t){const e=jg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),s=>s[1])}function bd(t){return`${ea(t)}.dart`}function Ug(t){return Xo(t,"W")}const ic={"(":")","[":"]","{":"}"},Hg={")":"(","]":"[","}":"{"},Wg=/[A-Za-z0-9_]/;function yo(t){const e=[{kind:"code",opener:null,openedLine:0}],s=[];let r=1,i=0;const n=(c,d)=>{(c===` +`)}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===` `||c==="\r"&&d!==` -`)&&r++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&s.push({start:c.startIndex,end:t.length})};for(;i0?t[i-1]:"",f=i>1?t[i-2]:"",g=(p==="r"||p==="R")&&!Wg.test(f);e.push({kind:"string",quote:c,triple:h,raw:g,startIndex:i,openedLine:r}),i+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:r}),i++;continue}if(Hg[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${r}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:s}):(a(),{error:o??`line ${r}: unexpected "${c}" with no matching opener`,commentAndStringRanges:s})}n(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:s}}function zg(t){return yo(String(t??"")).error}function nc(t,e){return e.some(({start:s,end:r})=>t>=s&&ttypeof s=="string"?s:s?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const qg=/^dependencies\s*:\s*(?:#.*)?$/,Vg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function ra(t){const e=t.match(Vg);return e?e[1]??e[2]??e[3]:null}function Ti(t){const e=t.trim();return e===""||e.startsWith("#")}function pr(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function ia(t,e){const s=t.findIndex(n=>e.test(n));if(s===-1)return null;let r=s,i=null;for(let n=s+1;n=0.0.0"}`}function Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const i=s.split(` -`),n=new Set(Sd(s)),o=[],a=[];for(const[u,c]of r)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:s,added:[],alreadyPresent:a};const l=na(i);if(l){const u=o.map(([c,d])=>oc(l.childIndent,c,d));i.splice(l.endIndex,0,...u)}else i.length>0&&i[i.length-1].trim()!==""&&i.push(""),i.push("dependencies:"),o.forEach(([u,c])=>{i.push(oc(" ",u,c))});return{yaml:i.join(` -`),added:o.map(([u])=>u),alreadyPresent:a}}function Yg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:s,overridden:[],skipped:[]};const i=s.split(` -`),n=Ni(s),o=[],a=[];for(const[l,u]of r){const c=n.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(pr(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` -`),overridden:o,skipped:a}}function Id(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),na(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),Sd(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const Zg=">=3.0.0 <4.0.0",Xg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations","integration_test"]);function Cd(t){const e=String(t||"").trim(),s=e[0];return s!=="'"&&s!=='"'||e[e.length-1]!==s?e:e.slice(1,-1).replaceAll(`${s}${s}`,s)}function Qg(t=""){const e=mg(t).filter(s=>!s.startsWith("dart:")&&!s.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function ac(t,e,s){const r=[];for(const[i,n]of t){if(Xg.has(i)&&!n.isScalar){s.add(i);continue}if(!n.isScalar){r.push(i);continue}e[i]=Cd(n.constraint)}return r}function em(t){const e=new Set,s={},r={},i=ac(Ni(t),s,e);i.push(...ac(Gg(t,"dependency_overrides"),r,e));const n=new Set([...Object.keys(s),...e]),{sdk:o}=xd(t);return{sdkConstraint:Cd(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:n,unrepresentable:i}}function tm(t,e,s){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${s.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function sm(t,e){const{sdkConstraint:s,dependencies:r,overrides:i,sdkPackages:n,availablePackages:o,unrepresentable:a}=em(e),l={sdkConstraint:s,dependencies:r,overrides:i,sdkPackages:n},u=[],c=[];for(const d of t){const{className:h,content:p}=d;if(a.length>0){c.push({className:h,reason:`${h} was not compiled before deploying: your project declares ${a.join(", ")} from a source that cannot be reproduced outside the project, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:f}=Qg(p),g=ta(p).filter(m=>!o.has(m));if(f.length>0||g.length>0){c.push({className:h,reason:tm(h,f,g)});continue}u.push({fileName:`${ea(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}function lc(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",i=[];for(const n of s){const o=Fd(n);o&&i.push(o)}return{events:i,buffer:r}}function rm(t){const e=Fd(t);return e?[e]:[]}function Fd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function im(t,e={}){const{onPhase:s,onLog:r}=e;let i=null,n="";const o=a=>{if(a.event==="phase"){a.message&&s&&s(a.message);return}if(a.event==="log"){a.message&&r&&r(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=lc(n,l.decode(c,{stream:!0}));n=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());n=a.buffer,a.events.forEach(o)}return rm(n).forEach(o),i?{...i,success:i.success===!0||i.success===void 0&&t.ok}:{success:!1,error:t.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const nm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(nm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function om(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let s=0;s0)}function lm(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:lm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const s={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,n;for(;(n=r.exec(e))!==null;){const[,o,a]=n;if(!wt(a))return null;i=!0,o===">="||o===">"?(s.min=a,s.minInclusive=o===">="):(s.max=a,s.maxInclusive=o==="<=")}return i?s:null}function cc(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.min!==null){const r=mi(e,s.min);if(r<0||r===0&&!s.minInclusive)return!1}if(s.max!==null){const r=mi(e,s.max);if(r>0||r===0&&!s.maxInclusive)return!1}return!0}function cm(t,e){const s=aa(t);if(!s||!wt(e))return!1;if(s.max===null)return!0;const r=mi(s.max,e);return r>0?!0:r===0&&s.maxInclusive}function ns(t){const e=aa(t);return e?e.min:null}const um="https://pub.dev/api/packages/",dm=8e3;function hm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let n=null;for(const o of i){const a=o?.version;if(!a||o.retracted||am(a))continue;const l=o.pubspec?.environment||{};s&&l.sdk&&!cc(l.sdk,s)||r&&l.flutter&&!cc(l.flutter,r)||(!n||mi(a,n)>0)&&(n=a)}return n?{version:n,constraint:`^${n}`}:null}async function pm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:i=fetch}=e;let n;try{const a=await i(`${um}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(dm)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};n=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=hm(n,{dartSdkFloor:s,flutterSdkFloor:r});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:s?`no published "${t}" release supports Dart ${s}`:`no published "${t}" release could be read`}}async function fm(t,e={}){const s=await Promise.all(t.map(r=>pm(r,e)));return new Map(s.map(({name:r,...i})=>[r,i]))}async function gm(t,e={},s={}){const{resolveVersions:r=fm}=s,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),n=xd(t),o={dartSdkFloor:ns(n.sdk),flutterSdkFloor:ns(n.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Ni(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=ns(d);if(!p){a.kept.push({name:c,constraint:h.constraint});continue}if(!h.isScalar){a.warnings.push(`"${c}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${p}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:c,constraint:h.constraint});continue}if(cm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ns(p)){a.additions[d]=`^${ns(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ns(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const mm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>mm[e])}function j(t){return t?bt(t).replace(/\n/g,"
"):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function vm(t,e={}){const s=t?.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function _m(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function ym(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function wm(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function bs(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,s=t.match(e);return s?s[1].trim():t.trim()}function uc(t){return t=bt(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function Pd(t,e="dart",s=globalThis.hljs){if(!t)return"";const r=bs(t);try{return s.highlight(r,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return s.highlight(r,{language:"json"}).value}catch{return bt(r)}}}function Mi(t,e={}){const{highlighter:s=globalThis.hljs}=e;let r='
';const i=String(t??"").split(` -`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=wm(o),u=Pd(o.trim(),l,s);r+=`
+`)&&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+=`
${u}
-
`,o="",n=!1}else n=!0;continue}if(n){o+=a+` +
`,o="",i=!1}else i=!0;continue}if(i){o+=a+` `;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();r+=`

${_m(l)} @@ -67,8 +67,8 @@ ${d}`,{commentAndStringRanges:g}=yo(f),m=p.length+1+h;if(nc(m,g)){l.push(d);cont

`;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+="
",` + ${dc(l)} +
`;continue}a.trim()!==""&&(r+=`

${dc(a)}

`)}return r+="",`
@@ -76,14 +76,14 @@ ${d}`,{commentAndStringRanges:g}=yo(f),m=p.length+1+h;if(nc(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";cd.init(Em,{api_host:Sm,person_profiles:"identified_only"});function zt(t,e={}){try{cd.capture(t,e)}catch(s){console.error("PostHog tracking failed",s)}}const Je="https://4tgke4.buildship.run",Ad={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},vi="ccc_auth_session",dc=new WeakSet;let G={email:null,sessionToken:null,isVerified:!1};function Es(t={}){return{tier:"free",status:"none",periodEnd:null,isLoading:!1,isResolved:!1,error:null,...t}}let fe=Es({isResolved:!0});const xm=`${Je}/service/runpipeline`,km="bs_user_id",Im="bs_identity_token",Cm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const _i={free:2,professional:50,power:2e3},yi="ccc_subscription",hc=3,Fm=new Set(["active","trialing","paid"]),lr="google/gemini-3.7-flash",jr=["anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta","openrouter/free","openrouter/deepseek/deepseek-v4-pro"],Pm={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function qt(t){return Pm[t]||t}const Am=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function $d(t){return Am.has(t)}const wo=4,In=8*1024*1024,$m="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Rm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Tm(t){const e=new FormData;return e.append("file",t),(await fetch($m,{method:"POST",body:e})).json()}function Nm(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const s of Object.keys(e)){if(s==="item"||s==="index")continue;const r=e[s];if(r&&typeof r=="object"){if(typeof r.file=="string")return r.file;if(typeof r.url=="string")return r.url}if(typeof r=="string")return r}return""}return typeof t=="string"?t:t&&typeof t=="object"&&(t.url||t.fileUrl||t.file_url||t.downloadUrl||t.imageUrl||t.image_url||t.file)||""}async function Mm(t){const e=Array.from(t.target.files||[]);if(!e.length)return;const s=e.filter(l=>l.size>In);s.length&&ue(`Skipped ${s.length} image(s) over the ${(In/1024/1024).toFixed(0)} MB limit.`,"warning");const r=e.filter(l=>l.size<=In);if(!r.length){t.target.value="";return}const i=wo-Pt.length,o=r.slice(0,i).map(async l=>{const u=await Rm(l);if(!u)return null;let c="";try{c=Nm(await Tm(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!$d(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),r.length>i&&ue(`You can attach up to ${wo} images.`,"info"),la())}function Lm(t){Pt.splice(t,1),la()}function la(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((s,r)=>{const i=document.createElement("div");i.className="prompt-img-thumb",i.innerHTML=`Prompt image`,t.appendChild(i)}),e&&(e.textContent=Pt.length>=wo?"Image limit reached":"Add images"))}function Rd(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),s=$d(e?.value);t.classList.toggle("hidden",!s),!s&&Pt.length&&(Pt=[],la())}const Kt="ccc_usage",Td="google/gemini-3.7-flash",Nd="google/gemini-3.7-flash",Cn="google/gemini-3.7-flash",pc={professional:11,power:49},bo={en_US:"USD",en_GB:"GBP",en_AU:"AUD",en_NZ:"NZD",en_CA:"CAD",en_IN:"INR",en_SG:"SGD",en_HK:"HKD",en_PH:"PHP",en_ZA:"ZAR",en:"USD",de:"EUR",fr:"EUR",es:"EUR",it:"EUR",nl:"EUR",pt_PT:"EUR",pt_BR:"BRL",pt:"BRL",ja:"JPY",ko:"KRW",zh_CN:"CNY",zh_TW:"TWD",zh:"CNY",th:"THB",vi:"VND",id:"IDR",ms_MY:"MYR",ms:"MYR",sv:"SEK",nb:"NOK",da:"DKK",pl:"PLN",cs:"CZK",hu:"HUF",ro:"RON",tr:"TRY",ar:"AED",he:"ILS",ru:"RUB",uk:"UAH"},Ur={AUD:1,USD:.65,EUR:.6,GBP:.52,CAD:.88,NZD:1.08,JPY:97,KRW:870,INR:54,SGD:.87,HKD:5.08,BRL:3.18,CNY:4.7,TWD:20.5,THB:22.5,VND:16200,IDR:10200,MYR:2.88,SEK:6.8,NOK:6.95,DKK:4.48,PLN:2.6,CZK:15.2,HUF:238,RON:2.98,TRY:20.9,AED:2.39,ILS:2.38,PHP:36.4,ZAR:11.8,RUB:58,UAH:26.8,CHF:.57,MXN:11.1,ARS:580,CLP:610,COP:2700,PEN:2.44};let Hr={...Ur};async function Om(){const t=new AbortController,e=setTimeout(()=>t.abort(),5e3);try{const s=await fetch("https://open.er-api.com/v6/latest/AUD",{signal:t.signal});if(!s.ok)return;const r=await s.json();if(r.result!=="success"||!r.rates)return;const i=r.rates,n={AUD:1},o=new Set([...Object.keys(Ur),...Object.values(Eo),...Object.values(bo)]);for(const a of o)a!=="AUD"&&(typeof i[a]=="number"&&i[a]>0?n[a]=i[a]:Ur[a]&&(n[a]=Ur[a]));Hr=n}catch{}finally{clearTimeout(e)}}const Eo={"America/Sao_Paulo":"BRL","America/Fortaleza":"BRL","America/Recife":"BRL","America/Bahia":"BRL","America/Belem":"BRL","America/Manaus":"BRL","America/Cuiaba":"BRL","America/Campo_Grande":"BRL","America/Araguaina":"BRL","America/Noronha":"BRL","America/Rio_Branco":"BRL","America/Porto_Velho":"BRL","America/Boa_Vista":"BRL","America/Maceio":"BRL","America/Santarem":"BRL","America/Eirunepe":"BRL","Europe/London":"GBP","Europe/Paris":"EUR","Europe/Berlin":"EUR","Europe/Madrid":"EUR","Europe/Rome":"EUR","Europe/Amsterdam":"EUR","Europe/Brussels":"EUR","Europe/Vienna":"EUR","Europe/Lisbon":"EUR","Europe/Dublin":"EUR","Europe/Helsinki":"EUR","Europe/Athens":"EUR","Europe/Bucharest":"RON","Europe/Budapest":"HUF","Europe/Warsaw":"PLN","Europe/Prague":"CZK","Europe/Copenhagen":"DKK","Europe/Stockholm":"SEK","Europe/Oslo":"NOK","Europe/Zurich":"CHF","Europe/Istanbul":"TRY","Europe/Moscow":"RUB","Europe/Kiev":"UAH","Europe/Kyiv":"UAH","Asia/Tokyo":"JPY","Asia/Seoul":"KRW","Asia/Shanghai":"CNY","Asia/Taipei":"TWD","Asia/Hong_Kong":"HKD","Asia/Singapore":"SGD","Asia/Kolkata":"INR","Asia/Calcutta":"INR","Asia/Bangkok":"THB","Asia/Ho_Chi_Minh":"VND","Asia/Jakarta":"IDR","Asia/Kuala_Lumpur":"MYR","Asia/Dubai":"AED","Asia/Jerusalem":"ILS","Asia/Tel_Aviv":"ILS","Asia/Manila":"PHP","Pacific/Auckland":"NZD","Australia/Sydney":"AUD","Australia/Melbourne":"AUD","Australia/Brisbane":"AUD","Australia/Perth":"AUD","Australia/Adelaide":"AUD","Australia/Hobart":"AUD","Australia/Darwin":"AUD","Australia/Lord_Howe":"AUD","America/Toronto":"CAD","America/Vancouver":"CAD","America/Edmonton":"CAD","America/Winnipeg":"CAD","America/Halifax":"CAD","America/St_Johns":"CAD","America/Regina":"CAD","America/New_York":"USD","America/Chicago":"USD","America/Denver":"USD","America/Los_Angeles":"USD","America/Phoenix":"USD","America/Anchorage":"USD","Pacific/Honolulu":"USD","America/Mexico_City":"MXN","America/Cancun":"MXN","America/Tijuana":"MXN","America/Argentina/Buenos_Aires":"ARS","America/Santiago":"CLP","America/Bogota":"COP","America/Lima":"PEN","Africa/Johannesburg":"ZAR"};function Md(){try{const n=Intl.DateTimeFormat().resolvedOptions().timeZone;if(n&&Eo[n])return Eo[n]}catch{}const e=(navigator.language||"en-US").replace("-","_"),s=bo[e];if(s)return s;const r=e.split("_")[0],i=bo[r];return i||"USD"}function fc(t,e){const s=Hr[e]??Hr.USD,r=t*s,i=Math.round(r*100)/100;try{return new Intl.NumberFormat("en-US",{style:"currency",currency:e,minimumFractionDigits:0,maximumFractionDigits:i>=100||i%1===0?0:2}).format(i)}catch{return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:2}).format(t*Hr.USD)}}const st="ccc_api_key_",_t="ccc_session_api_key_",nt="ccc_encryption_key",cr="ccc_encryption_key_scope",Dm="ccc_keystore",wi="keys",ur="ccc_encryption_key_version";let So=null,bi=null,dr=!1,Ei=!1,gc=!1;class Si extends Error{constructor(){super("Secure browser key storage is unavailable."),this.name="CredentialStorageUnavailableError"}}function mc(){if(gc)return;gc=!0;const t="Secure browser key storage is unavailable. Existing credentials were left untouched; new credentials will be available only in this tab session.";console.warn(t),document.body&&ue(t,"warning")}function Ld(){return localStorage.getItem(ur)||""}function xo(){return crypto.randomUUID?.()||Dd(crypto.getRandomValues(new Uint8Array(16)))}function Bm(){const t=Ld();if(t)return t;const e=xo();return localStorage.setItem(ur,e),e}function Ss(){So=null,bi=null,dr=!1,Ei=!1}window.addEventListener("storage",t=>{t.key===ur&&Ss()});function jm(){return new Promise((t,e)=>{const s=indexedDB.open(Dm,1);s.onupgradeneeded=()=>{const r=s.result;r.objectStoreNames.contains(wi)||r.createObjectStore(wi)},s.onsuccess=()=>t(s.result),s.onerror=()=>e(s.error)})}async function ca(t,e){const s=await jm();return new Promise((r,i)=>{const n=s.transaction(wi,t);let o;try{o=e(n.objectStore(wi))}catch(l){s.close(),i(l);return}let a;o.onsuccess=()=>{a=o.result},o.onerror=()=>i(o.error),n.oncomplete=()=>{s.close(),r(a)},n.onerror=()=>{s.close(),i(n.error||new Error("Encryption key transaction failed."))},n.onabort=()=>{s.close(),i(n.error||new Error("Encryption key transaction aborted."))}})}function Um(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Hm(){const t=await ca("readonly",e=>e.get(nt));return Um(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,nt))}async function Wm(){Ss();try{await ca("readwrite",t=>t.delete(nt))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function zm(){const t=sessionStorage.getItem(nt);if(!t)return null;const e=await crypto.subtle.importKey("jwk",JSON.parse(t),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Od(e),sessionStorage.removeItem(nt),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),e}async function vc(t){const e=sessionStorage.getItem(nt);if(e)return Ei=sessionStorage.getItem(cr)!=="session",crypto.subtle.importKey("jwk",JSON.parse(e),{name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);if(!t)throw new Si;const s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),r=await crypto.subtle.exportKey("jwk",s);return sessionStorage.setItem(nt,JSON.stringify(r)),sessionStorage.setItem(cr,"session"),Ei=!1,crypto.subtle.importKey("jwk",r,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function qm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(nt))return mc(),dr=!0,vc(t);try{const e=await Hm();if(e)return e;const s=await zm();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Od(r),r}catch(e){return console.warn("IndexedDB encryption-key storage failed:",e),mc(),dr=!0,vc(t)}}async function ua(t={}){const{allowSessionFallbackCreation:e=!0}=t,s=Bm();bi!==s&&Ss();const r=So||qm(e);So=r,bi=s;try{return await r}catch(i){throw Ss(),i}}async function Vm(t){const e=await ua(),s=bi,r=new TextEncoder,i=crypto.getRandomValues(new Uint8Array(12)),n=await crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,r.encode(t)),o=new Uint8Array(i.length+n.byteLength);return o.set(i),o.set(new Uint8Array(n),i.length),{ciphertext:Dd(o),keyVersion:s,sessionFallback:dr}}async function Gm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Ei)throw new Si;const i=Km(t),n=i.slice(0,12),o=i.slice(12),a=await crypto.subtle.decrypt({name:"AES-GCM",iv:n},r,o);return new TextDecoder().decode(a)}catch(r){if(r instanceof Si)throw r;return console.error("Decryption failed:",r),null}}function Dd(t){const e=new Uint8Array(t);let s="";for(let r=0;r0}let hr="",xi="",Zs=null,yc=0;async function da(){sessionStorage.getItem(nt)&&await ua(),hr=await Ee("flutterflow"),xi=await Ee("flutterflow_project_id"),Qm(),Xt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),hr&&Hd(hr)}function Bd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(pa(),s.classList.add("open"))}let Et=1;function jd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Li(){const t=jd();t.length&&t.forEach((e,s)=>{const r=s+1;if(r===Et){e.classList.remove("opacity-60","bg-gray-50","border-gray-200"),e.classList.add("bg-blue-50","border-blue-200");const i=e.querySelector("div:first-child");i&&(i.classList.remove("bg-gray-400"),i.classList.add("bg-blue-500"),i.innerHTML=r)}else if(r0&&Et<=t&&(Et++,Li())}function Ym(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Li(),t.classList.add("open"))}function Zm(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function Ud(){if(G.isVerified&&Yt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,Li(),e.classList.add("open"))}}async function fa(){const t=document.getElementById("flutterflow-api-key-input");hr?(t.value="",t.placeholder="Key saved (enter new to replace)"):t.placeholder="Enter your FlutterFlow API key",Xm()}function Xm(){wc("flutterflow","flutterflow-key-status"),wc("flutterflow_project_id","flutterflow-project-status")}function wc(t,e){const s=document.getElementById(e);if(!s)return;const r=s.querySelector(".key-status-dot"),i=s.querySelector("span");ls(t)?(r.className="key-status-dot configured",i.className="text-green-600",i.textContent="User key configured"):(r.className="key-status-dot missing",i.className="text-gray-500",i.textContent="Not configured")}function Xt(){const t=y.step2Result&&y.step2Result.length>0,e=document.getElementById("btn-deploy-to-ff"),s=document.getElementById("btn-run-pipeline");s&&s.classList.remove("hidden"),e&&e.classList.toggle("hidden",!t)}function Qm(){const t=document.getElementById("api-keys-status");if(!t)return;const e=t.querySelectorAll(".key-status-dot"),s=["flutterflow"];e.forEach((r,i)=>{const n=s[i];n==="flutterflow"?ls("flutterflow")&&ls("flutterflow_project_id")?(r.className="key-status-dot configured",r.title="FlutterFlow (Fully configured)"):ls("flutterflow")||ls("flutterflow_project_id")?(r.className="key-status-dot env",r.title="FlutterFlow (Partially configured)"):(r.className="key-status-dot missing",r.title="FlutterFlow (Not configured)"):ls(n)?(r.className="key-status-dot configured",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (User key)"):(r.className="key-status-dot missing",r.title=n.charAt(0).toUpperCase()+n.slice(1)+" (Not configured)")}),Xt()}async function ev(){const t=document.getElementById("flutterflow-api-key-input"),e=document.getElementById("flutterflow-projects-select");t.value.trim()&&await _c("flutterflow",t.value);const s=e?.value.trim()||"";if(s){if(!Oi(s)){ue("The selected FlutterFlow project has an unexpected ID format.","error"),e.focus();return}await _c("flutterflow_project_id",s)}await da(),fa();const r=document.querySelector("#api-keys-modal .bg-blue-500"),i=r.textContent;r.textContent="Saved!",r.classList.remove("bg-blue-500","hover:bg-blue-600"),r.classList.add("bg-green-500"),setTimeout(()=>{r.textContent=i,r.classList.remove("bg-green-500"),r.classList.add("bg-blue-500","hover:bg-blue-600"),Bd()},1e3)}async function tv(){if(!confirm("Are you sure you want to clear all stored API keys?"))return;localStorage.setItem(ur,xo()),Ss(),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),sessionStorage.removeItem(nt),sessionStorage.removeItem(cr),localStorage.removeItem(st+"salt"),await Wm(),localStorage.setItem(ur,xo()),localStorage.removeItem(st+"flutterflow"),localStorage.removeItem(st+"flutterflow_project_id"),sessionStorage.removeItem(_t+"flutterflow"),sessionStorage.removeItem(_t+"flutterflow_project_id"),await da();const t=document.getElementById("flutterflow-projects-select");t&&(t.innerHTML=''),fa()}function Oi(t){return!t||t.trim().length<5||t.includes(" ")?!1:/^[a-zA-Z0-9-]+$/.test(t)}function sv(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function rv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;sv("flutterflow-api-key-input",s)}),t.addEventListener("blur",iv(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function iv(t,e){let s;return function(...i){const n=()=>{clearTimeout(s),t(...i)};clearTimeout(s),s=setTimeout(n,e)}}async function Hd(t){const e=document.getElementById("flutterflow-projects-select"),s=document.getElementById("flutterflow-projects-error");if(!e){console.error("Projects dropdown element not found");return}e.innerHTML='',s&&s.classList.add("hidden");try{const i=await new gr(t,"").listProjects();if(!i||i.length===0){e.innerHTML='';return}e.innerHTML='',i.forEach(n=>{const o=document.createElement("option");o.value=n.id||n.projectId||"",o.textContent=n.name||n.projectName||`Project ${n.id}`,e.appendChild(o)}),xi&&(e.value=xi)}catch(r){console.error("Failed to fetch projects:",r),e.innerHTML='',s&&(s.textContent=`Failed to load projects: ${r.message}`,s.classList.remove("hidden"))}}function nv(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + `}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=` `):(e.type="password",r.innerHTML=` - `)}let y={step1Result:null,step2Result:null,step3Result:null,bundleSpec:null,artifactBundle:null,bundleReview:null,selectedArtifactId:null,resultsViewMode:"summary",currentStep:0,isRunning:!1};function ov(){y.step1Result=null,y.step2Result=null,y.step3Result=null,y.bundleSpec=null,y.artifactBundle=null,y.bundleReview=null,y.selectedArtifactId=null,y.resultsViewMode="summary"}function av(){y.bundleSpec=or(y.step1Result,{artifactType:"CustomWidget",artifactName:"GeneratedWidget"})}function Di(){const t=fi(y.bundleSpec);y.artifactBundle=or(y.step2Result,{id:y.bundleSpec?.id,title:y.bundleSpec?.title,description:y.bundleSpec?.description,artifactType:t.artifactType,artifactName:t.artifactName,fileName:t.fileName,dependencies:t.dependencies,relationships:y.bundleSpec?.relationships,code:y.step2Result||""});const e=dg(y.artifactBundle);y.artifactBundle={...y.artifactBundle,warnings:[...y.artifactBundle.warnings,...e.findings.map(s=>s.message)],metadata:{...y.artifactBundle.metadata,compatibility:e}},y.selectedArtifactId=fi(y.artifactBundle).id}function Bi(){const t=or(y.step3Result,{id:y.artifactBundle?.id,title:y.artifactBundle?.title}),e=new Map(t.artifacts.map(r=>[r.id,r.review])),s=new Map(t.artifacts.filter(r=>{const i=r.review;return i&&typeof i.fixedSource=="string"&&i.fixedSource.trim()}).map(r=>[r.id,r.review.fixedSource.trim()]));y.bundleReview=or({id:y.artifactBundle?.id,title:y.artifactBundle?.title,artifacts:y.artifactBundle?.artifacts?.map(r=>{const i=s.get(r.id)||null;return{...r,review:e.get(r.id)||r.review||y.step3Result||null,...i?{fixedCode:i}:{}}})||[],relationships:y.artifactBundle?.relationships,warnings:y.artifactBundle?.warnings})}function Wd(){const t=ga();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ga(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||fi(t)}function ma(){return ga().code||y.step2Result||""}async function lv(){try{await da()}catch(t){return console.error("checkConnection: initializeApiKeys failed:",t),!1}return!0}const Wr={production:"https://api.flutterflow.io/v2/",staging:"https://api.flutterflow.io/v2-staging/"};function cv(t,e){const s=e?.trim()?` (${e.trim().slice(0,200)})`:"";return t===401?`Your FlutterFlow API key was rejected (401 Unauthorized)${s}. Re-enter a current key under API Keys settings, then try again.`:`Listing FlutterFlow projects was denied (403)${s}. The key may be scoped to sync a single project without list permission - verify the key's access in FlutterFlow, re-enter it under API Keys settings, then retry.`}class gr{constructor(e,s,r="main",i=Wr.production){this.apiKey=e,this.baseUrl=i,this._projectId=s,this._branchName=r,this._endpoint=i}get projectId(){return this._projectId}get branchName(){return this._branchName==="main"?"":this._branchName}async exportProjectZip(){console.log(`Exporting code from FlutterFlow project: ${this.projectId}, branch: ${this.branchName||"main"}`);const e=[{project:{path:`projects/${this.projectId}`},...this.branchName?{branch_name:this.branchName}:{},export_as_module:!1,include_assets_map:!1,format:!1,export_as_debug:!1},{project_id:this.projectId,branch_name:this.branchName,include_assets:!1,export_as_module:!1}];let s=null;for(const r of e)try{const i=await fetch(`${this.baseUrl}exportCode`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify(r)});if(!i.ok){const a=await i.text();s=new Error(`Export failed: ${i.status} - ${a}`);continue}const n=await i.json(),o=n?.value?.project_zip||n?.project_zip;if(!o){s=new Error("Export response did not include project source.");continue}return o}catch(i){s=i}throw s||new Error("Export failed for an unknown reason.")}async fetchProjectSource(){const e=await this.exportProjectZip(),s=await JSZip.loadAsync(e,{base64:!0}),r=Object.keys(s.files).filter(a=>!s.files[a].dir&&(a==="pubspec.yaml"||a.endsWith("/pubspec.yaml"))).sort((a,l)=>a.split("/").length-l.split("/").length)[0];if(!r)throw new Error("Export did not contain a pubspec.yaml.");const i=r.slice(0,r.length-12),n=new Map,o=Object.keys(s.files).filter(a=>{if(s.files[a].dir||!a.startsWith(i))return!1;const l=a.slice(i.length);return l==="lib/flutter_flow/custom_functions.dart"||l.startsWith("lib/custom_code/")&&l.endsWith(".dart")});return await Promise.all(o.map(async a=>{n.set(a.slice(i.length),await s.files[a].async("string"))})),{pubspecYaml:await s.files[r].async("string"),files:n}}async pushCodeWithRetry(e,s=3){const r=[Wr.production,Wr.staging],i=Math.max(0,r.indexOf(this._endpoint));for(let n=0;nsetTimeout(d,1e3*(n+1)));continue}return l}catch(l){console.warn(`Push to ${a} failed: ${l.message}, trying next...`),await new Promise(u=>setTimeout(u,1e3*(n+1)))}}throw new Error("All API endpoints failed after retries")}async pushCode(e){return this.pushCodeWithRetry(e)}parseProjectsResponse(e){if(e?.success&&typeof e.value=="string")try{const r=JSON.parse(e.value);if(r&&Array.isArray(r.entries))return r.entries.map(i=>({id:i.id,name:i.project?.name||i.id}))}catch(r){console.error("Failed to parse stringified project value:",r)}const s=e?.projects||e?.items||e?.entries||(Array.isArray(e)?e:[]);return Array.isArray(s)?s:[]}async listProjects(){console.log("Listing projects for API key");const e=[`${this.baseUrl}listProjects`,"https://api.flutterflow.io/v2/l/listProjects"];let s=0,r="";for(const i of e){const n=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`},body:JSON.stringify({project_type:"ALL",deserialize_response:!0})});if(n.ok)return i!==e[0]&&console.log(`listProjects answered on legacy path ${i}`),this.parseProjectsResponse(await n.json());if(s=n.status,r=await n.text(),console.warn(`listProjects via ${i} returned ${s}: ${r}`),n.status===401||n.status===403)throw new Error(cv(n.status,r));if(n.status!==404)throw new Error(`List projects failed: ${n.status} - ${r}`)}throw new Error(`List projects failed: ${s} - ${r}`)}}async function va(t){const e=t.clone();let s;try{s=await t.json()}catch{const n=await e.text();if(!t.ok)return{success:!1,responseCode:t.status,errorMessage:n||`HTTP ${t.status}`,errorMap:new Map};throw new Error(`Invalid JSON response: ${n}`)}if(!t.ok){let i=s.message||`HTTP ${t.status}`,n=new Map;if(s.errors)n=new Map(Object.entries(s.errors));else if(!s.message&&typeof s=="object"){const o=Object.keys(s).filter(a=>a.endsWith(".dart")&&Array.isArray(s[a]));o.length>0&&(n=new Map(Object.entries(s)),i=o.flatMap(l=>s[l].map(u=>`${l}: ${u.errorMessage}`)).join(` -`)||`HTTP ${t.status}`)}return{success:!1,responseCode:t.status,errorMessage:i,errorMap:n}}let r={};if(s.value)try{r=typeof s.value=="string"?JSON.parse(s.value):s.value}catch(i){console.warn("Ignoring malformed push response value:",i)}return{success:!0,responseCode:t.status,errorMap:new Map(Object.entries(r))}}function _a(t,e){return{401:"Authentication failed. Please check your FlutterFlow API key.",403:"Access denied. You may not have permission to modify this project.",404:"Project not found. Please check your Project ID.",409:"Conflict detected. The project may have been modified elsewhere.",422:"Validation failed: Invalid request format",429:"Rate limit exceeded. Please try again in a few minutes.",500:"FlutterFlow server error. Please try again later.",503:"FlutterFlow service temporarily unavailable."}[t]||`FlutterFlow API error: ${`HTTP ${t}`}`}const U={ACTION:"A",WIDGET:"W",FUNCTION:"F",CODE_FILE:"C",DEPENDENCIES:"D",OTHER:"O"},zd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,qd=/extends\s+State<\w+>/;function uv(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=zd.test(e),r=qd.test(e);if(s||r)return U.WIDGET;if(/^\s*Future(?:<[^>]+>)?\s+\w+\s*\(/m.test(e))return U.ACTION;if(e.match(/^\s*(String|int|double|bool|List|Map|dynamic|void)\s+\w+\s*\(/m))return U.FUNCTION}return U.CODE_FILE}function Vd(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function ya(t,e=new Map){return Gf(t,e)}const ko=new Map;function Gd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function ji(t){ko.delete(Gd(t))}async function wa(t,e,s,r,i=""){const n=kg(e,s);if(n.length===0)return{remoteFiles:s,syncFileMap:e,unverified:[]};const o=sm(n,i),a={...o.manifest,sources:o.sources},l=o.skipped.map(d=>d.reason);l.forEach(d=>console.warn(`[custom class deploy] ${d}`)),console.log(`Provisioning ${n.length} new FlutterFlow custom code file(s) before sync.`),be.set("provision");const u=await fetch(bm,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.apiKey,projectId:t.projectId,baseUrl:t.baseUrl,commitMessage:r,customClasses:n,verification:a,stream:!0})}),c=await im(u,{onPhase:d=>be.setSubstatus(d),onLog:d=>console.log(`[custom class deploy] ${d}`)});if(!c.success){const d=c.details?` ${c.details}`:"";throw new Error(`${c.error||"FlutterFlow custom class provisioning failed."}${d}`)}return ji(t),c.verificationSkipped&&(console.warn(`[custom class deploy] ${c.verificationSkipped}`),l.push(c.verificationSkipped)),{remoteFiles:s,syncFileMap:Ig(e,n),unverified:l}}async function ba(t,e={}){const s=Gd(t);let r=ko.get(s);if(r===void 0){try{r=await t.fetchProjectSource()}catch(l){throw new Error(`Could not read your project's pubspec.yaml (${l.message}). Deploy was stopped so your existing package dependencies aren't overwritten. Check your FlutterFlow API key and project, then try again.`)}const a=Id(r.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);ko.set(s,r)}const i=await gm(r.pubspecYaml,e),n=Yg(r.pubspecYaml,i.overrides),o=Jg(n.yaml,i.additions);return i.warnings.forEach(a=>console.warn(`[pubspec] ${a}`)),o.added.length>0&&console.log("Adding dependencies:",o.added.map(a=>`${a}: ${i.additions[a]||"any"}`).join(", "),i.sdk.dartSdkFloor?`(resolved for Dart ${i.sdk.dartSdkFloor})`:""),i.kept.forEach(({name:a,constraint:l})=>console.log(`Keeping your existing ${a}: ${l||"(non-version source)"}`)),{...o,overridden:n.overridden,warnings:i.warnings,remoteFiles:r.files}}function dv(t){const e=[],s=[];t.content.length>5e4&&s.push("Code file is large (>50KB). This may take longer to commit."),t.content.length>1e5&&e.push("Code file is too large (>100KB). Consider splitting into smaller components.");const r=t.content.split(` -`).length;r>500&&s.push(`Code has ${r} lines. Consider breaking it into smaller widgets.`),t.content.includes("setState")&&t.codeType===U.ACTION&&s.push("Using setState in a Custom Action may not work as expected. Consider using a Custom Widget."),t.content.includes("dynamic")&&!t.content.includes("?")&&s.push('Code uses "dynamic" types. Consider adding explicit types for better null safety.'),t.content.match(/Color\(0xFF[0-9A-Fa-f]{6}\)/)&&s.push("Code contains hardcoded colors. Consider using FlutterFlowTheme.of(context) for theme consistency.");const i=t.content.match(/print\s*\(/g);i&&i.length>3&&s.push(`Code contains ${i.length} print statements. Consider removing debug prints before committing.`);const n=zg(t.content);if(n&&e.push(`FlutterFlow cannot format this code - ${n}. Fix or regenerate before committing.`),t.codeType===U.WIDGET){const o=wd(t.content),a=Ug(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${bd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:s}}function Kd(t,e={}){const{artifactType:s="CustomWidget",artifactName:r="GeneratedCode",fileName:i}=e,n=Bg(t);let o=i||r;if(s==="CustomFunction")o="custom_functions.dart";else if(s==="CustomWidget"){const u=wd(n)[0],c=u?bd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(s){case"CustomAction":a=U.ACTION;break;case"CustomWidget":a=U.WIDGET;break;case"CustomFunction":a=U.FUNCTION;break;case"CustomClass":case"CodeFile":a=U.CODE_FILE;break}let l="";return a===U.WIDGET?l=`// Automatic FlutterFlow imports + `)}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 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:fg(n,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function hv(t){const e={};for(const s of ta(t))e[s]="";return e}function pv(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function fv(t,e,s,r=new Set,i=""){const n=[],o=zd.test(e),a=qd.test(e);return s===U.WIDGET&&!o&&!a&&n.push("No widget class definition found (must extend StatelessWidget or StatefulWidget)"),{valid:n.length===0,errors:n}}function Ui(t){const e=[],s=[];if(!t||t.size===0)return e.push("No files to commit"),{valid:!1,errors:e,warnings:s};const r=new Set(Array.from(t.values()).flatMap(i=>Ri(i.content||"")));for(const[i,n]of t.entries()){if((!n.content||n.content.trim().length===0)&&e.push(`File ${i} is empty`),n.content&&n.content.length>1e5&&s.push(`File ${i} is very large (>100KB)`),i.endsWith(".dart")){const o=fv(i,n.content,n.type,r,n.artifactName);o.valid||e.push(...o.errors.map(a=>`${i}: ${a}`))}if(i==="pubspec.yaml"){const o=Id(n.content);o.valid||e.push(...o.errors)}}return{valid:e.length===0,errors:e,warnings:s}}const V={IDLE:"IDLE",PREPARING:"PREPARING",VALIDATING:"VALIDATING",PUSHING:"PUSHING",SUCCESS:"SUCCESS",ERROR:"ERROR"},K={currentState:V.IDLE,startTime:null,endTime:null,error:null,result:null,filesProcessed:0,totalFiles:0,reset(){this.currentState=V.IDLE,this.startTime=null,this.endTime=null,this.error=null,this.result=null,this.filesProcessed=0,this.totalFiles=0},setState(t){if(!Object.values(V).includes(t)){console.error(`Invalid commit state: ${t}`);return}this.currentState=t,t===V.PREPARING&&(this.startTime=Date.now()),(t===V.SUCCESS||t===V.ERROR)&&(this.endTime=Date.now()),typeof window<"u"&&window.dispatchEvent&&window.dispatchEvent(new CustomEvent("commitStateChange",{detail:{state:t,commitState:this}})),console.log(`Commit state changed to: ${t}`)},setError(t){this.error=t,this.setState(V.ERROR)},setSuccess(t){this.result=t,this.setState(V.SUCCESS)},setProgress(t,e){this.filesProcessed=t,this.totalFiles=e},getElapsedTime(){return this.startTime?(this.endTime||Date.now())-this.startTime:null},isInProgress(){return this.currentState===V.PREPARING||this.currentState===V.VALIDATING||this.currentState===V.PUSHING}};async function gv(t,e,s={}){let{codeType:r="W"}=s;const{pubspecDeps:i={},artifactName:n=e}=s;r==="CustomWidget"&&(r=U.WIDGET),r==="CustomAction"&&(r=U.ACTION),r==="CustomFunction"&&(r=U.FUNCTION),r==="CustomClass"&&(r=U.CODE_FILE),r==="CodeFile"&&(r=U.CODE_FILE),K.reset(),K.setState(V.PREPARING);try{const o=await Ee("flutterflow"),a=await Ee("flutterflow_project_id");if(!o||!a)throw new Error("FlutterFlow credentials not configured. Please set your API key and Project ID in the API Keys settings.");if(!Oi(a))throw new Error("Invalid FlutterFlow Project ID format.");const l=fr(),u=new gr(o,a,"main",l);K.setState(V.VALIDATING);const c=new Map,d=r||uv(e,t),h=Vd(e,d);c.set(e,{artifactName:n,content:t,type:d,path:h}),K.setProgress(0,c.size);const p=Ui(c);if(!p.valid)throw new Error(`Validation failed: +`),{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: ${p.errors.join(` -`)}`);const f=await ba(u,i),g=f.yaml,m=await wa(u,c,f.remoteFiles,`Provision ${n} custom class`,g),_=await ya(m.syncFileMap,m.remoteFiles),E=new Map(m.syncFileMap);E.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const b=await Ea(E),I={project_id:a,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:u.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setState(V.PUSHING),K.setProgress(1,c.size),ji(u),be.set("push");const F=await u.pushCode(I),P=await va(F);if(P.success)K.setSuccess({fileCount:c.size,projectId:a,warnings:P.errorMap&&P.errorMap.size>0?Array.from(P.errorMap.entries()):[]});else{const B=P.errorMessage||_a(P.responseCode);throw new Error(B)}return{success:!0,message:`Successfully committed ${e} to FlutterFlow project ${a}`,addedDependencies:f.added,unverified:m.unverified,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}}catch(o){return console.error("Commit failed:",o),K.setError(o),{success:!1,error:o.message,state:K.currentState}}}async function Ea(t){const e=new JSZip;for(const[s,r]of t.entries())e.file(s,r.content);return e.generateAsync({type:"base64",compression:"DEFLATE",compressionOptions:{level:6}})}async function mv(t,e={}){const{artifactType:s,artifactName:r,fileName:i,pipelineResult:n}=e;console.log(`Starting commit for ${r} (${s})`);try{K.setState(V.PREPARING);const o=Kd(t,{artifactType:s,artifactName:r,fileName:i}),a=hv(o.content);console.log("Detected dependencies:",a),K.setState(V.VALIDATING);const l=await Ee("flutterflow"),u=Zs||await Ee("flutterflow_project_id");if(!l)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!u)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Oi(u))throw new Error("Invalid FlutterFlow Project ID format.");const c=new Map;c.set(o.fileName,{artifactName:r,content:o.content,type:o.codeType,path:Vd(o.fileName,o.codeType),functionName:o.codeType===U.FUNCTION?r:void 0}),K.setProgress(0,c.size);const d=Ui(c);if(!d.valid)throw new Error(`File validation failed: +`)}`);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: ${d.errors.join(` -`)}`);d.warnings.length>0&&console.warn("Validation warnings:",d.warnings),K.setState(V.PUSHING);const h=fr(),p=new gr(l,u,"main",h),f=await ba(p,a),g=f.yaml,m=await wa(p,c,f.remoteFiles,`Provision ${r} custom class`,g),_=await ya(m.syncFileMap,m.remoteFiles),E=new Map(m.syncFileMap);E.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const b=await Ea(E),I={project_id:u,zipped_custom_code:b,uid:`web_${Date.now()}`,branch_name:p.branchName,serialized_yaml:g,file_map:_.fileMapContents,functions_map:_.functionsMapContents};K.setProgress(1,c.size),ji(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...pv(o,n),projectId:u};return K.setSuccess({...B,fileCount:c.size,warnings:P.errorMap?Array.from(P.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${o.fileName} to FlutterFlow`,metadata:B,addedDependencies:f.added,unverified:m.unverified,warnings:P.errorMap?Array.from(P.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}else{const B=P.errorMessage||_a(P.responseCode),S=new Error(B);throw S.errorMap=P.errorMap,S}}catch(o){console.error("Commit execution failed:",o),K.setError(o);let a=new Map;if(o.errorMap)a=o.errorMap;else if(o.message&&o.message.includes("{"))try{const l=o.message.match(/\{[\s\S]*\}/);if(l){const u=JSON.parse(l[0]);a=new Map(Object.entries(u))}}catch(l){console.warn("Failed to parse error map from commit response:",l)}return{success:!1,error:o.message,errorMap:a,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function vv(t,e={}){const{pipelineResult:s}=e;try{if(K.setState(V.PREPARING),t.errors?.length>0)throw new Error(`Bundle validation failed: +`)}`);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: ${t.errors.join(` -`)}`);const r=new Map(t.fileEntries.map(I=>[I.fileName,{artifactId:I.artifactId,artifactName:I.artifactName,content:I.content,type:I.type,path:I.path,functionName:I.type===U.FUNCTION?I.artifactName:void 0}]));K.setProgress(0,r.size);const i=Ui(r);if(!i.valid)throw new Error(`File validation failed: -${i.errors.join(` -`)}`);K.setState(V.VALIDATING);const n=await Ee("flutterflow"),o=Zs||await Ee("flutterflow_project_id");if(!n)throw new Error("FlutterFlow API Key not configured. Please add it in API Keys settings.");if(!o)throw new Error("FlutterFlow Project ID not configured. Please add it in API Keys settings.");if(!Oi(o))throw new Error("Invalid FlutterFlow Project ID format.");K.setState(V.PUSHING);const a=fr(),l=new gr(n,o,"main",a),u=await ba(l,t.dependencies),c=u.yaml,d=await wa(l,r,u.remoteFiles,`Provision ${t.title} custom classes`,c),h=await ya(d.syncFileMap,d.remoteFiles),p=new Map(d.syncFileMap);p.set("pubspec.yaml",{content:c,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const f=await Ea(p),g={project_id:o,zipped_custom_code:f,uid:`web_${Date.now()}`,branch_name:l.branchName,serialized_yaml:c,file_map:h.fileMapContents,functions_map:h.functionsMapContents};K.setProgress(1,r.size),ji(l),be.set("push");const m=await l.pushCode(g),_=await va(m);if(_.success){const I={...s,artifactType:"Bundle",artifactName:t.title,fileName:`${t.fileEntries.length} artifacts`,codeSize:t.fileEntries.reduce((F,P)=>F+P.content.length,0),projectId:o};return K.setSuccess({...I,fileCount:r.size,warnings:_.errorMap?Array.from(_.errorMap.entries()):[]}),{success:!0,message:`Successfully committed ${t.fileEntries.length} artifacts to FlutterFlow`,metadata:I,addedDependencies:u.added,unverified:d.unverified,warnings:_.errorMap?Array.from(_.errorMap.entries()):[],elapsedTime:K.getElapsedTime()}}const E=_.errorMessage||_a(_.responseCode),b=new Error(E);throw b.errorMap=_.errorMap,b}catch(r){return console.error("Bundle commit execution failed:",r),K.setError(r),{success:!1,error:r.message,errorMap:r.errorMap||new Map,state:K.currentState,elapsedTime:K.getElapsedTime()}}}async function _v(t,e=[]){const s=Zo("architect");try{return await ki("architect",Td,Mf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function Hi(t,e,s=[]){const r=Lf(t),i=Zo("generator",y.bundleSpec);try{return await ki("generator",e,r,i,s)}catch(n){if(n.isModelArmor)throw n;if(e!==Cn){console.warn(`Code Generator failed with ${e}, retrying with fallback model:`,n.message);try{return await ki("generator",Cn,r,i,s)}catch(o){throw o.isModelArmor?o:new Error(`Code Generator failed: primary (${e}): ${n.message} | fallback (${Cn}): ${o.message}`)}}throw new Error(`Code Generator failed: ${n.message}`)}}async function Wi(t,e=null){const s={...Zo("review",y.artifactBundle||y.bundleSpec),architect_output:e};try{return await ki("review",Nd,Of(t),s)}catch(r){throw r.isModelArmor?r:new Error(`Code Review failed: ${r.message}`)}}function Sa(t,e){return t.isModelArmor?`${t.userTitle}: ${t.userMessage}`:`${e}: ${t.message}`}function Io(t,e){const s=document.getElementById(`step${t}-item`),r=document.getElementById(`step${t}-status`);!s||!r||(s.classList.remove("active","completed","error"),r.classList.remove("running","completed","error"),e==="active"?(s.classList.add("active"),r.classList.add("running"),r.innerHTML=` +`)}`);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: +${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=` `):e==="completed"?(s.classList.add("completed"),r.classList.add("completed"),r.innerHTML=` @@ -125,19 +125,19 @@ ${i.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"),Io(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Io(t,"completed"))}function yv(t){const e=document.getElementById(`${t}-content`),s=document.getElementById(`${t}-chevron`);e.classList.contains("open")?(e.classList.remove("open"),s&&(s.style.transform="rotate(0deg)")):(e.classList.add("open"),s&&(s.style.transform="rotate(180deg)"))}function wv(t){ze(parseInt(t.replace("step","")))}function ze(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),Zt();const s=document.getElementById("ready-state");s&&s.classList.add("hidden");for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-content`);a&&a.classList.add("hidden")}const r=document.getElementById(`step${t}-content`);r&&r.classList.remove("hidden");const i=document.getElementById("stage-title"),n={1:"Prompt Architect",2:"Code Generator",3:"Code Review"};i&&(i.textContent=n[t]||"Active Workflow Stage")}function bv(t){const e=document.getElementById(t);if(!e)return;const s=e.dataset.raw||e.textContent;navigator.clipboard.writeText(s).then(()=>{zt("Code Copied",{elementId:t});const i=e.closest(".code-container")?.querySelector(".copy-btn");i&&(i.classList.add("copied"),i.innerHTML=' Copied!',setTimeout(()=>{i.classList.remove("copied"),i.innerHTML=' Copy'},2e3))}).catch(r=>{console.warn("Failed to copy to clipboard:",r)})}function Co(t){const e=Po(t);console.log(`Step 1 (Prompt Architect): ${qt(Td)}`),console.log(e!==t?`Step 2 (Code Generator): ${qt(t)} → ${qt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${qt(t)}`),console.log(`Step 3 (Code Review): ${qt(Nd)}`)}async function Ev(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(s=>{s.disabled=!0,s.innerHTML=` + `)}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=` - Refining...`});try{const s=ga(),r=Df({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,artifactId:s.id,userFeedback:"Fix the issues listed in the audit report."});Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(r,t),Di();const i=document.getElementById("step2-output"),n=bs(y.step2Result);i.textContent=n,i.dataset.raw=n,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const o=document.getElementById("step3-output");o.textContent=y.step3Result,ve(3,!1),$t();const a=Mi(y.step3Result);Gi(n,a)}catch(s){console.error("Refinement failed:",s),$t(),ue(Sa(s,"Refinement failed"),"error")}finally{y.isRunning=!1,e.forEach(s=>{s.disabled=!1,s.textContent="Refine & Regenerate"}),Xt()}}async function xa(t,e,s){const r=`${Je}/connectFeedback`,i={type:t,code:e,input:s};try{const n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!n.ok){const a=await n.text();return console.error(`callEndpoint failed: ${n.status} ${n.statusText}`,a),{success:!1,status:n.status,error:a}}const o=await n.json();return console.log("Telemetry success:",o),o}catch(n){return console.error("callEndpoint failed:",n),{success:!1,error:n.message}}}function Sv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function xv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const s=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("flutterflowError",y.step2Result,e);const r=document.getElementById("btn-fix-from-errors");r&&(r.disabled=!0,r.innerHTML=` + 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=` - Fixing…`);try{const i=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:e});ah(),Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(i,s),Di();const n=document.getElementById("step2-output"),o=bs(y.step2Result);n.textContent=o,n.dataset.raw=o,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const a=document.getElementById("step3-output");a.textContent=y.step3Result,ve(3,!1),$t();const l=Mi(y.step3Result);Gi(o,l),t&&(t.value="")}catch(i){console.error("Fix from errors failed:",i),$t(),ue(Sa(i,"Failed to fix errors"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Xt()}}async function Fo(){if(console.log("runThinkingPipeline called"),y.isRunning)return;localStorage.setItem("hasSeenWalkthrough","true");const t=document.getElementById("pipeline-input").value,e=document.getElementById("code-generator-model").value;if(!t.trim()){ue("Please describe your FlutterFlow widget first.","warning");return}if(!await zv())return;await Dv();const s=Po(e);zt("Pipeline Started",{selectedModel:e,effectiveModel:s,inputLength:t.length});const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,ov(),r.disabled=!0,r.innerHTML=` + 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=` - Running...`,Co(s);try{Zt();const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("paywall-exhausted");n&&n.classList.add("hidden"),Vi(),ze(1),it(1),ve(1,!0);const o=Pt.filter(p=>p.url).map(p=>({url:p.url}));y.step1Result=await _v(t,o),av(),zt("Prompt Architect Completed");const a=document.getElementById("step1-output"),l=bs(y.step1Result);a.textContent=l,a.dataset.raw=l,ve(1,!1),ze(2),it(2),ve(2,!0),y.step2Result=await Hi(y.step1Result,s,o),Di(),zt("Code Generator Completed");const u=document.getElementById("step2-output"),c=bs(y.step2Result);u.textContent=c,u.dataset.raw=c,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi(),zt("Code Review Completed");const d=document.getElementById("step3-output");d.textContent=y.step3Result,ve(3,!1),$t();const h=Mi(y.step3Result);Gi(c,h)}catch(i){if(console.error("Pipeline failed:",i),$t(),i.isUsageLimit){const{count:c}=zi();Aa(c,Pa(),{openModal:!0});return}zt("Pipeline Failed",{error:i.message,effectiveModel:Po(document.getElementById("code-generator-model").value)});const o=vm(i,{architect:1,generator:2,review:3});ze(o);const a=document.getElementById(`step${o}-result`),l=document.getElementById(`step${o}-loading`),u=document.getElementById(`step${o}-output`);if(l&&l.classList.add("hidden"),a&&a.classList.remove("hidden"),u)if(i.isModelArmor)u.innerHTML=``;else{let c=i.message;i.message.includes("image input")?c=`This model doesn't support image input. Please use ${qt(lr)} for image-based requests or remove image references from your prompt.`:(i.message.includes("Load failed")||i.message.includes("CORS"))&&(c="API connection failed. This might be due to CORS restrictions or network issues. Please check your API key and try again."),u.innerHTML=`
+ 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=``;else{let c=n.message;n.message.includes("image input")?c=`This model doesn't support image input. Please use ${qt(cr)} 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)}

@@ -145,10 +145,10 @@ ${i.errors.join(`

Try using a different model

Ensure network allows API calls

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

FlutterFlow Commit Failed

${j(t.error)}

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

Errors:

-
    `;for(const[i,n]of e.entries()){const o=Ed(n);s+=`
  • - ${j(i)}: ${j(o)} +
      `;for(const[n,i]of e.entries()){const o=Sd(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=` - Fixing...`);try{let i=`The previous code had the following errors when committing to FlutterFlow: + 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);i+=`File: ${c} +`;if(e&&e.size>0)for(const[c,d]of e.entries()){const h=Sd(d);n+=`File: ${c} Error: ${h} -`}else i+=`${t} -`;const n=gd({bundleSpec:y.step1Result,artifactBundle:JSON.stringify(y.artifactBundle||y.step2Result),bundleReview:y.step3Result,userFeedback:i});Vi(),it(2),ze(2),ve(2,!0),y.step2Result=await Hi(n,s),Di();const o=document.getElementById("step2-output"),a=bs(y.step2Result);o.textContent=a,o.dataset.raw=a,ve(2,!1),ze(3),it(3),ve(3,!0),y.step3Result=await Wi(y.step2Result,y.step1Result),Bi();const l=document.getElementById("step3-output");l.textContent=y.step3Result,ve(3,!1),$t();const u=Mi(y.step3Result);Gi(a,u)}catch(i){console.error("Regeneration failed:",i),$t(),ue(Sa(i,"Regeneration failed"),"error")}finally{y.isRunning=!1,r&&(r.disabled=!1,r.textContent="Fix Errors & Regenerate"),Xt()}}async function Av(){const t=document.getElementById("ff-status-dot"),e=document.getElementById("ff-status-text");if(!t||!e)return;const s=await Ee("flutterflow"),r=await Ee("flutterflow_project_id");s&&r?(t.className="w-2 h-2 rounded-full bg-green-500",e.textContent="FlutterFlow credentials configured",e.className="text-green-600"):s||r?(t.className="w-2 h-2 rounded-full bg-yellow-500",e.textContent="FlutterFlow credentials incomplete",e.className="text-yellow-600"):(t.className="w-2 h-2 rounded-full bg-red-500",e.textContent="FlutterFlow credentials not configured",e.className="text-red-600")}async function $v(t){try{const e=await fetch(`${Je}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function Rv(t){try{const s=await(await fetch(`${Je}/auth/verify-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t})})).json();if(s.error||!s.email||!s.sessionToken)throw new Error(s.error||"Invalid or expired link");return s}catch(e){throw console.error("verifyMagicLink failed:",{message:e.message,stack:e.stack}),e}}async function Tv(t){try{const e=await fetch(`${Je}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${Je}/auth/refresh-session`,status:e.status}),null;const s=await e.json();return s.error||!s.email||!s.sessionToken?(console.warn("refreshSession: validation failed",{error:s.error,hasEmail:!!s.email,hasToken:!!s.sessionToken}),null):s}catch(e){return console.error("refreshSession: fetch failed",{url:`${Je}/auth/refresh-session`,message:e.message,stack:e.stack}),null}}function bc(t,e){const s=Jd(),r=(G.email||s.email)!==t;G.email=t,G.sessionToken=e,G.isVerified=!0,fe=Es({isLoading:!0}),localStorage.setItem(vi,JSON.stringify({email:t,sessionToken:e})),r&&$a()}function ka(){G.email=null,G.sessionToken=null,G.isVerified=!1,fe=Es({isResolved:!0}),localStorage.removeItem(vi),localStorage.removeItem(yi)}function Jd(){try{const t=localStorage.getItem(vi);if(!t)return{email:null,sessionToken:null};const e=JSON.parse(t);return!e.email||!e.sessionToken?{email:null,sessionToken:null}:e}catch(t){return console.warn("getStoredSession: failed to parse auth session:",t),localStorage.removeItem(vi),{email:null,sessionToken:null}}}async function Nv(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Rv(e);bc(s,r)}catch(s){ue(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Jd();if(s&&r){const i=await Tv(r);i?bc(i.email,i.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Mv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Lv(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),s=document.getElementById("signin-message"),r=t?.value?.trim();if(!r||!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(r)||r.length>254){s&&(s.textContent="Please enter a valid email address.");return}e&&(e.disabled=!0,e.textContent="Sending…"),s&&(s.textContent="");try{await $v(r),t&&(t.value=""),s&&(s.textContent=`Check your email — we sent a link to ${r}`),e&&(e.textContent="Sent!")}catch(n){console.error("handleMagicLinkRequest: sendMagicLink failed",{email:r,err:n}),s&&(s.textContent="Something went wrong. Please try again."),e&&(e.disabled=!1,e.textContent="Send Link")}}function Ov(){ka(),$a(),Ca(),qi()}function Ca(){const t=G.isVerified&&!!G.email,e=document.getElementById("auth-signedout"),s=document.getElementById("auth-signedin"),r=document.getElementById("auth-guest-usage");e&&e.classList.toggle("hidden",t),s&&s.classList.toggle("hidden",!t),r&&r.classList.toggle("hidden",t);const i=document.getElementById("auth-user-email");i&&(i.textContent=G.email||""),zr(),qi()}async function Yd(){try{if(typeof FingerprintJS>"u"){console.warn("resolveIdentity: FingerprintJS not loaded, skipping");return}const e=await(await FingerprintJS.load()).get(),s=e.visitorId,r=await fetch(Cm,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fingerprint:e.visitorId,cookie_id:s})});if(!r.ok)throw new Error(`Identity check HTTP ${r.status}`);const i=await r.json();if(Ge.userId=i.user_id,Ge.token=i.identity_token||null,Ge.status=i.status,Ge.resolved=!0,sessionStorage.setItem(km,i.user_id),Ge.token&&sessionStorage.setItem(Im,Ge.token),i.usage_count!==void 0){const n=At(),a=(i.usage_month||n)===n?i.usage_count:0;localStorage.setItem(Kt,JSON.stringify({count:a,month:n})),Xs()}console.log(`Identity resolved: ${i.status} (${i.user_id.slice(0,8)}...) usage: ${i.usage_count??"n/a"}`)}catch(t){console.error("resolveIdentity failed:",t)}}let Fn=null;function Dv(t=5e3){return Ge.resolved?Promise.resolve():(Fn||(Fn=Yd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Fn,new Promise(e=>setTimeout(e,t))]))}function Zd(){const t=At();try{const e=localStorage.getItem(Kt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Kt,month:t,err:e}),localStorage.removeItem(Kt),{count:0,month:t}}}function At(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function zi(){const t=Zd();return t.month!==At()?{count:0,month:At()}:t}function Bv(){const e={count:zi().count+1,month:At()};return localStorage.setItem(Kt,JSON.stringify(e)),e}function Fa(){return!!fe.isLoading}function Yt(){return!!fe.isResolved}function jv(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(_i,e)?e:null}function Uv(t){return t&&Object.entries(Ad).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Hv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Wv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=Hv(e.subscription,e.stripeSubscription,e.currentSubscription,e.customer?.subscriptions?.data?.[0],e.subscriptions?.data?.[0],e.subscriptions?.[0]),r=e.metadata||s.metadata||e.customer?.metadata||{},i=$r(e.priceId,e.price_id,e.stripePriceId,e.stripe_price_id,s.priceId,s.price_id,s.plan?.id,s.price?.id,s.items?.data?.[0]?.price?.id,s.items?.[0]?.price?.id,s.lines?.data?.[0]?.price?.id),n=$r(e.status,e.subscriptionStatus,e.subscription_status,s.status,"none"),o=jv($r(e.tier,e.plan,e.planId,e.plan_id,e.subscriptionTier,e.subscription_tier,e.product,e.productName,s.tier,s.plan,r.tier,r.plan)),a=Fm.has(String(n).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Uv(i)||(a||l?"professional":"free");return Es({tier:u,status:n,periodEnd:$r(e.periodEnd,e.currentPeriodEnd,e.current_period_end,s.current_period_end,s.periodEnd,null),isResolved:!0})}function Pa(){return _i[fe.tier]??_i.free}async function zv(){if(G.isVerified&&(!Yt()||Fa())&&(await Xd({force:!0}),qi()),G.isVerified&&!Yt())return ue("Could not verify your subscription. Please refresh or try Manage billing.","error"),!1;const{count:t}=zi(),e=Pa();if(t>=e)return Aa(t,e,{openModal:!0}),!1;const s=Math.floor(e*.8);if(t>=s){const r=e-t;ue(`${r} run${r===1?"":"s"} remaining this month.`,"warning")}return!0}function Pn(){const t=document.getElementById("paywall-exhausted");t&&t.classList.add("hidden")}function Aa(t,e,s={}){const r=document.getElementById("walkthrough-modal");r&&r.classList.remove("open");const i=document.getElementById("ready-state");i&&i.classList.add("hidden");const n=document.getElementById("preview-frame-container");n&&(n.style.display="none");const o=document.getElementById("main-stage-container");o&&o.classList.add("visible");const a=document.getElementById("results-view");a&&a.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar");const l=document.getElementById("pipeline-progress");l&&l.classList.remove("visible");const u=document.getElementById("paywall-exhausted");if(!u){ue(`You've used all ${e} runs for this month. Upgrade to continue.`,"error"),Ii();return}const c=document.getElementById("paywall-exhausted-text");if(c){const h=fe.tier;h==="free"?c.textContent=`You've used all ${e} free generations this month. Upgrade to Pro for 50 generations/month and access to all AI models.`:c.textContent=`You've used all ${e} generations this month on your ${h} plan. Your limit resets next month.`}const d=document.getElementById("paywall-signin-btn");d&&d.classList.toggle("hidden",G.isVerified),u.classList.remove("hidden"),s.openModal&&Ii()}function Po(t){return fe.tier==="free"&&jr.includes(t)?lr:t}function qv(){const t=document.getElementById("code-options-content"),e=document.getElementById("code-generator-model");if(!t||!e)return;const s=fe.tier,i=!(G.isVerified&&!Yt())&&s==="free";Array.from(e.options).forEach(o=>{const a=qt(o.value),l=jr.includes(o.value);o.textContent=l&&i?`${a} (PRO)`:a,o.disabled=!1}),i&&jr.includes(e.value)&&(e.value=lr),e.disabled=!1,dc.has(e)||(e.addEventListener("change",()=>{Yt()&&fe.tier==="free"&&jr.includes(e.value)&&(e.value=lr,Ii()),Co(e.value),Rd()}),dc.add(e));let n=document.getElementById("model-selector-free-notice");i?(n||(n=document.createElement("p"),n.id="model-selector-free-notice",n.className="text-xs text-gray-400 mt-1",t.appendChild(n)),n.innerHTML='Free plan — Gemini only. '):n&&n.remove(),Co(e.value)}function Xs(){const t=document.getElementById("usage-counter");if(!t)return;if(G.isVerified&&Fa()){t.textContent="Checking plan…",t.className="text-xs text-gray-500",zr(),Pn();return}if(G.isVerified&&!Yt()){t.textContent="Plan check failed",t.className="text-xs text-red-600 font-medium",zr(),Pn();return}const{count:e}=zi(),s=Pa();t.textContent=`${e} / ${s} runs this month`;const r=s>0?e/s:0;t.className=r>=1?"text-xs text-red-600 font-medium":r>=.8?"text-xs text-yellow-600 font-medium":"text-xs text-gray-500",zr(),e>=s&&!y.isRunning?Aa(e,s):Pn()}function zr(){const t=document.getElementById("guest-usage-text");if(!t)return;const e=Zd(),s=e.month===At()?e.count??0:0,r=_i.free;t.textContent=`${s} / ${r} generations used`}async function Xd(t={}){const e=t.force===!0;if(!G.isVerified||!G.sessionToken){fe=Es({isResolved:!0});return}fe={...fe,isLoading:!0,error:null};const s=localStorage.getItem(yi);if(!e&&s)try{const{data:r,email:i,ts:n,version:o}=JSON.parse(s);if(o===hc&&i===G.email&&Date.now()-n<300*1e3){fe={...r,isLoading:!1,isResolved:r.isResolved!==!1};return}}catch(r){console.warn("Failed to parse subscription cache:",r,"| raw value:",s)}try{const i=await(await fetch(`${Je}/stripe/get-subscription`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:G.sessionToken,user_id:Ge.userId})})).json();if(i.error){if(["unauthorized","invalid session","expired session"].some(o=>String(i.error).toLowerCase().includes(o))){ka(),Ca();return}fe=Es({isResolved:!1,error:i.error});return}fe=Wv(i),localStorage.setItem(yi,JSON.stringify({version:hc,data:fe,email:G.email,ts:Date.now()}))}catch(r){console.error("fetchSubscription failed:",r),fe={...fe,isLoading:!1,isResolved:!1,error:r.message}}}function $a(){localStorage.removeItem(yi)}async function Vv(t){if(!G.isVerified||!G.sessionToken){Qd(),Ia();return}if(!Ad[t]){ue("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const r=await(await fetch(`${Je}/stripe/create-checkout-session-intl`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tierId:t,sessionToken:G.sessionToken,currency:Md()})})).json();if(r.error||!r.url)throw new Error(r.error||"Failed to create checkout session");const{url:i}=r;window.location.href=i}catch(s){console.error("startCheckout failed:",s),e&&(e.disabled=!1,e.textContent="Subscribe"),ue("Could not start checkout. Please try again.","error")}}async function Gv(){if(!G.isVerified||!G.sessionToken){Ia();return}const t=document.getElementById("manage-billing-btn");t&&(t.disabled=!0,t.textContent="Loading…");try{const s=await(await fetch(`${Je}/stripe/create-portal-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:G.sessionToken})})).json();if(s.error||!s.url)throw new Error(s.error||"Failed to open billing portal");const{url:r}=s;window.location.href=r}catch(e){console.error("openCustomerPortal failed:",e),t&&(t.disabled=!1,t.textContent="Manage billing"),ue("Could not open billing portal. Please try again.","error")}}async function ki(t,e,s,r={},i=[]){const o=new AbortController,a=setTimeout(()=>o.abort(),12e4);try{const l=await fetch(xm,{method:"POST",headers:{"Content-Type":"application/json",...Ge.token?{Authorization:`Bearer ${Ge.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ge.userId,step:t,model:e,prompt:s,images:i,context:r})}),u=await l.text();let c={};try{c=u?JSON.parse(u):{}}catch{c={}}if(l.status===429){c.serverCount!==void 0&&(localStorage.setItem(Kt,JSON.stringify({count:c.serverCount,month:At()})),Xs());const p=new Error(c.message||"Monthly usage limit reached. Upgrade to continue.");throw p.isUsageLimit=!0,p}const d=qf(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=At();(c.usage_month||p)===p&&(localStorage.setItem(Kt,JSON.stringify({count:c.usage_count,month:p})),Xs())}else Bv(),Xs();let h=c.output||c.content;if(!h){const p=u?` (body: ${u.slice(0,120)})`:"";throw new Error(`BuildShip returned no output for step "${t}"${p}`)}return Array.isArray(h)&&(h=h.map(p=>typeof p=="string"?p:p.text||"").join("")),typeof h!="string"&&(h=JSON.stringify(h)),h}catch(l){throw l.name==="AbortError"?new Error(`BuildShip ${t} timed out after ${12e4/1e3}s`):l instanceof TypeError?new Error(`BuildShip unreachable: ${l.message}`):l}finally{clearTimeout(a)}}function Kv(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),$a(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),ue("Checkout cancelled.","info"))}function qi(){const t=G.isVerified&&!!G.email,e=fe.tier,s=t&&Fa(),r=!t||Yt(),i=document.getElementById("subscription-tier-badge");if(i){const a={free:"Free",professional:"Professional",power:"Power Developer"},l={free:"bg-gray-100 text-gray-600",professional:"bg-indigo-100 text-indigo-700",power:"bg-purple-100 text-purple-700",unresolved:"bg-red-50 text-red-600"};i.textContent=s?"Checking…":r?a[e]||"Free":"Plan unavailable",i.className=`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r?l[e]||l.free:l.unresolved}`}const n=document.getElementById("upgrade-prompt");n&&n.classList.toggle("hidden",!t||s||!r||e!=="free");const o=document.getElementById("manage-billing-btn");o&&o.classList.toggle("hidden",!t||s||r&&e==="free"),Jv(r?e:null),qv(),Rd(),Xs()}function Jv(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([i,{btnId:n,defaultText:o}])=>{const a=document.getElementById(n);a&&(i===t?(a.disabled=!0,a.textContent="Current plan",a.classList.add(...e)):(a.disabled=!1,a.textContent=o,a.classList.remove(...e)))});const r=document.getElementById("free-tier-current");r&&r.classList.toggle("hidden",t!=="free")}function Ao(){const t=Md(),e=document.getElementById("pro-price"),s=document.getElementById("power-price"),r=document.getElementById("pro-price-note"),i=document.getElementById("power-price-note");e&&(e.textContent=fc(pc.professional,t)),s&&(s.textContent=fc(pc.power,t));const n="billed monthly";r&&(r.textContent=n),i&&(i.textContent=n)}function Ii(){Ao();const t=document.getElementById("pricing-modal");t&&t.classList.add("open"),Om().then(()=>Ao())}function Qd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function ue(t,e="info"){const s={success:"bg-green-600 text-white",error:"bg-red-600 text-white",warning:"bg-amber-500 text-white",info:"bg-gray-800 text-white"},r=document.createElement("div");r.className=`fixed bottom-6 left-1/2 -translate-x-1/2 px-5 py-3 rounded-lg text-sm font-medium shadow-lg z-50 transition-opacity duration-300 ${s[e]||s.info}`,r.textContent=t,document.body.appendChild(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>r.remove(),300)},3500)}document.addEventListener("DOMContentLoaded",async()=>{hljs.configure({tabReplace:" ",classPrefix:"hljs-"}),Yv(),await Nv(),Kv(),await Xd(),qi(),Ao(),await lv(),rv();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=fr();t.value=s}Ud(),Yd();const e=document.getElementById("pipeline-input");e&&(e.addEventListener("input",()=>{Et===2&&e.value.trim().length>0&&(pa(),Li())}),e.addEventListener("blur",()=>{const s=document.getElementById("walkthrough-modal");Et===2&&s&&s.classList.add("open")}),e.addEventListener("keydown",s=>{if(s.key==="Tab"){const r=document.getElementById("walkthrough-modal");Et===2&&r&&setTimeout(()=>{r.classList.add("open")},100)}})),window.addEventListener("commitStateChange",s=>{const{state:r}=s.detail;r===V.PREPARING||r===V.VALIDATING||r===V.PUSHING?(be.phaseId||sh(),Sc(r)):(r===V.SUCCESS||r===V.ERROR)&&(Sc(r),setTimeout(Ci,1e3))})});function Yv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Zv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Zt),document.addEventListener("keydown",Zt))}function Zt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),s=document.getElementById("ready-state");t&&(t.style.display="none"),e&&e.classList.add("visible"),s&&s.classList.remove("hidden");const r=document.getElementById("welcome-video-player");r&&r.removeEventListener("click",Zt),document.removeEventListener("keydown",Zt),Ud()}let Qs=null;async function Xv(){const t=document.getElementById("confirm-project-select");if(!t)return;const e=++yc,s=()=>e===yc,r=await Ee("flutterflow"),i=await Ee("flutterflow_project_id");if(s()){if(!r){t.innerHTML='',t.disabled=!0;return}t.disabled=!1,t.innerHTML='';try{const o=await new gr(r,"").listProjects();if(!s())return;if(!o||o.length===0){t.innerHTML='';return}t.innerHTML='',o.forEach(a=>{const l=document.createElement("option");l.value=a.id||a.projectId||"",l.textContent=a.name||a.projectName||`Project ${a.id}`,t.appendChild(l)}),i&&(t.value=i)}catch(n){if(!s())return;console.error("Failed to load projects for deploy:",n),t.innerHTML=''}}}function Qv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function eh(t,e,s,r=null){Qs={codeInfo:t,checks:e,deps:s,bundlePlan:r},document.getElementById("confirm-file-name").textContent=t.fileName,document.getElementById("confirm-artifact-type").textContent=t.artifactType,document.getElementById("confirm-file-size").textContent=`${(t.content.length/1024).toFixed(1)} KB`,document.getElementById("confirm-line-count").textContent=r?`${r.fileEntries.length} files`:t.content.split(` -`).length,Xv();const i=document.getElementById("confirm-deps-list"),n=document.getElementById("confirm-deps-section");s&&Object.keys(s).length>0?(i.innerHTML=Object.entries(s).map(([u,c])=>{const d=c?`at least ${bt(c)}`:"version resolved from your project";return`
  • • ${bt(u)}: ${d}
  • `}).join(""),n.classList.remove("hidden")):n.classList.add("hidden");const o=document.getElementById("confirm-warnings-list"),a=document.getElementById("confirm-warnings-section");e.warnings&&e.warnings.length>0?(o.innerHTML=e.warnings.map(u=>`
  • • ${bt(u)}
  • `).join(""),a.classList.remove("hidden")):a.classList.add("hidden"),document.getElementById("confirm-code-preview").textContent=t.content,document.getElementById("code-preview-content").classList.add("hidden"),document.getElementById("code-preview-chevron").style.transform="rotate(0deg)";const l=document.getElementById("commit-confirm-modal");l&&l.classList.add("open")}function th(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Qs=null}function e_(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-success-modal");e&&e.classList.remove("open");const s=["success-message","success-project-id","success-file-name","success-artifact-type","success-time","success-size"];for(const n of s){const o=document.getElementById(n);o&&(o.textContent="")}const r=document.getElementById("success-warnings-section");r&&r.classList.add("hidden");const i=document.getElementById("success-warnings-list");i&&(i.innerHTML="")}function $o(t){const e=(g,m)=>{const _=document.getElementById(g);_&&(_.textContent=m||"")},s=t.metadata?.fileName||"",r=t.metadata?.projectId||"",i=t.metadata?.artifactType||"",n=t.elapsedTime?`${(t.elapsedTime/1e3).toFixed(1)}s`:"",o=t.metadata?.codeSize?`${(t.metadata.codeSize/1024).toFixed(1)} KB`:"";e("success-message",t.message||"Code committed successfully!"),e("success-project-id",r),e("success-file-name",s),e("success-artifact-type",i),e("success-time",n),e("success-size",o);const a=t.addedDependencies||[],l=document.getElementById("success-deps-row");l&&l.classList.toggle("hidden",a.length===0),e("success-deps",a.join(", "));const u=document.getElementById("success-open-ff-link");u&&r&&(u.href=`https://app.flutterflow.io/project/${r}`);const c=document.getElementById("success-warnings-section"),d=document.getElementById("success-warnings-list"),h=t.unverified||[],p=t.warnings||[];(p.length>0||h.length>0)&&c&&d&&(d.innerHTML=[...h.map(g=>`
  • Not verified before deploying: ${j(String(g))}
  • `),...p.map(([g,m])=>`
  • ${j(g)}: ${j(String(m))}
  • `)].join(""),c.classList.remove("hidden"));const f=document.getElementById("commit-success-modal");f&&f.classList.add("open")}function Ro(t){Ci(),Fv(t)}function t_(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const Ec={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},s_=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}],be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(t,e=null){if(!(!Ec[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const s=this.sequence.indexOf("package");this.sequence.splice(s===-1?this.sequence.length:s,0,t)}this.phaseId=t,this.phaseStartedAt=Date.now(),this.substatus=e,this.liveSubstatus=!1,this.render(),this.timer&&clearInterval(this.timer),t!=="done"&&(this.timer=setInterval(()=>this.render(),500))}},setSubstatus(t){t&&(this.liveSubstatus=!0,this.substatus=t,this.render())},render(){const t=Ec[this.phaseId];if(!t)return;const e=(Date.now()-this.phaseStartedAt)/1e3,s=t.start+(t.end-t.start)*(1-Math.exp(-e/25));if(this.phaseId==="provision"&&!this.liveSubstatus){const o=s_.filter(a=>e>=a.after).pop();o&&(this.substatus=o.text)}const r=this.sequence.indexOf(this.phaseId),n=[`Step ${r===-1?1:r+1} of ${this.sequence.length}`];e>=5&&n.push(r_(e)),rh(this.phaseId==="done"?100:s,t.message,n.join(" · "),this.substatus)},stop(){this.timer&&clearInterval(this.timer),this.timer=null,this.phaseId=null;const t=document.getElementById("commit-progress-overlay");t&&t.classList.remove("open")}};function r_(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function sh(t){be.start(t)}function Ci(){be.stop()}function rh(t,e,s,r=null){const i=document.getElementById("commit-progress-bar"),n=document.getElementById("progress-message"),o=document.getElementById("progress-detail"),a=document.getElementById("progress-substatus");i&&(i.style.width=`${Math.round(t*10)/10}%`),n&&(n.textContent=e),o&&(o.textContent=s),a&&(a.textContent=r||"",a.classList.toggle("hidden",!r))}function Sc(t){const e={[V.PREPARING]:"prepare",[V.VALIDATING]:"validate",[V.PUSHING]:"project",[V.SUCCESS]:"done"};if(t===V.ERROR){be.timer&&clearInterval(be.timer),be.timer=null,rh(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function i_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function n_(){if(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Qv(),th(),sh({withProvisioning:i_(t)}),t.bundlePlan){const o=await vv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Ci(),o.success?$o(o):Ro(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:i}=Wd(),n=await mv(e.content,{artifactType:s,artifactName:r,fileName:i,pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Ci(),n.success?$o(n):Ro(n)}window.runThinkingPipeline=Fo;window.toggleStep=wv;window.toggleSection=yv;window.selectWorkflowStep=ze;window.copyCode=bv;window.retryWithDifferentModel=kv;window.openApiKeysModal=ha;window.closeApiKeysModal=Bd;window.closeWalkthroughModal=Zm;window.openWalkthroughModal=Ym;window.advanceWalkthrough=pa;window.commitToFlutterFlow=gv;function o_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function a_(){const t=document.getElementById("advanced-settings");t&&(t.open=!0);const e=document.getElementById("code-generator-model");e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),e.focus(),e.click())}window.focusPromptInput=o_;window.openModelSelector=a_;window.handlePromptImageSelect=Mm;window.removePromptImage=Lm;window.saveApiKeys=ev;window.clearAllApiKeys=tv;window.toggleKeyVisibility=nv;window.handleWelcomeVideoEnd=Zv;window.dismissWelcomeVideo=Zt;window.initiateCommitToFlutterFlow=Iv;window.updateFlutterFlowCredentialStatus=Av;window.closeCommitConfirmModal=th;window.closeCommitSuccessModal=e_;window.showCommitSuccessModal=$o;window.showCommitFailureModal=Ro;window.toggleCodePreview=t_;window.confirmCommitToFlutterFlow=n_;window.runRefinement=Ev;window.regenerateFromPastedErrors=xv;window.clearErrorInput=Sv;window.setFlutterFlowEndpoint=Jm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Mv;window.handleMagicLinkRequest=Lv;window.handleSignOut=Ov;window.startCheckout=Vv;window.openCustomerPortal=Gv;window.openPricingModal=Ii;window.closePricingModal=Qd;let ps=null,ih=null;const xc=120;function Vi(){const t=document.getElementById("pipeline-progress"),e=document.getElementById("results-view"),s=document.getElementById("ready-state");s&&s.classList.add("hidden"),e&&e.classList.remove("visible"),document.body.classList.remove("results-fullscreen","results-with-sidebar"),t&&t.classList.add("visible"),ih=Date.now();for(let r=1;r<=3;r++){const i=document.getElementById(`pdot-${r}`);i&&(i.className="progress-dot")}it(1),l_()}function it(t){const e={1:"Analyzing your prompt...",2:"Generating Dart code...",3:"Running code audit..."},s={1:"Step 1 of 3 — Prompt Architect",2:"Step 2 of 3 — Code Generator",3:"Step 3 of 3 — Code Review"},r=document.getElementById("progress-title-text"),i=document.getElementById("progress-substep-text");r&&(r.textContent=e[t]||e[1]),i&&(i.textContent=s[t]||s[1]);for(let n=1;n<=3;n++){const o=document.getElementById(`pdot-${n}`);o&&(n{const t=(Date.now()-ih)/1e3,e=document.getElementById("progress-elapsed"),s=document.getElementById("pipeline-progress-fill");e&&(e.textContent=`${Math.floor(t)}s`);const r=t/xc*100,i=Math.min(95,r*(1-Math.exp(-t/(xc*.6)))*1.2);s&&(s.style.width=`${i}%`)},250)}function $t(){ps&&(clearInterval(ps),ps=null);const t=document.getElementById("pipeline-progress-fill");t&&(t.style.width="100%");for(let e=1;e<=3;e++){const s=document.getElementById(`pdot-${e}`);s&&(s.className="progress-dot completed")}setTimeout(()=>{const e=document.getElementById("pipeline-progress");e&&e.classList.remove("visible"),t&&(t.style.width="0%")},400)}function xs(t,e=""){const s={pass:'',warning:'',fail:'',info:''};return``}function nh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function c_(){return Og({bundle:y.artifactBundle,reviewResult:y.step3Result})}function u_(t){return` +`}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`
    ${xs(t.severity)}
    @@ -197,7 +197,7 @@ Error: ${h} ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

    `:""}
    - `}function h_(t){const e=document.getElementById("results-summary-detail"),s=document.getElementById("results-title");if(!e)return;s&&(s.textContent=t.title);const r=t.score,i=r==null?"neutral":r>=80?"pass":r>=60?"warning":"fail",n=r==null?"":r>=80?"Strong":r>=60?"Needs work":"High risk",o=t.findings.length?` + `}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?`
      ${t.findings.map(l=>`
    • @@ -230,11 +230,11 @@ Error: ${h} ${a}
    -
    - `}function p_(t){const e=t.artifacts.find(l=>l.id===y.selectedArtifactId)||t.artifacts[0];if(!e)return"";const s={pass:{icon:"pass",message:"No file-specific issues were found."},warning:{icon:"warning",message:"This file needs attention, but Code Review did not return a specific finding."},fail:{icon:"fail",message:"This file is blocked, but Code Review did not return a specific finding."}}[e.status],r=e.findings.length?e.findings.map(u_).join(""):`
    ${xs(s.icon)} ${j(s.message)}
    `,i=e.dependencies?.length?e.dependencies.map(l=>` + `}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=>`
  • ${j(l.name)}${l.version?` ${j(l.version)}`:""}${l.reason?`

    ${j(l.reason)}

    `:""}
  • - `).join(""):'
  • No external packages
  • ',n=e.imports?.length?e.imports.map(l=>`${j(l)}`).join(""):'No imports returned',o=e.publicApi?.length?e.publicApi.map(l=>`${j(l)}`).join(""):'No public API signature returned',a=e.relationships.length?e.relationships.map(l=>` + `).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(nh(e.status))} + ${xs(e.status)} ${j(oh(e.status))}

    ${j(e.artifactName)}

    ${e.description?`

    ${j(e.description)}

    `:""}
    @@ -280,7 +280,7 @@ Error: ${h}

    Dependencies

    -
      ${i}
    +
      ${n}

    Deployment

    @@ -297,24 +297,24 @@ Error: ${h}

    Imports

    -
    ${n}
    +
    ${i}

    Relationships

      ${a}
    - `}function f_(t){const e=document.getElementById("bundle-strip"),s=document.getElementById("results-summary-tab"),r=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(s&&s.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),r&&(r.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}r&&(r.innerHTML=t.artifacts.map(n=>` + `}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=>` - `).join(""),r.onclick=n=>{const o=n.target.closest(".artifact-tab");o?.dataset?.artifactId&&oh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Ra(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),s=document.getElementById("results-audit-output"),r=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=c_(),o=ma();if(h_(n),f_(n),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=p_(n)),r&&r.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Gi(t,e){y.selectedArtifactId||(y.selectedArtifactId=fi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const s=document.getElementById("step3-output");s&&(s.textContent=""),Ra(),Xt();const r=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");r&&(r.className="feedback-btn"),i&&(i.className="feedback-btn")}function oh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function g_(){y.resultsViewMode="summary",Ra()}function m_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function v_(t){const e=document.getElementById("btn-feedback-up"),s=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),s.classList.remove("active-down")):(s.classList.toggle("active-down"),e.classList.remove("active-up"));const r=t==="up"?"thumbsUp":"thumbsDown";xa(r,y.step2Result,y.step1Result),zt("Generation Feedback",{feedback:r})}function __(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function ah(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=m_;window.selectArtifact=oh;window.selectResultsSummary=g_;window.submitResultsFeedback=v_;window.showErrorInputPanel=__;window.hideErrorInputPanel=ah; + `).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; diff --git a/dist/index.html b/dist/index.html index 726893a..21d5260 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 baa3fa0..82e0f72 100644 --- a/src/customCodeVerification.js +++ b/src/customCodeVerification.js @@ -14,16 +14,16 @@ import { identifierToFlutterFlowFileStem } from "./flutterFlowArtifactValidation // only guards a malformed manifest. const FALLBACK_SDK_CONSTRAINT = ">=3.0.0 <4.0.0"; -// Packages the Flutter SDK supplies, declared as `sdk: flutter` rather than -// with a pub version. This mirrors the allowlist the deploy runner enforces, -// so anything named here can be reproduced in the scratch package. -const SDK_DEPENDENCIES = new Set([ - "flutter", - "flutter_test", - "flutter_driver", - "flutter_localizations", - "integration_test", -]); +// Which packages the Flutter SDK supplies is read from the project's own +// pubspec, never from a list kept here. A block-form entry whose first own-key +// is `sdk:` is an SDK package by definition, so the classification cannot fall +// behind the SDK: when Flutter ships a new package, a project declaring it +// classifies correctly with no change to this file. +// +// The list this replaced could not do that. It omitted `flutter_web_plugins`, +// which turned every project declaring it - every project with web support and +// a plugin - into one whose dependencies could not be reproduced, and refused +// the whole deploy for a package most of its classes never imported. // Why the verification manifest is sent as structured data rather than as // pubspec.yaml text: the deploy runner writes the manifest to disk and runs @@ -71,17 +71,28 @@ export function classifyCustomClassImports(code = "") { function collect(declared, into, sdkPackages) { const unrepresentable = []; for (const [name, info] of declared) { - if (SDK_DEPENDENCIES.has(name) && !info.isScalar) { + if (info.isScalar) { + into[name] = unquoteConstraint(info.constraint); + continue; + } + + // A block-form entry's first own-key says where the package comes from. + // `sdk:` is the Flutter SDK, which the runner reproduces from the name + // alone as `name: {sdk: flutter}`. A nested `version:` is simply a + // constraint written on its own line. + if (info.sourceKey === "sdk") { sdkPackages.add(name); continue; } - if (!info.isScalar) { - // `git:`, `path:`, a nested `hosted:` block - none can be reproduced - // outside the project, and none can be expressed in the manifest. - unrepresentable.push(name); + if (info.sourceKey === "version") { + into[name] = unquoteConstraint(info.sourceValue); continue; } - into[name] = unquoteConstraint(info.constraint); + + // `git:`, `path:`, a nested `hosted:` block - none can be reproduced + // outside the project, and none can be expressed in a manifest that + // carries names and constraints only. + unrepresentable.push(name); } return unrepresentable; } @@ -156,11 +167,18 @@ function skipReason(className, unresolvableImports, missingPackages) { * FlutterFlow. Classes that depend on the generated app are reported in * `skipped` so the deploy can say plainly what it did not verify. * - * When the project declares a dependency that cannot be reproduced outside it - * (a `git:` or `path:` source), nothing is verified: the scratch package would - * resolve packages differently from the project, and a check against different - * versions is worse than no check, because it reports a result that does not - * describe the code that actually ships. + * A dependency that cannot be reproduced outside the project - a `git:` or + * `path:` source - stops only a class that imports it. For that class the + * scratch package would resolve different code from the project, and a check + * against the wrong versions reports a result that does not describe what + * ships, so it is left out of `sources` and named in `skipped`. A class that + * does not import it resolves everything it uses to the same versions the + * project will, so it is verified normally. + * + * That scoping is the point. Deciding it once for the whole project meant a + * single `git:` entry - or a package the SDK supplied but a hand-kept name list + * had not heard of - left every class in the deploy uncompiled, including the + * ones that never touched it. * * @param {Array<{className: string, content: string}>} classes - Classes to deploy * @param {string} projectPubspecYaml - The project's merged pubspec.yaml @@ -183,16 +201,25 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { for (const entry of classes) { const { className, content } = entry; - if (unrepresentable.length > 0) { + const importedPackages = extractPackageImports(content); + + // Scoped to this class's own imports. A dependency the project declares + // from a source the manifest cannot express is only a problem for a class + // that actually imports it. + const unresolvablePackages = importedPackages.filter((name) => + unrepresentable.includes(name), + ); + + if (unresolvablePackages.length > 0) { skipped.push({ className, - reason: `${className} was not compiled before deploying: your project declares ${unrepresentable.join(", ")} from a source that cannot be reproduced outside the project, so package resolution could not be matched exactly.`, + reason: `${className} was not compiled before deploying: it imports ${unresolvablePackages.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 } = classifyCustomClassImports(content); - const missingPackages = extractPackageImports(content).filter( + const missingPackages = importedPackages.filter( (name) => !availablePackages.has(name), ); diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 6a481d5..02e3d4b 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -119,17 +119,126 @@ test("a dependency from a git or path source is reported unrepresentable", () => assert.deepEqual(manifest.unrepresentable, ["private_thing"]); }); -test("nothing is verified when package resolution cannot be matched exactly", () => { +test("a git dependency does not stop a class that never imports it", () => { const plan = planCustomCodeVerification( [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], PROJECT_PUBSPEC, ); - // Compiling against different versions than the project resolves would report - // a result that does not describe the code that ships. - assert.deepEqual(plan.sources, []); + // The project declares `private_thing` from git, which cannot be reproduced + // outside it - but this class does not import it, so the scratch package + // resolves everything it does use to the versions the project will, and the + // check still describes the code that ships. Deciding this once for the whole + // project left every class uncompiled over a dependency it never touched. + assert.deepEqual(plan.sources, [ + { + fileName: "background_downloader_service.dart", + content: SELF_CONTAINED, + }, + ]); + assert.deepEqual(plan.skipped, []); +}); + +test("a class that imports the unreproducible dependency is skipped, and named as the reason", () => { + const importsPrivateThing = `import 'package:private_thing/private_thing.dart'; + +class UsesPrivateThing {} +`; + + const plan = planCustomCodeVerification( + [ + { className: "UsesPrivateThing", content: importsPrivateThing }, + { className: "BackgroundDownloaderService", content: SELF_CONTAINED }, + ], + PROJECT_PUBSPEC, + ); + + assert.deepEqual( + plan.sources.map((entry) => entry.fileName), + ["background_downloader_service.dart"], + ); assert.equal(plan.skipped.length, 1); - assert.match(plan.skipped[0].reason, /private_thing/); + assert.equal(plan.skipped[0].className, "UsesPrivateThing"); + // The reason names this class's own import, not the project's whole + // dependency set, so it says what to do about this class. + 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 + // web-enabled project with a plugin - read as unreproducible and the deploy + // was refused for a package most of its classes never imported. + 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.equal(manifest.sdkPackages.includes("flutter_web_plugins"), true); + assert.deepEqual(manifest.unrepresentable, []); + + const plan = planCustomCodeVerification( + [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], + pubspec, + ); + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); +}); + +test("a class importing a package the project declares as an SDK package is not missing it", () => { + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + flutter_web_plugins: + sdk: flutter +`; + const usesWebPlugins = `import 'package:flutter_web_plugins/flutter_web_plugins.dart'; + +class RegistersPlugin {} +`; + + const plan = planCustomCodeVerification( + [{ className: "RegistersPlugin", content: usesWebPlugins }], + pubspec, + ); + + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); +}); + +test("a block-form entry written as a bare version is read as a constraint", () => { + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + intl: + version: ^0.20.3 +`; + + const manifest = buildAnalysisManifest(pubspec); + + assert.equal(manifest.dependencies.intl, "^0.20.3"); + assert.deepEqual(manifest.unrepresentable, []); + assert.deepEqual(manifest.sdkPackages, ["flutter"]); }); test("plans a real compile for a class whose imports all resolve", () => { diff --git a/src/pubspecSync.js b/src/pubspecSync.js index e824edd..1cdbbb9 100644 --- a/src/pubspecSync.js +++ b/src/pubspecSync.js @@ -103,6 +103,43 @@ function splitValueAndComment(rest) { }; } +/** + * Reads the first 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 + * `version:` written on its own line. That key is the only thing that + * distinguishes a package the Flutter SDK supplies from one the analysis + * manifest cannot reproduce, so it is read here rather than guessed from the + * package's name. A name list cannot work: it goes stale the moment the SDK + * ships a package the list has not heard of, and every project declaring that + * package then reads it as unreproducible. + * + * @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 + */ +function readSourceDirective(lines, entryIndex, endIndex, parentIndent) { + for (let i = entryIndex + 1; i < endIndex; i += 1) { + const line = lines[i]; + if (isBlankOrComment(line)) continue; + // 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; + const trimmed = line.trim(); + const key = parseDependencyName(trimmed); + if (!key) continue; + const { value } = splitValueAndComment( + trimmed.slice(trimmed.indexOf(":") + 1), + ); + return { key, value }; + } + return null; +} + /** * Reads every package declared under `dependencies:` with its constraint. * @@ -111,7 +148,7 @@ function splitValueAndComment(rest) { * it is reported with `isScalar: false`. * * @param {string} yamlContent - Raw pubspec.yaml content - * @returns {Map} + * @returns {Map} */ export function parseExistingDependencies(yamlContent) { const lines = String(yamlContent || "").split("\n"); @@ -123,7 +160,8 @@ export function parseExistingDependencies(yamlContent) { const line = lines[i]; if (isBlankOrComment(line)) continue; // Only direct children are dependency names; deeper lines describe a - // dependency's own keys (sdk:, git:, version:, ...). + // dependency's own keys (sdk:, git:, version:, ...), which + // readSourceDirective reads separately below. if (indentOf(line) !== block.childIndent.length) continue; const trimmed = line.trim(); const name = parseDependencyName(trimmed); @@ -132,11 +170,21 @@ export function parseExistingDependencies(yamlContent) { const { value, comment } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); + const isScalar = value !== ""; + // 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); + declared.set(name, { constraint: value, comment, lineIndex: i, - isScalar: value !== "", + isScalar, + sourceKey: directive ? directive.key : null, + sourceValue: directive ? directive.value : null, }); } return declared; @@ -158,7 +206,7 @@ export function parseExistingDependencies(yamlContent) { * * @param {string} yamlContent - Raw pubspec.yaml content * @param {string} blockName - Top-level key, e.g. "dependency_overrides" - * @returns {Map} + * @returns {Map} */ export function parseDependencyBlock(yamlContent, blockName) { const lines = String(yamlContent || "").split("\n"); @@ -180,11 +228,21 @@ export function parseDependencyBlock(yamlContent, blockName) { const { value, comment } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); + const isScalar = value !== ""; + // 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); + declared.set(name, { constraint: value, comment, lineIndex: i, - isScalar: value !== "", + isScalar, + sourceKey: directive ? directive.key : null, + sourceValue: directive ? directive.value : null, }); } return declared; diff --git a/src/pubspecSync.test.js b/src/pubspecSync.test.js index d3b54cc..0499a77 100644 --- a/src/pubspecSync.test.js +++ b/src/pubspecSync.test.js @@ -2,6 +2,8 @@ import assert from "node:assert/strict"; import test from "node:test"; import { mergeDependenciesIntoYaml, + parseDependencyBlock, + parseExistingDependencies, parseExistingDependencyNames, validateProjectPubspec, } from "./pubspecSync.js"; @@ -173,3 +175,71 @@ test("accepts a real project pubspec and rejects a synthesized stub", () => { assert.equal(validateProjectPubspec("").valid, false); }); + +test("reads where a block-form dependency comes from", () => { + const declared = parseExistingDependencies(PROJECT_PUBSPEC); + + // The first own-key is what says whether a package can be reproduced outside + // the project, so it is read rather than inferred from the package's name. + assert.equal(declared.get("flutter").sourceKey, "sdk"); + assert.equal(declared.get("flutter").sourceValue, "flutter"); + assert.equal(declared.get("cloud_firestore").sourceKey, null); + assert.equal(declared.get("cloud_firestore").isScalar, true); +}); + +test("does not read a following sibling dependency's key as the previous entry's source", () => { + const pubspec = `dependencies: + flutter: + sdk: flutter + alpha: + beta: ^2.0.0 +`; + const declared = parseExistingDependencies(pubspec); + + // `alpha` is block form with no mapping under it. Scanning past the entry + // would reach `beta` and attribute its constraint to `alpha`. + assert.equal(declared.get("alpha").isScalar, false); + assert.equal(declared.get("alpha").sourceKey, null); + assert.equal(declared.get("beta").constraint, "^2.0.0"); +}); + +test("a nested version block is read as a constraint, not as a source", () => { + const pubspec = `dependencies: + intl: + version: ^0.20.3 +`; + const declared = parseExistingDependencies(pubspec); + + assert.equal(declared.get("intl").sourceKey, "version"); + assert.equal(declared.get("intl").sourceValue, "^0.20.3"); +}); + +test("a git source keeps only its first key, whatever the nested shape", () => { + const pubspec = `dependencies: + private_thing: + git: + url: https://example.invalid/private.git + ref: main + hosted_thing: + hosted: + name: hosted_thing + url: https://example.invalid + version: ^1.0.0 +`; + const declared = parseExistingDependencies(pubspec); + + assert.equal(declared.get("private_thing").sourceKey, "git"); + assert.equal(declared.get("hosted_thing").sourceKey, "hosted"); +}); + +test("reads a source from dependency_overrides too", () => { + const overrides = parseDependencyBlock( + `dependency_overrides: + flutter_web_plugins: + sdk: flutter +`, + "dependency_overrides", + ); + + assert.equal(overrides.get("flutter_web_plugins").sourceKey, "sdk"); +}); From b28b814a50297d43f1c8b840972a54b5285efcb2 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 15:32:24 +1000 Subject: [PATCH 02/15] ci: gate main with required CI checks and branch protection (STU-345) --- .github/workflows/ci.yml | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..0dcad9b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'npm' + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + + - name: Build production bundle + run: npm run build + + - name: Run deploy guard + run: npm run test:deploy-guard + + - name: Run proxy allowlist tests + run: npm run test:proxies + + - name: Scan production bundle for API key/endpoint leaks + run: | + set -e + echo "Scanning dist/ for leaked provider API endpoints and API key assignments..." + if grep -R --include='*.js' --include='*.html' --include='*.css' -E \ + 'api\.groq\.com|apiKey[[:space:]]*[:=][[:space:]]*["'\'''][^"'\''']+["'\''']' \ + dist/; then + echo "FAIL: Potential provider API key/endpoint leak detected in dist/" + exit 1 + fi + echo "No API key/endpoint leaks found." From f479a9a3b72cfd17954a98a8ecdfb52dba8b8f8d Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 15:41:17 +1000 Subject: [PATCH 03/15] fix(ci): avoid shell quoting errors in bundle leak scan --- .github/workflows/ci.yml | 13 ++-------- scripts/scan_bundle_for_leaks.py | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 11 deletions(-) create mode 100755 scripts/scan_bundle_for_leaks.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0dcad9b..2004d4d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ on: pull_request: jobs: - build-and-test: + ci: runs-on: ubuntu-latest steps: @@ -40,13 +40,4 @@ jobs: run: npm run test:proxies - name: Scan production bundle for API key/endpoint leaks - run: | - set -e - echo "Scanning dist/ for leaked provider API endpoints and API key assignments..." - if grep -R --include='*.js' --include='*.html' --include='*.css' -E \ - 'api\.groq\.com|apiKey[[:space:]]*[:=][[:space:]]*["'\'''][^"'\''']+["'\''']' \ - dist/; then - echo "FAIL: Potential provider API key/endpoint leak detected in dist/" - exit 1 - fi - echo "No API key/endpoint leaks found." + run: python3 scripts/scan_bundle_for_leaks.py diff --git a/scripts/scan_bundle_for_leaks.py b/scripts/scan_bundle_for_leaks.py new file mode 100755 index 0000000..700615b --- /dev/null +++ b/scripts/scan_bundle_for_leaks.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import os +import re +import sys + +DIST_DIR = "dist" +PATTERNS = { + "api.groq.com endpoint": re.compile(r"api\.groq\.com"), + "apiKey assignment": re.compile(r"apiKey\s*[:=]\s*['\"][^'\"]+['\"]", re.IGNORECASE), +} + +def main() -> int: + if not os.path.isdir(DIST_DIR): + print(f"{DIST_DIR}/ directory not found; skipping scan.") + return 0 + + leaks = [] + for root, _dirs, files in os.walk(DIST_DIR): + for name in files: + if name.endswith(".map"): + continue + path = os.path.join(root, name) + try: + with open(path, "r", encoding="utf-8", errors="replace") as f: + content = f.read() + except OSError as e: + print(f"WARN: could not read {path}: {e}", file=sys.stderr) + continue + for label, pattern in PATTERNS.items(): + for match in pattern.finditer(content): + snippet = content[max(0, match.start()-20):match.end()+20].replace("\n", " ") + leaks.append((path, label, snippet)) + + if leaks: + print("FAIL: Potential provider API key/endpoint leak detected in dist/", file=sys.stderr) + for path, label, snippet in leaks: + print(f" {path} [{label}]: {snippet}", file=sys.stderr) + return 1 + + print("No API key/endpoint leaks found.") + return 0 + +if __name__ == "__main__": + sys.exit(main()) From d20c70943edb2e3e510dae975d768008ba6557d5 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 15:54:02 +1000 Subject: [PATCH 04/15] test(e2e): deterministic browser fixtures for redesigned journeys\n\n- Add Playwright config with local Vite webServer\n- Add npm run test:ui headless browser command\n- Add reusable API fixtures: guest, Free/Pro/Power, unresolved,\n one/many artifacts, missing review score, rejected generation,\n partial/unknown deploy, project list/export/sync\n- Add baseline smoke tests for hero landing and composer state\n- Keep tests independent of future markup; no paid generation/billing/project writes\n\nSTU-372 --- e2e/fixtures/apiFixtures.js | 309 ++++++++++++++++++++++++++++++++++++ e2e/smoke.spec.js | 163 +++++++++++++++++++ package-lock.json | 53 +++---- package.json | 3 + playwright.config.js | 33 ++++ 5 files changed, 534 insertions(+), 27 deletions(-) create mode 100644 e2e/fixtures/apiFixtures.js create mode 100644 e2e/smoke.spec.js create mode 100644 playwright.config.js diff --git a/e2e/fixtures/apiFixtures.js b/e2e/fixtures/apiFixtures.js new file mode 100644 index 0000000..7aecd32 --- /dev/null +++ b/e2e/fixtures/apiFixtures.js @@ -0,0 +1,309 @@ +/** + * Deterministic, contract-shaped API fixtures for the redesigned Custom Code + * Connect browser journeys. Every fixture mirrors the response shapes consumed + * by app.js and the pipeline contracts in src/pipelineContracts.js and + * src/artifactBundle.js. + * + * These are pure data objects. Use `applyDefaultRoutes(page)` to wire them into + * Playwright request interception, or mix and match individual fixtures with + * `routeFulfill(page, urlPattern, fixture)`. + */ + +const BUILDSHIP_BASE_URL = "https://4tgke4.buildship.run"; +const PIPELINE_ENDPOINT = `${BUILDSHIP_BASE_URL}/service/runpipeline`; +const IDENTITY_ENDPOINT = `${BUILDSHIP_BASE_URL}/authUserCheck`; + +export const ENDPOINTS = { + buildship: BUILDSHIP_BASE_URL, + pipeline: PIPELINE_ENDPOINT, + identity: IDENTITY_ENDPOINT, + authSendMagicLink: `${BUILDSHIP_BASE_URL}/auth/send-magic-link`, + authVerifyMagicLink: `${BUILDSHIP_BASE_URL}/auth/verify-magic-link`, + authRefreshSession: `${BUILDSHIP_BASE_URL}/auth/refresh-session`, + getSubscription: `${BUILDSHIP_BASE_URL}/stripe/get-subscription`, + createCheckout: `${BUILDSHIP_BASE_URL}/stripe/create-checkout-session-intl`, + createPortal: `${BUILDSHIP_BASE_URL}/stripe/create-portal-session`, + connectFeedback: `${BUILDSHIP_BASE_URL}/connectFeedback`, + deployCustomClasses: + "https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses", + flutterFlowListProjects: "https://api.flutterflow.io/v2/listProjects", + flutterFlowLegacyListProjects: + "https://api.flutterflow.io/v2/l/listProjects", + flutterFlowExportCode: "https://api.flutterflow.io/v2/exportCode", + flutterFlowSyncCustomCodeChanges: + "https://api.flutterflow.io/v2/syncCustomCodeChanges", + exchangeRates: "https://open.er-api.com/v6/latest/AUD", +}; + +function ok(body) { + return { status: 200, body: JSON.stringify(body), contentType: "application/json" }; +} + +function err(status, body) { + return { status, body: typeof body === "string" ? body : JSON.stringify(body), contentType: "application/json" }; +} + +export const guestIdentity = () => + ok({ + status: "guest", + user_id: "guest-test-0001", + identity_token: null, + usage_count: 0, + usage_month: new Date().toISOString().slice(0, 7), + }); + +export const freeSubscription = () => + ok({ + data: { + subscription: { status: "active", tier: "free" }, + priceId: null, + usage_count: 0, + usage_month: new Date().toISOString().slice(0, 7), + }, + }); + +export const professionalSubscription = () => + ok({ + data: { + subscription: { + status: "active", + tier: "professional_plan", + priceId: "price_1T2ldCKszA2slvDXatdeCpbI", + }, + priceId: "price_1T2ldCKszA2slvDXatdeCpbI", + usage_count: 12, + usage_month: new Date().toISOString().slice(0, 7), + }, + }); + +export const powerSubscription = () => + ok({ + data: { + subscription: { + status: "active", + tier: "power_developer", + priceId: "price_powerDev_123", + }, + priceId: "price_powerDev_123", + usage_count: 47, + usage_month: new Date().toISOString().slice(0, 7), + }, + }); + +export const unresolvedSubscription = () => + ok({ error: "Subscription service temporarily unavailable" }); + +export const signedInSession = () => + ok({ + email: "test@example.com", + sessionToken: "test-session-token-0001", + }); + +export const magicLinkSent = () => + ok({ success: true, message: "Magic link sent" }); + +export const checkoutSession = () => + ok({ url: "https://checkout.stripe.com/mock-session" }); + +export const portalSession = () => + ok({ url: "https://billing.stripe.com/mock-portal" }); + +function buildArtifactBundle(artifacts) { + return { + schemaVersion: "1.0.0", + id: "bundle-test-0001", + title: "Deterministic test bundle", + description: "Generated by browser fixture", + artifacts: artifacts.map((artifact, index) => ({ + id: artifact.id ?? `${artifact.artifactType?.toLowerCase() ?? "file"}-${index + 1}`, + artifactType: artifact.artifactType ?? "CodeFile", + artifactName: artifact.artifactName ?? `TestArtifact${index + 1}`, + fileName: artifact.fileName ?? `${artifact.artifactName ?? `TestArtifact${index + 1}`}.dart`, + deployPath: artifact.deployPath ?? "", + description: artifact.description ?? "", + code: artifact.code ?? "// Test code", + dependencies: artifact.dependencies ?? [], + imports: artifact.imports ?? [], + publicApi: artifact.publicApi ?? [], + relationships: artifact.relationships ?? [], + deployStatus: artifact.deployStatus ?? "pending", + review: artifact.review ?? null, + metadata: artifact.metadata ?? {}, + codeType: artifact.codeType ?? "C", + })), + dependencies: [], + relationships: [], + deployOrder: artifacts.map((_, index) => `file-${index + 1}`), + warnings: [], + metadata: {}, + }; +} + +export const oneArtifact = () => + ok({ + output: JSON.stringify( + buildArtifactBundle([ + { + id: "custom-action-greet-user", + artifactType: "CustomAction", + artifactName: "GreetUser", + code: "import 'package:flutter/material.dart';\nFuture greetUser() async { return 'Hello'; }", + codeType: "A", + }, + ]), + ), + usage_status: "success", + usage_count: 1, + usage_month: new Date().toISOString().slice(0, 7), + }); + +export const manyArtifacts = () => + ok({ + output: JSON.stringify( + buildArtifactBundle([ + { + id: "custom-class-event-model", + artifactType: "CustomClass", + artifactName: "AgentEvent", + code: "class AgentEvent { final String type; AgentEvent(this.type); }", + codeType: "C", + }, + { + id: "custom-action-parse-event", + artifactType: "CustomAction", + artifactName: "ParseAgentEvent", + code: + "import 'package:flutter/material.dart';\nimport 'agent_event.dart';\nAgentEvent parseEvent(String raw) { return AgentEvent(raw); }", + codeType: "A", + }, + { + id: "custom-widget-agent-view", + artifactType: "CustomWidget", + artifactName: "AgentView", + code: + "import 'package:flutter/material.dart';\nimport 'agent_event.dart';\nclass AgentView extends StatelessWidget { @override Widget build(BuildContext context) { return Container(); } }", + codeType: "W", + }, + ]), + ), + usage_status: "success", + usage_count: 3, + usage_month: new Date().toISOString().slice(0, 7), + }); + +export const missingReviewScore = () => + ok({ + output: JSON.stringify({ + status: "pass", + summary: "Bundle compiles but review score is absent", + manualActions: [], + findings: [], + artifacts: [ + { + id: "custom-action-greet-user", + review: { status: "pass", findings: [] }, + }, + ], + }), + }); + +export const rejectedGeneration = () => + err(400, { + error: "Policy violation: prompt requests unsupported platform behavior", + message: "Generation rejected by model armor", + }); + +export const partialDeploy = () => + err(207, { + success: false, + deployed: ["custom-class-event-model"], + failed: [ + { + id: "custom-widget-agent-view", + error: "Widget signature references unknown parameter type", + }, + ], + }); + +export const unknownDeploy = () => + err(500, { message: "Deploy service returned an unrecognized response" }); + +export const emptyProjectList = () => ok({ success: true, value: JSON.stringify({ entries: [] }) }); + +export const sampleProjectList = () => + ok({ + success: true, + value: JSON.stringify({ + entries: [ + { id: "proj-abc-123", project: { name: "Test Project Alpha" } }, + { id: "proj-def-456", project: { name: "Test Project Beta" } }, + ], + }), + }); + +export const projectExport = () => + ok({ + success: true, + value: JSON.stringify({ + project_zip: "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAIAAAAbWV0YS5Z", // minimal fake zip + }), + }); + +export const customCodeSync = () => + ok({ + success: true, + value: JSON.stringify({ message: "Custom code synced" }), + }); + +export const exchangeRates = () => + ok({ + result: "success", + base_code: "AUD", + rates: { USD: 0.65, EUR: 0.6, GBP: 0.52 }, + }); + +/** + * Fulfill a Playwright route with a deterministic fixture response. + */ +export async function routeFulfill(page, urlPredicate, fixture) { + await page.route(urlPredicate, async (route) => { + const response = typeof fixture === "function" ? fixture() : fixture; + await route.fulfill(response); + }); +} + +/** + * Apply a safe default route map that isolates the test from external services. + * Use this as the baseline in every browser journey, then override specific + * endpoints to exercise auth, subscription or generation states. + */ +export async function applyDefaultRoutes(page, overrides = {}) { + const routes = { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.authSendMagicLink]: magicLinkSent(), + [ENDPOINTS.authVerifyMagicLink]: signedInSession(), + [ENDPOINTS.authRefreshSession]: signedInSession(), + [ENDPOINTS.getSubscription]: freeSubscription(), + [ENDPOINTS.createCheckout]: checkoutSession(), + [ENDPOINTS.createPortal]: portalSession(), + [ENDPOINTS.connectFeedback]: ok({ success: true }), + [ENDPOINTS.deployCustomClasses]: ok({ success: true, deployed: [] }), + [ENDPOINTS.flutterFlowListProjects]: sampleProjectList(), + [ENDPOINTS.flutterFlowLegacyListProjects]: sampleProjectList(), + [ENDPOINTS.flutterFlowExportCode]: projectExport(), + [ENDPOINTS.flutterFlowSyncCustomCodeChanges]: customCodeSync(), + [ENDPOINTS.exchangeRates]: exchangeRates(), + [ENDPOINTS.pipeline]: oneArtifact(), + ...overrides, + }; + + await page.route("**/*", async (route) => { + const url = route.request().url(); + const fixture = routes[url]; + if (fixture) { + await route.fulfill(typeof fixture === "function" ? fixture() : fixture); + return; + } + await route.continue(); + }); +} diff --git a/e2e/smoke.spec.js b/e2e/smoke.spec.js new file mode 100644 index 0000000..5419c9a --- /dev/null +++ b/e2e/smoke.spec.js @@ -0,0 +1,163 @@ +import { test, expect } from "@playwright/test"; +import { + applyDefaultRoutes, + guestIdentity, + freeSubscription, + professionalSubscription, + powerSubscription, + unresolvedSubscription, + ENDPOINTS, +} from "./fixtures/apiFixtures.js"; + +const COMPOSER_PLACEHOLDER = /Describe your custom widget or action/i; + +/** + * Baseline smoke test for the redesigned hero landing and composer state. + * Does not invoke paid generation, billing or real project writes; every + * external endpoint is intercepted with deterministic fixtures. + */ +test.describe("Redesigned hero landing and composer", () => { + test.beforeEach(async ({ page }) => { + page.consoleFailures = []; + page.on("console", (msg) => { + if (msg.type() === "error") { + page.consoleFailures.push(msg.text()); + } + }); + }); + + test.afterEach(async ({ page }) => { + expect(page.consoleFailures).toEqual([]); + }); + + test("shows the hero landing and an empty composer", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: freeSubscription(), + }); + + await page.goto("/"); + + // Hero landing is visible and branded. + await expect(page).toHaveTitle(/Custom Code Connect/); + const heading = page.locator("h1"); + await expect(heading).toBeVisible(); + await expect(heading).toContainText("FlutterFlow Custom Code, Solved."); + + // Composer is present and empty by default. + const composer = page.locator("#pipeline-input"); + await expect(composer).toBeVisible(); + await expect(composer).toHaveValue(""); + await expect(composer).toHaveAttribute( + "placeholder", + /Describe your custom widget or action/i, + ); + + // The main stage starts with the preview/welcome frame visible; the ready + // state remains in the DOM but is hidden until generation is dismissed. + const previewFrame = page.locator("#preview-frame-container"); + await expect(previewFrame).toBeVisible(); + const readyState = page.locator("#ready-state"); + await expect(readyState).toBeHidden(); + await expect(readyState).toContainText("Ready to Generate"); + }); + + test("composer accepts input and reflects typed state", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: freeSubscription(), + }); + + await page.goto("/"); + + const composer = page.locator("#pipeline-input"); + await composer.fill("A circular progress gauge with gradient stroke."); + await expect(composer).toHaveValue( + "A circular progress gauge with gradient stroke.", + ); + + // The run button is enabled once there is input. + const runButton = page.locator("#btn-run-pipeline"); + await expect(runButton).toBeEnabled(); + }); + + test("guest usage badge shows the intercepted free allowance", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: freeSubscription(), + }); + + await page.goto("/"); + + const usageText = page.locator("#guest-usage-text"); + await expect(usageText).toBeVisible(); + await expect(usageText).toContainText("0 / 2 generations used"); + }); + + test("signed-in Professional badge is rendered from fixture", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: professionalSubscription(), + }); + + // Seed a signed-in session before navigation so subscription state is surfaced. + await page.addInitScript(() => { + localStorage.setItem( + "ccc_auth_session", + JSON.stringify({ + email: "pro@example.com", + sessionToken: "test-session-token-pro", + }), + ); + }); + + await page.goto("/"); + + const badge = page.locator("#subscription-tier-badge"); + await expect(badge).toContainText("Professional"); + }); + + test("signed-in Power badge is rendered from fixture", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: powerSubscription(), + }); + + await page.addInitScript(() => { + localStorage.setItem( + "ccc_auth_session", + JSON.stringify({ + email: "power@example.com", + sessionToken: "test-session-token-power", + }), + ); + }); + + await page.goto("/"); + + const badge = page.locator("#subscription-tier-badge"); + await expect(badge).toContainText("Power Developer"); + }); + + test("unresolved subscription surfaces the unavailable plan state", async ({ page }) => { + await applyDefaultRoutes(page, { + [ENDPOINTS.identity]: guestIdentity(), + [ENDPOINTS.getSubscription]: unresolvedSubscription(), + }); + + await page.addInitScript(() => { + localStorage.setItem( + "ccc_auth_session", + JSON.stringify({ + email: "unresolved@example.com", + sessionToken: "test-session-token-unresolved", + }), + ); + }); + + await page.goto("/"); + + const badge = page.locator("#subscription-tier-badge"); + await expect(badge).toContainText("Plan unavailable"); + }); +}); diff --git a/package-lock.json b/package-lock.json index 010c480..586e50b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "posthog-js": "^1.415.7" }, "devDependencies": { + "@playwright/test": "^1.63.0", "playwright": "^1.58.2", "pptxgenjs": "^4.0.1", "vite": "^7.0.0" @@ -478,6 +479,22 @@ "node": "^22.20 || ^24.12 || >=25" } }, + "node_modules/@playwright/test": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", + "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@posthog/browser-common": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@posthog/browser-common/-/browser-common-0.5.0.tgz", @@ -1102,50 +1119,32 @@ } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.63.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "node": ">=20" } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=20" } }, "node_modules/postcss": { diff --git a/package.json b/package.json index ed0c1b1..b06c513 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,8 @@ "build": "vite build", "preview": "vite preview", "test": "node --test src/*.test.js", + "test:ui": "npx playwright test", + "test:ui:headed": "npx playwright test --headed", "test:proxies": "php scripts/test-proxy-allowlist.php", "test:deploy-guard": "python3 scripts/test-deploy-guard.py", "test:key-storage": "npm run build && node scripts/test-key-storage.mjs", @@ -18,6 +20,7 @@ "audit:widget": "node scripts/audit-ff-widget.mjs" }, "devDependencies": { + "@playwright/test": "^1.63.0", "playwright": "^1.58.2", "pptxgenjs": "^4.0.1", "vite": "^7.0.0" diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..6f741a1 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,33 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Playwright configuration for deterministic browser tests of the redesigned + * Custom Code Connect UI. Tests run against the local Vite dev server so they + * exercise the real build pipeline without touching paid generation, billing or + * production project writes. + */ +export default defineConfig({ + testDir: "./e2e", + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: "list", + use: { + baseURL: "http://localhost:3000", + trace: "on-first-retry", + screenshot: "only-on-failure", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + webServer: { + command: "npm run dev", + url: "http://localhost:3000", + reuseExistingServer: !process.env.CI, + timeout: 120_000, + }, +}); From 468d248664433346865b8c12e56e2ebfc8d0d9f6 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 15:54:54 +1000 Subject: [PATCH 05/15] test(e2e): ignore Chromium permissions-policy noise in console assertions\n\nThe compute-pressure permissions-policy notice is a browser-level\nwarning unrelated to app code. Filter it from the global console\nfailure assertion so smoke tests stay green.\n\nSTU-372 --- e2e/smoke.spec.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/e2e/smoke.spec.js b/e2e/smoke.spec.js index 5419c9a..b18b37b 100644 --- a/e2e/smoke.spec.js +++ b/e2e/smoke.spec.js @@ -27,7 +27,11 @@ test.describe("Redesigned hero landing and composer", () => { }); test.afterEach(async ({ page }) => { - expect(page.consoleFailures).toEqual([]); + // Ignore Chromium permissions-policy notices that are unrelated to app code. + const relevantFailures = page.consoleFailures.filter( + (text) => !/Permissions policy violation: compute-pressure/.test(text), + ); + expect(relevantFailures).toEqual([]); }); test("shows the hero landing and an empty composer", async ({ page }) => { From 5e16cae15135ff804b186bfedd699865878a0183 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:20:49 +1000 Subject: [PATCH 06/15] fix: classify a block-form dependency by any nested source key, not just the first (cherry picked from commit d5a3c922469ccb5da7bf43e6b378c9d913115a2f) --- .../{index-D4d_RpDK.js => index-DheZmoMN.js} | 134 +++++++++--------- dist/index.html | 2 +- src/customCodeVerification.js | 13 +- src/customCodeVerification.test.js | 26 ++++ src/pubspecSync.js | 56 +++++--- src/pubspecSync.test.js | 58 +++++++- 6 files changed, 195 insertions(+), 94 deletions(-) rename dist/assets/{index-D4d_RpDK.js => index-DheZmoMN.js} (66%) diff --git a/dist/assets/index-D4d_RpDK.js b/dist/assets/index-DheZmoMN.js similarity index 66% rename from dist/assets/index-D4d_RpDK.js rename to dist/assets/index-DheZmoMN.js index efa7947..7722dbb 100644 --- a/dist/assets/index-D4d_RpDK.js +++ b/dist/assets/index-DheZmoMN.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,ah=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 w(){return w=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},w.apply(null,arguments)}function Ic(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fs,lh=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),ch=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],uh=["token"],Cc="NativeGzipValidationError",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},dh=(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 dh(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 hh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return hh.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]",ph=t=>t instanceof FormData,fh=t=>M(ch,t),gh=t=>M(uh,t);function $c(t){return t===null||typeof t!="object"}function 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 mh=[!0,"true",1,"1","yes"],Zn=t=>M(mh,t),vh=[!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 _h{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",yh=Vt+" OS",jc=Vt+" "+Vr,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",wh=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",bh=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),Eh=new RegExp(ds,"i"),Sh=new RegExp(tr+" \\w+","i"),xh=new RegExp(er+" \\w+","i"),jo=new RegExp(fs+"|PlayBook|BB10","i"),kh={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Xc=function(t,e,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")?wh: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:"")},Ih={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[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)]},Ch=function(t,e,s,r){var n=Xc(t,e,s,r),i=Ih[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=kh[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/,[yh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return xh.test(t)?er:Sh.test(t)?tr:Eh.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)?bh:new RegExp(ps,"i").test(t)&&!new RegExp(ps+" pc","i").test(t)?Gc:""},Fh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(s=t)=="string"&&Fh.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 Ph=t=>t instanceof Error,eu={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Ah=eu.info;function tu(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(L(t))return{arrayValue:{values:t.map((e=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function 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 $h(t,e){var s=eu[t.level||"info"]||Ah,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:Yr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function su(t,e,s){return w({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function ru(t,e,s,r){return{resourceLogs:[{resource:{attributes:Yr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let Rh=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:$h(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 Th=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s?.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=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 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: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=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=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 Nh(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 Mh{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:Nh(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 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]},Lh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Oh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Dh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Bh=(t,e)=>{var s=Lh.exec(t);if(s)return ji(e,s[1],gs,+s[2],+s[3]);var r=Oh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var n=Dh.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)}},jh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Uh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Hh=(t,e)=>{var s=jh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=Uh.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 Wh{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 zh{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 qh{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 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 Vh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Gh{match(e){return typeof e=="string"}coerce(e,s){var r,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(Vh);return n&&(s=n[1],r=n[2]),[s,r]}}var Kh=["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 Jh{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)&&Kh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(Ph(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Yh{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 Zh{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 Xh{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",Qh=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:tp(t.max_bytes,ti.max_bytes)}:w({},ti)}class ep{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 tp(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,sp=se("[ExternalScriptsLoader]"),si=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return sp.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(ph(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}},rp=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},np=["herokuapp.com","vercel.app","netlify.app"];function ip(t){var e=t?.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of np)if(s===r)return!1;return!0}function 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 op{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 ap}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class ap{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>lp().toString(),lp=()=>(tl||(tl=new op)).generate(),Ps="",cp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,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),b="dmn_chk_"+dt();!Ps&&_--;){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",Ps=E)}return Ps})(c);if(!h){var p=(f=>{var g=f.match(cp);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)}}},up=[sr,"distinct_id",ls,zo,rn,sn,He],Sr={},dp={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 hp{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ht}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,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(vh,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__",pp=1,fp=3,gp=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===pp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===fp}function Eu(t){return!!t&&t.nodeType===gp&&Ft(t.host)}var Su=1e3;function Go(t){return t?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 mp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],vp=[...Iu,"+","-","−","–"],nl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],_p=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var 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(_p,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>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,yp=[16,15,14,13],wp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function bp(t){for(var e=0,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 yp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&bp(d))return!0}}}return!1})(t);if(s)return!1;var r=e?wp.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 Ep(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xr=se("[Dead Clicks]"),Sp=()=>!0,xp=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)?w({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(C),xr.info("starting...")}}else xr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xr.info("stopping..."))}}var 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 _,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 kp{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"],Ip={[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"}},Cp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ip[t];if(e)return e;for(var s of Cp){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"],Fp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...vs],ir="",Pp=["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(Pp,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,i)}function Mu(t,e){var s=Fp.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 Ap(){try{return new Date().getTimezoneOffset()}catch{return}}var $p={flags:Gs,surveys:tn},Rp=["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,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){Rp.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=[...up,...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=dp: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=$p[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"},Tp={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=se("[RateLimiter]");class Np{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 Mp=Js(Kt,9),Lp=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 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]},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),b=_[0],E=_[1],I=wl(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=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,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[_l[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=Mp,J=Kt,z=Lp,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]},Op=new _s([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Dp=(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 Bp(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=Dp[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=lo(E,I,d.subarray(F,P)):(E[F]=!0,I=lo(E,I,d.subarray(F,_)))}else{for(var B=Op[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,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,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,E,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(b,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 jp=!!$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=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},gi=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===xe.GZipJS){var r=Bp((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(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(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gi(w({},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}))}},Up=(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 w({},e,{Ji:{contentType:Gu,body:n,estimatedSize:n.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Hp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Hp.test(t?.message||""),Xu=t=>{var e=Yu(t);if(e){var 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,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)}}},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:w({},t.data,{batch:h});return co(w({},t,{data:d(u.slice(0,c))})),void co(w({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(w({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var n=r==="query"?e==="POST"?"sent_at":"_":void 0;return $n(s===xe.GZipJS?Ku(t,"compression"):t,w({},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 Wp{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(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 zp=["retriesPerformedSoFar"];class qp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},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,zp);lt(s)&&(r.url=$n(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 Vp{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 Gp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,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||Gp,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 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 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",Kp=/^\/static\//;class Jp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,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(Kp.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)}},Yp=[di.Popover,di.Widget,di.API],Zp={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},Xp=se("[PostHog ExternalIntegrations]"),Qp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class ef{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 Xp.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(Qp[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((n=this._instance.config.integrations)!==null&&n!==void 0?n:{})){var n;s()}}}class tf{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 sf{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 rf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new sf(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 tf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(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: ",nf=["token","distinct_id",pu],os="posthog",ad=!jp&&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:ip(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:vp,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))},of=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Pl=t=>{var e={};for(var s of of){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 af{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,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 af,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_i(),this.SentryIntegration=kp,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 Vp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Np(this),this.requestRouter=new Jp(this),this.consent=new hp(this),this.externalIntegrations=new ef(this);var 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(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 Wp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new qp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,B,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:s,thisC:w({},this.config),p,s:f}),!this.config.identity_distinct_id||(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===es)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: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=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,xp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,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=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=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 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(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&ah&&typeof Promise<"u"&&!Dr?Up(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Dr=!0,void g(w({},o,{compression:void 0,url:El(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var b="name"in _?String(_.name):"";return Ha(_)||b===Cc})(m)&&(Dr=!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){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 _,b,E,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 lh.forEach(z),O.forEach(z),J})(f.properties,nf)),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=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,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Tp.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=w({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=w({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(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 rf(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[pu]=!0),e==="$snapshot"){var l=w({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||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:Ap()}),{$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:Ch(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(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 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(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var E=this.config.sanitize_properties;E&&(k.error(Fl),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(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=Zp),(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:w({},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 b=this.config.get_device_id(dt());this.register_once({distinct_id:b,$device_id:e?b: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=w({},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(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: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(gh),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 fh(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]]=rp(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 lf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function cf(t,e){var 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=[],_={},b=!1,E=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");b=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(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};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=lf(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)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),b){var I,F;m[0].attr__href=b;var P=(I=cn(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 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:Ep(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=()=>{},uf=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),df=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))},hf=["$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 pf{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 ff{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 pf(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(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 gf extends ff{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.",mf=v!=null&&v.location?un(v.location.hash,"__posthog")||un(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=se("[Toolbar]"),Bl=se("[FeatureFlags]");class vf{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",_f={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||_f[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var 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 vf(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=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(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=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: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=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: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:w({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var 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,_,b,E,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(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,[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?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{[Us]:h,[Bt]:m,[en]:!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({[Us]:Object.keys(Wl(b)),[Bt]:b||{},[Hs]:E||{},[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=w({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(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(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]: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}}},yf={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===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]: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===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))}}},wf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,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 b=p.dom_event_allowlist;if(b&&!b.some((S=>h.type===S)))return!1}var E=Cu(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)||!ro(F,p?.css_selector_allowlist)||ro(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:mp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var 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=cf(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;df.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var 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,Sp,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(w({},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",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[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")}}},bf={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 _h(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:Ms})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=w({},e,t):(x(t)?this.Ko:t)&&(e=w({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ms.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",(r=>{if(r)return Ms.error("failed to load script",r);t()}))}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[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 Mh([new Wh,new Xh,new qh,new zh,new Yh,new Jh,new Gh,new Zh],(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((b=>{return w({},b,{filename:b.filename||(E=_,E[E.length-1]||{}).filename,function:b.function||gs});var E}))})(u)}})("web:javascript",Bh,Hh)),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 ep(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)=>Qh.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({[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:w({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?w({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((s,r)=>{var 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)}}},Ef=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({[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),Sf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var 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({},Ic(t,hf),{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(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.')}}}},xf={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 uf.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()}}},kf=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(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 gf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var 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(Yp.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!==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),If={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,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=mf||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=w({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(w({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var 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)}}},Cf=w({experiments:ye},Rn),Ff={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;D(e)||(Ke(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||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()}}},Pf={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(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,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 Rh(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}}},Af={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new Th(this.hu(),(function(r){var 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)}}},$f=w({},Rn,yf,wf,bf,Ef,Sf,kf,xf,If,Cf,Ff,Pf,Af);Te.__defaultExtensionClasses=w({},$f);(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",Rf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function fo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Tf(t={},e=0){const 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)||Tf({...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||Rf[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 Nf(t){return ys({task:"architect",userRequest:String(t??"")})}function Mf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ys(e):ys({task:"generate_bundle",bundleSpec:e})}function Lf(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 Of({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"},Df=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Bf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function gd(t,e=0){if(!Le(t)||e>3)return null;if(Bf(t))return t;for(const s of Df){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 jf(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 Uf(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 Hf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function Wf(t){const e=gd(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);jf(e.filterSummary,s),Uf(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 zf(t,e){const s=Wf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Hf))],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 qf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of qf(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 Vf(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 Gf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Kf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Jf=["Struct","Record"],Yf=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>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 Xf(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;nQf(t).usable);function tg(t=""){const e=ar(t);return eg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:n})=>({id:s,severity:r,message:n}))}function sg(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=Zf(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 rg(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 ng(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 ig(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 og(t="",e=""){return ta(t,e)!==null}function ag(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>Kf.has(r)?!1:!Jf.some(i=>r.endsWith(i))||e.has(r))}function lg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=rg(t,e),n=ag(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 cg(t,e={}){const s=[],r=t.fileName||"",n=t.code||"";if(Gf.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 tg(n))s.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!og(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=lg(n,{functionName:t.artifactName,declaredTypes:i});o&&s.push(Qe(t,"error",o));const a=ig(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=ng(r,n);i&&s.push(Qe(t,"info",i))}return s}function ug(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(i=>Tn(i.code||""))),r=e.flatMap(i=>cg(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 dg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const hg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function pg(t="",e=""){const s=dg(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:!hg.test(i)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+n}const fg=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 _d(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=>_d(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=>_d(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(E=>Object.keys(E).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((E,I)=>Ng(s,a,E,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(E=>E.manualSteps)].filter((E,I,F)=>F.findIndex(P=>P.title===E.title&&P.artifactId===E.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(E=>E.severity),...l.map(E=>E.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}),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 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 yd(t){const e=Bg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),s=>s[1])}function wd(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 Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const n=s.split(` +`),i=new Set(Sd(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 Yg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:s,overridden:[],skipped:[]};const 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}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:n.join(` +`),overridden:o,skipped:a}}function Id(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),oa(e.split(` +`))||s.push("pubspec.yaml missing dependencies section"),Sd(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const Zg=">=3.0.0 <4.0.0";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 Xg(t=""){const e=gg(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===null&&i.version){e[n]=bo(i.version);continue}r.push(n)}return r}function Qg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e);n.push(...ac(Gg(t,"dependency_overrides"),r,e));const i=new Set([...Object.keys(s),...e]),{sdk:o}=xd(t);return{sdkConstraint:bo(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:i,unrepresentable:n}}function em(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 tm(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},u=[],c=[];for(const d of t){const{className:h,content:p}=d,f=ra(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}=Xg(p),_=f.filter(b=>!o.has(b));if(m.length>0||_.length>0){c.push({className:h,reason:em(h,m,_)});continue}u.push({fileName:`${sa(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}function lc(t,e){const s=`${t}${e}`.split(` +`),r=s.pop()??"",n=[];for(const i of s){const o=Cd(i);o&&n.push(o)}return{events:n,buffer:r}}function sm(t){const e=Cd(t);return e?[e]:[]}function Cd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function rm(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 sm(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 nm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(nm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function im(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 am(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:am(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const 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 lm(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 cm="https://pub.dev/api/packages/",um=8e3;function dm(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||om(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 hm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:n=fetch}=e;let i;try{const a=await n(`${cm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(um)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};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=dm(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 pm(t,e={}){const s=await Promise.all(t.map(r=>hm(r,e)));return new Map(s.map(({name:r,...n})=>[r,n]))}async function fm(t,e={},s={}){const{resolveVersions:r=pm}=s,n=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=xd(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(lm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await 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 gm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>gm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function mm(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 vm(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 _m(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 ym(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function 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 Fd(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=ym(o),u=Fd(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)} + ${vm(l)} ${bt(l)}

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

    - ${ym(l)} + ${_m(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 wm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Pd={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 bm=`${Je}/service/runpipeline`,Em="bs_user_id",Sm="bs_identity_token",xm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const yn={free:2,professional:50,power:2e3},wn="ccc_subscription",hc=3,km=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"],Im={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function zt(t){return Im[t]||t}const Cm=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Ad(t){return Cm.has(t)}const Eo=4,Ci=8*1024*1024,Fm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Pm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Am(t){const e=new FormData;return e.append("file",t),(await fetch(Fm,{method:"POST",body:e})).json()}function $m(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const 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 Rm(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 Pm(l);if(!u)return null;let c="";try{c=$m(await Am(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Ad(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),r.length>n&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Tm(t){Pt.splice(t,1),la()}function la(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((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 $d(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),s=Ad(e?.value);t.classList.toggle("hidden",!s),!s&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Rd="google/gemini-3.7-flash",Td="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 Nm(){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 Nd(){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",Mm="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 Md(){return localStorage.getItem(ur)||""}function Io(){return crypto.randomUUID?.()||Od(crypto.getRandomValues(new Uint8Array(16)))}function Lm(){const t=Md();if(t)return t;const e=Io();return localStorage.setItem(ur,e),e}function Es(){ko=null,En=null,dr=!1,Sn=!1}window.addEventListener("storage",t=>{t.key===ur&&Es()});function Om(){return new Promise((t,e)=>{const s=indexedDB.open(Mm,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 Om();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 Dm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Bm(){const t=await ca("readonly",e=>e.get(it));return Dm(t)?t:null}async function Ld(t){await ca("readwrite",e=>e.put(t,it))}async function jm(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Um(){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 Ld(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 Hm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await Bm();if(e)return e;const s=await Um();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Ld(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=Lm();En!==s&&Es();const r=ko||Hm(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function Wm(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:Od(o),keyVersion:s,sessionFallback:dr}}async function zm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=qm(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 Od(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"),Ym(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),hr&&Ud(hr)}function Dd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(pa(),s.classList.add("open"))}let Et=1;function Bd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Dn(){const t=Bd();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 Gm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Km(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function jd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,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",Jm()}function Jm(){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 Ym(){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 Zm(){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"),Dd()},1e3)}async function Xm(){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 jm(),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 Qm(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function ev(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;Qm("flutterflow-api-key-input",s)}),t.addEventListener("blur",tv(async e=>{const s=e.target.value.trim();s&&await Ud(s)},500)))}function tv(t,e){let s;return function(...n){const i=()=>{clearTimeout(s),t(...n)};clearTimeout(s),s=setTimeout(i,e)}}async function Ud(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 sv(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 rv(){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 nv(){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=ug(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 Hd(){const t=ga();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ga(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||gn(t)}function ma(){return ga().code||y.step2Result||""}async function iv(){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 ov(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(ov(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"},Wd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,zd=/extends\s+State<\w+>/;function av(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=Wd.test(e),r=zd.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 qd(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function ya(t,e=new Map){return Vf(t,e)}const Co=new Map;function Vd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hn(t){Co.delete(Vd(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=tm(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(wm,{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 rm(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=Vd(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=Id(r.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);Co.set(s,r)}const n=await fm(r.pubspecYaml,e),i=Yg(r.pubspecYaml,n.overrides),o=Jg(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 lv(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=yd(t.content),a=jg(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${wd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:s}}function Gd(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=yd(i)[0],c=u?wd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(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:pg(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function cv(t){const e={};for(const s of ra(t))e[s]="";return e}function uv(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function dv(t,e,s,r=new Set,n=""){const i=[],o=Wd.test(e),a=zd.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=dv(n,i.content,i.type,r,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${n}: ${a}`))}if(n==="pubspec.yaml"){const o=Id(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 hv(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||av(e,t),h=qd(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),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const E=await Ea(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),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 pv(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=Gd(t,{artifactType:s,artifactName:r,fileName:n}),a=cv(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:qd(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),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const E=await Ea(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),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...uv(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 fv(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 b=_.errorMessage||_a(_.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 gv(t,e=[]){const s=Qo("architect");try{return await In("architect",Rd,Nf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function zn(t,e,s=[]){const r=Mf(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",Td,Lf(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 mv(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 vv(t){ze(parseInt(t.replace("step","")))}function ze(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),Yt();const 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 _v(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(Rd)}`),console.log(e!==t?`Step 2 (Code Generator): ${zt(t)} → ${zt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${zt(t)}`),console.log(`Step 3 (Code Review): ${zt(Td)}`)}async function yv(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(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=Of({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 wv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function bv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const 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});oh(),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 Uv())return;await Mv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,rv(),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 Ev(){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 Sv(){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 xv();return}const{artifactType:r,artifactName:n,fileName:i}=Hd(),o=Gd(t,{artifactType:r,artifactName:n,fileName:i}),a=lv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}Qd(o,a,null,null)}async function xv(){const t=await Ee("flutterflow"),e=await Ee("flutterflow_project_id");if(!t||!e){ue("FlutterFlow credentials not configured. Add your API Key and Project ID in settings.","warning"),ha();return}const 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};Qd(o,i,s.dependencies,s)}function kv(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=bd(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",()=>{Iv(t.error,e)}))}async function Iv(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=bd(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 Cv(){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 Fv(t){try{const e=await fetch(`${Je}/auth/send-magic-link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t})});if(!e.ok)throw new Error(`Failed to send magic link: HTTP ${e.status}`);return e.json()}catch(e){throw console.error("sendMagicLink failed:",{email:t,message:e.message,stack:e.stack}),e}}async function Pv(t){try{const 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 Av(t){try{const e=await fetch(`${Je}/auth/refresh-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionToken:t})});if(!e.ok)return console.error("refreshSession: non-OK response",{url:`${Je}/auth/refresh-session`,status:e.status}),null;const 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=Kd(),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 Kd(){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 $v(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Pv(e);bc(s,r)}catch(s){ue(s.message||"Sign-in link invalid or expired.","error")}}else{const{email:s,sessionToken:r}=Kd();if(s&&r){const n=await Av(r);n?bc(n.email,n.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Rv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Tv(){const t=document.getElementById("signin-email-input"),e=document.getElementById("signin-submit-btn"),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 Fv(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 Nv(){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 Jd(){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(xm,{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(Em,n.user_id),Ge.token&&sessionStorage.setItem(Sm,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 Mv(t=5e3){return Ge.resolved?Promise.resolve():(Pi||(Pi=Jd().catch(e=>{console.warn("ensureIdentityReady: identity resolution failed",e)})),Promise.race([Pi,new Promise(e=>setTimeout(e,t))]))}function Yd(){const t=At();try{const e=localStorage.getItem(Gt);return e?JSON.parse(e):{count:0,month:t}}catch(e){return console.warn("getUsageData: failed to parse usage storage",{key:Gt,month:t,err:e}),localStorage.removeItem(Gt),{count:0,month:t}}}function At(){const t=new Date;return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}`}function Vn(){const t=Yd();return t.month!==At()?{count:0,month:At()}:t}function Lv(){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 Ov(t){if(!t)return null;const e=String(t).toLowerCase().replace(/[^a-z0-9]+/g,"_");return e==="pro"||e==="professional_plan"?"professional":e==="power_developer"||e==="power_plan"?"power":Object.prototype.hasOwnProperty.call(yn,e)?e:null}function Dv(t){return t&&Object.entries(Pd).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function Bv(...t){return t.find(e=>e&&typeof e=="object")||{}}function jv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=Bv(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=Ov($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=km.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Dv(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 Uv(){if(G.isVerified&&(!Jt()||Fa())&&(await Zd({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 Hv(){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),$d()}),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=Yd(),s=e.month===At()?e.count??0:0,r=yn.free;t.textContent=`${s} / ${r} generations used`}async function Zd(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=jv(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 Wv(t){if(!G.isVerified||!G.sessionToken){Xd(),Ia();return}if(!Pd[t]){ue("Invalid plan selected.","error");return}const e=document.getElementById(`checkout-btn-${t}`);e&&(e.disabled=!0,e.textContent="Redirecting…");try{const 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:Nd()})})).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 zv(){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(bm,{method:"POST",headers:{"Content-Type":"application/json",...Ge.token?{Authorization:`Bearer ${Ge.token}`}:{}},signal:o.signal,body:JSON.stringify({user_id:Ge.userId,step:t,model:e,prompt: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=zf(c,t);if(d)throw d;if(console.log(`[BuildShip] ${t} response keys:`,Object.keys(c),"content type:",typeof c.content),!l.ok)throw new Error(`${c.message||c.error||"BuildShip pipeline error"} (HTTP ${l.status})`);if(t==="generator")if(c.usage_status==="success"&&Number.isFinite(c.usage_count)){const p=At();(c.usage_month||p)===p&&(localStorage.setItem(Gt,JSON.stringify({count:c.usage_count,month:p})),Xs())}else Lv(),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 qv(){const e=new URLSearchParams(window.location.search).get("checkout");e==="success"?(window.history.replaceState({},"",window.location.pathname),$a(),ue("Subscription active! Welcome aboard.","success")):e==="cancel"&&(window.history.replaceState({},"",window.location.pathname),ue("Checkout cancelled.","info"))}function 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"),Vv(r?e:null),Hv(),$d(),Xs()}function Vv(t){const e=["bg-gray-100","text-gray-500","cursor-default"];Object.entries({professional:{btnId:"checkout-btn-professional",defaultText:"Subscribe"},power:{btnId:"checkout-btn-power",defaultText:"Subscribe"}}).forEach(([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=Nd(),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"),Nm().then(()=>Ro())}function Xd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("pricing-modal");e&&e.classList.remove("open")}function ue(t,e="info"){const 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-"}),Gv(),await $v(),qv(),await Zd(),Gn(),Ro(),await iv(),ev();const t=document.getElementById("flutterflow-endpoint-select");if(t){const s=fr();t.value=s}jd(),Jd();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||th(),Sc(r)):(r===V.SUCCESS||r===V.ERROR)&&(Sc(r),setTimeout(Fn,1e3))})});function Gv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Kv(){const t=document.getElementById("welcome-video-player");t&&(t.addEventListener("click",Yt),document.addEventListener("keydown",Yt))}function Yt(){const t=document.getElementById("preview-frame-container"),e=document.getElementById("main-stage-container"),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),jd()}let Qs=null;async function Jv(){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 Yv(){return document.getElementById("confirm-project-select")?.value?.trim()||null}function Qd(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,Jv();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 eh(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("commit-confirm-modal");e&&e.classList.remove("open"),Qs=null}function Zv(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(),kv(t)}function Xv(){const t=document.getElementById("code-preview-content"),e=document.getElementById("code-preview-chevron");t.classList.contains("hidden")?(t.classList.remove("hidden"),e.style.transform="rotate(90deg)"):(t.classList.add("hidden"),e.style.transform="rotate(0deg)")}const Ec={prepare:{message:"Preparing your code...",start:4,end:14},validate:{message:"Checking FlutterFlow credentials...",start:14,end:22},project:{message:"Reading your FlutterFlow project...",start:22,end:40},provision:{message:"Creating custom classes in FlutterFlow...",start:40,end:82},package:{message:"Packaging files for upload...",start:82,end:88},push:{message:"Pushing to FlutterFlow...",start:88,end:97},done:{message:"Complete!",start:100,end:100}},Qv=[{after:0,text:"Starting a FlutterFlow build runner..."},{after:12,text:"Preparing the FlutterFlow AI workspace..."},{after:35,text:"Uploading your custom classes..."},{after:60,text:"FlutterFlow is applying the changes..."},{after:100,text:"Still working — this can take a couple of minutes..."}],be={sequence:[],phaseId:null,phaseStartedAt:null,timer:null,substatus:null,liveSubstatus:!1,start({withProvisioning:t=!1}={}){this.sequence=["prepare","validate","project"],t&&this.sequence.push("provision"),this.sequence.push("package","push","done");const e=document.getElementById("commit-progress-overlay");e&&e.classList.add("open"),this.set("prepare")},set(t,e=null){if(!(!Ec[t]||t===this.phaseId)){if(!this.sequence.includes(t)){const 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=Qv.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(e_(e)),sh(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 e_(t){const e=Math.floor(t);return e<60?`${e}s elapsed`:`${Math.floor(e/60)}m ${String(e%60).padStart(2,"0")}s elapsed`}function th(t){be.start(t)}function Fn(){be.stop()}function sh(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,sh(100,"Failed","Error occurred");return}const s=e[t];s&&be.set(s)}function t_(t){return t.bundlePlan?t.bundlePlan.fileEntries.some(e=>e.type===U.CODE_FILE):t.codeInfo?.codeType===U.CODE_FILE}async function s_(){if(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Yv(),eh(),th({withProvisioning:t_(t)}),t.bundlePlan){const o=await fv(t.bundlePlan,{pipelineResult:{step1Result:y.step1Result,selectedModel:document.getElementById("code-generator-model")?.value}});Zs=null,Fn(),o.success?To(o):No(o);return}const{codeInfo:e}=t,{artifactType:s,artifactName:r,fileName:n}=Hd(),i=await pv(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=vv;window.toggleSection=mv;window.selectWorkflowStep=ze;window.copyCode=_v;window.retryWithDifferentModel=Ev;window.openApiKeysModal=ha;window.closeApiKeysModal=Dd;window.closeWalkthroughModal=Km;window.openWalkthroughModal=Gm;window.advanceWalkthrough=pa;window.commitToFlutterFlow=hv;function r_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function n_(){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=r_;window.openModelSelector=n_;window.handlePromptImageSelect=Rm;window.removePromptImage=Tm;window.saveApiKeys=Zm;window.clearAllApiKeys=Xm;window.toggleKeyVisibility=sv;window.handleWelcomeVideoEnd=Kv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=Sv;window.updateFlutterFlowCredentialStatus=Cv;window.closeCommitConfirmModal=eh;window.closeCommitSuccessModal=Zv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=Xv;window.confirmCommitToFlutterFlow=s_;window.runRefinement=yv;window.regenerateFromPastedErrors=bv;window.clearErrorInput=wv;window.setFlutterFlowEndpoint=Vm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Rv;window.handleMagicLinkRequest=Tv;window.handleSignOut=Nv;window.startCheckout=Wv;window.openCustomerPortal=zv;window.openPricingModal=Cn;window.closePricingModal=Xd;let hs=null,rh=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"),rh=Date.now();for(let r=1;r<=3;r++){const n=document.getElementById(`pdot-${r}`);n&&(n.className="progress-dot")}nt(1),i_()}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()-rh)/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 nh(t){return{pass:"Passed review",warning:"Needs attention",fail:"Blocking issues"}[t]||"Needs attention"}function o_(){return Lg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function a_(t){return`
    - ${xs(t.severity)} + ${Ss(t.severity)}
    ${j(t.message)}
    ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} ${j(t.source)}
    - `}function d_(t){return` + `}function l_(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 c_(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 u_(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(a_).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(nh(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(l_).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 d_(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&&ih(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=o_(),o=ma();if(c_(i),d_(i),e&&(e.textContent=""),e){const a=Fd(o);e.innerHTML=a}s&&(s.innerHTML=u_(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 ih(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function h_(){y.resultsViewMode="summary",Ra()}function p_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function f_(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 g_(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function oh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=p_;window.selectArtifact=ih;window.selectResultsSummary=h_;window.submitResultsFeedback=f_;window.showErrorInputPanel=g_;window.hideErrorInputPanel=oh; diff --git a/dist/index.html b/dist/index.html index 21d5260..8c2cb06 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..beaaacf 100644 --- a/src/customCodeVerification.js +++ b/src/customCodeVerification.js @@ -76,16 +76,17 @@ function collect(declared, into, sdkPackages) { continue; } - // A block-form entry's first own-key says where the package comes from. - // `sdk:` is the Flutter SDK, which the runner reproduces from the name - // alone as `name: {sdk: flutter}`. A nested `version:` is simply a - // constraint written on its own line. + // A block-form entry's own keys say where the package comes from, in + // whatever order YAML allows. `sdk:` is the Flutter SDK, which the runner + // reproduces from the name alone as `name: {sdk: flutter}`. A mapping + // whose only own key is `version:` is a normal pub.dev dependency with + // its constraint written on its own line. if (info.sourceKey === "sdk") { sdkPackages.add(name); continue; } - if (info.sourceKey === "version") { - into[name] = unquoteConstraint(info.sourceValue); + if (info.sourceKey === null && info.version) { + into[name] = unquoteConstraint(info.version); continue; } diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 02e3d4b..8fb4789 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -119,6 +119,32 @@ test("a dependency from a git or path source is reported unrepresentable", () => assert.deepEqual(manifest.unrepresentable, ["private_thing"]); }); +test("a hosted source stays unrepresentable when version is written first", () => { + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + hosted_thing: + version: ^1.0.0 + hosted: + name: hosted_thing + url: https://example.invalid +`; + + const manifest = buildAnalysisManifest(pubspec); + + // YAML mappings are order-independent: reading only the first nested key + // classified this entry as a plain pub.dev dependency with constraint + // "^1.0.0", so the scratch manifest would resolve hosted_thing from pub.dev + // while the project ships it from its own host. + assert.deepEqual(manifest.unrepresentable, ["hosted_thing"]); + assert.equal("hosted_thing" in manifest.dependencies, false); +}); + test("a git dependency does not stop a class that never imports it", () => { const plan = planCustomCodeVerification( [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], diff --git a/src/pubspecSync.js b/src/pubspecSync.js index 1cdbbb9..52a69d3 100644 --- a/src/pubspecSync.js +++ b/src/pubspecSync.js @@ -103,52 +103,70 @@ function splitValueAndComment(rest) { }; } +// The keys that say where a block-form dependency comes from. `version` is +// deliberately absent: it is a constraint, not a source, so a mapping whose +// only own key is `version:` describes a normal pub.dev dependency. +const SOURCE_KEYS = new Set(["sdk", "git", "path", "hosted"]); + /** - * Reads the first key of a block-form dependency's own mapping. + * Reads where a block-form dependency comes from, scanning every key of its + * 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 - * `version:` written on its own line. That key is the only thing that - * distinguishes a package the Flutter SDK supplies from one the analysis - * manifest cannot reproduce, so it is read here rather than guessed from the - * package's name. A name list cannot work: it goes stale the moment the SDK - * ships a package the list has not heard of, and every project declaring that - * package then reads it as unreproducible. + * `version:` written on its own line. YAML mappings are unordered, so the + * source key can sit after `version:` or between any other keys — reading + * only the first key would classify a valid custom-hosted dependency whose + * `version:` happens to come first as a plain pub.dev one, and the + * verification runner would then compile against a different package source + * than the project ships. + * + * That key is the only thing that distinguishes a package the Flutter SDK + * supplies from one the analysis manifest cannot reproduce, so it is read + * here rather than guessed from the package's name. A name list cannot work: + * it goes stale the moment the SDK ships a package the list has not heard of, + * and every project declaring that package then reads it as unreproducible. * * @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|null, value: string|null, version: string|null}} + * The source directive's key and inline value — null when the mapping + * holds no sdk/git/path/hosted key — plus the entry's own `version:` value + * when one appears */ function readSourceDirective(lines, entryIndex, endIndex, parentIndent) { + let version = null; for (let i = entryIndex + 1; i < endIndex; i += 1) { const line = lines[i]; if (isBlankOrComment(line)) continue; // 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; + // a sibling dependency, so there is nothing of this entry's own left to read. + if (indentOf(line) <= parentIndent) break; const trimmed = line.trim(); const key = parseDependencyName(trimmed); if (!key) continue; const { value } = splitValueAndComment( trimmed.slice(trimmed.indexOf(":") + 1), ); - return { key, value }; + if (SOURCE_KEYS.has(key)) return { key, value, version }; + if (key === "version" && version === null) version = value; } - return null; + return { key: null, value: null, version }; } /** * 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`. + * A dependency written in block form (`sdk:`, `git:`, `path:`, a nested + * `hosted:`, or a `version:` on its own line) has no scalar constraint and + * must never be rewritten as one, so it is reported with `isScalar: false`. + * An entry whose own keys are only `version:` is a normal pub.dev dependency: + * `sourceKey` is null and the constraint travels in `version`. * * @param {string} yamlContent - Raw pubspec.yaml content - * @returns {Map} + * @returns {Map} */ export function parseExistingDependencies(yamlContent) { const lines = String(yamlContent || "").split("\n"); @@ -185,6 +203,7 @@ export function parseExistingDependencies(yamlContent) { isScalar, sourceKey: directive ? directive.key : null, sourceValue: directive ? directive.value : null, + version: directive ? directive.version : null, }); } return declared; @@ -206,7 +225,7 @@ export function parseExistingDependencies(yamlContent) { * * @param {string} yamlContent - Raw pubspec.yaml content * @param {string} blockName - Top-level key, e.g. "dependency_overrides" - * @returns {Map} + * @returns {Map} */ export function parseDependencyBlock(yamlContent, blockName) { const lines = String(yamlContent || "").split("\n"); @@ -243,6 +262,7 @@ export function parseDependencyBlock(yamlContent, blockName) { isScalar, sourceKey: directive ? directive.key : null, sourceValue: directive ? directive.value : null, + version: directive ? directive.version : null, }); } return declared; diff --git a/src/pubspecSync.test.js b/src/pubspecSync.test.js index 0499a77..a9b0e5b 100644 --- a/src/pubspecSync.test.js +++ b/src/pubspecSync.test.js @@ -210,8 +210,62 @@ test("a nested version block is read as a constraint, not as a source", () => { `; const declared = parseExistingDependencies(pubspec); - assert.equal(declared.get("intl").sourceKey, "version"); - assert.equal(declared.get("intl").sourceValue, "^0.20.3"); + // `version` is a constraint, not a source: with no sdk/git/path/hosted key + // present, the dependency is a normal pub.dev one. + assert.equal(declared.get("intl").sourceKey, null); + assert.equal(declared.get("intl").sourceValue, null); + assert.equal(declared.get("intl").version, "^0.20.3"); +}); + +test("a source key is classified wherever it sits among the nested keys", () => { + const pubspec = `dependencies: + hosted_thing: + version: ^1.0.0 + hosted: + name: hosted_thing + url: https://example.invalid + sdk_thing: + version: ^2.0.0 + sdk: flutter + git_thing: + version: ^3.0.0 + git: + url: https://example.invalid/private.git + path_thing: + version: ^4.0.0 + path: ../nearby +`; + const declared = parseExistingDependencies(pubspec); + + // YAML mappings are order-independent, so a `version:` written before the + // source directive must not hide it: reading only the first key classified + // this hosted dependency as a plain pub.dev one, and the verification + // runner compiled against a different package source than the project ships. + assert.equal(declared.get("hosted_thing").sourceKey, "hosted"); + assert.equal(declared.get("sdk_thing").sourceKey, "sdk"); + assert.equal(declared.get("sdk_thing").sourceValue, "flutter"); + assert.equal(declared.get("git_thing").sourceKey, "git"); + assert.equal(declared.get("path_thing").sourceKey, "path"); + assert.equal(declared.get("path_thing").sourceValue, "../nearby"); + + // The version line survives alongside the source key even though the + // source is what classifies the entry. + assert.equal(declared.get("hosted_thing").version, "^1.0.0"); +}); + +test("a version written before an unrecognized key does not invent a source", () => { + const pubspec = `dependencies: + odd_thing: + version: ^5.0.0 + description: not a real pubspec key +`; + const declared = parseExistingDependencies(pubspec); + + // Keys that are neither sources nor `version` are skipped without ending + // the scan, so a source below them is still found and a missing one still + // reads as null. + assert.equal(declared.get("odd_thing").sourceKey, null); + assert.equal(declared.get("odd_thing").version, "^5.0.0"); }); test("a git source keeps only its first key, whatever the nested shape", () => { From 2670d793ca1ea673c4caaa66cdd6e0813388bf49 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:21:23 +1000 Subject: [PATCH 07/15] fix: skip verification conservatively when an unrepresentable source can reach a class transitively (cherry picked from commit 9d338ad4fbcc7a06f63b12fd6ef702552ca80620) --- .../{index-DheZmoMN.js => index-BnJVlbD-.js} | 100 +++++++++--------- dist/index.html | 2 +- src/customCodeVerification.js | 65 +++++++++--- src/customCodeVerification.test.js | 95 +++++++++++++---- 4 files changed, 177 insertions(+), 85 deletions(-) rename dist/assets/{index-DheZmoMN.js => index-BnJVlbD-.js} (87%) diff --git a/dist/assets/index-DheZmoMN.js b/dist/assets/index-BnJVlbD-.js similarity index 87% rename from dist/assets/index-DheZmoMN.js rename to dist/assets/index-BnJVlbD-.js index 7722dbb..169da47 100644 --- a/dist/assets/index-DheZmoMN.js +++ b/dist/assets/index-BnJVlbD-.js @@ -1,7 +1,7 @@ -(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,ah=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 w(){return w=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var s=arguments[e];for(var r in s)({}).hasOwnProperty.call(s,r)&&(t[r]=s[r])}return t},w.apply(null,arguments)}function Ic(t,e){if(t==null)return{};var s={};for(var r in t)if({}.hasOwnProperty.call(t,r)){if(e.indexOf(r)!==-1)continue;s[r]=t[r]}return s}var Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fs,lh=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),ch=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],uh=["token"],Cc="NativeGzipValidationError",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},dh=(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 dh(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 hh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var s=t.toLowerCase();return hh.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]",ph=t=>t instanceof FormData,fh=t=>M(ch,t),gh=t=>M(uh,t);function $c(t){return t===null||typeof t!="object"}function 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 mh=[!0,"true",1,"1","yes"],Zn=t=>M(mh,t),vh=[!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 _h{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",yh=Vt+" OS",jc=Vt+" "+Vr,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",wh=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",bh=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),Eh=new RegExp(ds,"i"),Sh=new RegExp(tr+" \\w+","i"),xh=new RegExp(er+" \\w+","i"),jo=new RegExp(fs+"|PlayBook|BB10","i"),kh={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Xc=function(t,e,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")?wh: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:"")},Ih={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[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)]},Ch=function(t,e,s,r){var n=Xc(t,e,s,r),i=Ih[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=kh[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/,[yh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return xh.test(t)?er:Sh.test(t)?tr:Eh.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)?bh:new RegExp(ps,"i").test(t)&&!new RegExp(ps+" pc","i").test(t)?Gc:""},Fh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(s=t)=="string"&&Fh.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 Ph=t=>t instanceof Error,eu={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Ah=eu.info;function tu(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(L(t))return{arrayValue:{values:t.map((e=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function 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 $h(t,e){var s=eu[t.level||"info"]||Ah,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:Yr(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function su(t,e,s){return w({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":s})}function ru(t,e,s,r){return{resourceLogs:[{resource:{attributes:Yr(e)},scopeLogs:[{scope:{name:s,version:r},logRecords:t}]}]}}let Rh=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:$h(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 Th=class{constructor(t,e,s){this._instance=t,this.Ne=e,this.rt=s,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,s){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:s?.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=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 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: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=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=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 Nh(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 Mh{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:Nh(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 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]},Lh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Oh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Dh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Bh=(t,e)=>{var s=Lh.exec(t);if(s)return ji(e,s[1],gs,+s[2],+s[3]);var r=Oh.exec(t);if(r){if(r[2]&&r[2].indexOf("eval")===0){var n=Dh.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)}},jh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Uh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Hh=(t,e)=>{var s=jh.exec(t);if(s){if(s[3]&&s[3].indexOf(" > eval")>-1){var r=Uh.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 Wh{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 zh{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 qh{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 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 Vh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Gh{match(e){return typeof e=="string"}coerce(e,s){var r,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(Vh);return n&&(s=n[1],r=n[2]),[s,r]}}var Kh=["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 Jh{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)&&Kh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var s in e)if({}.hasOwnProperty.call(e,s)){var r=e[s];if(Ph(r))return r}}getObjectClassName(e){try{var s=Object.getPrototypeOf(e);return s?s.constructor.name:void 0}catch{return}}}class Yh{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 Zh{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 Xh{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",Qh=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:tp(t.max_bytes,ti.max_bytes)}:w({},ti)}class ep{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 tp(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,sp=se("[ExternalScriptsLoader]"),si=(t,e,s)=>{if(t.config.disable_external_dependency_loading)return sp.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(ph(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}},rp=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},np=["herokuapp.com","vercel.app","netlify.app"];function ip(t){var e=t?.hostname;if(!W(e))return!1;var s=e.split(".").slice(-2).join(".");for(var r of np)if(s===r)return!1;return!0}function 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 op{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 ap}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class ap{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>lp().toString(),lp=()=>(tl||(tl=new op)).generate(),Ps="",cp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,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),b="dmn_chk_"+dt();!Ps&&_--;){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",Ps=E)}return Ps})(c);if(!h){var p=(f=>{var g=f.match(cp);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)}}},up=[sr,"distinct_id",ls,zo,rn,sn,He],Sr={},dp={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 hp{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ht}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,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(vh,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__",pp=1,fp=3,gp=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===pp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===fp}function Eu(t){return!!t&&t.nodeType===gp&&Ft(t.host)}var Su=1e3;function Go(t){return t?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 mp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],vp=[...Iu,"+","-","−","–"],nl=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,il=[".ph-no-rageclick",".ph-no-capture"],_p=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var 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(_p,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>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,yp=[16,15,14,13],wp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function bp(t){for(var e=0,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 yp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&bp(d))return!0}}}return!1})(t);if(s)return!1;var r=e?wp.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 Ep(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xr=se("[Dead Clicks]"),Sp=()=>!0,xp=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)?w({},this.instance.config.capture_dead_clicks):{};s.__onCapture=this.onCapture,this.onCapture&&(s.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,s),this.si.start(C),xr.info("starting...")}}else xr.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xr.info("stopping..."))}}var 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 _,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 kp{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"],Ip={[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"}},Cp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ip[t];if(e)return e;for(var s of Cp){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"],Fp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...vs],ir="",Pp=["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(Pp,(function(a){var l=vu(a);r[a]=l||null})),r);return ee(o,i)}function Mu(t,e){var s=Fp.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 Ap(){try{return new Date().getTimezoneOffset()}catch{return}}var $p={flags:Gs,surveys:tn},Rp=["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,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){Rp.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=[...up,...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=dp: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=$p[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"},Tp={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=se("[RateLimiter]");class Np{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 Mp=Js(Kt,9),Lp=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 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]},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),b=_[0],E=_[1],I=wl(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=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,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[_l[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=Mp,J=Kt,z=Lp,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]},Op=new _s([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Dp=(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 Bp(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=Dp[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=lo(E,I,d.subarray(F,P)):(E[F]=!0,I=lo(E,I,d.subarray(F,_)))}else{for(var B=Op[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,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,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,E,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(b,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 jp=!!$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=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},gi=t=>{if(t.Ji)return t.Ji;var e=t.data,s=t.compression;if(e){if(s===xe.GZipJS){var r=Bp((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(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(w({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gi(w({},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}))}},Up=(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 w({},e,{Ji:{contentType:Gu,body:n,estimatedSize:n.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Hp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Hp.test(t?.message||""),Xu=t=>{var e=Yu(t);if(e){var 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,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)}}},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:w({},t.data,{batch:h});return co(w({},t,{data:d(u.slice(0,c))})),void co(w({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(w({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,s,r)=>{var n=r==="query"?e==="POST"?"sent_at":"_":void 0;return $n(s===xe.GZipJS?Ku(t,"compression"):t,w({},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 Wp{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(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 zp=["retriesPerformedSoFar"];class qp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},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,zp);lt(s)&&(r.url=$n(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 Vp{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 Gp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,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||Gp,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 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 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",Kp=/^\/static\//;class Jp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,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(Kp.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)}},Yp=[di.Popover,di.Widget,di.API],Zp={ignoreConditions:!1,ignoreDelay:!1,displayType:io.Popover},Xp=se("[PostHog ExternalIntegrations]"),Qp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class ef{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 Xp.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(Qp[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var r of Object.entries((n=this._instance.config.integrations)!==null&&n!==void 0?n:{})){var n;s()}}}class tf{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 sf{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 rf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new sf(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 tf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(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: ",nf=["token","distinct_id",pu],os="posthog",ad=!jp&&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:ip(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:vp,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))},of=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Pl=t=>{var e={};for(var s of of){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 af{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,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 af,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_i(),this.SentryIntegration=kp,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 Vp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Np(this),this.requestRouter=new Jp(this),this.consent=new hp(this),this.externalIntegrations=new ef(this);var 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(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 Wp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new qp(this),this.__request_queue=[];var g=this.gn();if(g||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,B,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(g)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(g)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:s,thisC:w({},this.config),p,s:f}),!this.config.identity_distinct_id||(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===es)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: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=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,xp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,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=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=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 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(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&ah&&typeof Promise<"u"&&!Dr?Up(o).then((m=>{g(m)})).catch((m=>{if(Ha(m))return Dr=!0,void g(w({},o,{compression:void 0,url:El(s.url,s.method,void 0,s.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var b="name"in _?String(_.name):"";return Ha(_)||b===Cc})(m)&&(Dr=!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){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 _,b,E,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 lh.forEach(z),O.forEach(z),J})(f.properties,nf)),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=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,{[hi.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Tp.SHOWN){var B=s?.[ml.TOUR_TYPE];B&&(f.$set=w({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+B]:new Date().toISOString()}))}var S=w({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(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 rf(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[pu]=!0),e==="$snapshot"){var l=w({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||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:Ap()}),{$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:Ch(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(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 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(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var E=this.config.sanitize_properties;E&&(k.error(Fl),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(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=Zp),(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:w({},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 b=this.config.get_device_id(dt());this.register_once({distinct_id:b,$device_id:e?b: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=w({},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(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: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(gh),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 fh(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]]=rp(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 lf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function cf(t,e){var 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=[],_={},b=!1,E=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");b=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(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};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=lf(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)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),b){var I,F;m[0].attr__href=b;var P=(I=cn(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 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:Ep(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=()=>{},uf=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),df=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))},hf=["$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 pf{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 ff{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 pf(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(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 gf extends ff{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.",mf=v!=null&&v.location?un(v.location.hash,"__posthog")||un(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=se("[Toolbar]"),Bl=se("[FeatureFlags]");class vf{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",_f={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||_f[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var 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 vf(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=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(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=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: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=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: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:w({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(e.deviceId)||(s.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(s.disable_flags=!0);var r=this.Na();r.length&&(s.evaluation_contexts=r);var 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,_,b,E,I,F,P,B;L(c[t])?c[t].push(a):c[t]=[a],this.F(w({[Wt]:c},s?{[zs]:s}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Lr))!==null&&f!==void 0?f:[]];x(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,[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?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{[Us]:h,[Bt]:m,[en]:!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({[Us]:Object.keys(Wl(b)),[Bt]:b||{},[Hs]:E||{},[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=w({},this.getFlagVariants(),{[t]:e});this.F({[Us]:Object.keys(Wl(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(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]: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}}},yf={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===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]: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===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))}}},wf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,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 b=p.dom_event_allowlist;if(b&&!b.some((S=>h.type===S)))return!1}var E=Cu(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)||!ro(F,p?.css_selector_allowlist)||ro(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:mp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var 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=cf(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;df.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var 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,Sp,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(w({},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",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[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")}}},bf={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 _h(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:Ms})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=w({},e,t):(x(t)?this.Ko:t)&&(e=w({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Ms.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,s;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,"exception-autocapture",(r=>{if(r)return Ms.error("failed to load script",r);t()}))}Qo(){var t,e,s;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(s=this.Go)==null||s.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[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 Mh([new Wh,new Xh,new qh,new zh,new Yh,new Jh,new Gh,new Zh],(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((b=>{return w({},b,{filename:b.filename||(E=_,E[E.length-1]||{}).filename,function:b.function||gs});var E}))})(u)}})("web:javascript",Bh,Hh)),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 ep(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)=>Qh.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({[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:w({},t,{$exception_steps:e})}catch(s){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",s),t}}ll(t){this.el.enabled&&this.rl.add({[Zr]:t,[Xr]:new Date().toISOString()})}sl(t){return te(t)?w({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((s,r)=>{var 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)}}},Ef=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({[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),Sf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var 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({},Ic(t,hf),{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(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.')}}}},xf={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 uf.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()}}},kf=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(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 gf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var 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(Yp.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!==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),If={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,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=mf||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=w({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},s?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(w({},r,{source:void 0}))),this.Vl()===2)this.Zl(r);else if(this.Vl()===0){var 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)}}},Cf=w({experiments:ye},Rn),Ff={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;D(e)||(Ke(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||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()}}},Pf={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(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,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 Rh(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}}},Af={metrics:class{constructor(t){this.rt=se("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,s=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===s||((e=this.ou)==null||e.reset(),this.cu=s,this.ou=new Th(this.hu(),(function(r){var 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)}}},$f=w({},Rn,yf,wf,bf,Ef,Sf,kf,xf,If,Cf,Ff,Pf,Af);Te.__defaultExtensionClasses=w({},$f);(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",Rf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function fo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Tf(t={},e=0){const 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)||Tf({...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||Rf[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 Nf(t){return ys({task:"architect",userRequest:String(t??"")})}function Mf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?ys(e):ys({task:"generate_bundle",bundleSpec:e})}function Lf(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 Of({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"},Df=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Bf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function gd(t,e=0){if(!Le(t)||e>3)return null;if(Bf(t))return t;for(const s of Df){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 jf(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 Uf(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 Hf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function Wf(t){const e=gd(t);if(!e)return null;const s=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);jf(e.filterSummary,s),Uf(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 zf(t,e){const s=Wf(t);if(!s)return null;const r=[...new Set(s.matchedFilters.map(Hf))],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 qf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,s=[];for(const r of qf(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 Vf(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 Gf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Kf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Jf=["Struct","Record"],Yf=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>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; } +(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),w="dmn_chk_"+dt();!Ps&&_--;){var E=m.slice(_).join("."),I=w+"=1;domain=."+E+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(w)&&(g.cookie=I+";max-age=0",Ps=E)}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 _,w=((d=c.exception)==null?void 0:d.values)||[],E=w.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=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:E,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=w[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&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 w=i[r].s;if(e>=p[w])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]},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),w=_[0],E=_[1],I=wl(g),F=I[0],P=I[1],B=new Ae(19),S=0;w.length>S;++S)B[31&w[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,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[_l[S]]);c+=3*T;for(var Ce=[w,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=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,w=new qe(f+_+5*(1+Math.floor(_/7e3))+g),E=w.subarray(f,w.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(E,I,d.subarray(F,P)):(E[F]=!0,I=lo(E,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,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,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,E,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(w,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 w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((E=>E(i,l,w))),{sessionId:i,windowId:l,sessionStartTimestamp:_,changeReason:c?w:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Qu=function(t,e){if(!t)return!1;var 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(),w=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===es)this.identify(m);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var E=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?E: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((w=>b({},w,{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 w=0;m.length>w;w++)if(m[w].transport===h)return m[w]})(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 w="name"in _?String(_.name):"";return Ha(_)||w===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 _,w,E,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},w=e===ft.SENT?"responded":"dismissed",E="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(E="$survey_"+w+"/"+_.id+"/"+_.current_iteration),E)]:!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 w of this._n.slice())try{ee(_,w())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,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 E=this.config.sanitize_properties;E&&(k.error(Fl),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(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 w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w: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=[],_={},w=!1,E=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");w=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(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};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)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),w){var I,F;m[0].attr__href=w;var P=(I=cn(w))==null?void 0:I.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=w)}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,_,w,E,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||(w=S.metadata)==null?void 0:w.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,[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 w=h,E=p,I=d;if(l!=null&&l.partialResponse)w=b({},i,w),E=b({},o,E),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)})));w=b({},i,Object.fromEntries(Object.entries(w).filter((P=>F.has(P[0]))))),E=b({},o,Object.fromEntries(Object.entries(E||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else w=b({},i,w),E=b({},o,E),I=b({},a,I);return b({[Us]:Object.keys(Wl(w)),[Bt]:w||{},[Hs]:E||{},[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 w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var E=Cu(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)||!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((w=>{return b({},w,{filename:w.filename||(E=_,E[E.length-1]||{}).filename,function:w.function||gs});var E}))})(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,_,w)=>{if(m!=null&&m[_]){var E=m[_];m[_]=w(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 w=f(_);return w?m.call(this,w):_})),p(u,"insertBefore",(m=>function(_,w){var E=f(_);return E?m.call(this,E,w):_})),p(u,"replaceChild",(m=>function(_,w){var E=f(_);return E?m.call(this,E,w):w})),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"prepend",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>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 w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"after",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"replaceWith",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>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(_,w){var E=f(w);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(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,w=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:w,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; @@ -25,44 +25,44 @@ class _S extends State { @override Widget build(BuildContext c) => const Size @override _S createState() => _S(); } class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function 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 Xf(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;nQf(t).usable);function tg(t=""){const e=ar(t);return eg.filter(s=>s.detect(e)).map(({id:s,severity:r,message:n})=>({id:s,severity:r,message:n}))}function sg(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=Zf(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 rg(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 ng(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 ig(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 og(t="",e=""){return ta(t,e)!==null}function ag(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(r=>Kf.has(r)?!1:!Jf.some(i=>r.endsWith(i))||e.has(r))}function lg(t,{functionName:e="",declaredTypes:s=new Set}={}){const r=rg(t,e),n=ag(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 cg(t,e={}){const s=[],r=t.fileName||"",n=t.code||"";if(Gf.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 tg(n))s.push(Qe(t,i.severity,i.message))}if(t.artifactType==="CustomAction"&&!og(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=lg(n,{functionName:t.artifactName,declaredTypes:i});o&&s.push(Qe(t,"error",o));const a=ig(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=ng(r,n);i&&s.push(Qe(t,"info",i))}return s}function ug(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],s=new Set(e.flatMap(i=>Tn(i.code||""))),r=e.flatMap(i=>cg(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 dg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const hg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function pg(t="",e=""){const s=dg(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:!hg.test(i)}).join(` -`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+n}const fg=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} +`;)s++;e+=" "}else if(r==="/*"){for(s+=2;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 _d(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=>_d(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=>_d(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(E=>Object.keys(E).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((E,I)=>Ng(s,a,E,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(E=>E.manualSteps)].filter((E,I,F)=>F.findIndex(P=>P.title===E.title&&P.artifactId===E.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(E=>E.severity),...l.map(E=>E.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}),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 Og=/^\uFEFF/;function Os(t){let e=0,s=t.length;for(;ee&&!t[s-1].trim();)s--;return t.slice(e,s).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(E=>Object.keys(E).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((E,I)=>Ng(s,a,E,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(E=>E.manualSteps)].filter((E,I,F)=>F.findIndex(P=>P.title===E.title&&P.artifactId===E.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(E=>E.severity),...l.map(E=>E.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}),w=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:w,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 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 yd(t){const e=Bg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),s=>s[1])}function wd(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===` +`)}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 Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const n=s.split(` -`),i=new Set(Sd(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(` +`){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 Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const 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 Yg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:s,overridden:[],skipped:[]};const 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}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:n.join(` -`),overridden:o,skipped:a}}function Id(t){const e=String(t||""),s=[];return e.trim()?(/^name:\s*\S+/m.test(e)||s.push("pubspec.yaml missing name field"),oa(e.split(` -`))||s.push("pubspec.yaml missing dependencies section"),Sd(e).includes("flutter")||s.push("pubspec.yaml missing Flutter SDK dependency"),{valid:s.length===0,errors:s}):(s.push("pubspec.yaml is empty"),{valid:!1,errors:s})}const Zg=">=3.0.0 <4.0.0";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 Xg(t=""){const e=gg(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===null&&i.version){e[n]=bo(i.version);continue}r.push(n)}return r}function Qg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e);n.push(...ac(Gg(t,"dependency_overrides"),r,e));const i=new Set([...Object.keys(s),...e]),{sdk:o}=xd(t);return{sdkConstraint:bo(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:i,unrepresentable:n}}function em(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 tm(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},u=[],c=[];for(const d of t){const{className:h,content:p}=d,f=ra(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}=Xg(p),_=f.filter(b=>!o.has(b));if(m.length>0||_.length>0){c.push({className:h,reason:em(h,m,_)});continue}u.push({fileName:`${sa(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}function lc(t,e){const s=`${t}${e}`.split(` -`),r=s.pop()??"",n=[];for(const i of s){const o=Cd(i);o&&n.push(o)}return{events:n,buffer:r}}function sm(t){const e=Cd(t);return e?[e]:[]}function Cd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function rm(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 sm(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 nm=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(nm);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function im(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 am(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:am(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const 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 lm(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 cm="https://pub.dev/api/packages/",um=8e3;function dm(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||om(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 hm(t,e={}){const{dartSdkFloor:s=null,flutterSdkFloor:r=null,fetchImpl:n=fetch}=e;let i;try{const a=await n(`${cm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(um)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};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=dm(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 pm(t,e={}){const s=await Promise.all(t.map(r=>hm(r,e)));return new Map(s.map(({name:r,...n})=>[r,n]))}async function fm(t,e={},s={}){const{resolveVersions:r=pm}=s,n=Object.entries(e).filter(([c])=>c&&c!=="flutter"),i=xd(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(lm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await 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 gm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>gm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function mm(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 vm(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 _m(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 ym(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function 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 Fd(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=ym(o),u=Fd(o.trim(),l,s);r+=`
    +`),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 Zg=">=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 Xg(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===null&&i.version){e[n]=bo(i.version);continue}r.push(n)}return r}function Qg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e);n.push(...ac(Gg(t,"dependency_overrides"),r,e));const i=new Set([...Object.keys(s),...e]),{sdk:o}=kd(t);return{sdkConstraint:bo(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:i,unrepresentable:n}}function em(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 tm(t,e){return`${t} was not compiled before deploying: your project declares ${e.join(", ")} from a source that cannot be reproduced outside it, and whether the packages ${t} imports depend on one of them transitively cannot be checked before the deploy, so package resolution could not be matched exactly.`}function sm(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},u=[],c=[];for(const d of t){const{className:h,content:p}=d,f=ra(p),g=f.filter(w=>a.includes(w));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}=Xg(p),_=f.filter(w=>!o.has(w));if(m.length>0||_.length>0){c.push({className:h,reason:em(h,m,_)});continue}if(a.length>0&&_d(p).some(w=>w.startsWith("package:"))){c.push({className:h,reason:tm(h,a)});continue}u.push({fileName:`${sa(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}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 rm(t){const e=Fd(t);return e?[e]:[]}function Fd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function 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=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 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 aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:lm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const s={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let 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 cm(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 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&&!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 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=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(cm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ns(p)){a.additions[d]=`^${ns(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ns(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const mm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>mm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function vm(t,e={}){const s=t?.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function _m(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function ym(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function wm(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function 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=wm(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+=`

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

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

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

    `;continue}if(/^[-*+]\s+/.test(a)||/^\d+\.\s+/.test(a)){const l=a.replace(/^([-*+]|\d+\.)\s+/,"").trim();r+=`
    @@ -76,14 +76,14 @@ ${d}`,{commentAndStringRanges:g}=wo(f),m=p.length+1+h;if(ic(m,g)){l.push(d);cont
    ${r}
    - `}const wm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";const Je="https://4tgke4.buildship.run",Pd={professional:"price_1T2ldCKszA2slvDXatdeCpbI",power:"price_1T2le9KszA2slvDXR4mPvw7M"},_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 bm=`${Je}/service/runpipeline`,Em="bs_user_id",Sm="bs_identity_token",xm=`${Je}/authUserCheck`;let Ge={userId:null,token:null,status:null,resolved:!1};const yn={free:2,professional:50,power:2e3},wn="ccc_subscription",hc=3,km=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"],Im={"google/gemini-3.7-flash":"Gemini 3.7 Flash","anthropic/claude-opus-5":"Claude Opus 5","openai/gpt-5.6-sol":"GPT-5.6 Sol","z-ai/glm-5.2":"GLM 5.2","moonshotai/kimi-k3":"Kimi K3","openrouter/auto-beta":"OpenRouter: Auto Router","openrouter/free":"OpenRouter: Free Models","openrouter/deepseek/deepseek-v4-pro":"DeepSeek v4 Pro"};function zt(t){return Im[t]||t}const Cm=new Set(["google/gemini-3.7-flash","anthropic/claude-opus-5","openai/gpt-5.6-sol","z-ai/glm-5.2","moonshotai/kimi-k3","openrouter/auto-beta"]);function Ad(t){return Cm.has(t)}const Eo=4,Ci=8*1024*1024,Fm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Pm(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function Am(t){const e=new FormData;return e.append("file",t),(await fetch(Fm,{method:"POST",body:e})).json()}function $m(t){if(Array.isArray(t)){const e=t[0];if(e&&typeof e=="object")for(const 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 Rm(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 Pm(l);if(!u)return null;let c="";try{c=$m(await Am(l))}catch{c=""}return{dataUrl:u,name:l.name,url:c}}),a=(await Promise.all(o)).filter(Boolean);t.target.value="",!(a.length&&!Ad(document.getElementById("code-generator-model")?.value))&&(Pt.push(...a),r.length>n&&ue(`You can attach up to ${Eo} images.`,"info"),la())}function Tm(t){Pt.splice(t,1),la()}function la(){const t=document.getElementById("prompt-image-thumbnails"),e=document.getElementById("prompt-image-btn-label");t&&(t.innerHTML="",Pt.forEach((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 $d(){const t=document.getElementById("prompt-image-upload");if(!t)return;const e=document.getElementById("code-generator-model"),s=Ad(e?.value);t.classList.toggle("hidden",!s),!s&&Pt.length&&(Pt=[],la())}const Gt="ccc_usage",Rd="google/gemini-3.7-flash",Td="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 Nm(){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 Nd(){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",Mm="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 Md(){return localStorage.getItem(ur)||""}function Io(){return crypto.randomUUID?.()||Od(crypto.getRandomValues(new Uint8Array(16)))}function Lm(){const t=Md();if(t)return t;const e=Io();return localStorage.setItem(ur,e),e}function Es(){ko=null,En=null,dr=!1,Sn=!1}window.addEventListener("storage",t=>{t.key===ur&&Es()});function Om(){return new Promise((t,e)=>{const s=indexedDB.open(Mm,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 Om();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 Dm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function Bm(){const t=await ca("readonly",e=>e.get(it));return Dm(t)?t:null}async function Ld(t){await ca("readwrite",e=>e.put(t,it))}async function jm(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Um(){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 Ld(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 Hm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await Bm();if(e)return e;const s=await Um();if(s)return s;const r=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!1,["encrypt","decrypt"]);return await Ld(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=Lm();En!==s&&Es();const r=ko||Hm(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function Wm(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:Od(o),keyVersion:s,sessionFallback:dr}}async function zm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=qm(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 Od(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"),Ym(),Zt()}function ha(){document.getElementById("api-keys-modal").classList.add("open"),fa(),hr&&Ud(hr)}function Dd(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("api-keys-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-modal");s&&(pa(),s.classList.add("open"))}let Et=1;function Bd(){const t=document.querySelector(".wt-steps");return t?Array.from(t.querySelectorAll(".wt-step-card")):[]}function Dn(){const t=Bd();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 Gm(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Km(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("walkthrough-modal");e&&e.classList.remove("open");const s=document.getElementById("walkthrough-dont-show");s&&s.checked&&localStorage.setItem("hasSeenWalkthrough","true")}function jd(){if(G.isVerified&&Jt()&&fe.tier!=="free")return;if(!localStorage.getItem("hasSeenWalkthrough")){const e=document.getElementById("walkthrough-modal");e&&(Et=1,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",Jm()}function Jm(){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 Ym(){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 Zm(){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"),Dd()},1e3)}async function Xm(){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 jm(),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 Qm(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function ev(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;Qm("flutterflow-api-key-input",s)}),t.addEventListener("blur",tv(async e=>{const s=e.target.value.trim();s&&await Ud(s)},500)))}function tv(t,e){let s;return function(...n){const i=()=>{clearTimeout(s),t(...n)};clearTimeout(s),s=setTimeout(i,e)}}async function Ud(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 sv(t){const e=document.getElementById(t),r=e.nextElementSibling.querySelector("svg");e.type==="password"?(e.type="text",r.innerHTML=` + `}const bm="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 Em=`${Je}/service/runpipeline`,Sm="bs_user_id",xm="bs_identity_token",km=`${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,Im=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"],Cm={"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 Cm[t]||t}const Fm=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 Fm.has(t)}const Eo=4,Ci=8*1024*1024,Pm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Am(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function $m(t){const e=new FormData;return e.append("file",t),(await fetch(Pm,{method:"POST",body:e})).json()}function Rm(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 Tm(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 Am(l);if(!u)return null;let c="";try{c=Rm(await $m(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 Nm(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 Mm(){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",Lm="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 Om(){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 Dm(){return new Promise((t,e)=>{const s=indexedDB.open(Lm,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 Dm();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 Bm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function jm(){const t=await ca("readonly",e=>e.get(it));return Bm(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,it))}async function Um(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Hm(){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 Wm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await jm();if(e)return e;const s=await Hm();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=Om();En!==s&&Es();const r=ko||Wm(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function zm(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 qm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=Vm(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"),Zm(),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 Km(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Jm(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",Ym()}function Ym(){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 Zm(){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 Xm(){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 Qm(){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 Um(),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 ev(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function tv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;ev("flutterflow-api-key-input",s)}),t.addEventListener("blur",sv(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function sv(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 rv(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 rv(){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 nv(){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=ug(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 Hd(){const t=ga();return{artifactType:t.artifactType||"CustomWidget",artifactName:t.artifactName||"GeneratedWidget",fileName:t.fileName||""}}function ga(){const t=y.artifactBundle||y.bundleSpec||null;return(Array.isArray(t?.artifacts)?t.artifacts:[]).find(s=>s.id===y.selectedArtifactId)||gn(t)}function ma(){return ga().code||y.step2Result||""}async function iv(){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 ov(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(ov(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"},Wd=/class\s+\w+\s+extends\s+(?:StatelessWidget|StatefulWidget)\b/,zd=/extends\s+State<\w+>/;function av(t,e=""){if(t==="pubspec.yaml")return U.DEPENDENCIES;if(!t.endsWith(".dart")||t.endsWith("index.dart"))return U.OTHER;if(t==="custom_functions.dart")return U.FUNCTION;if(e){const s=Wd.test(e),r=zd.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 qd(t,e){switch(e){case U.ACTION:return`lib/custom_code/actions/${t}`;case U.WIDGET:return`lib/custom_code/widgets/${t}`;case U.FUNCTION:return"lib/flutter_flow/custom_functions.dart";case U.CODE_FILE:return`lib/custom_code/${t}`;case U.DEPENDENCIES:return"pubspec.yaml";case U.OTHER:return`lib/custom_code/${t}`;default:return t}}async function ya(t,e=new Map){return Vf(t,e)}const Co=new Map;function Vd(t){return`${t.baseUrl}|${t.projectId}|${t.branchName}`}function Hn(t){Co.delete(Vd(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=tm(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(wm,{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 rm(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=Vd(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=Id(r.pubspecYaml);if(!a.valid)throw new Error(`Your project's pubspec.yaml could not be read reliably (${a.errors.join("; ")}). Deploy was stopped so your existing package dependencies aren't overwritten.`);Co.set(s,r)}const n=await fm(r.pubspecYaml,e),i=Yg(r.pubspecYaml,n.overrides),o=Jg(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 lv(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=yd(t.content),a=jg(t.fileName);if(o.length===0)e.push("No public widget class found (must extend StatelessWidget or StatefulWidget).");else if(!o.includes(a)){const l=`${wd(o[0])}`;e.push(`Widget class name "${o[0]}" does not match the file name "${t.fileName}". FlutterFlow derives the widget from the file name, so it will report "No widget ${a} found". Rename the file to "${l}" or the class to match before committing.`)}}return{canProceed:e.length===0,issues:e,warnings:s}}function Gd(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=yd(i)[0],c=u?wd(u):null;c&&o!==c?(console.warn(`Commit file name "${o}" does not match declared widget class "${u}"; renaming to "${c}" so FlutterFlow can find the widget.`),o=c):o.endsWith(".dart")||(o+=".dart")}else o.endsWith(".dart")||(o+=".dart");let a=U.CODE_FILE;switch(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 nv(){y.step1Result=null,y.step2Result=null,y.step3Result=null,y.bundleSpec=null,y.artifactBundle=null,y.bundleReview=null,y.selectedArtifactId=null,y.resultsViewMode="summary"}function iv(){y.bundleSpec=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 ov(){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 av(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(av(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 lv(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=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 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 gm(r.pubspecYaml,e),i=Yg(r.pubspecYaml,n.overrides),o=Jg(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 cv(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:pg(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function cv(t){const e={};for(const s of ra(t))e[s]="";return e}function uv(t,e={}){return{timestamp:new Date().toISOString(),artifactType:t.artifactType,artifactName:t.artifactName,codeType:t.codeType,fileName:t.fileName,generatedFrom:e.step1Result?"pipeline":"direct",model:e.selectedModel||"unknown",codeSize:t.content.length}}function dv(t,e,s,r=new Set,n=""){const i=[],o=Wd.test(e),a=zd.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=dv(n,i.content,i.type,r,i.artifactName);o.valid||e.push(...o.errors.map(a=>`${n}: ${a}`))}if(n==="pubspec.yaml"){const o=Id(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 hv(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||av(e,t),h=qd(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: +`),{content:fg(i,l),fileName:o,codeType:a,artifactType:s,artifactName:r}}function uv(t){const e={};for(const s of ra(t))e[s]="";return e}function dv(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 hv(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=hv(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 pv(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||lv(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),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const E=await Ea(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),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 pv(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=Gd(t,{artifactType:s,artifactName:r,fileName:n}),a=cv(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:qd(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: +`)}`);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),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const E=await Ea(w),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),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 fv(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=uv(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),b=new Map(m.syncFileMap);b.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const E=await Ea(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),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...uv(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 fv(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),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const E=await Ea(w),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),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...dv(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 gv(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 b=_.errorMessage||_a(_.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 gv(t,e=[]){const s=Qo("architect");try{return await In("architect",Rd,Nf(t),s,e)}catch(r){throw r.isModelArmor?r:new Error(`Prompt Architect failed: ${r.message}`)}}async function zn(t,e,s=[]){const r=Mf(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",Td,Lf(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=` +`)}`);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 w=_.errorMessage||_a(_.responseCode),E=new Error(w);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 mv(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,15 +125,15 @@ ${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"),Fo(t,"active")):(s.classList.add("hidden"),r.classList.remove("hidden"),Fo(t,"completed"))}function mv(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 vv(t){ze(parseInt(t.replace("step","")))}function ze(t){for(let o=1;o<=3;o++){const a=document.getElementById(`step${o}-item`);a&&a.classList.remove("active")}const e=document.getElementById(`step${t}-item`);e&&e.classList.add("active"),Yt();const 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 _v(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(Rd)}`),console.log(e!==t?`Step 2 (Code Generator): ${zt(t)} → ${zt(e)} (Free Tier fallback)`:`Step 2 (Code Generator): ${zt(t)}`),console.log(`Step 3 (Code Review): ${zt(Td)}`)}async function yv(){if(console.log("runRefinement called"),y.isRunning)return;const t=document.getElementById("code-generator-model").value;y.isRunning=!0,xa("standardRegenerate",y.step2Result,y.step1Result);const e=document.querySelectorAll(".btn-refine-action");e.forEach(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 vv(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 _v(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 yv(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 wv(){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=Of({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 wv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function bv(){const t=document.getElementById("ff-error-paste-input"),e=t?.value?.trim();if(!e){t?.focus(),t?.classList.add("ring-2","ring-red-400","border-red-300"),setTimeout(()=>t?.classList.remove("ring-2","ring-red-400","border-red-300"),2e3);return}if(!y.step2Result){ue("No generated code found. Please run the full pipeline first.","warning");return}if(y.isRunning)return;const 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=` + 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 bv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Ev(){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});oh(),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 Uv())return;await Mv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,rv(),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 Hv())return;await Lv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,nv(),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 gv(t,o),nv();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=mm(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=`
    - `}function u_(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(a_).join(""):`
    ${Ss(s.icon)} ${j(s.message)}
    `,n=e.dependencies?.length?e.dependencies.map(l=>` + `}function d_(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(l_).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(nh(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(l_).join("")}
    +
      ${e.manualSteps.map(c_).join("")}
    `:""}
    @@ -304,12 +304,12 @@ Error: ${h}
      ${a}
    - `}function d_(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 h_(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&&ih(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=o_(),o=ma();if(c_(i),d_(i),e&&(e.textContent=""),e){const a=Fd(o);e.innerHTML=a}s&&(s.innerHTML=u_(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 ih(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function h_(){y.resultsViewMode="summary",Ra()}function p_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const s=t.querySelector("span");if(s){const r=s.textContent;s.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),s.textContent=r},2e3)}}})}function f_(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 g_(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function oh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=p_;window.selectArtifact=ih;window.selectResultsSummary=h_;window.submitResultsFeedback=f_;window.showErrorInputPanel=g_;window.hideErrorInputPanel=oh; + `).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=a_(),o=ma();if(u_(i),h_(i),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=d_(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 p_(){y.resultsViewMode="summary",Ra()}function f_(){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 g_(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 m_(){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=f_;window.selectArtifact=oh;window.selectResultsSummary=p_;window.submitResultsFeedback=g_;window.showErrorInputPanel=m_;window.hideErrorInputPanel=ah; diff --git a/dist/index.html b/dist/index.html index 8c2cb06..b8d9443 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 beaaacf..5fc19a3 100644 --- a/src/customCodeVerification.js +++ b/src/customCodeVerification.js @@ -159,6 +159,18 @@ function skipReason(className, unresolvableImports, missingPackages) { return `${className} imports ${missingPackages.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`; } +/** + * The reason a class is skipped over a package it never names itself. + * + * @param {string} className - The class being skipped + * @param {string[]} unrepresentablePackages - Packages the project declares + * from sources the manifest cannot express + * @returns {string} User-facing reason naming both + */ +function transitiveSkipReason(className, unrepresentablePackages) { + return `${className} was not compiled before deploying: your project declares ${unrepresentablePackages.join(", ")} from a source that cannot be reproduced outside it, and whether the packages ${className} imports depend on one of them transitively cannot be checked before the deploy, so package resolution could not be matched exactly.`; +} + /** * Plans the compile check that runs before custom classes are pushed. * @@ -168,18 +180,25 @@ function skipReason(className, unresolvableImports, missingPackages) { * FlutterFlow. Classes that depend on the generated app are reported in * `skipped` so the deploy can say plainly what it did not verify. * - * A dependency that cannot be reproduced outside the project - a `git:` or - * `path:` source - stops only a class that imports it. For that class the - * scratch package would resolve different code from the project, and a check - * against the wrong versions reports a result that does not describe what - * ships, so it is left out of `sources` and named in `skipped`. A class that - * does not import it resolves everything it uses to the same versions the - * project will, so it is verified normally. + * A dependency that cannot be reproduced outside the project - a `git:`, + * `path:`, or custom-`hosted:` source - stops any class whose compilation + * shares a package graph with it. Importing it directly is the clear case and + * names itself in `skipped`. But a class that imports only representable + * packages can still be affected: pub resolution is one shared graph, so a + * representable import may depend on the unrepresentable package transitively, + * and whether it does is knowable only by resolving the graph, which cannot + * happen here. The scratch manifest omits the package, so `pub get` resolves + * that transitive slot differently there and the check could report a result + * that does not describe what ships. When the project declares any + * unrepresentable source, every class that imports a `package:` URI is + * therefore skipped and named with that reason; a class compiled from + * `dart:` alone does not touch package resolution and verifies normally. * - * That scoping is the point. Deciding it once for the whole project meant a - * single `git:` entry - or a package the SDK supplied but a hand-kept name list - * had not heard of - left every class in the deploy uncompiled, including the - * ones that never touched it. + * A project with no unrepresentable sources verifies exactly as before, and + * the class that directly imports such a package is still told so plainly. + * The earlier scoping - skipping only the classes that directly imported it - + * kept classes compiling that shared a graph with a package they never named, + * which was not a check on what ships. * * @param {Array<{className: string, content: string}>} classes - Classes to deploy * @param {string} projectPubspecYaml - The project's merged pubspec.yaml @@ -204,9 +223,8 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { const importedPackages = extractPackageImports(content); - // Scoped to this class's own imports. A dependency the project declares - // from a source the manifest cannot express is only a problem for a class - // that actually imports it. + // A direct import of a dependency the manifest cannot express is this + // class's own problem, and the reason names it as such. const unresolvablePackages = importedPackages.filter((name) => unrepresentable.includes(name), ); @@ -232,6 +250,25 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { continue; } + // The transitive hole: pub resolves one shared graph, so even a class + // whose every import is representable may reach a package the manifest + // omits through the dependencies of what it does import. Reachability is + // knowable only by resolving the graph, so while the project declares + // any unrepresentable source the class is skipped rather than compiled + // against a graph that differs from the project's. A class importing + // nothing from `package:` never touches pub resolution and compiles + // against exactly what the project will. + if ( + unrepresentable.length > 0 && + extractImportUris(content).some((uri) => uri.startsWith("package:")) + ) { + skipped.push({ + className, + reason: transitiveSkipReason(className, unrepresentable), + }); + continue; + } + sources.push({ fileName: `${identifierToFlutterFlowFileStem(className)}.dart`, content, diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 8fb4789..4179e57 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -145,24 +145,22 @@ dependencies: assert.equal("hosted_thing" in manifest.dependencies, false); }); -test("a git dependency does not stop a class that never imports it", () => { +test("a git dependency stops even a class that never imports it, because resolution is shared", () => { const plan = planCustomCodeVerification( [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], PROJECT_PUBSPEC, ); - // The project declares `private_thing` from git, which cannot be reproduced - // outside it - but this class does not import it, so the scratch package - // resolves everything it does use to the versions the project will, and the - // check still describes the code that ships. Deciding this once for the whole - // project left every class uncompiled over a dependency it never touched. - assert.deepEqual(plan.sources, [ - { - fileName: "background_downloader_service.dart", - content: SELF_CONTAINED, - }, - ]); - assert.deepEqual(plan.skipped, []); + // The project declares `private_thing` from git, which the scratch manifest + // cannot express. `background_downloader` may depend on it transitively - + // knowable only by resolving the graph - so compiling this class elsewhere + // could report a result that does not describe what ships. The skip says + // that instead of silently compiling against a differently-resolved graph. + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); + assert.equal(plan.skipped[0].className, "BackgroundDownloaderService"); + assert.match(plan.skipped[0].reason, /private_thing/); + assert.match(plan.skipped[0].reason, /BackgroundDownloaderService/); }); test("a class that imports the unreproducible dependency is skipped, and named as the reason", () => { @@ -179,15 +177,72 @@ class UsesPrivateThing {} PROJECT_PUBSPEC, ); - assert.deepEqual( - plan.sources.map((entry) => entry.fileName), - ["background_downloader_service.dart"], - ); - assert.equal(plan.skipped.length, 1); + // The direct import keeps its own reason: it names this class's own import, + // so it says what to do about this class. + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 2); assert.equal(plan.skipped[0].className, "UsesPrivateThing"); - // The reason names this class's own import, not the project's whole - // dependency set, so it says what to do about this class. assert.match(plan.skipped[0].reason, /it imports private_thing/); + // The sibling never imports it, but the shared graph still cannot be + // reproduced, so it is skipped with the transitive reason rather than + // compiled against a graph that differs from the project's. + assert.equal(plan.skipped[1].className, "BackgroundDownloaderService"); + assert.match(plan.skipped[1].reason, /private_thing/); +}); + +test("a representable import is skipped when an override elsewhere is unrepresentable", () => { + const pubspec = `name: my_app + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + background_downloader: ^8.5.0 + +dependency_overrides: + intl: + git: + url: https://example.invalid/intl-fork.git +`; + + const plan = planCustomCodeVerification( + [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], + pubspec, + ); + + // The class imports `background_downloader`, which the manifest can express, + // and never touches `intl` - but the git override of `intl` cannot be + // carried, and whether `background_downloader` depends on `intl` + // transitively is knowable only by resolving the graph. The conservative + // skip names the package and the class truthfully. + assert.deepEqual(plan.sources, []); + assert.equal(plan.skipped.length, 1); + assert.equal(plan.skipped[0].className, "BackgroundDownloaderService"); + assert.match(plan.skipped[0].reason, /intl/); + assert.match(plan.skipped[0].reason, /BackgroundDownloaderService/); +}); + +test("a class compiled from dart: alone still verifies beside a git dependency", () => { + const plan = planCustomCodeVerification( + [ + { + className: "PureDartService", + content: "import 'dart:convert';\nclass PureDartService {}", + }, + ], + PROJECT_PUBSPEC, + ); + + // `dart:` libraries come from the SDK rather than pub resolution, so a class + // importing nothing from `package:` compiles against exactly what the + // project will, whatever the project's sources are. + assert.deepEqual( + plan.sources.map((source) => source.fileName), + ["pure_dart_service.dart"], + ); + assert.deepEqual(plan.skipped, []); }); test("an SDK package no list has heard of is reproduced from its pubspec source", () => { From bf624e960999808eef0d30a761a87c504755b976 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:21:39 +1000 Subject: [PATCH 08/15] fix(ci): scan the bundle for every provider endpoint and credential shape (cherry picked from commit ff9bfacbdba3fa536689eb90890ab2703309198e) --- scripts/scan_bundle_for_leaks.py | 50 +++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/scripts/scan_bundle_for_leaks.py b/scripts/scan_bundle_for_leaks.py index 700615b..1e29a4a 100755 --- a/scripts/scan_bundle_for_leaks.py +++ b/scripts/scan_bundle_for_leaks.py @@ -4,11 +4,52 @@ import sys DIST_DIR = "dist" -PATTERNS = { - "api.groq.com endpoint": re.compile(r"api\.groq\.com"), - "apiKey assignment": re.compile(r"apiKey\s*[:=]\s*['\"][^'\"]+['\"]", re.IGNORECASE), + +# The PHP proxies under dist/api/ exist to forward same-origin browser calls +# to the provider endpoints, so naming an endpoint there is the architecture, +# not a leak. Everywhere else in the bundle a provider endpoint means client +# code is calling the provider directly - the credential exposure those +# proxies exist to prevent - so the endpoint patterns skip only that +# directory. +PROXY_DIR = os.path.join(DIST_DIR, "api") + +# Every provider the app supports. The shipped client must reach all of them +# through the same-origin proxies, never by naming the provider's host. +ENDPOINT_PATTERNS = { + "Groq endpoint": re.compile(r"api\.groq\.com"), + "Google Gemini endpoint": re.compile(r"generativelanguage\.googleapis\.com"), + "Anthropic endpoint": re.compile(r"api\.anthropic\.com"), + "OpenAI endpoint": re.compile(r"api\.openai\.com"), + "OpenRouter endpoint": re.compile(r"openrouter\.ai"), } +# Credential literals, matched by shape rather than by the property they are +# assigned to, so provider-specific or minified identifiers cannot hide them. +# The sk- prefix is anchored so ordinary kebab-case text ("task-...") does not +# match; a real key is a leak anywhere in dist/, the proxies included. +CREDENTIAL_PATTERNS = { + "apiKey assignment": re.compile( + r"apiKey\s*[:=]\s*['\"][^'\"]+['\"]", re.IGNORECASE + ), + "OpenAI API key": re.compile(r"(? int: if not os.path.isdir(DIST_DIR): print(f"{DIST_DIR}/ directory not found; skipping scan.") @@ -26,7 +67,7 @@ def main() -> int: except OSError as e: print(f"WARN: could not read {path}: {e}", file=sys.stderr) continue - for label, pattern in PATTERNS.items(): + for label, pattern in patterns_for(path).items(): for match in pattern.finditer(content): snippet = content[max(0, match.start()-20):match.end()+20].replace("\n", " ") leaks.append((path, label, snippet)) @@ -40,5 +81,6 @@ def main() -> int: print("No API key/endpoint leaks found.") return 0 + if __name__ == "__main__": sys.exit(main()) From d5776117dde05559b1b567ecffee2f2da5245693 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:21:48 +1000 Subject: [PATCH 09/15] ci: pin workflow actions to commit SHAs and minimize token permissions (cherry picked from commit 1ed78b6ffc6b43531593526d44dd3179f7ee1442) --- .github/workflows/ci.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2004d4d..5e5e11f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,22 +5,26 @@ on: branches: [main] pull_request: +# The workflow only checks out code and runs tests; it never needs write access. +permissions: + contents: read + jobs: ci: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version-file: '.nvmrc' cache: 'npm' - name: Set up PHP - uses: shivammathur/setup-php@v2 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # v2 with: php-version: '8.3' From 1df4b3f1802e60a51b7794367ff6fdb334452568 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:22:08 +1000 Subject: [PATCH 10/15] test: derive the deploy guard's expected absent bundles from the built HTML (cherry picked from commit ece12373880e744669bda50a9bad4aa1fc6c1893) --- scripts/test-deploy-guard.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/scripts/test-deploy-guard.py b/scripts/test-deploy-guard.py index 495e3b8..6fb0cf8 100644 --- a/scripts/test-deploy-guard.py +++ b/scripts/test-deploy-guard.py @@ -25,9 +25,33 @@ def load_deploy_module(): return module +def expected_absent_bundles(deploy, html): + """The absent bundle paths the guard must report for this document. + + Every assets/index-* reference in the HTML, rewritten to a hash nobody + built, in the order missing_referenced_assets returns them. Derived from + the document itself so the case holds however many bundles the build + emits - the redesign adds a CSS bundle beside the JS one, and hard-coding + a single expected file is exactly what broke the test on those branches. + """ + rewritten = set() + for pattern in (deploy.ASSET_REFERENCE, deploy.CSS_URL_REFERENCE): + for match in pattern.finditer(html): + ref = match.group("path").strip() + if ref.startswith(("#", "//")) or deploy.URI_SCHEME.match(ref): + continue + rel = ref.split("?", 1)[0].split("#", 1)[0].lstrip("/") + if rel.startswith("assets/index-"): + rewritten.add( + rel.replace("assets/index-", "assets/index-absent-", 1) + ) + return sorted(rewritten) + + def main(): deploy = load_deploy_module() built_html = (deploy.DIST / "index.html").read_text(encoding="utf-8") + absent_html = built_html.replace("assets/index-", "assets/index-absent-") cases = [ ( @@ -37,8 +61,8 @@ def main(): ), ( "a bundle hash with no built file is caught", - built_html.replace("assets/index-", "assets/index-absent-"), - None, # asserted below - the real hash is not known here + absent_html, + expected_absent_bundles(deploy, built_html), ), ( "external, protocol-relative, data and anchor refs are ignored", @@ -96,11 +120,7 @@ def main(): for name, document, expected in cases: document = document.replace("PLACEHOLDER", real_bundle) actual = deploy.missing_referenced_assets(document) - - if expected is None: - ok = len(actual) == 1 and actual[0].startswith("assets/index-absent-") - else: - ok = actual == expected + ok = actual == expected print(f"{'PASS' if ok else 'FAIL'} {name}") if not ok: From a7a860c5adc9adb88113f29070a941e2cc8a35b9 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:33:28 +1000 Subject: [PATCH 11/15] test(e2e): abort un-fixtured external requests in browser fixtures The default fixture router continued every unrecognized request, so an endpoint missing from the fixture map (runpipeline-image, the staging FlutterFlow sync, an env-overridden deploy URL) could silently reach a paid generation or a real project. The catch-all now aborts unmatched requests so un-fixture'd calls fail tests loudly. Only three request classes are allowed through, all explicit: - fixture-map URLs are fulfilled as before; - static assets index.html references are fulfilled with inert stubs (Tailwind, Google Fonts CSS, YouTube embeds), removing the page load's dependency on live CDNs and killing the YouTube player/ad/ tracking request cascade; - same-origin requests the local Vite dev server serves (the document, modules, Vite internals, public assets) continue, except /api paths, which vite.config.js proxies to real AI providers; - the SRI-pinned static scripts (JSZip, highlight.js, FingerprintJS) continue because a local stub can never match the pinned digest and app.js needs FingerprintJS to resolve identity; SRI verifies them byte-for-byte. Verified by rerunning the smoke suite (6 passed, 10x faster with the YouTube cascade gone) and by probing that fetches to runpipeline-image, the staging sync and /api proxy paths all abort. STU-372 --- e2e/fixtures/apiFixtures.js | 104 +++++++++++++++++++++++++++++++++--- 1 file changed, 98 insertions(+), 6 deletions(-) diff --git a/e2e/fixtures/apiFixtures.js b/e2e/fixtures/apiFixtures.js index 7aecd32..92e92fb 100644 --- a/e2e/fixtures/apiFixtures.js +++ b/e2e/fixtures/apiFixtures.js @@ -7,6 +7,14 @@ * These are pure data objects. Use `applyDefaultRoutes(page)` to wire them into * Playwright request interception, or mix and match individual fixtures with * `routeFulfill(page, urlPattern, fixture)`. + * + * Routing policy (see applyDefaultRoutes): fixture responses are fulfilled, + * static assets index.html references are fulfilled with inert stubs, and + * only same-origin requests served by the local Vite dev server — plus the + * SRI-pinned static scripts the app needs at load — reach the network. Every + * other request is aborted, so an un-fixtured external call — a paid + * generation, a real project write, a newly added endpoint — fails the test + * loudly instead of silently escaping to the network. */ const BUILDSHIP_BASE_URL = "https://4tgke4.buildship.run"; @@ -35,6 +43,11 @@ export const ENDPOINTS = { exchangeRates: "https://open.er-api.com/v6/latest/AUD", }; +// Origin of the local Vite dev server that playwright.config.js boots and +// targets (webServer.url / baseURL). Its requests are the only ones allowed +// to reach the network. +const VITE_ORIGIN = "http://localhost:3000"; + function ok(body) { return { status: 200, body: JSON.stringify(body), contentType: "application/json" }; } @@ -272,10 +285,67 @@ export async function routeFulfill(page, urlPredicate, fixture) { }); } +// Inert payloads for the third-party STATIC assets index.html references +// WITHOUT a Subresource Integrity attribute. Aborting them would fail the +// page load with resource errors; loading them for real would make tests +// depend on live CDNs. The app's own inline stylesheet provides the +// `.hidden { display: none !important }` utility the tests rely on, so an +// empty Tailwind payload changes no assertion. Empty stylesheets keep their +// @font-face rules from pulling font files, and an empty document keeps the +// YouTube embeds from loading their player, ad and tracking scripts. +const INERT_SCRIPT = { status: 200, body: "", contentType: "application/javascript" }; +const INERT_STYLESHEET = { status: 200, body: "", contentType: "text/css" }; +const INERT_DOCUMENT = { + status: 200, + body: "", + contentType: "text/html; charset=utf-8", +}; + +// [urlPrefix, response] pairs for exactly the third-party assets index.html +// loads at page load without SRI. Matched by prefix so URL normalization +// (trailing slash) and query strings (fonts, YouTube start offsets) cannot +// dodge a stub. +const STATIC_ASSET_STUBS = [ + ["https://cdn.tailwindcss.com", INERT_SCRIPT], + ["https://fonts.googleapis.com/css2", INERT_STYLESHEET], + ["https://www.youtube.com/embed/", INERT_DOCUMENT], +]; + +// The third-party static assets index.html references WITH a Subresource +// Integrity attribute. A fulfilled stub can never match the pinned digest — +// the browser blocks it with a console error — and app.js functionally needs +// FingerprintJS to resolve identity, so these are the ONLY external requests +// allowed through to the network. Each is pinned to an exact version and +// verified byte-for-byte by the browser's SRI check. +const SRI_PINNED_ASSET_PREFIXES = [ + "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js", + "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js", + "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dart.min.js", + "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css", + "https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@4.6.2/dist/fp.umd.min.js", +]; + /** - * Apply a safe default route map that isolates the test from external services. - * Use this as the baseline in every browser journey, then override specific - * endpoints to exercise auth, subscription or generation states. + * Apply the default route map that isolates the test from every external + * service, then override specific endpoints to exercise auth, subscription or + * generation states. + * + * Requests are handled in order: + * 1. A fixture keyed by the exact request URL (default or override) is + * fulfilled — the only API responses a test ever sees. + * 2. A static third-party asset from index.html is fulfilled with an inert + * stub, so a page load makes no unnecessary external requests. + * 3. An SRI-pinned static asset from index.html continues: a stub cannot + * match the pinned digest and the app needs FingerprintJS at load, so + * these version-locked, hash-verified assets are the only external + * requests allowed through. + * 4. A same-origin request is served by the local Vite dev server — the + * document, ES modules, Vite internals and public assets — and continues. + * Paths under /api are the exception: vite.config.js proxies them to real + * AI providers, so they are not local assets and fall through to abort. + * 5. Anything else is aborted. An un-fixtured external call must fail the + * test loudly rather than silently reach a paid generation or a real + * project. */ export async function applyDefaultRoutes(page, overrides = {}) { const routes = { @@ -298,12 +368,34 @@ export async function applyDefaultRoutes(page, overrides = {}) { }; await page.route("**/*", async (route) => { - const url = route.request().url(); - const fixture = routes[url]; + const requestUrl = route.request().url(); + + const fixture = routes[requestUrl]; if (fixture) { await route.fulfill(typeof fixture === "function" ? fixture() : fixture); return; } - await route.continue(); + + const staticStub = STATIC_ASSET_STUBS.find(([urlPrefix]) => requestUrl.startsWith(urlPrefix)); + if (staticStub) { + await route.fulfill(staticStub[1]); + return; + } + + const isSriPinnedAsset = SRI_PINNED_ASSET_PREFIXES.some((urlPrefix) => + requestUrl.startsWith(urlPrefix), + ); + if (isSriPinnedAsset) { + await route.continue(); + return; + } + + const { origin, pathname } = new URL(requestUrl); + if (origin === VITE_ORIGIN && !pathname.startsWith("/api")) { + await route.continue(); + return; + } + + await route.abort(); }); } From 0d9f1de5b7c72901add2e1c131286cd100be0522 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:33:56 +1000 Subject: [PATCH 12/15] test(e2e): build fixture deployOrder from the artifacts' real IDs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildArtifactBundle synthesized deployOrder values like "file-1" while the artifacts themselves get real IDs such as "custom-action-greet-user". Normalization preserves unknown order IDs, and the deployment planner matches order entries against artifact.id, filtering out every synthetic value — so a deploy journey driven by these fixtures produced an empty deployment plan instead of exercising artifact deployment. Map the artifacts first and derive deployOrder from the mapped artifacts' IDs, the same relationship src/artifactBundle.js guarantees. Verified against the real contract: oneArtifact now plans lib/custom_code/actions/GreetUser.dart and manyArtifacts plans all three files in class -> action -> widget order with no planner errors. STU-372 --- e2e/fixtures/apiFixtures.js | 41 +++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/e2e/fixtures/apiFixtures.js b/e2e/fixtures/apiFixtures.js index 92e92fb..3a39252 100644 --- a/e2e/fixtures/apiFixtures.js +++ b/e2e/fixtures/apiFixtures.js @@ -122,31 +122,36 @@ export const portalSession = () => ok({ url: "https://billing.stripe.com/mock-portal" }); function buildArtifactBundle(artifacts) { + const mappedArtifacts = artifacts.map((artifact, index) => ({ + id: artifact.id ?? `${artifact.artifactType?.toLowerCase() ?? "file"}-${index + 1}`, + artifactType: artifact.artifactType ?? "CodeFile", + artifactName: artifact.artifactName ?? `TestArtifact${index + 1}`, + fileName: artifact.fileName ?? `${artifact.artifactName ?? `TestArtifact${index + 1}`}.dart`, + deployPath: artifact.deployPath ?? "", + description: artifact.description ?? "", + code: artifact.code ?? "// Test code", + dependencies: artifact.dependencies ?? [], + imports: artifact.imports ?? [], + publicApi: artifact.publicApi ?? [], + relationships: artifact.relationships ?? [], + deployStatus: artifact.deployStatus ?? "pending", + review: artifact.review ?? null, + metadata: artifact.metadata ?? {}, + codeType: artifact.codeType ?? "C", + })); + return { schemaVersion: "1.0.0", id: "bundle-test-0001", title: "Deterministic test bundle", description: "Generated by browser fixture", - artifacts: artifacts.map((artifact, index) => ({ - id: artifact.id ?? `${artifact.artifactType?.toLowerCase() ?? "file"}-${index + 1}`, - artifactType: artifact.artifactType ?? "CodeFile", - artifactName: artifact.artifactName ?? `TestArtifact${index + 1}`, - fileName: artifact.fileName ?? `${artifact.artifactName ?? `TestArtifact${index + 1}`}.dart`, - deployPath: artifact.deployPath ?? "", - description: artifact.description ?? "", - code: artifact.code ?? "// Test code", - dependencies: artifact.dependencies ?? [], - imports: artifact.imports ?? [], - publicApi: artifact.publicApi ?? [], - relationships: artifact.relationships ?? [], - deployStatus: artifact.deployStatus ?? "pending", - review: artifact.review ?? null, - metadata: artifact.metadata ?? {}, - codeType: artifact.codeType ?? "C", - })), + artifacts: mappedArtifacts, dependencies: [], relationships: [], - deployOrder: artifacts.map((_, index) => `file-${index + 1}`), + // src/artifactBundle.js resolves deployOrder entries against artifact.id, + // and the deployment planner filters out unknown IDs — so the order must + // name the artifacts' actual IDs to produce a real deployment plan. + deployOrder: mappedArtifacts.map((artifact) => artifact.id), warnings: [], metadata: {}, }; From eaff0120258d4d8e6abf1922dae04404ae338914 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 17:34:07 +1000 Subject: [PATCH 13/15] ci: install Playwright Chromium and run the browser tests The pull-request workflow ran only unit, build, deploy-guard, proxy and leak-scan checks, so regressions in fixture routes, selectors and smoke assertions could merge while CI stayed green. Add the Chromium browser install and npm run test:ui after the production build, so the deterministic browser suite gates every pull request. Step style and the pinned-action/least-permission hardening from the earlier CI commits are unchanged. STU-372 --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e5e11f..10cf954 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,12 @@ jobs: - name: Build production bundle run: npm run build + - name: Install Playwright Chromium + run: npx playwright install chromium --with-deps + + - name: Run browser tests + run: npm run test:ui + - name: Run deploy guard run: npm run test:deploy-guard From 0dd50c029c5f6553aef2025ec1634b91cb15816d Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 18:01:01 +1000 Subject: [PATCH 14/15] fix: scope the verification skip to direct importers and disclose the scratch-graph approximation (cherry picked from commit e300b76b8e56463bf7a26fb0f8e4767dd0d012d8) --- app.js | 28 ++- dist/assets/index-BnJVlbD-.js | 320 ----------------------------- dist/assets/index-ZsXrM4ik.js | 320 +++++++++++++++++++++++++++++ dist/index.html | 2 +- src/customCodeVerification.js | 82 +++----- src/customCodeVerification.test.js | 99 ++++++--- 6 files changed, 444 insertions(+), 407 deletions(-) delete mode 100644 dist/assets/index-BnJVlbD-.js create mode 100644 dist/assets/index-ZsXrM4ik.js diff --git a/app.js b/app.js index ac24de8..75548b4 100644 --- a/app.js +++ b/app.js @@ -2113,7 +2113,7 @@ async function provisionMissingCodeFiles( ) { const missingCodeFiles = findMissingCodeFiles(fileMap, remoteFiles); if (missingCodeFiles.length === 0) { - return { remoteFiles, syncFileMap: fileMap, unverified: [] }; + return { remoteFiles, syncFileMap: fileMap, unverified: [], approximate: [] }; } // The runner compiles these against the project's own package versions @@ -2137,6 +2137,14 @@ async function provisionMissingCodeFiles( const unverified = verificationPlan.skipped.map((entry) => entry.reason); unverified.forEach((reason) => console.warn(`[custom class deploy] ${reason}`)); + // Classes that do not import an unrepresentable package directly are still + // checked, but against a scratch graph that omits it. That approximation is + // disclosed here - before the push - and returned alongside `unverified`, + // so it reaches the deploy result and is never mistaken for a full-graph + // check. + const approximate = verificationPlan.approximate; + approximate.forEach((notice) => console.warn(`[custom class deploy] ${notice}`)); + console.log( `Provisioning ${missingCodeFiles.length} new FlutterFlow custom code file(s) before sync.`, ); @@ -2178,6 +2186,7 @@ async function provisionMissingCodeFiles( remoteFiles, syncFileMap: excludeProvisionedCodeFiles(fileMap, missingCodeFiles), unverified, + approximate, }; } @@ -2870,6 +2879,7 @@ async function commitToFlutterFlow(dartCode, fileName, options = {}) { message: `Successfully committed ${fileName} to FlutterFlow project ${projectId}`, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], }; } catch (error) { @@ -3043,6 +3053,7 @@ async function executeCommit(code, options = {}) { metadata, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], elapsedTime: commitState.getElapsedTime(), }; @@ -3207,6 +3218,7 @@ async function executeBundleCommit(bundlePlan, options = {}) { metadata, addedDependencies: pubspecMerge.added, unverified: provisioning.unverified, + approximate: provisioning.approximate, warnings: result.errorMap ? Array.from(result.errorMap.entries()) : [], elapsedTime: commitState.getElapsedTime(), }; @@ -5347,14 +5359,24 @@ function showCommitSuccessModal(result) { const warningsSection = document.getElementById("success-warnings-section"); const warningsList = document.getElementById("success-warnings-list"); // A class that could not be compiled before the push is reported here rather - // than left implicit, so "deployed" never reads as "checked". + // than left implicit, so "deployed" never reads as "checked". A class that + // was compiled against a reduced package graph is reported beside it: the + // check ran, but approximately, and that has to stay visible too. const unverified = result.unverified || []; + const approximate = result.approximate || []; const fileWarnings = result.warnings || []; - if ((fileWarnings.length > 0 || unverified.length > 0) && warningsSection && warningsList) { + if ( + (fileWarnings.length > 0 || unverified.length > 0 || approximate.length > 0) && + warningsSection && + warningsList + ) { warningsList.innerHTML = [ ...unverified.map((reason) => `
  • Not verified before deploying: ${escapeHtml(String(reason))}
  • ` ), + ...approximate.map((notice) => + `
  • Verified approximately: ${escapeHtml(String(notice))}
  • ` + ), ...fileWarnings.map(([file, errs]) => `
  • ${escapeHtml(file)}: ${escapeHtml(String(errs))}
  • ` ), diff --git a/dist/assets/index-BnJVlbD-.js b/dist/assets/index-BnJVlbD-.js deleted file mode 100644 index 169da47..0000000 --- a/dist/assets/index-BnJVlbD-.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),w="dmn_chk_"+dt();!Ps&&_--;){var E=m.slice(_).join("."),I=w+"=1;domain=."+E+";path=/";g.cookie=I+";max-age=3",g.cookie.includes(w)&&(g.cookie=I+";max-age=0",Ps=E)}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 _,w=((d=c.exception)==null?void 0:d.values)||[],E=w.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=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:E,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(g=w[0])==null?void 0:g.type,$sentry_tags:c.tags};return r&&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 w=i[r].s;if(e>=p[w])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]},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),w=_[0],E=_[1],I=wl(g),F=I[0],P=I[1],B=new Ae(19),S=0;w.length>S;++S)B[31&w[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,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[_l[S]]);c+=3*T;for(var Ce=[w,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=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,w=new qe(f+_+5*(1+Math.floor(_/7e3))+g),E=w.subarray(f,w.length-g),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(E,I,d.subarray(F,P)):(E[F]=!0,I=lo(E,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,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,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,E,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(w,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 w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((E=>E(i,l,w))),{sessionId:i,windowId:l,sessionStartTimestamp:_,changeReason:c?w:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Qu=function(t,e){if(!t)return!1;var 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(),w=this.persistence.get_property(He);if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===es)this.identify(m);else if(s.bootstrap.isIdentifiedID&&_!=null&&_!==m&&w===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var E=this.config.get_device_id(dt()),I=s.bootstrap.isIdentifiedID?E: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((w=>b({},w,{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 w=0;m.length>w;w++)if(m[w].transport===h)return m[w]})(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 w="name"in _?String(_.name):"";return Ha(_)||w===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 _,w,E,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},w=e===ft.SENT?"responded":"dismissed",E="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(E="$survey_"+w+"/"+_.id+"/"+_.current_iteration),E)]:!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 w of this._n.slice())try{ee(_,w())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,g,m,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 E=this.config.sanitize_properties;E&&(k.error(Fl),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(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 w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w: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=[],_={},w=!1,E=!1;if(Z(c,(S=>{var A=no(S);if(Me(S,"a")){var R=S.getAttribute("href");w=!!(A&&R&&Ks(R))&&(u?Ct(R):R)}M(ln(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};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)})),E)return{props:{},explicitNoCapture:E};if(o||(m[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):rr(t)),w){var I,F;m[0].attr__href=w;var P=(I=cn(w))==null?void 0:I.host,B=v==null||(F=v.location)==null?void 0:F.host;P&&B&&P!==B&&(f=w)}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,_,w,E,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||(w=S.metadata)==null?void 0:w.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,[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 w=h,E=p,I=d;if(l!=null&&l.partialResponse)w=b({},i,w),E=b({},o,E),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)})));w=b({},i,Object.fromEntries(Object.entries(w).filter((P=>F.has(P[0]))))),E=b({},o,Object.fromEntries(Object.entries(E||{}).filter((P=>F.has(P[0]))))),I=b({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else w=b({},i,w),E=b({},o,E),I=b({},a,I);return b({[Us]:Object.keys(Wl(w)),[Bt]:w||{},[Hs]:E||{},[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 w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var E=Cu(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)||!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((w=>{return b({},w,{filename:w.filename||(E=_,E[E.length-1]||{}).filename,function:w.function||gs});var E}))})(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,_,w)=>{if(m!=null&&m[_]){var E=m[_];m[_]=w(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 w=f(_);return w?m.call(this,w):_})),p(u,"insertBefore",(m=>function(_,w){var E=f(_);return E?m.call(this,E,w):_})),p(u,"replaceChild",(m=>function(_,w){var E=f(_);return E?m.call(this,E,w):w})),[(e=l.Element)==null?void 0:e.prototype,(s=l.Document)==null?void 0:s.prototype,(r=l.DocumentFragment)==null?void 0:r.prototype].forEach((m=>{p(m,"append",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"prepend",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>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 w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"after",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>I;I++)E[I]=arguments[I];return _.apply(this,g(E))})),p(m,"replaceWith",(_=>function(){for(var w=arguments.length,E=new Array(w),I=0;w>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(_,w){var E=f(w);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(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,w=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:w,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(E=>Object.keys(E).length)||{},a=tt(n.artifacts||n.files||n.reviews),l=r.map((E,I)=>Ng(s,a,E,I)),u=_o(n),d=[..._o(o),...u],h=[...yo(o),...yo(n),...l.flatMap(E=>E.manualSteps)].filter((E,I,F)=>F.findIndex(P=>P.title===E.title&&P.artifactId===E.artifactId)===I),p=na(o.status||o.verdict||o.overallStatus||n.status||n.verdict||n.overallStatus||n.outcome),f=vo(p,...d.map(E=>E.severity),...l.map(E=>E.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}),w=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:w,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 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 Jg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(r.length===0)return{yaml:s,added:[],alreadyPresent:[]};const 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 Yg(t,e={}){const s=String(t||""),r=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(r.length===0)return{yaml:s,overridden:[],skipped:[]};const 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 Zg=">=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 Xg(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===null&&i.version){e[n]=bo(i.version);continue}r.push(n)}return r}function Qg(t){const e=new Set,s={},r={},n=ac(Ln(t),s,e);n.push(...ac(Gg(t,"dependency_overrides"),r,e));const i=new Set([...Object.keys(s),...e]),{sdk:o}=kd(t);return{sdkConstraint:bo(o)||Zg,dependencies:s,overrides:r,sdkPackages:[...e].sort(),availablePackages:i,unrepresentable:n}}function em(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 tm(t,e){return`${t} was not compiled before deploying: your project declares ${e.join(", ")} from a source that cannot be reproduced outside it, and whether the packages ${t} imports depend on one of them transitively cannot be checked before the deploy, so package resolution could not be matched exactly.`}function sm(t,e){const{sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:s,dependencies:r,overrides:n,sdkPackages:i},u=[],c=[];for(const d of t){const{className:h,content:p}=d,f=ra(p),g=f.filter(w=>a.includes(w));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}=Xg(p),_=f.filter(w=>!o.has(w));if(m.length>0||_.length>0){c.push({className:h,reason:em(h,m,_)});continue}if(a.length>0&&_d(p).some(w=>w.startsWith("package:"))){c.push({className:h,reason:tm(h,a)});continue}u.push({fileName:`${sa(h)}.dart`,content:p})}return{manifest:l,sources:u,skipped:c}}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 rm(t){const e=Fd(t);return e?[e]:[]}function Fd(t){const e=t.trim();if(!e)return null;try{const s=JSON.parse(e);return s&&typeof s=="object"&&!Array.isArray(s)?s:null}catch{return null}}async function 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=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 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 aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:lm(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const s={min:null,minInclusive:!1,max:null,maxInclusive:!1},r=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let 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 cm(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 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&&!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 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=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(cm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await r(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ns(p)){a.additions[d]=`^${ns(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ns(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const mm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>mm[e])}function j(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function vm(t,e={}){const s=t?.pipelineStep;if(s!=null&&e[s]!=null)return e[s];const r=t?.message||"";return r.includes("Code Generator")?2:r.includes("Code Review")?3:1}function _m(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📄"}function ym(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[s,r]of Object.entries(e))if(t.toLowerCase().includes(s.toLowerCase()))return r;return"📝"}function wm(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function 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=wm(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)} - ${bt(l)} -

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

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

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

    ${uc(a)}

    `)}return r+="
    ",` -
    -
    -
    - Live Audit Report -
    - ${r} -
    - `}const bm="https://ccc-ffai-runner-y5cyj3473a-uw.a.run.app/deployCustomClasses";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 Em=`${Je}/service/runpipeline`,Sm="bs_user_id",xm="bs_identity_token",km=`${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,Im=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"],Cm={"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 Cm[t]||t}const Fm=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 Fm.has(t)}const Eo=4,Ci=8*1024*1024,Pm="https://4tgke4.buildship.run/service/runpipeline-image";let Pt=[];function Am(t){return new Promise(e=>{const s=new FileReader;s.onload=()=>e(s.result),s.onerror=()=>e(null),s.readAsDataURL(t)})}async function $m(t){const e=new FormData;return e.append("file",t),(await fetch(Pm,{method:"POST",body:e})).json()}function Rm(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 Tm(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 Am(l);if(!u)return null;let c="";try{c=Rm(await $m(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 Nm(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 Mm(){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",Lm="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 Om(){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 Dm(){return new Promise((t,e)=>{const s=indexedDB.open(Lm,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 Dm();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 Bm(t){return t instanceof CryptoKey&&t.algorithm?.name==="AES-GCM"&&t.extractable===!1&&t.usages.includes("encrypt")&&t.usages.includes("decrypt")}async function jm(){const t=await ca("readonly",e=>e.get(it));return Bm(t)?t:null}async function Od(t){await ca("readwrite",e=>e.put(t,it))}async function Um(){Es();try{await ca("readwrite",t=>t.delete(it))}catch(t){console.warn("Could not delete the stored encryption key:",t)}}async function Hm(){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 Wm(t){if(sessionStorage.getItem(cr)==="session"&&sessionStorage.getItem(it))return mc(),dr=!0,vc(t);try{const e=await jm();if(e)return e;const s=await Hm();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=Om();En!==s&&Es();const r=ko||Wm(e);ko=r,En=s;try{return await r}catch(n){throw Es(),n}}async function zm(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 qm(t,e={}){const{isSessionCredential:s=!1}=e;try{const r=await ua({allowSessionFallbackCreation:!1});if(dr&&!s&&!Sn)throw new xn;const n=Vm(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"),Zm(),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 Km(){const t=document.getElementById("walkthrough-modal");t&&(Et=1,Dn(),t.classList.add("open"))}function Jm(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",Ym()}function Ym(){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 Zm(){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 Xm(){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 Qm(){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 Um(),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 ev(t,e){const s=document.getElementById(t);s&&(s.value?e?s.style.borderColor="#22c55e":s.style.borderColor="#ef4444":s.style.borderColor="")}function tv(){const t=document.getElementById("flutterflow-api-key-input");t&&(t.addEventListener("input",e=>{const s=e.target.value.trim().length>0;ev("flutterflow-api-key-input",s)}),t.addEventListener("blur",sv(async e=>{const s=e.target.value.trim();s&&await Hd(s)},500)))}function sv(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 rv(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 nv(){y.step1Result=null,y.step2Result=null,y.step3Result=null,y.bundleSpec=null,y.artifactBundle=null,y.bundleReview=null,y.selectedArtifactId=null,y.resultsViewMode="summary"}function iv(){y.bundleSpec=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 ov(){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 av(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(av(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 lv(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=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 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 gm(r.pubspecYaml,e),i=Yg(r.pubspecYaml,n.overrides),o=Jg(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 cv(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 uv(t){const e={};for(const s of ra(t))e[s]="";return e}function dv(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 hv(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=hv(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 pv(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||lv(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),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:"D",path:"pubspec.yaml"}),be.set("package");const E=await Ea(w),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),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 fv(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=uv(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),w=new Map(m.syncFileMap);w.set("pubspec.yaml",{content:g,type:U.DEPENDENCIES,path:"pubspec.yaml"}),be.set("package");const E=await Ea(w),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),Hn(p),be.set("push");const F=await p.pushCode(I),P=await va(F);if(P.success){const B={...dv(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 gv(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 w=_.errorMessage||_a(_.responseCode),E=new Error(w);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 mv(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 vv(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 _v(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 yv(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 wv(){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 bv(){const t=document.getElementById("ff-error-paste-input");t&&(t.value="")}async function Ev(){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 Hv())return;await Lv();const s=$o(e);t.length;const r=document.getElementById("btn-run-pipeline");y.isRunning=!0,nv(),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 mv(t,o),iv();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=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=``;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 Sv(){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 xv(){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 kv();return}const{artifactType:r,artifactName:n,fileName:i}=Wd(),o=Kd(t,{artifactType:r,artifactName:n,fileName:i}),a=cv(o);if(!a.canProceed){ue(`Pre-commit checks failed: ${a.issues.join("; ")}`,"error");return}eh(o,a,null,null)}async function kv(){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 Iv(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",()=>{Cv(t.error,e)}))}async function Cv(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 Fv(){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 Pv(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 Av(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 $v(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 Rv(){const e=new URLSearchParams(window.location.search).get("token");if(e){window.history.replaceState({},"",window.location.pathname);try{const{email:s,sessionToken:r}=await Av(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 $v(r);n?bc(n.email,n.sessionToken):ka()}}Ca()}function Ia(){const t=document.getElementById("signin-modal");t&&t.classList.add("open")}function Tv(t){if(t&&t.target!==t.currentTarget)return;const e=document.getElementById("signin-modal");e&&e.classList.remove("open")}async function Nv(){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 Pv(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 Mv(){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(km,{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(Sm,n.user_id),Ge.token&&sessionStorage.setItem(xm,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 Lv(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 Ov(){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 Dv(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 Bv(t){return t&&Object.entries(Ad).find(([,e])=>e===t)?.[0]||null}function $r(...t){return t.find(e=>e!=null&&e!=="")}function jv(...t){return t.find(e=>e&&typeof e=="object")||{}}function Uv(t){const e=t.data&&typeof t.data=="object"?t.data:t,s=jv(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=Dv($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=Im.has(String(i).toLowerCase()),l=e.active===!0||e.isSubscribed===!0||e.subscribed===!0||e.hasSubscription===!0,u=o||Bv(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 Hv(){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 Wv(){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=Uv(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 zv(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 qv(){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(Em,{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 Ov(),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 Vv(){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"),Gv(r?e:null),Wv(),Rd(),Xs()}function Gv(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"),Mm().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-"}),Kv(),await Rv(),Vv(),await Xd(),Gn(),Ro(),await ov(),tv();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 Kv(){const t=document.getElementById("preview-frame-container");t&&(t.style.display="")}function Jv(){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 Yv(){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 Zv(){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,Yv();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 Xv(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(),Iv(t)}function Qv(){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}},e_=[{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=e_.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(t_(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 t_(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 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(!Qs){console.error("No pending commit data");return}const t=Qs;if(Qs=null,Zs=Zv(),th(),sh({withProvisioning:s_(t)}),t.bundlePlan){const o=await gv(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 fv(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=_v;window.toggleSection=vv;window.selectWorkflowStep=ze;window.copyCode=yv;window.retryWithDifferentModel=Sv;window.openApiKeysModal=ha;window.closeApiKeysModal=Bd;window.closeWalkthroughModal=Jm;window.openWalkthroughModal=Km;window.advanceWalkthrough=pa;window.commitToFlutterFlow=pv;function n_(){const t=document.getElementById("pipeline-input");t&&t.focus()}function i_(){const t=document.getElementById("advanced-settings");t&&(t.open=!0);const e=document.getElementById("code-generator-model");e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),e.focus(),e.click())}window.focusPromptInput=n_;window.openModelSelector=i_;window.handlePromptImageSelect=Tm;window.removePromptImage=Nm;window.saveApiKeys=Xm;window.clearAllApiKeys=Qm;window.toggleKeyVisibility=rv;window.handleWelcomeVideoEnd=Jv;window.dismissWelcomeVideo=Yt;window.initiateCommitToFlutterFlow=xv;window.updateFlutterFlowCredentialStatus=Fv;window.closeCommitConfirmModal=th;window.closeCommitSuccessModal=Xv;window.showCommitSuccessModal=To;window.showCommitFailureModal=No;window.toggleCodePreview=Qv;window.confirmCommitToFlutterFlow=r_;window.runRefinement=wv;window.regenerateFromPastedErrors=Ev;window.clearErrorInput=bv;window.setFlutterFlowEndpoint=Gm;window.getFlutterFlowEndpoint=fr;window.commitProgress=be;window.openSignInModal=Ia;window.closeSignInModal=Tv;window.handleMagicLinkRequest=Nv;window.handleSignOut=Mv;window.startCheckout=zv;window.openCustomerPortal=qv;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),o_()}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 a_(){return Lg({bundle:y.artifactBundle,reviewResult:y.step3Result})}function l_(t){return` -
    - ${Ss(t.severity)} -
    -
    ${j(t.message)}
    - ${t.suggestion?`
    ${j(t.suggestion)}
    `:""} - ${j(t.source)} -
    -
    - `}function c_(t){return` -
  • -
    - ${j(t.title)} - ${t.detail&&t.detail!==t.title?`

    ${j(t.detail)}

    `:""} -
    -
  • - `}function u_(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 d_(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(l_).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(c_).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 h_(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=a_(),o=ma();if(u_(i),h_(i),e&&(e.textContent=""),e){const a=Pd(o);e.innerHTML=a}s&&(s.innerHTML=d_(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 p_(){y.resultsViewMode="summary",Ra()}function f_(){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 g_(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 m_(){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=f_;window.selectArtifact=oh;window.selectResultsSummary=p_;window.submitResultsFeedback=g_;window.showErrorInputPanel=m_;window.hideErrorInputPanel=ah; diff --git a/dist/assets/index-ZsXrM4ik.js b/dist/assets/index-ZsXrM4ik.js new file mode 100644 index 0000000..0b8c73b --- /dev/null +++ b/dist/assets/index-ZsXrM4ik.js @@ -0,0 +1,320 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function r(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function s(i){if(i.ep)return;i.ep=!0;const n=r(i);fetch(i.href,n)}})();var v=typeof window<"u"?window:void 0,we=typeof globalThis<"u"?globalThis:v,ke=we?.navigator,C=we?.document,se=we?.location,Mo=we?.fetch,$n=we!=null&&we.XMLHttpRequest&&"withCredentials"in new we.XMLHttpRequest?we.XMLHttpRequest:void 0,Ma=we?.AbortController,ah=we?.CompressionStream,Pe=ke?.userAgent;function kc(){return!(!v||v.navigator.onLine===!1)}var Cr=typeof globalThis<"u"?globalThis:v;Cr&&typeof self>"u"&&(Cr.self=Cr),Cr&&typeof File>"u"&&(Cr.File=function(){});var $=v??{},Y={DEBUG:!1,LIB_VERSION:"0.5.0",LIB_NAME:"browser-common"};function La(t,e,r,s,i,n,o){try{var a=t[n](o),l=a.value}catch(u){return void r(u)}a.done?e(l):Promise.resolve(l).then(s,i)}function X(t){return function(){var e=this,r=arguments;return new Promise((function(s,i){var n=t.apply(e,r);function o(l){La(n,s,i,o,a,"next",l)}function a(l){La(n,s,i,o,a,"throw",l)}o(void 0)}))}}function E(){return E=Object.assign?Object.assign.bind():function(t){for(var e=1;arguments.length>e;e++){var r=arguments[e];for(var s in r)({}).hasOwnProperty.call(r,s)&&(t[s]=r[s])}return t},E.apply(null,arguments)}function Ic(t,e){if(t==null)return{};var r={};for(var s in t)if({}.hasOwnProperty.call(t,s)){if(e.indexOf(s)!==-1)continue;r[s]=t[s]}return r}var Oa=t=>{if(typeof t!="string")return t;try{return JSON.parse(t)}catch{return t}};function Da(t){return typeof t=="string"||t}function Ba(t){return typeof t=="string"?t:void 0}var Fr,lh=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain","utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx","$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],ut=(function(t){return t.AnonymousId="anonymous_id",t.DistinctId="distinct_id",t.Props="props",t.EnablePersonProcessing="enable_person_processing",t.PersonMode="person_mode",t.FeatureFlagDetails="feature_flag_details",t.FeatureFlags="feature_flags",t.FeatureFlagPayloads="feature_flag_payloads",t.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",t.BootstrapFeatureFlags="bootstrap_feature_flags",t.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",t.OverrideFeatureFlags="override_feature_flags",t.Queue="queue",t.AiQueue="ai_queue",t.LogsQueue="logs_queue",t.OptedOut="opted_out",t.SessionId="session_id",t.SessionStartTimestamp="session_start_timestamp",t.SessionLastTimestamp="session_timestamp",t.PersonProperties="person_properties",t.GroupProperties="group_properties",t.InstalledAppBuild="installed_app_build",t.InstalledAppVersion="installed_app_version",t.SessionReplay="session_replay",t.PushRegistered="push_registered",t.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",t.SurveyLastSeenDate="survey_last_seen_date",t.SurveysSeen="surveys_seen",t.Surveys="surveys",t.RemoteConfig="remote_config",t.FlagsEndpointWasHit="flags_endpoint_was_hit",t.DeviceId="device_id",t})({}),ja=(function(t){return t.GZipJS="gzip-js",t.Base64="base64",t})({}),ch=["$snapshot","$pageview","$pageleave","$set","survey dismissed","survey sent","survey shown","$identify","$groupidentify","$create_alias","$$client_ingestion_warning","$web_experiment_applied","$feature_enrollment_update","$feature_flag_called"],uh=["token"],Cc="NativeGzipValidationError",Rn=t=>t.length>=2&&t[0]===31&&t[1]===139,Ua=(t,e)=>t===ja.GZipJS||e===ja.GZipJS||e==="gzip",Ha=t=>!(!t||typeof t!="object")&&("name"in t?String(t.name):"")==="NotReadableError",ys=t=>{var e=new Error("Native gzip produced invalid output: "+t);throw e.name=Cc,e},dh=(function(){var t=X((function*(e,r){18>e.size&&ys("too-short");var s=new Uint8Array(yield e.slice(0,10).arrayBuffer());Rn(s)&&s[2]===8||ys("invalid-header");var i=new DataView(yield e.slice(e.size-8).arrayBuffer());i.getUint32(0,!0)!==(o=>{for(var a=(()=>{if(Fr)return Fr;Fr=[];for(var c=0;256>c;c++){for(var d=c,h=0;8>h;h++)d=1&d?3988292384^d>>>1:d>>>1;Fr[c]=d>>>0}return Fr})(),l=4294967295,u=0;o.length>u;u++)l=a[255&(l^o[u])]^l>>>8;return(4294967295^l)>>>0})(r)&&ys("invalid-crc");var n=r.length>>>0;i.getUint32(4,!0)!==n&&ys("invalid-size")}));return function(e,r){return t.apply(this,arguments)}})();function Tn(){return Tn=X((function*(t,e,r){e===void 0&&(e=!0);try{var s=new TextEncoder().encode(t),i=new globalThis.CompressionStream("gzip"),n=i.writable.getWriter(),o=n.write(s).then((()=>n.close())).catch((function(){var u=X((function*(c){try{yield n.abort(c)}catch{}throw c}));return function(c){return u.apply(this,arguments)}})()),a=new Response(i.readable).blob(),l=(yield Promise.all([a,o]))[0];return yield dh(l,s),l}catch(u){if(r!=null&&r.rethrow)throw u;return e&&console.error("Failed to gzip compress data",u),null}})),Tn.apply(this,arguments)}var hh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Wa=function(t,e){if(e===void 0&&(e=[]),!t)return!1;var r=t.toLowerCase();return hh.concat(e).some((s=>{var i=s.toLowerCase();return r.indexOf(i)!==-1}))};function M(t,e){return t.indexOf(e)!==-1}var Fi=function(t){return t.trim()},Nn=function(t){return t.replace(/^\$/,"")};function Fc(t){var e,r=[];return(e=JSON.stringify(t,(function(s,i){if(typeof i=="bigint")return i.toString();if(typeof i!="function"&&typeof i!="symbol"){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i&&typeof i=="object"){for(;r.length>0&&r[r.length-1]!==this;)r.pop();if(r.includes(i))return"[Circular]";r.push(i)}return i}})))!==null&&e!==void 0?e:"null"}var Pc=Object.prototype,Ac=Pc.hasOwnProperty,Pi=Pc.toString,L=Array.isArray||function(t){return Pi.call(t)==="[object Array]"},Se=t=>typeof t=="function",te=t=>t===Object(t)&&!L(t),mt=t=>{if(te(t)){for(var e in t)if(Ac.call(t,e))return!1;return!0}return!1},x=t=>t===void 0,W=t=>Pi.call(t)=="[object String]",Mn=t=>W(t)&&t.trim().length===0,$e=t=>t===null,D=t=>x(t)||$e(t),he=t=>Pi.call(t)=="[object Number]"&&t==t,lt=t=>he(t)&&t>0,Ke=t=>Pi.call(t)==="[object Boolean]",ph=t=>t instanceof FormData,fh=t=>M(ch,t),gh=t=>M(uh,t);function $c(t){return t===null||typeof t!="object"}function qs(t,e){return{}.toString.call(t)==="[object "+e+"]"}function Lo(t){return typeof Event<"u"&&Rc(t,Event)}function Rc(t,e){try{return t instanceof e}catch{return!1}}var mh=[!0,"true",1,"1","yes"],Yi=t=>M(mh,t),vh=[!1,"false",0,"0","no"];function st(t,e,r,s,i){return e>r&&(s.warn("min cannot be greater than max."),e=r),he(t)?t>r?(s.warn(" cannot be greater than max: "+r+". Using max value instead."),r):e>t?(s.warn(" cannot be less than min: "+e+". Using min value instead."),e):t:(s.warn(" must be a number. using max or fallback. max: "+r+", fallback: "+i),st(i||r,e,r,s))}class _h{constructor(e){this.tt={},this.et=e.et,this.it=st(e.bucketSize,0,100,e.rt),this.nt=st(e.refillRate,0,this.it,e.rt),this.st=st(e.refillInterval,0,864e5,e.rt)}ot(e,r){var s=Math.floor((r-e.lastAccess)/this.st);s>0&&(e.tokens=Math.min(e.tokens+s*this.nt,this.it),e.lastAccess=e.lastAccess+s*this.st)}consumeRateLimit(e){var r,s=Date.now(),i=String(e),n=this.tt[i];return n?this.ot(n,s):this.tt[i]=n={tokens:this.it,lastAccess:s},n.tokens===0||(n.tokens--,n.tokens===0&&((r=this.et)==null||r.call(this,e)),n.tokens===0)}stop(){this.tt={}}}var Oe="Mobile",Vs="iOS",vt="Android",pr="Tablet",Tc=vt+" "+pr,Nc="iPad",Mc="Apple",Lc=Mc+" Watch",qr="Safari",fr="BlackBerry",Oc="Samsung",Dc=Oc+"Browser",Bc=Oc+" Internet",Vt="Chrome",yh=Vt+" OS",jc=Vt+" "+Vs,Oo="Internet Explorer",Uc=Oo+" "+Oe,Do="Opera",wh=Do+" Mini",Bo="Edge",Hc="Microsoft "+Bo,ur="Firefox",Wc=ur+" "+Vs,es="Nintendo",ts="PlayStation",dr="Xbox",zc=vt+" "+Oe,qc=Oe+" "+qr,Dr="Windows",Ln=Dr+" Phone",za="Nokia",On="Ouya",Vc="Generic",bh=Vc+" "+Oe.toLowerCase(),Gc=Vc+" "+pr.toLowerCase(),Dn="Konqueror",Kc="Oculus Browser",Gs="Vivaldi",Jc="Yandex",Ks="Whale",Bn="DuckDuckGo",Yc="Pale Moon",Js="Waterfox",Vr="Brave",Zc="Google Search App",le="(\\d+(\\.\\d+)?)",Zi=new RegExp("Version/"+le),Eh=new RegExp(dr,"i"),Sh=new RegExp(ts+" \\w+","i"),xh=new RegExp(es+" \\w+","i"),jo=new RegExp(fr+"|PlayBook|BB10","i"),kh={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000",5.1:"XP",5.2:"XP","6.0":"Vista",6.1:"7",6.2:"8",6.3:"8.1",6.4:"10","10.0":"10"},Xc=function(t,e,r,s){e=e||"";var i=(function(n){return n!=null&&n.brave?Vr:null})(r);return i||(s!=null&&s.detectGoogleSearchApp&&M(t,"GSA/")?Zc:M(t," OPR/")&&M(t,"Mini")?wh:M(t," OPR/")?Do:jo.test(t)?fr:M(t,"IE"+Oe)||M(t,"WPDesktop")?Uc:M(t,"OculusBrowser")?Kc:M(t,Dc)?Bc:M(t,Bo)||M(t,"Edg/")?Hc:M(t,Gs+"/")?Gs:M(t,"YaBrowser/")?Jc:M(t,Ks+"/")?Ks:M(t,Bn+"/")||M(t,"Ddg/")?Bn:M(t,"FBIOS")?"Facebook "+Oe:M(t,"UCWEB")||M(t,"UCBrowser")?"UC Browser":M(t,"CriOS")?jc:M(t,"CrMo")||M(t,Vt)?Vt:M(t,vt)&&M(t,qr)?zc:M(t,"FxiOS")?Wc:M(t.toLowerCase(),Dn.toLowerCase())?Dn:M(t,Vr+"/")?Vr:((n,o)=>o&&M(o,Mc)||(function(a){return M(a,qr)&&!M(a,Vt)&&!M(a,vt)})(n))(t,e)?M(t,Oe)?qc:qr:M(t,"PaleMoon/")?Yc:M(t,Js+"/")?Js:M(t,ur)?ur:M(t,"MSIE")||M(t,"Trident/")?Oo:M(t,"Gecko")?ur:"")},Ih={[Uc]:[new RegExp("rv:"+le)],[Hc]:[new RegExp(Bo+"?\\/"+le)],[Vt]:[new RegExp("("+Vt+"|CrMo)\\/"+le)],[jc]:[new RegExp("CriOS\\/"+le)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+le)],[qr]:[Zi],[qc]:[Zi],[Do]:[new RegExp("(Opera|OPR)\\/"+le)],[ur]:[new RegExp(ur+"\\/"+le)],[Wc]:[new RegExp("FxiOS\\/"+le)],[Dn]:[new RegExp("Konqueror[:/]?"+le,"i")],[fr]:[new RegExp(fr+" "+le),Zi],[zc]:[new RegExp("android\\s"+le,"i")],[Bc]:[new RegExp(Dc+"\\/"+le)],[Kc]:[new RegExp("OculusBrowser\\/"+le)],[Gs]:[new RegExp(Gs+"\\/"+le)],[Jc]:[new RegExp("YaBrowser\\/"+le)],[Ks]:[new RegExp(Ks+"\\/"+le)],[Vr]:[new RegExp(Vr+"\\/"+le)],[Bn]:[new RegExp("(DuckDuckGo|Ddg)\\/"+le)],[Yc]:[new RegExp("PaleMoon\\/"+le)],[Js]:[new RegExp(Js+"\\/"+le)],[Zc]:[new RegExp("GSA\\/"+le)],[Oo]:[new RegExp("(rv:|MSIE )"+le)],Mozilla:[new RegExp("rv:"+le)]},Ch=function(t,e,r,s){var i=Xc(t,e,r,s),n=Ih[i];if(x(n))return null;for(var o=0;n.length>o;o++){var a=t.match(n[o]);if(a)return parseFloat(a[a.length-2])}return null},qa=[[new RegExp(dr+"; "+dr+" (.*?)[);]","i"),t=>[dr,t&&t[1]||""]],[new RegExp(es,"i"),[es,""]],[new RegExp(ts,"i"),[ts,""]],[jo,[fr,""]],[new RegExp(Dr,"i"),(t,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Ln,""];if(new RegExp(Oe).test(e)&&!/IEMobile\b/.test(e))return[Dr+" "+Oe,""];var r=/Windows NT ([0-9.]+)/i.exec(e);if(r&&r[1]){var s=kh[r[1]]||"";return/arm/i.test(e)&&(s="RT"),[Dr,s]}return[Dr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,t=>t&&t[3]?[Vs,[t[3],t[4],t[5]||"0"].join(".")]:[Vs,""]],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,t=>{var e="";return t&&t.length>=3&&(e=x(t[2])?t[3]:t[2]),["watchOS",e]}],[new RegExp("("+vt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+vt+")","i"),t=>t&&t[2]?[vt,[t[2],t[3],t[4]||"0"].join(".")]:[vt,""]],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,t=>{var e=["Mac OS X",""];return t&&t[1]&&(e[1]=[t[1],t[2],t[3]||"0"].join(".")),e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[yh,""]],[/Linux|debian/i,["Linux",""]]],Va=function(t){return xh.test(t)?es:Sh.test(t)?ts:Eh.test(t)?dr:new RegExp(On,"i").test(t)?On:new RegExp("("+Ln+"|WPDesktop)","i").test(t)?Ln:/iPad/.test(t)?Nc:/iPod/.test(t)?"iPod Touch":/iPhone/.test(t)?"iPhone":/(watch)(?: ?os[,/]|\d,\d\/)[\d.]+/i.test(t)?Lc:jo.test(t)?fr:/(kobo)\s(ereader|touch)/i.test(t)?"Kobo":new RegExp(za,"i").test(t)?za:/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i.test(t)||/(kf[a-z]+)( bui|\)).+silk\//i.test(t)?"Kindle Fire":/(Android|ZTE)/i.test(t)?new RegExp(Oe).test(t)&&!/(9138B|TB782B|Nexus [97]|pixel c|HUAWEISHT|BTV|noble nook|smart ultra 6)/i.test(t)||/pixel[\daxl ]{1,6}/i.test(t)&&!/pixel c/i.test(t)||/(huaweimed-al00|tah-|APA|SM-G92|i980|zte|U304AA)/i.test(t)||/lmy47v/i.test(t)&&!/QTAQZ3/i.test(t)?vt:Tc:new RegExp("(pda|"+Oe+")","i").test(t)?bh:new RegExp(pr,"i").test(t)&&!new RegExp(pr+" pc","i").test(t)?Gc:""},Fh=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Ga(t,e){return typeof(r=t)=="string"&&Fh.test(r)?t:e();var r}function Ct(t){return t&&t.split("#")[0]}function Uo(t,e){var r=setTimeout(t,e);return r?.unref&&r?.unref(),r}function Ka(t,e,r){return Qc.apply(this,arguments)}function Qc(){return(Qc=X((function*(t,e,r){var s;try{return yield Promise.race([t,new Promise(((i,n)=>{s=Uo((()=>{try{r?.(),i()}catch(o){n(o)}}),e)}))])}finally{clearTimeout(s)}}))).apply(this,arguments)}var Ph=t=>t instanceof Error,eu={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},Ah=eu.info;function tu(t){if(Ke(t))return{boolValue:t};if(typeof t=="number")return Number.isFinite(t)?Number.isInteger(t)?{intValue:t}:{doubleValue:t}:{stringValue:String(t)};if(typeof t=="string")return{stringValue:t};if(L(t))return{arrayValue:{values:t.map((e=>tu(e)))}};try{return{stringValue:JSON.stringify(t)}}catch{return{stringValue:String(t)}}}function Ys(t){var e=[];for(var r in t){var s=t[r];$e(s)||x(s)||e.push({key:r,value:tu(s)})}return e}function $h(t,e){var r=eu[t.level||"info"]||Ah,s=r.text,i=r.number,n=String(Date.now())+"000000",o={};e.distinctId&&(o.posthogDistinctId=e.distinctId),e.sessionId&&(o.sessionId=e.sessionId),e.windowId&&(o["window.id"]=e.windowId),D(e.sessionStartTimestamp)||(o.sessionStartTimestamp=String(e.sessionStartTimestamp)),D(e.lastActivityTimestamp)||(o.lastActivityTimestamp=String(e.lastActivityTimestamp)),e.currentUrl&&(o["url.full"]=e.currentUrl),e.screenName&&(o["screen.name"]=e.screenName),e.appState&&(o["app.state"]=e.appState),e.activeFeatureFlags&&e.activeFeatureFlags.length>0&&(o.feature_flags=e.activeFeatureFlags);var a=E({},o,t.attributes||{}),l={timeUnixNano:n,observedTimeUnixNano:n,severityNumber:i,severityText:s,body:{stringValue:t.body},attributes:Ys(a)};return t.trace_id&&(l.traceId=t.trace_id),t.span_id&&(l.spanId=t.span_id),x(t.trace_flags)||(l.flags=t.trace_flags),l}function ru(t,e,r){return E({},t.resourceAttributes,{"service.name":t.serviceName||"unknown_service"},t.environment&&{"deployment.environment":t.environment},t.serviceVersion&&{"service.version":t.serviceVersion},{"telemetry.sdk.name":e,"telemetry.sdk.version":r})}function su(t,e,r,s){return{resourceLogs:[{resource:{attributes:Ys(e)},scopeLogs:[{scope:{name:r,version:s},logRecords:t}]}]}}let Rh=class{constructor(t,e,r,s,i,n,o){var a;n===void 0&&(n=()=>Promise.resolve()),this._instance=t,this.Ne=e,this.rt=r,this.ut=s,this.ht=i,this.dt=n,this.vt=o,this.ct=null,this.ft=0,this.yt=0,this.bt=0,this._t=0,this.wt=!1,this.kt=e.maxBufferSize,this.xt=Math.max((a=e.maxQueueSize)!==null&&a!==void 0?a:e.maxBufferSize,e.maxBufferSize),this.St=e.flushIntervalMs,this.Ct=e.maxBatchRecordsPerPost,this.Mt=e.rateCapWindowMs,this.Tt=e.maxLogsPerInterval}reset(){this.Et(),this.ct=null,this.bt=0,this._t=0,this.wt=!1,this.ft=0,this.yt=0,this.Ct=this.Ne.maxBatchRecordsPerPost}onReconnect(){this.yt=0,this.It()}captureLog(t){if(!this._instance.isDisabled&&!this._instance.optedOut&&t!=null&&t.body){var e=this.Pt(t);if(e!==null)if(e.body){if(this.Rt()){var r={record:$h(e,this.ut())};this.ht((()=>this.At(r)))}}else this.rt.info("Log was rejected in beforeSend function")}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var r=L(e)?e:[e],s=t;for(var i of r)try{var n=i(s);if(!n)return this.rt.info("Log was rejected in beforeSend function"),null;s=n}catch(o){return this.rt.error("Error in beforeSend function for log:",o),null}return s}Rt(){if(this.Tt===void 0)return!0;var t=Date.now(),e=t-this.bt;return this.Mt>e&&e>=0||(this.bt=t,this._t=0,this.wt=!1),this.Tt>this._t?(this._t++,!0):(this.wt||(this.rt.warn("captureLog dropping logs: exceeded "+this.Tt+" logs per "+this.Mt+"ms"),this.wt=!0),!1)}flush(){var t=this;return X((function*(){if(!t._instance.isDisabled)return t.ct||(t.ct=t.Ft().finally((()=>{t.ct=null}))),t.ct}))()}Ft(){var t=this;return X((function*(){var e;t.Et();var r=(e=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];if(r.length!==0)for(var s=r.length,i=0;r.length>0&&s>i;){var n,o;t.ft=0;var a=Math.min(r.length,t.Ct),l=r.slice(0,a),u=su(l.map((d=>d.record)),t.Lt(),(n=t.vt)!==null&&n!==void 0?n:t._instance.getLibraryId(),t._instance.getLibraryVersion()),c=yield t._instance.Ot(u);if(c.kind==="too-large"&&l.length>1)t.Ct=Math.max(1,Math.floor(l.length/2)),t.rt.warn("Received 413 when sending logs batch of size "+l.length+", reducing batch size to "+t.Ct);else if(c.kind==="retry-later"||(c.kind==="too-large"?t.rt.warn("Dropping a single log record after 413 with batch size 1 — the record is larger than the server cap and cannot be split further."):c.kind==="ok"&&t.Ne.maxBatchRecordsPerPost>t.Ct&&(t.Ct=Math.min(t.Ne.maxBatchRecordsPerPost,t.Ct+1)),yield t.Dt(l.length),r=(o=t._instance.getPersistedProperty(ut.LogsQueue))!==null&&o!==void 0?o:[],i+=l.length,c.kind==="fatal"))throw c.error}}))()}Dt(t){var e=this;return X((function*(){var r,s=Math.max(0,t-e.ft),i=(r=e._instance.getPersistedProperty(ut.LogsQueue))!==null&&r!==void 0?r:[];e._instance.setPersistedProperty(ut.LogsQueue,i.slice(s)),yield e.dt()}))()}Lt(){return ru(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion())}At(t){var e;if(!this._instance.optedOut){var r=(e=this._instance.getPersistedProperty(ut.LogsQueue))!==null&&e!==void 0?e:[];this.xt>r.length||(r.shift(),this.ft++,this.rt.info("Logs queue is full, dropping oldest record.")),r.push(t),this._instance.setPersistedProperty(ut.LogsQueue,r),this.kt>r.length?this.$t():this.It()}}$t(t){t===void 0&&(t=this.St),this.Nt||(this.Nt=Uo((()=>{this.Nt=void 0,this.It()}),t))}qt(){var t=Math.min(Math.max(0,this.yt-1),6);return this.St*Math.pow(2,t)}jt(){var t=this._instance.getPersistedProperty(ut.LogsQueue);return!!t&&t.length>0}shutdown(t){var e=this;return X((function*(){e.Et();var r=e.flush().catch((()=>{}));t!==void 0?yield Ka(r,t):yield r}))()}flushWithTimeout(t){var e=this;return X((function*(){var r=e.flush();yield Ka(r,t,(()=>{r.catch((()=>{}))}))}))()}It(){this.flush().then((()=>{this.yt=0}),(t=>{this.yt++,this.rt.error("PostHog logs flush failed:",t)})).finally((()=>{!this._instance.isDisabled&&this.jt()&&this.$t(this.qt())}))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}};var Xi=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Ja(t){return String(t)+"000000"}function Ya(t,e,r,s){var i="";return s&&(i=Object.keys(s).sort().map((n=>JSON.stringify(n)+":"+JSON.stringify(s[n]))).join(",")),t+"\0"+e+"\0"+(r??"")+"\0"+i}let Th=class{constructor(t,e,r){this._instance=t,this.Ne=e,this.rt=r,this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Wt=0}count(t,e,r){e===void 0&&(e=1),this.Vt({name:t,type:"count",value:e,unit:r?.unit,attributes:r?.attributes})}gauge(t,e,r){this.Vt({name:t,type:"gauge",value:e,unit:r?.unit,attributes:r?.attributes})}histogram(t,e,r){this.Vt({name:t,type:"histogram",value:e,unit:r?.unit,attributes:r?.attributes})}flush(){var t=this,e=this.ct,r=(function(){var i=X((function*(){e&&(yield e.catch((()=>{}))),yield t.Zt()}));return function(){return i.apply(this,arguments)}})(),s=r().finally((()=>{this.ct===s&&(this.ct=null)}));return this.ct=s,s}drainWindow(){if(this.Bt.size===0)return null;var t=this.Bt;return this.Bt=new Map,this.Ht=!1,this.Ut=new Map,this.zt=new Set,this.Gt(t)}reset(){this.Wt++,this.Et(),this.Bt=new Map,this.ct=null,this.Ht=!1,this.Ut=new Map,this.zt=new Set}Vt(t){if(!this._instance.isDisabled&&!this._instance.optedOut){var e=this.Pt(t);if(e!==null)if(e.name&&typeof e.name=="string")if(typeof e.value=="number"&&Number.isFinite(e.value))if(e.type==="count"&&0>e.value)this.rt.warn("Dropping count '"+e.name+"': counters are monotonic, value must be >= 0");else{var r,s;try{r=e.attributes?E({},e.attributes):void 0,s=Ya(e.type,e.name,e.unit,r)}catch(o){return void this.rt.warn("Dropping metric '"+e.name+"': attributes could not be serialized",o)}var i=this.Bt.get(s);if(!i){if(!this.Qt())return;i={name:e.name,type:e.type,unit:e.unit,attributes:r,windowStartMs:Date.now()},this.Bt.set(s,i)}var n=this.Ut.get(e.name);n===void 0?this.Ut.set(e.name,e.type):n===e.type||this.zt.has(e.name)||(this.zt.add(e.name),this.rt.warn("Metric name '"+e.name+"' is already used as a "+n+"; recording it as a "+e.type+" too will blend both series in charts. Use a distinct name.")),this.Kt(i,e.value),this.$t()}else this.rt.warn("Dropping metric '"+e.name+"': value must be a finite number");else this.rt.warn("Dropping metric with empty name")}}Qt(){return this.Ne.maxSeriesPerFlush>this.Bt.size||(this.Ht||(this.Ht=!0,this.rt.warn("Metric series cap reached ("+this.Ne.maxSeriesPerFlush+" per flush window); dropping new series until the next flush. Reduce attribute cardinality.")),!1)}Kt(t,e){var r;switch(t.type){case"count":t.total=((r=t.total)!==null&&r!==void 0?r:0)+e;break;case"gauge":t.last=e;break;case"histogram":t.hist||(t.hist={count:0,sum:0,min:e,max:e,bucketCounts:new Array(Xi.length+1).fill(0)});var s=t.hist;s.count+=1,s.sum+=e,s.min=Math.min(s.min,e),s.max=Math.max(s.max,e),s.bucketCounts[(function(i,n){for(var o=0;n.length>o;o++)if(n[o]>=i)return o;return n.length})(e,Xi)]+=1}}Pt(t){var e=this.Ne.beforeSend;if(!e)return t;var r=L(e)?e:[e],s=t;for(var i of r)try{var n=i(s);if(!n)return this.rt.info("Metric was rejected in beforeSend function"),null;s=n}catch(o){return this.rt.error("Error in beforeSend function for metric:",o),null}return s}$t(){this.Nt||(this.Nt=Uo((()=>{this.Nt=void 0,this.flush().catch((t=>{this.rt.error("Metrics flush failed:",t)}))}),this.Ne.flushIntervalMs))}Et(){this.Nt&&(clearTimeout(this.Nt),this.Nt=void 0)}Zt(){var t=this;return X((function*(){if(t.Bt.size!==0){var e=t.Bt;t.Bt=new Map,t.Ht=!1,t.Ut=new Map,t.zt=new Set;var r=t.Wt,s=yield t._instance.Jt(t.Gt(e));if(r===t.Wt)switch(s.kind){case"ok":return;case"retry-later":return t.Yt(e),void t.$t();case"too-large":return void t.rt.warn("Metrics batch exceeded the server size limit and was dropped");case"fatal":return void t.rt.error("Failed to send metrics batch:",s.error)}}}))()}Gt(t){return e=this.Xt(t),r=(function(n,o,a){return E({},n.resourceAttributes,{"service.name":n.serviceName||"unknown_service"},n.environment&&{"deployment.environment":n.environment},n.serviceVersion&&{"service.version":n.serviceVersion},{"telemetry.sdk.name":o,"telemetry.sdk.version":a})})(this.Ne,this._instance.getLibraryId(),this._instance.getLibraryVersion()),s=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),{resourceMetrics:[{resource:{attributes:Ys(r)},scopeMetrics:[{scope:{name:s,version:i},metrics:e}]}]};var e,r,s,i}Xt(t){var e=Ja(Date.now()),r=new Map;for(var s of t.values()){var i,n=Ya(s.type,s.name,s.unit,void 0),o=r.get(n);o||(o=E({name:s.name},s.unit&&{unit:s.unit}),s.type==="count"?o.sum={aggregationTemporality:1,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:1,dataPoints:[]},r.set(n,o));var a=Ys((i=s.attributes)!==null&&i!==void 0?i:{}),l=Ja(s.windowStartMs);if(s.type==="count"){var u,c={attributes:a,startTimeUnixNano:l,timeUnixNano:e,asDouble:(u=s.total)!==null&&u!==void 0?u:0};o.sum.dataPoints.push(c)}else if(s.type==="gauge"){var d,h={attributes:a,timeUnixNano:e,asDouble:(d=s.last)!==null&&d!==void 0?d:0};o.gauge.dataPoints.push(h)}else s.hist&&o.histogram.dataPoints.push({attributes:a,startTimeUnixNano:l,timeUnixNano:e,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:Xi})}return Array.from(r.values())}Yt(t){var e,r;for(var s of t){var i=s[0],n=s[1],o=this.Bt.get(i);if(o)switch(o.windowStartMs=Math.min(o.windowStartMs,n.windowStartMs),o.type){case"count":o.total=((e=o.total)!==null&&e!==void 0?e:0)+((r=n.total)!==null&&r!==void 0?r:0);break;case"gauge":break;case"histogram":if(n.hist)if(o.hist){o.hist.count+=n.hist.count,o.hist.sum+=n.hist.sum,o.hist.min=Math.min(o.hist.min,n.hist.min),o.hist.max=Math.max(o.hist.max,n.hist.max);for(var a=0;o.hist.bucketCounts.length>a;a++)o.hist.bucketCounts[a]+=n.hist.bucketCounts[a]}else o.hist=n.hist}else this.Qt()&&this.Bt.set(i,n)}}};var ws,Za,Qi;function Nh(t){var e=globalThis._posthogChunkIds;if(e){var r=Object.keys(e);return Qi&&r.length===Za||(Za=r.length,Qi=r.reduce(((s,i)=>{ws||(ws={});var n=ws[i];if(n)s[n[0]]=n[1];else for(var o=t(i),a=o.length-1;a>=0;a--){var l=o[a],u=l?.filename,c=e[i];if(u&&c){s[u]=c,ws[i]=[u,c];break}}return s}),{})),Qi}}class Mh{constructor(e,r,s){s===void 0&&(s=[]),this.coercers=e,this.stackParser=r,this.modifiers=s}buildFromUnknown(e,r){r===void 0&&(r={});var s=r&&r.mechanism||{handled:!0,type:"generic"},i=this.buildCoercingContext(s,r,0).apply(e),n=this.buildParsingContext(r),o=this.parseStacktrace(i,n);return{$exception_list:this.convertToExceptionList(o,s),$exception_level:"error"}}modifyFrames(e){var r=this;return X((function*(){for(var s of e)s.stacktrace&&s.stacktrace.frames&&L(s.stacktrace.frames)&&(s.stacktrace.frames=yield r.applyModifiers(s.stacktrace.frames));return e}))()}coerceFallback(e){var r;return{type:"Error",value:"Unknown error",stack:(r=e.syntheticException)==null?void 0:r.stack,synthetic:!0}}parseStacktrace(e,r){var s,i;return e.cause!=null&&(s=this.parseStacktrace(e.cause,r)),e.stack!=""&&e.stack!=null&&(i=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?r.skipFirstLines:0),r.chunkIdMap)),E({},e,{cause:s,stack:i})}applyChunkIds(e,r){return e.map((s=>(s.filename&&r&&(s.chunk_id=r[s.filename]),s)))}applyCoercers(e,r){for(var s of this.coercers)if(s.match(e))return s.coerce(e,r);return this.coerceFallback(r)}applyModifiers(e){var r=this;return X((function*(){var s=e;for(var i of r.modifiers)s=yield i(s);return s}))()}convertToExceptionList(e,r){var s,i,n,o={type:e.type,value:e.value,mechanism:{type:(s=r.type)!==null&&s!==void 0?s:"generic",handled:(i=r.handled)===null||i===void 0||i,synthetic:(n=e.synthetic)!==null&&n!==void 0&&n}};e.stack&&(o.stacktrace={type:"raw",frames:e.stack});var a=[o];return e.cause!=null&&a.push(...this.convertToExceptionList(e.cause,E({},r,{handled:!0}))),a}buildParsingContext(e){var r;return{chunkIdMap:Nh(this.stackParser),skipFirstLines:(r=e.skipFirstLines)!==null&&r!==void 0?r:1}}buildCoercingContext(e,r,s){s===void 0&&(s=0);var i=(n,o)=>{if(4>=o){var a=this.buildCoercingContext(e,r,o);return this.applyCoercers(n,a)}};return E({},r,{syntheticException:s==0?r.syntheticException:void 0,mechanism:e,apply:n=>i(n,s),next:n=>i(n,s+1)})}}var gr="?";function jn(t,e,r,s,i){var n={platform:t,filename:e,function:r===""?gr:r,in_app:!0};return x(s)||(n.lineno=s),x(i)||(n.colno=i),n}var iu=(t,e)=>{var r=t.indexOf("safari-extension")!==-1,s=t.indexOf("safari-web-extension")!==-1;return r||s?[t.indexOf("@")!==-1?t.split("@")[0]:gr,r?"safari-extension:"+e:"safari-web-extension:"+e]:[t,e]},Lh=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Oh=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Dh=/\((\S*)(?::(\d+))(?::(\d+))\)/,Bh=(t,e)=>{var r=Lh.exec(t);if(r)return jn(e,r[1],gr,+r[2],+r[3]);var s=Oh.exec(t);if(s){if(s[2]&&s[2].indexOf("eval")===0){var i=Dh.exec(s[2]);i&&(s[2]=i[1],s[3]=i[2],s[4]=i[3])}var n=iu(s[1]||gr,s[2]);return jn(e,n[1],n[0],s[3]?+s[3]:void 0,s[4]?+s[4]:void 0)}},jh=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Uh=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Hh=(t,e)=>{var r=jh.exec(t);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){var s=Uh.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}var i=r[3],n=r[1]||gr,o=iu(n,i);return jn(e,i=o[1],n=o[0],r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}},Xa=/\(error: (.*)\)/;class Wh{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,r){var s=W(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:s?e.stack:void 0,cause:e.cause?r.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){var r=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?r+": "+e.message:r}isDOMException(e){return qs(e,"DOMException")}isDOMError(e){return qs(e,"DOMError")}}class zh{match(e){return(function(r){switch({}.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Rc(r,Error)}})(e)}coerce(e,r){return{type:this.getType(e),value:this.getMessage(e,r),stack:this.getStack(e),cause:e.cause?r.next(e.cause):void 0,synthetic:!1}}getType(e){return e.name||e.constructor.name}getMessage(e,r){var s=e.message;return String(s.error&&typeof s.error.message=="string"?s.error.message:s)}getStack(e){return e.stacktrace||e.stack||void 0}}class qh{constructor(){}match(e){return!!qs(e,"ErrorEvent")&&(e.error!=null||this.fe(e))}coerce(e,r){var s;if(e.error!=null)return r.apply(e.error);var i=r.apply(e.message);return E({},i,{stack:(s=this.pe(e))!==null&&s!==void 0?s:i.stack,synthetic:!0})}fe(e){return W(e.message)&&e.message.length>0}pe(e){var r=e;if(W(r.filename)&&r.filename.length>0){var s,i,n=(s=r.lineno)!==null&&s!==void 0?s:0,o=(i=r.colno)!==null&&i!==void 0?i:0;return`Error + at `+r.filename+":"+n+":"+o}}}var Vh=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;class Gh{match(e){return typeof e=="string"}coerce(e,r){var s,i=this.getInfos(e),n=i[0],o=i[1];return{type:n??"Error",value:o??e,stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}getInfos(e){var r="Error",s=e,i=e.match(Vh);return i&&(r=i[1],s=i[2]),[r,s]}}var Kh=["fatal","error","warning","log","info","debug"];function nu(t,e){e===void 0&&(e=40);var r=Object.keys(t);if(r.sort(),!r.length)return"[object has no keys]";for(var s=r.length;s>0;s--){var i=r.slice(0,s).join(", ");if(e>=i.length)return s===r.length?i:i.length>e?i.slice(0,e)+"...":i}return""}class Jh{match(e){return typeof e=="object"&&e!==null}coerce(e,r){var s,i,n=this.getErrorPropertyFromObject(e);return n?r.apply(n):{type:this.getType(e),value:this.getValue(e),stack:(s=this.getStack(e))!==null&&s!==void 0?s:(i=r.syntheticException)==null?void 0:i.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){return Lo(e)?e.constructor.name:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){var r="'"+e.name+"' captured as exception";return"message"in e&&typeof e.message=="string"&&(r+=" with message: '"+e.message+"'"),r}if("message"in e&&typeof e.message=="string")return e.message;var s=this.getObjectClassName(e);return(s&&s!=="Object"?"'"+s+"'":"Object")+" captured as exception with keys: "+nu(e)}isSeverityLevel(e){return W(e)&&!Mn(e)&&Kh.indexOf(e)>=0}getStack(e){try{return W(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:W(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(var r in e)if({}.hasOwnProperty.call(e,r)){var s=e[r];if(Ph(s))return s}}getObjectClassName(e){try{var r=Object.getPrototypeOf(e);return r?r.constructor.name:void 0}catch{return}}}class Yh{match(e){return Lo(e)}coerce(e,r){var s,i=e.constructor.name;return{type:i,value:i+" captured as exception with keys: "+nu(e),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class Zh{match(e){return $c(e)}coerce(e,r){var s;return{type:"Error",value:"Primitive value captured as exception: "+String(e),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}}}class Xh{match(e){return qs(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!Lo(e))return!1;try{var r=e.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(e,r){var s,i=this.getUnhandledRejectionReason(e);return $c(i)?{type:"UnhandledRejection",value:"Non-Error promise rejection captured with value: "+String(i),stack:(s=r.syntheticException)==null?void 0:s.stack,synthetic:!0}:r.apply(i)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}}var Zs="$message",Xs="$timestamp",Qh=new Set([Zs,Xs]),en={enabled:!0,max_bytes:32768};function Qs(t){var e;return t?{enabled:(e=t.enabled)!==null&&e!==void 0?e:en.enabled,max_bytes:tp(t.max_bytes,en.max_bytes)}:E({},en)}class ep{constructor(e){this.Ke=[],this.Je=0,this.Ne=Qs(e)}setConfig(e){this.Ne=Qs(e),this.Xe()}add(e){var r=(function(i){var n;try{n=Fc(i)}catch{return}try{var o=JSON.parse(n);if(!te(o))return;var a=o,l=a[Zs],u=a[Xs];return!W(l)||l.trim().length===0||!W(u)&&!he(u)?void 0:{step:a,json:n}}catch{return}})(e);if(r){var s=(function(i){if(typeof TextEncoder<"u")return new TextEncoder().encode(i).length;for(var n=encodeURIComponent(i),o=0,a=0;n.length>a;a++)n[a]==="%"?(o+=1,a+=2):o+=1;return o})(r.json);s>this.Ne.max_bytes||(this.Ke.push({step:r.step,bytes:s}),this.Je+=s,this.Xe())}}getAttachable(){return this.Ke.map((e=>e.step))}clear(){this.Ke=[],this.Je=0}size(){return this.Ke.length}Xe(){for(;this.Je>this.Ne.max_bytes&&this.Ke.length>0;){var e=this.Ke.shift();e&&(this.Je-=e.bytes)}}}function tp(t,e){if(!he(t)||t===1/0||t===-1/0)return e;var r=Math.floor(t);return 0>r?e:r}var ou=function(t,e){var r=(e===void 0?{}:e).debugEnabled,s={k(i){if(v&&(Y.DEBUG||v.POSTHOG_DEBUG||r)&&!x(v.console)&&v.console){for(var n=("__rrweb_original__"in v.console[i])?v.console[i].__rrweb_original__:v.console[i],o=arguments.length,a=new Array(o>1?o-1:0),l=1;o>l;l++)a[l-1]=arguments[l];n(t,...a)}},debug(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("debug",...n)},info(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("log",...n)},warn(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("warn",...n)},error(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];s.k("error",...n)},critical(){for(var i=arguments.length,n=new Array(i),o=0;i>o;o++)n[o]=arguments[o];console.error(t,...n)},uninitializedWarning(i){s.error("You must initialize PostHog before calling "+i)},createLogger:(i,n)=>ou(t+" "+i,n)};return s},k=ou("[PostHog.js]"),re=k.createLogger,rp=re("[ExternalScriptsLoader]"),tn=(t,e,r)=>{if(t.config.disable_external_dependency_loading)return rp.warn(e+" was requested but loading of external scripts is disabled."),r("Loading of external scripts is disabled");var s=C?.querySelectorAll("script");if(s){for(var i,n=function(){if(s[o].src===e){var l=s[o];return l.__posthog_loading_callback_fired?{v:r()}:(l.addEventListener("load",(u=>{l.__posthog_loading_callback_fired=!0,r(void 0,u)})),l.onerror=u=>r(u),{v:void 0})}},o=0;s.length>o;o++)if(i=n())return i.v}var a=()=>{if(!C)return r("document not found");var l=C.createElement("script");if(l.type="text/javascript",l.crossOrigin="anonymous",l.src=e,l.onload=d=>{l.__posthog_loading_callback_fired=!0,r(void 0,d)},l.onerror=d=>r(d),t.config.prepare_external_dependency_script&&(l=t.config.prepare_external_dependency_script(l)),!l)return r("prepare_external_dependency_script returned null");if(t.config.external_scripts_inject_target==="head")C.head.appendChild(l);else{var u,c=C.querySelectorAll("body > script");c.length>0?(u=c[0].parentNode)==null||u.insertBefore(l,c[0]):C.body.appendChild(l)}};C!=null&&C.body?a():C?.addEventListener("DOMContentLoaded",a)};$.__PosthogExtensions__=$.__PosthogExtensions__||{},$.__PosthogExtensions__.loadExternalDependency=(t,e,r)=>{if(e!=="remote-config"){var s;if(t.config.strict_script_versioning)s=t.requestRouter.endpointFor("assets","/static/"+t.version+"/"+e+".js");else{var i="/static/"+e+".js?v="+t.version;if(e==="toolbar"){var n=3e5;i=i+"&t="+Math.floor(Date.now()/n)*n}s=t.requestRouter.endpointFor("assets",i)}tn(t,s,r)}else{var o=t.requestRouter.endpointFor("assets","/array/"+t.config.token+"/config.js");tn(t,o,r)}},$.__PosthogExtensions__.loadSiteApp=(t,e,r)=>{var s=t.requestRouter.endpointFor("api",e);tn(t,s,r)};Y.DEBUG=!1,Y.LIB_VERSION="1.415.7",Y.LIB_NAME="web";var au="$people_distinct_id",rs="$device_id",rn="$device_model",Br="__alias",jr="__timers",Un="$autocapture_disabled_server_side",Hn="$heatmaps_enabled_server_side",Wn="$exception_capture_enabled_server_side",zn="$error_tracking_suppression_rules",qn="$error_tracking_capture_extension_exceptions",Vn="$web_vitals_enabled_server_side",Ho="$dead_clicks_enabled_server_side",Wo="$product_tours_enabled_server_side",Gn="$web_vitals_allowed_metrics",qt="$session_recording_remote_config",lu="$replay_sample_rate",cu="$replay_override_sampling",uu="$replay_override_linked_flag",du="$replay_override_url_trigger",hu="$replay_override_event_trigger",lr="$sesid",zo="$session_is_sampled",Bt="$enabled_feature_flags",Ur="$active_feature_flags",Rs="$early_access_features",Kn="$feature_flag_details",Hr="$feature_flag_payloads",Ts="$feature_flag_request_id",ei="$minimal_flag_called_events",et="$override_feature_flags",jt="$override_feature_flag_payloads",ct="$stored_person_properties",Ut="$stored_group_properties",Jn="$surveys",ti="$surveys_loaded_at",Yn="$surveys_activated",Ns="$surveys_activated_session",Ms="$surveys_activated_timestamps",Wr="ph_product_tours",Wt="$flag_call_reported",zr="$flag_call_reported_session_id",Ls="$feature_flag_errors",Gr="$feature_flag_evaluated_at",He="$user_state",Zn="$client_session_props",Xn="$capture_rate_limit",Qn="$initial_campaign_params",eo="$initial_referrer_info",ri="$initial_person_info",si="$epp",bs="$posthog_cookieless",pu="$cookieless_mode",fu="$sdk_debug_extensions_init_method",gu="$sdk_debug_extensions_init_time_ms",mu="$sdk_debug_recording_script_not_loaded",qo="PostHog loadExternalDependency extension not found.",Ht="on_reject",ht="always",er="anonymous",Tt="identified",to="identified_only",ii="visibilitychange",ni="beforeunload",nr="$pageview",sn="$pageleave",nn="$identify",Qa="$groupidentify";function Es(t,e){L(t)&&t.forEach(e)}function Z(t,e){if(!D(t))if(L(t))t.forEach(e);else if(ph(t))t.forEach(((s,i)=>e(s,i)));else for(var r in t)Ac.call(t,r)&&e(t[r],r)}var ee=function(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),s=1;e>s;s++)r[s-1]=arguments[s];for(var i of r)for(var n in i)i[n]!==void 0&&(t[n]=i[n]);return t};function Os(t){for(var e=Object.keys(t),r=e.length,s=new Array(r);r--;)s[r]=[e[r],t[e[r]]];return s}var el=function(t){try{return t()}catch{return}},sp=function(t){return function(){try{for(var e=arguments.length,r=new Array(e),s=0;e>s;s++)r[s]=arguments[s];return t.apply(this,r)}catch(i){k.critical("Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A."),k.critical(i)}}},Vo=function(t){var e={};return Z(t,(function(r,s){(W(r)&&r.length>0||he(r))&&(e[s]=r)})),e},ip=["herokuapp.com","vercel.app","netlify.app"];function np(t){var e=t?.hostname;if(!W(e))return!1;var r=e.split(".").slice(-2).join(".");for(var s of ip)if(r===s)return!1;return!0}function ie(t,e,r,s){var i=s??{},n=i.capture,o=i.passive;t?.addEventListener(e,r,{capture:n!==void 0&&n,passive:o===void 0||o})}function ro(t){return t.name==="ph_toolbar_internal"}var vu=t=>{if(C){try{for(var e=t+"=",r=C.cookie.split(";").filter((n=>n.length)),s=0;r.length>s;s++){for(var i=r[s];i.charAt(0)==" ";)i=i.substring(1,i.length);if(i.indexOf(e)===0)return decodeURIComponent(i.substring(e.length,i.length))}}catch{}return null}};Math.trunc||(Math.trunc=function(t){return 0>t?Math.ceil(t):Math.floor(t)}),Number.isInteger||(Number.isInteger=function(t){return he(t)&&isFinite(t)&&Math.floor(t)===t});class oi{constructor(e){if(this.bytes=e,e.length!==16)throw new TypeError("not 128-bit length")}static fromFieldsV7(e,r,s,i){if(!Number.isInteger(e)||!Number.isInteger(r)||!Number.isInteger(s)||!Number.isInteger(i)||0>e||0>r||0>s||0>i||e>0xffffffffffff||r>4095||s>1073741823||i>4294967295)throw new RangeError("invalid field value");var n=new Uint8Array(16);return n[0]=e/Math.pow(2,40),n[1]=e/Math.pow(2,32),n[2]=e/Math.pow(2,24),n[3]=e/Math.pow(2,16),n[4]=e/256,n[5]=e,n[6]=112|r>>>8,n[7]=r,n[8]=128|s>>>24,n[9]=s>>>16,n[10]=s>>>8,n[11]=s,n[12]=i>>>24,n[13]=i>>>16,n[14]=i>>>8,n[15]=i,new oi(n)}toString(){for(var e="",r=0;this.bytes.length>r;r++)e=e+(this.bytes[r]>>>4).toString(16)+(15&this.bytes[r]).toString(16),r!==3&&r!==5&&r!==7&&r!==9||(e+="-");if(e.length!==36)throw new Error("Invalid UUIDv7 was generated");return e}clone(){return new oi(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(var r=0;16>r;r++){var s=this.bytes[r]-e.bytes[r];if(s!==0)return Math.sign(s)}return 0}}class op{generate(){var e=this.generateOrAbort();if(!x(e))return e;this.S=0;var r=this.generateOrAbort();if(x(r))throw new Error("Could not generate UUID after timestamp reset");return r}generateOrAbort(){var e=Date.now();if(e>this.S)this.S=e,this.C();else{if(this.S>=e+1e4)return;this.I++,this.I>4398046511103&&(this.S++,this.C())}return oi.fromFieldsV7(this.S,Math.trunc(this.I/Math.pow(2,30)),this.I&Math.pow(2,30)-1,this.A.nextUint32())}C(){this.I=1024*this.A.nextUint32()+(1023&this.A.nextUint32())}constructor(){this.S=0,this.I=0,this.A=new ap}}var tl,_u=t=>{if(typeof UUIDV7_DENY_WEAK_RNG<"u"&&UUIDV7_DENY_WEAK_RNG)throw new Error("no cryptographically strong RNG available");for(var e=0;t.length>e;e++)t[e]=65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random());return t};v&&!x(v.crypto)&&crypto.getRandomValues&&(_u=t=>crypto.getRandomValues(t));class ap{nextUint32(){return this.R.length>this.O||(_u(this.R),this.O=0),this.R[this.O++]}constructor(){this.R=new Uint32Array(8),this.O=1/0}}var dt=()=>lp().toString(),lp=()=>(tl||(tl=new op)).generate(),Pr="",cp=/[a-z0-9][a-z0-9-]+\.[a-z]{2,}$/i,pt={N:()=>!!C,j(t){k.error("cookieStore error: "+t)},P:vu,H(t){var e;try{e=JSON.parse(pt.P(t))||{}}catch{}return e},F(t,e,r,s,i){if(!C)return!1;try{var n="",o="",a=(function(c,d){if(d){var h=(function(f,m){if(m===void 0&&(m=C),Pr)return Pr;if(!m||["localhost","127.0.0.1"].includes(f))return"";for(var g=f.split("."),_=Math.min(g.length,8),w="dmn_chk_"+dt();!Pr&&_--;){var b=g.slice(_).join("."),I=w+"=1;domain=."+b+";path=/";m.cookie=I+";max-age=3",m.cookie.includes(w)&&(m.cookie=I+";max-age=0",Pr=b)}return Pr})(c);if(!h){var p=(f=>{var m=f.match(cp);return m?m[0]:""})(c);p!==h&&k.info("Warning: cookie subdomain discovery mismatch",p,h),h=p}return h?"; domain=."+h:""}return""})(C.location.hostname,s);if(r){var l=new Date;l.setTime(l.getTime()+864e5*r),n="; expires="+l.toUTCString()}i&&(o="; secure");var u=t+"="+encodeURIComponent(JSON.stringify(e))+n+"; SameSite=Lax; path=/"+a+o;return u.length>3686.4&&k.warn("cookieStore warning: large cookie, len="+u.length),C.cookie=u,!0}catch{return!1}},q(t,e){if(C!=null&&C.cookie)try{pt.F(t,"",-1,e)}catch{return}}},on=null,Q={N(){if(!$e(on))return on;var t=!0;if(x(v))t=!1;else try{var e="__mplssupport__";Q.F(e,"xyz"),Q.P(e)!=='"xyz"'&&(t=!1),Q.q(e)}catch{t=!1}return t||k.error("localStorage unsupported; falling back to cookie store"),on=t,t},j(t){k.error("localStorage error: "+t)},P(t){try{return v?.localStorage.getItem(t)}catch(e){Q.j(e)}return null},H(t){try{return JSON.parse(Q.P(t))||{}}catch{}return null},F(t,e){try{return v?.localStorage.setItem(t,JSON.stringify(e)),!0}catch(r){Q.j(r)}return!1},q(t){try{v?.localStorage.removeItem(t)}catch(e){Q.j(e)}}},up=[rs,"distinct_id",lr,zo,si,ri,He],Ss={},dp={N:()=>!0,j(t){k.error("memoryStorage error: "+t)},P:t=>Ss[t]||null,H:t=>Ss[t]||null,F:(t,e)=>(Ss[t]=e,!0),q(t){delete Ss[t]}},Nt=null,ce={N(){if(!$e(Nt))return Nt;if(Nt=!0,x(v))Nt=!1;else try{var t="__support__";ce.F(t,"xyz"),ce.P(t)!=='"xyz"'&&(Nt=!1),ce.q(t)}catch{Nt=!1}return Nt},j(t){k.error("sessionStorage error: ",t)},P(t){try{return v?.sessionStorage.getItem(t)}catch(e){ce.j(e)}return null},H(t){try{return JSON.parse(ce.P(t))||null}catch{}return null},F(t,e){try{return v?.sessionStorage.setItem(t,JSON.stringify(e)),!0}catch(r){ce.j(r)}return!1},q(t){try{v?.sessionStorage.removeItem(t)}catch(e){ce.j(e)}}};class hp{constructor(e){this._instance=e}get Ne(){return this._instance.config}get consent(){return this.ti()?0:this.ei}isOptedOut(){return this.Ne.cookieless_mode===ht||this.isRejected()||this.consent===-1&&this.Ne.cookieless_mode===Ht}isOptedIn(){return!this.isOptedOut()}isExplicitlyOptedOut(){return this.consent===0}isRejected(){return this.consent===0||this.consent===-1&&this.Ne.opt_out_capturing_by_default}optInOut(e){this.ii.F(this.ri,e?1:0,this.Ne.cookie_expiration,this.Ne.cross_subdomain_cookie,this.Ne.secure_cookie)}reset(){this.ii.q(this.ri,this.Ne.cross_subdomain_cookie)}get ri(){var e=this._instance.config,r=e.token,s=e.opt_out_capturing_cookie_prefix;return e.consent_persistence_name||(s?s+r:"__ph_opt_in_out_"+r)}get ei(){var e=this.ii.P(this.ri);return Yi(e)?1:M(vh,e)?0:-1}get ii(){var e=this.Ne.opt_out_capturing_persistence_type,r=e==="localStorage"?Q:pt;if(!this.ni||this.ni!==r){this.ni=r;var s=e==="localStorage"?pt:Q;s.P(this.ri)&&(this.ni.P(this.ri)||this.optInOut(Yi(s.P(this.ri))),s.q(this.ri,this.Ne.cross_subdomain_cookie))}return this.ni}ti(){return!!this.Ne.respect_dnt&&[ke?.doNotTrack,ke?.msDoNotTrack,$.doNotTrack].some((e=>Yi(e)))}}function yu(t,e){var r,s=t==null||(r=t.config)==null?void 0:r.get_current_url;if(!Se(s))return e;try{var i=s(e);return W(i)&&i?i:e}catch(n){return k.error("Error in get_current_url, falling back to window.location.href",n),e}}var wu="__POSTHOG_TOOLBAR__",pp=1,fp=3,gp=11;function rl(t){return t instanceof Element&&(t.id===wu||!(t.closest==null||!t.closest(".toolbar-global-fade-container")))}function Ft(t){return!!t&&t.nodeType===pp}function Me(t,e){return!!t&&!!t.tagName&&t.tagName.toLowerCase()===e.toLowerCase()}function bu(t){return!!t&&t.nodeType===fp}function Eu(t){return!!t&&t.nodeType===gp&&Ft(t.host)}var Su=1e3;function Go(t){return t?Fi(t).split(/\s+/):[]}function sl(t,e){var r=(function(s){var i,n=v==null||(i=v.location)==null?void 0:i.href;return x(n)?void 0:yu(s,n)})(e);return!!(r&&t&&t.some((s=>r.match(s))))}function ai(t){var e="";switch(typeof t.className){case"string":e=t.className;break;case"object":e=(t.className&&"baseVal"in t.className?t.className.baseVal:null)||t.getAttribute("class")||"";break;default:e=""}return Go(e)}function xu(t){return D(t)?null:Fi(t).split(/(\s+)/).filter((e=>Kr(e))).join("").replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)}function ss(t){var e="";return io(t)&&!Fu(t)&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(r){var s;bu(r)&&r.textContent&&(e+=(s=xu(r.textContent))!==null&&s!==void 0?s:"")})),Fi(e)}function an(t){var e;return x(t.target)?t.srcElement||null:(e=t.target)!=null&&e.shadowRoot?t.composedPath()[0]||null:t.target||null}var Ko=["a","button","form","input","select","textarea","label"];function so(t,e){if(x(e))return!0;var r,s=function(n){if(e.some((o=>(function(a,l){var u=a.matches||a.matchesSelector||a.msMatchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.oMatchesSelector;try{return!!u&&u.call(a,l)}catch{return!1}})(n,o))))return{v:!0}};for(var i of t)if(r=s(i))return r.v;return!1}function ku(t){var e=t.parentNode;return!(!e||!Ft(e))&&e}var mp=[".ph-no-autocapture","[data-ph-no-autocapture]"],Iu=["next","previous","prev",">","<"],vp=[...Iu,"+","-","−","–"],il=(t,e)=>/[a-z0-9]/i.test(e)?t.includes(e):t===e,nl=[".ph-no-rageclick",".ph-no-capture"],_p=["","text","search","email","password","url","tel","number"];function ol(t,e){if(!v||Jo(t))return!1;var r,s,i,n,o;if(Ke(e)?(r=!!e&&nl,s=void 0,i=!1):(r=(n=e?.css_selector_ignorelist)!==null&&n!==void 0?n:nl,s=e?.content_ignorelist,i=(o=e?.ignore_text_selection)!==null&&o!==void 0&&o),r===!1||i&&(function(l){return!(!l||!Ft(l))&&(!!Me(l,"textarea")||(Me(l,"input")?M(_p,(l.getAttribute("type")||"").toLowerCase()):(function(u){if(u.isContentEditable)return!0;var c=u.getAttribute==null?void 0:u.getAttribute("contenteditable");return c==="true"||c===""})(l)))})(t))return!1;var a=Cu(t,!1).targetElementList;return!(function(l,u){if(l===!1||x(l))return!1;var c;if(l===!0)c=Iu;else{if(!L(l))return!1;if(l.length>10)return k.error("[PostHog] content_ignorelist array cannot exceed 10 items. Use css_selector_ignorelist for more complex matching."),!1;c=l.map((d=>d.toLowerCase()))}return u.some((d=>{var h=d.safeText,p=d.ariaLabel;return c.some((f=>il(h,f)||il(p,f)))}))})(s,a.map((l=>{var u;return{safeText:ss(l).toLowerCase(),ariaLabel:((u=l.getAttribute("aria-label"))==null?void 0:u.toLowerCase().trim())||""}})))&&!so(a,r)}var Jo=t=>!t||Me(t,"html")||!Ft(t),Cu=(t,e)=>{if(!v||Jo(t))return{parentIsUsefulElement:!1,targetElementList:[]};for(var r=!1,s=[t],i=t;i.parentNode&&!Me(i,"body");)if(Eu(i.parentNode))s.push(i.parentNode.host),i=i.parentNode.host;else{var n=ku(i);if(!n)break;if(e||Ko.indexOf(n.tagName.toLowerCase())>-1)r=!0;else try{var o=v.getComputedStyle(n);o&&o.getPropertyValue("cursor")==="pointer"&&(r=!0)}catch{}s.push(n),i=n}return{parentIsUsefulElement:r,targetElementList:s}};function io(t){for(var e=new Set,r=0,s=t;s.parentNode&&!Me(s,"body");s=s.parentNode){if(r++>=Su||e.has(s))return!1;e.add(s);var i=ai(s);if(M(i,"ph-sensitive")||M(i,"ph-no-capture"))return!1}if(M(ai(t),"ph-include"))return!0;var n=t.type||"";if(W(n))switch(n.toLowerCase()){case"hidden":case"password":return!1}var o=t.name||t.id||"";return!W(o)||!/^cc|cardnum|ccnum|creditcard|csc|cvc|cvv|exp|pass|pwd|routing|seccode|securitycode|securitynum|socialsec|socsec|ssn/i.test(o.replace(/[^a-zA-Z0-9]/g,""))}function Fu(t){return!!(Me(t,"input")&&!["button","checkbox","submit","reset"].includes(t.type)||Me(t,"select")||Me(t,"textarea")||t.getAttribute("contenteditable")==="true")}var al=new RegExp("^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$"),ll=/(^|[^0-9A-Za-z_])([0-9][0-9 -]*[0-9])(?=$|[^0-9A-Za-z_])/g,yp=[16,15,14,13],wp=new RegExp("^(\\d{3}-?\\d{2}-?\\d{4})$"),cl=new RegExp("(^|[^0-9])((?!000|666)[0-9]{3}-?(?!00)[0-9]{2}-?(?!0000)[0-9]{4})(?=$|([^0-9]))","g"),ul=/[0-9A-Za-z_]/;function bp(t){for(var e=0,r=!1,s=t.length-1;s>=0;s--){var i=t.charCodeAt(s)-48;r&&(i*=2)>9&&(i-=9),e+=i,r=!r}return e%10==0}function Kr(t,e){if(e===void 0&&(e=!0),D(t))return!1;if(W(t)){t=Fi(t);var r=e?al.test((t||"").replace(/[- ]/g,"")):(function(i){var n;for(ll.lastIndex=0;n=ll.exec(i);){var o=n[2];if(o)for(var a=o.replace(/[- ]/g,""),l=0;a.length>l;l++)for(var u of yp){var c=l+u;if(a.length>=c){var d=a.slice(l,c);if(al.test(d)&&bp(d))return!0}}}return!1})(t);if(r)return!1;var s=e?wp.test(t):(function(i){var n;for(cl.lastIndex=0;n=cl.exec(i);){var o=n[1],a=n[3];if(!(o&&a&&ul.test(o)&&ul.test(a)))return!0}return!1})(t);if(s)return!1}return!0}function dl(t){var e=ss(t);return Kr(e=(e+" "+Pu(t)).trim())?e:""}function Pu(t){var e="";return t&&t.childNodes&&t.childNodes.length&&Z(t.childNodes,(function(r){var s;if(r&&((s=r.tagName)==null?void 0:s.toLowerCase())==="span")try{var i=ss(r);e=(e+" "+i).trim(),r.childNodes&&r.childNodes.length&&(e=(e+" "+Pu(r)).trim())}catch(n){k.error("[AutoCapture]",n)}})),e}function hl(t){return t.replace(/"|\\"/g,'\\"')}function Ep(t){var e=t.attr__class;if(e)return L(e)?e:Go(e)}var xs=re("[Dead Clicks]"),Sp=()=>!0,xp=t=>{var e,r=!((e=t.instance.persistence)==null||!e.get_property(Ho)),s=t.instance.config.capture_dead_clicks;return Ke(s)?s:!!te(s)||r};class pl{get lazyLoadedDeadClicksAutocapture(){return this.si}constructor(e,r,s){this.instance=e,this.isEnabled=r,this.onCapture=s,this.startIfEnabledOrStop()}onRemoteConfig(e){if(e.ok){var r=e.config;"captureDeadClicks"in r&&(this.instance.persistence&&this.instance.persistence.register({[Ho]:r.captureDeadClicks}),this.startIfEnabledOrStop())}}startIfEnabledOrStop(){this.isEnabled(this)?this.ai((()=>{this.oi()})):this.stop()}ai(e){var r,s;(r=$.__PosthogExtensions__)!=null&&r.initDeadClicksAutocapture?e():(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this.instance,"dead-clicks-autocapture",(i=>{i?xs.error("failed to load script",i):e()}))}oi(){var e;if(C){if(!this.si&&(e=$.__PosthogExtensions__)!=null&&e.initDeadClicksAutocapture){var r=te(this.instance.config.capture_dead_clicks)?E({},this.instance.config.capture_dead_clicks):{};r.__onCapture=this.onCapture,this.onCapture&&(r.capture_dead_swipes=!1),this.si=$.__PosthogExtensions__.initDeadClicksAutocapture(this.instance,r),this.si.start(C),xs.info("starting...")}}else xs.error("`document` not found. Cannot start.")}stop(){this.si&&(this.si.stop(),this.si=void 0,xs.info("stopping..."))}}var ln=re("[SegmentIntegration]"),Au="posthog-js";function $u(t,e){var r=e===void 0?{}:e,s=r.organization,i=r.projectId,n=r.prefix,o=r.severityAllowList,a=o===void 0?["error"]:o,l=r.sendExceptionsToPostHog,u=l===void 0||l;return c=>{var d,h,p,f,m;if(a!=="*"&&!a.includes(c.level)||!t.__loaded)return c;c.tags||(c.tags={});var g=t.requestRouter.endpointFor("ui","/project/"+t.config.token+"/person/"+t.get_distinct_id());c.tags["PostHog Person URL"]=g,t.sessionRecordingStarted()&&(c.tags["PostHog Recording URL"]=t.get_session_replay_url({withTimestamp:!0}));var _,w=((d=c.exception)==null?void 0:d.values)||[],b=w.map((F=>E({},F,{stacktrace:F.stacktrace?E({},F.stacktrace,{type:"raw",frames:(F.stacktrace.frames||[]).map((P=>E({},P,{platform:"web:javascript"})))}):void 0}))),I={$exception_message:((h=w[0])==null?void 0:h.value)||c.message,$exception_type:(p=w[0])==null?void 0:p.type,$exception_level:c.level,$exception_list:b,$sentry_event_id:c.event_id,$sentry_exception:c.exception,$sentry_exception_message:((f=w[0])==null?void 0:f.value)||c.message,$sentry_exception_type:(m=w[0])==null?void 0:m.type,$sentry_tags:c.tags};return s&&i&&(I.$sentry_url=(n||"https://sentry.io/organizations/")+s+"/issues/?project="+i+"&query="+c.event_id),u&&((_=t.exceptions)==null||_.sendExceptionEvent(I)),c}}class kp{constructor(e,r,s,i,n,o){this.name=Au,this.setupOnce=function(a){a($u(e,{organization:r,projectId:s,prefix:i,severityAllowList:n,sendExceptionsToPostHog:o==null||o}))}}}class fl{constructor(e){this.li=(r,s,i)=>{i&&(i.noSessionId||i.activityTimeout||i.sessionPastMaximumLength||i.crossTabAdoption)&&(k.info("[PageViewManager] Session rotated, clearing pageview state",{sessionId:r,changeReason:i}),this.ui=void 0,this._instance.scrollManager.resetContext())},this._instance=e,this.hi()}hi(){var e;this.di=(e=this._instance.sessionManager)==null?void 0:e.onSessionId(this.li)}destroy(){var e;(e=this.di)==null||e.call(this),this.di=void 0}doPageView(e,r){var s,i=this.vi(e,r);return this.ui={pathname:(s=v?.location.pathname)!==null&&s!==void 0?s:"",pageViewId:r,timestamp:e},this._instance.scrollManager.resetContext(),i}doPageLeave(e){var r;return this.vi(e,(r=this.ui)==null?void 0:r.pageViewId)}doEvent(){var e;return{$pageview_id:(e=this.ui)==null?void 0:e.pageViewId}}vi(e,r){var s=this.ui;if(!s)return{$pageview_id:r};var i={$pageview_id:r,$prev_pageview_id:s.pageViewId},n=this._instance.scrollManager.getContext();if(n&&!this._instance.config.disable_scroll_properties){var o=n.maxScrollHeight,a=n.lastScrollY,l=n.maxScrollY,u=n.maxContentHeight,c=n.lastContentY,d=n.maxContentY;if(!(x(o)||x(a)||x(l)||x(u)||x(c)||x(d))){o=Math.ceil(o),a=Math.ceil(a),l=Math.ceil(l),u=Math.ceil(u),c=Math.ceil(c),d=Math.ceil(d);var h=o>1?st(a/o,0,1,k):1,p=o>1?st(l/o,0,1,k):1,f=u>1?st(c/u,0,1,k):1,m=u>1?st(d/u,0,1,k):1;i=ee(i,{$prev_pageview_last_scroll:a,$prev_pageview_last_scroll_percentage:h,$prev_pageview_max_scroll:l,$prev_pageview_max_scroll_percentage:p,$prev_pageview_last_content:c,$prev_pageview_last_content_percentage:f,$prev_pageview_max_content:d,$prev_pageview_max_content_percentage:m})}}return s.pathname&&(i.$prev_pageview_pathname=s.pathname),s.timestamp&&(i.$prev_pageview_duration=(e.getTime()-s.timestamp.getTime())/1e3),i}}var cn=["flags","surveys"],Ip={[au]:{exposure:"hidden"},[Br]:{exposure:"hidden"},__cmpns:{exposure:"hidden"},[jr]:{exposure:"hidden"},[Un]:{exposure:"event"},[Hn]:{exposure:"hidden"},[Wn]:{exposure:"event"},[zn]:{exposure:"hidden"},[qn]:{exposure:"event"},[Vn]:{exposure:"event"},[Ho]:{exposure:"event"},[Wo]:{exposure:"hidden"},[Gn]:{exposure:"event"},[qt]:{exposure:"hidden"},$session_recording_enabled_server_side:{exposure:"hidden"},[lr]:{exposure:"hidden"},[zo]:{exposure:"event"},[lu]:{exposure:"event",shouldSkipFromEventProperties:t=>$e(t)},$session_past_minimum_duration:{exposure:"event"},$session_recording_url_trigger_activated_session:{exposure:"event"},$session_recording_event_trigger_activated_session:{exposure:"event"},$debug_first_full_snapshot_timestamp:{exposure:"event"},$sess_rec_flush_size:{exposure:"hidden"},[Bt]:{exposure:"hidden",storageGroup:"flags"},[Ur]:{exposure:"hidden",storageGroup:"flags"},[Rs]:{exposure:"hidden"},[Kn]:{exposure:"hidden",storageGroup:"flags"},[Hr]:{exposure:"hidden",storageGroup:"flags"},[Ts]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[ei]:{exposure:"hidden",storageGroup:"flags"},[et]:{exposure:"hidden"},[jt]:{exposure:"hidden"},[ct]:{exposure:"hidden"},[Ut]:{exposure:"hidden"},[Jn]:{exposure:"hidden",storageGroup:"surveys"},[ti]:{exposure:"hidden",storageGroup:"surveys",volatile:!0},[Yn]:{exposure:"event"},[Ns]:{exposure:"hidden"},[Ms]:{exposure:"hidden"},[Wr]:{exposure:"hidden"},$product_tours_activated:{exposure:"hidden"},$product_tours_activated_session:{exposure:"hidden"},$conversations_widget_session_id:{exposure:"event"},$conversations_ticket_id:{exposure:"event"},$conversations_widget_state:{exposure:"event"},$conversations_user_traits:{exposure:"event"},[Wt]:{exposure:"hidden"},[zr]:{exposure:"hidden"},[Ls]:{exposure:"hidden"},[Gr]:{exposure:"hidden",storageGroup:"flags",volatile:!0},[He]:{exposure:"hidden"},[Zn]:{exposure:"hidden"},[Xn]:{exposure:"hidden"},[Qn]:{exposure:"hidden"},[eo]:{exposure:"hidden"},[ri]:{exposure:"hidden"},[si]:{exposure:"hidden"},[cu]:{exposure:"event"},[uu]:{exposure:"event"},[du]:{exposure:"event"},[hu]:{exposure:"event"},[fu]:{exposure:"event"},[gu]:{exposure:"event"},[mu]:{exposure:"event"},$sdk_debug_replay_event_trigger_status:{exposure:"event"},$sdk_debug_replay_linked_flag_trigger_status:{exposure:"event"},$sdk_debug_replay_matched_recording_trigger_groups:{exposure:"event"},$sdk_debug_replay_remote_trigger_matching_config:{exposure:"event"},$sdk_debug_replay_trigger_groups_count:{exposure:"event"},$sdk_debug_replay_url_trigger_status:{exposure:"event"},$session_recording_start_reason:{exposure:"event"}},Cp=[["$posthog_sr_group_event_trigger_",{exposure:"hidden"}],["$posthog_sr_group_url_trigger_",{exposure:"hidden"}],["$posthog_sr_group_sampling_",{exposure:"hidden"}]],Mt=t=>{var e=Ip[t];if(e)return e;for(var r of Cp){var s=r[1];if(t.indexOf(r[0])===0)return s}},cr=(t,e)=>{try{return JSON.stringify(t,((r,s)=>typeof s=="bigint"?s.toString():s),e)}catch{return Fc(t)}},li=t=>{var e=C?.createElement("a");return x(e)?null:(e.href=t,e)},mr=function(t,e){for(var r,s=((t.split("#")[0]||"").split(/\?(.*)/)[1]||"").replace(/^\?+/g,"").split("&"),i=0;s.length>i;i++){var n=s[i].split("=");if(n[0]===e){r=n;break}}if(!L(r)||2>r.length)return"";var o=r[1];try{o=decodeURIComponent(o)}catch{k.error("Skipping decoding for malformed query param: "+o)}return o.replace(/\+/g," ")},is=function(t,e,r){if(!t||!e||!e.length)return t;for(var s=t.split("#"),i=s[1],n=(s[0]||"").split("?"),o=n[1],a=n[0],l=(o||"").split("&"),u=[],c=0;l.length>c;c++){var d=l[c].split("=");L(d)&&(e.includes(d[0])?u.push(d[0]+"="+r):u.push(l[c]))}var h=a;return o!=null&&(h+="?"+u.join("&")),i!=null&&(h+="#"+i),h},ci=function(t,e){var r=t.match(new RegExp(e+"=([^&]*)"));return r?r[1]:null},Ru=(t,e)=>t>=e&&kc(),Tu=(t,e,r,s)=>{if(t===0){if(kc()){var i=e+1;return i===r&&s(),i}return e}return 0},ks="https?://(.*)",vr=["gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],Fp=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid",...vr],ns="",Pp=["li_fat_id"];function Nu(t,e,r){if(!C)return{};var s,i=e?[...vr,...r||[]]:[],n=Mu(is(C.URL,i,ns),t),o=(s={},Z(Pp,(function(a){var l=vu(a);s[a]=l||null})),s);return ee(o,n)}function Mu(t,e){var r=Fp.concat(e||[]),s={};return Z(r,(function(i){var n=mr(t,i);s[i]=n||null})),s}function Lu(t){var e=(function(n){return n?n.search(ks+"google.([^/?]*)")===0?"google":n.search(ks+"bing.com")===0?"bing":n.search(ks+"yahoo.com")===0?"yahoo":n.search(ks+"duckduckgo.com")===0?"duckduckgo":null:null})(t),r=e!="yahoo"?"q":"p",s={};if(!$e(e)){s.$search_engine=e;var i=C?mr(C.referrer,r):"";i.length&&(s.ph_keyword=i)}return s}function gl(){return navigator.language||navigator.userLanguage}var ui="$direct";function Ou(){return C?.referrer||ui}function Du(t,e,r){r===void 0&&(r=!1);var s=t?[...vr,...e||[]]:[],i=r?Ct(se?.href):se?.href,n=i?.substring(0,1e3);return{r:Ou().substring(0,1e3),u:n?is(n,s,ns):void 0}}function Bu(t,e){var r;e===void 0&&(e=!1);var s=t.r,i=t.u,n=e?Ct(i):i,o={$referrer:s,$referring_domain:s==null?void 0:s==ui?ui:(r=li(s))==null?void 0:r.host};if(n){o.$current_url=n;var a=li(n);o.$host=a?.host,o.$pathname=a?.pathname;var l=Mu(n);ee(o,l)}if(s){var u=Lu(s);ee(o,u)}return o}function ju(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function Ap(){try{return new Date().getTimezoneOffset()}catch{return}}var $p={flags:Gr,surveys:ti},Rp=["cookie","localstorage","localstorage+cookie","sessionstorage","memory"],tr="main";class un{constructor(e,r,s){if(s===void 0&&(s=!0),this.ci={},this.fi=!1,this.pi=!1,this.Ne=e,this.gi=s,this.props={},this.mi=void 0,this.yi=(n=>{var o="";return n.token&&(o=n.token.replace(/\+/g,"PL").replace(/\//g,"SL").replace(/=/g,"EQ")),n.persistence_name?"ph_"+n.persistence_name:"ph_"+o+"_posthog"})(e),this.ii=this.bi(e),this.pi=this.wi(e),this.load(),e.debug&&k.info("Persistence loaded",e.persistence,E({},this.props)),this.update_config(e,e,r),this.save(),v){var i=()=>this.flush();ie(v,"beforeunload",i,{capture:!1}),ie(v,"pagehide",i,{capture:!1})}}ki(){var e,r=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return he(r)&&r>0?r:0}isDisabled(){return!!this.xi}bi(e){Rp.indexOf(e.persistence.toLowerCase())===-1&&(k.critical("Unknown persistence type "+e.persistence+"; falling back to localStorage+cookie"),e.persistence="localStorage+cookie");var r,s=(function(o,a){o===void 0&&(o=[]),a===void 0&&(a=!1);var l=[...up,...o];return E({},Q,{H(u){try{var c={};try{c=pt.H(u)||{}}catch{}var d,h=JSON.parse(Q.P(u)||"{}");if(a){var p={};for(var f in c){var m=c[f];$e(m)||m===""||(p[f]=m)}d=ee(h,p)}else d=ee(c,h);return Q.F(u,d),d}catch{}return null},F(u,c,d,h,p,f){var m=Q.F(u,c,void 0,void 0,f);try{var g={};l.forEach((_=>{c[_]&&(g[_]=c[_])})),Object.keys(g).length&&pt.F(u,g,d,h,p,f)}catch(_){Q.j(_)}return m},q(u,c){try{v?.localStorage.removeItem(u),pt.q(u,c)}catch(d){Q.j(d)}}})})(e.cookie_persisted_properties||[],e.__preview_cookie_wins_on_conflict||!1),i=!1,n=e.persistence.toLowerCase();return n==="localstorage"&&Q.N()?(r=Q,i=!0):n==="localstorage+cookie"&&s.N()?(r=s,i=!0):n==="sessionstorage"&&ce.N()?r=ce:n==="memory"?r=dp:n==="cookie"?r=pt:s.N()?(r=s,i=!0):r=pt,this.fi=i,r}Si(e){return this.yi+"__"+e}wi(e){return this.fi&&!!e.split_storage}properties(){var e={};return Z(this.props,((r,s)=>{var i=Mt(s);if(!i||i.exposure==="event"){if(i!=null&&i.shouldSkipFromEventProperties!=null&&i.shouldSkipFromEventProperties(r))return;e[s]=r}})),e}load(){if(!this.xi){var e=this.ii.H(this.yi);e&&(this.props=ee({},e)),this.pi&&this.Ci()}}Ci(){for(var e of cn){var r=Q.H(this.Si(e));if(r&&!mt(r)){var s=this.Mi(e);s.persisted=!0,this.Ti(e)||(s.fingerprint=this.Ei(r,e)),this.Ii(e,r)||ee(this.props,r)}}}Ti(e){return Object.keys(this.props).some((r=>{var s;return((s=Mt(r))==null?void 0:s.storageGroup)===e}))}Ii(e,r){var s=$p[e];if(!s)return!1;var i=r[s],n=this.props[s];return he(i)&&he(n)&&n>i}refreshKey(e){var r;if(!this.xi){var s=this.pi?(r=Mt(e))==null?void 0:r.storageGroup:void 0,i=s?Q.H(this.Si(s)):this.ii.H(this.yi);if(i&&e in i)this.Pi(e,i[e]);else{if(s){var n=this.ii.H(this.yi);if(n&&e in n)return void this.Pi(e,n[e])}this.Ri(e)}}}save(){if(!this.xi){var e=this.ki();e>0?x(this.Ai)&&(this.Ai=setTimeout((()=>{this.Ai=void 0,this.Fi()}),e)):this.Fi()}}flush(){x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0,this.Fi())}Fi(){this.xi||(this.pi?this.Li():this.Oi(this.ii,this.yi,this.props,tr))}Li(){var e=this.Di(),r=e.main,s=e.groups;for(var i of(this.Oi(this.ii,this.yi,r,tr),cn)){var n,o=s[i];(!mt(o)||(n=this.ci[i])!=null&&n.persisted)&&this.Oi(Q,this.Si(i),o,i)}}Di(){var e={},r={flags:{},surveys:{}};return Z(this.props,((s,i)=>{var n,o=(n=Mt(i))==null?void 0:n.storageGroup;o?r[o][i]=s:e[i]=s})),{main:e,groups:r}}Ei(e,r){if(r===tr)return JSON.stringify(e)+"|"+this.$i+"|"+this.Ni+"|"+this.qi;var s={};return Z(e,((i,n)=>{var o;s[n]=(o=Mt(n))!=null&&o.volatile?"__volatile__":i})),JSON.stringify(s)}Oi(e,r,s,i){var n=this.Mi(i);if(i===tr||n.dirty||x(n.fingerprint)){var o;try{if((o=this.Ei(s,i))===n.fingerprint)return void(n.dirty=!1)}catch{o=void 0}e.F(r,s,this.$i,this.Ni,this.qi,this.Ne.debug)?(n.dirty=!1,i!==tr&&(n.persisted=!0),x(o)||(n.fingerprint=o)):this.Ne.debug&&k.warn('failed to persist storage entry "'+r+'"; will retry on next save')}}remove(e){var r=(e===void 0?{}:e).keepGroupEntries,s=r!==void 0&&r;if(x(this.Ai)||(clearTimeout(this.Ai),this.Ai=void 0),this.ii.q(this.yi,!1),this.ii.q(this.yi,!0),!s&&this.gi)for(var i of cn)Q.q(this.Si(i));s?delete this.ci[tr]:this.ci={}}clear(){this.remove(),this.props={}}register_once(e,r,s){if(te(e)){x(r)&&(r="None"),this.$i=x(s)?this.ji:s;var i=!1;if(Z(e,((n,o)=>{this.props.hasOwnProperty(o)&&this.props[o]!==r||(this.Pi(o,n),i=!0)})),i)return this.save(),!0}return!1}register(e,r){if(te(e)){this.$i=x(r)?this.ji:r;var s=!1;if(Z(e,((i,n)=>{e.hasOwnProperty(n)&&(this.props[n]!==i||te(i)||L(i))&&(this.Pi(n,i),s=!0)})),s)return this.save(),!0}return!1}unregister(e){var r=typeof e=="string"?[e]:e,s=!1;for(var i of r)i in this.props&&(this.Ri(i),s=!0);s&&this.save()}update_campaign_params(){var e=C?.URL;if(e!==this.mi){var r=Nu(this.Ne.custom_campaign_params,this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties);mt(Vo(r))||this.register(r),this.mi=e}}update_search_keyword(){var e;this.register((e=C?.referrer)?Lu(e):{})}update_referrer_info(){var e;this.register_once({$referrer:Ou(),$referring_domain:C!=null&&C.referrer&&((e=li(C.referrer))==null?void 0:e.host)||ui},void 0)}set_initial_person_info(){this.props[Qn]||this.props[eo]||this.register_once({[ri]:Du(this.Ne.mask_personal_data_properties,this.Ne.custom_personal_data_properties,this.Ne.disable_capture_url_hashes)},void 0)}get_initial_props(){var e={};Z([eo,Qn],(i=>{var n=this.props[i];n&&Z(n,(function(o,a){e["$initial_"+Nn(a)]=o}))}));var r=this.props[ri];if(r){var s=(function(i,n){n===void 0&&(n=!1);var o=Bu(i,n),a={};return Z(o,(function(l,u){a["$initial_"+Nn(u)]=l})),a})(r,this.Ne.disable_capture_url_hashes);ee(e,s)}return e}safe_merge(e){return Z(this.props,(function(r,s){s in e||(e[s]=r)})),e}update_config(e,r,s){this.ji=this.$i=e.cookie_expiration,this.set_disabled(e.disable_persistence||!!s),this.set_cross_subdomain(e.cross_subdomain_cookie),this.set_secure(e.secure_cookie);var i=e.persistence!==r.persistence||!((l,u)=>{if(l.length!==u.length)return!1;var c=[...l].sort(),d=[...u].sort();return c.every(((h,p)=>h===d[p]))})(e.cookie_persisted_properties||[],r.cookie_persisted_properties||[]),n=i?this.bi(e):this.ii,o=this.wi(e);if(i||o!==this.pi){var a=this.props;this.clear(),this.ii=n,this.pi=o,this.props=a,this.save()}}set_disabled(e){this.xi=e,this.xi?this.remove():this.save()}set_cross_subdomain(e){e!==this.Ni&&(this.Ni=e,this.remove({keepGroupEntries:!0}),this.save())}set_secure(e){e!==this.qi&&(this.qi=e,this.remove({keepGroupEntries:!0}),this.save())}set_event_timer(e,r){var s=this.props[jr]||{};s[e]=r,this.Pi(jr,s),this.save()}remove_event_timer(e){var r=this.props[jr]||{},s=r[e];return x(s)||(delete r[e],this.Pi(jr,r),this.save()),s}get_property(e){return this.props[e]}set_property(e,r){this.Pi(e,r),this.save()}Pi(e,r){var s;this.props[e]=r,(s=Mt(e))!=null&&s.volatile||this.Bi(e)}Ri(e){delete this.props[e],this.Bi(e)}Bi(e){var r,s=(r=Mt(e))==null?void 0:r.storageGroup;s&&(this.Mi(s).dirty=!0)}Mi(e){return this.ci[e]||(this.ci[e]={})}}function Is(t){var e=!0;return{dispose(){if(e){e=!1;var r=t();r&&Se(r.then)&&r.then(void 0,(()=>{}))}}}}var xe={GZipJS:"gzip-js",Base64:"base64"},Ar={Activation:"events",Cancellation:"cancelEvents"},dn={Popover:"popover",API:"api",Widget:"widget"},ft={SHOWN:"survey shown",DISMISSED:"survey dismissed",SENT:"survey sent"},hn={SURVEY_ID:"$survey_id",SURVEY_ITERATION:"$survey_iteration",SURVEY_LAST_SEEN_DATE:"$survey_last_seen_date"},no={Popover:"popover",Inline:"inline"},Tp={SHOWN:"product tour shown"},ml={TOUR_LAST_SEEN_DATE:"$product_tour_last_seen_date",TOUR_TYPE:"$product_tour_type"},vl=re("[RateLimiter]");class Np{constructor(e){this.serverLimits={},this.lastEventRateLimited=!1,this.checkForLimiting=r=>{var s=r.text;if(s&&s.length)try{(JSON.parse(s).quota_limited||[]).forEach((i=>{vl.info((i||"events")+" is quota limited."),this.serverLimits[i]=new Date().getTime()+6e4}))}catch(i){return void vl.warn('could not rate limit - continuing. Error: "'+i?.message+'"',{text:s})}},this.instance=e,this.lastEventRateLimited=this.clientRateLimitContext(!0).isRateLimited}get captureEventsPerSecond(){var e;return((e=this.instance.config.rate_limiting)==null?void 0:e.events_per_second)||10}get captureEventsBurstLimit(){var e;return Math.max(((e=this.instance.config.rate_limiting)==null?void 0:e.events_burst_limit)||10*this.captureEventsPerSecond,this.captureEventsPerSecond)}clientRateLimitContext(e){var r,s,i;e===void 0&&(e=!1);var n=this.captureEventsBurstLimit,o=this.captureEventsPerSecond,a=new Date().getTime(),l=(r=(s=this.instance.persistence)==null?void 0:s.get_property(Xn))!==null&&r!==void 0?r:{tokens:n,last:a};l.tokens+=(a-l.last)/1e3*o,l.last=a,l.tokens>n&&(l.tokens=n);var u=1>l.tokens;if(u||e||(l.tokens=Math.max(0,l.tokens-1)),u&&!e){var c=(he(l.dropped)?l.dropped:0)+1;l.dropped=c,!this.lastEventRateLimited&&this.Hi(c)&&(l.dropped=0)}return this.lastEventRateLimited=u,(i=this.instance.persistence)==null||i.set_property(Xn,l),{isRateLimited:u,remainingTokens:l.tokens}}Ui(e){var r=this.instance.config.property_denylist;return!L(r)||!r.includes(e)}zi(){var e;if(this.Ui("$current_url")&&this.Ui("$pathname")&&se!=null&&se.pathname)return""+((e=se.origin)!==null&&e!==void 0?e:"")+se.pathname}Hi(e){var r,s,i=this.captureEventsBurstLimit,n=this.captureEventsPerSecond,o=this.zi(),a=this.Ui("$session_id")?(r=(s=this.instance).get_session_id)==null?void 0:r.call(s):void 0,l=[e+" event(s) dropped since the last warning",o?"triggered on "+o:void 0,a?"session "+a:void 0].filter(Boolean).join(", ");return!!this.instance.capture("$$client_ingestion_warning",{$$client_ingestion_warning_message:"posthog-js client rate limited: "+l+". Config is set to "+n+" events per second and "+i+" events burst limit."},{skip_client_rate_limiting:!0})}isServerRateLimited(e){var r=this.serverLimits[e||"events"]||!1;return r!==!1&&new Date().getTime()e(this.remoteConfig))):e()}Vi(e){this._instance._send_request({method:"GET",url:this._instance.requestRouter.endpointFor("assets","/array/"+this._instance.config.token+"/config"),callback:e})}load(){try{if(this.remoteConfig)return xt.info("Using preloaded remote config",this.remoteConfig),this.Zi(this.remoteConfig),void this.Gi();if(this._instance.Qi())return void xt.warn("Remote config is disabled. Falling back to local config.");this.Wi((e=>{if(!e)return xt.info("No config found after loading remote JS config. Falling back to JSON."),void this.Vi((r=>{this.Zi(r.json,r),this.Gi()}));this.Zi(e),this.Gi()}))}catch(e){xt.error("Error loading remote config",e),this.Zi()}}stop(){this.Ki&&(clearInterval(this.Ki),this.Ki=void 0)}refresh(){!this._instance.Qi()&&C&&C.visibilityState!=="hidden"&&this._instance.reloadFeatureFlags()}Gi(){var e;if(!this.Ki){var r=(e=this._instance.config.remote_config_refresh_interval_ms)!==null&&e!==void 0?e:3e5;r!==0&&(this.Ki=setInterval((()=>{this.refresh()}),r))}}Zi(e,r){!e&&r&&(r.statusCode===0?r.error||xt.warn("Failed to fetch remote config from PostHog."):xt.error("Failed to fetch remote config from PostHog."));try{this._instance.Zi(e?{ok:!0,config:e}:{ok:!1})}catch(i){xt.error("Error applying remote config",i)}if(e?.hasFeatureFlags!==!1&&!this._instance.config.advanced_disable_feature_flags_on_first_load)try{var s;(s=this._instance.featureFlags)==null||s.ensureFlagsLoaded()}catch(i){xt.error("Error loading feature flags",i)}}}var qe=Uint8Array,Ae=Uint16Array,_r=Uint32Array,Yo=new qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Zo=new qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),_l=new qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hu=function(t,e){for(var r=new Ae(31),s=0;31>s;++s)r[s]=e+=1<s;++s)for(var n=r[s];r[s+1]>n;++n)i[n]=n-r[s]<<5|s;return[r,i]},Wu=Hu(Yo,2),oo=Wu[1];Wu[0][28]=258,oo[258]=28;for(var yl=Hu(Zo,0)[1],zu=new Ae(32768),ne=0;32768>ne;++ne){var rr=(43690&ne)>>>1|(21845&ne)<<1;zu[ne]=((65280&(rr=(61680&(rr=(52428&rr)>>>2|(13107&rr)<<2))>>>4|(3855&rr)<<4))>>>8|(255&rr)<<8)>>>1}var Jr=function(t,e,r){for(var s=t.length,i=0,n=new Ae(e);s>i;++i)++n[t[i]-1];var o,a=new Ae(e);for(i=0;e>i;++i)a[i]=a[i-1]+n[i-1]<<1;for(o=new Ae(s),i=0;s>i;++i)o[i]=zu[a[t[i]-1]++]>>>15-t[i];return o},Kt=new qe(288);for(ne=0;144>ne;++ne)Kt[ne]=8;for(ne=144;256>ne;++ne)Kt[ne]=9;for(ne=256;280>ne;++ne)Kt[ne]=7;for(ne=280;288>ne;++ne)Kt[ne]=8;var di=new qe(32);for(ne=0;32>ne;++ne)di[ne]=5;var Mp=Jr(Kt,9),Lp=Jr(di,5),qu=function(t){return(t/8>>0)+(7&t&&1)},Vu=function(t,e,r){(r==null||r>t.length)&&(r=t.length);var s=new(t instanceof Ae?Ae:t instanceof _r?_r:qe)(r-e);return s.set(t.subarray(e,r)),s},ot=function(t,e,r){var s=e/8>>0;t[s]|=r<<=7&e,t[s+1]|=r>>>8},$r=function(t,e,r){var s=e/8>>0;t[s]|=r<<=7&e,t[s+1]|=r>>>8,t[s+2]|=r>>>16},pn=function(t,e){for(var r=[],s=0;t.length>s;++s)t[s]&&r.push({s,f:t[s]});var i=r.length,n=r.slice();if(!i)return[new qe(0),0];if(i==1){var o=new qe(r[0].s+1);return o[r[0].s]=1,[o,1]}r.sort((function(F,P){return F.f-P.f})),r.push({s:-1,f:25001});var a=r[0],l=r[1],u=0,c=1,d=2;for(r[0]={s:-1,f:a.f+l.f,l:a,r:l};c!=i-1;)a=r[r[d].f>r[u].f?u++:d++],l=r[u!=c&&r[d].f>r[u].f?u++:d++],r[c++]={s:-1,f:a.f+l.f,l:a,r:l};var h=n[0].s;for(s=1;i>s;++s)n[s].s>h&&(h=n[s].s);var p=new Ae(h+1),f=ao(r[c-1],p,0);if(f>e){s=0;var m=0,g=f-e,_=1<s;++s){var w=n[s].s;if(e>=p[w])break;m+=_-(1<>>=g;m>0;){var b=n[s].s;e>p[b]?m-=1<=0&&m;--s){var I=n[s].s;p[I]==e&&(--p[I],++m)}f=e}return[new qe(p),f]},ao=function(t,e,r){return t.s==-1?Math.max(ao(t.l,e,r+1),ao(t.r,e,r+1)):e[t.s]=r},wl=function(t){for(var e=t.length;e&&!t[--e];);for(var r=new Ae(++e),s=0,i=t[0],n=1,o=function(l){r[s++]=l},a=1;e>=a;++a)if(t[a]==i&&a!=e)++n;else{if(!i&&n>2){for(;n>138;n-=138)o(32754);n>2&&(o(n>10?n-11<<5|28690:n-3<<5|12305),n=0)}else if(n>3){for(o(i),--n;n>6;n-=6)o(8304);n>2&&(o(n-3<<5|8208),n=0)}for(;n--;)o(i);n=1,i=t[a]}return[r.subarray(0,s),e]},Rr=function(t,e){for(var r=0,s=0;e.length>s;++s)r+=t[s]*e[s];return r},lo=function(t,e,r){var s=r.length,i=qu(e+2);t[i]=255&s,t[i+1]=s>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var n=0;s>n;++n)t[i+n+4]=r[n];return 8*(i+4+s)},bl=function(t,e,r,s,i,n,o,a,l,u,c){ot(e,c++,r),++i[256];for(var d=pn(i,15),h=d[0],p=d[1],f=pn(n,15),m=f[0],g=f[1],_=wl(h),w=_[0],b=_[1],I=wl(m),F=I[0],P=I[1],j=new Ae(19),S=0;w.length>S;++S)j[31&w[S]]++;for(S=0;F.length>S;++S)j[31&F[S]]++;for(var A=pn(j,7),R=A[0],N=A[1],T=19;T>4&&!R[_l[T-1]];--T);var O,J,z,H,oe=u+5<<3,pe=Rr(i,Kt)+Rr(n,di)+o,Ie=Rr(i,h)+Rr(n,m)+o+14+3*T+Rr(j,R)+(2*j[16]+3*j[17]+7*j[18]);if(pe>=oe&&Ie>=oe)return lo(e,c,t.subarray(l,l+u));if(ot(e,c,1+(pe>Ie)),c+=2,pe>Ie){O=Jr(h,p),J=h,z=Jr(m,g),H=m;var _e=Jr(R,N);for(ot(e,c,b-257),ot(e,c+5,P-1),ot(e,c+10,T-4),c+=14,S=0;T>S;++S)ot(e,c+3*S,R[_l[S]]);c+=3*T;for(var Ce=[w,F],Re=0;2>Re;++Re){var ae=Ce[Re];for(S=0;ae.length>S;++S)ot(e,c,_e[me=31&ae[S]]),c+=R[me],me>15&&(ot(e,c,ae[S]>>>5&127),c+=ae[S]>>>12)}}else O=Mp,J=Kt,z=Lp,H=di;for(S=0;a>S;++S)if(s[S]>255){var me;$r(e,c,O[257+(me=s[S]>>>18&31)]),c+=J[me+257],me>7&&(ot(e,c,s[S]>>>23&31),c+=Yo[me]);var ge=31&s[S];$r(e,c,z[ge]),c+=H[ge],ge>3&&($r(e,c,s[S]>>>5&8191),c+=Zo[ge])}else $r(e,c,O[s[S]]),c+=J[s[S]];return $r(e,c,O[256]),c+J[256]},Op=new _r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Dp=(function(){for(var t=new _r(256),e=0;256>e;++e){for(var r=e,s=9;--s;)r=(1&r&&3988292384)^r>>>1;t[e]=r}return t})(),fn=function(t,e,r){for(;r;++e)t[e]=r,r>>>=8};function Bp(t,e){e===void 0&&(e={});var r=(function(){var d=4294967295;return{p(h){for(var p=d,f=0;h.length>f;++f)p=Dp[255&p^h[f]]^p>>>8;d=p},d(){return 4294967295^d}}})(),s=t.length;r.p(t);var i,n,o,a,l,u=(a=10+((i=e).filename&&i.filename.length+1||0),l=8,(function(d,h,p,f,m,g){var _=d.length,w=new qe(f+_+5*(1+Math.floor(_/7e3))+m),b=w.subarray(f,w.length-m),I=0;if(!h||8>_)for(var F=0;_>=F;F+=65535){var P=F+65535;_>P?I=lo(b,I,d.subarray(F,P)):(b[F]=!0,I=lo(b,I,d.subarray(F,_)))}else{for(var j=Op[h-1],S=j>>>13,A=8191&j,R=(1<F;++F){var me=z(F),ge=32767&F,Ye=T[me];if(N[ge]=Ye,T[me]=ge,F>=Re){var Rt=_-F;if((Ie>7e3||Ce>24576)&&Rt>423){I=bl(d,b,0,H,oe,pe,_e,Ce,ae,F-ae,I),Ce=Ie=_e=0,ae=F;for(var de=0;286>de;++de)oe[de]=0;for(de=0;30>de;++de)pe[de]=0}var Ve=2,St=0,kr=A,Be=ge-Ye&32767;if(Rt>2&&me==z(F-Be))for(var Fe=Math.min(S,Rt)-1,ms=Math.min(32767,F),vs=Math.min(258,Rt);ms>=Be&&--kr&&ge!=Ye;){if(d[F+Ve]==d[F+Ve-Be]){for(var je=0;vs>je&&d[F+je]==d[F+je-Be];++je);if(je>Ve){if(Ve=je,St=Be,je>Fe)break;var _s=Math.min(Be,je-2),Xt=0;for(de=0;_s>de;++de){var Qt=F-Be+de+32768&32767,Ir=Qt-N[Qt]+32768&32767;Ir>Xt&&(Xt=Ir,Ye=Qt)}}}Be+=(ge=Ye)-(Ye=N[ge])+32768&32767}if(St){H[Ce++]=268435456|oo[Ve]<<18|yl[St];var Ta=31&oo[Ve],Na=31&yl[St];_e+=Yo[Ta]+Zo[Na],++oe[257+Ta],++pe[Na],Re=F+Ve,++Ie}else H[Ce++]=d[F],++oe[d[F]]}}I=bl(d,b,!0,H,oe,pe,_e,Ce,ae,F-ae,I)}return Vu(w,0,f+qu(I)+m)})(n=t,(o=e).level==null?6:o.level,o.mem==null?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(n.length)))):12+o.mem,a,l)),c=u.length;return(function(d,h){var p=h.filename;if(d[0]=31,d[1]=139,d[2]=8,d[8]=2>h.level?4:h.level==9?2:0,d[9]=3,h.mtime!=0&&fn(d,4,Math.floor(new Date(h.mtime||Date.now())/1e3)),p){d[3]=8;for(var f=0;p.length>=f;++f)d[f+10]=p.charCodeAt(f)}})(u,e),fn(u,c-8,r.d()),fn(u,c-4,s),u}var jp=!!$n||!!Mo,Gu="text/plain",Ds=!1,Ku=(t,e)=>{var r=t.split("#"),s=r[1],i=r[0].split("?"),n=i[0],o=i[1];if(!o)return t;var a=o.split("&").filter((l=>l.split("=")[0]!==e)).join("&");return n+(a?"?"+a:"")+(s?"#"+s:"")},Ai=function(t,e,r){var s;r===void 0&&(r=!0);var i=t.split("?"),n=i[0],o=i[1],a=E({},e),l=(s=o?.split("&").map((c=>{var d,h=c.split("="),p=h[0],f=r&&(d=a[p])!==null&&d!==void 0?d:h[1];return delete a[p],p+"="+f})))!==null&&s!==void 0?s:[],u=(function(c,d){var h,p;d===void 0&&(d="&");var f=[];return Z(c,(function(m,g){x(m)||x(g)||g==="undefined"||(h=encodeURIComponent((_=>_ instanceof File)(m)?m.name:m.toString()),p=encodeURIComponent(g),f[f.length]=p+"="+h)})),f.join(d)})(a);return u&&l.push(u),l.length>0?n+"?"+l.join("&"):n},gn=t=>{if(t.Ji)return t.Ji;var e=t.data,r=t.compression;if(e){if(r===xe.GZipJS){var s=Bp((function(a,l){var u=a.length;if(typeof TextEncoder<"u")return new TextEncoder().encode(a);for(var c=new qe(a.length+(a.length>>>1)),d=0,h=function(g){c[d++]=g},p=0;u>p;++p){if(d+5>c.length){var f=new qe(d+8+(u-p<<1));f.set(c),c=f}var m=a.charCodeAt(p);128>m?h(m):2048>m?(h(192|m>>>6),h(128|63&m)):m>55295&&57344>m?(h(240|(m=65536+(1047552&m)|1023&a.charCodeAt(++p))>>>18),h(128|m>>>12&63),h(128|m>>>6&63),h(128|63&m)):(h(224|m>>>12),h(128|m>>>6&63),h(128|63&m))}return Vu(c,0,d)})(cr(e)),{mtime:0});return{contentType:Gu,body:s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength),estimatedSize:s.byteLength}}if(r===xe.Base64){var i=(function(a){return a&&btoa(encodeURIComponent(a).replace(/%([0-9A-F]{2})/g,((l,u)=>String.fromCharCode(parseInt(u,16)))))})(cr(e)),n=(a=>"data="+encodeURIComponent(typeof a=="string"?a:cr(a)))(i);return{contentType:"application/x-www-form-urlencoded",body:n,estimatedSize:new Blob([n]).size}}var o=cr(e);return{contentType:"application/json",body:o,estimatedSize:new Blob([o]).size}}},Ju=t=>{var e,r,s=()=>t.transport==="sendBeacon"?{url:Ai(t.url,{compression:xe.Base64}),encodedBody:gn(E({},t,{compression:xe.Base64,Ji:void 0}))}:{url:Ku(t.url,"compression"),encodedBody:gn(E({},t,{compression:void 0,Ji:void 0}))};try{e=gn(t)}catch(i){if(Ua(t.compression,mr(t.url,"compression")))return k.error("Failed to gzip request body, sending uncompressed payload",i),s();throw i}return e&&Ua(t.compression,mr(t.url,"compression"))&&!((r=e.body)instanceof ArrayBuffer?Rn(new Uint8Array(r)):ArrayBuffer.isView(r)&&Rn(new Uint8Array(r.buffer,r.byteOffset,r.byteLength)))?(Ds=!0,s()):{url:t.url,encodedBody:e}},Yu=t=>{try{return Ju(t)}catch(e){return k.error(e),void(t.callback==null||t.callback({statusCode:0,error:e}))}},Up=(function(){var t=X((function*(e){var r=cr(e.data),s=yield(function(n,o,a){return Tn.apply(this,arguments)})(r,Y.DEBUG,{rethrow:!0});if(!s)return e;var i=yield s.arrayBuffer();return E({},e,{Ji:{contentType:Gu,body:i,estimatedSize:i.byteLength}})}));return function(e){return t.apply(this,arguments)}})(),Hp=/Failed to fetch|NetworkError|Load failed/i,Zu=t=>t?.name==="TypeError"&&Hp.test(t?.message||""),Xu=t=>{var e=Yu(t);if(e){var r=e.url,s=e.encodedBody,i=s??{},n=i.contentType,o=i.body,a=i.estimatedSize,l=new Headers;Z(t.headers,(function(f,m){l.append(m,f)})),n&&l.append("Content-Type",n);var u=null,c=!1;if(Ma){var d=new Ma;u={signal:d.signal,timeout:setTimeout((()=>{var f,m;c=!0,d.abort((f=t.timeout,(m=new Error("PostHog request timed out"+(f?" after "+f+"ms":""))).name="AbortError",m))}),t.timeout)}}var h=f=>{c&&f?.name==="AbortError"||Zu(f)?k.warn(f):k.error(f),t.callback==null||t.callback({statusCode:0,error:f})};try{var p;Mo(r,E({method:t?.method||"GET",headers:l,keepalive:t.method==="POST"&&!t.Yi&&52428.8>(a||0),body:o,signal:(p=u)==null?void 0:p.signal},t.fetchOptions)).then((f=>f.text().then((m=>{var g={statusCode:f.status,text:m};if(f.status===200)try{g.json=JSON.parse(m)}catch(_){k.error(_)}t.callback==null||t.callback(g)})))).catch(h).finally((()=>u?clearTimeout(u.timeout):null))}catch(f){u&&clearTimeout(u.timeout),h(f)}}},co=t=>{try{var e,r=Ju(t),s=r.url,i=r.encodedBody,n=i??{},o=n.body,a=n.estimatedSize;if(!o)return;var l=o instanceof Blob?o:new Blob([o],{type:n.contentType});if(ke.sendBeacon(s,l))return;var u=L(t.data)?t.data:(e=t.data)==null?void 0:e.batch;if(L(u)&&u.length>1&&(a??0)>16384){var c=Math.ceil(u.length/2),d=h=>L(t.data)?h:E({},t.data,{batch:h});return co(E({},t,{data:d(u.slice(0,c))})),void co(E({},t,{data:d(u.slice(c))}))}k.warn("Beacon of ~"+(a??0)+" bytes was rejected by the browser, falling back to fetch"),Xu(E({},t,{Yi:!0}))}catch(h){k.warn("Beacon send failed",h)}},El=(t,e,r,s)=>{var i=s==="query"?e==="POST"?"sent_at":"_":void 0;return Ai(r===xe.GZipJS?Ku(t,"compression"):t,E({},i?{[i]:Date.now().toString()}:{},r===xe.GZipJS?{}:{compression:r}))},Bs=[];Mo&&Bs.push({transport:"fetch",method:Xu}),$n&&Bs.push({transport:"XHR",method(t){var e=Yu(t);if(e){var r=new $n,s=e.encodedBody;r.open(t.method||"GET",e.url,!0);var i=s??{},n=i.contentType,o=i.body;Z(t.headers,(function(a,l){r.setRequestHeader(l,a)})),n&&r.setRequestHeader("Content-Type",n),t.timeout&&(r.timeout=t.timeout),r.onreadystatechange=()=>{if(r.readyState===4){var a={statusCode:r.status,text:r.responseText};if(r.status===200)try{a.json=JSON.parse(r.responseText)}catch{}t.callback==null||t.callback(a)}},r.send(o)}}}),ke!=null&&ke.sendBeacon&&Bs.push({transport:"sendBeacon",method:co});var uo=3e3;class Wp{constructor(e,r){this.Xi=!0,this.tr=[],this.er=st(r?.flush_interval_ms||uo,250,5e3,k.createLogger("flush interval"),uo),this.ir=e}enqueue(e){this.tr.push(e),this.rr||this.nr()}unload(){this.sr();var e=this.tr.length>0?this.ar():{},r=Object.values(e);[...r.filter((s=>s.url.indexOf("/e")===0)),...r.filter((s=>s.url.indexOf("/e")!==0))].map((s=>{this.lr(E({},s,{transport:"sendBeacon"}))}))}enable(){this.Xi=!1,this.nr()}nr(){var e=this;this.Xi||(this.rr=setTimeout((()=>{if(this.sr(),this.tr.length>0){var r=this.ar(),s=function(){var n=r[i],o=new Date().getTime();n.data&&L(n.data)&&Z(n.data,(a=>{a.offset=Math.abs(a.timestamp-o),delete a.timestamp})),e.lr(n)};for(var i in r)s()}}),this.er))}lr(e){try{this.ir(e)}catch(r){k.error(r)}}sr(){clearTimeout(this.rr),this.rr=void 0}ar(){var e={};return Z(this.tr,(r=>{var s,i=r,n=(i?i.batchKey:null)||i.url;x(e[n])&&(e[n]=E({},i,{data:[]})),(s=e[n].data)==null||s.push(i.data)})),this.tr=[],e}}var zp=["retriesPerformedSoFar"];class qp{constructor(e){this.ur=!1,this.hr=3e3,this.tr=[],this._instance=e,this.tr=[],this.dr=!0,!x(v)&&"onLine"in v.navigator&&(this.dr=v.navigator.onLine,this.vr=()=>{this.dr=!0,this.cr()},this.pr=()=>{this.dr=!1},ie(v,"online",this.vr),ie(v,"offline",this.pr))}get length(){return this.tr.length}retriableRequest(e){var r=e.retriesPerformedSoFar,s=Ic(e,zp);lt(r)&&(s.url=Ai(s.url,{retry_count:r})),this._instance._send_request(E({},s,{callback:i=>{if(i.statusCode!==200&&(400>i.statusCode||i.statusCode>=500)){if((i.statusCode===0?3:10)>(r??0))return void this.At(E({retriesPerformedSoFar:r},s));i.statusCode===0&&k.warn("Request failed before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped retrying after "+(r??0)+" retries.")}s.callback==null||s.callback(i)}}))}At(e){var r=e.retriesPerformedSoFar||0;e.retriesPerformedSoFar=r+1;var s=(function(o){var a=3e3*Math.pow(2,o),l=a/2,u=Math.min(18e5,a),c=Math.random()-.5;return Math.ceil(u+c*(u-l))})(r),i=Date.now()+s;this.tr.push({retryAt:i,requestOptions:e});var n="Enqueued failed request for retry in "+s;navigator.onLine||(n+=" (Browser is offline)"),k.warn(n),this.ur||(this.ur=!0,this.gr())}gr(){if(this.mr&&clearTimeout(this.mr),this.tr.length===0)return this.ur=!1,void(this.mr=void 0);this.mr=setTimeout((()=>{this.dr&&this.tr.length>0&&this.cr(),this.gr()}),this.hr)}cr(){var e=Date.now(),r=[],s=this.tr.filter((n=>e>n.retryAt||(r.push(n),!1)));if(this.tr=r,s.length>0)for(var i of s)this.retriableRequest(i.requestOptions)}unload(){for(var e of(this.mr&&(clearTimeout(this.mr),this.mr=void 0),this.ur=!1,x(v)||(this.vr&&(v.removeEventListener("online",this.vr),this.vr=void 0),this.pr&&(v.removeEventListener("offline",this.pr),this.pr=void 0)),this.tr)){var r=e.requestOptions;try{this._instance._send_request(E({},r,{transport:"sendBeacon"}))}catch(s){k.error(s)}}this.tr=[]}}class Vp{constructor(e){this.yr=()=>{var r,s,i,n;this.br||(this.br={});var o=this.scrollElement(),a=this.scrollY(),l=o?Math.max(0,o.scrollHeight-o.clientHeight):0,u=a+(o?.clientHeight||0),c=o?.scrollHeight||0;this.br.lastScrollY=Math.ceil(a),this.br.maxScrollY=Math.max(a,(r=this.br.maxScrollY)!==null&&r!==void 0?r:0),this.br.maxScrollHeight=Math.max(l,(s=this.br.maxScrollHeight)!==null&&s!==void 0?s:0),this.br.lastContentY=u,this.br.maxContentY=Math.max(u,(i=this.br.maxContentY)!==null&&i!==void 0?i:0),this.br.maxContentHeight=Math.max(c,(n=this.br.maxContentHeight)!==null&&n!==void 0?n:0)},this._instance=e}get _r(){return this._instance.config.scroll_root_selector}getContext(){return this.br}resetContext(){var e=this.br;return setTimeout(this.yr,0),e}startMeasuringScrollPosition(){ie(v,"scroll",this.yr,{capture:!0}),ie(v,"scrollend",this.yr,{capture:!0}),ie(v,"resize",this.yr)}scrollElement(){if(!this._r)return v?.document.documentElement;var e=L(this._r)?this._r:[this._r];for(var r of e){var s=v?.document.querySelector(r);if(s)return s}}wr(e){var r=e==="y"?"scrollTop":"scrollLeft";if(this._r){var s=this.scrollElement();return s&&s[r]||0}return v?e==="y"?v.scrollY||v.pageYOffset||v.document.documentElement.scrollTop||0:v.scrollX||v.pageXOffset||v.document.documentElement.scrollLeft||0:0}scrollY(){return this.wr("y")}scrollX(){return this.wr("x")}}var Gp=t=>Du(t?.config.mask_personal_data_properties,t?.config.custom_personal_data_properties,t?.config.disable_capture_url_hashes);class Sl{constructor(e,r,s,i){this.kr=n=>{var o=this.Sr();if(!o||o.sessionId!==n){var a={sessionId:n,props:this.Cr(this._instance)};this.Mr.register({[Zn]:a})}},this._instance=e,this.Tr=r,this.Mr=s,this.Cr=i||Gp,this.Tr.onSessionId(this.kr)}Sr(){return this.Mr.props[Zn]}getSetOnceProps(){var e,r=(e=this.Sr())==null?void 0:e.props;return r?"r"in r?Bu(r,this._instance.config.disable_capture_url_hashes):{$referring_domain:r.referringDomain,$pathname:r.initialPathName,utm_source:r.utm_source,utm_campaign:r.utm_campaign,utm_medium:r.utm_medium,utm_content:r.utm_content,utm_term:r.utm_term}:{}}getSessionProps(){var e={};return Z(Vo(this.getSetOnceProps()),((r,s)=>{s==="$current_url"&&(s="url"),e["$session_entry_"+Nn(s)]=r})),e}}class Xo{on(e,r){return this.Er[e]||(this.Er[e]=[]),this.Er[e].push(r),()=>{this.Er[e]=this.Er[e].filter((s=>s!==r))}}emit(e,r){for(var s of this.Er[e]||[])s(r);for(var i of this.Er["*"]||[])i(e,r)}constructor(){this.Er={}}}var Tr=re("[SessionId]");class xl{on(e,r){return this.Ir.on(e,r)}constructor(e,r,s){var i;if(this.Pr=null,this.Rr=[],this.Ar=void 0,this.Fr=!1,this.Ir=new Xo,this.Lr=(u,c)=>!(!lt(u)||!lt(c))&&Math.abs(u-c)>this.sessionTimeoutMs,!e.persistence)throw new Error("SessionIdManager requires a PostHogPersistence instance");if(e.config.cookieless_mode===ht)throw new Error('SessionIdManager cannot be used with cookieless_mode="always"');this.Ne=e.config,this.Mr=e.persistence,this.Or=void 0,this.Dr=void 0,this._sessionStartTimestamp=null,this._sessionActivityTimestamp=null,this.$r=r||dt,this.Nr=s||dt;var n=this.Ne.persistence_name||this.Ne.token;if(this._sessionTimeoutMs=1e3*st(this.Ne.session_idle_timeout_seconds||1800,60,36e3,Tr.createLogger("session_idle_timeout_seconds"),1800),e.register({$configured_session_timeout_ms:this._sessionTimeoutMs}),this.qr(),this.jr="ph_"+n+"_window_id",this.Br="ph_"+n+"_primary_window_exists",this.Hr()){var o=ce.H(this.jr),a=ce.H(this.Br);o&&!a?this.Or=o:ce.q(this.jr),ce.F(this.Br,!0)}if((i=this.Ne.bootstrap)!=null&&i.sessionID)try{var l=(u=>{var c=this.Ne.bootstrap.sessionID.replace(/-/g,"");if(c.length!==32)throw new Error("Not a valid UUID");if(c[12]!=="7")throw new Error("Not a UUIDv7");return parseInt(c.substring(0,12),16)})();this.Ur(this.Ne.bootstrap.sessionID,new Date().getTime(),l)}catch(u){Tr.error("Invalid sessionID in bootstrap",u)}this.zr()}get sessionTimeoutMs(){return this._sessionTimeoutMs}onSessionId(e){return x(this.Rr)&&(this.Rr=[]),this.Rr.push(e),this.Dr&&e(this.Dr,this.Or),()=>{this.Rr=this.Rr.filter((r=>r!==e))}}Hr(){return this.Ne.persistence!=="memory"&&!this.Mr.xi&&ce.N()}Wr(e){e!==this.Or&&(this.Or=e,this.Hr()&&ce.F(this.jr,e))}Vr(){return this.Or?this.Or:this.Hr()?ce.H(this.jr):null}Zr(e){var r=this.Pr;return!$e(r)&&!$e(e)&&5e3>Math.abs(e-r)}Ur(e,r,s){var i=r!==this._sessionActivityTimestamp,n=!(e!==this.Dr||s!==this._sessionStartTimestamp);this._sessionStartTimestamp=s,this._sessionActivityTimestamp=r,this.Dr=e,n&&!i||n&&this.Zr(r)||(this.Pr=r,this.Mr.register({[lr]:[r,e,s]}))}Gr(){var e,r=(e=this.Ne)==null?void 0:e.persistence_save_debounce_ms;return lt(r)&&r>0}Qr(){this.Gr()?this.Mr.refreshKey(lr):(this.Mr.flush(),this.Mr.load())}Kr(){var e;if(!$e(this._sessionActivityTimestamp)&&this._sessionActivityTimestamp!==this.Pr){this.Qr();var r=this.Jr();r[1]===this.Dr&&r[2]===this._sessionStartTimestamp&&(this.Pr=this._sessionActivityTimestamp,this.Mr.register({[lr]:[this._sessionActivityTimestamp,(e=this.Dr)!==null&&e!==void 0?e:null,this._sessionStartTimestamp]}),this.Mr.flush())}}Yr(){var e=this.Jr()[0],r=lt(e)?e:0,s=lt(this._sessionActivityTimestamp)?this._sessionActivityTimestamp:0;return Math.max(r,s)}Xr(e){return this.Qr(),this.Lr(e,this.Yr())}Jr(){var e=this.Mr.props[lr];return L(e)&&e.length===2&&e.push(e[0]),e||[0,null,0]}resetSessionId(){this.Pr=null,clearTimeout(this.tn),this.tn=void 0,this.Ur(null,null,null)}destroy(){this.Fr=!0,this.Kr(),clearTimeout(this.tn),this.tn=void 0,this.Ar&&v&&(v.removeEventListener(ni,this.Ar,{capture:!1}),this.Ar=void 0),this.Rr=[]}zr(){this.Ar=()=>{this.Kr(),this.Hr()&&ce.q(this.Br)},ie(v,ni,this.Ar,{capture:!1})}checkAndGetSessionAndWindowId(e,r){if(e===void 0&&(e=!1),r===void 0&&(r=null),this.Ne.cookieless_mode===ht)throw new Error('checkAndGetSessionAndWindowId should not be called with cookieless_mode="always"');var s=r||new Date().getTime(),i=this.Jr(),n=i[1],o=i[2],a=this.Yr(),l=this.Vr(),u=lt(o)&&Math.abs(s-o)>864e5,c=!1,d=!1,h=!n,p=n,f=!h&&!e&&this.Lr(s,a);if(f){(f=this.Xr(s))||Tr.info("cross-tab refresh kept the session alive",{sessionId:n});var m=this.Jr();n=m[1],o=m[2]}h||f||u?(n=this.$r(),l=this.Nr(),Tr.info("new session ID generated",{sessionId:n,windowId:l,changeReason:{noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u}}),o=s,c=!0):(l||(l=this.Nr(),c=!0),(d=n!==p)&&(Tr.info("adopted cross-tab session id",{sessionId:n,windowId:l}),c=!0));var g=lt(a)&&e&&!u?a:s,_=lt(o)?o:new Date().getTime();this.Wr(l),this.Ur(n,g,_),e||this.qr();var w={noSessionId:h,activityTimeout:f,sessionPastMaximumLength:u,crossTabAdoption:d};return c&&this.Rr.forEach((b=>b(n,l,w))),{sessionId:n,windowId:l,sessionStartTimestamp:_,changeReason:c?w:void 0,lastActivityTimestamp:a}}qr(){this.Fr||(clearTimeout(this.tn),this.tn=setTimeout((()=>{if(!this.Fr)if(this.Xr(new Date().getTime())){var e=this.Dr;this.resetSessionId(),this.Ir.emit("forcedIdleReset",{idleSessionId:e})}else this.qr()}),1.1*this.sessionTimeoutMs))}}var Qu=function(t,e){if(!t)return!1;var r=t.userAgent;if(r&&Wa(r,e))return!0;try{var s=t?.userAgentData;if(s!=null&&s.brands&&s.brands.some((i=>Wa(i?.brand,e))))return!0}catch{}return!!t.webdriver};function ed(){return(ed=X((function*(){var t=ke?.userAgentData;if(t!=null&&t.getHighEntropyValues)try{var e=yield t.getHighEntropyValues(["model"]),r=e?.model;return W(r)&&r.length>0?r:void 0}catch(s){return void k.info("Unable to resolve $device_model from userAgentData.getHighEntropyValues",s)}}))).apply(this,arguments)}var hi=function(t,e){if(!(function(r){try{new RegExp(r)}catch{return!1}return!0})(e))return!1;try{return new RegExp(e).test(t)}catch{return!1}};function mn(t,e,r){return cr({distinct_id:t,userPropertiesToSet:e,userPropertiesToSetOnce:r})}var td={exact:(t,e)=>e.some((r=>t.some((s=>r===s)))),is_not:(t,e)=>e.every((r=>t.every((s=>r!==s)))),regex:(t,e)=>e.some((r=>t.some((s=>hi(r,s))))),not_regex:(t,e)=>e.every((r=>t.every((s=>!hi(r,s))))),icontains:(t,e)=>e.map(Cs).some((r=>t.map(Cs).some((s=>r.includes(s))))),not_icontains:(t,e)=>e.map(Cs).every((r=>t.map(Cs).every((s=>!r.includes(s))))),gt:(t,e)=>e.some((r=>{var s=parseFloat(r);return!isNaN(s)&&t.some((i=>s>parseFloat(i)))})),lt:(t,e)=>e.some((r=>{var s=parseFloat(r);return!isNaN(s)&&t.some((i=>st.toLowerCase();function rd(t,e){return!t||Object.entries(t).every((r=>{var s=r[1],i=e?.[r[0]];if(x(i)||$e(i))return!1;var n=[String(i)],o=td[s.operator];return!!o&&o(s.values,n)}))}var ho="custom",kl="i.posthog.com",Kp=/^\/static\//;class Jp{constructor(e){this.en={},this.instance=e}get apiHost(){var e=this.instance.config.api_host.trim().replace(/\/$/,"");return e==="https://app.posthog.com"?"https://us.i.posthog.com":e}get flagsApiHost(){var e=this.instance.config.flags_api_host;return e?e.trim().replace(/\/$/,""):this.apiHost}get uiHost(){var e,r=(e=this.instance.config.ui_host)==null?void 0:e.replace(/\/$/,"");return r||(r=this.apiHost.replace("."+kl,".posthog.com")),r==="https://app.posthog.com"?"https://us.posthog.com":r}get region(){return this.en[this.apiHost]||(this.en[this.apiHost]=/https:\/\/(app|us|us-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"us":/https:\/\/(eu|eu-assets)(\.i)?\.posthog\.com/i.test(this.apiHost)?"eu":ho),this.en[this.apiHost]}rn(e){if(Kp.test(e)){var r=this.instance.config.asset_host;if(typeof r=="string")return r.trim().replace(/\/$/,"")||void 0}}endpointFor(e,r){if(r===void 0&&(r=""),r&&(r=r[0]==="/"?r:"/"+r),e==="ui")return this.uiHost+r;if(e==="flags")return this.flagsApiHost+r;if(e==="assets"){var s=this.rn(r);if(s)return""+s+r}if(this.region===ho)return this.apiHost+r;var i=kl+r;switch(e){case"assets":return"https://"+this.region+"-assets."+i;case"api":return"https://"+this.region+"."+i}}}function sd(t){var e;return!((e=t.conditions)==null||(e=e.events)==null||(e=e.values)==null||!e.length)}var q=re("[Surveys]"),id="seenSurvey_",nd=t=>{try{var e=(r=>((s,i)=>""+id+(function(n){return n.current_iteration&&n.current_iteration>0?n.id+"_"+n.current_iteration:n.id})(i))(0,r))(t);if(localStorage.getItem(e))return;localStorage.setItem(e,"true")}catch(r){q.error("Failed to persist survey seen state",r)}},Yp=[dn.Popover,dn.Widget,dn.API],Zp={ignoreConditions:!1,ignoreDelay:!1,displayType:no.Popover},Xp=re("[PostHog ExternalIntegrations]"),Qp={intercom:"intercom-integration",crispChat:"crisp-chat-integration"};class ef{constructor(e){this._instance=e}ai(e,r){var s;(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,e,(i=>{if(i)return Xp.error("failed to load script",i);r()}))}startIfEnabledOrStop(){var e=this,r=function(){var n,o,a,l=s[0],u=s[1];!u||(n=$.__PosthogExtensions__)!=null&&(n=n.integrations)!=null&&n[l]||e.ai(Qp[l],(()=>{var c;(c=$.__PosthogExtensions__)==null||(c=c.integrations)==null||(c=c[l])==null||c.start(e._instance)})),!u&&(o=$.__PosthogExtensions__)!=null&&(o=o.integrations)!=null&&o[l]&&((a=$.__PosthogExtensions__)==null||(a=a.integrations)==null||(a=a[l])==null||a.stop())};for(var s of Object.entries((i=this._instance.config.integrations)!==null&&i!==void 0?i:{})){var i;r()}}}class tf{constructor(e,r){this.rt=e,this.nn=r,this.sn=new Map,this.an=!1}add(e){var r=this;return X((function*(){if(r.an)throw new Error("Cannot add an extension to a disposed ExtensionRuntime");if(r.sn.has(e.name))throw new Error('Browser extension "'+e.name+'" is already registered');r.sn.set(e.name,e);try{var s=e.setup(r.nn);s&&(yield s)}catch(n){var i=r.sn.get(e.name)===e;i&&r.sn.delete(e.name),r.rt.error('Failed to set up browser extension "'+e.name+'"',n),i&&r.ln(e)}}))()}dispose(){if(!this.an){this.an=!0;var e=Array.from(this.sn.values()).reverse();for(var r of(this.sn.clear(),e))this.ln(r)}}ln(e){try{var r=e.dispose==null?void 0:e.dispose();r&&Se(r.then)&&r.then(void 0,(s=>{this.rt.error('Failed to dispose browser extension "'+e.name+'"',s)}))}catch(s){this.rt.error('Failed to dispose browser extension "'+e.name+'"',s)}}}class rf{constructor(e){this._instance=e}initialize(){}get(e){var r=this._instance.persistence;if(typeof e=="string")return r?.get_property(e);var s={};for(var i of e){var n=r?.get_property(i);x(n)||(s[i]=n)}return s}set(e,r){var s;(s=this._instance.persistence)==null||s.register(typeof e=="string"?{[e]:r}:e)}remove(e){var r;(r=this._instance.persistence)==null||r.unregister(e)}}var Il="extensionsRemoteConfig";class sf{constructor(e){this.an=!1,this.instance=e,this.rt=k,this.un=e.hn,this.kv=new rf(e),this.onEvent=r=>Is(this.instance.on("eventCaptured",(s=>{try{r({event:s.event,properties:s.properties})}catch(i){this.rt.error("Browser extension event listener failed",i)}}))),this.onRemoteConfig=r=>{if(this.an)return Is((()=>{}));var s=n=>{try{r(n)}catch(o){this.rt.error("Browser extension remote config listener failed",o)}},i=this.instance.dn.on(Il,s);return this.un&&s(this.un),Is(i)},this.vn=new tf(k.createLogger("[BrowserExtensions]"),this)}get logger(){return this.rt}get distinctId(){return this.instance.get_distinct_id()}get anonymousId(){var e;return(e=this.instance.get_property(rs))!==null&&e!==void 0?e:this.distinctId}get deviceId(){var e=this.instance.get_property(rs);return typeof e=="string"?e:void 0}get library(){return{name:Y.LIB_NAME,version:Y.LIB_VERSION}}get initialPersonProperties(){var e,r;return(e=(r=this.instance.persistence)==null?void 0:r.get_initial_props())!==null&&e!==void 0?e:{}}get groups(){return this.instance.getGroups()}get session(){try{var e,r,s,i,n=(e=this.instance.sessionManager)==null?void 0:e.checkAndGetSessionAndWindowId(!0);return{sessionId:(r=n?.sessionId)!==null&&r!==void 0?r:"",windowId:(s=n?.windowId)!==null&&s!==void 0?s:"",sessionStartTimestamp:(i=n?.sessionStartTimestamp)!==null&&i!==void 0?i:0}}catch{return{sessionId:"",windowId:"",sessionStartTimestamp:0}}}get projectToken(){return this.instance.config.token}add(e){return this.vn.add(e)}capture(e,r,s){var i=this;return X((function*(){s?i.instance.capture(e,r,{timestamp:s.timestamp,uuid:s.uuid,$set:s.set,$set_once:s.setOnce}):i.instance.capture(e,r)}))()}registerDynamicEventProperties(e){return Is(this.instance.cn(e))}handleRemoteConfig(e){this.an||(this.un=e,this.instance.dn.emit(Il,e))}sendRequest(e,r){var s=this;return X((function*(){var i;r===void 0&&(r={});var n=s.instance.requestRouter.endpointFor((i=r.target)!==null&&i!==void 0?i:"api",e),o={method:r.method,url:r.query?Ai(n,r.query):n,data:r.body,headers:r.headers,timeout:r.timeoutMs,fireCallbackOnDrop:!0,transport:r.transport,compression:r.compression,timestampMode:r.sentAt};return r.transport==="sendBeacon"?(s.instance._send_request(o),{statusCode:202}):new Promise((a=>{o.callback=a,s.instance._send_request(o)}))}))()}dispose(){this.an||(this.an=!0,this.vn.dispose())}}var Yr={},vn=0,pi=()=>{},Cl='Consent opt in/out is not valid with cookieless_mode="always" and will be ignored',Nr="Surveys module not available",Fl="sanitize_properties is deprecated. Use before_send instead",od="Invalid value for property_denylist config: ",nf=["token","distinct_id",pu],or="posthog",ad=!jp&&Pe?.indexOf("MSIE")===-1&&Pe?.indexOf("Mozilla")===-1,_n=t=>{var e;return E({api_host:"https://us.i.posthog.com",flags_api_host:null,ui_host:null,asset_host:null,token:"",autocapture:!0,cross_subdomain_cookie:np(C?.location),persistence:"localStorage+cookie",persistence_name:"",cookie_persisted_properties:[],loaded:pi,save_campaign_params:!0,custom_campaign_params:[],custom_blocked_useragents:[],save_referrer:!0,capture_pageleave:"if_capture_pageview",defaults:t??"unset",__preview_deferred_init_extensions:!1,__preview_external_dependency_versioned_paths:!1,__preview_cookie_wins_on_conflict:!1,debug:se&&W(se?.search)&&se.search.indexOf("__posthog_debug=true")!==-1||!1,cookie_expiration:365,upgrade:!1,disable_session_recording:!1,disable_persistence:!1,disable_web_experiments:!0,disable_surveys:!1,disable_surveys_automatic_display:!1,disable_conversations:!1,disable_product_tours:!1,disableDeviceModel:!1,disable_external_dependency_loading:!1,strict_script_versioning:!1,enable_recording_console_log:void 0,secure_cookie:(v==null||(e=v.location)==null?void 0:e.protocol)==="https:",ip:!1,opt_out_capturing_by_default:!1,opt_out_persistence_by_default:!1,opt_out_useragent_filter:!1,opt_out_capturing_persistence_type:"localStorage",consent_persistence_name:null,opt_out_capturing_cookie_prefix:null,opt_in_site_apps:!1,property_denylist:[],respect_dnt:!1,sanitize_properties:null,request_headers:{},request_batching:!0,properties_string_max_length:65535,mask_all_element_attributes:!1,mask_all_text:!1,mask_personal_data_properties:!1,custom_personal_data_properties:[],advanced_disable_flags:!1,advanced_disable_decide:!1,advanced_disable_feature_flags:!1,advanced_disable_feature_flags_on_first_load:!1,advanced_only_evaluate_survey_feature_flags:!1,advanced_feature_flags_dedup_per_session:!1,advanced_enable_surveys:!1,advanced_disable_toolbar_metrics:!1,feature_flag_request_timeout_ms:3e3,surveys_request_timeout_ms:1e4,on_request_error(r){k.error("Bad HTTP status: "+r.statusCode+" "+r.text)},get_device_id:r=>r,capture_performance:void 0,name:"posthog",bootstrap:{},disable_compression:!1,session_idle_timeout_seconds:1800,person_profiles:to,before_send:void 0,get_current_url:void 0,request_queue_config:{flush_interval_ms:uo},error_tracking:{},_onCapture:pi},(r=>({rageclick:r&&r>="2026-05-30"?{content_ignorelist:vp,ignore_text_selection:!0}:!r||"2025-11-30">r||{content_ignorelist:!0},capture_pageview:!r||"2025-05-24">r||"history_change",session_recording:r&&r>="2026-06-25"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6},streamNetworkBody:!0}:r&&r>="2026-05-30"?{strictMinimumDuration:!0,canvasCapture:{resolutionScale:.6}}:r&&r>="2025-11-30"?{strictMinimumDuration:!0}:{},external_scripts_inject_target:r&&r>="2026-01-30"?"head":"body",internal_or_test_user_hostname:r&&r>="2026-01-30"?/^(localhost|127\.0\.0\.1)$/:void 0,persistence_save_debounce_ms:r&&r>="2026-05-30"?250:0,split_storage:!(!r||"2026-05-30">r),detect_google_search_app:!(!r||"2026-05-30">r),disable_capture_url_hashes:!(!r||"2026-06-25">r)}))(t))},of=[["process_person","person_profiles"],["xhr_headers","request_headers"],["cookie_name","persistence_name"],["disable_cookie","disable_persistence"],["__preview_disable_beacon","disable_beacon"],["store_google","save_campaign_params"],["verbose","debug"]],Pl=t=>{var e={};for(var r of of){var s=r[0],i=r[1];x(t[s])||(e[i]=t[s])}var n=ee({},e,t),o=t.__preview_external_dependency_versioned_paths;return x(o)||(x(t.strict_script_versioning)&&(n.strict_script_versioning=!!o),W(o)&&x(t.asset_host)&&(n.asset_host=o)),L(t.property_blacklist)&&(x(t.property_denylist)?n.property_denylist=t.property_blacklist:L(t.property_denylist)?n.property_denylist=[...t.property_blacklist,...t.property_denylist]:k.error(od+t.property_denylist)),n};class af{constructor(){this.__forceAllowLocalhost=!1}get fn(){return this.__forceAllowLocalhost}set fn(e){k.error("WebPerformanceObserver is deprecated and has no impact on network capture. Use `_forceAllowLocalhostNetworkCapture` on `posthog.sessionRecording`"),this.__forceAllowLocalhost=e}}class Te{pn(e,r){if(e){var s=this.sn.indexOf(e);s!==-1&&this.sn.splice(s,1)}return this.sn.push(r),r.initialize==null||r.initialize(),r}gn(){return this.config.cookieless_mode===ht||this.config.cookieless_mode===Ht&&this.consent.isRejected()}get decideEndpointWasHit(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.hasLoadedFlags)!==null&&e!==void 0&&e}get flagsEndpointWasHit(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.hasLoadedFlags)!==null&&e!==void 0&&e}constructor(){var e;this.webPerformance=new af,this.mn=!1,this.version=Y.LIB_VERSION,this.yn=new Set,this.bn="",this.dn=new Xo,this.sn=[],this._n=[],this._calculate_event_properties=this.calculateEventProperties.bind(this),this.config=_n(),this.SentryIntegration=kp,this.sentryIntegration=s=>(function(i,n){var o=$u(i,n);return{name:Au,processEvent:a=>o(a)}})(this,s),this.__request_queue=[],this.__loaded=!1,this.analyticsDefaultEndpoint="/e/",this.wn=!1,this.kn=null,this.xn=null,this.Sn=null,this.scrollManager=new Vp(this),this.pageViewManager=new fl(this),this.rateLimiter=new Np(this),this.requestRouter=new Jp(this),this.consent=new hp(this),this.externalIntegrations=new ef(this);var r=(e=Te.__defaultExtensionClasses)!==null&&e!==void 0?e:{};this.featureFlags=r.featureFlags&&new r.featureFlags(this),this.toolbar=r.toolbar&&new r.toolbar(this),this.surveys=r.surveys&&new r.surveys(this),this.conversations=r.conversations&&new r.conversations(this),this.logs=r.logs&&new r.logs(this),this.metrics=r.metrics&&new r.metrics(this),this.experiments=r.experiments&&new r.experiments(this),this.exceptions=r.exceptions&&new r.exceptions(this),this.people={set:(s,i,n)=>{var o=W(s)?{[s]:i}:s;this.setPersonProperties(o),n?.({})},set_once:(s,i,n)=>{var o=W(s)?{[s]:i}:s;this.setPersonProperties(void 0,o),n?.({})}},this.on("eventCaptured",(s=>k.info('send "'+s?.event+'"',s)))}init(e,r,s){if(s&&s!==or){var i,n=(i=Yr[s])!==null&&i!==void 0?i:new Te;return n._init(e,r,s),Yr[s]=n,Yr[or][s]=n,n}return this._init(e,r,s)}_init(e,r,s){var i,n;r===void 0&&(r={});var o,a=W(e)?e.trim():"";if(!a)return k.critical("PostHog was initialized without a token. This likely indicates a misconfiguration. Please check the first argument passed to posthog.init()"),this;if(this.__loaded)return a!==((o=this.config)==null?void 0:o.token)?console.warn("[PostHog.js]","You have already initialized PostHog with a different project token! Re-initializing is a no-op, so events will keep going to the project this instance was initialized with. To capture into a second project, load PostHog once, then initialize a named instance after the SDK has loaded, e.g. posthog.init('"+a+"', { ... }, 'project2')"):console.warn("[PostHog.js]","You have already initialized PostHog! Re-initializing is a no-op"),this;this.__loaded=!0,this.config=_n(r.defaults),r.debug=this.Cn(r.debug),this.Mn=r,this.Tn=[],r.person_profiles?this.xn=r.person_profiles:r.process_person&&(this.xn=r.process_person);var l=_n(r.defaults),u=Pl(r),c=ee({},l,u,{name:s,token:a});te(l.rageclick)&&te(u.rageclick)&&(c.rageclick=ee({},l.rageclick,u.rageclick)),te(l.session_recording)&&te(u.session_recording)&&(c.session_recording=ee({},l.session_recording,u.session_recording)),this.set_config(c),this.config.on_xhr_error&&k.error("on_xhr_error is deprecated. Use on_request_error instead"),this.compression=r.disable_compression?void 0:xe.GZipJS;var d=this.En();if(this.persistence=new un(this.config,d),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new un(E({},this.config,{persistence:"sessionStorage"}),d,!1),this.bn="ph_"+(this.config.persistence_name||this.config.token)+"_session_registered_properties",this.config.persistence!=="memory"&&!d&&ce.N()){var h=ce.H(this.bn);L(h)&&h.forEach((P=>{W(P)&&this.yn.add(P)}))}else ce.q(this.bn);var p=E({},this.persistence.props),f=E({},this.sessionPersistence.props);this.register({$initialization_time:new Date().toISOString()}),this.In=new Wp((P=>this.Pn(P)),this.config.request_queue_config),this.Rn=new qp(this),this.__request_queue=[];var m=this.gn();if(m||(this.sessionManager=new xl(this),this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence),this.sessionManager.onSessionId(((P,j,S)=>{(S!=null&&S.activityTimeout||S!=null&&S.sessionPastMaximumLength||S!=null&&S.crossTabAdoption)&&this.An()}))),this.Fn(),this.config.__preview_deferred_init_extensions?(k.info("Deferring extension initialization to improve startup performance"),setTimeout((()=>{this.Ln(m)}),0)):(k.info("Initializing extensions synchronously"),this.Ln(m)),Y.DEBUG=Y.DEBUG||this.config.debug,Y.DEBUG&&k.info("Starting in debug mode",{this:this,config:r,thisC:E({},this.config),p,s:f}),!this.config.identity_distinct_id||(i=r.bootstrap)!=null&&i.distinctID||(r.bootstrap=E({},r.bootstrap,{distinctID:this.config.identity_distinct_id,isIdentifiedID:!0})),((n=r.bootstrap)==null?void 0:n.distinctID)!==void 0){var g=r.bootstrap.distinctID,_=this.get_distinct_id(),w=this.persistence.get_property(He);if(r.bootstrap.isIdentifiedID&&_!=null&&_!==g&&w===er)this.identify(g);else if(r.bootstrap.isIdentifiedID&&_!=null&&_!==g&&w===Tt)k.warn("Bootstrap distinctID differs from an already-identified user. The existing identity is preserved. Call reset() before reinitializing if you intend to switch users.");else{var b=this.config.get_device_id(dt()),I=r.bootstrap.isIdentifiedID?b:g;this.persistence.set_property(He,r.bootstrap.isIdentifiedID?Tt:er),this.register({distinct_id:g,$device_id:I})}}if(m)this.register_once({distinct_id:bs,$device_id:null},"");else if(!this.get_distinct_id()){var F=this.config.get_device_id(dt());this.register_once({distinct_id:F,$device_id:F},""),this.persistence.set_property(He,er)}return ie(v,"onpagehide"in self?"pagehide":"unload",this._handle_unload.bind(this),{passive:!1}),r.segment?(function(P,j){var S=P.config.segment;if(!S)return j();(function(A,R){var N=A.config.segment;if(!N)return R();var T=J=>{var z=()=>J.anonymousId()||dt();A.config.get_device_id=z,J.id()&&(A.register({distinct_id:J.id(),$device_id:z()}),A.persistence.set_property(He,Tt)),R()},O=N.user();"then"in O&&Se(O.then)?O.then(T):T(O)})(P,(()=>{S.register((A=>{typeof Promise<"u"&&Promise.resolve||ln.warn("This browser does not have Promise support, and can not use the segment integration");var R=(N,T)=>{if(!T)return N;N.event.userId||N.event.anonymousId===A.get_distinct_id()||(ln.info("No userId set, resetting PostHog"),A.reset()),N.event.userId&&N.event.userId!==A.get_distinct_id()&&(ln.info("UserId set, identifying with PostHog"),A.identify(N.event.userId));var O=A.calculateEventProperties(T,N.event.properties);return N.event.properties=Object.assign({},O,N.event.properties),N};return{name:"PostHog JS",type:"enrichment",version:"1.0.0",isLoaded:()=>!0,load:()=>Promise.resolve(),track:N=>R(N,N.event.event),page:N=>R(N,nr),identify:N=>R(N,nn),screen:N=>R(N,"$screen")}})(P)).then((()=>{j()}))}))})(this,(()=>this.On())):this.On(),Se(this.config._onCapture)&&this.config._onCapture!==pi&&(k.warn("onCapture is deprecated. Please use `before_send` instead"),this.on("eventCaptured",(P=>this.config._onCapture(P.event,P)))),this.config.ip&&k.warn('The `ip` config option has NO EFFECT AT ALL and has been deprecated. Use a custom transformation or "Discard IP data" project setting instead. See https://posthog.com/tutorials/web-redact-properties#hiding-customer-ip-address for more information.'),this.config.disableDeviceModel||(function(){return ed.apply(this,arguments)})().then((P=>{P&&this.register({[rn]:P})})).catch(pi),this}Fn(){var e,r,s,i,n,o,a=(e=(r=this.config.__extensionClasses)==null?void 0:r.featureFlags)!==null&&e!==void 0?e:(s=Te.__defaultExtensionClasses)==null?void 0:s.featureFlags;a&&(this.featureFlags&&this.featureFlags instanceof a||((i=this.Dn)==null||i.call(this),this.Dn=void 0,this.featureFlags=new a(this)),Se(this.featureFlags.onReloading)&&Se(this.featureFlags.setup)?this.Dn||(this.Dn=this.featureFlags.onReloading((()=>{this.dn.emit("featureFlagsReloading",!0)})),this.$n().add(this.featureFlags)):(n=(o=this.featureFlags).initialize)==null||n.call(o))}Ln(e){var r,s,i,n,o,a,l,u=performance.now(),c=E({},Te.__defaultExtensionClasses,this.config.__extensionClasses),d=[];c.exceptions&&this.sn.push(this.exceptions=(r=this.exceptions)!==null&&r!==void 0?r:new c.exceptions(this)),c.historyAutocapture&&this.sn.push(this.historyAutocapture=new c.historyAutocapture(this)),c.tracingHeaders&&this.sn.push(this.tracingHeaders=new c.tracingHeaders(this)),c.siteApps&&this.sn.push(this.siteApps=new c.siteApps(this)),c.sessionRecording&&!e&&this.sn.push(this.sessionRecording=new c.sessionRecording(this)),this.config.disable_scroll_properties||d.push((()=>{this.scrollManager.startMeasuringScrollPosition()})),c.autocapture&&this.sn.push(this.autocapture=new c.autocapture(this)),c.surveys&&this.sn.push(this.surveys=(s=this.surveys)!==null&&s!==void 0?s:new c.surveys(this)),c.logs&&this.sn.push(this.logs=(i=this.logs)!==null&&i!==void 0?i:new c.logs(this)),c.metrics&&this.sn.push(this.metrics=(n=this.metrics)!==null&&n!==void 0?n:new c.metrics(this)),c.conversations&&this.sn.push(this.conversations=(o=this.conversations)!==null&&o!==void 0?o:new c.conversations(this)),c.productTours&&this.sn.push(this.productTours=new c.productTours(this)),c.heatmaps&&this.sn.push(this.heatmaps=new c.heatmaps(this)),c.webVitalsAutocapture&&this.sn.push(this.webVitalsAutocapture=new c.webVitalsAutocapture(this)),c.exceptionObserver&&this.sn.push(this.exceptionObserver=new c.exceptionObserver(this)),c.deadClicksAutocapture&&this.sn.push(this.deadClicksAutocapture=new c.deadClicksAutocapture(this,xp)),c.toolbar&&this.sn.push(this.toolbar=(a=this.toolbar)!==null&&a!==void 0?a:new c.toolbar(this)),c.experiments&&this.sn.push(this.experiments=(l=this.experiments)!==null&&l!==void 0?l:new c.experiments(this)),this.sn.forEach((h=>{h.initialize&&d.push((()=>{h.initialize==null||h.initialize()}))})),d.push((()=>{if(this.Nn){var h=this.Nn;this.Nn=void 0,this.sn.forEach((p=>p.onRemoteConfig==null?void 0:p.onRemoteConfig(h)))}})),this.qn(d,u)}qn(e,r){for(;e.length>0;){if(this.config.__preview_deferred_init_extensions&&performance.now()-r>=30&&e.length>0)return void setTimeout((()=>{this.qn(e,r)}),0);var s=e.shift();if(s)try{s()}catch(n){k.error("Error initializing extension:",n)}}var i=Math.round(performance.now()-r);this.register_for_session({[fu]:this.config.__preview_deferred_init_extensions?"deferred":"synchronous",[gu]:i}),this.config.__preview_deferred_init_extensions&&k.info("PostHog extensions initialized ("+i+"ms)")}Zi(e){var r;if(!C||!C.body)return k.info("document not ready yet, trying again in 500 milliseconds..."),void setTimeout((()=>{this.Zi(e)}),500);if(this.config.__preview_deferred_init_extensions&&(this.Nn=e),this.hn=e,this.compression=void 0,e.ok){var s,i=e.config;i.supportedCompression&&!this.config.disable_compression&&(this.compression=M(i.supportedCompression,xe.GZipJS)?xe.GZipJS:M(i.supportedCompression,xe.Base64)?xe.Base64:void 0),(s=i.analytics)!=null&&s.endpoint&&(this.analyticsDefaultEndpoint=i.analytics.endpoint)}this.set_config({person_profiles:this.xn?this.xn:to}),(r=this.jn)==null||r.handleRemoteConfig(e),this.sn.forEach((n=>n.onRemoteConfig==null?void 0:n.onRemoteConfig(e)))}On(){try{this.config.loaded(this)}catch(s){k.critical("`loaded` function failed",s)}if(this.Bn(),this.config.internal_or_test_user_hostname&&se!=null&&se.hostname){var e=se.hostname,r=this.config.internal_or_test_user_hostname;(typeof r=="string"?e===r:r.test(e))&&this.setInternalOrTestUser()}this.config.capture_pageview&&setTimeout((()=>{(this.consent.isOptedIn()||this.gn())&&this.Hn()}),1),this.Un=new Uu(this),this.Un.load()}Bn(){var e;this.is_capturing()&&this.config.request_batching&&((e=this.In)==null||e.enable())}_dom_loaded(){this.is_capturing()&&Es(this.__request_queue,(e=>this.Pn(e))),this.__request_queue=[],this.Bn()}_handle_unload(){var e,r,s,i,n;(e=this.surveys)==null||e.handlePageUnload==null||e.handlePageUnload(),(r=this.metrics)==null||r.flush("sendBeacon"),this.config.request_batching?(this.zn()&&this.capture(sn),(s=this.logs)==null||s.flushLogs("sendBeacon"),(i=this.In)==null||i.unload(),(n=this.Rn)==null||n.unload()):this.zn()&&this.capture(sn,null,{transport:"sendBeacon"})}_send_request(e){this.__loaded?ad?this.__request_queue.push(e):this.rateLimiter.isServerRateLimited(e.batchKey)?e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:429})):(e.transport=e.transport||this.config.api_transport,e.headers=E({},this.config.request_headers,e.headers),e.compression=e.compression==="best-available"?this.compression:e.compression,(x(this.config.disable_beacon)?this.config.__preview_disable_beacon:this.config.disable_beacon)&&(e.disableTransport=["sendBeacon"]),e.fetchOptions=e.fetchOptions||this.config.fetch_options,(r=>{var s,i,n,o=E({},r);o.timeout=o.timeout||6e4;var a,l,u,c,d,h=(s=o.transport)!==null&&s!==void 0?s:"fetch";h==="sendBeacon"&&x(o.compression)&&o.data&&(o.compression=xe.Base64),o.method==="POST"&&o.data&&(o.timestampMode==="capture-body"?o.data={api_key:(l=(d=(c=L(a=o.data)?a:[a])[0])==null||(u=d.properties)==null?void 0:u.token)!==null&&l!==void 0?l:d?.token,batch:c,sent_at:new Date().toISOString()}:o.timestampMode==="body"&&(o.data=(function(g,_){return _===void 0&&(_=new Date().toISOString()),L(g)?g.map((w=>E({},w,{sent_at:_}))):E({},g,{sent_at:_})})(o.data))),o.url=El(o.url,o.method,o.compression,o.timestampMode);var p=Bs.filter((g=>!o.disableTransport||!g.transport||!o.disableTransport.includes(g.transport))),f=(i=(n=(function(g,_){for(var w=0;g.length>w;w++)if(g[w].transport===h)return g[w]})(p))==null?void 0:n.method)!==null&&i!==void 0?i:p[0].method;if(!f)throw new Error("No available transport method");var m=g=>{try{f(g)}catch(_){Zu(_)?k.warn(_):k.error(_),o.callback==null||o.callback({statusCode:0,error:_})}};h!=="sendBeacon"&&o.data&&o.compression===xe.GZipJS&&ah&&typeof Promise<"u"&&!Ds?Up(o).then((g=>{m(g)})).catch((g=>{if(Ha(g))return Ds=!0,void m(E({},o,{compression:void 0,url:El(r.url,r.method,void 0,r.timestampMode)}));(_=>{if(!_||typeof _!="object")return!1;var w="name"in _?String(_.name):"";return Ha(_)||w===Cc})(g)&&(Ds=!0),m(o)})):f(o)})(E({},e,{callback:r=>{var s,i;this.rateLimiter.checkForLimiting(r),400>r.statusCode||(s=(i=this.config).on_request_error)==null||s.call(i,r),e.callback==null||e.callback(r)}}))):e.fireCallbackOnDrop&&(e.callback==null||e.callback({statusCode:0}))}Pn(e){this.Rn?this.Rn.retriableRequest(e):this._send_request(e)}_execute_array(e){vn++;try{var r,s=[],i=[],n=[];Es(e,(a=>{if(a)if(L(r=a[0]))n.push(a);else if(Se(a))try{a.call(this)}catch(l){k.error("Error executing queued PostHog call",a,l)}else L(a)&&r==="alias"?s.push(a):L(a)&&r.indexOf("capture")!==-1&&Se(this[r])?n.push(a):i.push(a)}));var o=function(a,l){Es(a,(function(u){try{if(L(u[0])){var c=l;Z(u,(function(d){c=c[d[0]].apply(c,d.slice(1))}))}else l[u[0]].apply(l,u.slice(1))}catch(d){k.error("Error executing queued PostHog call",u,d)}}))};o(s,this),o(i,this),o(n,this)}finally{vn--}}push(e){if(vn>0&&L(e)&&W(e[0])){var r=Te.prototype[e[0]];Se(r)&&r.apply(this,e.slice(1))}else this._execute_array([e])}capture(e,r,s){var i,n,o,a,l;if(this.__loaded&&this.persistence&&this.sessionPersistence&&this.In){if(this.is_capturing())if(!x(e)&&W(e)){var u=!this.config.opt_out_useragent_filter&&this._is_bot();if(!u||this.config.__preview_capture_bot_pageviews){var c=s!=null&&s.skip_client_rate_limiting?void 0:this.rateLimiter.clientRateLimitContext();if(c==null||!c.isRateLimited){r!=null&&r.$current_url&&!W(r?.$current_url)&&(k.error("Invalid `$current_url` property provided to `posthog.capture`. Input must be a string. Ignoring provided value."),r==null||delete r.$current_url),e!=="$exception"||s!=null&&s.Wn||k.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.sessionPersistence.update_search_keyword(),this.config.save_campaign_params&&this.sessionPersistence.update_campaign_params(),this.config.save_referrer&&this.sessionPersistence.update_referrer_info(),(this.config.save_campaign_params||this.config.save_referrer)&&this.persistence.set_initial_person_info();var d=new Date,h=s?.timestamp||d,p=Ga(s?.uuid,dt),f={uuid:p,event:e,properties:this.calculateEventProperties(e,r||{},h,p)};e===nr&&this.config.__preview_capture_bot_pageviews&&u&&(f.event="$bot_pageview",f.properties.$browser_type="bot"),c&&(f.properties.$lib_rate_limit_remaining_tokens=c.remainingTokens);var m=e==="$feature_flag_called"&&f.properties.$feature_flag_has_experiment===!1&&this.get_property(ei)===!0;s?.$set&&!m&&(f.$set=s?.$set);var g=s?.$unset;g&&(f.$unset=g);var _,w,b,I=m?void 0:this.Vn(s?.$set_once,e!==Qa,e===nn);if(I&&(f.$set_once=I),s!=null&&s._noTruncate||(n=this.config.properties_string_max_length,o=f,a=T=>W(T)?T.slice(0,n):T,l=new Set,f=(function T(O,J){if(O!==Object(O))return a?a(O):O;if(!l.has(O)){var z;if(l.add(O),L(O))z=[],Es(O,(oe=>{z.push(T(oe))}));else{var H={};Z(O,((oe,pe)=>{l.has(oe)||(H[pe]=T(oe))})),z=H}return z}})(o)),f.timestamp=h,x(s?.timestamp)||(f.properties.$event_time_override_provided=!0,f.properties.$event_time_override_system_time=d),m&&(f.properties=(function(T,O){O===void 0&&(O=[]);var J={},z=H=>{T[H]!==void 0&&(J[H]=T[H])};return lh.forEach(z),O.forEach(z),J})(f.properties,nf)),e===ft.DISMISSED||e===ft.SENT){var F=r?.[hn.SURVEY_ID],P=r?.[hn.SURVEY_ITERATION];nd({id:F,current_iteration:P}),f.$set=E({},f.$set,{[(_={id:F,current_iteration:P},w=e===ft.SENT?"responded":"dismissed",b="$survey_"+w+"/"+_.id,_.current_iteration&&_.current_iteration>0&&(b="$survey_"+w+"/"+_.id+"/"+_.current_iteration),b)]:!0})}else e===ft.SHOWN&&(f.$set=E({},f.$set,{[hn.SURVEY_LAST_SEEN_DATE]:new Date().toISOString()}));if(e===Tp.SHOWN){var j=r?.[ml.TOUR_TYPE];j&&(f.$set=E({},f.$set,{[ml.TOUR_LAST_SEEN_DATE+"/"+j]:new Date().toISOString()}))}var S=E({},f.properties.$set,f.$set);if(mt(S)||this.setPersonPropertiesForFlags(S),!D(this.config.before_send)){var A=this.Pt(f);if(!A)return;(f=A).uuid=Ga(f.uuid,dt)}this.dn.emit("eventCaptured",f);var R=(i=s?._url)!==null&&i!==void 0?i:this.requestRouter.endpointFor("api",this.analyticsDefaultEndpoint),N={method:"POST",url:R,data:f,compression:"best-available",timestampMode:s?._batchKey==="recordings"||/\/s\/(?:\?|$)/.test(R)?"body":"capture-body",batchKey:s?._batchKey,transport:s?.transport};return!this.config.request_batching||s&&(s==null||!s._batchKey)||s!=null&&s.send_instantly?this.Pn(N):this.In.enqueue(N),f}k.critical("This capture call is ignored due to client rate limiting.")}}else k.error("No event name provided to posthog.capture")}else k.uninitializedWarning("posthog.capture")}_addCaptureHook(e){return this.on("eventCaptured",(r=>e(r.event,r)))}$n(){var e;return(e=this.jn)!==null&&e!==void 0?e:this.jn=new sf(this)}cn(e){this._n.push(e);var r=!0;return()=>{if(r){r=!1;var s=this._n.indexOf(e);s!==-1&&this._n.splice(s,1)}}}calculateEventProperties(e,r,s,i,n){if(s=s||new Date,!this.persistence||!this.sessionPersistence)return r;var o=n?void 0:this.persistence.remove_event_timer(e),a=E({},r);if(a.token=this.config.token,a.$config_defaults=this.config.defaults,this.gn()&&(a[pu]=!0),e==="$snapshot"){var l=E({},this.persistence.properties(),this.sessionPersistence.properties());return a.distinct_id=l.distinct_id,(!W(a.distinct_id)&&!he(a.distinct_id)||Mn(a.distinct_id))&&k.error("Invalid distinct_id for replay event. This indicates a bug in your implementation"),a}var u,c=(function(F,P,j,S){var A,R,N,T;if(S===void 0&&(S=!1),!Pe)return{};var O,J=F?[...vr,...P||[]]:[],z=(function(vs){for(var je=0;qa.length>je;je++){var _s=qa[je],Xt=_s[1],Qt=_s[0].exec(vs),Ir=Qt&&(Se(Xt)?Xt(Qt,vs):Xt);if(Ir)return Ir}return["",""]})(Pe),H=z[0],oe=z[1],pe=(O=typeof navigator<"u"?navigator:void 0)!=null&&O.brave?{brave:!0}:{},Ie={};x(j)||(Ie.detectGoogleSearchApp=j);var _e={},Ce=(A=navigator)==null||(A=A.userAgentData)==null?void 0:A.platform,Re=(R=navigator)==null?void 0:R.maxTouchPoints,ae=v==null||(N=v.screen)==null?void 0:N.width,me=v==null||(T=v.screen)==null?void 0:T.height,ge=v?.devicePixelRatio;x(Ce)||(_e.userAgentDataPlatform=Ce),x(Re)||(_e.maxTouchPoints=Re),x(ae)||(_e.screenWidth=ae),x(me)||(_e.screenHeight=me),x(ge)||(_e.devicePixelRatio=ge);var Ye,Rt,de,Ve,St,kr,Be,Fe,ms=ee(Vo({$os:H,$os_version:oe,$browser:Xc(Pe,navigator.vendor,pe,Ie),$device:Va(Pe),$device_type:(Rt=Pe,de=_e,Fe=Va(Rt),Fe===Nc||Fe===Tc||Fe==="Kobo"||Fe==="Kindle Fire"||Fe===Gc?pr:Fe===es||Fe===dr||Fe===ts||Fe===On?"Console":Fe===Lc?"Wearable":Fe?Oe:de?.userAgentDataPlatform==="Android"&&((Ve=de?.maxTouchPoints)!==null&&Ve!==void 0?Ve:0)>0?600>Math.min((St=de?.screenWidth)!==null&&St!==void 0?St:0,(kr=de?.screenHeight)!==null&&kr!==void 0?kr:0)/((Be=de?.devicePixelRatio)!==null&&Be!==void 0?Be:1)?Oe:pr:"Desktop"),$timezone:ju(),$timezone_offset:Ap()}),{$current_url:is(S?Ct(se?.href):se?.href,J,ns),$host:se?.host,$pathname:se?.pathname,$raw_user_agent:Pe.length>1e3?Pe.substring(0,997)+"...":Pe,$browser_version:Ch(Pe,navigator.vendor,pe,Ie),$browser_language:gl(),$browser_language_prefix:(Ye=gl(),typeof Ye=="string"?Ye.split("-")[0]:void 0),$screen_height:v?.screen.height,$screen_width:v?.screen.width,$viewport_height:v?.innerHeight,$viewport_width:v?.innerWidth,$lib:Y.LIB_NAME,$lib_version:Y.LIB_VERSION,$insert_id:Math.random().toString(36).substring(2,10)+Math.random().toString(36).substring(2,10),$time:Date.now()/1e3});return Y.SDK_DIST_CHANNEL&&(ms.$sdk_dist_channel=Y.SDK_DIST_CHANNEL),ms})(this.config.mask_personal_data_properties,this.config.custom_personal_data_properties,this.config.detect_google_search_app,this.config.disable_capture_url_hashes);if(this.sessionManager){var d=this.sessionManager.checkAndGetSessionAndWindowId(n,s.getTime()),h=d.windowId;a.$session_id=d.sessionId,a.$window_id=h}this.sessionPropsManager&&ee(a,this.sessionPropsManager.getSessionProps());try{var p;this.sessionRecording&&ee(a,this.sessionRecording.sdkDebugProperties),a.$sdk_debug_retry_queue_size=(p=this.Rn)==null?void 0:p.length}catch(F){a.$sdk_debug_error_capturing_properties=String(F)}if(this.requestRouter.region===ho&&(a.$lib_custom_api_host=this.config.api_host),u=e!==nr||n?e!==sn||n?this.pageViewManager.doEvent():this.pageViewManager.doPageLeave(s):this.pageViewManager.doPageView(s,i),a=ee(a,u),e===nr&&C&&(a.title=C.title),!x(o)){var f=s.getTime()-o;a.$duration=parseFloat((f/1e3).toFixed(3))}Pe&&this.config.opt_out_useragent_filter&&(a.$browser_type=this._is_bot()?"bot":"browser");var m=this.persistence.properties(),g=this.sessionPersistence.properties();Z(["$referrer","$referring_domain"],(F=>{F in m&&delete g[F]}));var _={};if(this._n.length>0)for(var w of this._n.slice())try{ee(_,w())}catch(F){k.error("Failed to produce browser extension event properties",F)}(a=ee({},c,m,g,E({},_,a))).$is_identified=this._isIdentified(),L(this.config.property_denylist)?Z(this.config.property_denylist,(function(F){delete a[F]})):k.error(od+this.config.property_denylist+" or property_blacklist config: "+this.config.property_blacklist);var b=this.config.sanitize_properties;b&&(k.error(Fl),a=b(a,e));var I=this.Zn();return a.$process_person_profile=I,I&&!n&&this.Gn("_calculate_event_properties"),a}Vn(e,r,s){var i;if(r===void 0&&(r=!0),s===void 0&&(s=!1),!this.persistence||!this.Zn()||this.mn&&!s)return e;var n=this.persistence.get_initial_props(),o=(i=this.sessionPropsManager)==null?void 0:i.getSetOnceProps(),a=ee({},n,o||{},e||{}),l=this.config.sanitize_properties;return l&&(k.error(Fl),a=l(a,"$set_once")),r&&(this.mn=!0),mt(a)?void 0:a}register(e,r){var s;(s=this.persistence)==null||s.register(e,r)}register_once(e,r,s){var i;(i=this.persistence)==null||i.register_once(e,r,s)}register_for_session(e){var r;(r=this.sessionPersistence)==null||r.register(e),Object.keys(e).forEach((s=>this.yn.add(s))),this.Qn()}unregister(e){var r;(r=this.persistence)==null||r.unregister(e)}unregister_for_session(e){var r;(r=this.sessionPersistence)==null||r.unregister(e),this.yn.delete(e),this.Qn()}Kn(e,r){this.register({[e]:r})}An(){this.yn.forEach((e=>{var r;(r=this.sessionPersistence)==null||r.unregister(e)})),this.yn.clear(),this.Qn()}Qn(){var e;if(this.bn)if(this.config.persistence==="memory"||(e=this.sessionPersistence)!=null&&e.xi||!ce.N())ce.q(this.bn);else{var r=[];this.yn.forEach((s=>r.push(s))),r.length>0?ce.F(this.bn,r):ce.q(this.bn)}}getFeatureFlag(e,r){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlag(e,r)}getFeatureFlagPayload(e){var r;return(r=this.featureFlags)==null?void 0:r.getFeatureFlagPayload(e)}getFeatureFlagResult(e,r){var s;return(s=this.featureFlags)==null?void 0:s.getFeatureFlagResult(e,r)}getAllFeatureFlags(){var e,r;return(e=(r=this.featureFlags)==null?void 0:r.getAllFeatureFlags())!==null&&e!==void 0?e:[]}isFeatureEnabled(e,r){var s,i;return(s=(i=this.featureFlags)==null?void 0:i.isFeatureEnabled(e,r))!==null&&s!==void 0?s:r?.defaultValue}reloadFeatureFlags(){var e;(e=this.featureFlags)==null||e.reloadFeatureFlags()}updateFlags(e,r,s){var i;(i=this.featureFlags)==null||i.updateFlags(e,r,s)}updateEarlyAccessFeatureEnrollment(e,r,s){var i;(i=this.featureFlags)==null||i.updateEarlyAccessFeatureEnrollment(e,r,s)}getEarlyAccessFeatures(e,r,s){var i;return r===void 0&&(r=!1),(i=this.featureFlags)==null?void 0:i.getEarlyAccessFeatures(e,r,s)}on(e,r){return this.dn.on(e,r)}onFeatureFlags(e){return this.featureFlags?this.featureFlags.onFeatureFlags(e):(e([],{},{errorsLoading:!0}),()=>{})}onSurveysLoaded(e){return this.surveys?this.surveys.onSurveysLoaded(e):(e([],{isLoaded:!1,error:Nr}),()=>{})}onSessionId(e){var r,s;return(r=(s=this.sessionManager)==null?void 0:s.onSessionId(e))!==null&&r!==void 0?r:()=>{}}getSurveys(e,r){r===void 0&&(r=!1),this.surveys?this.surveys.getSurveys(e,r):e([],{isLoaded:!1,error:Nr})}getActiveMatchingSurveys(e,r){r===void 0&&(r=!1),this.surveys?this.surveys.getActiveMatchingSurveys(e,r):e([],{isLoaded:!1,error:Nr})}renderSurvey(e,r){var s;(s=this.surveys)==null||s.renderSurvey(e,r)}displaySurvey(e,r){var s;r===void 0&&(r=Zp),(s=this.surveys)==null||s.displaySurvey(e,r)}cancelPendingSurvey(e){var r;(r=this.surveys)==null||r.cancelPendingSurvey(e)}canRenderSurvey(e){var r,s;return(r=(s=this.surveys)==null?void 0:s.canRenderSurvey(e))!==null&&r!==void 0?r:{visible:!1,disabledReason:Nr}}canRenderSurveyAsync(e,r){var s,i;return r===void 0&&(r=!1),(s=(i=this.surveys)==null?void 0:i.canRenderSurveyAsync(e,r))!==null&&s!==void 0?s:Promise.resolve({visible:!1,disabledReason:Nr})}Jn(e){return!e||Mn(e)?(k.critical("Unique user id has not been set in posthog.identify"),!1):e===bs?(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID is only used as a sentinel value.'),!1):!["distinct_id","distinctid"].includes(e.toLowerCase())&&!["undefined","null"].includes(e.toLowerCase())||(k.critical('The string "'+e+'" was set in posthog.identify which indicates an error. This ID should be unique to the user and not a hardcoded string.'),!1)}identify(e,r,s){if(!this.__loaded||!this.persistence)return k.uninitializedWarning("posthog.identify");if(he(e)&&(e=e.toString(),k.warn("The first argument to posthog.identify was a number, but it should be a string. It has been converted to a string.")),this.Jn(e)&&this.Gn("posthog.identify")){var i=this.get_distinct_id();this.register({$user_id:e}),this.get_property(rs)||this.register_once({$had_persisted_distinct_id:!0,$device_id:i},""),e!==i&&e!==this.get_property(Br)&&(this.unregister(Br),this.register({distinct_id:e}));var n,o=(this.persistence.get_property(He)||er)===er,a=e!==i,l=!a&&o;if(a&&o)this.persistence.set_property(He,Tt),this.setPersonPropertiesForFlags({$set:r||{},$set_once:s||{}},!1),this.capture(nn,{distinct_id:e,$anon_distinct_id:i},{$set:r||{},$set_once:s||{}}),this.Sn=mn(e,r,s),(n=this.featureFlags)==null||n.setAnonymousDistinctId(i);else if(l){this.persistence.set_property(He,Tt);var u=r||{},c=s||{};this.setPersonPropertiesForFlags({$set:u,$set_once:c},!1),this.capture("$set",{$set:u,$set_once:c}),this.Sn=mn(e,r,s)}else(r||s)&&this.setPersonProperties(r,s);a?(this.reloadFeatureFlags(),this.featureFlags?this.featureFlags.resetFlagCallReported():this.unregister(Wt)):l&&(r||s)&&this.reloadFeatureFlags()}}setPersonProperties(e,r){if((e||r)&&this.Gn("posthog.setPersonProperties")){var s=mn(this.get_distinct_id(),e,r);this.Sn!==s?(this.setPersonPropertiesForFlags({$set:e||{},$set_once:r||{}},!0),this.capture("$set",{$set:e||{},$set_once:r||{}}),this.Sn=s):k.info("A duplicate setPersonProperties call was made with the same properties. It has been ignored.")}}unsetPersonProperties(e){var r,s=(L(e)?e:[e]).filter((i=>W(i)&&i.length>0));s.length!==0&&this.Gn("posthog.unsetPersonProperties")&&((r=this.featureFlags)==null||r.unsetPersonPropertiesForFlags(s,!0),this.capture("$set",{$unset:s}),this.Sn=null)}group(e,r,s){if(e&&r){var i=this.getGroups(),n=i[e]!==r;if(n&&this.resetGroupPropertiesForFlags(e),this.register({$groups:E({},i,{[e]:r})}),n||s){var o={$group_type:e,$group_key:r};s&&(o.$group_set=s),this.capture(Qa,o)}s&&this.setGroupPropertiesForFlags({[e]:s}),n&&!s&&this.reloadFeatureFlags()}else k.error("posthog.group requires a group type and group key")}resetGroups(){this.register({$groups:{}}),this.resetGroupPropertiesForFlags(),this.reloadFeatureFlags()}setPersonPropertiesForFlags(e,r){var s;r===void 0&&(r=!0),(s=this.featureFlags)==null||s.setPersonPropertiesForFlags(e,r)}resetPersonPropertiesForFlags(e){var r;e===void 0&&(e=!0),(r=this.featureFlags)==null||r.resetPersonPropertiesForFlags(e)}setGroupPropertiesForFlags(e,r){var s;r===void 0&&(r=!0),this.Gn("posthog.setGroupPropertiesForFlags")&&((s=this.featureFlags)==null||s.setGroupPropertiesForFlags(e,r))}resetGroupPropertiesForFlags(e){var r;(r=this.featureFlags)==null||r.resetGroupPropertiesForFlags(e)}reset(e){this.Yn(e)}Yn(e,r){var s,i,n,o,a,l,u,c,d,h;if(r===void 0&&(r=!1),k.info("reset"),!this.__loaded)return k.uninitializedWarning("posthog.reset");var p,f=this.get_property(rs),m=this.get_property(rn),g=this.get_property(qt),_=this.is_capturing();if(this.consent.reset(),r||!_||this.is_capturing()||console.warn("[PostHog.js]","reset() cleared the stored consent, and capturing is now off because of `opt_out_capturing_by_default`. Call opt_in_capturing() again, and prefer calling reset() before opting in rather than after."),(s=this.persistence)==null||s.clear(),(i=this.sessionPersistence)==null||i.clear(),this.yn.clear(),this.Qn(),x(g)||(p=this.persistence)==null||p.register({[qt]:g}),(n=this.surveys)==null||n.reset(),(o=this.Un)==null||o.stop(),(a=this.featureFlags)==null||a.reset(),(l=this.conversations)==null||l.reset(),(u=this.logs)==null||u.reset(),(c=this.metrics)==null||c.reset(),(d=this.persistence)==null||d.set_property(He,er),(h=this.sessionManager)==null||h.resetSessionId(),this.Sn=null,this.config.cookieless_mode===ht)this.register_once({distinct_id:bs,$device_id:null},"");else{var w=this.config.get_device_id(dt());this.register_once({distinct_id:w,$device_id:e?w:f},""),e||x(m)||this.register({[rn]:m})}this.register({$last_posthog_reset:new Date().toISOString()},1),delete this.config.identity_distinct_id,delete this.config.identity_hash,this.reloadFeatureFlags()}shutdown(e){var r=this;return X((function*(){var s,i,n,o,a,l,u;if(r.__loaded){(s=r.Un)==null||s.stop(),(i=r.jn)==null||i.dispose(),(n=r.sessionRecording)==null||n.dispose(),(o=r.logs)==null||o.flushLogs("sendBeacon"),(a=r.metrics)==null||a.flush("sendBeacon"),(l=r.In)==null||l.unload(),(u=r.Rn)==null||u.unload();try{var c;(c=r.featureFlags)==null||c.destroy()}catch(d){k.error("Error while destroying feature flags",d)}}else k.uninitializedWarning("posthog.shutdown")}))()}setIdentity(e,r){var s;this.config.identity_distinct_id=e,this.config.identity_hash=r,this.alias(e),(s=this.conversations)==null||s.Xn()}clearIdentity(){var e;delete this.config.identity_distinct_id,delete this.config.identity_hash,(e=this.conversations)==null||e.ts()}get_distinct_id(){return this.get_property("distinct_id")}getGroups(){return this.get_property("$groups")||{}}get_session_id(){var e,r;return(e=(r=this.sessionManager)==null?void 0:r.checkAndGetSessionAndWindowId(!0).sessionId)!==null&&e!==void 0?e:""}get_session_replay_url(e){if(!this.sessionManager)return"";var r=this.sessionManager.checkAndGetSessionAndWindowId(!0),s=r.sessionStartTimestamp,i=this.requestRouter.endpointFor("ui","/project/"+this.config.token+"/replay/"+r.sessionId);if(e!=null&&e.withTimestamp&&s){var n,o=(n=e.timestampLookBack)!==null&&n!==void 0?n:10;if(!s)return i;i+="?t="+Math.max(Math.floor((new Date().getTime()-s)/1e3)-o,0)}return i}alias(e,r){return e===this.get_property(au)?(k.critical("Attempting to create alias for existing People user - aborting."),-2):this.Gn("posthog.alias")?(x(r)&&(r=this.get_distinct_id()),e!==r?(this.Kn(Br,e),this.capture("$create_alias",{alias:e,distinct_id:r})):(k.warn("alias matches current distinct_id - skipping api call."),this.identify(e),-1)):void 0}set_config(e){var r=E({},this.config);if(te(e)){var s,i,n,o,a,l,u,c,d,h,p,f;ee(this.config,Pl(e));var m=this.En();(s=this.persistence)==null||s.update_config(this.config,r,m),this.sessionPersistence=this.config.persistence==="sessionStorage"||this.config.persistence==="memory"?this.persistence:new un(E({},this.config,{persistence:"sessionStorage"}),m,!1);var g=this.Cn(this.config.debug);Ke(g)&&(this.config.debug=g),Ke(this.config.debug)&&(this.config.debug?(Y.DEBUG=!0,Q.N()&&Q.F("ph_debug",!0),k.info("set_config",{config:e,oldConfig:r,newConfig:E({},this.config)})):(Y.DEBUG=!1,Q.N()&&Q.q("ph_debug"))),(i=this.featureFlags)==null||i.updateConfig==null||i.updateConfig(this.config,this.Qi()),(n=this.exceptionObserver)==null||n.onConfigChange(),(o=this.exceptions)==null||o.onConfigChange(),(a=this.sessionRecording)==null||a.startIfEnabledOrStop(),(l=this.tracingHeaders)==null||l.startIfEnabledOrStop(),(u=this.autocapture)==null||u.startIfEnabled(),(c=this.heatmaps)==null||c.startIfEnabled(),(d=this.exceptionObserver)==null||d.startIfEnabledOrStop(),(h=this.deadClicksAutocapture)==null||h.startIfEnabledOrStop(),(p=this.surveys)==null||p.loadIfEnabled(),this.es(),(f=this.externalIntegrations)==null||f.startIfEnabledOrStop()}}_overrideSDKInfo(e,r){Y.LIB_NAME=e,Y.LIB_VERSION=r}startSessionRecording(e){var r,s,i,n,o,a=e===!0,l={sampling:a||!(e==null||!e.sampling),linked_flag:a||!(e==null||!e.linked_flag),url_trigger:a||!(e==null||!e.url_trigger),event_trigger:a||!(e==null||!e.event_trigger)};Object.values(l).some(Boolean)&&((r=this.sessionManager)==null||r.checkAndGetSessionAndWindowId(),l.sampling&&((s=this.sessionRecording)==null||s.overrideSampling()),l.linked_flag&&((i=this.sessionRecording)==null||i.overrideLinkedFlag()),l.url_trigger&&((n=this.sessionRecording)==null||n.overrideTrigger("url")),l.event_trigger&&((o=this.sessionRecording)==null||o.overrideTrigger("event"))),this.set_config({disable_session_recording:!1})}stopSessionRecording(){this.set_config({disable_session_recording:!0})}sessionRecordingStarted(){var e;return!((e=this.sessionRecording)==null||!e.started)}captureException(e,r){if(this.exceptions){var s=new Error("PostHog syntheticException"),i=this.exceptions.buildProperties(e,{handled:!0,syntheticException:s});return this.exceptions.sendExceptionEvent(E({},i,r))}}addExceptionStep(e,r){var s;(s=this.exceptions)==null||s.addExceptionStep(e,r)}captureLog(e){var r;(r=this.logs)==null||r.captureLog(e)}get logger(){var e,r;return(e=(r=this.logs)==null?void 0:r.logger)!==null&&e!==void 0?e:Te.rs}startExceptionAutocapture(e){this.set_config({capture_exceptions:e==null||e})}stopExceptionAutocapture(){this.set_config({capture_exceptions:!1})}loadToolbar(e){var r,s;return(r=(s=this.toolbar)==null?void 0:s.loadToolbar(e))!==null&&r!==void 0&&r}get_property(e){var r;return(r=this.persistence)==null?void 0:r.props[e]}getSessionProperty(e){var r;return(r=this.sessionPersistence)==null?void 0:r.props[e]}toString(){var e,r=(e=this.config.name)!==null&&e!==void 0?e:or;return r!==or&&(r=or+"."+r),r}_isIdentified(){var e,r;return((e=this.persistence)==null?void 0:e.get_property(He))===Tt||((r=this.sessionPersistence)==null?void 0:r.get_property(He))===Tt}Zn(){var e,r;return!(this.config.person_profiles==="never"||this.config.person_profiles===to&&!this._isIdentified()&&mt(this.getGroups())&&((e=this.persistence)==null||(e=e.props)==null||!e[Br])&&((r=this.persistence)==null||(r=r.props)==null||!r[si]))}zn(){return this.config.capture_pageleave===!0||this.config.capture_pageleave==="if_capture_pageview"&&(this.config.capture_pageview===!0||this.config.capture_pageview==="history_change")}createPersonProfile(){this.Zn()||this.Gn("posthog.createPersonProfile")&&this.setPersonProperties({},{})}setInternalOrTestUser(){this.Gn("posthog.setInternalOrTestUser")&&this.setPersonProperties({$internal_or_test_user:!0})}Gn(e){return this.config.person_profiles==="never"?(k.error(e+' was called, but process_person is set to "never". This call will be ignored.'),!1):(this.Kn(si,!0),!0)}En(){if(this.config.cookieless_mode==="always")return!0;var e=this.consent.isOptedOut();return this.config.disable_persistence||e&&!(!this.config.opt_out_persistence_by_default&&this.config.cookieless_mode!==Ht)}es(){var e,r,s,i,n=this.En();return((e=this.persistence)==null?void 0:e.xi)!==n&&((s=this.persistence)==null||s.set_disabled(n)),((r=this.sessionPersistence)==null?void 0:r.xi)!==n&&((i=this.sessionPersistence)==null||i.set_disabled(n)),n&&(this.yn.clear(),this.Qn()),n}opt_in_capturing(e){var r;if(this.config.cookieless_mode!==ht){if(this.gn()){var s,i,n,o,a;this.Yn(!0,!0),(s=this.sessionManager)==null||s.destroy(),(i=this.pageViewManager)==null||i.destroy(),this.sessionManager=new xl(this),this.pageViewManager=new fl(this),this.persistence&&(this.sessionPropsManager=new Sl(this,this.sessionManager,this.persistence));var l,u=(n=(o=this.config.__extensionClasses)==null?void 0:o.sessionRecording)!==null&&n!==void 0?n:(a=Te.__defaultExtensionClasses)==null?void 0:a.sessionRecording;u&&(this.sessionRecording=this.pn(this.sessionRecording,new u(this)),this.hn&&((l=this.sessionRecording)==null||l.onRemoteConfig==null||l.onRemoteConfig(this.hn)))}var c,d;this.consent.optInOut(!0),this.es(),this.Bn(),(r=this.sessionRecording)==null||r.startIfEnabledOrStop(),this.config.cookieless_mode==Ht&&((c=this.surveys)==null||c.loadIfEnabled()),(x(e?.captureEventName)||e!=null&&e.captureEventName)&&this.capture((d=e?.captureEventName)!==null&&d!==void 0?d:"$opt_in",e?.captureProperties,{send_instantly:!0}),this.config.capture_pageview&&this.Hn()}else k.warn(Cl)}opt_out_capturing(){var e,r,s;this.config.cookieless_mode!==ht?(this.config.cookieless_mode===Ht&&this.consent.isOptedIn()&&this.Yn(!0,!0),this.consent.optInOut(!1),this.es(),this.config.cookieless_mode===Ht&&(this.register({distinct_id:bs,$device_id:null}),(e=this.sessionRecording)==null||e.stopRecording(),this.sessionRecording=void 0,(r=this.sessionManager)==null||r.destroy(),(s=this.pageViewManager)==null||s.destroy(),this.sessionManager=void 0,this.sessionPropsManager=void 0,this.config.capture_pageview&&this.Hn(),this.Bn())):k.warn(Cl)}has_opted_in_capturing(){return this.consent.isOptedIn()}has_opted_out_capturing(){return this.consent.isOptedOut()}get_explicit_consent_status(){var e=this.consent.consent;return e===1?"granted":e===0?"denied":"pending"}is_capturing(){return this.config.cookieless_mode===ht||(this.config.cookieless_mode===Ht?this.consent.isRejected()||this.consent.isOptedIn():!this.has_opted_out_capturing())}clear_opt_in_out_capturing(){this.consent.reset(),this.es()}_is_bot(){return ke?Qu(ke,this.config.custom_blocked_useragents):void 0}Hn(){C&&(C.visibilityState==="visible"?this.wn||(this.wn=!0,this.capture(nr,{title:C.title},{send_instantly:!0}),this.kn&&(C.removeEventListener(ii,this.kn),this.kn=null)):this.kn||(this.kn=this.Hn.bind(this),ie(C,ii,this.kn)))}debug(e){e===!1?(v?.console.log("You've disabled debug mode."),this.set_config({debug:!1})):(v?.console.log("You're now in debug mode. All calls to PostHog will be logged in your console.\nYou can disable this with `posthog.debug(false)`."),this.set_config({debug:!0}))}Qi(){var e=this.Mn||{};return"advanced_disable_flags"in e?!!e.advanced_disable_flags:this.config.advanced_disable_flags!==!1?!!this.config.advanced_disable_flags:this.config.advanced_disable_decide===!0?(k.warn("Config field 'advanced_disable_decide' is deprecated. Please use 'advanced_disable_flags' instead. The old field will be removed in a future major version."),!0):(function(r,s,i,n,o){var a=s in r&&!D(r[s]),l=i in r&&!D(r[i]);return a?r[s]:!!l&&(o&&o.warn("Config field '"+i+"' is deprecated. Please use '"+s+"' instead. The old field will be removed in a future major version."),r[i])})(e,"advanced_disable_flags","advanced_disable_decide",0,k)}Pt(e){var r;if(D(this.config.before_send))return e;var s=Object.keys((r=e.properties)!==null&&r!==void 0?r:{}).filter(gh),i=L(this.config.before_send)?this.config.before_send:[this.config.before_send],n=e;for(var o of i){if(n=o(n),D(n)){var a="Event '"+e.event+"' was rejected in beforeSend function";return fh(e.event)?k.warn(a+". This can cause unexpected behavior."):k.info(a),null}n.properties&&!mt(n.properties)||k.warn("Event '"+e.event+"' has no properties after beforeSend function, this is likely an error.")}for(var l of s)if(n.properties&&D(n.properties[l]))return k.warn("Event '"+e.event+"' had its '"+l+"' property removed in a beforeSend function. This property is required for ingestion, so the event will be dropped."),null;return n}getPageViewId(){var e;return(e=this.pageViewManager.ui)==null?void 0:e.pageViewId}captureTraceFeedback(e,r){this.capture("$ai_feedback",{$ai_trace_id:String(e),$ai_feedback_text:r})}captureTraceMetric(e,r,s){this.capture("$ai_metric",{$ai_trace_id:String(e),$ai_metric_name:r,$ai_metric_value:String(s)})}Cn(e){var r=Ke(e)&&!e,s=Q.N()&&Q.P("ph_debug")==="true";return!r&&(!!s||e)}}Te.__defaultExtensionClasses={},Te.rs=(()=>{var t=()=>{};return{trace:t,debug:t,info:t,warn:t,error:t,fatal:t}})(),(function(t,e){for(var r=0;e.length>r;r++)t.prototype[e[r]]=sp(t.prototype[e[r]])})(Te,["identify"]);class Al{constructor(e){this.disabled=e===!1;var r=te(e)?e:{};this.thresholdPx=r.threshold_px||30,this.timeoutMs=r.timeout_ms||1e3,this.clickCount=r.click_count||3,this.clicks=[]}isRageClick(e,r,s){if(this.disabled)return!1;var i=this.clicks[this.clicks.length-1];if(i&&Math.abs(e-i.x)+Math.abs(r-i.y)s-i.timestamp){if(this.clicks.push({x:e,y:r,timestamp:s}),this.clicks.length===this.clickCount)return!0}else this.clicks=[{x:e,y:r,timestamp:s}];return!1}}var yn="$copy_autocapture",wn=re("[AutoCapture]");function bn(t,e){return e.length>t?e.slice(0,t)+"...":e}function lf(t){if(t.previousElementSibling)return t.previousElementSibling;var e=t;do e=e.previousSibling;while(e&&!Ft(e));return e}function cf(t,e){var r,s,i=e.e,n=e.maskAllElementAttributes,o=e.maskAllText,a=e.elementAttributeIgnoreList,l=e.elementsChainAsString,u=e.disableCaptureUrlHashes;if(!Ft(t))return{props:{}};for(var c=[t],d=new Set([t]),h=t;h.parentNode&&!Me(h,"body")&&Su>c.length;)if(Eu(h.parentNode)){var p=h.parentNode.host;if(d.has(p))break;d.add(p),c.push(p),h=p}else{if(!Ft(h.parentNode)||d.has(h.parentNode))break;d.add(h.parentNode),c.push(h.parentNode),h=h.parentNode}var f,m,g=[],_={},w=!1,b=!1;if(Z(c,(S=>{var A=io(S);if(Me(S,"a")){var R=S.getAttribute("href");w=!!(A&&R&&Kr(R))&&(u?Ct(R):R)}M(ai(S),"ph-no-capture")&&(b=!0),g.push((function(T,O,J,z,H){H===void 0&&(H=!1);var oe=T.tagName.toLowerCase(),pe={tag_name:oe};Ko.indexOf(oe)>-1&&!J&&(pe.$el_text=oe.toLowerCase()==="a"||oe.toLowerCase()==="button"?bn(1024,dl(T)):bn(1024,ss(T)));var Ie=ai(T);Ie.length>0&&(pe.classes=Ie.filter((function(ae){return ae!==""}))),Z(T.attributes,(function(ae){var me;if((!Fu(T)||["name","id","class","aria-label"].indexOf(ae.name)!==-1)&&(z==null||!z.includes(ae.name))&&!O&&Kr(ae.value)&&(!W(me=ae.name)||me.substring(0,10)!=="_ngcontent"&&me.substring(0,7)!=="_nghost")){var ge=ae.value;ae.name==="class"&&(ge=Go(ge).join(" ")),pe["attr__"+ae.name]=bn(1024,ae.name==="href"&&H?Ct(ge):ge)}}));for(var _e=1,Ce=1,Re=T;Re=lf(Re);)_e++,Re.tagName===T.tagName&&Ce++;return pe.nth_child=_e,pe.nth_of_type=Ce,pe})(S,n,o,a,u));var N=(function(T){if(!io(T))return{};var O={};return Z(T.attributes,(function(J){if(J.name&&J.name.indexOf("data-ph-capture-attribute")===0){var z=J.name.replace("data-ph-capture-attribute-",""),H=J.value;z&&H&&Kr(H)&&(O[z]=H)}})),O})(S);ee(_,N)})),b)return{props:{},explicitNoCapture:b};if(o||(g[0].$el_text=Me(t,"a")||Me(t,"button")?dl(t):ss(t)),w){var I,F;g[0].attr__href=w;var P=(I=li(w))==null?void 0:I.host,j=v==null||(F=v.location)==null?void 0:F.host;P&&j&&P!==j&&(f=w)}return{props:ee({$event_type:i.type,$ce_version:1},l?{}:{$elements:g},{$elements_chain:(m=g,(function(S){return S.map((A=>{var R,N,T="";if(A.tag_name&&(T+=A.tag_name),A.attr_class)for(var O of(A.attr_class.sort(),A.attr_class))T+="."+O.replace(/"/g,"");var J=E({},A.text?{text:A.text}:{},{"nth-child":(R=A.nth_child)!==null&&R!==void 0?R:0,"nth-of-type":(N=A.nth_of_type)!==null&&N!==void 0?N:0},A.href?{href:A.href}:{},A.attr_id?{attr_id:A.attr_id}:{},A.attributes),z={};return Os(J).sort(((H,oe)=>H[0].localeCompare(oe[0]))).forEach((H=>{var oe=H[1];return z[hl(H[0].toString())]=hl(oe.toString())})),(T+=":")+Os(z).map((H=>H[0]+'="'+H[1]+'"')).join("")})).join(";")})((function(S){return S.map((A=>{var R,N,T={text:(R=A.$el_text)==null?void 0:R.slice(0,400),tag_name:A.tag_name,href:(N=A.attr__href)==null?void 0:N.slice(0,2048),attr_class:Ep(A),attr_id:A.attr__id,nth_child:A.nth_child,nth_of_type:A.nth_of_type,attributes:{}};return Os(A).filter((O=>O[0].indexOf("attr__")===0)).forEach((O=>T.attributes[O[0]]=O[1])),T}))})(m)))},(r=g[0])!=null&&r.$el_text?{$el_text:(s=g[0])==null?void 0:s.$el_text}:{},f&&i.type==="click"?{$external_click_url:f}:{},_)}}var Mr=re("[ExceptionAutocapture]"),$l=()=>{},uf=re("[TracingHeaders]"),Lt=re("[Web Vitals]"),Rl=9e5,Tl="disabled",Nl="lazy_loading",Lr="awaiting_config",Fs="missing_config";re("[SessionRecording]"),re("[SessionRecording]");var po="[SessionRecording]",at=re(po),df=re("[Heatmaps]");function En(t){return te(t)&&"clientX"in t&&"clientY"in t&&he(t.clientX)&&he(t.clientY)}var Ps=re("[Product Tours]"),Sn=t=>{var e;return!t.config.disable_product_tours&&!((e=t.persistence)==null||!e.get_property(Wo))},hf=["$set_once","$set"],Ze=re("[SiteApps]"),Ml="Error while initializing PostHog app with config id ";function sr(t,e,r){if(D(t))return!1;switch(r){case"exact":return t===e;case"contains":var s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/_/g,".").replace(/%/g,".*");return new RegExp(s,"i").test(t);case"regex":try{return new RegExp(e).test(t)}catch{return!1}default:return!1}}class pf{constructor(e){this.ns=new Xo,this.ss=(r,s)=>this.os(r,s)&&this.ls(r,s)&&this.us(r,s)&&this.hs(r,s),this.os=(r,s)=>s==null||!s.event||r?.event===s?.event,this._instance=e,this.ds=new Set,this.vs=new Set}init(){var e,r;x((e=this._instance)==null?void 0:e._addCaptureHook)||(r=this._instance)==null||r._addCaptureHook(((s,i)=>{this.on(s,i)}))}register(e){var r,s;if(!x((r=this._instance)==null?void 0:r._addCaptureHook)&&(e.forEach((o=>{var a,l;(a=this.vs)==null||a.add(o),(l=o.steps)==null||l.forEach((u=>{var c;(c=this.ds)==null||c.add(u?.event||"")}))})),(s=this._instance)!=null&&s.autocapture)){var i,n=new Set;e.forEach((o=>{var a;(a=o.steps)==null||a.forEach((l=>{l!=null&&l.selector&&n.add(l?.selector)}))})),(i=this._instance)==null||i.autocapture.setElementSelectors(n)}}on(e,r){var s;r!=null&&e.length!=0&&(this.ds.has(e)||this.ds.has(r.event))&&this.vs&&((s=this.vs)==null?void 0:s.size)>0&&this.vs.forEach((i=>{this.cs(r,i)&&this.ns.emit("actionCaptured",i.name)}))}fs(e){this.onAction("actionCaptured",(r=>e(r)))}cs(e,r){if(r?.steps==null)return!1;for(var s of r.steps)if(this.ss(e,s))return!0;return!1}onAction(e,r){return this.ns.on(e,r)}ls(e,r){if(r!=null&&r.url){var s,i=e==null||(s=e.properties)==null?void 0:s.$current_url;if(!i||typeof i!="string"||!sr(i,r.url,r.url_matching||"contains"))return!1}return!0}us(e,r){return!!this.ps(e,r)&&!!this.gs(e,r)&&!!this.ys(e,r)}ps(e,r){var s;if(r==null||!r.href)return!0;var i=this.bs(e);if(i.length>0)return i.some((a=>sr(a.href,r.href,r.href_matching||"exact")));var n,o=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!o&&sr((n=o.match(/(?::|")href="(.*?)"/))?n[1]:"",r.href,r.href_matching||"exact")}gs(e,r){var s;if(r==null||!r.text)return!0;var i=this.bs(e);if(i.length>0)return i.some((u=>sr(u.text,r.text,r.text_matching||"exact")||sr(u.$el_text,r.text,r.text_matching||"exact")));var n,o,a,l=(e==null||(s=e.properties)==null?void 0:s.$elements_chain)||"";return!!l&&(n=(function(u){for(var c,d=[],h=/(?::|")text="(.*?)"/g;!D(c=h.exec(u));)d.includes(c[1])||d.push(c[1]);return d})(l),o=r.text,a=r.text_matching||"exact",n.some((u=>sr(u,o,a))))}ys(e,r){var s,i;if(r==null||!r.selector)return!0;var n=e==null||(s=e.properties)==null?void 0:s.$element_selectors;if(n!=null&&n.includes(r.selector))return!0;var o=(e==null||(i=e.properties)==null?void 0:i.$elements_chain)||"";if(r.selector_regex&&o)try{return new RegExp(r.selector_regex).test(o)}catch{return!1}return!1}bs(e){var r;return(e==null||(r=e.properties)==null?void 0:r.$elements)==null?[]:e?.properties.$elements}hs(e,r){return r==null||!r.properties||r.properties.length===0||rd(r.properties.reduce(((s,i)=>{var n=L(i.value)?i.value.map(String):i.value!=null?[String(i.value)]:[];return s[i.key]={values:n,operator:i.operator||"exact"},s}),{}),e?.properties)}}class ff{constructor(e){var r;this._s=[],this._instance=e,this.ws=new Map,this.ks=new Map,this.xs=new Map,(r=this._instance)==null||r.onSessionId==null||r.onSessionId((s=>this.Ss(s)))}Cs(e){return!1}Ms(){return null}Ts(e){}Es(){}Is(e,r){return!!e&&rd(e.propertyFilters,r?.properties)}Ps(e,r){var s=new Map;return e.forEach((i=>{var n;(n=i.conditions)==null||(n=n[r])==null||(n=n.values)==null||n.forEach((o=>{if(o!=null&&o.name){var a=s.get(o.name)||[];a.push(i.id),s.set(o.name,a)}}))})),s}Rs(e,r,s){var i=(s===Ar.Activation?this.ws:this.ks).get(e),n=[];return this.As((o=>{n=o.filter((a=>i?.includes(a.id)))})),n.filter((o=>{var a,l=(a=o.conditions)==null||(a=a[s])==null||(a=a.values)==null?void 0:a.find((u=>u.name===e));return this.Is(l,r)}))}register(e){var r;x((r=this._instance)==null?void 0:r._addCaptureHook)||(this.Fs(e),this.Ls(e))}Ls(e){var r=e.filter((s=>{var i,n;return((i=s.conditions)==null?void 0:i.actions)&&((n=s.conditions)==null||(n=n.actions)==null||(n=n.values)==null?void 0:n.length)>0}));r.length!==0&&(this.Os==null&&(this.Os=new pf(this._instance),this.Os.init(),this.Os.fs((s=>{this.onAction(s)}))),r.forEach((s=>{var i,n,o,a,l;s.conditions&&(i=s.conditions)!=null&&i.actions&&(n=s.conditions)!=null&&(n=n.actions)!=null&&n.values&&((o=s.conditions)==null||(o=o.actions)==null||(o=o.values)==null?void 0:o.length)>0&&((a=this.Os)==null||a.register(s.conditions.actions.values),(l=s.conditions)==null||(l=l.actions)==null||(l=l.values)==null||l.forEach((u=>{if(u&&u.name){var c=this.xs.get(u.name);c&&c.push(s.id),this.xs.set(u.name,c||[s.id])}})))})))}Fs(e){var r,s=e.filter((n=>{var o,a;return((o=n.conditions)==null?void 0:o.events)&&((a=n.conditions)==null||(a=a.events)==null||(a=a.values)==null?void 0:a.length)>0})),i=e.filter((n=>{var o,a;return((o=n.conditions)==null?void 0:o.cancelEvents)&&((a=n.conditions)==null||(a=a.cancelEvents)==null||(a=a.values)==null?void 0:a.length)>0}));s.length===0&&i.length===0||((r=this._instance)==null||r._addCaptureHook(((n,o)=>{this.onEvent(n,o)})),this.ws=this.Ps(e,Ar.Activation),this.ks=this.Ps(e,Ar.Cancellation))}onEvent(e,r){var s,i,n=this.Ds(),o=(r==null||(s=r.properties)==null?void 0:s.$survey_id)||(r==null||(i=r.properties)==null?void 0:i.$product_tour_id);if(o&&this.getActivatedIds().includes(o)){var a=this.$s(e,o);if(a==="consume")return n.info("event consumed activated item, removing it",{event:e,itemId:o}),void this.Ns([o]);if(a==="persist")return n.info("shown item promoted to persisted activation",{event:e,itemId:o}),this.qs(o),void this.js([o])}if(this.ks.has(e)){var l=this.Rs(e,r,Ar.Cancellation);l.length>0&&(n.info("cancel event matched, cancelling items",{event:e,itemsToCancel:l.map((c=>c.id))}),this.Ns(l.map((c=>c.id))),l.forEach((c=>this.Bs(c.id))))}if(this.ws.has(e)){n.info("event name matched",{event:e,eventPayload:r,items:this.ws.get(e)});var u=this.Rs(e,r,Ar.Activation);this.Hs(u.map((c=>c.id)))}}onAction(e){this.xs.has(e)&&this.Hs(this.xs.get(e)||[])}Hs(e){var r;if(e.length!==0){var s=!((r=this._instance)==null||r.get_session_id==null||!r.get_session_id()),i=[];for(var n of e)s&&this.Cs(n)?this.qs(n)&&this.Us(n):i.push(n);i.length>0&&(this._s=[...new Set([...this._s,...i])]),this.Ds().info("updating activated items",{activatedItems:this.getActivatedIds()})}}qs(e){this._s=this._s.filter((s=>s!==e));var r=this.zs();return!r.includes(e)&&(this.Ws([...r,e]),this.Vs(),!0)}Ns(e){var r=new Set(e);this._s=this._s.filter((n=>!r.has(n)));var s=this.Zs(),i=s.filter((n=>!r.has(n)));i.length!==s.length&&(this.Ws(i),i.length===0&&this.Gs()),this.js(e)}Qs(){var e,r=this.Ms();if(!r)return{};var s=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[r];return s&&typeof s=="object"?s:{}}Us(e){if(this.Ms()){var r=this.Qs();this.Ts(E({},r,{[e]:Date.now()}))}}js(e){if(this.Ms()){var r=this.Qs(),s={},i=!1;for(var n of Object.entries(r)){var o=n[0],a=n[1];e.includes(o)?i=!0:s[o]=a}i&&(mt(s)?this.Es():this.Ts(s))}}Ks(){this.Ms()&&this.Es()}getActivationTimestamp(e){if(this.zs().includes(e)){var r=this.Qs()[e];return he(r)?r:void 0}}Zs(){var e,r=this.Js();return((e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[r])||[]}zs(){var e,r,s=this.Zs();if(s.length===0)return[];var i=(e=this._instance)==null||(e=e.persistence)==null?void 0:e.props[this.Ys()],n=(r=this._instance)==null||r.get_session_id==null?void 0:r.get_session_id();return n&&i===n?s:[]}Vs(){var e,r=(e=this._instance)==null||e.get_session_id==null?void 0:e.get_session_id();r&&this.Xs(r)}Gs(){this.ta()}Ss(e){var r,s=(r=this._instance)==null||(r=r.persistence)==null?void 0:r.props[this.Ys()];if(s&&s!==e){var i=this.Zs(),n=this.Qs();i.length>0&&(this.Ws([]),i.filter((o=>he(n[o]))).forEach((o=>this.Bs(o)))),this.Gs(),this.Ks()}}getActivatedIds(){return[...new Set([...this.zs(),...this._s])].filter((e=>!this.ea(e)))}reset(){this._s=[],this.Zs().length>0&&this.Ws([]),this.Gs(),this.Ks()}getEventToItemsMap(){return this.ws}ia(){return this.Os}}class gf extends ff{constructor(e){super(e)}Js(){return Yn}Ys(){return Ns}Ms(){return Ms}Ts(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Ms]:e})}Es(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ms)}Cs(e){var r,s;this.As((n=>{s=n.find((o=>o.id===e))}));var i=(r=s)==null||(r=r.appearance)==null?void 0:r.surveyPopupDelaySeconds;return he(i)&&i>0}ra(){return ft.SHOWN}As(e){var r;(r=this._instance)==null||r.getSurveys(e)}Bs(e){var r;(r=this._instance)==null||r.cancelPendingSurvey(e)}Ds(){return q}Ws(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Yn]:e})}Xs(e){var r;(r=this._instance)==null||(r=r.persistence)==null||r.register({[Ns]:e})}ta(){var e;(e=this._instance)==null||(e=e.persistence)==null||e.unregister(Ns)}ea(){return!1}$s(e,r){var s;this.As((n=>{s=n.find((o=>o.id===r))}));var i=!s||(function(n){var o;return sd(n)&&!((o=n.conditions)==null||(o=o.events)==null||!o.repeatedActivation)||n.schedule==="always"})(s);return i?e===ft.SHOWN?"consume":"ignore":e===ft.SHOWN?"persist":e===ft.DISMISSED||e===ft.SENT?"consume":"ignore"}getSurveys(){return this.getActivatedIds()}getEventToSurveys(){return this.getEventToItemsMap()}}var As="SDK is not enabled or survey functionality is not yet loaded",Ll="Disabled. Not loading surveys.",mf=v!=null&&v.location?ci(v.location.hash,"__posthog")||ci(location.hash,"state"):null,Ol="_postHogToolbarParams",Dl=re("[Toolbar]"),Bl=re("[FeatureFlags]");class vf{constructor(e,r){r===void 0&&(r=!1),this.na=!1,this.update(e,r)}update(e,r){this.sa=((s,i)=>{var n,o,a,l;return{bootstrap:{featureFlags:(n=s.bootstrap)==null?void 0:n.featureFlags,featureFlagPayloads:(o=s.bootstrap)==null?void 0:o.featureFlagPayloads},remoteRequestsDisabled:i,featureFlagsDisabled:!!s.advanced_disable_feature_flags,onlyEvaluateSurveyFeatureFlags:!!s.advanced_only_evaluate_survey_feature_flags,deduplicateCallsPerSession:!!s.advanced_feature_flags_dedup_per_session,cacheTtlMs:s.feature_flag_cache_ttl_ms,requestTimeoutMs:s.feature_flag_request_timeout_ms,compression:s.disable_compression?"none":"base64",evaluationContexts:(a=(l=s.evaluation_contexts)!==null&&l!==void 0?l:s.evaluation_environments)!==null&&a!==void 0?a:[],flagKeys:L(s.flag_keys)?s.flag_keys:void 0}})(e,r),!e.evaluation_environments||e.evaluation_contexts||this.na||(Bl.warn("evaluation_environments is deprecated. Use evaluation_contexts instead. evaluation_environments will be removed in a future version."),this.na=!0),x(e.flag_keys)||L(e.flag_keys)||Bl.error("Invalid flag_keys found:",e.flag_keys,"Expected array of non-empty strings")}get(){return this.sa}}var jl=re("[FeatureFlags]"),Ot=re("[FeatureFlags]",{debugEnabled:!0}),xn=`" failed. Feature flags didn't load in time.`,Ul="connection_error",Hl=t=>{for(var e={},r=0;t.length>r;r++)e[t[r]]=!0;return e},Wl=t=>{var e={};for(var r of Os(t||{})){var s=r[1];s&&(e[r[0]]=s)}return e},Xe=re("[Error tracking]"),zl="Refusing to render web experiment since the viewer is a likely bot",_f={icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())>-1,not_icontains:(t,e)=>e.toLowerCase().indexOf(t.toLowerCase())===-1,regex:(t,e)=>hi(e,t),not_regex:(t,e)=>!hi(e,t),exact:(t,e)=>e===t,is_not:(t,e)=>e!==t};class ye{get Ne(){return this._instance.config}constructor(e){var r=this;this.getWebExperimentsAndEvaluateDisplayLogic=function(s){s===void 0&&(s=!1),r.getWebExperiments((i=>{ye.aa("retrieved web experiments from the server"),r.oa=new Map,i.forEach((n=>{if(n.feature_flag_key){var o;r.oa&&(ye.aa("setting flag key ",n.feature_flag_key," to web experiment ",n),(o=r.oa)==null||o.set(n.feature_flag_key,n));var a=r._instance.getFeatureFlag(n.feature_flag_key);W(a)&&n.variants[a]&&r.la(n.name,a,n.variants[a].transforms)}else if(n.variants)for(var l in n.variants){var u=n.variants[l];ye.ua(u,r._instance)&&r.la(n.name,l,u.transforms)}}))}),s)},this._instance=e,this._instance.onFeatureFlags((s=>{this.onFeatureFlags(s)}))}initialize(){}onFeatureFlags(e){if(this._is_bot())ye.aa(zl);else if(!this.Ne.disable_web_experiments){if(D(this.oa))return this.oa=new Map,this.loadIfEnabled(),void this.previewWebExperiment();ye.aa("applying feature flags",e),e.forEach((r=>{var s;if(this.oa&&(s=this.oa)!=null&&s.has(r)){var i,n=this._instance.getFeatureFlag(r),o=(i=this.oa)==null?void 0:i.get(r);n&&o!=null&&o.variants[n]&&this.la(o.name,n,o.variants[n].transforms)}}))}}previewWebExperiment(){var e=ye.getWindowLocation();if(e!=null&&e.search){var r=mr(e?.search,"__experiment_id"),s=mr(e?.search,"__experiment_variant");r&&s&&(ye.aa("previewing web experiments "+r+" && "+s),this.getWebExperiments((i=>{this.ha(parseInt(r),s,i)}),!1,!0))}}loadIfEnabled(){this.Ne.disable_web_experiments||this.getWebExperimentsAndEvaluateDisplayLogic()}getWebExperiments(e,r,s){if(this.Ne.disable_web_experiments&&!s)return e([]);var i=this._instance.get_property("$web_experiments");if(i&&!r)return e(i);this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/web_experiments/?token="+this.Ne.token),method:"GET",timestampMode:"query",callback:n=>e(n.statusCode===200&&n.json&&n.json.experiments||[])})}ha(e,r,s){var i=s.filter((n=>n.id===e));i&&i.length>0&&(ye.aa("Previewing web experiment ["+i[0].name+"] with variant ["+r+"]"),this.la(i[0].name,r,i[0].variants[r].transforms))}static ua(e,r){return!D(e.conditions)&&ye.da(e,r)&&ye.va(e)}static da(e,r){var s;if(D(e.conditions)||D((s=e.conditions)==null?void 0:s.url))return!0;var i=ye.getWindowLocation();if(i){var n,o,a,l=yu(r,i.href);return(n=e.conditions)==null||!n.url||_f[(o=(a=e.conditions)==null?void 0:a.urlMatchType)!==null&&o!==void 0?o:"icontains"](e.conditions.url,l)}return!1}static getWindowLocation(){return v?.location}static va(e){var r;if(D(e.conditions)||D((r=e.conditions)==null?void 0:r.utm))return!0;var s=Nu();if(s.utm_source){var i,n,o,a,l,u,c,d,h=(i=e.conditions)==null||(i=i.utm)==null||!i.utm_campaign||((n=e.conditions)==null||(n=n.utm)==null?void 0:n.utm_campaign)==s.utm_campaign,p=(o=e.conditions)==null||(o=o.utm)==null||!o.utm_source||((a=e.conditions)==null||(a=a.utm)==null?void 0:a.utm_source)==s.utm_source,f=(l=e.conditions)==null||(l=l.utm)==null||!l.utm_medium||((u=e.conditions)==null||(u=u.utm)==null?void 0:u.utm_medium)==s.utm_medium,m=(c=e.conditions)==null||(c=c.utm)==null||!c.utm_term||((d=e.conditions)==null||(d=d.utm)==null?void 0:d.utm_term)==s.utm_term;return h&&f&&m&&p}return!1}static aa(e){for(var r=arguments.length,s=new Array(r>1?r-1:0),i=1;r>i;i++)s[i-1]=arguments[i];k.info("[WebExperiments] "+e,s)}la(e,r,s){this._is_bot()?ye.aa(zl):r!=="control"?s.forEach((i=>{if(i.selector){var n;ye.aa("applying transform of variant "+r+" for experiment "+e+" ",i);var o=(n=document)==null?void 0:n.querySelectorAll(i.selector);o?.forEach((a=>{var l=a;i.html&&(l.innerHTML=i.html),i.css&&l.setAttribute("style",i.css)}))}})):ye.aa("Control variants leave the page unmodified.")}_is_bot(){return ke&&this._instance?Qu(ke,this.Ne.custom_blocked_useragents):void 0}}var Ue=re("[Conversations]"),Dt="Conversations not available yet.",ql="console",ld="__posthogHandledLogsRequestError",kn=(t,e)=>{var r=t instanceof Error?t:new Error(e);return r[ld]=!0,r},Vl=t=>!!t&&typeof t=="object"&&t[ld]===!0,$i={featureFlags:class{constructor(t){this.name="featureFlags",this.ca=!1,this.featureFlagEventHandlers=[],this.rt=jl,this.fa={},this.pa={},this.ga=[],this.ma=!1,this.ya=!1,this.ba=0,this._a=!1,this.wa=!1,this.ka=!1,this.xa=!1,this.Sa=0,this.Ca=()=>{var e=this.Ma();this.Sa=0,e&&this.reloadFeatureFlags()},"get"in t?this.Ta=t:(this.Ea=new vf(t.config,t.Qi()),this.Ta=this.Ea)}updateConfig(t,e){var r;(r=this.Ea)==null||r.update(t,e)}setup(t){return this.Ia=t,this.rt=t.logger.createLogger("[FeatureFlags]"),r=()=>{this.Ia===t&&(this.Ia=void 0,this.nn=t,this.Pa(t))},(e=t.kv.initialize())!=null&&e.then?e.then(r):r();var e,r}Pa(t){if(this.nn===t)return v&&ie(v,"online",this.Ca),this.Ra=t.registerDynamicEventProperties((()=>this.Aa()?this.fa:this.pa)),this.Fa(),this.initialize()}destroy(){v?.removeEventListener("online",this.Ca)}dispose(){var t;this.ba++,this.wa=!1,this.Ia=void 0,this.nn&&(this.La(),(t=this.Ra)==null||t.dispose(),this.Ra=void 0,this.ga=[],v?.removeEventListener("online",this.Ca),this.nn=void 0)}get Ne(){return this.Ta.get()}Oa(t){var e;return(e=this.nn)==null?void 0:e.kv.get(t)}F(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.set(t)}))}q(t){this.Da((()=>{var e;return(e=this.nn)==null?void 0:e.kv.remove(t)}))}Da(t){try{t()}catch(e){this.rt.error("Failed to update feature flag persistence",e)}}Fa(){var t={};for(var e of[Ur,Hr,Ts,et]){var r=this.Oa(e);x(r)||(t[e]=r)}this.fa=t;var s=E({},t),i=this.Oa(Bt);if(i)for(var n of Object.entries(i))s["$feature/"+n[0]]=n[1];this.pa=s}Aa(){var t=this.Ne.cacheTtlMs;if(!t||0>=t)return!1;var e=this.Oa(Gr);return typeof e!="number"||Date.now()-e>t}$a(){return!!this.Aa()&&(this.xa||this.ya||(this.xa=!0,this.rt.warn("Feature flag cache is stale, triggering refresh..."),this.reloadFeatureFlags()),!0)}Na(){var t=this.Ne.evaluationContexts;return t!=null&&t.length?t.filter((e=>{var r=e&&typeof e=="string"&&e.trim().length>0;return r||this.rt.error("Invalid evaluation context found:",e,"Expected non-empty string"),r})):[]}qa(){var t=this.Ne.flagKeys;if(!x(t))return t.filter((e=>{var r=e&&typeof e=="string"&&e.trim().length>0;return r||this.rt.error("Invalid flag key found:",e,"Expected non-empty string"),r}))}initialize(){var t,e,r=this.Ne,s=(t=(e=r.bootstrap)==null?void 0:e.featureFlags)!==null&&t!==void 0?t:{};if(Object.keys(s).length){var i,n,o=(i=(n=r.bootstrap)==null?void 0:n.featureFlagPayloads)!==null&&i!==void 0?i:{},a=Object.keys(s).filter((u=>!!s[u])).reduce(((u,c)=>(u[c]=s[c]||!1,u)),{}),l=Object.keys(o).filter((u=>a[u])).reduce(((u,c)=>(o[c]&&(u[c]=o[c]),u)),{});return this.ja({featureFlags:a,featureFlagPayloads:l})}}updateFlags(t,e,r){var s,i,n=r!=null&&r.merge&&(s=this.Oa(Bt))!==null&&s!==void 0?s:{},o=r!=null&&r.merge&&(i=this.Oa(Hr))!==null&&i!==void 0?i:{},a=E({},n,t),l=E({},o,e),u={};for(var c of Object.entries(a)){var d=c[0],h=c[1];u[d]={key:d,enabled:Da(h),variant:Ba(h),reason:void 0,metadata:x(l?.[d])?void 0:{id:0,version:void 0,description:void 0,payload:l[d]}}}this.ja({flags:u})}get hasLoadedFlags(){return this.ma}getFlags(){return Object.keys(this.getFlagVariants())}getFlagsWithDetails(){var t=this.Oa(Kn),e=this.Oa(et),r=this.Oa(jt);if(!r&&!e)return t||{};var s=ee({},t||{}),i=[...new Set([...Object.keys(r||{}),...Object.keys(e||{})])];for(var n of i){var o,a,l=s[n],u=e?.[n],c=x(u)?(o=l?.enabled)!==null&&o!==void 0&&o:!!u,d=x(u)?l?.variant:typeof u=="string"?u:void 0,h=r?.[n],p=E({},l,{enabled:c,variant:c?d??l?.variant:void 0});c!==l?.enabled&&(p.original_enabled=l?.enabled),d!==l?.variant&&(p.original_variant=l?.variant),h&&(p.metadata=E({},l?.metadata,{payload:h,original_payload:l==null||(a=l.metadata)==null?void 0:a.payload})),s[n]=p}return this.ca||(this.rt.warn(" Overriding feature flag details!",{flagDetails:t,overriddenPayloads:r,finalDetails:s}),this.ca=!0),s}getAllFeatureFlags(){var t=this.getFlagVariants(),e=this.getFlagPayloads();return Object.keys(t).map((r=>{var s=t[r];return{key:r,enabled:Da(s),variant:Ba(s),payload:Oa(e[r])}}))}getFlagVariants(){var t=this.Oa(Bt),e=this.Oa(et);if(!e)return t||{};for(var r=ee({},t||{}),s=Object.keys(e),i=0;s.length>i;i++)r[s[i]]=e[s[i]];return this.ca||(this.rt.warn(" Overriding feature flags!",{enabledFlags:t,overriddenFlags:e,finalFlags:r}),this.ca=!0),r}getFlagPayloads(){var t=this.Oa(Hr),e=this.Oa(jt);if(!e)return t||{};for(var r=ee({},t||{}),s=Object.keys(e),i=0;s.length>i;i++)r[s[i]]=e[s[i]];return this.ca||(this.rt.warn(" Overriding feature flag payloads!",{flagPayloads:t,overriddenPayloads:e,finalPayloads:r}),this.ca=!0),r}reloadFeatureFlags(){this._a||this.Ne.featureFlagsDisabled||this.Ma()||this.Ba||(this.ga.slice().forEach((t=>{try{t()}catch(e){this.rt.error("Error while running feature flags reloading callback",e)}})),this.Ba=setTimeout((()=>{this.Ha()}),5))}La(){clearTimeout(this.Ba),this.Ba=void 0}onReloading(t){return this.ga.push(t),()=>{this.ga=this.ga.filter((e=>e!==t))}}ensureFlagsLoaded(){this.ma||this.ya||this.Ba||this.reloadFeatureFlags()}setAnonymousDistinctId(t){this.$anon_distinct_id=t}setReloadingPaused(t){this._a=t}resetFlagCallReported(){this.q(Wt)}Ha(t){this.La();var e=this.nn;if(e&&!this.Ne.remoteRequestsDisabled&&!this.Ma())if(this.ya)this.wa=!0;else{var r={token:e.projectToken,distinct_id:e.distinctId,groups:e.groups,$anon_distinct_id:this.$anon_distinct_id,person_properties:E({},e.initialPersonProperties,this.Oa(ct)||{},{$lib:e.library.name,$lib_version:e.library.version}),group_properties:this.Oa(Ut),timezone:ju()};x(e.deviceId)||(r.$device_id=e.deviceId),(t!=null&&t.disableFlags||this.Ne.featureFlagsDisabled)&&(r.disable_flags=!0);var s=this.Na();s.length&&(r.evaluation_contexts=s);var i=this.qa();x(i)||(r.flag_keys=i);var n=this.Ne.onlyEvaluateSurveyFeatureFlags,o="/flags/?v=2"+(n?"&only_evaluate_survey_feature_flags=true":""),a=this.ba;this.ya=!0;var l=()=>{this.wa&&(this.wa=!1,this.Ha())},u=c=>{this.ya=!1,a===this.ba&&(this.F({[Ls]:[Ul]}),this.rt.error("Feature flag request failed",c)),l()};try{e.sendRequest(o,{target:"flags",method:"POST",body:r,compression:this.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:this.Ne.requestTimeoutMs}).then((c=>{var d,h,p=(d=c.json)!==null&&d!==void 0?d:{},f=c.statusCode!==200;if(this.ya=!1,a===this.ba){if(this.Ua(c.statusCode),f||this.wa||(this.$anon_distinct_id=void 0),!r.disable_flags||this.wa){this.ka=!f;var m=[];c.error?m.push(c.error instanceof Error&&c.error.name==="AbortError"?"timeout":c.error instanceof Error?Ul:"unknown_error"):c.statusCode!==200&&m.push("api_error_"+c.statusCode),p.errorsWhileComputingFlags&&m.push("errors_while_computing_flags");var g=!((h=p.quotaLimited)==null||!h.includes("feature_flags"));g&&m.push("quota_limited"),this.F({[Ls]:m}),g?this.rt.warn("You have hit your feature flags quota limit, and will not be able to load feature flags until the quota is reset. Please visit https://posthog.com/docs/billing/limits-alerts to learn more."):r.disable_flags||this.ja(p,f,{partialResponse:n}),l()}}else l()})).catch(u)}catch(c){u(c)}}}Ma(){return Ru(this.Sa,3)}Ua(t){this.Sa=Tu(t,this.Sa,3,(()=>this.rt.warn("Feature flag requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped refreshing feature flags; will try again when connectivity changes.")))}getFeatureFlag(t,e){var r;if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var s=this.getFeatureFlagResult(t,e);return(r=s?.variant)!==null&&r!==void 0?r:s?.enabled}}else this.rt.warn('getFeatureFlag for key "'+t+xn)}getFeatureFlagDetails(t){return this.getFlagsWithDetails()[t]}getFeatureFlagPayload(t){var e=this.getFeatureFlagResult(t,{send_event:!1});return e?.payload}getFeatureFlagResult(t,e){if(e===void 0&&(e={}),!e.fresh||this.ka)if(this.ma||this.getFlags()&&this.getFlags().length>0){if(!this.$a()){var r,s=this.getFlagVariants(),i=t in s,n=s[t],o=this.getFlagPayloads()[t],a=String(n),l=this.Oa(Ts)||void 0,u=this.Oa(Gr)||void 0,c=this.Oa(Wt)||{};if(this.Ne.deduplicateCallsPerSession){var d,h=(d=this.nn)==null?void 0:d.session.sessionId,p=this.Oa(zr);h&&h!==p&&(c={},r=h)}if(e.send_event||!("send_event"in e))if(t in c&&c[t].includes(a))r&&this.F({[Wt]:c,[zr]:r});else{var f,m,g,_,w,b,I,F,P,j;L(c[t])?c[t].push(a):c[t]=[a],this.F(E({[Wt]:c},r?{[zr]:r}:{}));var S=this.getFeatureFlagDetails(t),A=[...(f=this.Oa(Ls))!==null&&f!==void 0?f:[]];x(n)&&A.push("flag_missing");var R={$feature_flag:t,$feature_flag_response:n,$feature_flag_payload:o||null,$feature_flag_request_id:l,$feature_flag_evaluated_at:u,$feature_flag_bootstrapped_response:((m=this.Ne.bootstrap)==null||(m=m.featureFlags)==null?void 0:m[t])||null,$feature_flag_bootstrapped_payload:((g=this.Ne.bootstrap)==null||(g=g.featureFlagPayloads)==null?void 0:g[t])||null,$used_bootstrap_value:!this.ka};x(S==null||(_=S.metadata)==null?void 0:_.has_experiment)||(R.$feature_flag_has_experiment=S.metadata.has_experiment),x(S==null||(w=S.metadata)==null?void 0:w.version)||(R.$feature_flag_version=S.metadata.version);var N,T=(b=S==null||(I=S.reason)==null?void 0:I.description)!==null&&b!==void 0?b:S==null||(F=S.reason)==null?void 0:F.code;T&&(R.$feature_flag_reason=T),S!=null&&(P=S.metadata)!=null&&P.id&&(R.$feature_flag_id=S.metadata.id),x(S?.original_variant)&&x(S?.original_enabled)||(R.$feature_flag_original_response=x(S.original_variant)?S.original_enabled:S.original_variant),S!=null&&(j=S.metadata)!=null&&j.original_payload&&(R.$feature_flag_original_payload=S==null||(N=S.metadata)==null?void 0:N.original_payload),A.length&&(R.$feature_flag_error=A.join(",")),this.za(R)}else r&&this.F({[Wt]:c,[zr]:r});if(i)return{key:t,enabled:!!n,variant:typeof n=="string"?n:void 0,payload:Oa(o)}}}else this.rt.warn('getFeatureFlagResult for key "'+t+xn)}za(t){try{var e;(e=this.nn)==null||e.capture("$feature_flag_called",t).catch((r=>{this.rt.error("Failed to capture feature flag call",r)}))}catch(r){this.rt.error("Failed to capture feature flag call",r)}}getRemoteConfigPayload(t,e){this.Wa(t,e)}Wa(t,e){var r=this;return X((function*(){var s=r.nn;if(s){var i={distinct_id:s.distinctId,token:s.projectToken,person_properties:{$lib:s.library.name,$lib_version:s.library.version}},n=r.Na();n.length&&(i.evaluation_contexts=n);var o,a=r.qa();x(a)||(i.flag_keys=a);try{var l,u=(l=(yield s.sendRequest("/flags/?v=2",{target:"flags",method:"POST",body:i,compression:r.Ne.compression==="base64"?xe.Base64:void 0,sentAt:"body",timeoutMs:r.Ne.requestTimeoutMs})).json)==null?void 0:l.featureFlagPayloads;o=u?.[t]||void 0}catch(c){return void r.rt.error("Remote config feature flag request failed",c)}try{e(o)}catch(c){r.rt.error("Remote config feature flag callback failed",c)}}}))()}isFeatureEnabled(t,e){if(e===void 0&&(e={}),e.fresh&&!this.ka)return e.defaultValue;if(!(this.ma||this.getFlags()&&this.getFlags().length>0))return this.rt.warn('isFeatureEnabled for key "'+t+xn),e.defaultValue;var r=this.getFeatureFlag(t,e);return x(r)?e.defaultValue:!!r}addFeatureFlagsHandler(t){this.featureFlagEventHandlers.push(t)}removeFeatureFlagsHandler(t){this.featureFlagEventHandlers=this.featureFlagEventHandlers.filter((e=>e!==t))}receivedFeatureFlags(t,e,r){this.ja(t,e,r)}ja(t,e,r){if(this.nn){this.ma=!0;var s=(function(i,n,o,a,l,u){n===void 0&&(n={}),o===void 0&&(o={}),a===void 0&&(a={}),u===void 0&&(u=jl);var c=((P,j)=>{var S=P.flags;return S?E({},P,{featureFlags:Object.fromEntries(Object.keys(S).map((A=>{var R;return[A,(R=S[A].variant)!==null&&R!==void 0?R:S[A].enabled]}))),featureFlagPayloads:Object.fromEntries(Object.keys(S).filter((A=>S[A].enabled)).filter((A=>{var R;return(R=S[A].metadata)==null?void 0:R.payload})).map((A=>{var R;return[A,(R=S[A].metadata)==null?void 0:R.payload]})))}):(P.featureFlags&&j.warn("Using an older version of the feature flags endpoint. Please upgrade your PostHog server to the latest version"),P)})(i,u),d=c.flags,h=c.featureFlags,p=c.featureFlagPayloads;if(h){var f=i.requestId,m=i.evaluatedAt;if(L(h)){u.warn("v1 of the feature flags endpoint is deprecated. Please use the latest version.");var g={};if(h)for(var _=0;h.length>_;_++)g[h[_]]=!0;return{[Ur]:h,[Bt]:g,[ei]:!1}}var w=h,b=p,I=d;if(l!=null&&l.partialResponse)w=E({},n,w),b=E({},o,b),I=E({},a,I);else if(i.errorsWhileComputingFlags)if(d){var F=new Set(Object.keys(d).filter((P=>{var j;return!((j=d[P])!=null&&j.failed)})));w=E({},n,Object.fromEntries(Object.entries(w).filter((P=>F.has(P[0]))))),b=E({},o,Object.fromEntries(Object.entries(b||{}).filter((P=>F.has(P[0]))))),I=E({},a,Object.fromEntries(Object.entries(I||{}).filter((P=>F.has(P[0])))))}else w=E({},n,w),b=E({},o,b),I=E({},a,I);return E({[Ur]:Object.keys(Wl(w)),[Bt]:w||{},[Hr]:b||{},[Kn]:I||{},[ei]:i.minimalFlagCalledEvents===!0},f?{[Ts]:f}:{},m?{[Gr]:m}:{})}})(t,this.getFlagVariants(),this.getFlagPayloads(),this.getFlagsWithDetails(),r,this.rt);s&&this.F(s),e||(this.xa=!1),this.Va(e)}}override(t,e){e===void 0&&(e=!1),this.rt.warn("override is deprecated. Please use overrideFeatureFlags instead."),this.overrideFeatureFlags({flags:t,suppressWarning:e})}overrideFeatureFlags(t){this.Za(t)}Za(t){if(this.nn){if(t===!1)return this.q([et,jt]),this.Va(),void Ot.info("All overrides cleared");if(L(t))return this.F({[et]:Hl(t)}),this.Va(),void Ot.info("Flag overrides set",{flags:t});if(t&&typeof t=="object"&&("flags"in t||"payloads"in t)){var e,r=t;this.ca=!!((e=r.suppressWarning)!==null&&e!==void 0&&e);var s={},i=r.flags,n=r.payloads;return i&&(s[et]=L(i)?Hl(i):i),n&&(s[jt]=n),Object.keys(s).length&&this.F(s),i===!1&&n===!1?this.q([et,jt]):i===!1?this.q(et):n===!1&&this.q(jt),this.Va(),i===!1?Ot.info("Flag overrides cleared"):i&&Ot.info("Flag overrides set",{flags:i}),void(n===!1?Ot.info("Payload overrides cleared"):n&&Ot.info("Payload overrides set",{payloads:n}))}if(t&&typeof t=="object")return this.F({[et]:t}),this.Va(),void Ot.info("Flag overrides set",{flags:t});this.rt.warn("Invalid overrideOptions provided to overrideFeatureFlags",{overrideOptions:t})}else this.rt.warn("posthog.featureFlags.overrideFeatureFlags called before feature flags were ready")}onFeatureFlags(t){if(this.addFeatureFlagsHandler(t),this.ma){var e=this.Ga(),r=e.flags,s=e.flagVariants;try{t(r,s)}catch(i){this.rt.error("Error while running feature flags callback",i)}}return()=>this.removeFeatureFlagsHandler(t)}updateEarlyAccessFeatureEnrollment(t,e,r){var s=(this.Oa(Rs)||[]).find((l=>l.flagKey===t)),i={["$feature_enrollment/"+t]:e},n={$feature_flag:t,$feature_enrollment:e,$set:i};s&&(n.$early_access_feature_name=s.name),r&&(n.$feature_enrollment_stage=r);var o=E({},this.getFlagVariants(),{[t]:e});this.F({[Ur]:Object.keys(Wl(o)),[Bt]:o,[ct]:E({},this.Oa(ct)||{},i)}),this.Va();try{var a;(a=this.nn)==null||a.capture("$feature_enrollment_update",n).catch((l=>{this.rt.error("Failed to capture early access feature enrollment",l)}))}catch(l){this.rt.error("Failed to capture early access feature enrollment",l)}}getEarlyAccessFeatures(t,e,r){e===void 0&&(e=!1);var s=this.Oa(Rs);!s||e?this.Qa(t,r):t(s)}Qa(t,e){var r=this;return X((function*(){var s=r.nn;if(s){var i,n=e?"&"+e.map((a=>"stage="+a)).join("&"):"";try{var o=yield s.sendRequest("/api/early_access_features/?token="+s.projectToken+n,{target:"api",method:"GET",sentAt:"query"});if(!o.json)return;r.F({[Rs]:i=o.json.earlyAccessFeatures})}catch(a){return void r.rt.error("Early access feature request failed",a)}try{t(i)}catch(a){r.rt.error("Early access feature callback failed",a)}}}))()}Ga(){var t=this.getFlags(),e=this.getFlagVariants();return{flags:t.filter((r=>e[r])),flagVariants:Object.keys(e).filter((r=>e[r])).reduce(((r,s)=>(r[s]=e[s],r)),{})}}Va(t){this.Fa();var e=this.Ga(),r=e.flags,s=e.flagVariants;this.featureFlagEventHandlers.forEach((i=>{try{i(r,s,{errorsLoading:t})}catch(n){this.rt.error("Error while running feature flags callback",n)}}))}setPersonPropertiesForFlags(t,e){e===void 0&&(e=!0),this.Ka(t,e)}Ka(t,e){e===void 0&&(e=!0);var r=this.Oa(ct)||{},s=t?.$set||(t!=null&&t.$set_once?{}:t),i=t?.$set_once,n={};if(i)for(var o in i)({}).hasOwnProperty.call(i,o)&&(o in r||(n[o]=i[o]));this.F({[ct]:E({},r,n,s)}),e&&this.reloadFeatureFlags()}unsetPersonPropertiesForFlags(t,e){e===void 0&&(e=!0);var r=E({},this.Oa(ct)||{});t.forEach((s=>{delete r[s]})),this.F({[ct]:r}),e&&this.reloadFeatureFlags()}resetPersonPropertiesForFlags(t){t===void 0&&(t=!0),this.q(ct),t&&this.reloadFeatureFlags()}setGroupPropertiesForFlags(t,e){e===void 0&&(e=!0);var r=this.Oa(Ut)||{},s=E({},r);for(var i of Object.keys(t))s[i]=E({},r[i],t[i]);this.F({[Ut]:s}),e&&this.reloadFeatureFlags()}resetGroupPropertiesForFlags(t){if(t){var e=this.Oa(Ut)||{};this.F({[Ut]:E({},e,{[t]:{}})})}else this.q(Ut)}reset(){this.ba++,this.wa=!1,this.Fa(),this.ma=!1,this._a=!1,this.ka=!1,this.$anon_distinct_id=void 0,this.La(),this.ca=!1,this.Sa=0}}},yf={sessionRecording:class{get Ne(){return this._instance.config}get Mr(){return this._instance.persistence}get started(){var t;return!((t=this.Ja)==null||!t.isStarted)}get status(){var t,e;return this.Ya===Lr||this.Ya===Fs?this.Ya:(t=(e=this.Ja)==null?void 0:e.status)!==null&&t!==void 0?t:this.Ya}constructor(t){if(this._forceAllowLocalhostNetworkCapture=!1,this.Ya=Tl,this.Xa=void 0,this.eo=!1,this.io=(()=>{var e;if(C==null||!C.visibilityState||C.visibilityState==="visible")return!0;var r=v==null||(e=v.performance)==null||e.getEntriesByType==null?void 0:e.getEntriesByType("visibility-state");return!(r!=null&&r.length)||r.some((s=>s.name==="visible"))})(),this.Ie=()=>{var e;C?.visibilityState==="visible"&&(this.io=!0,(e=this.Ja)==null||e.setDocumentWasEverVisible==null||e.setDocumentWasEverVisible(!0))},this._instance=t,!this._instance.sessionManager)throw at.error("started without valid sessionManager"),new Error(po+" started without valid sessionManager. This is a bug.");if(this.Ne.cookieless_mode===ht)throw new Error(po+' cannot be used with cookieless_mode="always"');C!=null&&C.addEventListener&&ie(C,"visibilitychange",this.Ie)}initialize(){this.startIfEnabledOrStop()}dispose(){this.eo=!0,C==null||C.removeEventListener==null||C.removeEventListener("visibilitychange",this.Ie),this.stopRecording()}get ro(){var t,e=!((t=this._instance.get_property(qt))==null||!t.enabled),r=!this.Ne.disable_session_recording,s=this.Ne.disable_session_recording||this._instance.consent.isOptedOut();return v&&e&&r&&!s}startIfEnabledOrStop(t){var e;if(!(this.eo||this.ro&&(e=this.Ja)!=null&&e.isStarted)){var r=!x(Object.assign)&&!x(Array.from);this.ro&&r?(this.no(t),at.info("starting")):(this.Ya=Tl,this.stopRecording())}}no(t){var e,r,s;this.ro&&(this.Ya!==Lr&&this.Ya!==Fs&&(this.Ya=Nl),$!=null&&(e=$.__PosthogExtensions__)!=null&&(e=e.rrweb)!=null&&e.record&&(r=$.__PosthogExtensions__)!=null&&r.initSessionRecording?this.so(t):(s=$.__PosthogExtensions__)==null||s.loadExternalDependency==null||s.loadExternalDependency(this._instance,this.ao,(i=>{if(i)return at.error("could not load recorder",i);this.so(t)})))}stopRecording(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.stop()}oo(){var t,e;(t=this.Xa)==null||t.call(this),this.Xa=void 0,(e=this.Ja)==null||e.discard()}lo(){var t,e;(t=this.Mr)==null||t.unregister(zo),(e=this.Mr)==null||e.unregister(lu)}uo(t,e){if(D(t))return null;var r,s=he(t)?t:parseFloat(t);return typeof(r=s)!="number"||!Number.isFinite(r)||0>r||r>1?(at.warn(e+" must be between 0 and 1. Ignoring invalid value:",t),null):s}ho(t){if(this.Mr){var e,r,s=this.Mr,i=()=>{var n,o=t.sessionRecording===!1?void 0:t.sessionRecording,a=this.uo((n=this.Ne.session_recording)==null?void 0:n.sampleRate,"session_recording.sampleRate"),l=this.uo(o?.sampleRate,"remote config sampleRate"),u=a??l;D(u)&&this.lo();var c=o?.minimumDurationMilliseconds;s.register({[qt]:E({cache_timestamp:Date.now(),enabled:!!o},o,{networkPayloadCapture:E({capturePerformance:t.capturePerformance},o?.networkPayloadCapture),canvasRecording:{enabled:o?.recordCanvas,fps:o?.canvasFps,quality:o?.canvasQuality},sampleRate:u,minimumDurationMilliseconds:x(c)?null:c,endpoint:o?.endpoint,triggerMatchType:o?.triggerMatchType,masking:o?.masking,urlTriggers:o?.urlTriggers,version:o?.version,triggerGroups:o?.triggerGroups})})};i(),(e=this.Xa)==null||e.call(this),this.Xa=(r=this._instance.sessionManager)==null?void 0:r.onSessionId(i)}}onRemoteConfig(t){var e=t.ok?t.config:void 0;return e&&"sessionRecording"in e?e.sessionRecording===!1?(this.ho(e),void this.oo()):(this.ho(e),void this.startIfEnabledOrStop()):(this.Ya===Lr&&(this.Ya=Fs,at.warn("config refresh failed, recording will not start until page reload")),void this.startIfEnabledOrStop())}log(t,e){var r;e===void 0&&(e="log"),(r=this.Ja)!=null&&r.log?this.Ja.log(t,e):at.warn("log called before recorder was ready")}get ao(){var t,e,r=(t=this._instance)==null||(t=t.persistence)==null?void 0:t.get_property(qt);return(r==null||(e=r.scriptConfig)==null?void 0:e.script)||"lazy-recorder"}do(){var t,e=this._instance.get_property(qt);if(!e)return!1;try{t=typeof e=="object"?e:JSON.parse(e)}catch(r){return at.warn("persisted remote config for session recording is invalid and will be ignored",r),!1}return!D(t.cache_timestamp)&&36e5>=Date.now()-t.cache_timestamp}so(t){var e,r,s;if(!this.eo){if((e=$.__PosthogExtensions__)==null||!e.initSessionRecording)return at.warn("Called on script loaded before session recording is available. This can be caused by adblockers."),void this._instance.register_for_session({[mu]:!0});var i;if(this.Ja||(this.Ja=(i=$.__PosthogExtensions__)==null?void 0:i.initSessionRecording(this._instance,this.io),this.Ja._forceAllowLocalhostNetworkCapture=this._forceAllowLocalhostNetworkCapture),!this.do())return this.Ya===Fs||this.Ya===Lr?void 0:(this.Ya=Lr,at.info("persisted remote config is stale, requesting fresh config before starting"),void new Uu(this._instance).load());this.Ya=Nl,(r=(s=this.Ja).setDocumentWasEverVisible)==null||r.call(s,this.io),this.Ja.start(t)}}onRRwebEmit(t){var e;(e=this.Ja)==null||e.onRRwebEmit==null||e.onRRwebEmit(t)}overrideLinkedFlag(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[uu]:!0}),(t=this.Ja)==null||t.overrideLinkedFlag()}overrideSampling(){var t,e;this.Ja||(e=this.Mr)==null||e.register({[cu]:!0}),(t=this.Ja)==null||t.overrideSampling()}overrideTrigger(t){var e,r;this.Ja||(r=this.Mr)==null||r.register({[t==="url"?du:hu]:!0}),(e=this.Ja)==null||e.overrideTrigger(t)}get sdkDebugProperties(){var t;return((t=this.Ja)==null?void 0:t.sdkDebugProperties)||{$recording_status:this.status}}tryAddCustomEvent(t,e){var r;return!((r=this.Ja)==null||!r.tryAddCustomEvent(t,e))}}},wf={autocapture:class{constructor(t){this.vo=!1,this.co=null,this.fo=!1,this.po=!1,this.instance=t,this.rageclicks=new Al(t.config.rageclick),this.mo=null}initialize(){this.startIfEnabled()}get Ne(){var t,e,r=te(this.instance.config.autocapture)?this.instance.config.autocapture:{};return r.url_allowlist=(t=r.url_allowlist)==null?void 0:t.map((s=>new RegExp(s))),r.url_ignorelist=(e=r.url_ignorelist)==null?void 0:e.map((s=>new RegExp(s))),r}yo(){if(this.isBrowserSupported()){if(v&&C){var t=r=>{r=r||v?.event;try{this.bo(r)}catch(s){wn.error("Failed to capture event",s)}};if(ie(C,"submit",t,{capture:!0}),ie(C,"change",t,{capture:!0}),ie(C,"click",t,{capture:!0}),this.Ne.capture_copied_text){var e=r=>{r=r||v?.event;try{this.bo(r,yn)}catch(s){wn.error("Failed to capture copy/cut event",s)}};ie(C,"copy",e,{capture:!0}),ie(C,"cut",e,{capture:!0})}}}else wn.info("Disabling Automatic Event Collection because this browser is not supported")}startIfEnabled(){this.isEnabled&&!this.vo&&(this.yo(),this.vo=!0)}onRemoteConfig(t){if(this.fo=!0,t.ok){var e=t.config;e.elementsChainAsString&&(this.po=e.elementsChainAsString);var r=e.autocapture_opt_out;Ke(r)&&(this.instance.persistence&&this.instance.persistence.register({[Un]:r}),this.co=r),this.startIfEnabled()}else this.startIfEnabled()}setElementSelectors(t){this.mo=t}getElementSelectors(t){var e,r=[];return(e=this.mo)==null||e.forEach((s=>{var i=C?.querySelectorAll(s);i?.forEach((n=>{t===n&&r.push(s)}))})),r}get isEnabled(){var t,e,r=(t=this.instance.persistence)==null?void 0:t.props[Un],s=this.co,i=this.instance.Qi()&&!this.fo;if($e(s)&&!Ke(r)&&!i)return!1;var n=(e=this.co)!==null&&e!==void 0?e:!!r;return!!this.instance.config.autocapture&&!n}bo(t,e){if(e===void 0&&(e="$autocapture"),this.isEnabled){var r,s=an(t);bu(s)&&(s=s.parentNode||null),e==="$autocapture"&&t.type==="click"&&t instanceof MouseEvent&&this.instance.config.rageclick&&(r=this.rageclicks)!=null&&r.isRageClick(t.clientX,t.clientY,t.timeStamp||new Date().getTime())&&ol(s,this.instance.config.rageclick)&&this.bo(t,"$rageclick");var i=e===yn;if(s&&(function(d,h,p,f,m,g){var _;if(!v||Jo(d)||p!=null&&p.url_allowlist&&!sl(p.url_allowlist,g)||p!=null&&p.url_ignorelist&&sl(p.url_ignorelist,g))return!1;if(p!=null&&p.dom_event_allowlist){var w=p.dom_event_allowlist;if(w&&!w.some((S=>h.type===S)))return!1}var b=Cu(d,f),I=b.parentIsUsefulElement,F=b.targetElementList;if(!(function(S,A){var R=A?.element_allowlist;if(x(R))return!0;var N,T=function(J){if(R.some((z=>J.tagName.toLowerCase()===z)))return{v:!0}};for(var O of S)if(N=T(O))return N.v;return!1})(F,p)||!so(F,p?.css_selector_allowlist)||so(F,(_=p?.css_selector_ignorelist)!==null&&_!==void 0?_:mp))return!1;try{var P=v.getComputedStyle(d);if(P&&P.getPropertyValue("cursor")==="pointer"&&h.type==="click")return!0}catch{}var j=d.tagName.toLowerCase();switch(j){case"html":return!1;case"form":return(m||["submit"]).indexOf(h.type)>=0;case"input":case"select":case"textarea":return(m||["change","click"]).indexOf(h.type)>=0;default:return I?(m||["click"]).indexOf(h.type)>=0:(m||["click"]).indexOf(h.type)>=0&&(Ko.indexOf(j)>-1||d.getAttribute("contenteditable")==="true")}})(s,t,this.Ne,i,i?["copy","cut"]:void 0,this.instance)){var n=cf(s,{e:t,maskAllElementAttributes:this.instance.config.mask_all_element_attributes,maskAllText:this.instance.config.mask_all_text,elementAttributeIgnoreList:this.Ne.element_attribute_ignorelist,elementsChainAsString:this.po,disableCaptureUrlHashes:this.instance.config.disable_capture_url_hashes}),o=n.props;if(n.explicitNoCapture)return!1;var a=this.getElementSelectors(s);if(a&&a.length>0&&(o.$element_selectors=a),e===yn){var l,u=xu(v==null||(l=v.getSelection())==null?void 0:l.toString()),c=t.type||"clipboard";if(!u)return!1;o.$selected_content=u,o.$copy_type=c}return this.instance.capture(e,o),!0}}}isBrowserSupported(){return Se(C?.querySelectorAll)}},historyAutocapture:class{constructor(t){var e;this._instance=t,this._o=(v==null||(e=v.location)==null?void 0:e.pathname)||""}initialize(){this.startIfEnabled()}get isEnabled(){return this._instance.config.capture_pageview==="history_change"}startIfEnabled(){this.isEnabled&&(k.info("History API monitoring enabled, starting..."),this.monitorHistoryChanges())}stop(){this.wo&&this.wo(),this.wo=void 0,k.info("History API monitoring stopped")}monitorHistoryChanges(){v&&v.history&&(this.ko("pushState"),this.ko("replaceState"),this.xo())}ko(t){var e;if(v&&((e=v.history[t])==null||!e.__posthog_wrapped__)){var r=this;(function(s,i,n){try{if(!(i in s))return $l;var o={next:s[i]},a=n((function(){for(var l=arguments.length,u=new Array(l),c=0;l>c;c++)u[c]=arguments[c];return o.next.apply(this,u)}));return Se(a)&&(a.prototype=a.prototype||{},Object.defineProperties(a,{__posthog_wrapped__:{enumerable:!1,value:!0},__posthog_layer__:{enumerable:!1,value:o}})),s[i]=a,()=>{if(s[i]!==a)for(var l=s[i];Se(l)&&l.__posthog_layer__;){var u=l.__posthog_layer__;if(u.next===a)return void(u.next=o.next);l=u.next}else s[i]=o.next}}catch{return $l}})(v.history,t,(s=>function(i,n,o){s.call(this,i,n,o),r.So(t)}))}}So(t){try{var e,r=v==null||(e=v.location)==null?void 0:e.pathname;if(!r)return;r!==this._o&&this.isEnabled&&this._instance.capture(nr,{navigation_type:t}),this._o=r}catch(s){k.error("Error capturing "+t+" pageview",s)}}xo(){if(!this.wo){var t=()=>{this.So("popstate")};ie(v,"popstate",t),this.wo=()=>{v&&v.removeEventListener("popstate",t)}}}},heatmaps:class{get Ne(){return this.instance.config}constructor(t){var e;this.Co=!1,this.vo=!1,this.Mo=null,this.instance=t,this.Co=!((e=this.instance.persistence)==null||!e.props[Hn]),this.rageclicks=new Al(t.config.rageclick)}initialize(){this.startIfEnabled()}get flushIntervalMilliseconds(){var t=5e3;return te(this.Ne.capture_heatmaps)&&this.Ne.capture_heatmaps.flush_interval_milliseconds&&(t=this.Ne.capture_heatmaps.flush_interval_milliseconds),t}get isEnabled(){return D(this.Ne.capture_heatmaps)?D(this.Ne.enable_heatmaps)?this.Co:this.Ne.enable_heatmaps:this.Ne.capture_heatmaps!==!1}startIfEnabled(){if(this.isEnabled){if(this.vo)return;df.info("starting..."),this.To(),this.Ie()}else{var t;clearInterval((t=this.Mo)!==null&&t!==void 0?t:void 0),this.Eo(),this.getAndClearBuffer()}}onRemoteConfig(t){if(t.ok){var e=t.config;if("heatmaps"in e){var r=!!e.heatmaps;this.instance.persistence&&this.instance.persistence.register({[Hn]:r}),this.Co=r,this.startIfEnabled()}}}getAndClearBuffer(){var t=this.R;return this.R=void 0,t}Io(t){En(t.originalEvent)&&this.ke(t.originalEvent,"deadclick")}Ie(){this.Mo&&clearInterval(this.Mo),this.Mo=C?.visibilityState==="visible"?setInterval(this.cr.bind(this),this.flushIntervalMilliseconds):null}To(){v&&C&&(this.Po=this.cr.bind(this),ie(v,ni,this.Po),this.Ro=t=>this.ke(t||v?.event),ie(C,"click",this.Ro,{capture:!0}),this.Ao=t=>this.Fo(t||v?.event),ie(C,"mousemove",this.Ao,{capture:!0}),this.Lo=new pl(this.instance,Sp,this.Io.bind(this)),this.Lo.startIfEnabledOrStop(),this.Oo=this.Ie.bind(this),ie(C,ii,this.Oo),this.vo=!0)}Eo(){var t;v&&C&&(this.Po&&v.removeEventListener(ni,this.Po),this.Ro&&C.removeEventListener("click",this.Ro,{capture:!0}),this.Ao&&C.removeEventListener("mousemove",this.Ao,{capture:!0}),this.Oo&&C.removeEventListener(ii,this.Oo),clearTimeout(this.Do),(t=this.Lo)==null||t.stop(),this.vo=!1)}$o(t,e){var r=this.instance.scrollManager.scrollY(),s=this.instance.scrollManager.scrollX(),i=this.instance.scrollManager.scrollElement(),n=(function(o,a,l){for(var u=o;u&&Ft(u)&&!Me(u,"body");){if(u===l)return!1;var c=void 0;try{var d,h,p;c=(d=(h=(p=u.ownerDocument)==null?void 0:p.defaultView)!==null&&h!==void 0?h:v)==null?void 0:d.getComputedStyle(u).position}catch{return!1}if(M(a,c))return!0;u=ku(u)}return!1})(an(t),["fixed","sticky"],i);return{x:t.clientX+(n?0:s),y:t.clientY+(n?0:r),target_fixed:n,type:e}}ke(t,e){var r;if(e===void 0&&(e="click"),!rl(t.target)&&En(t)){var s=this.$o(t,e);(r=this.rageclicks)!=null&&r.isRageClick(t.clientX,t.clientY,new Date().getTime())&&ol(an(t),this.instance.config.rageclick)&&this.Vt(E({},s,{type:"rageclick"})),this.Vt(s)}}Fo(t){!rl(t.target)&&En(t)&&(clearTimeout(this.Do),this.Do=setTimeout((()=>{this.Vt(this.$o(t,"mousemove"))}),500))}Vt(t){if(v){var e=this.Ne.disable_capture_url_hashes?Ct(v.location.href):v.location.href,r=this.Ne.custom_personal_data_properties,s=this.Ne.mask_personal_data_properties?[...vr,...r||[]]:[],i=is(e,s,ns);this.R=this.R||{},this.R[i]||(this.R[i]=[]),this.R[i].push(t)}}cr(){this.R&&!mt(this.R)&&this.instance.capture("$$heatmap",{$heatmap_data:this.getAndClearBuffer()})}},deadClicksAutocapture:pl,webVitalsAutocapture:class{constructor(t){var e;this.Co=!1,this.vo=!1,this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},this.No=()=>{clearTimeout(this.qo),this.qo=void 0,this.R.metrics.length!==0&&(this._instance.capture("$web_vitals",E({$current_url:this.R.url},this.R.metrics.reduce(((r,s)=>E({},r,{["$web_vitals_"+s.name+"_event"]:E({},s),["$web_vitals_"+s.name+"_value"]:s.value})),{}))),this.R={navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0})},this.jo=r=>{var s;if(this.R=this.R||{navigationKey:void 0,url:void 0,metrics:[],firstMetricTimestamp:void 0},D(r?.name)||D(r?.value))Lt.error("Invalid metric received",r);else{var i=typeof r.navigationURL=="string"?r.navigationURL:void 0,n=this.Bo(i);if(!x(n)){var o=he(r.navigationId)||typeof r.navigationId=="string"?"navigation:"+r.navigationId:"url:"+n;if(!this.Ho||this.Ho>r.value){this.R.navigationKey!==o&&(this.No(),this.qo=setTimeout(this.No,this.flushToCaptureTimeoutMs)),x(this.R.navigationKey)&&(this.R.navigationKey=o,this.R.url=n),this.R.firstMetricTimestamp=x(this.R.firstMetricTimestamp)?Date.now():this.R.firstMetricTimestamp,r.attribution&&r.attribution.interactionTargetElement&&(r.attribution.interactionTargetElement=void 0);var a=(s=this._instance.sessionManager)==null?void 0:s.checkAndGetSessionAndWindowId(!0),l=E({},r,i?{navigationURL:n}:{},{$current_url:n,timestamp:Date.now()});x(a)||(l.$session_id=a.sessionId,l.$window_id=a.windowId),this.R.metrics.push(l),this.R.metrics.length===this.allowedMetrics.length&&this.No()}else Lt.error("Ignoring metric with value >= "+this.Ho,r)}}},this.Uo=()=>{if(!this.vo){var r,s,i,n,o=$.__PosthogExtensions__,a=o?.postHogWebVitalsCallbacksByFlavor,l=a?.[this.zo]||(this.zo==="web-vitals"&&x(a)?o?.postHogWebVitalsCallbacks:void 0);if(x(l)||(r=l.onLCP,s=l.onCLS,i=l.onFCP,n=l.onINP),r&&s&&i&&n){var u={reportSoftNavs:this.useSoftNavs};this.allowedMetrics.indexOf("LCP")>-1&&r(this.jo.bind(this),u),this.allowedMetrics.indexOf("CLS")>-1&&s(this.jo.bind(this),u),this.allowedMetrics.indexOf("FCP")>-1&&i(this.jo.bind(this),u),this.allowedMetrics.indexOf("INP")>-1&&n(this.jo.bind(this),u),this.vo=!0}else Lt.error("web vitals callbacks not loaded - not starting")}},this._instance=t,this.Co=!((e=this._instance.persistence)==null||!e.props[Vn]),this.startIfEnabled()}get Wo(){return this._instance.config.capture_performance}get allowedMetrics(){var t,e,r=te(this.Wo)?(t=this.Wo)==null?void 0:t.web_vitals_allowed_metrics:void 0;return D(r)?((e=this._instance.persistence)==null?void 0:e.props[Gn])||["CLS","FCP","INP","LCP"]:r}get flushToCaptureTimeoutMs(){return(te(this.Wo)?this.Wo.web_vitals_delayed_flush_ms:void 0)||5e3}get useAttribution(){var t=te(this.Wo)?this.Wo.web_vitals_attribution:void 0;return t!=null&&t}get useSoftNavs(){var t=te(this.Wo)?this.Wo.__preview_web_vitals_soft_navs:void 0;return t!=null&&t}get Ho(){var t=te(this.Wo)&&he(this.Wo.__web_vitals_max_value)?this.Wo.__web_vitals_max_value:Rl;return t>0&&6e4>=t?Rl:t}get isEnabled(){var t=se?.protocol;if(t!=="http:"&&t!=="https:")return Lt.info("Web Vitals are disabled on non-http/https protocols"),!1;var e=te(this.Wo)?this.Wo.web_vitals:Ke(this.Wo)?this.Wo:void 0;return Ke(e)?e:this.Co}startIfEnabled(){this.isEnabled&&!this.vo&&(Lt.info("enabled, starting..."),this.ai(this.Uo))}onRemoteConfig(t){if(t.ok){var e=t.config;if("capturePerformance"in e){var r=te(e.capturePerformance)&&!!e.capturePerformance.web_vitals,s=te(e.capturePerformance)?e.capturePerformance.web_vitals_allowed_metrics:void 0;this._instance.persistence&&(this._instance.persistence.register({[Vn]:r}),this._instance.persistence.register({[Gn]:s})),this.Co=r,this.startIfEnabled()}}}get zo(){return this.useSoftNavs?this.useAttribution?"web-vitals-with-attribution-soft-navs":"web-vitals-soft-navs":this.useAttribution?"web-vitals-with-attribution":"web-vitals"}ai(t){var e=$.__PosthogExtensions__,r=this.zo,s=e?.postHogWebVitalsCallbacksByFlavor;s!=null&&s[r]||r==="web-vitals"&&x(s)&&e!=null&&e.postHogWebVitalsCallbacks?t():e==null||e.loadExternalDependency==null||e.loadExternalDependency(this._instance,r,(i=>{i?Lt.error("failed to load script",i):t()}))}Bo(t){var e=t||v?.location.href;if(e){var r=this._instance.config.disable_capture_url_hashes?Ct(e):e,s=this._instance.config.custom_personal_data_properties,i=this._instance.config.mask_personal_data_properties?[...vr,...s||[]]:[];return is(r,i,ns)}Lt.error("Could not determine current URL")}}},bf={exceptionObserver:class{constructor(t){var e;this.Uo=()=>{var r;if(v&&this.isEnabled&&(r=$.__PosthogExtensions__)!=null&&r.errorWrappingFunctions){var s=$.__PosthogExtensions__.errorWrappingFunctions.wrapOnError,i=$.__PosthogExtensions__.errorWrappingFunctions.wrapUnhandledRejection,n=$.__PosthogExtensions__.errorWrappingFunctions.wrapConsoleError;try{!this.Vo&&this.Ne.capture_unhandled_errors&&(this.Vo=s(this.captureException.bind(this))),!this.Zo&&this.Ne.capture_unhandled_rejections&&(this.Zo=i(this.captureException.bind(this))),!this.Go&&this.Ne.capture_console_errors&&(this.Go=n(this.captureException.bind(this)))}catch(o){Mr.error("failed to start",o),this.Qo()}}},this._instance=t,this.Ko=!((e=this._instance.persistence)==null||!e.props[Wn]),this.Jo=new _h(E({},(function(r){var s,i,n,o;return r===void 0&&(r={}),{refillRate:(s=(i=r.exceptionRateLimiterRefillRate)!==null&&i!==void 0?i:r.__exceptionRateLimiterRefillRate)!==null&&s!==void 0?s:1,bucketSize:(n=(o=r.exceptionRateLimiterBucketSize)!==null&&o!==void 0?o:r.__exceptionRateLimiterBucketSize)!==null&&n!==void 0?n:10}})(this._instance.config.error_tracking),{refillInterval:1e4,rt:Mr})),this.Ne=this.Yo(),this.startIfEnabledOrStop()}Yo(){var t=this._instance.config.capture_exceptions,e={capture_unhandled_errors:!1,capture_unhandled_rejections:!1,capture_console_errors:!1};return te(t)?e=E({},e,t):(x(t)?this.Ko:t)&&(e=E({},e,{capture_unhandled_errors:!0,capture_unhandled_rejections:!0})),e}get isEnabled(){return this.Ne.capture_console_errors||this.Ne.capture_unhandled_errors||this.Ne.capture_unhandled_rejections}startIfEnabledOrStop(){this.isEnabled?(Mr.info("enabled"),this.Qo(),this.ai(this.Uo)):this.Qo()}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.errorWrappingFunctions?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"exception-autocapture",(s=>{if(s)return Mr.error("failed to load script",s);t()}))}Qo(){var t,e,r;(t=this.Vo)==null||t.call(this),this.Vo=void 0,(e=this.Zo)==null||e.call(this),this.Zo=void 0,(r=this.Go)==null||r.call(this),this.Go=void 0}onRemoteConfig(t){if(t.ok){var e=t.config;"autocaptureExceptions"in e&&(this.Ko=!!e.autocaptureExceptions||!1,this._instance.persistence&&this._instance.persistence.register({[Wn]:this.Ko}),this.Ne=this.Yo(),this.startIfEnabledOrStop())}}onConfigChange(){this.Ne=this.Yo()}captureException(t){var e,r,s,i=(e=t==null||(r=t.$exception_list)==null||(r=r[0])==null?void 0:r.type)!==null&&e!==void 0?e:"Exception";this.Jo.consumeRateLimit(i)?Mr.info("Skipping exception capture because of client rate limiting.",{exception:i}):(s=this._instance.exceptions)==null||s.sendExceptionEvent(t)}},exceptions:class{constructor(t){var e,r;this.Xo=[],this.tl=new Mh([new Wh,new Xh,new qh,new zh,new Yh,new Jh,new Gh,new Zh],(function(s){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;i>o;o++)n[o-1]=arguments[o];return function(a,l){l===void 0&&(l=0);for(var u=[],c=a.split(` +`),d=l;c.length>d;d++){var h=c[d];if(1024>=h.length){var p=Xa.test(h)?h.replace(Xa,"$1"):h;if(!p.match(/\S*Error: /)){for(var f of n){var m=f(p,s);if(m){u.push(m);break}}if(u.length>=50)break}}}return(function(g){if(!g.length)return[];var _=Array.from(g);return _.reverse(),_.slice(0,50).map((w=>{return E({},w,{filename:w.filename||(b=_,b[b.length-1]||{}).filename,function:w.function||gr});var b}))})(u)}})("web:javascript",Bh,Hh)),this._instance=t,this.Xo=(e=(r=this._instance.persistence)==null?void 0:r.get_property(zn))!==null&&e!==void 0?e:[],this.el=Qs(this.il()),this.rl=new ep(this.el)}onConfigChange(){this.el=Qs(this.il()),this.rl.setConfig(this.el)}onRemoteConfig(t){var e,r,s;if(t.ok){var i=t.config;if("errorTracking"in i){var n=(e=(r=i.errorTracking)==null?void 0:r.suppressionRules)!==null&&e!==void 0?e:[],o=(s=i.errorTracking)==null?void 0:s.captureExtensionExceptions;this.Xo=n,this._instance.persistence&&this._instance.persistence.register({[zn]:this.Xo,[qn]:o})}}}get nl(){var t,e=!!this._instance.get_property(qn),r=this._instance.config.error_tracking.captureExtensionExceptions;return(t=r??e)!==null&&t!==void 0&&t}buildProperties(t,e){return this.tl.buildFromUnknown(t,{syntheticException:e?.syntheticException,mechanism:{handled:e?.handled}})}addExceptionStep(t,e){if(this.el.enabled)try{if(!W(t)||t.trim().length===0)return void Xe.warn("Ignoring exception step because message must be a non-empty string");var r=(function(n){if(!n)return{sanitizedProperties:{},droppedKeys:[]};var o=[];return{sanitizedProperties:Object.keys(n).reduce(((a,l)=>Qh.has(l)?(o.push(l),a):(a[l]=n[l],a)),{}),droppedKeys:o}})(this.sl(e)),s=r.sanitizedProperties,i=r.droppedKeys;i.length>0&&Xe.warn("Ignoring reserved exception step fields",{droppedKeys:i}),this.rl.add(E({[Zs]:t,[Xs]:new Date().toISOString()},s))}catch(n){Xe.error("Failed to add exception step. Ignoring breadcrumb.",n)}}sendExceptionEvent(t){try{var e=t.$exception_list;if(this.al(e)){if(this.ol(e))return this.ll("Exception dropped: matched a suppression rule"),void Xe.info("Skipping exception capture because a suppression rule matched");if(!this.nl&&this.ul(e))return this.ll("Exception dropped: thrown by a browser extension"),void Xe.info("Skipping exception capture because it was thrown by an extension");if(!this._instance.config.error_tracking.__capturePostHogExceptions&&this.hl(e))return this.ll("Exception dropped: thrown by the PostHog SDK"),void Xe.info("Skipping exception capture because it was thrown by the PostHog SDK")}var r=this.el.enabled&&D(t.$exception_steps)?this.dl(t):t,s=typeof(n=globalThis._posthogReleaseId)=="string"&&n.length>0?n:void 0;s&&(r.$release_id=s);try{var i=this._instance.capture("$exception",r,{_noTruncate:!0,_batchKey:"exceptionEvent",Wn:!0});return i&&this.rl.clear(),i}catch(o){return Xe.error("Failed to capture exception event. Dropping this exception.",o),void this.rl.clear()}}catch(o){return void Xe.error("Failed to process exception event. Ignoring this exception.",o)}var n}dl(t){try{var e=this.rl.getAttachable();return e.length===0?t:E({},t,{$exception_steps:e})}catch(r){return Xe.error("Failed to read buffered exception steps. Capturing exception without steps.",r),t}}ll(t){this.el.enabled&&this.rl.add({[Zs]:t,[Xs]:new Date().toISOString()})}sl(t){return te(t)?E({},t):{}}il(){var t,e;return(t=(e=this._instance.config.error_tracking)==null?void 0:e.exception_steps)!==null&&t!==void 0?t:{}}ol(t){if(t.length===0)return!1;try{var e=t.reduce(((r,s)=>{var i=s.type,n=s.value;return W(i)&&i.length>0&&r.$exception_types.push(i),W(n)&&n.length>0&&r.$exception_values.push(n),r}),{$exception_types:[],$exception_values:[]});return this.Xo.some((r=>{var s=r.values.map((i=>{var n=td[i.operator],o=e[i.key];if(!n||!o)return!1;var a=L(i.value)?i.value:[i.value];return a.length>0&&n(a,o)}));return r.type==="OR"?s.some(Boolean):s.every(Boolean)}))}catch(r){return Xe.warn("Failed to evaluate suppression rules. Capturing the exception.",r),!1}}ul(t){return t.flatMap((e=>{var r,s;return(r=(s=e.stacktrace)==null?void 0:s.frames)!==null&&r!==void 0?r:[]})).some((e=>e.filename&&e.filename.startsWith("chrome-extension://")))}hl(t){if(t.length>0){var e,r,s,i,n=(e=(r=t[0].stacktrace)==null?void 0:r.frames)!==null&&e!==void 0?e:[],o=n[n.length-1];return(s=o==null||(i=o.filename)==null?void 0:i.includes("posthog.com/static"))!==null&&s!==void 0&&s}return!1}al(t){return!D(t)&&L(t)}}},Ef=E({productTours:class{get Mr(){return this._instance.persistence}constructor(t){this.vl=null,this.cl=null,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(t.ok){var e=t.config;if("productTours"in e){var r,s;if(this.Mr&&this.Mr.register({[Wo]:!!e.productTours}),!Sn(this._instance))return!this.vl&&D((r=this.Mr)==null?void 0:r.props[Wr])||Ps.info("product tours disabled; stopping and clearing cached tours"),(s=this.vl)==null||s.stop(),this.vl=null,void this.clearCache();this.loadIfEnabled()}}}loadIfEnabled(){!this.vl&&Sn(this._instance)&&this.ai((()=>this.fl()))}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.generateProductTours?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"product-tours",(s=>{s?Ps.error("Could not load product tours script",s):t()}))}fl(){var t;!this.vl&&(t=$.__PosthogExtensions__)!=null&&t.generateProductTours&&(this.vl=$.__PosthogExtensions__.generateProductTours(this._instance,!0))}getProductTours(t,e){if(e===void 0&&(e=!1),!L(this.cl)||e){var r=this.Mr;if(r){var s=r.props[Wr];if(L(s)&&!e)return this.cl=s,void t(s,{isLoaded:!0})}this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/product_tours/?token="+this._instance.config.token),method:"GET",timestampMode:"query",callback:i=>{if(Sn(this._instance)){var n=i.statusCode;if(n!==200||!i.json){var o="Product Tours API could not be loaded, status: "+n;return n===0?i.error||Ps.warn(o):Ps.error(o),void t([],{isLoaded:!1,error:o})}var a=L(i.json.product_tours)?i.json.product_tours:[];this.cl=a,r&&r.register({[Wr]:a}),t(a,{isLoaded:!0})}else t([],{isLoaded:!0})}})}else t(this.cl,{isLoaded:!0})}getActiveProductTours(t){D(this.vl)?t([],{isLoaded:!1,error:"Product tours not loaded"}):this.vl.getActiveProductTours(t)}showProductTour(t){var e;(e=this.vl)==null||e.showTourById(t)}previewTour(t){this.vl?this.vl.previewTour(t):this.ai((()=>{var e;this.fl(),(e=this.vl)==null||e.previewTour(t)}))}dismissProductTour(){var t;(t=this.vl)==null||t.dismissTour("user_clicked_skip")}nextStep(){var t;(t=this.vl)==null||t.nextStep()}previousStep(){var t;(t=this.vl)==null||t.previousStep()}clearCache(){var t;this.cl=null,(t=this.Mr)==null||t.unregister(Wr)}resetTour(t){var e;(e=this.vl)==null||e.resetTour(t)}resetAllTours(){var t;(t=this.vl)==null||t.resetAllTours()}cancelPendingTour(t){var e;(e=this.vl)==null||e.cancelPendingTour(t)}}},$i),Sf={siteApps:class{constructor(t){this.pl=0,this._instance=t,this.gl=[],this.apps={}}get isEnabled(){return!!this._instance.config.opt_in_site_apps}ml(t,e){if(e){var r=this.globalsForEvent(e);this.gl.push(r),this.gl.length>1e3&&(this.gl=this.gl.slice(10))}}get siteAppLoaders(){var t;return(t=$._POSTHOG_REMOTE_CONFIG)==null||(t=t[this._instance.config.token])==null?void 0:t.siteApps}initialize(){if(this.isEnabled){var t=this._instance._addCaptureHook(this.ml.bind(this));this.yl=()=>{t(),this.gl=[],this.yl=void 0}}}globalsForEvent(t){var e,r,s,i,n,o,a;if(!t)throw new Error("Event payload is required");var l={},u=this._instance.get_property("$groups")||[],c=this._instance.get_property("$stored_group_properties")||{};for(var d of Object.entries(c)){var h=d[0];l[h]={id:u[h],type:h,properties:d[1]}}var p=t.$set_once,f=t.$set;return{event:E({},Ic(t,hf),{properties:E({},t.properties,f?{$set:E({},(e=(r=t.properties)==null?void 0:r.$set)!==null&&e!==void 0?e:{},f)}:{},p?{$set_once:E({},(s=(i=t.properties)==null?void 0:i.$set_once)!==null&&s!==void 0?s:{},p)}:{}),elements_chain:(n=(o=t.properties)==null?void 0:o.$elements_chain)!==null&&n!==void 0?n:"",distinct_id:(a=t.properties)==null?void 0:a.distinct_id}),person:{properties:this._instance.get_property("$stored_person_properties")},groups:l}}bl(t){var e,r=(e=t.tagName)==null?void 0:e.toLowerCase();return r==="style"&&this._instance.config.prepare_external_dependency_stylesheet?this._instance.config.prepare_external_dependency_stylesheet(t)||(Ze.error("prepare_external_dependency_stylesheet returned null"),null):r==="script"&&this._instance.config.prepare_external_dependency_script?this._instance.config.prepare_external_dependency_script(t)||(Ze.error("prepare_external_dependency_script returned null"),null):t}_l(){var t,e,r,s,i,n,o,a;if(!this._instance.config.prepare_external_dependency_stylesheet&&!this._instance.config.prepare_external_dependency_script)return()=>{};var l=C?.defaultView,u=l==null||(t=l.Node)==null?void 0:t.prototype;if(!l||!u)return()=>{};if(this.pl++,this.wl)return this.kl();var c=[],d=this,h=new WeakSet,p=(g,_,w)=>{if(g!=null&&g[_]){var b=g[_];g[_]=w(b),c.push((()=>{g[_]=b}))}},f=g=>{if(h.has(g))return g;var _=d.bl(g);return _&&h.add(_),_},m=g=>g.map((_=>typeof _=="string"?_:f(_))).filter((_=>!$e(_)));return p(u,"appendChild",(g=>function(_){var w=f(_);return w?g.call(this,w):_})),p(u,"insertBefore",(g=>function(_,w){var b=f(_);return b?g.call(this,b,w):_})),p(u,"replaceChild",(g=>function(_,w){var b=f(_);return b?g.call(this,b,w):w})),[(e=l.Element)==null?void 0:e.prototype,(r=l.Document)==null?void 0:r.prototype,(s=l.DocumentFragment)==null?void 0:s.prototype].forEach((g=>{p(g,"append",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"prepend",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))}))})),[(i=l.Element)==null?void 0:i.prototype,(n=l.CharacterData)==null?void 0:n.prototype,(o=l.DocumentType)==null?void 0:o.prototype].forEach((g=>{p(g,"before",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"after",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];return _.apply(this,m(b))})),p(g,"replaceWith",(_=>function(){for(var w=arguments.length,b=new Array(w),I=0;w>I;I++)b[I]=arguments[I];var F=m(b);return b.length&&!F.length?void 0:_.apply(this,F)}))})),p((a=l.Element)==null?void 0:a.prototype,"insertAdjacentElement",(g=>function(_,w){var b=f(w);return b?g.call(this,_,b):null})),this.wl=()=>{c.forEach((g=>g())),this.wl=void 0},this.kl()}kl(){var t=!1;return()=>{var e;t||(t=!0,this.pl--,this.pl===0&&((e=this.wl)==null||e.call(this)))}}xl(t,e){e===void 0&&(e=!0);var r=this._l();try{var s=t(r);return e&&r(),s}catch(i){throw r(),i}}setupSiteApp(t){var e=this.apps[t.id],r=()=>{var o;!e.errored&&this.gl.length&&(Ze.info("Processing "+this.gl.length+" events for site app with id "+t.id),this.gl.forEach((a=>this.xl((()=>e.processEvent==null?void 0:e.processEvent(a))))),e.processedBuffer=!0),Object.values(this.apps).every((a=>a.processedBuffer||a.errored))&&((o=this.yl)==null||o.call(this))},s=!1,i=o=>{e.errored=!o,e.loaded=!0,Ze.info("Site app with id "+t.id+" "+(o?"loaded":"errored")),s&&r()};try{var n=this.xl((o=>t.init({posthog:this._instance,callback(a){o(),i(a)}})),!1).processEvent;n&&(e.processEvent=n),s=!0}catch(o){Ze.error(Ml+t.id,o),i(!1)}if(s&&e.loaded)try{r()}catch(o){Ze.error("Error while processing buffered events PostHog app with config id "+t.id,o),e.errored=!0}}Sl(){var t=this.siteAppLoaders||[];for(var e of t)this.apps[e.id]={id:e.id,loaded:!1,errored:!1,processedBuffer:!1};for(var r of t)this.setupSiteApp(r)}Cl(t){var e=this;if(Object.keys(this.apps).length!==0){var r=this.globalsForEvent(t),s=function(n){try{e.xl((()=>n.processEvent==null?void 0:n.processEvent(r)))}catch(o){Ze.error("Error while processing event "+t.event+" for site app "+n.id,o)}};for(var i of Object.values(this.apps))s(i)}}onRemoteConfig(t){var e,r,s,i=this;if((e=this.siteAppLoaders)!=null&&e.length)return this.isEnabled?(this.Sl(),void this._instance.on("eventCaptured",(l=>this.Cl(l)))):void Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.');if((r=this.yl)==null||r.call(this),t.ok){var n=t.config;if((s=n.siteApps)!=null&&s.length)if(this.isEnabled){var o=function(){var l,u=a.id,c=a.url;$["__$$ph_site_app_"+u]=i._instance,(l=$.__PosthogExtensions__)==null||l.loadSiteApp==null||l.loadSiteApp(i._instance,c,(d=>{if(d)return Ze.error(Ml+u,d)}))};for(var a of n.siteApps)o()}else Ze.error('PostHog site apps are disabled. Enable the "opt_in_site_apps" config to proceed.')}}}},xf={tracingHeaders:class{constructor(t){this.Ml=void 0,this.Tl=void 0,this.El=void 0,this.Uo=()=>{var e,r,s=this.Il();s?(x(this.Ml)&&(this.Ml=(e=$.__PosthogExtensions__)==null||(e=e.tracingHeadersPatchFns)==null?void 0:e._patchXHR(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager)),x(this.Tl)&&(this.Tl=(r=$.__PosthogExtensions__)==null||(r=r.tracingHeadersPatchFns)==null?void 0:r._patchFetch(s,(()=>this._instance.get_distinct_id()),this._instance.sessionManager))):this.Qo()},this._instance=t}initialize(){this.startIfEnabledOrStop()}ai(t){var e,r;(e=$.__PosthogExtensions__)!=null&&e.tracingHeadersPatchFns?t():(r=$.__PosthogExtensions__)==null||r.loadExternalDependency==null||r.loadExternalDependency(this._instance,"tracing-headers",(s=>{if(s)return uf.error("failed to load script",s);t()}))}Pl(){var t,e;return(t=(e=this._instance.config.tracing_headers)!==null&&e!==void 0?e:this._instance.config.addTracingHeaders)!==null&&t!==void 0?t:this._instance.config.__add_tracing_headers}Il(){var t=this.Pl();return L(t)?(L(this.El)?this.El.splice(0,this.El.length,...t):this.El=[...t],t.length>0?this.El:void 0):(L(this.El)&&this.El.splice(0),this.El=t||void 0,this.El)}Qo(){var t,e;(t=this.Ml)==null||t.call(this),(e=this.Tl)==null||e.call(this),this.Ml=void 0,this.Tl=void 0}startIfEnabledOrStop(){this.Il()?this.ai(this.Uo):this.Qo()}}},kf=E({surveys:class{get Ne(){return this._instance.config}constructor(t){this.Rl=void 0,this._surveyManager=null,this.Al=!1,this.Fl=[],this.Ll=null,this.Ol=null,this._instance=t,this._surveyEventReceiver=null}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this.Ne.disable_surveys){if(!t.ok)return q.warn("Remote config unavailable. Not loading surveys.");var e=t.config.surveys;if(D(e))return q.warn("Flags not loaded yet. Not loading surveys.");var r=L(e);this.Rl=r?e.length>0:e,q.info("flags response received, isSurveysEnabled: "+this.Rl),this.loadIfEnabled()}}reset(){try{var t;(t=this._surveyEventReceiver)==null||t.reset(),localStorage.removeItem("lastSeenSurveyDate");for(var e=[],r=0;rlocalStorage.removeItem(i)))}catch{}}loadIfEnabled(){if(!this._surveyManager)if(this.Al)q.info("Already initializing surveys, skipping...");else if(this.Ne.disable_surveys)q.info(Ll);else if(this.Ne.cookieless_mode&&this._instance.consent.isOptedOut())q.info("Not loading surveys in cookieless mode without consent.");else{var t=$?.__PosthogExtensions__;if(t){if(!x(this.Rl)||this.Ne.advanced_enable_surveys){var e=this.Rl||this.Ne.advanced_enable_surveys;this.Al=!0;try{var r=t.generateSurveys;if(r)return void this.Dl(r,e);var s=t.loadExternalDependency;if(!s)return void this.$l(qo);s(this._instance,"surveys",(i=>{i||!t.generateSurveys?this.$l("Could not load surveys script",i):this.Dl(t.generateSurveys,e)}))}catch(i){throw this.$l("Error initializing surveys",i),i}finally{this.Al=!1}}}else q.error("PostHog Extensions not found.")}}Dl(t,e){this._surveyManager=t(this._instance,e),this._surveyEventReceiver=new gf(this._instance),q.info("Surveys loaded successfully"),this.Nl({isLoaded:!0})}$l(t,e){q.error(t,e),this.Nl({isLoaded:!1,error:t})}onSurveysLoaded(t){return this.Fl.push(t),this._surveyManager&&this.Nl({isLoaded:!0}),()=>{this.Fl=this.Fl.filter((e=>e!==t))}}getSurveys(t,e){if(e===void 0&&(e=!1),this.Ne.disable_surveys)return q.info(Ll),t([]);var r,s=this._instance.get_property(Jn);if(s&&!e)return t(s,{isLoaded:!0}),void(this.ql()&&this.getSurveys((()=>{}),!0));typeof Promise<"u"&&this.Ll?this.Ll.then((i=>t(i.surveys,i.context))):(typeof Promise<"u"&&(this.Ll=new Promise((i=>{r=i}))),this._instance._send_request({url:this._instance.requestRouter.endpointFor("api","/api/surveys/?token="+this.Ne.token),method:"GET",timestampMode:"query",timeout:this.Ne.surveys_request_timeout_ms,callback:i=>{var n;this.Ll=null;var o=i.statusCode;if(o!==200||!i.json){var a="Surveys API could not be loaded, status: "+o;o!==0?q.error(a):i.error||q.warn(a),this.Ol=Date.now();var l={isLoaded:!1,error:a};return t([],l),void(r==null||r({surveys:[],context:l}))}this.Ol=null;var u,c=i.json.surveys||[],d=c.filter((p=>(function(f){return!(!f.start_date||f.end_date)})(p)&&(sd(p)||(function(f){var m;return!((m=f.conditions)==null||(m=m.actions)==null||(m=m.values)==null||!m.length)})(p))));d.length>0&&((u=this._surveyEventReceiver)==null||u.register(d)),(n=this._instance.persistence)==null||n.register({[Jn]:c,[ti]:Date.now()});var h={isLoaded:!0};t(c,h),r?.({surveys:c,context:h})}}))}ql(){return this.jl()&&!this.Ll&&!this.Bl()}jl(){var t=this._instance.get_property(ti);return he(t)&&Date.now()-t>3e5}Bl(){return he(this.Ol)&&3e5>Date.now()-this.Ol}markSurveyAsSeen(t,e){var r,s={id:t,current_iteration:(r=e?.iteration)!==null&&r!==void 0?r:null};nd(s);try{localStorage.setItem("lastSeenSurveyDate",new Date().toISOString())}catch{}}Nl(t){for(var e of this.Fl)try{if(!t.isLoaded)return e([],t);this.getSurveys(e)}catch(r){q.error("Error in survey callback",r)}}getActiveMatchingSurveys(t,e){if(e===void 0&&(e=!1),!D(this._surveyManager))return this._surveyManager.getActiveMatchingSurveys(t,e);q.warn("init was not called")}Hl(t){var e=null;return this.getSurveys((r=>{var s;e=(s=r.find((i=>i.id===t)))!==null&&s!==void 0?s:null})),e}Ul(t){if(D(this._surveyManager))return{eligible:!1,reason:As};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyEligibility(e):{eligible:!1,reason:"Survey not found"}}zl(t){if(D(this._surveyManager))return{eligible:!1,reason:As};var e=typeof t=="string"?this.Hl(t):t;return e?this._surveyManager.checkSurveyRenderability(e):{eligible:!1,reason:"Survey not found"}}canRenderSurvey(t){if(D(this._surveyManager))return q.warn("init was not called"),{visible:!1,disabledReason:As};var e=this.zl(t);return{visible:e.eligible,disabledReason:e.reason}}canRenderSurveyAsync(t,e){return D(this._surveyManager)?(q.warn("init was not called"),Promise.resolve({visible:!1,disabledReason:As})):new Promise((r=>{this.getSurveys((s=>{var i,n=(i=s.find((a=>a.id===t)))!==null&&i!==void 0?i:null;if(n){var o=this.zl(n);r({visible:o.eligible,disabledReason:o.reason})}else r({visible:!1,disabledReason:"Survey not found"})}),e)}))}renderSurvey(t,e,r){var s;if(D(this._surveyManager))q.warn("init was not called");else{var i=typeof t=="string"?this.Hl(t):t;if(i!=null&&i.id)if(Yp.includes(i.type)){var n=C?.querySelector(e);if(n)return(s=i.appearance)!=null&&s.surveyPopupDelaySeconds?(q.info("Rendering survey "+i.id+" with delay of "+i.appearance.surveyPopupDelaySeconds+" seconds"),void setTimeout((()=>{var o,a;q.info("Rendering survey "+i.id+" with delay of "+((o=i.appearance)==null?void 0:o.surveyPopupDelaySeconds)+" seconds"),(a=this._surveyManager)==null||a.renderSurvey(i,n,r),q.info("Survey "+i.id+" rendered")}),1e3*i.appearance.surveyPopupDelaySeconds)):void this._surveyManager.renderSurvey(i,n,r);q.warn("Survey element not found")}else q.warn("Surveys of type "+i.type+" cannot be rendered in the app");else q.warn("Survey not found")}}displaySurvey(t,e){var r;if(D(this._surveyManager))q.warn("init was not called");else{var s=this.Hl(t);if(s){var i=s;if((r=s.appearance)!=null&&r.surveyPopupDelaySeconds&&e.ignoreDelay&&(i=E({},s,{appearance:E({},s.appearance,{surveyPopupDelaySeconds:0})})),e.displayType!==no.Popover&&e.initialResponses&&q.warn("initialResponses is only supported for popover surveys. prefill will not be applied."),e.ignoreConditions===!1){var n=this.Ul(s);if(!n.eligible)return void q.warn("Survey is not eligible to be displayed: ",n.reason)}e.displayType!==no.Inline?this._surveyManager.handlePopoverSurvey(i,e):this.renderSurvey(i,e.selector,e.properties)}else q.warn("Survey not found")}}cancelPendingSurvey(t){D(this._surveyManager)?q.warn("init was not called"):this._surveyManager.cancelSurvey(t)}handlePageUnload(){var t;(t=this._surveyManager)==null||t.handlePageUnload==null||t.handlePageUnload()}}},$i),If={toolbar:class{constructor(t){this.instance=t}Wl(t){$.ph_toolbar_state=t}Vl(){var t;return(t=$.ph_toolbar_state)!==null&&t!==void 0?t:0}initialize(){return this.maybeLoadToolbar()}maybeLoadToolbar(t,e,r){if(t===void 0&&(t=void 0),e===void 0&&(e=void 0),r===void 0&&(r=void 0),ro(this.instance.config)||!v||!C)return!1;t=t??v.location,r=r??v.history;try{if(!e){try{v.localStorage.setItem("test","test"),v.localStorage.removeItem("test")}catch{return!1}e=v?.localStorage}var s,i=mf||ci(t.hash,"__posthog")||ci(t.hash,"state"),n=i?el((()=>JSON.parse(atob(decodeURIComponent(i)))))||el((()=>JSON.parse(decodeURIComponent(i)))):null;return n&&n.action==="ph_authorize"?((s=n).source="url",s&&Object.keys(s).length>0&&(n.desiredHash?t.hash=n.desiredHash:r?r.replaceState(r.state,"",t.pathname+t.search):t.hash="")):((s=JSON.parse(e.getItem(Ol)||"{}")).source="localstorage",delete s.userIntent),!(!s.token||this.instance.config.token!==s.token||(this.loadToolbar(s),0))}catch{return!1}}Zl(t){var e=$.ph_load_toolbar||$.ph_load_editor;!D(e)&&Se(e)?e(t,this.instance):Dl.warn("No toolbar load function found")}loadToolbar(t){var e=!(C==null||!C.getElementById(wu));if(!v||e)return!1;var r=this.instance.requestRouter.region==="custom"&&this.instance.config.advanced_disable_toolbar_metrics,s=E({token:this.instance.config.token},t,{apiURL:this.instance.requestRouter.endpointFor("ui")},r?{instrument:!1}:{});if(v.localStorage.setItem(Ol,JSON.stringify(E({},s,{source:void 0}))),this.Vl()===2)this.Zl(s);else if(this.Vl()===0){var i;this.Wl(1),(i=$.__PosthogExtensions__)==null||i.loadExternalDependency==null||i.loadExternalDependency(this.instance,"toolbar",(n=>{if(n)return Dl.error("[Toolbar] Failed to load",n),void this.Wl(0);this.Wl(2),this.Zl(s)})),ie(v,"turbolinks:load",(()=>{this.Wl(0),this.loadToolbar(s)}))}return!0}Gl(t){return this.loadToolbar(t)}maybeLoadEditor(t,e,r){return t===void 0&&(t=void 0),e===void 0&&(e=void 0),r===void 0&&(r=void 0),this.maybeLoadToolbar(t,e,r)}}},Cf=E({experiments:ye},$i),Ff={conversations:class{constructor(t){this.Ql=void 0,this._conversationsManager=null,this.Kl=!1,this.Jl=null,this.Yl=!1,this._instance=t}initialize(){this.loadIfEnabled()}onRemoteConfig(t){if(!this._instance.config.disable_conversations&&(this.Xl=t.ok,t.ok)){var e=t.config.conversations;D(e)||(Ke(e)?this.Ql=e:(this.Ql=e.enabled,this.Jl=e),this.loadIfEnabled())}}reset(){var t;(t=this._conversationsManager)==null||t.reset(),this._conversationsManager=null,this.Ql=void 0,this.Jl=null,this.Xl=void 0,this.Yl=!1}loadIfEnabled(){if(!(this._conversationsManager||this.Kl||this._instance.config.disable_conversations||ro(this._instance.config)||this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut())){var t=$?.__PosthogExtensions__;if(t&&!x(this.Ql)&&this.Ql)if(this.Jl&&this.Jl.token){this.Kl=!0;try{var e=t.initConversations;if(e)return this.tu(e),void(this.Kl=!1);var r=t.loadExternalDependency;if(!r)return void this.eu(qo);r(this._instance,"conversations",(s=>{s||!t.initConversations?this.eu("Could not load conversations script",s):this.tu(t.initConversations),this.Kl=!1}))}catch(s){this.eu("Error initializing conversations",s),this.Kl=!1}}else Ue.error("Conversations enabled but missing token in remote config.")}}tu(t){if(this.Jl)try{this._conversationsManager=t(this.Jl,this._instance),this.Yl=!1,Ue.info("Conversations loaded successfully")}catch(e){this.eu("Error completing conversations initialization",e)}else Ue.error("Cannot complete initialization: remote config is null")}eu(t,e){Ue.error(t,e),this._conversationsManager=null,this.Kl=!1,this.Yl=!0}show(){this._conversationsManager?this._conversationsManager.show():Ue.warn("Conversations not loaded yet.")}hide(){this._conversationsManager&&this._conversationsManager.hide()}isAvailable(){return this.Ql===!0&&!$e(this._conversationsManager)}getUnavailableReason(){return this.isAvailable()?null:this._instance.config.disable_conversations?"disabled_by_config":ro(this._instance.config)?"disabled_for_toolbar":this._instance.config.cookieless_mode&&this._instance.consent.isOptedOut()?"consent_opted_out":this.Xl===!1?"remote_config_failed":x(this.Ql)?this.Xl?"disabled_in_project":"remote_config_pending":this.Ql?D(this.Jl)||!this.Jl.token?"missing_token":$!=null&&$.__PosthogExtensions__?this.Kl?"initializing":this.Yl?"load_failed":"not_loaded":"extensions_unavailable":"disabled_in_project"}isVisible(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.isVisible())!==null&&t!==void 0&&t}sendMessage(t,e,r){var s=this;return X((function*(){return s._conversationsManager?s._conversationsManager.sendMessage(t,e,r):(Ue.warn(Dt),null)}))()}getMessages(t,e){var r=this;return X((function*(){return r._conversationsManager?r._conversationsManager.getMessages(t,e):(Ue.warn(Dt),null)}))()}markAsRead(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.markAsRead(t):(Ue.warn(Dt),null)}))()}getTickets(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.getTickets(t):(Ue.warn(Dt),null)}))()}requestRestoreLink(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.requestRestoreLink(t):(Ue.warn(Dt),null)}))()}restoreFromToken(t){var e=this;return X((function*(){return e._conversationsManager?e._conversationsManager.restoreFromToken(t):(Ue.warn(Dt),null)}))()}restoreFromUrlToken(){var t=this;return X((function*(){return t._conversationsManager?t._conversationsManager.restoreFromUrlToken():(Ue.warn(Dt),null)}))()}getCurrentTicketId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getCurrentTicketId())!==null&&t!==void 0?t:null}getWidgetSessionId(){var t,e;return(t=(e=this._conversationsManager)==null?void 0:e.getWidgetSessionId())!==null&&t!==void 0?t:null}Xn(){var t;(t=this._conversationsManager)==null||t.setIdentity()}ts(){var t;(t=this._conversationsManager)==null||t.clearIdentity()}}},Pf={logs:class{constructor(t){var e,r=this;this.iu=!1,this.ru=!1,this.rt=re("[logs]"),this.nu=E({},this.rt,{error(){for(var s=arguments.length,i=new Array(s),n=0;s>n;n++)i[n]=arguments[n];i.some(Vl)||r.rt.error(...i)}}),this.tr=[],this.su=[],this.Sa=0,this.au=()=>{var s,i;this.Sa=0,(s=this.ou)==null||s.onReconnect(),(i=this.lu)==null||i.onReconnect()},this._instance=t,this._instance&&(e=this._instance.config.logs)!=null&&e.captureConsoleLogs&&(this.iu=!0),v&&ie(v,"online",this.au)}uu(t,e,r,s){var i,n=(function(o,a){var l,u,c,d,h,p,f,m=(l=o?.flushIntervalMs)!==null&&l!==void 0?l:3e3,g=(u=o?.maxBufferSize)!==null&&u!==void 0?u:100,_=a!=null&&a.consoleCapture?void 0:(c=o?.maxLogsPerInterval)!==null&&c!==void 0?c:1e3,w=x(_)?Math.max(g,2048):Math.max(g,_),b=o?.resourceAttributes;return{serviceName:(d=(h=b?.["service.name"])!==null&&h!==void 0?h:o?.serviceName)!==null&&d!==void 0?d:a?.serviceNameDefault,serviceVersion:(p=b?.["service.version"])!==null&&p!==void 0?p:o?.serviceVersion,environment:(f=b?.["deployment.environment"])!==null&&f!==void 0?f:o?.environment,resourceAttributes:b,beforeSend:o?.beforeSend,flushIntervalMs:m,maxBufferSize:g,maxQueueSize:w,maxBatchRecordsPerPost:100,rateCapWindowMs:m,maxLogsPerInterval:_,backgroundFlushBudgetMs:0,terminationFlushBudgetMs:0}})((i=this._instance)==null||(i=i.config)==null?void 0:i.logs,r);return[new Rh(this.hu(t,e),n,this.nu,(()=>this.du()),(o=>o()),void 0,s),n]}vu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.ou||this.cu!==e){var r;(r=this.ou)==null||r.reset(),this.cu=e;var s=this.uu((()=>this.tr),(i=>{this.tr=i}));this.ou=s[0],this.fu=s[1]}return this.ou}pu(){var t,e=(t=this._instance)==null||(t=t.config)==null?void 0:t.logs;if(!this.lu||this.gu!==e){var r;(r=this.lu)==null||r.reset(),this.gu=e;var s=this.uu((()=>this.su),(i=>{this.su=i}),{serviceNameDefault:"posthog-browser-logs",consoleCapture:!0},ql);this.lu=s[0],this.mu=s[1]}return this.lu}initialize(){this.loadIfEnabled()}onRemoteConfig(t){var e;if(t.ok){var r=(e=t.config.logs)==null?void 0:e.captureConsoleLogs;!D(r)&&r&&(this.iu=!0,this.loadIfEnabled())}}reset(){var t,e;this.tr=[],(t=this.ou)==null||t.reset(),this.su=[],(e=this.lu)==null||e.reset(),this.Sa=0}captureLog(t){this.vu().captureLog(t)}he(t){this.pu().captureLog(t)}get logger(){return this.yu||(this.yu={trace:(t,e)=>this.captureLog({body:t,level:"trace",attributes:e}),debug:(t,e)=>this.captureLog({body:t,level:"debug",attributes:e}),info:(t,e)=>this.captureLog({body:t,level:"info",attributes:e}),warn:(t,e)=>this.captureLog({body:t,level:"warn",attributes:e}),error:(t,e)=>this.captureLog({body:t,level:"error",attributes:e}),fatal:(t,e)=>this.captureLog({body:t,level:"fatal",attributes:e})}),this.yu}flushLogs(t){t?this.bu(t):(this.ou&&this.ou.flush().catch((e=>this._u(e))),this.lu&&this.lu.flush().catch((e=>this._u(e))))}_u(t){Vl(t)||this.rt.error("PostHog logs flush failed:",t)}loadIfEnabled(){if(this.iu&&!this.ru){var t=$?.__PosthogExtensions__;if(t){var e=t.loadExternalDependency;e?e(this._instance,"logs",(r=>{var s;r||(s=t.logs)==null||!s.initializeLogs?this.rt.error("Could not load logs script",r):(t.logs.initializeLogs(this._instance),this.ru=!0)})):this.rt.error(qo)}else this.rt.error("PostHog Extensions not found.")}}hu(t,e){var r=this._instance;return{get isDisabled(){return!1},get optedOut(){return!r.is_capturing()},getPersistedProperty:s=>s===ut.LogsQueue?t():void 0,setPersistedProperty(s,i){var n;s===ut.LogsQueue&&e((n=i)!==null&&n!==void 0?n:[])},Ot:s=>this.Ot(s),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Ot(t){return new Promise((e=>{if(Ru(this.Sa,3))e({kind:"fatal",error:kn(void 0,"logs endpoint is unreachable, dropping batch")});else{var r=!1,s=n=>{r||(r=!0,clearTimeout(i),e(n))},i=setTimeout((()=>{this.rt.warn("Logs request timed out before receiving a response"),s({kind:"retry-later",error:kn(void 0,"logs request timed out")})}),9e4);this._instance._send_request({method:"POST",url:this.wu(),data:t,compression:"best-available",batchKey:"logs",fireCallbackOnDrop:!0,callback:n=>{var o=n.statusCode;if(this.ku(o),o>=200&&300>o)s({kind:"ok"});else if(o===413)s({kind:"too-large"});else if(o!==0&&o!==429&&500>o)s({kind:"fatal",error:new Error("logs request failed with status "+o)});else{var a;o===0?(n.error||this.rt.warn("Logs request failed before receiving an HTTP response"),s({kind:"retry-later",error:kn(n.error,"logs request failed before receiving an HTTP response")})):s({kind:"retry-later",error:(a=n.error)!==null&&a!==void 0?a:new Error("logs request failed with status "+o)})}}})}}))}ku(t){(t!==0||this._instance.__loaded)&&(this.Sa=Tu(t,this.Sa,3,(()=>this.rt.warn("Log requests are failing before receiving an HTTP response; this can happen due to network issues, CORS, browser blocking, or ad blockers. Stopped sending logs; will try again when connectivity changes."))))}bu(t){this.tr.length>0&&this.xu(t,this.tr,this.fu,Y.LIB_NAME,(e=>{this.tr=e})),this.su.length>0&&this.xu(t,this.su,this.mu,ql,(e=>{this.su=e}))}xu(t,e,r,s,i){if(e.length!==0){var n=e.map((a=>a.record));i([]);var o=su(n,ru(r,Y.LIB_NAME,Y.LIB_VERSION),s,Y.LIB_VERSION);this._instance._send_request({method:"POST",url:this.wu(),data:o,compression:"best-available",batchKey:"logs",transport:t})}}wu(){return this._instance.requestRouter.endpointFor("api","/i/v1/logs")+"?token="+encodeURIComponent(this._instance.config.token)}du(){var t,e={};if(e.distinctId=this._instance.get_distinct_id(),this._instance.sessionManager){var r=this._instance.sessionManager.checkAndGetSessionAndWindowId(!0),s=r.windowId,i=r.sessionStartTimestamp,n=r.lastActivityTimestamp;e.sessionId=r.sessionId,e.windowId=s,D(i)||(e.sessionStartTimestamp=i),D(n)||(e.lastActivityTimestamp=n)}if($!=null&&(t=$.location)!=null&&t.href&&(e.currentUrl=this._instance.config.disable_capture_url_hashes?Ct($.location.href):$.location.href),this._instance.featureFlags){var o=this._instance.featureFlags.getFlags();o&&o.length>0&&(e.activeFeatureFlags=o)}return e}}},Af={metrics:class{constructor(t){this.rt=re("[metrics]"),this._instance=t}initialize(){}vu(){var t,e,r=(t=this._instance)==null||(t=t.config)==null?void 0:t.metrics;return this.ou&&this.cu===r||((e=this.ou)==null||e.reset(),this.cu=r,this.ou=new Th(this.hu(),(function(s){var i,n,o,a,l,u=s?.resourceAttributes;return{serviceName:(i=u?.["service.name"])!==null&&i!==void 0?i:s?.serviceName,serviceVersion:(n=u?.["service.version"])!==null&&n!==void 0?n:s?.serviceVersion,environment:(o=u?.["deployment.environment"])!==null&&o!==void 0?o:s?.environment,resourceAttributes:u,beforeSend:s?.beforeSend,flushIntervalMs:(a=s?.flushIntervalMs)!==null&&a!==void 0?a:1e4,maxSeriesPerFlush:(l=s?.maxSeriesPerFlush)!==null&&l!==void 0?l:1e3}})(r),this.rt)),this.ou}count(t,e,r){e===void 0&&(e=1),this.vu().count(t,e,r)}gauge(t,e,r){this.vu().gauge(t,e,r)}histogram(t,e,r){this.vu().histogram(t,e,r)}flush(t){if(!this.ou)return Promise.resolve();if(t){var e=this.ou.drainWindow();return e&&this.Jt(e,t),Promise.resolve()}return this.ou.flush().catch((r=>this.rt.error("PostHog metrics flush failed:",r)))}reset(){var t;(t=this.ou)==null||t.reset()}hu(){var t=this._instance,e=this;return{get isDisabled(){return!1},get optedOut(){return!t.is_capturing()},Jt:r=>e.Jt(r),getLibraryId:()=>Y.LIB_NAME,getLibraryVersion:()=>Y.LIB_VERSION}}Jt(t,e){return new Promise((r=>{var s=!1,i=o=>{s||(s=!0,clearTimeout(n),r(o))},n=setTimeout((()=>i({kind:"retry-later",error:new Error("metrics request timed out")})),9e4);this._instance._send_request(E({method:"POST",url:this.Su(),data:t,compression:"best-available",batchKey:"metrics"},e&&{transport:e},{fireCallbackOnDrop:!0,callback(o){var a=o.statusCode;if(a>=200&&300>a)i({kind:"ok"});else if(a===413)i({kind:"too-large"});else if(a!==0&&a!==429&&500>a)i({kind:"fatal",error:new Error("metrics request failed with status "+a)});else{var l;i({kind:"retry-later",error:(l=o.error)!==null&&l!==void 0?l:new Error("metrics request failed with status "+a)})}}}))}))}Su(){return this._instance.requestRouter.endpointFor("api","/i/v1/metrics")+"?token="+encodeURIComponent(this._instance.config.token)}}},$f=E({},$i,yf,wf,bf,Ef,Sf,kf,xf,If,Cf,Ff,Pf,Af);Te.__defaultExtensionClasses=E({},$f);(function(){Y.SDK_DIST_CHANNEL="npm";var t=Yr[or]=new Te;return(function(){function e(){e.done||(e.done=!0,ad=!1,Z(Yr,(function(r){r._dom_loaded()})))}C!=null&&C.addEventListener?C.readyState==="complete"?e():ie(C,"DOMContentLoaded",e,{capture:!1}):v&&k.error("Browser doesn't support `document.addEventListener` so PostHog couldn't be initialized")})(),t})();const cd="CodeFile",ud="GeneratedCode",Rf={CustomAction:"A",CustomWidget:"W",CustomFunction:"F",CustomClass:"C",CodeFile:"C"};function kt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function fo(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Tf(t={},e=0){const r=fo(t.artifactType||t.type||cd),s=fo(t.artifactName||t.name||t.fileName||`${ud}-${e+1}`);return`${r||"artifact"}-${s||e+1}`}function dd(t={},e=0){const r=kt(t),s=r.artifactType||r.type||cd,i=r.artifactName||r.name||ud;let n=r.fileName||i;return n.endsWith(".dart")||(n+=".dart"),{id:fo(r.id)||Tf({...r,artifactType:s,artifactName:i,fileName:n},e),artifactType:s,artifactName:i,fileName:n,deployPath:r.deployPath||"",description:r.description||"",code:r.code||r.content||"",dependencies:hd(r.dependencies),imports:Array.isArray(r.imports)?r.imports:[],publicApi:Array.isArray(r.publicApi)?r.publicApi:[],relationships:pd(r.relationships),deployStatus:r.deployStatus||"pending",review:r.review||null,metadata:kt(r.metadata),codeType:r.codeType||Rf[s]||"O"}}function hd(t){return t?Array.isArray(t)?t.map(e=>{if(typeof e=="string")return{name:e,version:null,inferred:!1};const r=kt(e),s=r.name||r.package;return s?{name:s,version:r.version||null,versionRequired:!!(r.versionRequired||r.required),inferred:!!r.inferred,...r.reason?{reason:r.reason}:{}}:null}).filter(Boolean):Object.entries(kt(t)).map(([e,r])=>({name:e,version:r||null,inferred:!1})):[]}function pd(t){return t?(Array.isArray(t)?t:[t]).map(e=>{const r=kt(e);return!r.from&&!r.to?null:{from:r.from||null,to:r.to||null,type:r.type||"uses",description:r.description||""}}).filter(Boolean):[]}function go(t){if(typeof t!="string")return null;const e=t.trim();if(!e)return null;try{return JSON.parse(e)}catch{const r=e.match(/```(?:json)?\s*([\s\S]*?)```/i);if(!r)return null;try{return JSON.parse(r[1].trim())}catch{return null}}}function os(t,e={}){const r=[],s=typeof t=="string"?go(t):t,n=kt(s||{});!s&&typeof t=="string"&&r.push("Structured bundle parse failed; using legacy single-artifact fallback.");const o=Array.isArray(n.artifacts)?n.artifacts:[{artifactType:n.artifactType||e.artifactType,artifactName:n.artifactName||e.artifactName,fileName:n.fileName||e.fileName,description:n.description,code:n.code||e.code||(typeof t=="string"?t:""),dependencies:n.dependencies||e.dependencies,relationships:n.relationships||e.relationships}];o.forEach((d,h)=>{!d?.artifactType&&!d?.type&&r.push(`Artifact ${h+1} has no artifactType; it will deploy as a standalone code file under lib/custom_code/ root.`)});const a=o.map((d,h)=>dd(d,h)),l=new Map(o.map((d,h)=>[kt(d).id,a[h]?.id]).filter(([d,h])=>d&&h)),u=d=>l.get(d)||d,c=pd(n.relationships||e.relationships).map(d=>({...d,from:d.from?u(d.from):d.from,to:d.to?u(d.to):d.to}));return{schemaVersion:n.schemaVersion||e.schemaVersion||null,id:n.id||e.id||"bundle-current",title:n.title||n.name||e.title||"Generated artifact bundle",description:n.description||e.description||"",artifacts:a,dependencies:hd(n.dependencies||e.dependencies),relationships:c,deployOrder:Array.isArray(n.deployOrder)?n.deployOrder.map(u):a.map(d=>d.id),warnings:[...r,...Array.isArray(n.warnings)?n.warnings:[]],metadata:kt(n.metadata)}}function fi(t){return os(t).artifacts[0]||dd()}function yt(t){if(typeof t!="string")return t??"";const e=t.trim();if(!e)return"";try{return JSON.parse(e)}catch{return t}}function yr(t){return JSON.stringify(t,null,2)}function Nf(t){return yr({task:"architect",userRequest:String(t??"")})}function Mf(t){const e=yt(t);return e&&typeof e=="object"&&typeof e.task=="string"?yr(e):yr({task:"generate_bundle",bundleSpec:e})}function Lf(t){return yr({task:"review_bundle",generatedBundle:yt(t),outputRequirements:{bundleReview:["status","score","summary","manualActions","findings"],scoreRange:[0,100],eachArtifact:["id","review.status","review.findings"],manualActions:{definition:"Setup the developer must perform by hand in the FlutterFlow editor that FlutterFlow will NOT do for them.",exclude:["creating the Custom Action, Widget or Code File itself - deploying the code creates it","declaring parameters or return values FlutterFlow derives from the function signature","anything that resolves as a side effect of using the action or widget in the editor","generic advice such as testing, reviewing or rebuilding the app"],preferEmpty:"Return an empty array when nothing qualifies - an empty list is the expected result for most bundles."}}})}function Qo(t,e=null){const r={stage:t};return e!=null&&(r.bundle=yt(e)),r}function Of({bundleSpec:t,artifactBundle:e,bundleReview:r,artifactId:s,userFeedback:i}){return yr({task:"regenerate_artifact",artifactId:s,bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(r),userFeedback:String(i)})}function fd({bundleSpec:t,artifactBundle:e,bundleReview:r,userFeedback:s}){return yr({task:"regenerate_bundle",bundleSpec:yt(t),artifactBundle:yt(e),bundleReview:yt(r),userFeedback:String(s??"")})}const Gl={csam:"child-safety content",dangerous:"dangerous content",harassment:"harassment",hate_speech:"hate speech",maliciousUrls:"a potentially malicious URL",malicious_uris:"a potentially malicious URL",pi_and_jailbreak:"prompt-injection or jailbreak instructions",promptInjection:"prompt-injection or jailbreak instructions",rai:"restricted content",sdp:"sensitive personal data",sexually_explicit:"sexually explicit content",virus_scan:"potentially malicious file content"},Df=["sanitizationResult","modelArmor","modelArmorResult","data","result","error"];function Le(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Bf(t){return Le(t)?typeof t.filterMatchState=="string"||typeof t.invocationResult=="string"||Array.isArray(t.matchedFilters)||Le(t.filterSummary)||Le(t.filterResults):!1}function gd(t,e=0){if(!Le(t)||e>3)return null;if(Bf(t))return t;for(const r of Df){const s=t[r];if(Le(s)){const i=gd(s,e+1);if(i)return i}}return null}function gi(t){return Array.isArray(t)?t.some(gi):Le(t)?t.matched===!0||t.matchState==="MATCH_FOUND"?!0:Object.values(t).some(gi):!1}function mo(t){return Array.isArray(t)?t.some(mo):Le(t)?typeof t.executionState=="string"&&t.executionState!=="EXECUTION_SUCCESS"?!0:Object.values(t).some(mo):!1}function md(t){return{csamFilterFilterResult:"csam",maliciousUriFilterResult:"malicious_uris",piAndJailbreakFilterResult:"pi_and_jailbreak",raiFilterResult:"rai",sdpFilterResult:"sdp",virusScanFilterResult:"virus_scan"}[t]||t}function jf(t,e){if(Le(t))for(const[r,s]of Object.entries(t)){if(!Le(s))continue;const i=Le(s.categories)?s.categories:{},n=Object.entries(i).filter(([,o])=>Le(o)&&o.matched===!0).map(([o])=>o);n.length>0?n.forEach(o=>e.add(o)):s.matched===!0&&e.add(md(r))}}function Uf(t,e){if(!t)return;const r=Array.isArray(t)?t.flatMap(s=>Le(s)?Object.entries(s):[]):Object.entries(t);for(const[s,i]of r){if(!gi(i))continue;const n=md(s),o=i?.raiFilterResult?.raiFilterTypeResults||(n==="rai"?i?.raiFilterTypeResults:null),a=Le(o)?Object.entries(o).filter(([,l])=>gi(l)).map(([l])=>l):[];a.length>0?a.forEach(l=>e.add(l)):e.add(n)}}function Hf(t){return Gl[t]?Gl[t]:String(t).replace(/([a-z])([A-Z])/g,"$1 $2").replace(/_/g," ").toLowerCase()}function Kl(t){return t.length<=1?t[0]||"content that did not pass":t.length===2?`${t[0]} and ${t[1]}`:`${t.slice(0,-1).join(", ")}, and ${t.at(-1)}`}function Wf(t){const e=gd(t);if(!e)return null;const r=new Set(Array.isArray(e.matchedFilters)?e.matchedFilters:[]);jf(e.filterSummary,r),Uf(e.filterResults,r);const s=e.blocked===!0||e.filterMatchState==="MATCH_FOUND"||r.size>0,i=e.invocationResult||null,n=mo(e.filterSummary||e.filterResults);return!s&&!n&&!["PARTIAL","FAILURE"].includes(i)?null:{kind:s?"blocked":"unavailable",invocationResult:i,matchedFilters:[...r]}}function zf(t,e){const r=Wf(t);if(!r)return null;const s=[...new Set(r.matchedFilters.map(Hf))],i=r.kind==="blocked",n=new Error(i?`Safety screening blocked this pipeline step for ${Kl(s)}.`:"Safety screening could not be completed. Please try again.");return n.name="ModelArmorError",n.code=i?"MODEL_ARMOR_BLOCKED":"MODEL_ARMOR_UNAVAILABLE",n.isModelArmor=!0,n.pipelineStep=e,n.userTitle=i?"Request blocked for safety":"Safety check unavailable",n.userMessage=i?`The safety check detected ${Kl(s)}. Edit your request to remove or rephrase the flagged content, then run the pipeline again.`:"The safety service did not finish all of its checks. Please wait a moment and run the pipeline again.",n.retryExplanation=i?"Trying another model would not change this safety decision.":"A fallback model was not attempted because safety screening must complete first.",n.matchedFilters=r.matchedFilters,n}function qf(t){return String(t||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"")}function Jl(t){const e=/^(import|export|part|library|class|enum|extension|typedef|mixin|abstract|const|final|var|late)\b/,r=[];for(const s of qf(t).split(` +`)){if(!/^[A-Za-z_$]/.test(s)||e.test(s))continue;const i=s.match(/^[\w$<>,?\s[\]]+?\s([a-zA-Z_$][\w$]*)\s*\(/);i&&r.push(i[1])}return r}function ea(t,e){const r=t.replace(/\.dart$/,"");if(e==="W")return r.replace(/(^|_)(\w)/g,(s,i,n)=>n.toUpperCase());if(e==="A"){const s=r.replace(/(^|_)(\w)/g,(i,n,o)=>o.toUpperCase());return s.charAt(0).toLowerCase()+s.slice(1)}return e==="F"?"CustomFunctions":e==="C"?t.endsWith(".dart")?t:`${t}.dart`:r}async function Yl(t){const e=new TextEncoder().encode(String(t||"")),r=await globalThis.crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(r),s=>s.toString(16).padStart(2,"0")).join("")}async function Vf(t,e=new Map){const r={},s=new Set;for(const[o,a]of t.entries()){if(a.type==="D"||a.type==="O")continue;const l=ea(o,a.type),u={old_identifier_name:l,new_identifier_name:l,type:a.type,is_deleted:!1,current_checksum:await Yl(a.content)},c=e.get(a.path);if(c!==void 0&&(u.original_checksum=await Yl(c)),r[o]=u,a.type==="F"){const d=Jl(a.content);(d.length>0?d:[a.functionName].filter(Boolean)).forEach(p=>s.add(p))}}const i=new Set(Jl(e.get("lib/flutter_flow/custom_functions.dart")||"")),n={functions_to_rename:[],functions_to_delete:[],functions_to_add:Array.from(s).filter(o=>!i.has(o))};return{fileMapContents:JSON.stringify(r),functionsMapContents:JSON.stringify(n)}}const Gf=new Set(["CustomWidget","CustomAction","CustomFunction","CustomClass","CodeFile"]),Zl={CustomWidget:"custom_code/widgets/",CustomAction:"custom_code/actions/",CustomFunction:"flutter_flow/custom_functions.dart",CustomClass:"custom_code/",CodeFile:"custom_code/"},Kf=new Set(["void","dynamic","String","int","double","num","bool","Color","DateTime","DateTimeRange","LatLng","FFPlace","FFUploadedFile","DocumentReference","List"]),Jf=["Struct","Record"],Yf=[{id:"required-public-param",severity:"error",message:"CustomWidget constructor uses `required` on a parameter FlutterFlow can leave unset. FlutterFlow omits unset Define Parameters fields from the constructor call, so the widget will not compile when placed. Make the parameter optional and nullable (`this.value` with `final double? value`), or give it a constructor default (`this.value = 0.0`).",detect:t=>In(t).some(e=>/\brequired\s+this\.\w+/.test(e)),pos:"class W extends StatefulWidget { const W({required this.value}); final double value; }",neg:`class _P { const _P({required this.t}); final double t; } +class W extends StatefulWidget { const W({this.value}); final double? value; }`},{id:"non-nullable-public-field",severity:"error",message:"CustomWidget declares a non-nullable field with no constructor default. FlutterFlow omits unset Define Parameters fields, so the emitted call cannot supply it. Make the field nullable (`final double? value`) or give the parameter a default (`this.value = 0.0`).",detect:t=>In(t).some(e=>{const r=/^\s*final\s+(?:double|int|String|bool|Color|num)\s+(\w+)\s*;/gm;let s;for(;(s=r.exec(e))!==null;){const i=s[1];if(!(new RegExp(`this\\.${i}\\s*=(?!=)`).test(e)||new RegExp(`[:,]\\s*${i}\\s*=(?!=)`).test(e)))return!0}return!1}),pos:`class W extends StatefulWidget { + const W({required this.value}); + final double value; +}`,neg:`class _P { + const _P({required this.t}); + final double t; +} +class W extends StatefulWidget { + const W({this.value = 1.0}); + final double value; +}`},{id:"asset-without-anchor",severity:"warning",message:'CustomWidget calls Image.asset with a path arriving as a String parameter. An asset reaches the build only when a FlutterFlow widget NODE references it - a filename passed as a parameter does not count, so the image renders as a broken-image icon on device. "Download Unused Project Assets" does not fix it (FlutterFlow issues 522, 2271, 3799). Keep something in the UI referencing the file, or load it over the network instead.',detect:t=>/Image\.asset\s*\(/.test(t)&&/final\s+String\??\s+\w*[Pp]ath\b/.test(t),pos:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.asset(widget.imagePath);`,neg:`class W extends StatefulWidget { final String? imagePath; } +var x = Image.network(widget.imagePath);`},{id:"unsupported-param-type",severity:"error",message:"CustomWidget exposes a Flutter data type FlutterFlow cannot express as a Define Parameter: TextStyle, BoxShadow, FontWeight, FontStyle, TextDirection, TextAlign, EdgeInsets, Offset, Alignment/AlignmentGeometry, Border, BorderRadius, BoxDecoration, BoxConstraints, BorderSide, Gradient, or ThemeData. FlutterFlow's supported data types (docs.flutterflow.io/resources/data-representation/data-types) are only int, double, bool, string, Color, Image, DateTime, Json, LatLng, and the FF objects, so this parameter cannot be configured in the editor and the widget will not place or compile. Expose primitives instead (color, fontSize as double?, fontWeight via a custom enum, doubles for spacing).",detect:t=>In(t).some(e=>/final\s+(TextStyle|BoxShadow|FontWeight|FontStyle|TextDirection|TextAlign|EdgeInsets|Offset|Alignment(?:Geometry)?|Border(?:Radius|Side)?|BoxDecoration|BoxConstraints|Gradient|LinearGradient|RadialGradient|ThemeData)\??\s+\w+\s*;/.test(e)),pos:`class W extends StatefulWidget { + const W({this.textStyle}); + final TextStyle? textStyle; + @override _S createState() => _S(); +} +class _S extends State { @override Widget build(BuildContext c) => const SizedBox(); }`,neg:`class W extends StatefulWidget { + const W({this.width}); + final double? width; + @override _S createState() => _S(); +} +class _S extends State { @override Widget build(BuildContext c) => Padding(padding: const EdgeInsets.all(8), child: const SizedBox()); }`}];function Qe(t,e,r){return{artifactId:t.id,artifactName:t.artifactName,artifactType:t.artifactType,severity:e,message:r}}function as(t){let e="",r=0;for(;r"&&(r--,r===0))return{inner:t.slice(e+1,s),end:s+1};return null}function Xf(t,e){const r=new RegExp(`class\\s+${e}\\b[^{]*\\{`).exec(t);if(!r)return null;let s=0;for(let i=r.index+r[0].length-1;iQf(t).usable);function tg(t=""){const e=as(t);return eg.filter(r=>r.detect(e)).map(({id:r,severity:s,message:i})=>({id:r,severity:s,message:i}))}function rg(t){const e=[],r=t.matchAll(/\bFuture\b/g);for(const s of r){let i=s.index+6,n=null;const o=i;for(;io;if(t[i]==="<"){const u=Zf(t,i);if(!u||(n=u.inner.replace(/\s+/g," ").trim(),i=u.end,!/\s/.test(t[i]||"")))continue;for(;iXl(o.functionName)===s);if(i)return i;const n=o=>!o.functionName.startsWith("_");return r.find(n)||r[0]}function Ri(t=""){return Array.from(as(t).matchAll(/\b(?:class|enum)\s+([A-Za-z_]\w*)/g),e=>e[1])}function sg(t="",e=""){return ta(t,e)?.returnType||null}function Ql(t){return String(t||"").replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").toLowerCase()}function ig(t,e){const r=Ri(e);if(r.length===0)return null;const i=String(t||"").split("/").pop().replace(/\.dart$/,"");if(r.some(l=>Ql(l)===i)||r.length>1)return null;const[o]=r,a=`${Ql(o)}.dart`;return`File name "${t}" does not match declared class "${o}". FlutterFlow accepts this, but naming the file "${a}" keeps the Code File recognisable in the editor.`}function ra(t){return String(t||"").replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}function ng(t,e,r=""){const s=ta(e,r)?.functionName;if(!s)return null;const i=String(t||"").split("/").pop(),n=ea(i,"A");if(n===s)return null;const o=`${ra(s)}.dart`;return`File name "${i}" does not match Action "${s}". FlutterFlow derives the action from the file name, so it looks for "${n}" and reports Action "${n}" declaration not found. Rename the file to "${o}" - FlutterFlow puts an underscore before every capital - or rename the function to "${n}".`}function og(t="",e=""){return ta(t,e)!==null}function ag(t,e=new Set){return(t?.match(/[A-Za-z_]\w*/g)||[]).filter(s=>Kf.has(s)?!1:!Jf.some(n=>s.endsWith(n))||e.has(s))}function lg(t,{functionName:e="",declaredTypes:r=new Set}={}){const s=sg(t,e),i=ag(s,r);if(i.length===0)return null;const[n]=i;let o;return r.has(n)?o=`uses Code File type "${n}", which FlutterFlow cannot process as an Action Return Value`:s===n?o="is not a FlutterFlow Action Return Value":o=`uses type "${n}", which is not a FlutterFlow Action Return Value`,`CustomAction return type "${s}" ${o}. Return JSON (Future) or an existing FlutterFlow Data Type (*Struct) instead.`}function cg(t,e={}){const r=[],s=t.fileName||"",i=t.code||"";if(Gf.has(t.artifactType)||r.push(Qe(t,"error",`Unsupported artifact type "${t.artifactType}".`)),s.endsWith(".dart")||r.push(Qe(t,"error","FlutterFlow custom code artifacts must use .dart files.")),!i.trim())return r.push(Qe(t,"warning","Generated artifact has no Dart code yet.")),r;if(t.artifactType==="CustomWidget"){/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)||r.push(Qe(t,"warning","CustomWidget code should declare a widget class extending StatelessWidget or StatefulWidget."));for(const n of tg(i))r.push(Qe(t,n.severity,n.message))}if(t.artifactType==="CustomAction"&&!og(i,t.artifactName)&&r.push(Qe(t,"warning","CustomAction code should expose an async Future function callable from FlutterFlow.")),t.artifactType==="CustomAction"){const n=e.declaredTypes||new Set(Ri(i)),o=lg(i,{functionName:t.artifactName,declaredTypes:n});o&&r.push(Qe(t,"error",o));const a=ng(s,i,t.artifactName);a&&r.push(Qe(t,"error",a))}if(t.artifactType==="CustomFunction"&&/class\s+\w+\s+extends\s+(StatelessWidget|StatefulWidget)/.test(i)&&r.push(Qe(t,"warning","CustomFunction should be a callable function, not a widget class.")),t.artifactType==="CustomClass"||t.artifactType==="CodeFile"){const n=ig(s,i);n&&r.push(Qe(t,"info",n))}return r}function ug(t){const e=Array.isArray(t?.artifacts)?t.artifacts:[],r=new Set(e.flatMap(n=>Ri(n.code||""))),s=e.flatMap(n=>cg(n,{declaredTypes:r})),i=e.map(n=>({artifactId:n.id,fileName:n.fileName,pathHint:Zl[n.artifactType]||Zl.CodeFile}));return{valid:s.every(n=>n.severity!=="error"),findings:s,deployHints:i}}const ec="// DO NOT REMOVE OR MODIFY THE CODE ABOVE!";function tc(t){return(/^\s*import\s+['"]([^'"]+)['"]/.exec(t)||[])[1]||null}function dg(t=""){const e=t.indexOf(ec);return e===-1?t:t.slice(e+ec.length).replace(/^\s*\n/,"")}const hg=/^\s*import\s+['"][^'"]+['"]\s*;\s*(?:\/\/.*)?$/;function pg(t="",e=""){const r=dg(t),s=new Set((e.match(/^\s*import .*$/gm)||[]).map(tc).filter(Boolean)),i=r.split(` +`).filter(n=>{const o=tc(n);return o===null||!s.has(o)?!0:!hg.test(n)}).join(` +`).replace(/^\s*\/\/ Automatic FlutterFlow imports\s*$/m,"").replace(/^\s*\n+/,"");return e+i}const fg=new Set(["flutter","flutter_test","flutter_driver","flutter_localizations"]);function vd(t){let e="",r=0;for(;r{const s=r.name||r.package;if(!s||s==="flutter")return e;const i=r.versionRequired||r.required;return e[s]=i&&r.version||"",e},{})}function yg(t){const e=new Map,r=new Map,s=[];for(const i of t)e.has(i.fileName)?s.push(`Duplicate deploy file name "${i.fileName}" for artifacts "${e.get(i.fileName)}" and "${i.artifactId}".`):e.set(i.fileName,i.artifactId),r.has(i.path)?s.push(`Duplicate deploy path "${i.path}" for artifacts "${r.get(i.path)}" and "${i.artifactId}".`):r.set(i.path,i.artifactId);return s}function wg(t,e={}){const r=Array.isArray(t?.artifacts)?t.artifacts:[],i=(e.selectedArtifactIds||t?.deployOrder||r.map(p=>p.id)).map(p=>r.find(f=>f.id===p)).filter(Boolean),n=[...t?.warnings||[]];let o=[];i.forEach(p=>{const f=_g(p),m=p.fixedCode||p.code||"",g=p.codeType||mg[p.artifactType]||Ne.OTHER;m.trim()||n.push(`${p.artifactName||p.id} has no generated code.`),o.push({artifactId:p.id,artifactName:p.artifactName,artifactType:p.artifactType,fileName:f,content:m,type:g,path:p.deployPath||vg(f,g),deployPath:p.deployPath||"",deployMode:"customCodeSync"})});const a="lib/flutter_flow/custom_functions.dart",l=o.map((p,f)=>({entry:p,index:f})).filter(({entry:p})=>p.type===Ne.FUNCTION&&p.path===a);if(l.length>1){const p=l[0],f={...p.entry,artifactId:l.map(({entry:g})=>g.artifactId).join("+"),artifactName:p.entry.artifactName,content:l.map(({entry:g})=>`// ${g.artifactId} +${g.content}`).join(` + +`)},m=new Set(l.slice(1).map(({index:g})=>g));o=o.filter((g,_)=>!m.has(_)),o[p.index]=f}const u={...rc(t?.dependencies),...i.reduce((p,f)=>({...p,...rc(f.dependencies)}),{})},c={};i.forEach(p=>{sa(p.code||"").forEach(f=>{f in u||(c[f]="")})});const d={...c,...u},h=yg(o);return{bundleId:t?.id||"bundle-current",title:t?.title||"Generated artifact bundle",fileEntries:o,dependencies:d,relationships:t?.relationships||[],warnings:n,errors:h}}function bg(t){return String(t||"").match(/\bclass\s+([A-Z][A-Za-z0-9_]*)\b/)?.[1]}function Eg(t){return String(t||"").split("/").pop().replace(/\.dart$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function Sg(t,e){const s=[Eg(t),bg(e.content),e.artifactName].find(i=>/^[A-Z][A-Za-z0-9_]*$/.test(String(i||"")));if(!s)throw new Error(`Cannot derive a FlutterFlow custom class name for ${t}.`);return s}function xg(t,e=new Map){const r=[];for(const[s,i]of t.entries())i.type!=="C"||e.has(i.path)||r.push({artifactId:i.artifactId||s,className:Sg(s,i),content:i.content,fileName:s,path:i.path});return r}function kg(t,e){const r=new Set(e.map(s=>s.path));return new Map(Array.from(t.entries()).filter(([,s])=>!r.has(s.path)))}const sc={pass:0,warning:1,fail:2},Ig=["manualActions"];function De(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function gt(...t){for(const e of t){if(typeof e=="string"&&e.trim())return e.trim();if(Array.isArray(e)&&e.length>0){const r=e.filter(s=>typeof s=="string").join(` +`);if(r)return r}}return""}function tt(t){return t==null?[]:Array.isArray(t)?t:[t]}function Cg(t){const e=De(t).value??t;if(e==null||typeof e=="string"&&e.trim()==="")return null;const r=Number(e);if(Number.isFinite(r))return r;const s=String(t||"").match(/\bscore\b[^\d]{0,12}(\d{1,3})(?:\s*\/\s*100)?/i);return s?Number(s[1]):null}function We(t){return String(t||"").trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function ia(t){const e=String(t||"").toLowerCase();return/(fail|error|critical|block|reject|invalid)/.test(e)?"fail":/(warn|attention|manual|partial|incomplete|concern)/.test(e)?"warning":/(pass|success|ready|approve|valid|clean|info|notice)/.test(e)?"pass":null}function vo(...t){return t.filter(Boolean).reduce((e,r)=>sc[r]>sc[e]?r:e,"pass")}function _d(t,e="warning",r="review"){if(typeof t=="string")return{severity:e,message:t,suggestion:"",source:r};const s=De(t),i=gt(s.message,s.title,s.issue,s.description,s.summary);return i?{severity:ia(s.severity||s.status||s.level)||e,message:i,suggestion:gt(s.suggestion,s.fix,s.recommendation,s.action),source:s.source||r}:null}function _o(t,e="review"){const r=De(t);return[["findings","warning"],["issues","warning"],["criticalIssues","fail"],["errors","fail"],["warnings","warning"],["recommendations","warning"],["requiredFixes","fail"],["suggestions","warning"]].flatMap(([i,n])=>tt(r[i]).map(o=>_d(o,n,e)).filter(Boolean))}function Fg(t,e,r=null){if(typeof t=="string")return{id:`${r||"bundle"}-manual-${e+1}`,title:t,detail:"",location:"",timing:"unspecified",artifactId:r,source:"Code Review"};const s=De(t),i=gt(s.title,s.action,s.step,s.message,s.name,s.description);return i?{id:s.id||`${r||"bundle"}-manual-${e+1}`,title:i,detail:gt(s.detail,s.instructions,s.description),location:gt(s.location,s.flutterFlowPath,s.path),timing:gt(s.timing,s.phase)||"unspecified",artifactId:r,source:gt(s.source)||"Code Review"}:null}function yo(t,e=null){const r=De(t);return Ig.flatMap(s=>tt(r[s])).map((s,i)=>Fg(s,i,e)).filter(Boolean)}function Pg(t){let e=typeof t=="string"?go(t):t;if(!e&&typeof t=="string")return{rawText:t,root:{}};const r=De(e);typeof r.content=="string"&&(e=go(r.content)||e);const s=De(e),i=De(s.reviewResult||s.codeReview||s.result);return{rawText:"",root:Object.keys(i).length?i:s}}function Ag(t,e){const r=[e.id,e.fileName,e.artifactName].map(We);return t.find(s=>{const i=De(s);return[i.id,i.fileName,i.artifactName,i.name].map(We).some(n=>n&&r.includes(n))})||null}function $g(t,e){return tt(t?.metadata?.compatibility?.deployHints).find(i=>We(i?.artifactId)===We(e.id)||We(i?.fileName)===We(e.fileName))?.pathHint||""}function Rg(t,e){return tt(t?.relationships).filter(r=>We(r?.from)===We(e.id)||We(r?.to)===We(e.id))}function Tg(t,e){return tt(t?.metadata?.compatibility?.findings).filter(r=>!r?.artifactId||We(r.artifactId)===We(e.id)).map(r=>_d(r,"warning","Compatibility check")).filter(Boolean)}function Ng(t,e,r,s){const i=Ag(e,r),n=De(i?.review||i||r.review),o=Object.keys(n).length>0,a=[..._o(n),...Tg(t,r)],l=yo(n,r.id),u=ia(n.status||n.verdict||n.outcome||n.result),c=a.length?vo(...a.map(h=>h.severity)):null,d=vo(u,c,o?null:"warning");return{...r,index:s,status:d,statusReason:o?gt(n.summary,n.overview,n.assessment,n.conclusion)||(a.length?`${a.length} review finding${a.length===1?"":"s"}`:"No file-level findings"):"No file-level verdict was returned",reviewComplete:o,findings:a,manualSteps:l,fixedSource:typeof n.fixedSource=="string"&&n.fixedSource.trim()?n.fixedSource.trim():null,pathHint:$g(t,r),relationships:Rg(t,r)}}function Mg({status:t,score:e,artifactPresentations:r,manualSteps:s}){const i=r.length;if(i===0&&s.length===0)return e==null?"Code review returned no overall summary and no score.":`Reviewed bundle with score ${e}/100.`;const n=r.reduce((a,l)=>(a[l.status]+=1,a),{pass:0,warning:0,fail:0}),o=[];return t&&o.push(`Overall verdict: ${t}.`),i&&o.push(`${i} artifact${i===1?"":"s"}: ${n.pass} pass, ${n.warning} warn, ${n.fail} fail.`),s.length&&o.push(`Do before deploy: ${s.map(a=>a.title).join("; ")}.`),e==null&&o.push("No numeric score (0-100) was returned."),o.join(" ")}function Lg({bundle:t,reviewResult:e}){const r=De(t),s=tt(r.artifacts),{root:i,rawText:n}=Pg(e),o=[i.bundleReview,i.overallReview,i.overall,i.bundleSummary,i.summaryReview,i.review].map(De).find(b=>Object.keys(b).length)||{},a=tt(i.artifacts||i.files||i.reviews),l=s.map((b,I)=>Ng(r,a,b,I)),u=_o(i),d=[..._o(o),...u],h=[...yo(o),...yo(i),...l.flatMap(b=>b.manualSteps)].filter((b,I,F)=>F.findIndex(P=>P.title===b.title&&P.artifactId===b.artifactId)===I),p=ia(o.status||o.verdict||o.overallStatus||i.status||i.verdict||i.overallStatus||i.outcome),f=vo(p,...d.map(b=>b.severity),...l.map(b=>b.status)),m=o.score??i.score??i.overallScore??n,g=Cg(m),_=gt(o.headline,o.summary,o.executiveSummary,o.overview,o.assessment,o.conclusion,i.overallSummary,i.headline,i.summary,i.executiveSummary,i.overview,i.assessment,i.conclusion,n)||Mg({status:f,score:g,artifactPresentations:l,manualSteps:h}),w=l.reduce((b,I)=>(b[I.status]+=1,b),{pass:0,warning:0,fail:0});return{title:r.title||"Generated artifact bundle",description:r.description||"",status:f,score:g,summary:_,findings:d,manualSteps:h,artifacts:l,counts:w,reviewCoverage:{reviewed:l.filter(b=>b.reviewComplete).length,total:l.length},deployOrder:tt(r.deployOrder),relationships:tt(r.relationships),warnings:tt(r.warnings),compatibility:De(r.metadata?.compatibility)}}const Og=/^\uFEFF/;function Or(t){let e=0,r=t.length;for(;ee&&!t[r-1].trim();)r--;return t.slice(e,r).join(` +`)}function Dg(t){const e=String(t??"").replace(Og,"");if(!e.trim())return"";const r=e.split(` +`),s=c=>{const d=c.trim();return/^`{3,}[A-Za-z0-9+#_.-]*$/.test(d)?c.length-c.trimStart().length:-1};let i=0,n=-1;const o=[];{let c=0;for(let d=0;d=0&&(i++,n<0&&(n=d),o.push(c+h)),c+=r[d].length+1}}if(i===0)return Or(r);{const c=wo(e);if(!c.error&&o.every(h=>nc(h,c.commentAndStringRanges)))return Or(r)}if(i===1){const c=Or(r.slice(0,n)),d=Or(r.slice(n+1));return d.length>=c.length?d:c}const a=[];let l=null;for(let c=0;cc.length>0);return u.length===0?"":u.join(` + +`)}function Bg(t){return String(t??"").replace(/\/\*[\s\S]*?\*\//g," ").replace(/\/\/[^\n]*/g,"").replace(/'''[\s\S]*?'''/g,'""').replace(/"""[\s\S]*?"""/g,'""').replace(/'(?:\\.|[^'\\\n])*'/g,'""').replace(/"(?:\\.|[^"\\\n])*"/g,'""')}function yd(t){const e=Bg(t);return Array.from(e.matchAll(/class\s+([A-Z]\w*)\s+extends\s+[A-Za-z_]\w*Widget\b/g),r=>r[1])}function wd(t){return`${ra(t)}.dart`}function jg(t){return ea(t,"W")}const ic={"(":")","[":"]","{":"}"},Ug={")":"(","]":"[","}":"{"},Hg=/[A-Za-z0-9_]/;function wo(t){const e=[{kind:"code",opener:null,openedLine:0}],r=[];let s=1,i=0;const n=(c,d)=>{(c===` +`||c==="\r"&&d!==` +`)&&s++};let o=null;const a=()=>{for(const c of e)(c.kind==="string"||c.kind==="block-comment"||c.kind==="line-comment")&&r.push({start:c.startIndex,end:t.length})};for(;i0?t[i-1]:"",f=i>1?t[i-2]:"",m=(p==="r"||p==="R")&&!Hg.test(f);e.push({kind:"string",quote:c,triple:h,raw:m,startIndex:i,openedLine:s}),i+=h?3:1;continue}if(ic[c]){e.push({kind:"code",opener:c,openedLine:s}),i++;continue}if(Ug[c]){if(d.interpolation&&c==="}"){e.pop(),i++;continue}if(d.opener&&ic[d.opener]===c){e.pop(),i++;continue}return d.opener?(a(),{error:o??`line ${s}: "${c}" closes nothing - "${d.opener}" opened on line ${d.openedLine} is still open`,commentAndStringRanges:r}):(a(),{error:o??`line ${s}: unexpected "${c}" with no matching opener`,commentAndStringRanges:r})}n(c,t[i+1]),i++}a();let l=e.length-1;for(;l>0&&e[l].kind==="line-comment";)l--;let u=o;if(!u){const c=e[l];if(!(c.kind==="code"&&!c.opener&&!c.interpolation))if(c.kind==="string")u=`unclosed ${c.triple?"triple-quoted ":""}string starting on line ${c.openedLine} was never closed`;else if(c.kind==="block-comment")u=`unterminated /* comment starting on line ${c.openedLine}`;else if(c.interpolation){const d=e.findLast(p=>p.opener);u=`unclosed "\${" expression${d?` opened on line ${d.openedLine}`:""} was never closed`}else u=`"${c.opener}" opened on line ${c.openedLine} is never closed`}return{error:u,commentAndStringRanges:r}}function Wg(t){return wo(String(t??"")).error}function nc(t,e){return e.some(({start:r,end:s})=>t>=r&&ttypeof r=="string"?r:r?.errorMessage).filter(Boolean);return e.length>0?e.join("; "):JSON.stringify(t)}return t&&typeof t=="object"?t.errorMessage||JSON.stringify(t):String(t??"")}const zg=/^dependencies\s*:\s*(?:#.*)?$/,qg=/^(?:"([^"]+)"|'([^']+)'|([A-Za-z_][A-Za-z0-9_-]*))\s*:/;function Ti(t){const e=t.match(qg);return e?e[1]??e[2]??e[3]:null}function ps(t){const e=t.trim();return e===""||e.startsWith("#")}function xr(t){const e=t.match(/^(\s*)/);return e?e[1].length:0}function na(t,e){const r=t.findIndex(n=>e.test(n));if(r===-1)return null;let s=r,i=null;for(let n=r+1;n=0.0.0"}`}function Jg(t,e={}){const r=String(t||""),s=Object.entries(e).filter(([u])=>u&&u!=="flutter");if(s.length===0)return{yaml:r,added:[],alreadyPresent:[]};const i=r.split(` +`),n=new Set(Sd(r)),o=[],a=[];for(const[u,c]of s)n.has(u)?a.push(u):(o.push([u,c]),n.add(u));if(o.length===0)return{yaml:r,added:[],alreadyPresent:a};const l=oa(i);if(l){const u=o.map(([c,d])=>oc(l.childIndent,c,d));i.splice(l.endIndex,0,...u)}else i.length>0&&i[i.length-1].trim()!==""&&i.push(""),i.push("dependencies:"),o.forEach(([u,c])=>{i.push(oc(" ",u,c))});return{yaml:i.join(` +`),added:o.map(([u])=>u),alreadyPresent:a}}function Yg(t,e={}){const r=String(t||""),s=Object.entries(e).filter(([l])=>l&&l!=="flutter");if(s.length===0)return{yaml:r,overridden:[],skipped:[]};const i=r.split(` +`),n=Mi(r),o=[],a=[];for(const[l,u]of s){const c=n.get(l);if(!c||!c.isScalar||!String(u||"").trim()){a.push(l);continue}const d=" ".repeat(xr(i[c.lineIndex]));i[c.lineIndex]=`${d}${l}: ${kd(String(u).trim())}${c.comment}`,o.push({name:l,from:c.constraint,to:u})}return{yaml:i.join(` +`),overridden:o,skipped:a}}function Id(t){const e=String(t||""),r=[];return e.trim()?(/^name:\s*\S+/m.test(e)||r.push("pubspec.yaml missing name field"),oa(e.split(` +`))||r.push("pubspec.yaml missing dependencies section"),Sd(e).includes("flutter")||r.push("pubspec.yaml missing Flutter SDK dependency"),{valid:r.length===0,errors:r}):(r.push("pubspec.yaml is empty"),{valid:!1,errors:r})}const Zg=">=3.0.0 <4.0.0";function bo(t){const e=String(t||"").trim(),r=e[0];return r!=="'"&&r!=='"'||e[e.length-1]!==r?e:e.slice(1,-1).replaceAll(`${r}${r}`,r)}function Xg(t=""){const e=gg(t).filter(r=>!r.startsWith("dart:")&&!r.startsWith("package:"));return{selfContained:e.length===0,unresolvableImports:e}}function ac(t,e,r){const s=[];for(const[i,n]of t){if(n.isScalar){e[i]=bo(n.constraint);continue}if(n.sourceKey==="sdk"){r.add(i);continue}if(n.sourceKey===null&&n.version){e[i]=bo(n.version);continue}s.push(i)}return s}function Qg(t){const e=new Set,r={},s={},i=ac(Mi(t),r,e);i.push(...ac(Gg(t,"dependency_overrides"),s,e));const n=new Set([...Object.keys(r),...e]),{sdk:o}=xd(t);return{sdkConstraint:bo(o)||Zg,dependencies:r,overrides:s,sdkPackages:[...e].sort(),availablePackages:n,unrepresentable:i}}function em(t,e,r){return e.length>0?`${t} imports ${e.join(", ")}, which FlutterFlow only generates once the app is built, so it could not be compiled before the deploy.`:`${t} imports ${r.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`}function tm(t,e){const{sdkConstraint:r,dependencies:s,overrides:i,sdkPackages:n,availablePackages:o,unrepresentable:a}=Qg(e),l={sdkConstraint:r,dependencies:s,overrides:i,sdkPackages:n},u=[],c=[],d=a.map(h=>`Your project declares ${h} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${h}. Classes that do not import ${h} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`);for(const h of t){const{className:p,content:f}=h,m=sa(f),g=m.filter(b=>a.includes(b));if(g.length>0){c.push({className:p,reason:`${p} was not compiled before deploying: it imports ${g.join(", ")}, which your project declares from a source that cannot be reproduced outside it, so package resolution could not be matched exactly.`});continue}const{unresolvableImports:_}=Xg(f),w=m.filter(b=>!o.has(b));if(_.length>0||w.length>0){c.push({className:p,reason:em(p,_,w)});continue}u.push({fileName:`${ra(p)}.dart`,content:f})}return{manifest:l,sources:u,skipped:c,approximate:d}}function lc(t,e){const r=`${t}${e}`.split(` +`),s=r.pop()??"",i=[];for(const n of r){const o=Cd(n);o&&i.push(o)}return{events:i,buffer:s}}function rm(t){const e=Cd(t);return e?[e]:[]}function Cd(t){const e=t.trim();if(!e)return null;try{const r=JSON.parse(e);return r&&typeof r=="object"&&!Array.isArray(r)?r:null}catch{return null}}async function sm(t,e={}){const{onPhase:r,onLog:s}=e;let i=null,n="";const o=a=>{if(a.event==="phase"){a.message&&r&&r(a.message);return}if(a.event==="log"){a.message&&s&&s(a.message);return}i=a};if(t.body?.getReader){const a=t.body.getReader(),l=new TextDecoder;for(;;){const{done:u,value:c}=await a.read();if(u)break;const d=lc(n,l.decode(c,{stream:!0}));n=d.buffer,d.events.forEach(o)}}else{const a=lc("",await t.text());n=a.buffer,a.events.forEach(o)}return rm(n).forEach(o),i?{...i,success:i.success===!0||i.success===void 0&&t.ok}:{success:!1,error:t.ok?"The FlutterFlow deploy runner closed the connection before it finished.":`FlutterFlow custom class provisioning failed (HTTP ${t.status}).`}}const im=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function wt(t){const e=String(t||"").trim().match(im);return e?{major:Number(e[1]),minor:Number(e[2]),patch:Number(e[3]),prerelease:e[4]?e[4].split("."):[]}:null}function nm(t,e){if(t.length===0&&e.length===0)return 0;if(t.length===0)return 1;if(e.length===0)return-1;for(let r=0;r0)}function am(t){const e=wt(t);return e?e.major>0?`${e.major+1}.0.0`:`0.${e.minor+1}.0`:null}function aa(t){let e=String(t??"").trim();if((e.startsWith("'")||e.startsWith('"'))&&(e=e.slice(1,-1).trim()),e===""||e==="any"||e==="*")return{min:null,minInclusive:!1,max:null,maxInclusive:!1};if(e.startsWith("^")){const o=e.slice(1).trim();return wt(o)?{min:o,minInclusive:!0,max:am(o),maxInclusive:!1}:null}if(wt(e))return{min:e,minInclusive:!0,max:e,maxInclusive:!0};const r={min:null,minInclusive:!1,max:null,maxInclusive:!1},s=/(>=|<=|>|<)\s*([0-9][0-9A-Za-z.+-]*)/g;let i=!1,n;for(;(n=s.exec(e))!==null;){const[,o,a]=n;if(!wt(a))return null;i=!0,o===">="||o===">"?(r.min=a,r.minInclusive=o===">="):(r.max=a,r.maxInclusive=o==="<=")}return i?r:null}function cc(t,e){const r=aa(t);if(!r||!wt(e))return!1;if(r.min!==null){const s=mi(e,r.min);if(s<0||s===0&&!r.minInclusive)return!1}if(r.max!==null){const s=mi(e,r.max);if(s>0||s===0&&!r.maxInclusive)return!1}return!0}function lm(t,e){const r=aa(t);if(!r||!wt(e))return!1;if(r.max===null)return!0;const s=mi(r.max,e);return s>0?!0:s===0&&r.maxInclusive}function ir(t){const e=aa(t);return e?e.min:null}const cm="https://pub.dev/api/packages/",um=8e3;function dm(t,e={}){const{dartSdkFloor:r=null,flutterSdkFloor:s=null}=e,i=Array.isArray(t?.versions)?t.versions:[];let n=null;for(const o of i){const a=o?.version;if(!a||o.retracted||om(a))continue;const l=o.pubspec?.environment||{};r&&l.sdk&&!cc(l.sdk,r)||s&&l.flutter&&!cc(l.flutter,s)||(!n||mi(a,n)>0)&&(n=a)}return n?{version:n,constraint:`^${n}`}:null}async function hm(t,e={}){const{dartSdkFloor:r=null,flutterSdkFloor:s=null,fetchImpl:i=fetch}=e;let n;try{const a=await i(`${cm}${encodeURIComponent(t)}`,{signal:AbortSignal.timeout(um)});if(!a.ok)return{name:t,constraint:null,version:null,error:a.status===404?`"${t}" was not found on pub.dev`:`pub.dev returned ${a.status} for "${t}"`};n=await a.json()}catch(a){return{name:t,constraint:null,version:null,error:`could not reach pub.dev for "${t}" (${a.message})`}}const o=dm(n,{dartSdkFloor:r,flutterSdkFloor:s});return o?{name:t,...o,error:null}:{name:t,constraint:null,version:null,error:r?`no published "${t}" release supports Dart ${r}`:`no published "${t}" release could be read`}}async function pm(t,e={}){const r=await Promise.all(t.map(s=>hm(s,e)));return new Map(r.map(({name:s,...i})=>[s,i]))}async function fm(t,e={},r={}){const{resolveVersions:s=pm}=r,i=Object.entries(e).filter(([c])=>c&&c!=="flutter"),n=xd(t),o={dartSdkFloor:ir(n.sdk),flutterSdkFloor:ir(n.flutter)},a={additions:{},overrides:{},kept:[],warnings:[],sdk:o};if(i.length===0)return a;const l=Mi(t),u=[];for(const[c,d]of i){const h=l.get(c);if(!h){u.push(c);continue}const p=ir(d);if(!p){a.kept.push({name:c,constraint:h.constraint});continue}if(!h.isScalar){a.warnings.push(`"${c}" is declared in your project from a git, path, or SDK source, but the generated code needs at least ${p}. Left as-is — update it yourself if the build fails.`),a.kept.push({name:c,constraint:h.constraint});continue}if(lm(h.constraint,p)){a.kept.push({name:c,constraint:h.constraint});continue}a.overrides[c]=`^${p}`,a.warnings.push(`"${c}" was pinned to ${h.constraint} in your project, which cannot resolve the ${p} the generated code needs. Raising it to ^${p} — this changes a dependency the rest of your app also uses.`)}if(u.length>0){const c=await s(u,o);for(const d of u){const h=c.get(d);if(h?.constraint){a.additions[d]=h.constraint;continue}const p=e[d]||"";if(ir(p)){a.additions[d]=`^${ir(p)}`,a.warnings.push(`Could not confirm "${d}" version on pub.dev (${h?.error||"lookup failed"}). Using ^${ir(p)} from the AI's recommendation — verify this is current.`);continue}a.additions[d]=">=0.0.0",a.warnings.push(`Could not determine a version for "${d}" (${h?.error||"lookup failed"}) and the AI supplied none. Added with a wide-open >=0.0.0 constraint — pin a concrete version in FlutterFlow before deploying.`)}}return a}const gm={"&":"&","<":"<",">":">",'"':""","'":"'"};function bt(t){return String(t??"").replace(/[&<>"']/g,e=>gm[e])}function B(t){return t?bt(t).replace(/\n/g,"
    "):""}function It(t){return bt(t).replace(/\r?\n/g," ")}function mm(t,e={}){const r=t?.pipelineStep;if(r!=null&&e[r]!=null)return e[r];const s=t?.message||"";return s.includes("Code Generator")?2:s.includes("Code Review")?3:1}function vm(t){const e={"Integration Audit Report":"📋","Critical Issues":"❌",Warnings:"⚠️",Recommendations:"✅","Overall Score":"📊"};for(const[r,s]of Object.entries(e))if(t.toLowerCase().includes(r.toLowerCase()))return s;return"📄"}function _m(t){const e={critical:"❌",warning:"⚠️",recommendation:"✅",score:"📊",issue:"🔍",fix:"🔧"};for(const[r,s]of Object.entries(e))if(t.toLowerCase().includes(r.toLowerCase()))return s;return"📝"}function ym(t){return t.includes("class ")&&t.includes("extends ")||t.includes("StatelessWidget")||t.includes("StatefulWidget")||t.includes("import 'package:flutter/")?"dart":t.includes("def ")||t.includes("import ")||t.includes("print(")?"python":t.includes("function ")||t.includes("const ")||t.includes("console.")?"javascript":"dart"}function wr(t){if(!t)return"";if(typeof t!="string")return String(t);const e=/```(?:\w+)?\n?([\s\S]*?)```/,r=t.match(e);return r?r[1].trim():t.trim()}function uc(t){return t=bt(t),t=t.replace(/\*\*(.*?)\*\*/g,'$1'),t=t.replace(/\*(.*?)\*/g,'$1'),t=t.replace(/`(.*?)`/g,'$1'),t=t.replace(/\b(FAIL|ERROR|CRITICAL)\b/g,'$1'),t=t.replace(/\b(WARN|WARNING)\b/g,'$1'),t=t.replace(/\b(PASS|SUCCESS|OK)\b/g,'$1'),t}function Fd(t,e="dart",r=globalThis.hljs){if(!t)return"";const s=wr(t);try{return r.highlight(s,{language:e}).value}catch(i){console.warn("Syntax highlighting failed:",i);try{return r.highlight(s,{language:"json"}).value}catch{return bt(s)}}}function Li(t,e={}){const{highlighter:r=globalThis.hljs}=e;let s='
    ';const i=String(t??"").split(` +`);let n=!1,o="";for(const a of i){if(a.startsWith("```")){if(n){const l=ym(o),u=Fd(o.trim(),l,r);s+=`
    +
    ${u}
    +
    `,o="",n=!1}else n=!0;continue}if(n){o+=a+` +`;continue}if(a.startsWith("# ")){const l=a.substring(2).trim();s+=`
    +

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

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

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

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

    ${uc(a)}

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

    Connection Error

    +

    ${B(c)}

    +
    +

    Check if API key is valid

    +

    Try using a different model

    +

    Ensure network allows API calls

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

    FlutterFlow Commit Failed

    +

    ${B(t.error)}

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

    Errors:

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

    ${B(t.detail)}

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

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

    +

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

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

    ${B(t.summary)}

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

    ${B(l.reason)}

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

    ${B(l.description)}

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

    ${B(e.artifactName)}

    + ${e.description?`

    ${B(e.description)}

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

    Code Review findings

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

    Manual FlutterFlow steps for this file

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

    Dependencies

    +
      ${i}
    +
    +
    +

    Deployment

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

    Public API

    +
    ${o}
    +
    +
    +

    Imports

    +
    ${n}
    +
    +
    +

    Relationships

    +
      ${a}
    +
    +
    + `}function d_(t){const e=document.getElementById("bundle-strip"),r=document.getElementById("results-summary-tab"),s=document.getElementById("artifact-tabs"),i=document.getElementById("results-file-count");if(r&&r.classList.toggle("active",y.resultsViewMode==="summary"),!t.artifacts.length){i&&(i.textContent="0 files"),e&&e.classList.remove("visible"),s&&(s.innerHTML="");return}if(i){const n=t.artifacts.length;i.textContent=`${n} ${n===1?"file":"files"}`}s&&(s.innerHTML=t.artifacts.map(n=>` + + `).join(""),s.onclick=n=>{const o=n.target.closest(".artifact-tab");o?.dataset?.artifactId&&nh(o.dataset.artifactId)}),e&&e.classList.add("visible")}function Ra(){document.body.classList.add("results-fullscreen"),document.body.classList.add("results-with-sidebar");const t=document.getElementById("results-view"),e=document.getElementById("results-code-output"),r=document.getElementById("results-audit-output"),s=document.getElementById("results-summary-detail"),i=document.getElementById("artifact-results-split"),n=o_(),o=ma();if(c_(n),d_(n),e&&(e.textContent=""),e){const a=Fd(o);e.innerHTML=a}r&&(r.innerHTML=u_(n)),s&&s.classList.toggle("hidden",y.resultsViewMode!=="summary"),i&&i.classList.toggle("hidden",y.resultsViewMode!=="file"),t&&t.classList.add("visible")}function Ki(t,e){y.selectedArtifactId||(y.selectedArtifactId=fi(y.artifactBundle).id),y.resultsViewMode="summary",document.body.classList.add("results-fullscreen");const r=document.getElementById("step3-output");r&&(r.textContent=""),Ra(),Zt();const s=document.getElementById("btn-feedback-up"),i=document.getElementById("btn-feedback-down");s&&(s.className="feedback-btn"),i&&(i.className="feedback-btn")}function nh(t){y.selectedArtifactId=t,y.resultsViewMode="file",Ra()}function h_(){y.resultsViewMode="summary",Ra()}function p_(){const t=document.getElementById("btn-copy-results"),e=ma();navigator.clipboard.writeText(e).then(()=>{if(t){t.classList.add("copied");const r=t.querySelector("span");if(r){const s=r.textContent;r.textContent="Copied!",setTimeout(()=>{t.classList.remove("copied"),r.textContent=s},2e3)}}})}function f_(t){const e=document.getElementById("btn-feedback-up"),r=document.getElementById("btn-feedback-down");t==="up"?(e.classList.toggle("active-up"),r.classList.remove("active-down")):(r.classList.toggle("active-down"),e.classList.remove("active-up")),xa(t==="up"?"thumbsUp":"thumbsDown",y.step2Result,y.step1Result)}function g_(){const t=document.getElementById("error-input-panel");if(t){t.classList.remove("hidden"),t.style.display="flex";const e=document.getElementById("ff-error-paste-input");e&&setTimeout(()=>e.focus(),100)}}function oh(){const t=document.getElementById("error-input-panel");t&&(t.classList.add("hidden"),t.style.display="none")}window.copyResultsCode=p_;window.selectArtifact=nh;window.selectResultsSummary=h_;window.submitResultsFeedback=f_;window.showErrorInputPanel=g_;window.hideErrorInputPanel=oh; diff --git a/dist/index.html b/dist/index.html index b8d9443..4013b4d 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 5fc19a3..6813705 100644 --- a/src/customCodeVerification.js +++ b/src/customCodeVerification.js @@ -159,18 +159,6 @@ function skipReason(className, unresolvableImports, missingPackages) { return `${className} imports ${missingPackages.join(", ")}, which your project's pubspec.yaml does not declare with a version constraint, so it could not be compiled before the deploy.`; } -/** - * The reason a class is skipped over a package it never names itself. - * - * @param {string} className - The class being skipped - * @param {string[]} unrepresentablePackages - Packages the project declares - * from sources the manifest cannot express - * @returns {string} User-facing reason naming both - */ -function transitiveSkipReason(className, unrepresentablePackages) { - return `${className} was not compiled before deploying: your project declares ${unrepresentablePackages.join(", ")} from a source that cannot be reproduced outside it, and whether the packages ${className} imports depend on one of them transitively cannot be checked before the deploy, so package resolution could not be matched exactly.`; -} - /** * Plans the compile check that runs before custom classes are pushed. * @@ -181,28 +169,31 @@ function transitiveSkipReason(className, unrepresentablePackages) { * `skipped` so the deploy can say plainly what it did not verify. * * A dependency that cannot be reproduced outside the project - a `git:`, - * `path:`, or custom-`hosted:` source - stops any class whose compilation - * shares a package graph with it. Importing it directly is the clear case and - * names itself in `skipped`. But a class that imports only representable - * packages can still be affected: pub resolution is one shared graph, so a - * representable import may depend on the unrepresentable package transitively, - * and whether it does is knowable only by resolving the graph, which cannot - * happen here. The scratch manifest omits the package, so `pub get` resolves - * that transitive slot differently there and the check could report a result - * that does not describe what ships. When the project declares any - * unrepresentable source, every class that imports a `package:` URI is - * therefore skipped and named with that reason; a class compiled from - * `dart:` alone does not touch package resolution and verifies normally. + * `path:`, or custom-`hosted:` source - cannot be expressed in the scratch + * manifest, which carries names and version constraints only. Such a + * dependency is handled by scope, not by breadth: + * + * - A class that imports it directly cannot compile without it at all, so it + * is skipped and `skipped` names the import as this class's own problem. + * - Every other class is still verified, against a scratch graph that omits + * the unrepresentable package. A representable import may reach that + * package transitively - knowable only by resolving the graph, which + * cannot happen here - so for those classes the check is approximate. + * `approximate` carries one notice per unrepresentable package stating + * exactly that, so the limitation is disclosed rather than silently + * trusted, and the result is never mistaken for full graph fidelity. A + * class importing only `dart:` never touches package resolution, so the + * approximation does not reach it. * - * A project with no unrepresentable sources verifies exactly as before, and - * the class that directly imports such a package is still told so plainly. - * The earlier scoping - skipping only the classes that directly imported it - - * kept classes compiling that shared a graph with a package they never named, - * which was not a check on what ships. + * Skipping every class with a `package:` import instead was rejected: one + * unrelated git or path dependency would disable the compile check for + * nearly the whole deployment, and invalid custom code would land unopposed. + * Verifying with a disclosed approximation keeps the check on the code that + * ships while saying plainly what it could not reproduce. * * @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}>}} + * @returns {{manifest: Object, sources: Array<{fileName: string, content: string}>, skipped: Array<{className: string, reason: string}>, approximate: string[]}} */ export function planCustomCodeVerification(classes, projectPubspecYaml) { const { @@ -218,6 +209,16 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { const sources = []; const skipped = []; + // The scratch manifest omits every unrepresentable package, so any class + // that does not import one directly is checked against a reduced graph. + // Disclosing that per package - rather than skipping those classes or + // silently trusting the scratch - keeps the check running and the human + // told what it could not reproduce. + const approximate = unrepresentable.map( + (name) => + `Your project declares ${name} from a source that cannot be reproduced outside it, so the pre-deploy compile check runs against a scratch package graph that omits ${name}. Classes that do not import ${name} directly are still checked, but against that reduced graph, so their transitive package resolution may differ from your project's and the check is approximate for them.`, + ); + for (const entry of classes) { const { className, content } = entry; @@ -250,30 +251,11 @@ export function planCustomCodeVerification(classes, projectPubspecYaml) { continue; } - // The transitive hole: pub resolves one shared graph, so even a class - // whose every import is representable may reach a package the manifest - // omits through the dependencies of what it does import. Reachability is - // knowable only by resolving the graph, so while the project declares - // any unrepresentable source the class is skipped rather than compiled - // against a graph that differs from the project's. A class importing - // nothing from `package:` never touches pub resolution and compiles - // against exactly what the project will. - if ( - unrepresentable.length > 0 && - extractImportUris(content).some((uri) => uri.startsWith("package:")) - ) { - skipped.push({ - className, - reason: transitiveSkipReason(className, unrepresentable), - }); - continue; - } - sources.push({ fileName: `${identifierToFlutterFlowFileStem(className)}.dart`, content, }); } - return { manifest, sources, skipped }; + return { manifest, sources, skipped, approximate }; } diff --git a/src/customCodeVerification.test.js b/src/customCodeVerification.test.js index 4179e57..baaff8c 100644 --- a/src/customCodeVerification.test.js +++ b/src/customCodeVerification.test.js @@ -145,22 +145,28 @@ dependencies: assert.equal("hosted_thing" in manifest.dependencies, false); }); -test("a git dependency stops even a class that never imports it, because resolution is shared", () => { +test("a representable import verifies beside an unrelated git dependency, and the plan discloses the approximation", () => { const plan = planCustomCodeVerification( [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], PROJECT_PUBSPEC, ); // The project declares `private_thing` from git, which the scratch manifest - // cannot express. `background_downloader` may depend on it transitively - - // knowable only by resolving the graph - so compiling this class elsewhere - // could report a result that does not describe what ships. The skip says - // that instead of silently compiling against a differently-resolved graph. - assert.deepEqual(plan.sources, []); - assert.equal(plan.skipped.length, 1); - assert.equal(plan.skipped[0].className, "BackgroundDownloaderService"); - assert.match(plan.skipped[0].reason, /private_thing/); - assert.match(plan.skipped[0].reason, /BackgroundDownloaderService/); + // cannot express - but this class never imports it, so it is still compiled + // and checked. The check is approximate (whether what it does import + // reaches `private_thing` transitively is knowable only by resolving the + // graph), so `approximate` says so per package instead of skipping the + // class, which would have disabled the check for nearly the whole deploy. + assert.deepEqual(plan.sources, [ + { + fileName: "background_downloader_service.dart", + content: SELF_CONTAINED, + }, + ]); + assert.deepEqual(plan.skipped, []); + assert.equal(plan.approximate.length, 1); + assert.match(plan.approximate[0], /private_thing/); + assert.match(plan.approximate[0], /approximate/); }); test("a class that imports the unreproducible dependency is skipped, and named as the reason", () => { @@ -177,20 +183,22 @@ class UsesPrivateThing {} PROJECT_PUBSPEC, ); - // The direct import keeps its own reason: it names this class's own import, - // so it says what to do about this class. - assert.deepEqual(plan.sources, []); - assert.equal(plan.skipped.length, 2); + // The direct import keeps its own reason: it names this class's own + // import, so it says what to do about this class. + assert.deepEqual( + plan.sources.map((source) => source.fileName), + ["background_downloader_service.dart"], + ); + assert.equal(plan.skipped.length, 1); assert.equal(plan.skipped[0].className, "UsesPrivateThing"); assert.match(plan.skipped[0].reason, /it imports private_thing/); - // The sibling never imports it, but the shared graph still cannot be - // reproduced, so it is skipped with the transitive reason rather than - // compiled against a graph that differs from the project's. - assert.equal(plan.skipped[1].className, "BackgroundDownloaderService"); - assert.match(plan.skipped[1].reason, /private_thing/); + // The sibling never imports the git package, so it is checked rather than + // skipped - approximately, and the plan-level notice discloses that. + assert.equal(plan.approximate.length, 1); + assert.match(plan.approximate[0], /private_thing/); }); -test("a representable import is skipped when an override elsewhere is unrepresentable", () => { +test("a representable import verifies when an override elsewhere is unrepresentable, and the notice names it", () => { const pubspec = `name: my_app environment: @@ -212,16 +220,22 @@ dependency_overrides: pubspec, ); - // The class imports `background_downloader`, which the manifest can express, - // and never touches `intl` - but the git override of `intl` cannot be - // carried, and whether `background_downloader` depends on `intl` - // transitively is knowable only by resolving the graph. The conservative - // skip names the package and the class truthfully. - assert.deepEqual(plan.sources, []); - assert.equal(plan.skipped.length, 1); - assert.equal(plan.skipped[0].className, "BackgroundDownloaderService"); - assert.match(plan.skipped[0].reason, /intl/); - assert.match(plan.skipped[0].reason, /BackgroundDownloaderService/); + // The class imports `background_downloader`, which the manifest can + // express, and never touches `intl` - but the git override of `intl` + // cannot be carried, and whether `background_downloader` depends on + // `intl` transitively is knowable only by resolving the graph. The class + // is therefore checked rather than skipped, and the plan-level notice + // discloses the approximation the check ran with. + assert.deepEqual(plan.sources, [ + { + fileName: "background_downloader_service.dart", + content: SELF_CONTAINED, + }, + ]); + assert.deepEqual(plan.skipped, []); + assert.equal(plan.approximate.length, 1); + assert.match(plan.approximate[0], /intl/); + assert.match(plan.approximate[0], /approximate/); }); test("a class compiled from dart: alone still verifies beside a git dependency", () => { @@ -235,14 +249,33 @@ test("a class compiled from dart: alone still verifies beside a git dependency", PROJECT_PUBSPEC, ); - // `dart:` libraries come from the SDK rather than pub resolution, so a class - // importing nothing from `package:` compiles against exactly what the - // project will, whatever the project's sources are. + // `dart:` libraries come from the SDK rather than pub resolution, so a + // class importing nothing from `package:` compiles against exactly what + // the project will, whatever the project's sources are. `approximate` is + // plan-level, so it still carries the notice for the package-importing + // classes this deploy could contain - but nothing about this class's own + // check is approximate. assert.deepEqual( plan.sources.map((source) => source.fileName), ["pure_dart_service.dart"], ); assert.deepEqual(plan.skipped, []); + assert.equal(plan.approximate.length, 1); + assert.match(plan.approximate[0], /private_thing/); +}); + +test("a project whose sources are all representable verifies with nothing to disclose", () => { + const plan = planCustomCodeVerification( + [{ className: "BackgroundDownloaderService", content: SELF_CONTAINED }], + REPRESENTABLE_PUBSPEC, + ); + + // Every dependency the project declares can be expressed in the scratch + // manifest, so the check runs against the project's own graph and there is + // no approximation to warn about. + assert.equal(plan.sources.length, 1); + assert.deepEqual(plan.skipped, []); + assert.deepEqual(plan.approximate, []); }); test("an SDK package no list has heard of is reproduced from its pubspec source", () => { From d926db2f82aa73d52bb9c6989c44f331b9f56b59 Mon Sep 17 00:00:00 2001 From: Stuart Date: Tue, 22 Sep 2026 18:06:25 +1000 Subject: [PATCH 15/15] test(e2e): serve SRI-pinned assets from byte-identical vendored copies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Greptile P1: the fixture router let the five SRI-pinned third-party assets (including FingerprintJS, required during page initialization) continue to the live network, so a blocked or rate-limited CDN could fail otherwise-correct tests. Vendor the pinned bytes in e2e/fixtures/vendor/ — each verified against index.html's integrity attribute — and fulfill them locally. The same-origin Vite dev server is now the only request still allowed through; everything else fulfills from a fixture, an inert stub, vendored bytes, or aborts. STU-372 --- e2e/fixtures/apiFixtures.js | 85 +- .../vendor/fingerprintjs-4.6.2.min.js | 13 + e2e/fixtures/vendor/highlight-11.9.0.min.js | 1213 +++++++++++++++++ .../vendor/highlight-dart-11.9.0.min.js | 22 + .../vendor/highlight-github-dark-11.9.0.css | 10 + e2e/fixtures/vendor/jszip-3.10.1.min.js | 13 + 6 files changed, 1332 insertions(+), 24 deletions(-) create mode 100644 e2e/fixtures/vendor/fingerprintjs-4.6.2.min.js create mode 100644 e2e/fixtures/vendor/highlight-11.9.0.min.js create mode 100644 e2e/fixtures/vendor/highlight-dart-11.9.0.min.js create mode 100644 e2e/fixtures/vendor/highlight-github-dark-11.9.0.css create mode 100644 e2e/fixtures/vendor/jszip-3.10.1.min.js diff --git a/e2e/fixtures/apiFixtures.js b/e2e/fixtures/apiFixtures.js index 3a39252..291d362 100644 --- a/e2e/fixtures/apiFixtures.js +++ b/e2e/fixtures/apiFixtures.js @@ -9,14 +9,17 @@ * `routeFulfill(page, urlPattern, fixture)`. * * Routing policy (see applyDefaultRoutes): fixture responses are fulfilled, - * static assets index.html references are fulfilled with inert stubs, and - * only same-origin requests served by the local Vite dev server — plus the - * SRI-pinned static scripts the app needs at load — reach the network. Every - * other request is aborted, so an un-fixtured external call — a paid - * generation, a real project write, a newly added endpoint — fails the test - * loudly instead of silently escaping to the network. + * static assets index.html references are fulfilled with inert stubs, + * SRI-pinned static assets are fulfilled with byte-identical vendored copies + * from ./vendor/, and the only requests that reach the network are the + * same-origin ones served by the local Vite dev server. Every other request + * is aborted, so an un-fixtured external call — a paid generation, a real + * project write, a newly added endpoint — fails the test loudly instead of + * silently escaping to the network. */ +import { readFileSync } from "node:fs"; + const BUILDSHIP_BASE_URL = "https://4tgke4.buildship.run"; const PIPELINE_ENDPOINT = `${BUILDSHIP_BASE_URL}/service/runpipeline`; const IDENTITY_ENDPOINT = `${BUILDSHIP_BASE_URL}/authUserCheck`; @@ -317,17 +320,51 @@ const STATIC_ASSET_STUBS = [ ]; // The third-party static assets index.html references WITH a Subresource -// Integrity attribute. A fulfilled stub can never match the pinned digest — -// the browser blocks it with a console error — and app.js functionally needs -// FingerprintJS to resolve identity, so these are the ONLY external requests -// allowed through to the network. Each is pinned to an exact version and -// verified byte-for-byte by the browser's SRI check. -const SRI_PINNED_ASSET_PREFIXES = [ - "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js", - "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js", - "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dart.min.js", - "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css", - "https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@4.6.2/dist/fp.umd.min.js", +// Integrity attribute. A stub can never match the pinned digest — the +// browser blocks it with a console error — and app.js needs FingerprintJS +// during page initialization, so these are fulfilled from byte-identical +// local copies in ./vendor/. Because the bytes equal the pinned versions, +// the browser's SRI check passes, the app loads exactly the production +// code, and no request leaves the machine. +// +// Regenerate a vendored copy only when index.html pins a new version: +// download the exact pinned URL, then verify the digest against the +// integrity attribute index.html pins for it and stop on any mismatch. +// +// curl -fsSL -o e2e/fixtures/vendor/jszip-3.10.1.min.js \ +// https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js +// curl -fsSL -o e2e/fixtures/vendor/highlight-11.9.0.min.js \ +// https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js +// curl -fsSL -o e2e/fixtures/vendor/highlight-dart-11.9.0.min.js \ +// https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dart.min.js +// curl -fsSL -o e2e/fixtures/vendor/highlight-github-dark-11.9.0.css \ +// https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css +// curl -fsSL -o e2e/fixtures/vendor/fingerprintjs-4.6.2.min.js \ +// https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@4.6.2/dist/fp.umd.min.js +// +// SRI check — sha512 for jszip, sha384 for the rest: +// openssl dgst -sha384 -binary < e2e/fixtures/vendor/highlight-11.9.0.min.js \ +// | openssl base64 -A +// openssl dgst -sha512 -binary < e2e/fixtures/vendor/jszip-3.10.1.min.js \ +// | openssl base64 -A +function vendoredAsset(fileName, contentType) { + return { + status: 200, + body: readFileSync(new URL(`./vendor/${fileName}`, import.meta.url)), + contentType, + }; +} + +// [urlPrefix, response] pairs for the SRI-pinned assets, matched by prefix +// like STATIC_ASSET_STUBS so URL normalization or query strings cannot +// dodge a match. The bodies are raw Buffers read once at module load — +// byte-identical to the vendored files and to the pinned digests. +const VENDORED_SRI_ASSETS = [ + ["https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js", vendoredAsset("jszip-3.10.1.min.js", "application/javascript")], + ["https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js", vendoredAsset("highlight-11.9.0.min.js", "application/javascript")], + ["https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/dart.min.js", vendoredAsset("highlight-dart-11.9.0.min.js", "application/javascript")], + ["https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css", vendoredAsset("highlight-github-dark-11.9.0.css", "text/css")], + ["https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@4.6.2/dist/fp.umd.min.js", vendoredAsset("fingerprintjs-4.6.2.min.js", "application/javascript")], ]; /** @@ -340,10 +377,10 @@ const SRI_PINNED_ASSET_PREFIXES = [ * fulfilled — the only API responses a test ever sees. * 2. A static third-party asset from index.html is fulfilled with an inert * stub, so a page load makes no unnecessary external requests. - * 3. An SRI-pinned static asset from index.html continues: a stub cannot - * match the pinned digest and the app needs FingerprintJS at load, so - * these version-locked, hash-verified assets are the only external - * requests allowed through. + * 3. An SRI-pinned static asset from index.html is fulfilled with its + * byte-identical copy vendored in ./vendor/: the bytes match the pinned + * digest, so the browser's SRI check passes and the app loads the same + * code as in production — without touching the network. * 4. A same-origin request is served by the local Vite dev server — the * document, ES modules, Vite internals and public assets — and continues. * Paths under /api are the exception: vite.config.js proxies them to real @@ -387,11 +424,11 @@ export async function applyDefaultRoutes(page, overrides = {}) { return; } - const isSriPinnedAsset = SRI_PINNED_ASSET_PREFIXES.some((urlPrefix) => + const vendoredAsset = VENDORED_SRI_ASSETS.find(([urlPrefix]) => requestUrl.startsWith(urlPrefix), ); - if (isSriPinnedAsset) { - await route.continue(); + if (vendoredAsset) { + await route.fulfill(vendoredAsset[1]); return; } diff --git a/e2e/fixtures/vendor/fingerprintjs-4.6.2.min.js b/e2e/fixtures/vendor/fingerprintjs-4.6.2.min.js new file mode 100644 index 0000000..d62ff88 --- /dev/null +++ b/e2e/fixtures/vendor/fingerprintjs-4.6.2.min.js @@ -0,0 +1,13 @@ +/** + * FingerprintJS v4.6.2 - Copyright (c) FingerprintJS, Inc, 2025 (https://fingerprint.com) + * + * Licensed under Business Source License 1.1 https://mariadb.com/bsl11/ + * Licensor: FingerprintJS, Inc. + * Licensed Work: FingerprintJS browser fingerprinting library + * Additional Use Grant: None + * Change Date: Four years from first release for the specific version. + * Change License: MIT, text at https://opensource.org/license/mit/ with the following copyright notice: + * Copyright 2015-present FingerprintJS, Inc. + */ + +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).FingerprintJS={})}(this,(function(n){"use strict";var e=function(){return e=Object.assign||function(n){for(var e,t=1,r=arguments.length;t0&&o[o.length-1])||6!==c[0]&&2!==c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]=i+o?(i=c,[4,new Promise((function(n){var e=new MessageChannel;e.port1.onmessage=function(){return n()},e.port2.postMessage(null)}))]):[3,3]):[3,4];case 2:r.sent(),r.label=3;case 3:return++a,[3,1];case 4:return[2,t]}}))}))}function l(n){return n.then(void 0,(function(){})),n}function d(n){return parseInt(n)}function f(n){return parseFloat(n)}function m(n,e){return"number"==typeof n&&isNaN(n)?e:n}function v(n){return n.reduce((function(n,e){return n+(e?1:0)}),0)}function h(n,e){if(void 0===e&&(e=1),Math.abs(e)>=1)return Math.round(n/e)*e;var t=1/e;return Math.round(n*t)/t}function p(n,e){var t=n[0]>>>16,r=65535&n[0],o=n[1]>>>16,i=65535&n[1],a=e[0]>>>16,c=65535&e[0],u=e[1]>>>16,s=0,l=0,d=0,f=0;d+=(f+=i+(65535&e[1]))>>>16,f&=65535,l+=(d+=o+u)>>>16,d&=65535,s+=(l+=r+c)>>>16,l&=65535,s+=t+a,s&=65535,n[0]=s<<16|l,n[1]=d<<16|f}function b(n,e){var t=n[0]>>>16,r=65535&n[0],o=n[1]>>>16,i=65535&n[1],a=e[0]>>>16,c=65535&e[0],u=e[1]>>>16,s=65535&e[1],l=0,d=0,f=0,m=0;f+=(m+=i*s)>>>16,m&=65535,d+=(f+=o*s)>>>16,f&=65535,d+=(f+=i*u)>>>16,f&=65535,l+=(d+=r*s)>>>16,d&=65535,l+=(d+=o*u)>>>16,d&=65535,l+=(d+=i*c)>>>16,d&=65535,l+=t*s+r*u+o*c+i*a,l&=65535,n[0]=l<<16|d,n[1]=f<<16|m}function y(n,e){var t=n[0];32===(e%=64)?(n[0]=n[1],n[1]=t):e<32?(n[0]=t<>>32-e,n[1]=n[1]<>>32-e):(e-=32,n[0]=n[1]<>>32-e,n[1]=t<>>32-e)}function g(n,e){0!==(e%=64)&&(e<32?(n[0]=n[1]>>>32-e,n[1]=n[1]<>>1];w(n,e),b(n,L),e[1]=n[0]>>>1,w(n,e),b(n,k),e[1]=n[0]>>>1,w(n,e)}var S=[2277735313,289559509],W=[1291169091,658871167],x=[0,5],Z=[0,1390208809],M=[0,944331445];function R(n,e){var t=function(n){for(var e=new Uint8Array(n.length),t=0;t127)return(new TextEncoder).encode(n);e[t]=r}return e}(n);e=e||0;var r,o=[0,t.length],i=o[1]%16,a=o[1]-i,c=[0,e],u=[0,e],s=[0,0],l=[0,0];for(r=0;r>>0).toString(16)).slice(-8)+("00000000"+(c[1]>>>0).toString(16)).slice(-8)+("00000000"+(u[0]>>>0).toString(16)).slice(-8)+("00000000"+(u[1]>>>0).toString(16)).slice(-8)}function F(n){return"function"!=typeof n}function G(n,e,o,i){var a=Object.keys(n).filter((function(n){return!function(n,e){for(var t=0,r=n.length;t=4}function Y(){var n=window,e=navigator;return v(["msWriteProfilerMark"in n,"MSStream"in n,"msLaunchUri"in e,"msSaveBlob"in e])>=3&&!I()}function j(){var n=window,e=navigator;return v(["webkitPersistentStorage"in e,"webkitTemporaryStorage"in e,0===(e.vendor||"").indexOf("Google"),"webkitResolveLocalFileSystemURL"in n,"BatteryManager"in n,"webkitMediaStream"in n,"webkitSpeechGrammar"in n])>=5}function C(){var n=window;return v(["ApplePayError"in n,"CSSPrimitiveValue"in n,"Counter"in n,0===navigator.vendor.indexOf("Apple"),"RGBColor"in n,"WebKitMediaKeys"in n])>=4}function X(){var n=window,e=n.HTMLElement,t=n.Document;return v(["safari"in n,!("ongestureend"in n),!("TouchEvent"in n),!("orientation"in n),e&&!("autocapitalize"in e.prototype),t&&"pointerLockElement"in t.prototype])>=4}function P(){var n,e=window;return n=e.print,/^function\s.*?\{\s*\[native code]\s*}$/.test(String(n))&&"[object WebPageNamespace]"===String(e.browser)}function E(){var n,e,t=window;return v(["buildID"in navigator,"MozAppearance"in(null!==(e=null===(n=document.documentElement)||void 0===n?void 0:n.style)&&void 0!==e?e:{}),"onmozfullscreenchange"in t,"mozInnerScreenX"in t,"CSSMozDocumentRule"in t,"CanvasCaptureMediaStream"in t])>=4}function H(){var n=window,e=navigator,t=n.CSS,r=n.HTMLButtonElement;return v([!("getStorageUpdates"in e),r&&"popover"in r.prototype,"CSSCounterStyleRule"in n,t.supports("font-size-adjust: ex-height 0.5"),t.supports("text-transform: full-width")])>=4}function A(){var n=document;return n.fullscreenElement||n.msFullscreenElement||n.mozFullScreenElement||n.webkitFullscreenElement||null}function N(){var n=j(),e=E(),t=window,r=navigator,o="connection";return n?v([!("SharedWorker"in t),r[o]&&"ontypechange"in r[o],!("sinkId"in new Audio)])>=2:!!e&&v(["onorientationchange"in t,"orientation"in t,/android/i.test(r.appVersion)])>=2}function J(){var n=navigator,e=window,t=Audio.prototype,r=e.visualViewport;return v(["srLatency"in t,"srChannelCount"in t,"devicePosture"in n,r&&"segments"in r,"getTextInformation"in Image.prototype])>=3}function T(){var n=window,e=n.OfflineAudioContext||n.webkitOfflineAudioContext;if(!e)return-2;if(C()&&!X()&&!function(){var n=window;return v(["DOMRectList"in n,"RTCPeerConnectionIceEvent"in n,"SVGGeometryElement"in n,"ontransitioncancel"in n])>=3}())return-1;var t=new e(1,5e3,44100),r=t.createOscillator();r.type="triangle",r.frequency.value=1e4;var o=t.createDynamicsCompressor();o.threshold.value=-50,o.knee.value=40,o.ratio.value=12,o.attack.value=0,o.release.value=.25,r.connect(o),o.connect(t.destination),r.start(0);var i=function(n){var e=3,t=500,r=500,o=5e3,i=function(){},a=new Promise((function(a,u){var s=!1,d=0,f=0;n.oncomplete=function(n){return a(n.renderedBuffer)};var m=function(){setTimeout((function(){return u(D("timeout"))}),Math.min(r,f+o-Date.now()))},v=function(){try{var r=n.startRendering();switch(c(r)&&l(r),n.state){case"running":f=Date.now(),s&&m();break;case"suspended":document.hidden||d++,s&&d>=e?u(D("suspended")):setTimeout(v,t)}}catch(o){u(o)}};v(),i=function(){s||(s=!0,f>0&&m())}}));return[a,i]}(t),a=i[0],u=i[1],s=l(a.then((function(n){return function(n){for(var e=0,t=0;t.6*t.length}))).sort(),[2,i]}var c}))}))},fontPreferences:function(){return function(n,e){void 0===e&&(e=4e3);return _((function(t,r){var i=r.document,a=i.body,c=a.style;c.width="".concat(e,"px"),c.webkitTextSizeAdjust=c.textSizeAdjust="none",j()?a.style.zoom="".concat(1/r.devicePixelRatio):C()&&(a.style.zoom="reset");var u=i.createElement("div");return u.textContent=o([],Array(e/20|0),!0).map((function(){return"word"})).join(" "),a.appendChild(u),n(i,a)}),'')}((function(n,e){for(var t={},r={},o=0,i=Object.keys(pn);o=3)?-4:T();var n,e},screenFrame:function(){var n=this;if(C()&&H()&&P())return function(){return Promise.resolve(void 0)};var e=tn();return function(){return t(n,void 0,void 0,(function(){var n,t;return r(this,(function(r){switch(r.label){case 0:return[4,e()];case 1:return n=r.sent(),[2,[(t=function(n){return null===n?null:h(n,10)})(n[0]),t(n[1]),t(n[2]),t(n[3])]]}}))}))}},canvas:function(){return Q(C()&&H()&&P())},osCpu:function(){return navigator.oscpu},languages:function(){var n,e=navigator,t=[],r=e.language||e.userLanguage||e.browserLanguage||e.systemLanguage;if(void 0!==r&&t.push([r]),Array.isArray(e.languages))j()&&v([!("MediaSettingsRange"in(n=window)),"RTCEncodedAudioFrame"in n,""+n.Intl=="[object Intl]",""+n.Reflect=="[object Reflect]"])>=3||t.push(e.languages);else if("string"==typeof e.languages){var o=e.languages;o&&t.push(o.split(","))}return t},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return m(f(navigator.deviceMemory),void 0)},screenResolution:function(){if(!(C()&&H()&&P()))return q()},hardwareConcurrency:function(){return m(d(navigator.hardwareConcurrency),void 0)},timezone:function(){var n,e=null===(n=window.Intl)||void 0===n?void 0:n.DateTimeFormat;if(e){var t=(new e).resolvedOptions().timeZone;if(t)return t}var r,o=(r=(new Date).getFullYear(),-Math.max(f(new Date(r,0,1).getTimezoneOffset()),f(new Date(r,6,1).getTimezoneOffset())));return"UTC".concat(o>=0?"+":"").concat(o)},sessionStorage:function(){try{return!!window.sessionStorage}catch(n){return!0}},localStorage:function(){try{return!!window.localStorage}catch(n){return!0}},indexedDB:function(){if(!I()&&!Y())try{return!!window.indexedDB}catch(n){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){var n=navigator.platform;return"MacIntel"===n&&C()&&!X()?function(){if("iPad"===navigator.platform)return!0;var n=screen,e=n.width/n.height;return v(["MediaSource"in window,!!Element.prototype.webkitRequestFullscreen,e>.65&&e<1.53])>=2}()?"iPad":"iPhone":n},plugins:function(){var n=navigator.plugins;if(n){for(var e=[],t=0;t=.001))try{var n=new XMLHttpRequest;n.open("get","https://m1.openfpcdn.io/fingerprintjs/v".concat(i,"/npm-monitoring"),!0),n.send()}catch(e){console.error(e)}}(),t=n.delayFallback,o=n.debug,[4,jn(t)];case 1:return r.sent(),a=function(n){return G(Rn,n,[])}({cache:{},debug:o}),[2,Cn(a,o)]}}))}))}var Pn={load:Xn,hashComponents:Yn,componentsToDebugString:In},En=R;n.componentsToDebugString=In,n.default=Pn,n.getFullscreenElement=A,n.getUnstableAudioFingerprint=T,n.getUnstableCanvasFingerprint=Q,n.getUnstableScreenFrame=tn,n.getUnstableScreenResolution=q,n.getWebGLContext=Vn,n.hashComponents=Yn,n.isAndroid=N,n.isChromium=j,n.isDesktopWebKit=X,n.isEdgeHTML=Y,n.isGecko=E,n.isSamsungInternet=J,n.isTrident=I,n.isWebKit=C,n.load=Xn,n.loadSources=G,n.murmurX64Hash128=En,n.prepareForSources=jn,n.sources=Rn,n.transformSource=function(n,e){var t=function(n){return F(n)?e(n):function(){var t=n();return c(t)?t.then(e):e(t)}};return function(e){var r=n(e);return c(r)?r.then(t):t(r)}},n.withIframe=_,Object.defineProperty(n,"__esModule",{value:!0})})); diff --git a/e2e/fixtures/vendor/highlight-11.9.0.min.js b/e2e/fixtures/vendor/highlight-11.9.0.min.js new file mode 100644 index 0000000..5d699ae --- /dev/null +++ b/e2e/fixtures/vendor/highlight-11.9.0.min.js @@ -0,0 +1,1213 @@ +/*! + Highlight.js v11.9.0 (git: f47103d4f1) + (c) 2006-2023 undefined and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(n){ +return n instanceof Map?n.clear=n.delete=n.set=()=>{ +throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ +const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) +})),n}class n{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] +;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope +;class r{constructor(e,n){ +this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ +this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const t=e.split(".") +;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") +}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} +closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const s=(e={})=>{const n={children:[]} +;return Object.assign(n,e),n};class o{constructor(){ +this.rootNode=s(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const n=s({scope:e}) +;this.add(n),this.stack.push(n)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ +return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), +n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,n){const t=e.root +;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function c(e){ +return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} +function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} +function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ +const n=e[e.length-1] +;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} +})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t +;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} +i+=a.substring(0,e.index), +a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], +"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} +const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",v={ +begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[v]},x=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, +contains:[]},t);i.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i +},M=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$");var C=Object.freeze({ +__proto__:null,APOS_STRING_MODE:O,BACKSLASH_ESCAPE:v,BINARY_NUMBER_MODE:{ +scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:x, +C_BLOCK_COMMENT_MODE:S,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", +begin:N,relevance:0},C_NUMBER_RE:N,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:A,IDENT_RE:f, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const n=/^#![ ]*\// +;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, +end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ +"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ +n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function I(e,n){ +Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function B(e,n){ +void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] +})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ +relevance:0,contains:[Object.assign(t,{endsParent:!0})] +},e.relevance=0,delete t.beforeMatch +},z=["of","and","for","in","not","or","if","then","parent","list","value"],F="keyword" +;function U(e,n,t=F){const a=Object.create(null) +;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ +Object.assign(a,U(e[t],n,t))})),a;function i(e,t){ +n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") +;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ +return n?Number(n):(e=>z.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{ +console.error(e)},H=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ +P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0) +},G=Error();function Z(e,n,{key:t}){let a=0;const i=e[t],r={},s={} +;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) +;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +G +;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"), +G;Z(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +G +;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"), +G;Z(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function Q(e){ +function n(n,t){ +return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) +}class t{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,n){ +n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const n=this.matcherRe.exec(e);if(!n)return null +;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] +;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t +;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), +n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ +this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ +const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex +;let t=n.exec(e) +;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ +const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} +return t&&(this.regexIndex+=t.position+1, +this.regexIndex===this.count&&this.considerAll()),t}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r +;if(r.isCompiled)return o +;[R,L,W,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), +r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null +;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), +l=r.keywords.$pattern, +delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)), +o.keywordPatternRe=n(l,!0), +s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(o.endRe=n(o.end)), +o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), +r.illegal&&(o.illegalRe=n(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ +variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) +})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i +;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){ +return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{ +constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} +const J=t,Y=a,ee=Symbol("nomatch"),ne=t=>{ +const a=Object.create(null),i=Object.create(null),r=[];let s=!0 +;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:l};function _(e){ +return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" +;"object"==typeof n?(a=e, +t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), +q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r) +;const s=r.result?r.result:f(r.language,r.code,t) +;return s.code=r.code,x("after:highlight",s),s}function f(e,t,i,r){ +const l=Object.create(null);function c(){if(!x.keywords)return void S.addText(A) +;let e=0;x.keywordPatternRe.lastIndex=0;let n=x.keywordPatternRe.exec(A),t="" +;for(;n;){t+=A.substring(e,n.index) +;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,x.keywords[a]);if(r){ +const[e,a]=r +;if(S.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ +const t=w.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] +;e=x.keywordPatternRe.lastIndex,n=x.keywordPatternRe.exec(A)}var a +;t+=A.substring(e),S.addText(t)}function d(){null!=x.subLanguage?(()=>{ +if(""===A)return;let e=null;if("string"==typeof x.subLanguage){ +if(!a[x.subLanguage])return void S.addText(A) +;e=f(x.subLanguage,A,!0,M[x.subLanguage]),M[x.subLanguage]=e._top +}else e=E(A,x.subLanguage.length?x.subLanguage:null) +;x.relevance>0&&(C+=e.relevance),S.__addSublanguage(e._emitter,e.language) +})():c(),A=""}function g(e,n){ +""!==e&&(S.startScope(n),S.addText(e),S.endScope())}function u(e,n){let t=1 +;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} +const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(A=i,c(),A=""),t++}} +function b(e,n){ +return e.scope&&"string"==typeof e.scope&&S.openNode(w.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(g(A,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +A=""):e.beginScope._multi&&(u(e.beginScope,n),A="")),x=Object.create(e,{parent:{ +value:x}}),x}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) +;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) +;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ +return 0===x.matcher.regexIndex?(A+=e[0],1):(D=!0,0)}function h(e){ +const n=e[0],a=t.substring(e.index),i=m(x,e,a);if(!i)return ee;const r=x +;x.endScope&&x.endScope._wrap?(d(), +g(n,x.endScope._wrap)):x.endScope&&x.endScope._multi?(d(), +u(x.endScope,e)):r.skip?A+=n:(r.returnEnd||r.excludeEnd||(A+=n), +d(),r.excludeEnd&&(A=n));do{ +x.scope&&S.closeNode(),x.skip||x.subLanguage||(C+=x.relevance),x=x.parent +}while(x!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} +let y={};function N(a,r){const o=r&&r[0];if(A+=a,null==o)return d(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ +if(A+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) +;throw n.languageName=e,n.badRule=y.rule,n}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] +;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) +;return a.skip?A+=t:(a.excludeBegin&&(A+=t), +d(),a.returnBegin||a.excludeBegin||(A=t)),b(a,e),a.returnBegin?0:t.length})(r) +;if("illegal"===r.type&&!i){ +const e=Error('Illegal lexeme "'+o+'" for mode "'+(x.scope||"")+'"') +;throw e.mode=x,e}if("end"===r.type){const e=h(r);if(e!==ee)return e} +if("illegal"===r.type&&""===o)return 1 +;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return A+=o,o.length}const w=v(e) +;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const O=Q(w);let k="",x=r||O;const M={},S=new p.__emitter(p);(()=>{const e=[] +;for(let n=x;n!==w;n=n.parent)n.scope&&e.unshift(n.scope) +;e.forEach((e=>S.openNode(e)))})();let A="",C=0,T=0,R=0,D=!1;try{ +if(w.__emitTokens)w.__emitTokens(t,S);else{for(x.matcher.considerAll();;){ +R++,D?D=!1:x.matcher.considerAll(),x.matcher.lastIndex=T +;const e=x.matcher.exec(t);if(!e)break;const n=N(t.substring(T,e.index),e) +;T=e.index+n}N(t.substring(T))}return S.finalize(),k=S.toHTML(),{language:e, +value:k,relevance:C,illegal:!1,_emitter:S,_top:x}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t), +illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, +context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:k},_emitter:S};if(s)return{ +language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:S,_top:x} +;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ +const n={value:J(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} +;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1))) +;i.unshift(t);const r=i.sort(((e,n)=>{ +if(e.relevance!==n.relevance)return n.relevance-e.relevance +;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1 +;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s +;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ +let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" +;const t=p.languageDetectRe.exec(n);if(t){const n=v(t[1]) +;return n||(H(o.replace("{}",t[1])), +H("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} +return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return +;if(x("before:highlightElement",{el:e,language:t +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML) +;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t +;e.classList.add("hljs"),e.classList.add("language-"+a) +})(e,t,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),x("after:highlightElement",{el:e,result:r,text:a})}let N=!1;function w(){ +"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(y):N=!0 +}function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} +function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +i[e.toLowerCase()]=n}))}function k(e){const n=v(e) +;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{ +e[t]&&e[t](n)}))} +"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ +N&&w()}),!1),Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:w, +highlightElement:y, +highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), +q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)}, +initHighlighting:()=>{ +w(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +w(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ +if(K("Language definition for '{}' could not be registered.".replace("{}",e)), +!s)throw n;K(n),i=c} +i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&O(i.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete a[e] +;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, +listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O, +autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ +e["before:highlightBlock"](Object.assign({block:n.el},n)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ +e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, +removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ +s=!1},t.safeMode=()=>{s=!0},t.versionString="11.9.0",t.regex={concat:b, +lookahead:d,either:m,optional:u,anyNumberOfTimes:g} +;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t +},te=ne({});te.newInstance=()=>ne({});var ae=te;const ie=e=>({IMPORTANT:{ +scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ +scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, +FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, +ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],se=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],oe=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],le=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ce=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),de=oe.concat(le) +;var ge="[0-9](_*[0-9])*",ue=`\\.(${ge})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",me={ +className:"number",variants:[{ +begin:`(\\b(${ge})((${ue})|\\.)?|(${ue}))[eE][+-]?(${ge})[fFdD]?\\b`},{ +begin:`\\b(${ge})((${ue})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${ue})[fFdD]?\\b`},{begin:`\\b(${ge})[fFdD]\\b`},{ +begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ge})[fFdD]?\\b`},{ +begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};function pe(e,n,t){return-1===t?"":e.replace(n,(a=>pe(e,n,t-1)))} +const _e="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],Ee=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ye=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ne=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],we=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ve=[].concat(Ne,Ee,ye) +;function Oe(e){const n=e.regex,t=_e,a={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const t=e[0].length+e.index,a=e.input[t] +;if("<"===a||","===a)return void n.ignoreMatch();let i +;">"===a&&(((e,{after:n})=>{const t="",M={ +match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(x)], +keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} +;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ +PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, +contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ +label:"use_strict",className:"meta",relevance:10, +begin:/^\s*['"]use (strict|asm)['"]/ +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ +className:"attr",begin:t+n.lookahead(":"),relevance:0},M,{ +begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", +keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ +className:"function",begin:x,returnBegin:!0,end:"\\s*=>",contains:[{ +className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ +className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, +excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0},{match:/\s+/, +relevance:0},{variants:[{begin:"<>",end:""},{ +match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, +"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ +begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},N,{ +beginKeywords:"while if switch catch for"},{ +begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, +className:"title.function"})]},{match:/\.\.\./,relevance:0},O,{match:"\\$"+t, +relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, +contains:[f]},w,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},E,k,{match:/\$[(.]/}]}} +const ke=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),xe=["Protocol","Type"].map(ke),Me=["init","self"].map(ke),Se=["Any","Self"],Ae=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ce=["false","nil","true"],Te=["assignment","associativity","higherThan","left","lowerThan","none","right"],Re=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],De=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Ie=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Le=m(Ie,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Be=b(Ie,Le,"*"),$e=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ze=m($e,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Fe=b($e,ze,"*"),Ue=b(/[A-Z]/,ze,"*"),je=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,Fe,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;var Ke=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ +begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} +;Object.assign(t,{className:"variable",variants:[{ +begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{ +match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}, +grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ +match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], +type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], +literal:"true false NULL", +built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" +},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:b.concat(["self"]),relevance:0}]),relevance:0},p={ +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], +relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, +keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] +}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"=]/,contains:[{ +beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, +strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" +},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},b={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, +relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] +},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ +keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, +keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) +;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], +o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t] +},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +keyword:"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", +begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,a,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ +const n=e.regex,t=ie(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ +name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ +keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, +contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+oe.join("|")+")"},{begin:":(:)?("+le.join("|")+")"}] +},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b"},{ +begin:/:/,end:/[;}{]/, +contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:se.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}},grmr_diff:e=>{ +const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ +className:"meta",relevance:10, +match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) +},{className:"comment",variants:[{ +begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), +end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]}},grmr_go:e=>{const n={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex;return{name:"GraphQL",aliases:["gql"], +case_insensitive:!0,disableAutodetect:!1,keywords:{ +keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], +literal:["true","false","null"]}, +contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ +scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", +begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, +end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ +scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), +relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ +className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ +begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, +end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ +begin:/\$\{(.*?)\}/}]},r={className:"literal", +begin:/\bon|off|true|false|yes|no\b/},s={className:"string", +contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ +begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] +},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 +},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ +name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), +className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ +const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+pe("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ +keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"], +literal:["false","true","null"], +type:["char","boolean","long","float","int","byte","short","double"], +built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ +begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} +;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, +className:"string",contains:[e.BACKSLASH_ESCAPE] +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ +1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ +begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", +3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", +3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{ +begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ +2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0, +contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,me,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},me,r]}},grmr_javascript:Oe, +grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", +beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{ +className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{ +match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}},grmr_kotlin:e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] +},l=me,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 +},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ +begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ +3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, +excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},l]}},grmr_less:e=>{ +const n=ie(e),t=de,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ +className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, +relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:se.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, +relevance:0} +;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ +begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, +contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", +returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ +},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b", +end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] +},m={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ +className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a +}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ +begin:"\\b("+re.join("|")+")\\b",className:"selector-tag" +},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+oe.join("|")+")"},{ +className:"selector-pseudo",begin:":(:)?("+le.join("|")+")"},{begin:/\(/, +end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ +begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} +;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), +{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, +grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] +},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 +})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, +literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:i}].concat(i) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ +const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ +variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ +begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{ +begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ +},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] +}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) +;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) +})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},grmr_objectivec:e=>{ +const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, +keyword:["@interface","@class","@protocol","@implementation"]};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{"variable.language":["this","super"],$pattern:n, +keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], +literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], +built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], +type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] +},illegal:"/,end:/$/,illegal:"\\n" +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", +begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, +contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, +relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ +$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, +end:/\}/},s={variants:[{begin:/\$\d/},{ +begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@][^\s\w{]/,relevance:0}] +},o=[e.BACKSLASH_ESCAPE,i,s],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,a,i="\\1")=>{ +const r="\\1"===i?i:n.concat(i,a) +;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) +},d=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),g=[s,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),r,{className:"string",contains:o,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", +begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", +relevance:0},{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:c("s|tr|y",n.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{ +begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...l,{capture:!0 +}),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{ +begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ +begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", +subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] +}];return i.contains=g,r.contains=g,{name:"Perl",aliases:["pl","pm"],keywords:a, +contains:g}},grmr_php:e=>{ +const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r={ +scope:"variable",match:"\\$+"+a},s={scope:"subst",variants:[{begin:/\$\w+/},{ +begin:/\{\$/,end:/\}/}]},o=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(s)}),o,{ +begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(s),"on:begin":(e,n)=>{ +n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{ +begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" +}],relevance:0 +},g=["false","null","true"],u=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={ +keyword:u,literal:(e=>{const n=[];return e.forEach((e=>{ +n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) +})),n})(g),built_in:b},p=e=>e.map((e=>e.replace(/\|\d+$/,""))),_={variants:[{ +match:[/new/,n.concat(l,"+"),n.concat("(?!",p(b).join("\\b|"),"\\b)"),i],scope:{ +1:"keyword",4:"title.class"}}]},h=n.concat(a,"\\b(?!\\()"),f={variants:[{ +match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant" +}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ +match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{1:"title.class", +3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], +scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", +3:"variable.language"}}]},E={scope:"attr", +match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},y={relevance:0, +begin:/\(/,end:/\)/,keywords:m,contains:[E,r,f,e.C_BLOCK_COMMENT_MODE,c,d,_] +},N={relevance:0, +match:[/\b/,n.concat("(?!fn\\b|function\\b|",p(u).join("\\b|"),"|",p(b).join("\\b|"),"\\b)"),a,n.concat(l,"*"),n.lookahead(/(?=\()/)], +scope:{3:"title.function.invoke"},contains:[y]};y.contains.push(N) +;const w=[E,f,e.C_BLOCK_COMMENT_MODE,c,d,_];return{case_insensitive:!1, +keywords:m,contains:[{begin:n.concat(/#\[\s*/,i),beginScope:"meta",end:/]/, +endScope:"meta",keywords:{literal:g,keyword:["new","array"]},contains:[{ +begin:/\[/,end:/]/,keywords:{literal:g,keyword:["new","array"]}, +contains:["self",...w]},...w,{scope:"meta",match:i}] +},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{ +scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, +keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, +contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ +begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ +begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},r,N,f,{ +match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},_,{ +scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, +excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" +},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", +begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m, +contains:["self",r,f,e.C_BLOCK_COMMENT_MODE,c,d]}]},{scope:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ +beginKeywords:"use",relevance:0,end:";",contains:[{ +match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,d]} +},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ +begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", +end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 +},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, +contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ +const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ +$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, +end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ +begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ +begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` +},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` +}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, +contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ +className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, +end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, +contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ +name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, +illegal:/(<\/|\?)|=>/,contains:[r,u,{begin:/\bself\b/},{beginKeywords:"if", +relevance:0},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{ +1:"keyword",3:"title.function"},contains:[m]},{variants:[{ +match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], +scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ +className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, +grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", +starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ +begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ +const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) +;return{name:"R",keywords:{$pattern:t, +keyword:"function if in break next repeat else for while", +literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", +built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" +},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, +starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), +endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ +scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 +}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] +}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], +variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', +relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ +1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, +match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ +2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, +match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ +match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", +contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ +const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ +"variable.constant":["__FILE__","__LINE__","__ENCODING__"], +"variable.language":["self","super"], +keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], +built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], +literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ +begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] +}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, +end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ +begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ +begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, +end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ +begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ +begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), +contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ +className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, +keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ +match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", +4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ +2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ +1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ +match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ +begin:e.IDENT_RE+"::"},{className:"symbol", +begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0, +relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", +keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], +illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ +begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", +end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) +;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} +},{className:"meta.prompt", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, +contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, +grmr_rust:e=>{const n=e.regex,t={className:"title.function.invoke",relevance:0, +begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,e.IDENT_RE,n.lookahead(/\s*\(/)) +},a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] +;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r, +keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"], +literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},t]}}, +grmr_scss:e=>{const n=ie(e),t=le,a=oe,i="@[a-z-]+",r={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", +case_insensitive:!0,illegal:"[=/|']", +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+re.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+a.join("|")+")"},{className:"selector-pseudo", +begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, +contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", +begin:"\\b("+ce.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:/:/,end:/[;}{]/,relevance:0, +contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] +},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ +begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:se.join(" ")},contains:[{begin:i, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] +},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", +aliases:["console","shellsession"],contains:[{className:"meta.prompt", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]}),grmr_sql:e=>{ +const n=e.regex,t=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],r=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=r,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!r.includes(e))),c={ +begin:n.concat(/\b/,n.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} +;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ +$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t +;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) +})(l,{when:e=>e.length<3}),literal:a,type:i, +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{begin:n.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, +keyword:l.concat(s),literal:a,type:i}},{className:"type", +begin:n.either("double precision","large object","with timezone","without timezone") +},c,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string", +variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/, +contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{ +className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, +relevance:0}]}},grmr_swift:e=>{const n={match:/\s+/,relevance:0 +},t=e.COMMENT("/\\*","\\*/",{contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={ +match:[/\./,m(...xe,...Me)],className:{2:"keyword"}},r={match:b(/\./,m(...Ae)), +relevance:0},s=Ae.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ +className:"keyword", +match:m(...Ae.filter((e=>"string"!=typeof e)).concat(Se).map(ke),...Me)}]},l={ +$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Re),literal:Ce},c=[i,r,o],g=[{ +match:b(/\./,m(...De)),relevance:0},{className:"built_in", +match:b(/\b/,m(...De),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ +className:"operator",relevance:0,variants:[{match:Be},{match:`\\.(\\.|${Le})+`}] +}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, +variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ +match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ +},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ +match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] +}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) +}),N=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ +}),w=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),N(e)] +}),v=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),N(e)]}),O={ +className:"string", +variants:[w(),w("#"),w("##"),w("###"),v(),v("#"),v("##"),v("###")] +},k=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, +contains:[e.BACKSLASH_ESCAPE]}],x={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, +contains:k},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, +contains:[...k,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},S={ +scope:"regexp",variants:[M("###"),M("##"),M("#"),x]},A={match:b(/`/,Fe,/`/) +},C=[A,{className:"variable",match:/\$\d+/},{className:"variable", +match:`\\$${ze}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ +contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...p,f,O]}]}},{ +scope:"keyword",match:b(/@/,m(...je))},{scope:"meta",match:b(/@/,Fe)}],R={ +match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", +match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ze,"+") +},{className:"type",match:Ue,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Ue)),relevance:0}]},D={ +begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) +;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ +match:b(Fe,/\s*:/),keywords:"_|0",relevance:0 +},...a,S,...c,...g,...p,f,O,...C,...T,R]},L={begin://, +keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, +contains:[{begin:m(d(b(Fe,/\s*:/)),d(b(Fe,/\s+/,Fe,/\s*:/))),end:/:/, +relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", +match:Fe}]},...a,...c,...p,f,O,...T,R,I],endsParent:!0,illegal:/["']/},$={ +match:[/(func|macro)/,/\s+/,m(A.match,Fe,Be)],className:{1:"keyword", +3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},z={ +match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, +contains:[L,B,n],illegal:/\[|%/},F={match:[/operator/,/\s+/,Be],className:{ +1:"keyword",3:"title"}},U={begin:[/precedencegroup/,/\s+/,Ue],className:{ +1:"keyword",3:"title"},contains:[R],keywords:[...Te,...Ce],end:/}/} +;for(const e of O.variants){const n=e.contains.find((e=>"interpol"===e.label)) +;n.keywords=l;const t=[...c,...g,...p,f,O,...C];n.contains=[...t,{begin:/\(/, +end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:l, +contains:[...a,$,z,{beginKeywords:"struct protocol class extension enum actor", +end:"\\{",excludeEnd:!0,keywords:l,contains:[e.inherit(e.TITLE_MODE,{ +className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...c] +},F,U,{beginKeywords:"import",end:/$/,contains:[...a],relevance:0 +},S,...c,...g,...p,f,O,...C,...T,R,I]}},grmr_typescript:e=>{ +const n=Oe(e),t=_e,a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={ +beginKeywords:"namespace",end:/\{/,excludeEnd:!0, +contains:[n.exports.CLASS_REFERENCE]},r={beginKeywords:"interface",end:/\{/, +excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a}, +contains:[n.exports.CLASS_REFERENCE]},s={$pattern:_e, +keyword:he.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]), +literal:fe,built_in:ve.concat(a),"variable.language":we},o={className:"meta", +begin:"@"+t},l=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) +;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} +;return Object.assign(n.keywords,s), +n.exports.PARAMS_CONTAINS.push(o),n.contains=n.contains.concat([o,i,r]), +l(n,"shebang",e.SHEBANG()),l(n,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),n.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(n,{ +name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n},grmr_vbnet:e=>{ +const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ +className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ +begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ +begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] +},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] +}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) +;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, +classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},o,l,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +keyword:"const disable else elseif enable end externalsource if region then"}, +contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) +;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, +keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] +},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], +className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ +match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ +begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", +3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, +className:"type"},{className:"keyword", +match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ +},{className:"number",relevance:0, +match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ +}]}},grmr_xml:e=>{ +const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[i,r,o,s]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:n.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ +className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ +className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} +},grmr_yaml:e=>{ +const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ +className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ +},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", +variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{ +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={ +end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\{/, +end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={begin:"\\[",end:"\\]", +contains:[r],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{ +begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ +begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", +relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", +begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,a],c=[...l] +;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:l}}});const He=ae;for(const e of Object.keys(Ke)){ +const n=e.replace("grmr_","").replace("_","-");He.registerLanguage(n,Ke[e])} +return He}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/e2e/fixtures/vendor/highlight-dart-11.9.0.min.js b/e2e/fixtures/vendor/highlight-dart-11.9.0.min.js new file mode 100644 index 0000000..245e1a4 --- /dev/null +++ b/e2e/fixtures/vendor/highlight-dart-11.9.0.min.js @@ -0,0 +1,22 @@ +/*! `dart` grammar compiled for Highlight.js 11.9.0 */ +(()=>{var e=(()=>{"use strict";return e=>{const n={className:"subst",variants:[{ +begin:"\\$[A-Za-z0-9_]+"}]},a={className:"subst",variants:[{begin:/\$\{/, +end:/\}/}],keywords:"true false null this is new super"},t={className:"string", +variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'", +illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''", +contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:'"""',end:'"""', +contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:"'",end:"'",illegal:"\\n", +contains:[e.BACKSLASH_ESCAPE,n,a]},{begin:'"',end:'"',illegal:"\\n", +contains:[e.BACKSLASH_ESCAPE,n,a]}]};a.contains=[e.C_NUMBER_MODE,t] +;const i=["Comparable","DateTime","Duration","Function","Iterable","Iterator","List","Map","Match","Object","Pattern","RegExp","Set","Stopwatch","String","StringBuffer","StringSink","Symbol","Type","Uri","bool","double","int","num","Element","ElementList"],r=i.map((e=>e+"?")) +;return{name:"Dart",keywords:{ +keyword:["abstract","as","assert","async","await","base","break","case","catch","class","const","continue","covariant","default","deferred","do","dynamic","else","enum","export","extends","extension","external","factory","false","final","finally","for","Function","get","hide","if","implements","import","in","interface","is","late","library","mixin","new","null","on","operator","part","required","rethrow","return","sealed","set","show","static","super","switch","sync","this","throw","true","try","typedef","var","void","when","while","with","yield"], +built_in:i.concat(r).concat(["Never","Null","dynamic","print","document","querySelector","querySelectorAll","window"]), +$pattern:/[A-Za-z][A-Za-z0-9_]*\??/}, +contains:[t,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{subLanguage:"markdown",relevance:0 +}),e.COMMENT(/\/{3,} ?/,/$/,{contains:[{subLanguage:"markdown",begin:".", +end:"$",relevance:0}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{ +className:"class",beginKeywords:"class interface",end:/\{/,excludeEnd:!0, +contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE] +},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}})() +;hljs.registerLanguage("dart",e)})(); \ No newline at end of file diff --git a/e2e/fixtures/vendor/highlight-github-dark-11.9.0.css b/e2e/fixtures/vendor/highlight-github-dark-11.9.0.css new file mode 100644 index 0000000..03b6da8 --- /dev/null +++ b/e2e/fixtures/vendor/highlight-github-dark-11.9.0.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/e2e/fixtures/vendor/jszip-3.10.1.min.js b/e2e/fixtures/vendor/jszip-3.10.1.min.js new file mode 100644 index 0000000..ff4cfd5 --- /dev/null +++ b/e2e/fixtures/vendor/jszip-3.10.1.min.js @@ -0,0 +1,13 @@ +/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/ + +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t="function"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l="function"==typeof require&&require,e=0;e>2,s=(3&t)<<4|r>>4,a=1>6:64,o=2>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n=null;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function h(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h("Deflate",e)},r.uncompressWorker=function(){return new h("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function A(e,t){var r,n="";for(r=0;r>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo("string",s(h.name)),c=I.transformTo("string",O.utf8encode(h.name)),d=h.comment,p=I.transformTo("string",s(d)),m=I.transformTo("string",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b="",v="",y="",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),"UNIX"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+="up"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+="uc"+A(y.length,2)+y);var E="";return E+="\n\0",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+"\0\0\0\0"+A(z,4)+A(n,4)+f+b+p}}var I=e("../utils"),i=e("../stream/GenericWorker"),O=e("../utf8"),B=e("../crc32"),R=e("../signature");function s(e,t,r,n){i.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),h=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new h(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var h=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),u=e("../base64"),n=e("../support"),a=e("../external"),o=null;if(n.nodestream)try{o=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on("data",function(e,t){n.push(e),o&&o(t)}).on("error",function(e){n=[],r(e)}).on("end",function(){try{var e=function(e,t,r){switch(e){case"blob":return h.newBlob(h.transformTo("arraybuffer",t),r);case"base64":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?"uint8array":"array",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,a){"use strict";var o=e("./support"),h=e("./base64"),r=e("./nodejsUtils"),u=e("./external");function n(e){return e}function l(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){"use strict";var h,c=e("../utils/common"),u=e("./trees"),d=e("./adler32"),p=e("./crc32"),n=e("./messages"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&sh&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=x&&(e.ins_h=(e.ins_h<=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindexi&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=z[n++]<>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<>>=y,p-=y,(y=s-a)>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l>>=_,l-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l>>=_)),u>>>=3,l-=3}else{for(z=_+7;l>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(hd?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){"use strict";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i="[object process]"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage("","*"),r.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",r.addEventListener?r.addEventListener("message",d,!1):r.attachEvent("onmessage",d),function(e){r.postMessage(a+e,"*")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&"onreadystatechange"in l.createElement("script")?(s=l.documentElement,function(e){var t=l.createElement("script");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r