"use strict";(()=>{var oe=Object.defineProperty;var ce=(r,e,t)=>e in r?oe(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var p=(r,e,t)=>ce(r,typeof e!="symbol"?e+"":e,t);function le(r){let e="__DOUBLE_ASTERISK_TOKEN__",t="__SINGLE_ASTERISK_TOKEN__",n=r.replace(/\*\*/g,e).replace(/\*/g,t).replace(/[.+?^${}()|[\]\\]/g,"\\$&");n=n.replace(new RegExp(`/${e}/`,"g"),"/(?:.+/)?"),n=n.replace(new RegExp(e,"g"),".*"),n=n.replace(/\//g,"\\/");let o=n.replace(new RegExp(t,"g"),"[^/]+");return new RegExp("^"+o+"$")}function C(r,e){for(let t of e)try{if(le(t).test(r))return t}catch(i){console.error(`Invalid pattern: ${t}`,i)}return null}function V(r,e){let t=null;return(...i)=>{t&&clearTimeout(t),t=setTimeout(()=>r(...i),e)}}function z(r){try{let e=window.location.hostname,t=new URL(r).hostname;return t!==e&&t!==""}catch{return!1}}function w(r,e){if(!r)return e;try{let t=JSON.parse(r);return Array.isArray(e)&&!Array.isArray(t)?e:t}catch(t){return console.error("Error parsing JSON:",t),e}}async function $(r){let e=r.getAttribute("src");if(!e)return console.error("Script src attribute is missing"),null;let t=e.split("/script.js")[0];if(!t)return console.error("Please provide a valid analytics host"),null;let i=r.getAttribute("data-site-id")||r.getAttribute("site-id");if(!i)return console.error("Please provide a valid site ID using the data-site-id attribute"),null;let n=w(r.getAttribute("data-skip-patterns"),[]),o=w(r.getAttribute("data-mask-patterns"),[]),a=w(r.getAttribute("data-replay-mask-text-selectors"),[]),s=r.getAttribute("data-debounce")?Math.max(0,parseInt(r.getAttribute("data-debounce"))):500,c=r.getAttribute("data-replay-batch-size")?Math.max(1,parseInt(r.getAttribute("data-replay-batch-size"))):250,d=r.getAttribute("data-replay-batch-interval")?Math.max(1e3,parseInt(r.getAttribute("data-replay-batch-interval"))):5e3,l={analyticsHost:t,siteId:i,debounceDuration:s,sessionReplayBatchSize:c,sessionReplayBatchInterval:d,sessionReplayMaskTextSelectors:a,skipPatterns:n,maskPatterns:o,autoTrackPageview:!0,autoTrackSpa:!0,trackQuerystring:!0,trackOutbound:!0,enableWebVitals:!1,trackErrors:!1,enableSessionReplay:!1};try{let y=`${t}/site/tracking-config/${i}`,H=await fetch(y,{method:"GET",credentials:"omit"});if(H.ok){let f=await H.json();return{...l,autoTrackPageview:f.trackInitialPageView??l.autoTrackPageview,autoTrackSpa:f.trackSpaNavigation??l.autoTrackSpa,trackQuerystring:f.trackUrlParams??l.trackQuerystring,trackOutbound:f.trackOutbound??l.trackOutbound,enableWebVitals:f.webVitals??l.enableWebVitals,trackErrors:f.trackErrors??l.trackErrors,enableSessionReplay:f.sessionReplay??l.enableSessionReplay}}else return console.warn("Failed to fetch tracking config from API, using defaults"),l}catch(y){return console.warn("Error fetching tracking config:",y),l}}var R=class{constructor(e,t,i){this.isRecording=!1;this.eventBuffer=[];this.config=e,this.userId=t,this.sendBatch=i}async initialize(){this.config.enableSessionReplay&&(window.rrweb||await this.loadRrweb(),window.rrweb&&this.startRecording())}async loadRrweb(){return new Promise((e,t)=>{let i=document.createElement("script");i.src=`${this.config.analyticsHost}/replay.js`,i.async=!1,i.onload=()=>{e()},i.onerror=()=>t(new Error("Failed to load rrweb")),document.head.appendChild(i)})}startRecording(){if(!(this.isRecording||!window.rrweb||!this.config.enableSessionReplay))try{let e={emit:t=>{this.addEvent({type:t.type,data:t.data,timestamp:t.timestamp||Date.now()})},recordCanvas:!1,collectFonts:!0,checkoutEveryNms:6e4,checkoutEveryNth:500,maskAllInputs:!0,maskInputOptions:{password:!0,email:!0},slimDOMOptions:{script:!1,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0},sampling:{mousemove:!1,mouseInteraction:{MouseUp:!1,MouseDown:!1,Click:!0,ContextMenu:!1,DblClick:!0,Focus:!0,Blur:!0,TouchStart:!1,TouchEnd:!1},scroll:500,input:"last",media:800}};this.config.sessionReplayMaskTextSelectors&&this.config.sessionReplayMaskTextSelectors.length>0&&(e.maskTextSelector=this.config.sessionReplayMaskTextSelectors.join(", ")),this.stopRecordingFn=window.rrweb.record(e),this.isRecording=!0,this.setupBatchTimer()}catch{}}stopRecording(){this.isRecording&&(this.stopRecordingFn&&this.stopRecordingFn(),this.isRecording=!1,this.clearBatchTimer(),this.eventBuffer.length>0&&this.flushEvents())}isActive(){return this.isRecording}addEvent(e){this.eventBuffer.push(e),this.eventBuffer.length>=this.config.sessionReplayBatchSize&&this.flushEvents()}setupBatchTimer(){this.clearBatchTimer(),this.batchTimer=window.setInterval(()=>{this.eventBuffer.length>0&&this.flushEvents()},this.config.sessionReplayBatchInterval)}clearBatchTimer(){this.batchTimer&&(clearInterval(this.batchTimer),this.batchTimer=void 0)}async flushEvents(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];let t={userId:this.userId,events:e,metadata:{pageUrl:window.location.href,viewportWidth:screen.width,viewportHeight:screen.height,language:navigator.language}};try{await this.sendBatch(t)}catch{this.eventBuffer.unshift(...e)}}updateUserId(e){this.userId=e}onPageChange(){this.isRecording&&this.flushEvents()}cleanup(){this.stopRecording()}};var k=class{constructor(e){this.customUserId=null;this.config=e,this.loadUserId(),e.enableSessionReplay&&this.initializeSessionReplay()}loadUserId(){try{let e=localStorage.getItem("rybbit-user-id");e&&(this.customUserId=e)}catch{}}async initializeSessionReplay(){try{this.sessionReplayRecorder=new R(this.config,this.customUserId||"",e=>this.sendSessionReplayBatch(e)),await this.sessionReplayRecorder.initialize()}catch(e){console.error("Failed to initialize session replay:",e)}}async sendSessionReplayBatch(e){try{await fetch(`${this.config.analyticsHost}/session-replay/record/${this.config.siteId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),mode:"cors",keepalive:!1})}catch(t){throw console.error("Failed to send session replay batch:",t),t}}createBasePayload(){let e=new URL(window.location.href),t=e.pathname;if(e.hash&&e.hash.startsWith("#/")&&(t=e.hash.substring(1)),C(t,this.config.skipPatterns))return null;let i=C(t,this.config.maskPatterns);i&&(t=i);let n={site_id:this.config.siteId,hostname:e.hostname,pathname:t,querystring:this.config.trackQuerystring?e.search:"",screenWidth:screen.width,screenHeight:screen.height,language:navigator.language,page_title:document.title,referrer:document.referrer};return this.customUserId&&(n.user_id=this.customUserId),n}async sendTrackingData(e){try{await fetch(`${this.config.analyticsHost}/track`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),mode:"cors",keepalive:!0})}catch(t){console.error("Failed to send tracking data:",t)}}track(e,t="",i={}){if(e==="custom_event"&&(!t||typeof t!="string")){console.error("Event name is required and must be a string for custom events");return}let n=this.createBasePayload();if(!n)return;let o={...n,type:e,event_name:t,properties:e==="custom_event"||e==="outbound"||e==="error"?JSON.stringify(i):void 0};this.sendTrackingData(o)}trackPageview(){this.track("pageview")}trackEvent(e,t={}){this.track("custom_event",e,t)}trackOutbound(e,t="",i="_self"){this.track("outbound","",{url:e,text:t,target:i})}trackWebVitals(e){let t=this.createBasePayload();if(!t)return;let i={...t,type:"performance",event_name:"web-vitals",...e};this.sendTrackingData(i)}trackError(e,t={}){let i=window.location.origin,n=t.filename||"",o=e.stack||"";if(n)try{if(new URL(n).origin!==i)return}catch{}else if(o&&!o.includes(i))return;let a={message:e.message?.substring(0,500)||"Unknown error",stack:o.substring(0,2e3)||""};if(n&&(a.fileName=n),t.lineno){let s=typeof t.lineno=="string"?parseInt(t.lineno,10):t.lineno;s&&s!==0&&(a.lineNumber=s)}if(t.colno){let s=typeof t.colno=="string"?parseInt(t.colno,10):t.colno;s&&s!==0&&(a.columnNumber=s)}for(let s in t)!["lineno","colno"].includes(s)&&t[s]!==void 0&&(a[s]=t[s]);this.track("error",e.name||"Error",a)}identify(e,t){if(typeof e!="string"||e.trim()===""){console.error("User ID must be a non-empty string");return}this.customUserId=e.trim();try{localStorage.setItem("rybbit-user-id",this.customUserId)}catch{console.warn("Could not persist user ID to localStorage")}this.sendIdentifyEvent(this.customUserId,t,!0),this.sessionReplayRecorder&&this.sessionReplayRecorder.updateUserId(this.customUserId)}setTraits(e){if(!e||typeof e!="object"){console.error("Traits must be an object");return}let t=this.customUserId;if(!t){console.warn("Cannot set traits without identifying user first. Call identify() first.");return}this.sendIdentifyEvent(t,e,!1)}async sendIdentifyEvent(e,t,i=!0){try{await fetch(`${this.config.analyticsHost}/identify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({site_id:this.config.siteId,user_id:e,traits:t,is_new_identify:i}),mode:"cors",keepalive:!0})}catch(n){console.error("Failed to send identify event:",n)}}clearUserId(){this.customUserId=null;try{localStorage.removeItem("rybbit-user-id")}catch{}}getUserId(){return this.customUserId}startSessionReplay(){this.sessionReplayRecorder?this.sessionReplayRecorder.startRecording():console.warn("Session replay not initialized")}stopSessionReplay(){this.sessionReplayRecorder&&this.sessionReplayRecorder.stopRecording()}isSessionReplayActive(){return this.sessionReplayRecorder?.isActive()??!1}onPageChange(){this.sessionReplayRecorder&&this.sessionReplayRecorder.onPageChange()}cleanup(){this.sessionReplayRecorder&&this.sessionReplayRecorder.cleanup()}};var Z=-1,m=r=>{addEventListener("pageshow",(e=>{e.persisted&&(Z=e.timeStamp,r(e))}),!0)},u=(r,e,t,i)=>{let n,o;return a=>{e.value>=0&&(a||i)&&(o=e.value-(n??0),(o||n===void 0)&&(n=e.value,e.delta=o,e.rating=((s,c)=>s>c[1]?"poor":s>c[0]?"needs-improvement":"good")(e.value,t),r(e)))}},x=r=>{requestAnimationFrame((()=>requestAnimationFrame((()=>r()))))},D=()=>{let r=performance.getEntriesByType("navigation")[0];if(r&&r.responseStart>0&&r.responseStartD()?.activationStart??0,h=(r,e=-1)=>{let t=D(),i="navigate";return Z>=0?i="back-forward-cache":t&&(document.prerendering||v()>0?i="prerender":document.wasDiscarded?i="restore":t.type&&(i=t.type.replace(/_/g,"-"))),{name:r,value:e,rating:"good",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:i}},I=new WeakMap;function N(r,e){return I.get(r)||I.set(r,new e),I.get(r)}var A=class{constructor(){p(this,"t");p(this,"i",0);p(this,"o",[])}h(e){if(e.hadRecentInput)return;let t=this.o[0],i=this.o.at(-1);this.i&&t&&i&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}},b=(r,e,t={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(r)){let i=new PerformanceObserver((n=>{Promise.resolve().then((()=>{e(n.getEntries())}))}));return i.observe({type:r,buffered:!0,...t}),i}}catch{}},F=r=>{let e=!1;return()=>{e||(r(),e=!0)}},g=-1,ee=new Set,j=()=>document.visibilityState!=="hidden"||document.prerendering?1/0:0,L=r=>{if(document.visibilityState==="hidden"){if(r.type==="visibilitychange")for(let e of ee)e();isFinite(g)||(g=r.type==="visibilitychange"?r.timeStamp:0,removeEventListener("prerenderingchange",L,!0))}},S=()=>{if(g<0){let r=v();g=(document.prerendering?void 0:globalThis.performance.getEntriesByType("visibility-state").filter((t=>t.name==="hidden"&&t.startTime>r))[0]?.startTime)??j(),addEventListener("visibilitychange",L,!0),addEventListener("prerenderingchange",L,!0),m((()=>{setTimeout((()=>{g=j()}))}))}return{get firstHiddenTime(){return g},onHidden(r){ee.add(r)}}},P=r=>{document.prerendering?addEventListener("prerenderingchange",(()=>r()),!0):r()},J=[1800,3e3],W=(r,e={})=>{P((()=>{let t=S(),i,n=h("FCP"),o=b("paint",(a=>{for(let s of a)s.name==="first-contentful-paint"&&(o.disconnect(),s.startTime{n=h("FCP"),i=u(r,n,J,e.reportAllChanges),x((()=>{n.value=performance.now()-a.timeStamp,i(!0)}))})))}))},q=[.1,.25],te=(r,e={})=>{let t=S();W(F((()=>{let i,n=h("CLS",0),o=N(e,A),a=c=>{for(let d of c)o.h(d);o.i>n.value&&(n.value=o.i,n.entries=o.o,i())},s=b("layout-shift",a);s&&(i=u(r,n,q,e.reportAllChanges),t.onHidden((()=>{a(s.takeRecords()),i(!0)})),m((()=>{o.i=0,n=h("CLS",0),i=u(r,n,q,e.reportAllChanges),x((()=>i()))})),setTimeout(i))})))},re=0,B=1/0,T=0,de=r=>{for(let e of r)e.interactionId&&(B=Math.min(B,e.interactionId),T=Math.max(T,e.interactionId),re=T?(T-B)/7+1:0)},M,K=()=>M?re:performance.interactionCount??0,ue=()=>{"interactionCount"in performance||M||(M=b("event",de,{type:"event",buffered:!0,durationThreshold:0}))},Q=0,O=class{constructor(){p(this,"u",[]);p(this,"l",new Map);p(this,"m");p(this,"p")}v(){Q=K(),this.u.length=0,this.l.clear()}L(){let e=Math.min(this.u.length-1,Math.floor((K()-Q)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&e.entryType!=="first-input")return;let t=this.u.at(-1),i=this.l.get(e.interactionId);if(i||this.u.length<10||e.duration>t.P){if(i?e.duration>i.P?(i.entries=[e],i.P=e.duration):e.duration===i.P&&e.startTime===i.entries[0].startTime&&i.entries.push(e):(i={id:e.interactionId,entries:[e],P:e.duration},this.l.set(i.id,i),this.u.push(i)),this.u.sort(((n,o)=>o.P-n.P)),this.u.length>10){let n=this.u.splice(10);for(let o of n)this.l.delete(o.id)}this.p?.(i)}}},ie=r=>{let e=globalThis.requestIdleCallback||setTimeout;document.visibilityState==="hidden"?r():(r=F(r),addEventListener("visibilitychange",r,{once:!0,capture:!0}),e((()=>{r(),removeEventListener("visibilitychange",r,{capture:!0})})))},G=[200,500],ne=(r,e={})=>{if(!globalThis.PerformanceEventTiming||!("interactionId"in PerformanceEventTiming.prototype))return;let t=S();P((()=>{ue();let i,n=h("INP"),o=N(e,O),a=c=>{ie((()=>{for(let l of c)o.h(l);let d=o.L();d&&d.P!==n.value&&(n.value=d.P,n.entries=d.entries,i())}))},s=b("event",a,{durationThreshold:e.durationThreshold??40});i=u(r,n,G,e.reportAllChanges),s&&(s.observe({type:"first-input",buffered:!0}),t.onHidden((()=>{a(s.takeRecords()),i(!0)})),m((()=>{o.v(),n=h("INP"),i=u(r,n,G,e.reportAllChanges)})))}))},_=class{constructor(){p(this,"m")}h(e){this.m?.(e)}},Y=[2500,4e3],se=(r,e={})=>{P((()=>{let t=S(),i,n=h("LCP"),o=N(e,_),a=c=>{e.reportAllChanges||(c=c.slice(-1));for(let d of c)o.h(d),d.startTime{a(s.takeRecords()),s.disconnect(),i(!0)})),d=l=>{l.isTrusted&&(ie(c),removeEventListener(l.type,d,{capture:!0}))};for(let l of["keydown","click","visibilitychange"])addEventListener(l,d,{capture:!0});m((l=>{n=h("LCP"),i=u(r,n,Y,e.reportAllChanges),x((()=>{n.value=performance.now()-l.timeStamp,i(!0)}))}))}}))},X=[800,1800],U=r=>{document.prerendering?P((()=>U(r))):document.readyState!=="complete"?addEventListener("load",(()=>U(r)),!0):setTimeout(r)},ae=(r,e={})=>{let t=h("TTFB"),i=u(r,t,X,e.reportAllChanges);U((()=>{let n=D();n&&(t.value=Math.max(n.responseStart-v(),0),t.entries=[n],i(!0),m((()=>{t=h("TTFB",0),i=u(r,t,X,e.reportAllChanges),i(!0)})))}))};var E=class{constructor(e){this.data={lcp:null,cls:null,inp:null,fcp:null,ttfb:null};this.sent=!1;this.timeout=null;this.onReadyCallback=null;this.onReadyCallback=e}initialize(){try{se(this.collectMetric.bind(this)),te(this.collectMetric.bind(this)),ne(this.collectMetric.bind(this)),W(this.collectMetric.bind(this)),ae(this.collectMetric.bind(this)),this.timeout=setTimeout(()=>{this.sent||this.sendData()},2e4),window.addEventListener("beforeunload",()=>{this.sent||this.sendData()})}catch(e){console.warn("Error initializing web vitals tracking:",e)}}collectMetric(e){if(this.sent)return;let t=e.name.toLowerCase();this.data[t]=e.value,Object.values(this.data).every(n=>n!==null)&&this.sendData()}sendData(){this.sent||(this.sent=!0,this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.onReadyCallback&&this.onReadyCallback(this.data))}getData(){return{...this.data}}};(async function(){let r=document.currentScript;if(!r){console.error("Could not find current script tag");return}if(window.__RYBBIT_OPTOUT__||localStorage.getItem("disable-rybbit")!==null){window.rybbit={pageview:()=>{},event:()=>{},error:()=>{},trackOutbound:()=>{},identify:()=>{},setTraits:()=>{},clearUserId:()=>{},getUserId:()=>null,startSessionReplay:()=>{},stopSessionReplay:()=>{},isSessionReplayActive:()=>!1};return}let e=await $(r);if(!e)return;let t=new k(e);e.enableWebVitals&&new E(s=>{t.trackWebVitals(s)}).initialize(),e.trackErrors&&(window.addEventListener("error",a=>{t.trackError(a.error||new Error(a.message),{filename:a.filename,lineno:a.lineno,colno:a.colno})}),window.addEventListener("unhandledrejection",a=>{let s=a.reason instanceof Error?a.reason:new Error(String(a.reason));t.trackError(s,{type:"unhandledrejection"})}));let i=()=>t.trackPageview(),n=e.debounceDuration>0?V(i,e.debounceDuration):i;function o(){if(document.addEventListener("click",function(a){let s=a.target;for(;s&&s!==document.documentElement;){if(s.hasAttribute("data-rybbit-event")){let c=s.getAttribute("data-rybbit-event");if(c){let d={};for(let l of s.attributes)if(l.name.startsWith("data-rybbit-prop-")){let y=l.name.replace("data-rybbit-prop-","");d[y]=l.value}t.trackEvent(c,d)}break}s=s.parentElement}if(e.trackOutbound){let c=a.target.closest("a");c?.href&&z(c.href)&&t.trackOutbound(c.href,c.innerText||c.textContent||"",c.target||"_self")}}),e.autoTrackSpa){let a=history.pushState,s=history.replaceState;history.pushState=function(...c){a.apply(this,c),n(),t.onPageChange()},history.replaceState=function(...c){s.apply(this,c),n(),t.onPageChange()},window.addEventListener("popstate",()=>{n(),t.onPageChange()}),window.addEventListener("hashchange",()=>{n(),t.onPageChange()})}}window.rybbit={pageview:()=>t.trackPageview(),event:(a,s={})=>t.trackEvent(a,s),error:(a,s={})=>t.trackError(a,s),trackOutbound:(a,s="",c="_self")=>t.trackOutbound(a,s,c),identify:(a,s)=>t.identify(a,s),setTraits:a=>t.setTraits(a),clearUserId:()=>t.clearUserId(),getUserId:()=>t.getUserId(),startSessionReplay:()=>t.startSessionReplay(),stopSessionReplay:()=>t.stopSessionReplay(),isSessionReplayActive:()=>t.isSessionReplayActive()},o(),window.addEventListener("beforeunload",()=>{t.cleanup()}),e.autoTrackPageview&&t.trackPageview()})();})();