@picked/analytics 0.0.0-main.250829070939-3cfd3f3 → 0.0.1-dev.1756875690387

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1,2 +1 @@
1
1
  "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../user-interaction-BTJxIHbv.cjs"),C="cart_add";function $(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(C,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const F=t.createTrackEvent(C,$),E="cart_remove";function V(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(E,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const b=t.createTrackEvent(E,V),p="wishlist_add";function l(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(p,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const N=t.createTrackEvent(p,l),u="checkout_complete";function Y(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(u,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const w=t.createTrackEvent(u,Y),D="lead_capture";function A(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatExperienceContextData(e),a=t.formatStepContextData(e);return t.createEvent(D,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),a&&t.createContext("step","1-0-0",a),r&&t.createContext("experience","1-0-0",r)],n)}const h=t.createTrackEvent(D,A),f="modal_close";function R(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatModalContextData(e),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(f,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("modal","1-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const M=t.createTrackEvent(f,R),m="modal_open";function g(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatModalContextData(e),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(m,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("modal","1-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const O=t.createTrackEvent(m,g),v="page_view";function I(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatExperienceContextData(e),a=t.formatStepContextData(e),o=t.formatProductListContextData(e);return t.createEvent(v,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),a?t.createContext("step","1-0-0",a):void 0,r?t.createContext("experience","1-0-0",r):void 0,o?t.createContext("product_list","2-0-0",o):void 0],n)}const G=t.createTrackEvent(v,I),d="product_view_details";function U(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(d,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const W=t.createTrackEvent(d,U),k="recommendation_present";function j(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatExperienceContextData(e),a=t.formatStepContextData(e),o=t.formatProductListContextData(e,!0);return t.createEvent(k,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",o),r&&t.createContext("experience","1-0-0",r),a&&t.createContext("step","1-0-0",a)],n)}const q=t.createTrackEvent(k,j),L="step_complete";function z(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatExperienceContextData(e),a=t.formatStepContextData(e,!0),o=t.formatResponseListContextData(e),x=t.formatFieldListContextData(e);return t.createEvent(L,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("step","1-0-0",a),x&&t.createContext("field_list","1-0-0",x),o&&t.createContext("response_list","1-0-0",o),r&&t.createContext("experience","1-0-0",r)],n)}const B=t.createTrackEvent(L,z),_="step_submit_error";function H(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatExceptionContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e,!0),x=t.formatFieldListContextData(e),i=t.formatResponseListContextData(e);return t.createEvent(_,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("exception","1-0-0",r),t.createContext("step","1-0-0",o),x&&t.createContext("field_list","1-0-0",x),i&&t.createContext("response_list","1-0-0",i),a&&t.createContext("experience","1-0-0",a)],n)}const J=t.createTrackEvent(_,H),S="search_results_list_view";function K(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(S,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),o?t.createContext("step","1-0-0",o):void 0,a?t.createContext("experience","1-0-0",a):void 0],n)}const Q=t.createTrackEvent(S,K),T="product_select";function X(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(T,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),a&&t.createContext("experience","1-0-0",a),o&&t.createContext("step","1-0-0",o)],n)}const Z=t.createTrackEvent(T,X),P="product_list_view";function y(e,n){const c=t.formatFeatureListContextData(e),s=t.formatSessionContextData(e),r=t.formatProductListContextData(e,!0),a=t.formatExperienceContextData(e),o=t.formatStepContextData(e);return t.createEvent(P,[t.createContext("feature_list","2-0-0",c),t.createContext("session","1-0-1",s),t.createContext("product_list","2-0-0",r),o?t.createContext("step","1-0-0",o):void 0,a?t.createContext("experience","1-0-0",a):void 0],n)}const tt=t.createTrackEvent(P,y);exports.bindGlobalEventListeners=t.bindGlobalEventListeners;exports.bindUserInteractionListeners=t.bindUserInteractionListeners;exports.createTracker=t.createTracker;exports.trackAppCloseEvent=t.trackAppCloseEvent;exports.trackAppLoadEvent=t.trackAppLoadEvent;exports.trackAppOpenEvent=t.trackAppOpenEvent;exports.trackExperienceLoadEvent=t.trackExperienceLoadEvent;exports.trackFieldValidationErrorEvent=t.trackFieldValidationErrorEvent;exports.trackFormSubmitErrorEvent=t.trackFormSubmitErrorEvent;exports.trackFormSubmitEvent=t.trackFormSubmitEvent;exports.trackFormSubmitSuccessEvent=t.trackFormSubmitSuccessEvent;exports.trackStepEnterEvent=t.trackStepEnterEvent;exports.trackStepSubmitEvent=t.trackStepSubmitEvent;exports.trackStepSubmitSuccessEvent=t.trackStepSubmitSuccessEvent;exports.trackCartAddEvent=F;exports.trackCartRemoveEvent=b;exports.trackCheckoutCompleteEvent=w;exports.trackLeadCaptureEvent=h;exports.trackModalCloseEvent=M;exports.trackModalOpenEvent=O;exports.trackPageViewEvent=G;exports.trackProductListViewEvent=tt;exports.trackProductSelectEvent=Z;exports.trackProductViewDetailsEvent=W;exports.trackRecommendationPresentEvent=q;exports.trackSearchResultsListViewEvent=Q;exports.trackStepComplete=B;exports.trackStepSubmitErrorEvent=J;exports.trackWishlistAddEvent=N;
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +1 @@
1
1
  "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("@picked/client"),g=require("effector"),r=require("../../../user-interaction-BTJxIHbv.cjs");require("@snowplow/browser-tracker");function y(o){return o.isResolved}const F=({trackerOptions:o,sessionId:l,enableDocumentListeners:d=!1})=>({name:"analytics",setup:s=>{if(!_.supportsWindow())return;const{organizationId:a,projectId:u}=s,S=()=>s.features.listStore.getState().flatMap(e=>{if(!y(e))return[];const{id:c,key:i,name:p}=e,{bucket:f}=e.getBucket();return[{name:p,key:i,feature:c,bucket:f}]}),v=t=>{if(t.experience){const{experience:e}=t;return{id:e.id,type:e.configStore.getState().type,title:e.configStore.getState().name}}if(t.experienceInstance){const{experienceInstance:e}=t;return{id:e.experienceId,type:e.configStore.getState().type,title:e.configStore.getState().name}}};r.createTracker({organizationId:a,projectId:u,...o});const m=t=>{const{experience:e}=t||{},c=S();return function(){return{organizationId:a,projectId:u,sessionId:l,features:c,...e&&{experience:{id:e.experienceId,type:e.configStore.getState().type,title:e.configStore.getState().name}}}}};if(d){const t=m();r.bindGlobalEventListeners(t)}s.experienceInstances.listStore.watch(t=>{t.forEach(e=>{const c=e.target;if(c){const i=m({experience:e});r.bindUserInteractionListeners(i,c.shadowRoot)}})});function n(t){return g.attach({source:{fields:s.fields.listStore,responses:s.responses.listStore},effect:async({fields:e,responses:c},i)=>{const{step:p,form:f,exception:x,version:E}=i,b=S(),k={organizationId:a,projectId:u,sessionId:l,experience:v(i),step:p,form:f,exception:x,version:E,fields:e,responses:c,features:b};return t(k)}})}g.split({source:s.eventBus,match:t=>t.type,cases:{initialized:n(r.trackAppLoadEvent),experience_open:n(r.trackAppOpenEvent),experience_close:n(r.trackAppCloseEvent),field_validation_error:n(r.trackFieldValidationErrorEvent),experience_initialized:n(r.trackExperienceLoadEvent),step_enter:n(r.trackStepEnterEvent),step_submit:n(r.trackStepSubmitEvent),step_submit_success:n(r.trackStepSubmitSuccessEvent),form_submit:n(r.trackFormSubmitEvent),form_submit_success:n(r.trackFormSubmitSuccessEvent),form_submit_error:n(r.trackFormSubmitErrorEvent)}})}});exports.analyticsPlugin=F;
2
- //# sourceMappingURL=index.js.map
package/dist/esm/index.js CHANGED
@@ -259,4 +259,3 @@ export {
259
259
  Yt as trackStepSubmitSuccessEvent,
260
260
  tt as trackWishlistAddEvent
261
261
  };
262
- //# sourceMappingURL=index.js.map
@@ -122,4 +122,3 @@ const V = ({
122
122
  export {
123
123
  V as analyticsPlugin
124
124
  };
125
- //# sourceMappingURL=index.js.map
@@ -1,2 +1 @@
1
1
  "use strict";const h=require("@snowplow/browser-tracker"),Z=require("@snowplow/browser-plugin-button-click-tracking"),Nt=require("@snowplow/browser-plugin-performance-navigation-timing"),tt=require("@snowplow/browser-plugin-error-tracking"),Pt=require("@snowplow/browser-plugin-web-vitals");function et(t,e){return`iglu:dev.pckd/${t}/jsonschema/${e}`}function L(t,...e){}function $(t,...e){}function l(t,e,o={}){return{event:{schema:et("event","1-0-0"),data:{type:t,meta:o}},context:e.filter(a=>a!==void 0)}}function n(t,e,o){return{schema:et(t,e),data:o}}function u(t,e){return(o,a)=>{const s=e(o,a);h.trackSelfDescribingEvent(s)}}function _(t,e,o={passive:!0}){const a=new WeakMap;return(s,i)=>{let r=a.get(s);if(r||(r=new Set,a.set(s,r)),r.has(t))return;function c(E){const C=i();e({event:E,analyticsContext:C})}s.addEventListener(t,c,o),r.add(t)}}function St(t,e){const o=new Set;return a=>{if(o.has(t))return;function s(i){const r=a();e({event:i,analyticsContext:r})}document.addEventListener(t,s,{passive:!0}),o.add(t)}}function y(t,e){const o=new Set;return a=>{if(o.has(t))return;function s(i){const r=a();e({event:i,analyticsContext:r})}window.addEventListener(t,s,{passive:!0}),o.add(t)}}function f(t){var o;return{items:((o=t.features)==null?void 0:o.map(({feature:a,name:s,key:i,bucket:r})=>({ab_feature:a,ab_name:s,ab_key:i,ab_bucket:r})))||[]}}const D="unknown";function d(t){const e=Bt();return{id:t.sessionId||null,gaid:e||null}}function P(t){if(t.fields)return{items:t.fields.map(({id:e,type:o,label:a,options:s})=>({id:e,type:o,label:a,options:s}))}}function j(t){if(t.responses)return{items:t.responses.map(({fieldId:e,value:o})=>({field_id:e,values:Array.isArray(o)?o.map(a=>({value:a})):[{value:o}]}))}}function x(t,e=!1){const{step:o}=t;if(o)return{id:o.id,title:o.label};if(e)return $('"step" is required for this event',t),{id:D,title:D}}function Vt(t,e=!1){const{productList:o}=t;if(o)return{items:o.map(a=>({item_id:a.itemId,item_name:a.itemName,affiliation:a.affiliation,coupon:a.coupon,currency:a.currency,creative_name:a.creativeName,creative_slot:a.creativeSlot,discount:w(a.discount),index:w(a.index),item_brand:a.itemBrand,item_category:a.itemCategory,item_category2:a.itemCategory2,item_category3:a.itemCategory3,item_category4:a.itemCategory4,item_category5:a.itemCategory5,item_list_id:a.itemListId,item_list_name:a.itemListName,item_variant:a.itemVariant,location_id:a.locationId,price:w(a.price),promotion_id:a.promotionId,promotion_name:a.promotionName,quantity:w(a.quantity)}))};if(e)return $('"productList" is required for this event',t),{}}function p(t,e=!1){const{experience:o}=t;if(o)return{id:o.id,type:o.type,title:o.title};if(e)return $('"experience" is required for this event',t),{id:D,type:D,title:D}}function G(t,e=!1){const{exception:o}=t;if(o)return typeof o=="string"?{reason:o}:{reason:o.systemMessage};if(e)return $('"exception" is required for this event',t),{reason:D}}function S(t){const{form:e}=t;return e?{id:e.id,title:e.title}:($('"form" is required for this event',t),{id:D,title:D})}function Yt(t){const{modal:e}=t;return e?{id:e.id,title:e.title}:($('"modal" is required for this event',t),{id:D,title:D})}function V(t,e=300){let o;return function(...a){clearTimeout(o),o=setTimeout(()=>t.apply(this,a),e)}}function w(t){if(typeof t=="number")return t;if(typeof t!="string")return;const e=parseFloat(t);if(!isNaN(e))return e}function Bt(){const t="_ga=",e=document.cookie?document.cookie.split(";"):[];for(const o of e){const a=o.trim();if(a.startsWith(t)){const i=a.substring(t.length).split(".");if(i.length>2)return i.slice(2).join(".")}}}function Ht(t){const e=[];return t.trackErrors&&(L(),e.push(tt.ErrorTrackingPlugin())),t.trackVitals&&(L(),e.push(Pt.WebVitalsPlugin())),t.trackPerformance&&(L(),e.push(Nt.PerformanceNavigationTimingPlugin())),(t.trackButtonClickAllowList||t.trackButtonClickFilter)&&e.push(Z.ButtonClickTrackingPlugin()),e}function qt(t){t.trackActivity&&!t.trackActivityCallback&&(L(),h.enableActivityTracking({minimumVisitLength:30,heartbeatDelay:10})),t.trackActivity&&t.trackActivityCallback&&(L(),h.enableActivityTrackingCallback({minimumVisitLength:30,heartbeatDelay:10,callback:t.trackActivityCallback})),(t.trackButtonClickAllowList||t.trackButtonClickFilter)&&(L(),Z.enableButtonClickTracking({filter:t.trackButtonClickAllowList?{allowlist:t.trackButtonClickAllowList}:t.trackButtonClickFilter})),t.trackErrors&&(L(),tt.enableErrorTracking())}function Ft({organizationId:t,projectId:e,cvlyX:o,collectorUrl:a="evnts.pckd.dev",appId:s="picked-analytics",trackVitals:i=!0,trackPerformance:r=!0,trackWebPage:c=!0,trackSessions:E=!0,trackBrowser:C=!0,trackActivity:Lt=!0,trackErrors:gt=!0,trackActivityCallback:$t,trackButtonClickAllowList:yt}){L();const U={trackVitals:i,trackErrors:gt,trackActivity:Lt,trackPerformance:r,trackActivityCallback:$t,trackButtonClickAllowList:yt},ht={appId:s,platform:"web",contexts:{webPage:c,session:E,browser:C||!1},plugins:Ht(U)},wt=h.newTracker(s,a,ht);return At({organizationId:t,projectId:e,cvlyX:o}),qt(U),wt}function At({organizationId:t,projectId:e,cvlyX:o}){if(!t||!e)throw new Error("bindGlobalContext: Both organizationId and projectId are required");const a=[];a.push(n("app","1-0-0",{organization_id:t,project_id:e})),o&&a.push(n("cvly_x","1-0-1",{vercel_deployment_id:o.vercelDeploymentId,vercel_env:o.vercelEnv,vercel_url:o.vercelUrl})),h.addGlobalContexts(a)}const nt="app_close";function Rt(t,e){const o=f(t),a=d(t),s=p(t),i=x(t);return l(nt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Wt=u(nt,Rt),ot="app_load";function Ot(t,e){const o=f(t),a=d(t),s=p(t),i=x(t);return l(ot,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Mt=u(ot,Ot),st="app_open";function jt(t,e){const o=f(t),a=d(t),s=p(t),i=x(t);return l(st,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Gt=u(st,jt),at="experience_load";function Ut(t,e){const o=f(t),a=d(t),s=p(t,!0),i=x(t);return l(at,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("experience","1-0-0",s),i?n("step","1-0-0",i):void 0],e)}const zt=u(at,Ut),it="field_validation_error";function It(t,e){const o=f(t),a=d(t),s=S(t),i=G(t,!0),r=p(t),c=x(t);return l(it,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("exception","1-0-0",i),n("form","1-0-0",s),r&&n("experience","1-0-0",r),c&&n("step","1-0-0",c)],e)}const Kt=u(it,It),rt="form_submit";function Xt(t,e){const o=f(t),a=d(t),s=S(t),i=p(t),r=x(t);return l(rt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("form","1-0-0",s),i&&n("experience","1-0-0",i),r&&n("step","1-0-0",r)],e)}const Jt=u(rt,Xt),ct="form_submit_error";function Qt(t,e){const o=f(t),a=d(t),s=S(t),i=G(t,!0),r=p(t),c=x(t);return l(ct,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("form","1-0-0",s),n("exception","1-0-0",i),r&&n("experience","1-0-0",r),c&&n("step","1-0-0",c)],e)}const Zt=u(ct,Qt),lt="form_submit_success";function te(t,e){const o=f(t),a=d(t),s=S(t),i=p(t),r=x(t);return l(lt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("form","1-0-0",s),i&&n("experience","1-0-0",i),r&&n("step","1-0-0",r)],e)}const ee=u(lt,te),ut="step_enter";function ne(t,e){const o=f(t),a=d(t),s=p(t),i=x(t,!0),r=P(t);return l(ut,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("step","1-0-0",i),r&&n("field_list","1-0-0",r),s&&n("experience","1-0-0",s)],e)}const oe=u(ut,ne),ft="step_submit";function se(t,e){const o=f(t),a=d(t),s=p(t),i=x(t,!0),r=j(t),c=P(t);return l(ft,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("step","1-0-0",i),c&&n("field_list","1-0-0",c),r&&n("response_list","1-0-0",r),s&&n("experience","1-0-0",s)],e)}const ae=u(ft,se),dt="step_submit_success";function ie(t,e){const o=f(t),a=d(t),s=p(t),i=x(t,!0),r=P(t),c=j(t);return l(dt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("step","1-0-0",i),r&&n("field_list","1-0-0",r),c&&n("response_list","1-0-0",c),s&&n("experience","1-0-0",s)],e)}const re=u(dt,ie);function b(t){return t instanceof Element}function k(t){const e=["a","button","input","select","textarea","details","summary","label","form","fieldset","legend","optgroup","option","output","datalist","dialog","menu","menuitem","iframe","audio","video","embed","object","canvas"].join(", ");return b(t)?t.matches(e)?t:t.closest(e):null}function v(t){if(t instanceof HTMLSelectElement){const e=t.selectedIndex||0,o=t.options[e];return(o==null?void 0:o.text)??""}return"innerText"in t&&typeof t.innerText=="string"?t.innerText:t.textContent}function T(t){const e=t.getAttribute("aria-label");if(e)return e;const o=t.getAttribute("aria-labelledby");if(o){const s=document.getElementById(o);if(s){const i=v(s);if(i)return i}}if("id"in t&&t.id){const s=document.querySelector(`label[for="${t.id}"]`);if(s){const i=v(s);if(i)return i}}let a=t.parentElement;for(;a;){if(a.tagName.toLowerCase()==="label"){const s=v(a);if(s)return s}a=a.parentElement}if(t instanceof HTMLInputElement&&"labels"in t&&t.labels){const s=Array.from(t.labels).map(i=>v(i)).filter(Boolean).join(" ");if(s)return s}return"placeholder"in t&&typeof t.placeholder=="string"?t.placeholder:null}const ce=255;function m(t){return t?t.slice(0,ce):null}const B="rapid_scroll";function le(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r)){const C={node_type:"unknown"};return l(B,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",C)],e)}const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(B,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",E)],e)}const ue=u(B,le),fe=100,de=100,xe=300;let z=0,I=0;const pe=V((t,e)=>{ue(t,e)},xe);function Ee(t,e){const o=t.event.target||document.documentElement;if(!(o instanceof HTMLElement))return;const a=o.scrollTop,s=Date.now()-I;Math.abs(a-z)>fe&&s<de&&pe(t.event,e),z=a,I=Date.now()}const me=_("scroll",Ee,!0),H="rapid_click";function Ce(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r)){const C={node_type:"unknown"};return l(H,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",C),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(H,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",E),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const ve=u(H,Ce);let N=0,K=0;const De=3,_e=500;function be(t,e){const o=new Date().getTime();o-K<_e?N++:N=1,K=o,N>=De&&(ve(t,e),N=0)}const ke=_("click",be),q="right_click";function Te(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r)){const C={node_type:"unknown"};return l(q,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",C),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0])}const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(q,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",E),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Le=u(q,Te);function ge(t,e){Le(t,e)}const $e=_("contextmenu",ge),xt="mouse_shake";function ye(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(xt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const he=u(xt,ye),we=5,Ne=500,Pe=500;let X={x:0},g=[],J=0;const Se=V((t,e)=>{he(t,e)},Ne);function Ve(t,e){const o=Date.now(),a=t.event.clientX-X.x,s=Math.sign(a);o-J>Pe&&(g=[]),s!==0&&(g.length===0||g[g.length-1]!==s)&&g.push(s),X={x:t.event.clientX,y:t.event.clientY},g.length>=we&&(Se(t,e),g=[]),J=o}const Ye=_("mousemove",Ve),pt="page_visible";function Be(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(pt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const He=u(pt,Be),Et="page_hidden";function qe(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(Et,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Fe=u(Et,qe);function Ae(t,e){if(document.visibilityState==="visible"){He(t,e);return}Fe(t,e)}const Re=St("visibilitychange",Ae),F="backspace";function We(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r)){const C={node_type:"unknown"};return l(F,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",C),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(F,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",E),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Oe=u(F,We);function Me(t,e){t.event.key==="Backspace"&&Oe(t,e)}const je=_("keydown",Me),mt="page_hide";function Ge(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(mt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Ue=u(mt,Ge);function ze(t,e){Ue(t,e)}const Ie=y("pagehide",ze),Ct="page_show";function Ke(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(Ct,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Xe=u(Ct,Ke);function Je(t,e){Xe(t,e)}const Qe=y("pageshow",Je),vt="offline";function Ze(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(vt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const tn=u(vt,Ze);function en(t,e){tn(t,e)}const nn=y("offline",en),A="scroll";function on(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r))return l(A,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e);const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(A,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",E)],e)}const sn=u(A,on),an=V((t,e)=>{sn(t,e)},500),rn=_("scroll",an,!0),Dt="online";function cn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(Dt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const ln=u(Dt,cn);function un(t,e){ln(t,e)}const fn=y("online",un),_t="resize";function dn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(_t,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const Q=u(_t,dn);let Y=0;const xn=V((t,e)=>{const o=window.innerWidth;o!==Y?(Q(t,e),Y=o):"ontouchstart"in window||Q(t,e),Y=o},300),pn=y("resize",xn),bt="unload";function En(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext);return l(bt,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const mn=u(bt,En);function Cn(t,e){mn(t,e)}const vn=y("unload",Cn),R="click";function Dn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r)){const C={node_type:"unknown"};return l(R,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",C),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(R,[n("feature_list","2-0-0",o),n("session","1-0-1",a),n("element","1-0-0",E),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e)}const _n=u(R,Dn);function bn(t,e){_n(t,e)}const kn=_("click",bn),W="paste";function Tn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r))return l(W,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e);const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(W,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",E)],e)}const Ln=u(W,Tn);function gn(t,e){Ln(t,e)}const $n=_("paste",gn),O="copy";function yn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r))return l(O,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e);const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(O,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",E)],e)}const hn=u(O,yn);function wn(t,e){hn(t,e)}const Nn=_("copy",wn),M="drag";function Pn(t,e){const o=f(t.analyticsContext),a=d(t.analyticsContext),s=p(t.analyticsContext),i=x(t.analyticsContext),r=t.event.target||document.activeElement||t.event.currentTarget;if(!b(r))return l(M,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0],e);const c=k(r)||r,E={id:c.id||null,node_type:c.nodeName.toLowerCase(),label:m(T(c)),text:m(v(c))};return l(M,[n("feature_list","2-0-0",o),n("session","1-0-1",a),i?n("step","1-0-0",i):void 0,s?n("experience","1-0-0",s):void 0,n("element","1-0-0",E)],e)}const Sn=u(M,Pn);function kt(t,e){const o=t.event.currentTarget;if(!o||!(o instanceof HTMLElement))return;function a(s){kt({event:s,analyticsContext:t.analyticsContext})}o.removeEventListener("drag",a),o.addEventListener("dragend",()=>Tt(o,()=>t.analyticsContext)),Sn(t,e)}const Tt=_("drag",kt);function Vn(t,e){e&&(kn(e,t),ke(e,t),$e(e,t),Nn(e,t),$n(e,t),Tt(e,t),je(e,t),rn(e,t),me(e,t),Ye(e,t))}function Yn(t){Re(t),Ie(t),Qe(t),nn(t),fn(t),pn(t),vn(t)}exports.bindGlobalEventListeners=Yn;exports.bindUserInteractionListeners=Vn;exports.createContext=n;exports.createEvent=l;exports.createTrackEvent=u;exports.createTracker=Ft;exports.formatExceptionContextData=G;exports.formatExperienceContextData=p;exports.formatFeatureListContextData=f;exports.formatFieldListContextData=P;exports.formatModalContextData=Yt;exports.formatProductListContextData=Vt;exports.formatResponseListContextData=j;exports.formatSessionContextData=d;exports.formatStepContextData=x;exports.trackAppCloseEvent=Wt;exports.trackAppLoadEvent=Mt;exports.trackAppOpenEvent=Gt;exports.trackExperienceLoadEvent=zt;exports.trackFieldValidationErrorEvent=Kt;exports.trackFormSubmitErrorEvent=Zt;exports.trackFormSubmitEvent=Jt;exports.trackFormSubmitSuccessEvent=ee;exports.trackStepEnterEvent=oe;exports.trackStepSubmitEvent=ae;exports.trackStepSubmitSuccessEvent=re;
2
- //# sourceMappingURL=user-interaction-BTJxIHbv.cjs.map
@@ -1129,4 +1129,3 @@ export {
1129
1129
  jn as y,
1130
1130
  On as z
1131
1131
  };
1132
- //# sourceMappingURL=user-interaction-CZQT4H3Z.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@picked/analytics",
3
3
  "description": "Picked Analytics",
4
- "version": "0.0.0-main.250829070939-3cfd3f3",
4
+ "version": "0.0.1-dev.1756875690387",
5
5
  "dependencies": {
6
6
  "@snowplow/browser-plugin-button-click-tracking": "^4.6.5",
7
7
  "@snowplow/browser-plugin-error-tracking": "^4.6.5",
@@ -48,7 +48,7 @@
48
48
  "main": "./dist/cjs/index.js",
49
49
  "module": "./dist/esm/index.js",
50
50
  "peerDependencies": {
51
- "@picked/client": "0.0.0-main.250829070939-3cfd3f3",
51
+ "@picked/client": "0.0.1-dev.1756875690387",
52
52
  "effector": "^23.3.0"
53
53
  },
54
54
  "private": false,
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events/cart_add.ts","../../src/events/cart_remove.ts","../../src/events/wishlist_add.ts","../../src/events/checkout_complete.ts","../../src/events/lead_capture.ts","../../src/events/modal_close.ts","../../src/events/modal_open.ts","../../src/events/page_view.ts","../../src/events/product_view_details.ts","../../src/events/recommendation_present.ts","../../src/events/step_complete.ts","../../src/events/step_submit_error.ts","../../src/events/search_results_list_view.ts","../../src/events/product_select.ts","../../src/events/product_list_view.ts"],"sourcesContent":["import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'cart_add'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCartAddEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'cart_remove'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCartRemoveEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'wishlist_add'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackWishlistAddEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'checkout_complete'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCheckoutCompleteEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'lead_capture'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackLeadCaptureEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatModalContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ModalContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'modal_close'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ModalContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const modalContextData = formatModalContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('modal', '1-0-0', modalContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackModalCloseEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatModalContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ModalContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'modal_open'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ModalContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const modalContextData = formatModalContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('modal', '1-0-0', modalContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackModalOpenEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'page_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ProductListContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n productListContextData\n ? createContext('product_list', '2-0-0', productListContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackPageViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_view_details'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackProductViewDetailsEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'recommendation_present'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackRecommendationPresentEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_complete'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepComplete = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExceptionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'search_results_list_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackSearchResultsListViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_select'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackProductSelectEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_list_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackProductListViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n"],"names":["EVENT_TYPE","formatEvent","analyticsContext","eventMeta","featureListContextData","formatFeatureListContextData","sessionContextData","formatSessionContextData","productListContextData","formatProductListContextData","experienceContextData","formatExperienceContextData","stepContextData","formatStepContextData","createEvent","createContext","trackCartAddEvent","createTrackEvent","trackCartRemoveEvent","trackWishlistAddEvent","trackCheckoutCompleteEvent","trackLeadCaptureEvent","modalContextData","formatModalContextData","trackModalCloseEvent","trackModalOpenEvent","trackPageViewEvent","trackProductViewDetailsEvent","trackRecommendationPresentEvent","responseListContextData","formatResponseListContextData","fieldListContextData","formatFieldListContextData","trackStepComplete","exceptionContextData","formatExceptionContextData","trackStepSubmitErrorEvent","trackSearchResultsListViewEvent","trackProductSelectEvent","trackProductListViewEvent"],"mappings":"oIAqBMA,EAAa,WAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAa,EAAoBC,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BnED,EAAa,cAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAe,EAAuBD,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BtED,EAAa,eAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAgB,EAAwBF,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BvED,EAAa,oBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAiB,EAA6BH,EAAAA,iBAAiBjB,EAAYC,CAAW,EC9B5ED,EAAa,eAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDM,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,EACjEF,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,CACrF,EACAP,CACF,CACF,CAEa,MAAAkB,EAAwBJ,EAAAA,iBAAiBjB,EAAYC,CAAW,ECxBvED,EAAa,cAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DoB,EAAmBC,yBAAuBrB,CAAgB,EAC1DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,QAAS,QAASO,CAAgB,EAChDZ,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAqB,EAAuBP,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BtED,EAAa,aAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DoB,EAAmBC,yBAAuBrB,CAAgB,EAC1DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,QAAS,QAASO,CAAgB,EAChDZ,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAsB,EAAsBR,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BrED,EAAa,YAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EACxDM,EAAyBC,+BAA6BP,CAAgB,EAErE,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDM,EAAkBG,EAAAA,cAAc,OAAQ,QAASH,CAAe,EAAI,OACpEF,EACIK,EAAAA,cAAc,aAAc,QAASL,CAAqB,EAC1D,OACJF,EACIO,EAAAA,cAAc,eAAgB,QAASP,CAAsB,EAC7D,MACN,EACAL,CACF,CACF,CAEa,MAAAuB,EAAqBT,EAAAA,iBAAiBjB,EAAYC,CAAW,EChCpED,EAAa,uBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAwB,EAA+BV,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5B9ED,EAAa,yBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EACxDM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAE3E,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAyB,EAAkCX,EAAAA,iBAAiBjB,EAAYC,CAAW,EC1BjFD,EAAa,gBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,EAAAA,sBAAsBX,EAAkB,EAAI,EAC9D2B,EAA0BC,gCAA8B5B,CAAgB,EACxE6B,EAAuBC,6BAA2B9B,CAAgB,EAEjE,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,OAAQ,QAASH,CAAe,EAC9CmB,GAAwBhB,EAAA,cAAc,aAAc,QAASgB,CAAoB,EACjFF,GAA2Bd,EAAA,cAAc,gBAAiB,QAASc,CAAuB,EAC1FnB,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,CACrF,EACAP,CACF,CACF,CAEa,MAAA8B,EAAoBhB,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BnED,EAAa,oBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DgC,EAAuBC,EAAAA,2BAA2BjC,EAAkB,EAAI,EACxEQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,EAAAA,sBAAsBX,EAAkB,EAAI,EAC9D6B,EAAuBC,6BAA2B9B,CAAgB,EAClE2B,EAA0BC,gCAA8B5B,CAAgB,EAEvE,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,YAAa,QAASmB,CAAoB,EACxDnB,gBAAc,OAAQ,QAASH,CAAe,EAC9CmB,GAAwBhB,EAAA,cAAc,aAAc,QAASgB,CAAoB,EACjFF,GAA2Bd,EAAA,cAAc,gBAAiB,QAASc,CAAuB,EAC1FnB,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,CACrF,EACAP,CACF,CACF,CAEa,MAAAiC,EAA4BnB,EAAAA,iBAAiBjB,EAAYC,CAAW,ECpC3ED,EAAa,2BAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DI,EAAkBG,EAAAA,cAAc,OAAQ,QAASH,CAAe,EAAI,OACpEF,EACIK,EAAAA,cAAc,aAAc,QAASL,CAAqB,EAC1D,MACN,EACAP,CACF,CACF,CAEa,MAAAkC,EAAkCpB,EAAAA,iBAAiBjB,EAAYC,CAAW,EC9BjFD,EAAa,iBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DE,GAAyBK,EAAA,cAAc,aAAc,QAASL,CAAqB,EACnFE,GAAmBG,EAAA,cAAc,OAAQ,QAASH,CAAe,CACnE,EACAT,CACF,CACF,CAEa,MAAAmC,EAA0BrB,EAAAA,iBAAiBjB,EAAYC,CAAW,EC5BzED,EAAa,oBAQnB,SAASC,EAAYC,EAAoCC,EAAiC,CAClF,MAAAC,EAAyBC,+BAA6BH,CAAgB,EACtEI,EAAqBC,2BAAyBL,CAAgB,EAC9DM,EAAyBC,EAAAA,6BAA6BP,EAAkB,EAAI,EAC5EQ,EAAwBC,8BAA4BT,CAAgB,EACpEU,EAAkBC,wBAAsBX,CAAgB,EAEvD,OAAAY,EAAA,YACLd,EACA,CACEe,gBAAc,eAAgB,QAASX,CAAsB,EAC7DW,gBAAc,UAAW,QAAST,CAAkB,EACpDS,gBAAc,eAAgB,QAASP,CAAsB,EAC7DI,EAAkBG,EAAAA,cAAc,OAAQ,QAASH,CAAe,EAAI,OACpEF,EACIK,EAAAA,cAAc,aAAc,QAASL,CAAqB,EAC1D,MACN,EACAP,CACF,CACF,CAEa,MAAAoC,GAA4BtB,EAAAA,iBAAiBjB,EAAYC,CAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/plugins/analytics/plugin.ts"],"sourcesContent":["import type {\n EventBusPayload,\n ExperienceInstance,\n FeatureBucket,\n Picked,\n ResolvedFeatureBucket,\n} from '@picked/client'\nimport { supportsWindow } from '@picked/client'\nimport { attach, split } from 'effector'\nimport {\n bindGlobalEventListeners,\n bindUserInteractionListeners,\n createTracker,\n trackAppCloseEvent,\n trackAppLoadEvent,\n trackAppOpenEvent,\n trackExperienceLoadEvent,\n trackFieldValidationErrorEvent,\n trackFormSubmitErrorEvent,\n trackFormSubmitEvent,\n trackFormSubmitSuccessEvent,\n trackStepEnterEvent,\n trackStepSubmitEvent,\n trackStepSubmitSuccessEvent,\n} from '../../index'\nimport type { EventSchema } from '../../schemas'\nimport type { AnalyticsContext, CreateTrackerOptions } from '../../types'\n\ninterface AnalyticsPluginOptions {\n trackerOptions?: CreateTrackerOptions\n sessionId?: string\n enableDocumentListeners?: boolean\n}\n\nfunction isFeatureResolved(feature: FeatureBucket): feature is ResolvedFeatureBucket {\n return feature.isResolved\n}\n\nexport const analyticsPlugin = ({\n trackerOptions,\n sessionId,\n enableDocumentListeners = false,\n}: AnalyticsPluginOptions): { name: string; setup: (client: Picked) => void } => {\n return {\n name: 'analytics',\n setup: (client) => {\n if (!supportsWindow()) {\n // Do not initialize the analytics plugin in a non-browser environment\n return\n }\n\n const { organizationId, projectId } = client\n\n const getFeatureList = () => {\n const features = client.features.listStore.getState()\n\n return features.flatMap((feature) => {\n if (!isFeatureResolved(feature)) return []\n\n const { id, key, name } = feature\n const { bucket } = feature.getBucket()\n return [\n {\n name,\n key,\n feature: id,\n bucket,\n },\n ]\n })\n }\n\n const getExperience = (payload: EventBusPayload) => {\n if (payload.experience) {\n const { experience } = payload\n return {\n id: experience.id,\n type: experience.configStore.getState().type,\n title: experience.configStore.getState().name,\n }\n }\n\n if (payload.experienceInstance) {\n const { experienceInstance } = payload\n return {\n id: experienceInstance.experienceId,\n type: experienceInstance.configStore.getState().type,\n title: experienceInstance.configStore.getState().name,\n }\n }\n }\n\n createTracker({\n organizationId,\n projectId,\n ...trackerOptions,\n })\n\n const createContextFactory = (args?: { experience?: ExperienceInstance }) => {\n const { experience } = args || {}\n\n const features = getFeatureList()\n\n return function createContext() {\n return {\n organizationId,\n projectId,\n sessionId,\n features,\n ...(experience && {\n experience: {\n id: experience.experienceId,\n type: experience.configStore.getState().type,\n title: experience.configStore.getState().name,\n },\n }),\n }\n }\n }\n\n // Window/Document event tracking\n if (enableDocumentListeners) {\n const createGlobalAnalyticsContext = createContextFactory()\n // The individual listener functions will be removed before binding again, so they don't get attached multiple times\n bindGlobalEventListeners(createGlobalAnalyticsContext)\n }\n\n // User interaction tracking\n client.experienceInstances.listStore.watch((instances) => {\n instances.forEach((experienceInstance) => {\n const eventsContainer = experienceInstance.target\n if (eventsContainer) {\n const createAnalyticsContext = createContextFactory({ experience: experienceInstance })\n // The individual listener functions will be removed before binding again, so they don't get attached multiple times\n bindUserInteractionListeners(createAnalyticsContext, eventsContainer.shadowRoot)\n }\n })\n })\n\n function createTrackingEffect(\n trackFn: (\n analyticsContext: AnalyticsContext,\n meta?: EventSchema['meta'],\n ) => void | Promise<void>,\n ) {\n return attach({\n source: { fields: client.fields.listStore, responses: client.responses.listStore },\n effect: async ({ fields, responses }, payload: EventBusPayload) => {\n const { step, form, exception, version } = payload\n\n const featureList = getFeatureList()\n\n const applicationEvent = {\n organizationId,\n projectId,\n sessionId,\n experience: getExperience(payload),\n step,\n form,\n exception,\n version,\n fields,\n responses,\n features: featureList,\n }\n\n return trackFn(applicationEvent)\n },\n })\n }\n\n split({\n source: client.eventBus,\n match: (event) => event.type,\n cases: {\n initialized: createTrackingEffect(trackAppLoadEvent),\n experience_open: createTrackingEffect(trackAppOpenEvent),\n experience_close: createTrackingEffect(trackAppCloseEvent),\n field_validation_error: createTrackingEffect(trackFieldValidationErrorEvent),\n experience_initialized: createTrackingEffect(trackExperienceLoadEvent),\n step_enter: createTrackingEffect(trackStepEnterEvent),\n step_submit: createTrackingEffect(trackStepSubmitEvent),\n step_submit_success: createTrackingEffect(trackStepSubmitSuccessEvent),\n form_submit: createTrackingEffect(trackFormSubmitEvent),\n form_submit_success: createTrackingEffect(trackFormSubmitSuccessEvent),\n form_submit_error: createTrackingEffect(trackFormSubmitErrorEvent),\n },\n })\n },\n }\n}\n"],"names":["isFeatureResolved","feature","analyticsPlugin","trackerOptions","sessionId","enableDocumentListeners","client","supportsWindow","organizationId","projectId","getFeatureList","id","key","name","bucket","getExperience","payload","experience","experienceInstance","createTracker","createContextFactory","args","features","createGlobalAnalyticsContext","bindGlobalEventListeners","instances","eventsContainer","createAnalyticsContext","bindUserInteractionListeners","createTrackingEffect","trackFn","attach","fields","responses","step","form","exception","version","featureList","applicationEvent","split","event","trackAppLoadEvent","trackAppOpenEvent","trackAppCloseEvent","trackFieldValidationErrorEvent","trackExperienceLoadEvent","trackStepEnterEvent","trackStepSubmitEvent","trackStepSubmitSuccessEvent","trackFormSubmitEvent","trackFormSubmitSuccessEvent","trackFormSubmitErrorEvent"],"mappings":"iOAkCA,SAASA,EAAkBC,EAA0D,CACnF,OAAOA,EAAQ,UACjB,CAEO,MAAMC,EAAkB,CAAC,CAC9B,eAAAC,EACA,UAAAC,EACA,wBAAAC,EAA0B,EAC5B,KACS,CACL,KAAM,YACN,MAAQC,GAAW,CACb,GAAA,CAACC,mBAEH,OAGI,KAAA,CAAE,eAAAC,EAAgB,UAAAC,CAAA,EAAcH,EAEhCI,EAAiB,IACJJ,EAAO,SAAS,UAAU,SAAS,EAEpC,QAASL,GAAY,CACnC,GAAI,CAACD,EAAkBC,CAAO,QAAU,CAAC,EAEzC,KAAM,CAAE,GAAAU,EAAI,IAAAC,EAAK,KAAAC,CAAS,EAAAZ,EACpB,CAAE,OAAAa,CAAA,EAAWb,EAAQ,UAAU,EAC9B,MAAA,CACL,CACE,KAAAY,EACA,IAAAD,EACA,QAASD,EACT,OAAAG,CAAA,CAEJ,CAAA,CACD,EAGGC,EAAiBC,GAA6B,CAClD,GAAIA,EAAQ,WAAY,CAChB,KAAA,CAAE,WAAAC,GAAeD,EAChB,MAAA,CACL,GAAIC,EAAW,GACf,KAAMA,EAAW,YAAY,SAAW,EAAA,KACxC,MAAOA,EAAW,YAAY,WAAW,IAC3C,CAAA,CAGF,GAAID,EAAQ,mBAAoB,CACxB,KAAA,CAAE,mBAAAE,GAAuBF,EACxB,MAAA,CACL,GAAIE,EAAmB,aACvB,KAAMA,EAAmB,YAAY,SAAW,EAAA,KAChD,MAAOA,EAAmB,YAAY,WAAW,IACnD,CAAA,CAEJ,EAEcC,gBAAA,CACZ,eAAAX,EACA,UAAAC,EACA,GAAGN,CAAA,CACJ,EAEK,MAAAiB,EAAwBC,GAA+C,CAC3E,KAAM,CAAE,WAAAJ,GAAeI,GAAQ,CAAC,EAE1BC,EAAWZ,EAAe,EAEhC,OAAO,UAAyB,CACvB,MAAA,CACL,eAAAF,EACA,UAAAC,EACA,UAAAL,EACA,SAAAkB,EACA,GAAIL,GAAc,CAChB,WAAY,CACV,GAAIA,EAAW,aACf,KAAMA,EAAW,YAAY,SAAW,EAAA,KACxC,MAAOA,EAAW,YAAY,WAAW,IAAA,CAC3C,CAEJ,CACF,CACF,EAGA,GAAIZ,EAAyB,CAC3B,MAAMkB,EAA+BH,EAAqB,EAE1DI,EAAAA,yBAAyBD,CAA4B,CAAA,CAIvDjB,EAAO,oBAAoB,UAAU,MAAOmB,GAAc,CAC9CA,EAAA,QAASP,GAAuB,CACxC,MAAMQ,EAAkBR,EAAmB,OAC3C,GAAIQ,EAAiB,CACnB,MAAMC,EAAyBP,EAAqB,CAAE,WAAYF,EAAoB,EAEzDU,+BAAAD,EAAwBD,EAAgB,UAAU,CAAA,CACjF,CACD,CAAA,CACF,EAED,SAASG,EACPC,EAIA,CACA,OAAOC,SAAO,CACZ,OAAQ,CAAE,OAAQzB,EAAO,OAAO,UAAW,UAAWA,EAAO,UAAU,SAAU,EACjF,OAAQ,MAAO,CAAE,OAAA0B,EAAQ,UAAAC,CAAA,EAAajB,IAA6B,CACjE,KAAM,CAAE,KAAAkB,EAAM,KAAAC,EAAM,UAAAC,EAAW,QAAAC,CAAY,EAAArB,EAErCsB,EAAc5B,EAAe,EAE7B6B,EAAmB,CACvB,eAAA/B,EACA,UAAAC,EACA,UAAAL,EACA,WAAYW,EAAcC,CAAO,EACjC,KAAAkB,EACA,KAAAC,EACA,UAAAC,EACA,QAAAC,EACA,OAAAL,EACA,UAAAC,EACA,SAAUK,CACZ,EAEA,OAAOR,EAAQS,CAAgB,CAAA,CACjC,CACD,CAAA,CAGGC,QAAA,CACJ,OAAQlC,EAAO,SACf,MAAQmC,GAAUA,EAAM,KACxB,MAAO,CACL,YAAaZ,EAAqBa,mBAAiB,EACnD,gBAAiBb,EAAqBc,mBAAiB,EACvD,iBAAkBd,EAAqBe,oBAAkB,EACzD,uBAAwBf,EAAqBgB,gCAA8B,EAC3E,uBAAwBhB,EAAqBiB,0BAAwB,EACrE,WAAYjB,EAAqBkB,qBAAmB,EACpD,YAAalB,EAAqBmB,sBAAoB,EACtD,oBAAqBnB,EAAqBoB,6BAA2B,EACrE,YAAapB,EAAqBqB,sBAAoB,EACtD,oBAAqBrB,EAAqBsB,6BAA2B,EACrE,kBAAmBtB,EAAqBuB,EAAyB,yBAAA,CAAA,CACnE,CACD,CAAA,CAEL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/events/cart_add.ts","../../src/events/cart_remove.ts","../../src/events/wishlist_add.ts","../../src/events/checkout_complete.ts","../../src/events/lead_capture.ts","../../src/events/modal_close.ts","../../src/events/modal_open.ts","../../src/events/page_view.ts","../../src/events/product_view_details.ts","../../src/events/recommendation_present.ts","../../src/events/step_complete.ts","../../src/events/step_submit_error.ts","../../src/events/search_results_list_view.ts","../../src/events/product_select.ts","../../src/events/product_list_view.ts"],"sourcesContent":["import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'cart_add'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCartAddEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'cart_remove'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCartRemoveEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'wishlist_add'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackWishlistAddEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'checkout_complete'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackCheckoutCompleteEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'lead_capture'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackLeadCaptureEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatModalContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ModalContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'modal_close'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ModalContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const modalContextData = formatModalContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('modal', '1-0-0', modalContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackModalCloseEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatModalContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ModalContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'modal_open'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ModalContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const modalContextData = formatModalContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('modal', '1-0-0', modalContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackModalOpenEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'page_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ProductListContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n productListContextData\n ? createContext('product_list', '2-0-0', productListContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackPageViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_view_details'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackProductViewDetailsEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'recommendation_present'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackRecommendationPresentEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_complete'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepComplete = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExceptionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'search_results_list_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackSearchResultsListViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_select'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackProductSelectEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatProductListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n ProductListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'product_list_view'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ProductListContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const productListContextData = formatProductListContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('product_list', '2-0-0', productListContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackProductListViewEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n"],"names":["EVENT_TYPE","formatEvent","analyticsContext","eventMeta","featureListContextData","formatFeatureListContextData","sessionContextData","formatSessionContextData","productListContextData","formatProductListContextData","experienceContextData","formatExperienceContextData","stepContextData","formatStepContextData","createEvent","createContext","trackCartAddEvent","createTrackEvent","trackCartRemoveEvent","trackWishlistAddEvent","trackCheckoutCompleteEvent","trackLeadCaptureEvent","modalContextData","formatModalContextData","trackModalCloseEvent","trackModalOpenEvent","trackPageViewEvent","trackProductViewDetailsEvent","trackRecommendationPresentEvent","responseListContextData","formatResponseListContextData","fieldListContextData","formatFieldListContextData","trackStepComplete","exceptionContextData","formatExceptionContextData","trackStepSubmitErrorEvent","trackSearchResultsListViewEvent","trackProductSelectEvent","trackProductListViewEvent"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/plugins/analytics/plugin.ts"],"sourcesContent":["import type {\n EventBusPayload,\n ExperienceInstance,\n FeatureBucket,\n Picked,\n ResolvedFeatureBucket,\n} from '@picked/client'\nimport { supportsWindow } from '@picked/client'\nimport { attach, split } from 'effector'\nimport {\n bindGlobalEventListeners,\n bindUserInteractionListeners,\n createTracker,\n trackAppCloseEvent,\n trackAppLoadEvent,\n trackAppOpenEvent,\n trackExperienceLoadEvent,\n trackFieldValidationErrorEvent,\n trackFormSubmitErrorEvent,\n trackFormSubmitEvent,\n trackFormSubmitSuccessEvent,\n trackStepEnterEvent,\n trackStepSubmitEvent,\n trackStepSubmitSuccessEvent,\n} from '../../index'\nimport type { EventSchema } from '../../schemas'\nimport type { AnalyticsContext, CreateTrackerOptions } from '../../types'\n\ninterface AnalyticsPluginOptions {\n trackerOptions?: CreateTrackerOptions\n sessionId?: string\n enableDocumentListeners?: boolean\n}\n\nfunction isFeatureResolved(feature: FeatureBucket): feature is ResolvedFeatureBucket {\n return feature.isResolved\n}\n\nexport const analyticsPlugin = ({\n trackerOptions,\n sessionId,\n enableDocumentListeners = false,\n}: AnalyticsPluginOptions): { name: string; setup: (client: Picked) => void } => {\n return {\n name: 'analytics',\n setup: (client) => {\n if (!supportsWindow()) {\n // Do not initialize the analytics plugin in a non-browser environment\n return\n }\n\n const { organizationId, projectId } = client\n\n const getFeatureList = () => {\n const features = client.features.listStore.getState()\n\n return features.flatMap((feature) => {\n if (!isFeatureResolved(feature)) return []\n\n const { id, key, name } = feature\n const { bucket } = feature.getBucket()\n return [\n {\n name,\n key,\n feature: id,\n bucket,\n },\n ]\n })\n }\n\n const getExperience = (payload: EventBusPayload) => {\n if (payload.experience) {\n const { experience } = payload\n return {\n id: experience.id,\n type: experience.configStore.getState().type,\n title: experience.configStore.getState().name,\n }\n }\n\n if (payload.experienceInstance) {\n const { experienceInstance } = payload\n return {\n id: experienceInstance.experienceId,\n type: experienceInstance.configStore.getState().type,\n title: experienceInstance.configStore.getState().name,\n }\n }\n }\n\n createTracker({\n organizationId,\n projectId,\n ...trackerOptions,\n })\n\n const createContextFactory = (args?: { experience?: ExperienceInstance }) => {\n const { experience } = args || {}\n\n const features = getFeatureList()\n\n return function createContext() {\n return {\n organizationId,\n projectId,\n sessionId,\n features,\n ...(experience && {\n experience: {\n id: experience.experienceId,\n type: experience.configStore.getState().type,\n title: experience.configStore.getState().name,\n },\n }),\n }\n }\n }\n\n // Window/Document event tracking\n if (enableDocumentListeners) {\n const createGlobalAnalyticsContext = createContextFactory()\n // The individual listener functions will be removed before binding again, so they don't get attached multiple times\n bindGlobalEventListeners(createGlobalAnalyticsContext)\n }\n\n // User interaction tracking\n client.experienceInstances.listStore.watch((instances) => {\n instances.forEach((experienceInstance) => {\n const eventsContainer = experienceInstance.target\n if (eventsContainer) {\n const createAnalyticsContext = createContextFactory({ experience: experienceInstance })\n // The individual listener functions will be removed before binding again, so they don't get attached multiple times\n bindUserInteractionListeners(createAnalyticsContext, eventsContainer.shadowRoot)\n }\n })\n })\n\n function createTrackingEffect(\n trackFn: (\n analyticsContext: AnalyticsContext,\n meta?: EventSchema['meta'],\n ) => void | Promise<void>,\n ) {\n return attach({\n source: { fields: client.fields.listStore, responses: client.responses.listStore },\n effect: async ({ fields, responses }, payload: EventBusPayload) => {\n const { step, form, exception, version } = payload\n\n const featureList = getFeatureList()\n\n const applicationEvent = {\n organizationId,\n projectId,\n sessionId,\n experience: getExperience(payload),\n step,\n form,\n exception,\n version,\n fields,\n responses,\n features: featureList,\n }\n\n return trackFn(applicationEvent)\n },\n })\n }\n\n split({\n source: client.eventBus,\n match: (event) => event.type,\n cases: {\n initialized: createTrackingEffect(trackAppLoadEvent),\n experience_open: createTrackingEffect(trackAppOpenEvent),\n experience_close: createTrackingEffect(trackAppCloseEvent),\n field_validation_error: createTrackingEffect(trackFieldValidationErrorEvent),\n experience_initialized: createTrackingEffect(trackExperienceLoadEvent),\n step_enter: createTrackingEffect(trackStepEnterEvent),\n step_submit: createTrackingEffect(trackStepSubmitEvent),\n step_submit_success: createTrackingEffect(trackStepSubmitSuccessEvent),\n form_submit: createTrackingEffect(trackFormSubmitEvent),\n form_submit_success: createTrackingEffect(trackFormSubmitSuccessEvent),\n form_submit_error: createTrackingEffect(trackFormSubmitErrorEvent),\n },\n })\n },\n }\n}\n"],"names":["isFeatureResolved","feature","analyticsPlugin","trackerOptions","sessionId","enableDocumentListeners","client","supportsWindow","organizationId","projectId","getFeatureList","id","key","name","bucket","getExperience","payload","experience","experienceInstance","createTracker","createContextFactory","args","features","createGlobalAnalyticsContext","bindGlobalEventListeners","instances","eventsContainer","createAnalyticsContext","bindUserInteractionListeners","createTrackingEffect","trackFn","attach","fields","responses","step","form","exception","version","featureList","applicationEvent","split","event","trackAppLoadEvent","trackAppOpenEvent","trackAppCloseEvent","trackFieldValidationErrorEvent","trackExperienceLoadEvent","trackStepEnterEvent","trackStepSubmitEvent","trackStepSubmitSuccessEvent","trackFormSubmitEvent","trackFormSubmitSuccessEvent","trackFormSubmitErrorEvent"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-interaction-BTJxIHbv.cjs","sources":["../src/utils.ts","../src/tracker.ts","../src/events/app_close.ts","../src/events/app_load.ts","../src/events/app_open.ts","../src/events/experience_load.ts","../src/events/field_validation_error.ts","../src/events/form_submit.ts","../src/events/form_submit_error.ts","../src/events/form_submit_success.ts","../src/events/step_enter.ts","../src/events/step_submit.ts","../src/events/step_submit_success.ts","../src/helpers/element.ts","../src/helpers/text.ts","../src/events/interaction/rapid_scroll.ts","../src/listeners/rapid_scroll.ts","../src/events/interaction/rapid_click.ts","../src/listeners/rapid_click.ts","../src/events/interaction/right_click.ts","../src/listeners/right_click.ts","../src/events/interaction/mouse_shake.ts","../src/listeners/mouse_shake.ts","../src/events/interaction/page_visible.ts","../src/events/interaction/page_hidden.ts","../src/listeners/visibility.ts","../src/events/interaction/backspace.ts","../src/listeners/backspace.ts","../src/events/interaction/page_hide.ts","../src/listeners/pagehide.ts","../src/events/interaction/page_show.ts","../src/listeners/pageshow.ts","../src/events/interaction/offline.ts","../src/listeners/offline.ts","../src/events/interaction/scroll.ts","../src/listeners/scroll.ts","../src/events/interaction/online.ts","../src/listeners/online.ts","../src/events/interaction/resize.ts","../src/listeners/resize.ts","../src/events/interaction/unload.ts","../src/listeners/unload.ts","../src/events/interaction/click.ts","../src/listeners/click.ts","../src/events/interaction/paste.ts","../src/listeners/paste.ts","../src/events/interaction/copy.ts","../src/listeners/copy.ts","../src/events/interaction/drag.ts","../src/listeners/drag.ts","../src/user-interaction.ts"],"sourcesContent":["import { trackSelfDescribingEvent } from '@snowplow/browser-tracker'\nimport type { SelfDescribingJson } from '@snowplow/browser-tracker'\nimport type {\n AnalyticsContext,\n AppContext,\n Context,\n ContextArray,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n FormContext,\n ModalContext,\n ProductListContext,\n ResponseListContext,\n SchemaUrl,\n SessionContext,\n SnowplowEventWithContext,\n SnowplowSelfDescribingEvent,\n StepContext,\n} from './types'\nimport type { EventSchema } from './schemas'\n\n// export const isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'preview'\n\nconst MODULE_NAME = 'snowplow'\n\nexport function schemaUrl<T extends string, U extends string>(\n schema: T,\n version: U,\n): SchemaUrl<T, U> {\n return `iglu:dev.pckd/${schema}/jsonschema/${version}`\n}\n\n// Uncomment if need for debugging while in debelopment\nexport function log(message: string, ...data: any[]) {\n // if (isDev) {\n // console.log(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function warn(message: string, ...data: any[]) {\n // if (isDev) {\n // console.warn(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function error(message: string, ...data: any[]) {\n // if (isDev) {\n // console.error(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function createEvent<E extends SnowplowEventWithContext<string, ContextArray, ContextArray>>(\n type: E['event']['data']['type'],\n context: E['context'],\n meta: E['event']['data']['meta'] = {},\n): SnowplowSelfDescribingEvent {\n return {\n event: {\n schema: schemaUrl('event', '1-0-0'),\n data: {\n type,\n meta,\n },\n },\n context: context.filter(\n (c): c is SelfDescribingJson<Record<string, unknown>> => c !== undefined,\n ),\n }\n}\n\nexport function createContext<\n S extends string,\n V extends string,\n D extends Record<string, unknown>,\n>(schema: S, version: V, data: D): Context<SchemaUrl<S, V>, D> {\n return {\n schema: schemaUrl(schema, version),\n data,\n }\n}\n\nexport function createTrackEvent(\n eventName: string,\n formatter: (_: null, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventMeta?: EventSchema['meta']) => void\nexport function createTrackEvent<P>(\n eventName: string,\n formatter: (eventPayload: P, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventPayload: P, eventMeta?: EventSchema['meta']) => void\nexport function createTrackEvent<P>(\n eventName: string,\n formatter: (eventPayload: P, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventPayloadOrNull: P, eventMeta?: EventSchema['meta']) => void {\n return (eventPayload: P, eventMeta?: EventSchema['meta']) => {\n const eventData = formatter(eventPayload, eventMeta)\n\n trackSelfDescribingEvent(eventData)\n }\n}\n\nexport function createBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n options: AddEventListenerOptions | boolean = { passive: true },\n): (target: EventTarget, createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEventsMap = new WeakMap<EventTarget, Set<string>>()\n\n return (target, createAnalyticsContext) => {\n let boundEvents = boundEventsMap.get(target)\n\n if (!boundEvents) {\n boundEvents = new Set<string>()\n boundEventsMap.set(target, boundEvents)\n }\n\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n // Create fresh analytics event for each interaction\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n target.addEventListener(type, wrappedHandler, options)\n boundEvents.add(type)\n }\n}\n\nexport function createDocumentBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n): (createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEvents = new Set<string>()\n\n return (createAnalyticsContext) => {\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n document.addEventListener(type, wrappedHandler, { passive: true })\n boundEvents.add(type)\n }\n}\n\nexport function createWindowBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n): (createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEvents = new Set<string>()\n\n return (createAnalyticsContext) => {\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n window.addEventListener(type, wrappedHandler, { passive: true })\n boundEvents.add(type)\n }\n}\n\nexport function formatFeatureListContextData(event: AnalyticsContext): FeatureListContext['data'] {\n const items =\n event.features?.map(({ feature, name, key, bucket }) => ({\n ab_feature: feature,\n ab_name: name,\n ab_key: key,\n ab_bucket: bucket,\n })) || []\n\n return { items }\n}\n\nconst UNKNOWN = 'unknown'\n\nexport function formatAppContextData(event: AnalyticsContext): AppContext['data'] {\n if (!event.organizationId || !event.projectId) {\n warn(\n '\"organizationId\" and \"projectId\" are required. They are likely missing from `init.analytics` in core-feature.ts and core-disabled.ts.',\n event,\n )\n }\n\n return {\n organization_id: event.organizationId || UNKNOWN,\n project_id: event.projectId || event.organizationId || UNKNOWN,\n }\n}\n\nexport function formatSessionContextData(event: AnalyticsContext): SessionContext['data'] {\n const gaClientId = getGoogleAnalyticsClientId()\n\n return {\n id: event.sessionId || null,\n gaid: gaClientId || null,\n }\n}\n\nexport function formatFieldListContextData(\n event: AnalyticsContext,\n): FieldListContext['data'] | undefined {\n if (!event.fields) {\n return undefined\n }\n\n return {\n items: event.fields.map(({ id, type, label, options }) => ({\n id,\n type,\n label,\n options,\n })),\n }\n}\n\n// todo: Create an application error interface that can be extended to different error types\n// Asserting value type to match schema\ntype ResponseListValue =\n | string\n | number\n | boolean\n | { [x: string]: unknown }\n | unknown\n | null\n | undefined\nexport function formatResponseListContextData(\n event: AnalyticsContext,\n): ResponseListContext['data'] | undefined {\n if (!event.responses) {\n return undefined\n }\n\n return {\n items: event.responses.map(\n ({ fieldId, value }: { fieldId: string; value: ResponseListValue }) => ({\n field_id: fieldId,\n values: Array.isArray(value)\n ? value.map((v) => {\n return { value: v }\n })\n : [{ value }],\n }),\n ),\n }\n}\n\nexport function formatStepContextData(event: AnalyticsContext, required: true): StepContext['data']\nexport function formatStepContextData(\n event: AnalyticsContext,\n required?: false,\n): StepContext['data'] | undefined\nexport function formatStepContextData(event: AnalyticsContext, required: boolean = false) {\n const { step } = event\n\n if (step) {\n return {\n id: step.id,\n title: step.label,\n }\n }\n\n if (required) {\n warn('\"step\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatProductListContextData(\n event: AnalyticsContext,\n required: true,\n): ProductListContext['data']\nexport function formatProductListContextData(\n event: AnalyticsContext,\n required?: false,\n): ProductListContext['data'] | undefined\nexport function formatProductListContextData(event: AnalyticsContext, required: boolean = false) {\n const { productList } = event\n\n if (productList) {\n return {\n items: productList.map((productItem): ProductListContext['data']['items'][number] => {\n return {\n item_id: productItem.itemId,\n item_name: productItem.itemName,\n affiliation: productItem.affiliation,\n coupon: productItem.coupon,\n currency: productItem.currency,\n creative_name: productItem.creativeName,\n creative_slot: productItem.creativeSlot,\n discount: ensureNumber(productItem.discount),\n index: ensureNumber(productItem.index),\n item_brand: productItem.itemBrand,\n item_category: productItem.itemCategory,\n item_category2: productItem.itemCategory2,\n item_category3: productItem.itemCategory3,\n item_category4: productItem.itemCategory4,\n item_category5: productItem.itemCategory5,\n item_list_id: productItem.itemListId,\n item_list_name: productItem.itemListName,\n item_variant: productItem.itemVariant,\n location_id: productItem.locationId,\n price: ensureNumber(productItem.price),\n promotion_id: productItem.promotionId,\n promotion_name: productItem.promotionName,\n quantity: ensureNumber(productItem.quantity),\n }\n }),\n }\n }\n\n if (required) {\n warn('\"productList\" is required for this event', event)\n\n return {}\n }\n\n return undefined\n}\n\nexport function formatExperienceContextData(\n event: AnalyticsContext,\n required: true,\n): ExperienceContext['data']\nexport function formatExperienceContextData(\n event: AnalyticsContext,\n required?: false,\n): ExperienceContext['data'] | undefined\nexport function formatExperienceContextData(event: AnalyticsContext, required: boolean = false) {\n const { experience } = event\n if (experience) {\n return {\n id: experience.id,\n type: experience.type,\n title: experience.title,\n }\n }\n\n if (required) {\n warn('\"experience\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n type: UNKNOWN,\n title: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatExceptionContextData(\n event: AnalyticsContext,\n required: true,\n): ExceptionContext['data']\nexport function formatExceptionContextData(\n event: AnalyticsContext,\n required?: false,\n): ExceptionContext['data'] | undefined\nexport function formatExceptionContextData(event: AnalyticsContext, required: boolean = false) {\n const { exception } = event\n if (exception) {\n // todo: create a type enum for the expections that are form errors\n if (typeof exception === 'string') {\n return { reason: exception }\n }\n\n return {\n reason: exception.systemMessage,\n }\n }\n\n if (required) {\n warn('\"exception\" is required for this event', event)\n\n return {\n reason: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatFormContextData(event: AnalyticsContext): FormContext['data'] {\n const { form } = event\n\n if (form) {\n return {\n id: form.id,\n title: form.title,\n }\n }\n\n warn('\"form\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n}\n\nexport function formatModalContextData(event: AnalyticsContext): ModalContext['data'] {\n const { modal } = event\n\n if (modal) {\n return {\n id: modal.id,\n title: modal.title,\n }\n }\n\n warn('\"modal\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function debounce(fn: Function, ms = 300) {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return function (this: unknown, ...args: unknown[]) {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn.apply(this, args), ms)\n }\n}\n\nfunction ensureNumber(input: string | number | undefined): number | undefined {\n if (typeof input === 'number') {\n return input\n }\n\n if (typeof input !== 'string') {\n return undefined\n }\n\n const numericValue = parseFloat(input)\n\n if (isNaN(numericValue)) {\n return undefined\n }\n\n return numericValue\n}\n\n/**\n * Parse the _ga cookie to extract the client ID.\n * For Universal Analytics and GA4 the _ga cookie is typically in the format: _ga=GA1.2.XXXXXXXXXX.XXXXXXXXXX\n * The client ID is the last two dot-separated parts: \"XXXXXXXXXX.XXXXXXXXXX\".\n */\nfunction getGoogleAnalyticsClientId() {\n const cookieName = '_ga='\n const cookies = document.cookie ? document.cookie.split(';') : []\n\n for (const cookie of cookies) {\n const c = cookie.trim()\n if (c.startsWith(cookieName)) {\n const gaValue = c.substring(cookieName.length) // e.g. \"GA1.2.1234567890.1234567890\"\n const parts = gaValue.split('.')\n if (parts.length > 2) {\n return parts.slice(2).join('.')\n }\n }\n }\n}\n","import {\n addGlobalContexts,\n enableActivityTracking,\n enableActivityTrackingCallback,\n newTracker as spNewTracker,\n type TrackerConfiguration,\n} from '@snowplow/browser-tracker'\nimport {\n ButtonClickTrackingPlugin as buttonClickTrackingPlugin,\n enableButtonClickTracking,\n} from '@snowplow/browser-plugin-button-click-tracking'\nimport { PerformanceNavigationTimingPlugin as performanceNavigationTimingPlugin } from '@snowplow/browser-plugin-performance-navigation-timing'\nimport {\n enableErrorTracking,\n ErrorTrackingPlugin as errorTrackingPlugin,\n} from '@snowplow/browser-plugin-error-tracking'\nimport { WebVitalsPlugin as webVitalsPlugin } from '@snowplow/browser-plugin-web-vitals'\nimport type {\n AppContext,\n CreateTrackerOptions,\n CvlyFunnelContext,\n CvlyXContext,\n PickedContext,\n} from './types'\nimport { createContext, log } from './utils'\n\nfunction getEnabledPlugins(options: CreateTrackerOptions) {\n const plugins = []\n\n if (options.trackErrors) {\n log('Enabling error tracking')\n plugins.push(errorTrackingPlugin())\n }\n\n if (options.trackVitals) {\n log('Enabling web vitals tracking')\n plugins.push(webVitalsPlugin())\n }\n\n if (options.trackPerformance) {\n log('Enabling performance tracking')\n plugins.push(performanceNavigationTimingPlugin())\n }\n\n if (options.trackButtonClickAllowList || options.trackButtonClickFilter) {\n plugins.push(buttonClickTrackingPlugin())\n }\n\n return plugins\n}\n\nfunction initializePlugins(options: CreateTrackerOptions) {\n if (options.trackActivity && !options.trackActivityCallback) {\n log('Enabling activity tracking')\n\n enableActivityTracking({\n minimumVisitLength: 30,\n heartbeatDelay: 10,\n })\n }\n\n if (options.trackActivity && options.trackActivityCallback) {\n log('Enabling activity tracking with callback')\n\n enableActivityTrackingCallback({\n minimumVisitLength: 30,\n heartbeatDelay: 10,\n callback: options.trackActivityCallback,\n })\n }\n\n if (options.trackButtonClickAllowList || options.trackButtonClickFilter) {\n log('Enabling button click tracking')\n\n enableButtonClickTracking({\n filter: options.trackButtonClickAllowList\n ? {\n allowlist: options.trackButtonClickAllowList,\n }\n : options.trackButtonClickFilter,\n })\n }\n\n if (options.trackErrors) {\n log('Enabling error tracking')\n enableErrorTracking()\n }\n}\n\nexport function createTracker({\n organizationId,\n projectId,\n cvlyX,\n collectorUrl = 'evnts.pckd.dev',\n appId = 'picked-analytics',\n trackVitals = true,\n trackPerformance = true,\n trackWebPage = true,\n trackSessions = true,\n trackBrowser = true,\n trackActivity = true,\n trackErrors = true,\n trackActivityCallback,\n trackButtonClickAllowList,\n}: CreateTrackerOptions) {\n log('Initializing tracker')\n\n const trackerPlugins = {\n trackVitals,\n trackErrors,\n trackActivity,\n trackPerformance,\n trackActivityCallback,\n trackButtonClickAllowList,\n }\n\n const newTrackerConfiguration: TrackerConfiguration = {\n appId,\n platform: 'web',\n contexts: {\n webPage: trackWebPage,\n session: trackSessions,\n browser: trackBrowser || false,\n },\n plugins: getEnabledPlugins(trackerPlugins),\n }\n\n const tracker = spNewTracker(appId, collectorUrl, newTrackerConfiguration)\n\n bindGlobalContext({\n organizationId,\n projectId,\n cvlyX,\n })\n\n initializePlugins(trackerPlugins)\n\n return tracker\n}\n\ninterface GlobalContextOptions {\n organizationId?: string\n projectId?: string\n cvlyX?: { vercelDeploymentId: string; vercelEnv: string; vercelUrl: string }\n}\n\nfunction bindGlobalContext({ organizationId, projectId, cvlyX }: GlobalContextOptions) {\n if (!organizationId || !projectId) {\n throw new Error('bindGlobalContext: Both organizationId and projectId are required')\n }\n\n const globalContexts: (CvlyXContext | CvlyFunnelContext | PickedContext | AppContext)[] = []\n\n globalContexts.push(\n createContext('app', '1-0-0', {\n organization_id: organizationId,\n project_id: projectId,\n }),\n )\n\n if (cvlyX) {\n globalContexts.push(\n createContext('cvly_x', '1-0-1', {\n vercel_deployment_id: cvlyX.vercelDeploymentId,\n vercel_env: cvlyX.vercelEnv,\n vercel_url: cvlyX.vercelUrl,\n }),\n )\n }\n\n addGlobalContexts(globalContexts)\n}\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_close'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(event: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(event)\n const sessionContextData = formatSessionContextData(event)\n const experienceContextData = formatExperienceContextData(event)\n const stepContextData = formatStepContextData(event)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppCloseEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_load'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppLoadEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_open'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppOpenEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'experience_load'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExperienceContext],\n [StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext, true)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('experience', '1-0-0', experienceContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackExperienceLoadEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'field_validation_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExceptionContext],\n [FormContext, ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFieldValidationErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext, ExceptionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit_success'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitSuccessEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_enter'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepEnterEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit_success'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitSuccessEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","export function isElement(target: EventTarget | null): target is Element {\n return target instanceof Element\n}\n\nexport function findClosestInteractiveElement(element: Element | EventTarget): Element | null {\n const interactiveSelectors = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'details',\n 'summary',\n 'label',\n 'form',\n 'fieldset',\n 'legend',\n 'optgroup',\n 'option',\n 'output',\n 'datalist',\n 'dialog',\n 'menu',\n 'menuitem',\n 'iframe',\n 'audio',\n 'video',\n 'embed',\n 'object',\n 'canvas',\n ].join(', ')\n\n if (isElement(element)) {\n if (element.matches(interactiveSelectors)) {\n return element\n }\n\n return element.closest(interactiveSelectors)\n }\n\n return null\n}\n\nexport function getElementTextContent(element: Element): string | null {\n if (element instanceof HTMLSelectElement) {\n const selectedIndex = element.selectedIndex || 0\n const selectedOption = element.options[selectedIndex]\n return selectedOption?.text ?? ''\n }\n\n if ('innerText' in element && typeof element.innerText === 'string') {\n return element.innerText\n }\n\n return element.textContent\n}\n\nexport function getElementLabel(element: Element): string | null {\n const ariaLabel = element.getAttribute('aria-label')\n\n if (ariaLabel) {\n return ariaLabel\n }\n\n const ariaLabelledBy = element.getAttribute('aria-labelledby')\n\n if (ariaLabelledBy) {\n const labelledElement = document.getElementById(ariaLabelledBy)\n\n if (labelledElement) {\n const label = getElementTextContent(labelledElement)\n\n if (label) {\n return label\n }\n }\n }\n\n if ('id' in element && element.id) {\n const labelElement = document.querySelector(`label[for=\"${element.id}\"]`)\n\n if (labelElement) {\n const label = getElementTextContent(labelElement)\n\n if (label) {\n return label\n }\n }\n }\n\n let parent = element.parentElement\n\n while (parent) {\n if (parent.tagName.toLowerCase() === 'label') {\n const label = getElementTextContent(parent)\n\n if (label) {\n return label\n }\n }\n\n parent = parent.parentElement\n }\n\n if (element instanceof HTMLInputElement && 'labels' in element && element.labels) {\n const label = Array.from(element.labels)\n .map((label) => getElementTextContent(label))\n .filter(Boolean)\n .join(' ')\n\n if (label) {\n return label\n }\n }\n\n if ('placeholder' in element && typeof element.placeholder === 'string') {\n return element.placeholder\n }\n\n return null\n}\n","const MAX_TEXT_LENGTH = 255\n\nexport function trimText(text: string | null): string | null {\n return text ? text.slice(0, MAX_TEXT_LENGTH) : null\n}\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'rapid_scroll'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/rapid_scroll'\nimport { createBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst RAPID_SCROLL_THRESHOLD = 100\nconst RAPID_SCROLL_INTERVAL = 100\nconst DEBOUNCE_TIME = 300\n\nlet previousScrollY = 0\nlet lastRapidScrollTime = 0\n\nconst debouncedTrackEvent = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n DEBOUNCE_TIME,\n)\n\nfunction handleRapidScroll(\n interaction: { analyticsContext: AnalyticsContext; event: UIEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const target = interaction.event.target || document.documentElement\n if (!(target instanceof HTMLElement)) {\n return\n }\n const currentScrollY = target.scrollTop\n const timeDiff = Date.now() - lastRapidScrollTime\n\n if (\n Math.abs(currentScrollY - previousScrollY) > RAPID_SCROLL_THRESHOLD &&\n timeDiff < RAPID_SCROLL_INTERVAL\n ) {\n debouncedTrackEvent(interaction.event, eventMeta)\n }\n\n previousScrollY = currentScrollY\n lastRapidScrollTime = Date.now()\n}\n\nexport const bindListener = createBindListener('scroll', handleRapidScroll, true)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'rapid_click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/rapid_click'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nlet clickCount = 0\nlet lastClickTime = 0\nconst RAGE_CLICK_THRESHOLD = 3\nconst TIME_WINDOW_MS = 500\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const currentTime = new Date().getTime()\n\n if (currentTime - lastClickTime < TIME_WINDOW_MS) {\n clickCount++\n } else {\n clickCount = 1\n }\n\n lastClickTime = currentTime\n\n if (clickCount >= RAGE_CLICK_THRESHOLD) {\n trackEvent(interaction, eventMeta)\n\n clickCount = 0\n }\n}\n\nexport const bindListener = createBindListener('click', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'right_click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(EVENT_TYPE, [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ])\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/right_click'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('contextmenu', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'mouse_shake'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { createBindListener, debounce } from '../utils'\nimport { trackEvent } from '../events/interaction/mouse_shake'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst THRESHOLD = 5\nconst DEBOUNCE_TIME = 500\nconst SHAKE_TIME_LIMIT = 500\n\nlet lastMove = { x: 0, y: 0 }\nlet directions: number[] = []\nlet lastShakeTime = 0\n\nconst debouncedTrackEvent = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: MouseEvent },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n DEBOUNCE_TIME,\n)\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: MouseEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const now = Date.now()\n const dx = interaction.event.clientX - lastMove.x\n const direction = Math.sign(dx)\n if (now - lastShakeTime > SHAKE_TIME_LIMIT) {\n directions = []\n }\n\n if (\n direction !== 0 &&\n (directions.length === 0 || directions[directions.length - 1] !== direction)\n ) {\n directions.push(direction)\n }\n\n lastMove = { x: interaction.event.clientX, y: interaction.event.clientY }\n\n if (directions.length >= THRESHOLD) {\n debouncedTrackEvent(interaction, eventMeta)\n directions = []\n }\n\n lastShakeTime = now\n}\n\nexport const bindListener = createBindListener('mousemove', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_visible'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_hidden'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent as trackPageVisibleEvent } from '../events/interaction/page_visible'\nimport { trackEvent as trackPageHiddenEvent } from '../events/interaction/page_hidden'\nimport { createDocumentBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n if (document.visibilityState === 'visible') {\n trackPageVisibleEvent(interaction, eventMeta)\n\n return\n }\n\n trackPageHiddenEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createDocumentBindListener('visibilitychange', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'backspace'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: KeyboardEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/backspace'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: KeyboardEvent },\n eventMeta?: EventSchema['meta'],\n) {\n if (interaction.event.key === 'Backspace') {\n trackEvent(interaction, eventMeta)\n }\n}\n\nexport const bindListener = createBindListener<KeyboardEvent>('keydown', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_hide'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/page_hide'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('pagehide', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_show'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/page_show'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('pageshow', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'offline'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/offline'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('offline', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'scroll'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/scroll'\nimport { createBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst debouncedHandler = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n 500,\n)\n\nexport const bindListener = createBindListener('scroll', debouncedHandler, true)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'online'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/online'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('online', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'resize'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/resize'\nimport { createWindowBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nlet previousWidth = 0\n\nconst debouncedHandler = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n const currentWidth = window.innerWidth\n\n if (currentWidth !== previousWidth) {\n trackEvent(interaction, eventMeta)\n previousWidth = currentWidth\n } else if (!('ontouchstart' in window)) {\n trackEvent(interaction, eventMeta)\n }\n\n previousWidth = currentWidth\n },\n 300,\n)\n\nexport const bindListener = createWindowBindListener('resize', debouncedHandler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'unload'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/unload'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('unload', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport { trimText } from '../../helpers/text'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/click'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\nimport type { EventSchema } from '../schemas'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('click', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'paste'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/paste'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('paste', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'copy'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/copy'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('copy', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'drag'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/drag'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const currentTarget = interaction.event.currentTarget\n\n if (!currentTarget || !(currentTarget instanceof HTMLElement)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n handler({ event, analyticsContext: interaction.analyticsContext })\n }\n\n currentTarget.removeEventListener('drag', wrappedHandler)\n currentTarget.addEventListener('dragend', () =>\n bindListener(currentTarget, () => interaction.analyticsContext),\n )\n\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('drag', handler)\n","import { bindListener as bindRapidScrollListener } from './listeners/rapid_scroll'\nimport { bindListener as bindRapidClickListener } from './listeners/rapid_click'\nimport { bindListener as bindRightClickListener } from './listeners/right_click'\nimport { bindListener as bindMouseShakeListener } from './listeners/mouse_shake'\nimport { bindListener as bindVisibilityListener } from './listeners/visibility'\nimport { bindListener as bindBackspaceListener } from './listeners/backspace'\nimport { bindListener as bindPageHideListener } from './listeners/pagehide'\nimport { bindListener as bindPageShowListener } from './listeners/pageshow'\nimport { bindListener as bindOfflineListener } from './listeners/offline'\nimport { bindListener as bindScrollListener } from './listeners/scroll'\nimport { bindListener as bindOnlineListener } from './listeners/online'\nimport { bindListener as bindResizeListener } from './listeners/resize'\nimport { bindListener as bindUnloadListener } from './listeners/unload'\nimport { bindListener as bindClickListener } from './listeners/click'\nimport { bindListener as bindPasteListener } from './listeners/paste'\nimport { bindListener as bindCopyListener } from './listeners/copy'\nimport { bindListener as bindDragListener } from './listeners/drag'\nimport type { AnalyticsContext } from './types'\n\nexport function bindUserInteractionListeners(\n createAnalyticsContext: () => AnalyticsContext,\n target: EventTarget | null,\n) {\n if (target) {\n bindClickListener(target, createAnalyticsContext)\n bindRapidClickListener(target, createAnalyticsContext)\n bindRightClickListener(target, createAnalyticsContext)\n bindCopyListener(target, createAnalyticsContext)\n bindPasteListener(target, createAnalyticsContext)\n bindDragListener(target, createAnalyticsContext)\n bindBackspaceListener(target, createAnalyticsContext)\n bindScrollListener(target, createAnalyticsContext)\n bindRapidScrollListener(target, createAnalyticsContext)\n bindMouseShakeListener(target, createAnalyticsContext)\n }\n}\n\nexport function bindGlobalEventListeners(createAnalyticsContext: () => AnalyticsContext) {\n bindVisibilityListener(createAnalyticsContext)\n bindPageHideListener(createAnalyticsContext)\n bindPageShowListener(createAnalyticsContext)\n bindOfflineListener(createAnalyticsContext)\n bindOnlineListener(createAnalyticsContext)\n bindResizeListener(createAnalyticsContext)\n bindUnloadListener(createAnalyticsContext)\n}\n"],"names":["schemaUrl","schema","version","log","message","data","warn","createEvent","type","context","meta","c","createContext","createTrackEvent","eventName","formatter","eventPayload","eventMeta","eventData","trackSelfDescribingEvent","createBindListener","handler","options","boundEventsMap","target","createAnalyticsContext","boundEvents","wrappedHandler","event","analyticsContext","createDocumentBindListener","createWindowBindListener","formatFeatureListContextData","_a","feature","name","key","bucket","UNKNOWN","formatSessionContextData","gaClientId","getGoogleAnalyticsClientId","formatFieldListContextData","id","label","formatResponseListContextData","fieldId","value","v","formatStepContextData","required","step","formatProductListContextData","productList","productItem","ensureNumber","formatExperienceContextData","experience","formatExceptionContextData","exception","formatFormContextData","form","formatModalContextData","modal","debounce","fn","ms","timeoutId","args","input","numericValue","cookieName","cookies","cookie","parts","getEnabledPlugins","plugins","errorTrackingPlugin","webVitalsPlugin","performanceNavigationTimingPlugin","buttonClickTrackingPlugin","initializePlugins","enableActivityTracking","enableActivityTrackingCallback","enableButtonClickTracking","enableErrorTracking","createTracker","organizationId","projectId","cvlyX","collectorUrl","appId","trackVitals","trackPerformance","trackWebPage","trackSessions","trackBrowser","trackActivity","trackErrors","trackActivityCallback","trackButtonClickAllowList","trackerPlugins","newTrackerConfiguration","tracker","spNewTracker","bindGlobalContext","globalContexts","addGlobalContexts","EVENT_TYPE","formatEvent","featureListContextData","sessionContextData","experienceContextData","stepContextData","trackAppCloseEvent","trackAppLoadEvent","trackAppOpenEvent","trackExperienceLoadEvent","formContextData","exceptionContextData","trackFieldValidationErrorEvent","trackFormSubmitEvent","trackFormSubmitErrorEvent","trackFormSubmitSuccessEvent","fieldListContextData","trackStepEnterEvent","responseListContextData","trackStepSubmitEvent","trackStepSubmitSuccessEvent","isElement","findClosestInteractiveElement","element","interactiveSelectors","getElementTextContent","selectedIndex","selectedOption","getElementLabel","ariaLabel","ariaLabelledBy","labelledElement","labelElement","parent","MAX_TEXT_LENGTH","trimText","text","interaction","targetElement","elementContextData","trackEvent","RAPID_SCROLL_THRESHOLD","RAPID_SCROLL_INTERVAL","DEBOUNCE_TIME","previousScrollY","lastRapidScrollTime","debouncedTrackEvent","handleRapidScroll","currentScrollY","timeDiff","bindListener","clickCount","lastClickTime","RAGE_CLICK_THRESHOLD","TIME_WINDOW_MS","currentTime","THRESHOLD","SHAKE_TIME_LIMIT","lastMove","directions","lastShakeTime","now","dx","direction","trackPageVisibleEvent","trackPageHiddenEvent","debouncedHandler","previousWidth","currentWidth","currentTarget","bindUserInteractionListeners","bindClickListener","bindRapidClickListener","bindRightClickListener","bindCopyListener","bindPasteListener","bindDragListener","bindBackspaceListener","bindScrollListener","bindRapidScrollListener","bindMouseShakeListener","bindGlobalEventListeners","bindVisibilityListener","bindPageHideListener","bindPageShowListener","bindOfflineListener","bindOnlineListener","bindResizeListener","bindUnloadListener"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-interaction-CZQT4H3Z.js","sources":["../src/utils.ts","../src/tracker.ts","../src/events/app_close.ts","../src/events/app_load.ts","../src/events/app_open.ts","../src/events/experience_load.ts","../src/events/field_validation_error.ts","../src/events/form_submit.ts","../src/events/form_submit_error.ts","../src/events/form_submit_success.ts","../src/events/step_enter.ts","../src/events/step_submit.ts","../src/events/step_submit_success.ts","../src/helpers/element.ts","../src/helpers/text.ts","../src/events/interaction/rapid_scroll.ts","../src/listeners/rapid_scroll.ts","../src/events/interaction/rapid_click.ts","../src/listeners/rapid_click.ts","../src/events/interaction/right_click.ts","../src/listeners/right_click.ts","../src/events/interaction/mouse_shake.ts","../src/listeners/mouse_shake.ts","../src/events/interaction/page_visible.ts","../src/events/interaction/page_hidden.ts","../src/listeners/visibility.ts","../src/events/interaction/backspace.ts","../src/listeners/backspace.ts","../src/events/interaction/page_hide.ts","../src/listeners/pagehide.ts","../src/events/interaction/page_show.ts","../src/listeners/pageshow.ts","../src/events/interaction/offline.ts","../src/listeners/offline.ts","../src/events/interaction/scroll.ts","../src/listeners/scroll.ts","../src/events/interaction/online.ts","../src/listeners/online.ts","../src/events/interaction/resize.ts","../src/listeners/resize.ts","../src/events/interaction/unload.ts","../src/listeners/unload.ts","../src/events/interaction/click.ts","../src/listeners/click.ts","../src/events/interaction/paste.ts","../src/listeners/paste.ts","../src/events/interaction/copy.ts","../src/listeners/copy.ts","../src/events/interaction/drag.ts","../src/listeners/drag.ts","../src/user-interaction.ts"],"sourcesContent":["import { trackSelfDescribingEvent } from '@snowplow/browser-tracker'\nimport type { SelfDescribingJson } from '@snowplow/browser-tracker'\nimport type {\n AnalyticsContext,\n AppContext,\n Context,\n ContextArray,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n FormContext,\n ModalContext,\n ProductListContext,\n ResponseListContext,\n SchemaUrl,\n SessionContext,\n SnowplowEventWithContext,\n SnowplowSelfDescribingEvent,\n StepContext,\n} from './types'\nimport type { EventSchema } from './schemas'\n\n// export const isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'preview'\n\nconst MODULE_NAME = 'snowplow'\n\nexport function schemaUrl<T extends string, U extends string>(\n schema: T,\n version: U,\n): SchemaUrl<T, U> {\n return `iglu:dev.pckd/${schema}/jsonschema/${version}`\n}\n\n// Uncomment if need for debugging while in debelopment\nexport function log(message: string, ...data: any[]) {\n // if (isDev) {\n // console.log(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function warn(message: string, ...data: any[]) {\n // if (isDev) {\n // console.warn(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function error(message: string, ...data: any[]) {\n // if (isDev) {\n // console.error(`[${MODULE_NAME}] ${message}`, ...data)\n // }\n}\n\nexport function createEvent<E extends SnowplowEventWithContext<string, ContextArray, ContextArray>>(\n type: E['event']['data']['type'],\n context: E['context'],\n meta: E['event']['data']['meta'] = {},\n): SnowplowSelfDescribingEvent {\n return {\n event: {\n schema: schemaUrl('event', '1-0-0'),\n data: {\n type,\n meta,\n },\n },\n context: context.filter(\n (c): c is SelfDescribingJson<Record<string, unknown>> => c !== undefined,\n ),\n }\n}\n\nexport function createContext<\n S extends string,\n V extends string,\n D extends Record<string, unknown>,\n>(schema: S, version: V, data: D): Context<SchemaUrl<S, V>, D> {\n return {\n schema: schemaUrl(schema, version),\n data,\n }\n}\n\nexport function createTrackEvent(\n eventName: string,\n formatter: (_: null, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventMeta?: EventSchema['meta']) => void\nexport function createTrackEvent<P>(\n eventName: string,\n formatter: (eventPayload: P, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventPayload: P, eventMeta?: EventSchema['meta']) => void\nexport function createTrackEvent<P>(\n eventName: string,\n formatter: (eventPayload: P, eventMeta?: EventSchema['meta']) => SnowplowSelfDescribingEvent,\n): (eventPayloadOrNull: P, eventMeta?: EventSchema['meta']) => void {\n return (eventPayload: P, eventMeta?: EventSchema['meta']) => {\n const eventData = formatter(eventPayload, eventMeta)\n\n trackSelfDescribingEvent(eventData)\n }\n}\n\nexport function createBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n options: AddEventListenerOptions | boolean = { passive: true },\n): (target: EventTarget, createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEventsMap = new WeakMap<EventTarget, Set<string>>()\n\n return (target, createAnalyticsContext) => {\n let boundEvents = boundEventsMap.get(target)\n\n if (!boundEvents) {\n boundEvents = new Set<string>()\n boundEventsMap.set(target, boundEvents)\n }\n\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n // Create fresh analytics event for each interaction\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n target.addEventListener(type, wrappedHandler, options)\n boundEvents.add(type)\n }\n}\n\nexport function createDocumentBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n): (createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEvents = new Set<string>()\n\n return (createAnalyticsContext) => {\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n document.addEventListener(type, wrappedHandler, { passive: true })\n boundEvents.add(type)\n }\n}\n\nexport function createWindowBindListener<T extends Event = Event>(\n type: string,\n handler: (interaction: { analyticsContext: AnalyticsContext; event: T }) => void,\n): (createAnalyticsContext: () => AnalyticsContext) => void {\n const boundEvents = new Set<string>()\n\n return (createAnalyticsContext) => {\n if (boundEvents.has(type)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n const analyticsContext = createAnalyticsContext()\n handler({ event: event as T, analyticsContext })\n }\n\n window.addEventListener(type, wrappedHandler, { passive: true })\n boundEvents.add(type)\n }\n}\n\nexport function formatFeatureListContextData(event: AnalyticsContext): FeatureListContext['data'] {\n const items =\n event.features?.map(({ feature, name, key, bucket }) => ({\n ab_feature: feature,\n ab_name: name,\n ab_key: key,\n ab_bucket: bucket,\n })) || []\n\n return { items }\n}\n\nconst UNKNOWN = 'unknown'\n\nexport function formatAppContextData(event: AnalyticsContext): AppContext['data'] {\n if (!event.organizationId || !event.projectId) {\n warn(\n '\"organizationId\" and \"projectId\" are required. They are likely missing from `init.analytics` in core-feature.ts and core-disabled.ts.',\n event,\n )\n }\n\n return {\n organization_id: event.organizationId || UNKNOWN,\n project_id: event.projectId || event.organizationId || UNKNOWN,\n }\n}\n\nexport function formatSessionContextData(event: AnalyticsContext): SessionContext['data'] {\n const gaClientId = getGoogleAnalyticsClientId()\n\n return {\n id: event.sessionId || null,\n gaid: gaClientId || null,\n }\n}\n\nexport function formatFieldListContextData(\n event: AnalyticsContext,\n): FieldListContext['data'] | undefined {\n if (!event.fields) {\n return undefined\n }\n\n return {\n items: event.fields.map(({ id, type, label, options }) => ({\n id,\n type,\n label,\n options,\n })),\n }\n}\n\n// todo: Create an application error interface that can be extended to different error types\n// Asserting value type to match schema\ntype ResponseListValue =\n | string\n | number\n | boolean\n | { [x: string]: unknown }\n | unknown\n | null\n | undefined\nexport function formatResponseListContextData(\n event: AnalyticsContext,\n): ResponseListContext['data'] | undefined {\n if (!event.responses) {\n return undefined\n }\n\n return {\n items: event.responses.map(\n ({ fieldId, value }: { fieldId: string; value: ResponseListValue }) => ({\n field_id: fieldId,\n values: Array.isArray(value)\n ? value.map((v) => {\n return { value: v }\n })\n : [{ value }],\n }),\n ),\n }\n}\n\nexport function formatStepContextData(event: AnalyticsContext, required: true): StepContext['data']\nexport function formatStepContextData(\n event: AnalyticsContext,\n required?: false,\n): StepContext['data'] | undefined\nexport function formatStepContextData(event: AnalyticsContext, required: boolean = false) {\n const { step } = event\n\n if (step) {\n return {\n id: step.id,\n title: step.label,\n }\n }\n\n if (required) {\n warn('\"step\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatProductListContextData(\n event: AnalyticsContext,\n required: true,\n): ProductListContext['data']\nexport function formatProductListContextData(\n event: AnalyticsContext,\n required?: false,\n): ProductListContext['data'] | undefined\nexport function formatProductListContextData(event: AnalyticsContext, required: boolean = false) {\n const { productList } = event\n\n if (productList) {\n return {\n items: productList.map((productItem): ProductListContext['data']['items'][number] => {\n return {\n item_id: productItem.itemId,\n item_name: productItem.itemName,\n affiliation: productItem.affiliation,\n coupon: productItem.coupon,\n currency: productItem.currency,\n creative_name: productItem.creativeName,\n creative_slot: productItem.creativeSlot,\n discount: ensureNumber(productItem.discount),\n index: ensureNumber(productItem.index),\n item_brand: productItem.itemBrand,\n item_category: productItem.itemCategory,\n item_category2: productItem.itemCategory2,\n item_category3: productItem.itemCategory3,\n item_category4: productItem.itemCategory4,\n item_category5: productItem.itemCategory5,\n item_list_id: productItem.itemListId,\n item_list_name: productItem.itemListName,\n item_variant: productItem.itemVariant,\n location_id: productItem.locationId,\n price: ensureNumber(productItem.price),\n promotion_id: productItem.promotionId,\n promotion_name: productItem.promotionName,\n quantity: ensureNumber(productItem.quantity),\n }\n }),\n }\n }\n\n if (required) {\n warn('\"productList\" is required for this event', event)\n\n return {}\n }\n\n return undefined\n}\n\nexport function formatExperienceContextData(\n event: AnalyticsContext,\n required: true,\n): ExperienceContext['data']\nexport function formatExperienceContextData(\n event: AnalyticsContext,\n required?: false,\n): ExperienceContext['data'] | undefined\nexport function formatExperienceContextData(event: AnalyticsContext, required: boolean = false) {\n const { experience } = event\n if (experience) {\n return {\n id: experience.id,\n type: experience.type,\n title: experience.title,\n }\n }\n\n if (required) {\n warn('\"experience\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n type: UNKNOWN,\n title: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatExceptionContextData(\n event: AnalyticsContext,\n required: true,\n): ExceptionContext['data']\nexport function formatExceptionContextData(\n event: AnalyticsContext,\n required?: false,\n): ExceptionContext['data'] | undefined\nexport function formatExceptionContextData(event: AnalyticsContext, required: boolean = false) {\n const { exception } = event\n if (exception) {\n // todo: create a type enum for the expections that are form errors\n if (typeof exception === 'string') {\n return { reason: exception }\n }\n\n return {\n reason: exception.systemMessage,\n }\n }\n\n if (required) {\n warn('\"exception\" is required for this event', event)\n\n return {\n reason: UNKNOWN,\n }\n }\n\n return undefined\n}\n\nexport function formatFormContextData(event: AnalyticsContext): FormContext['data'] {\n const { form } = event\n\n if (form) {\n return {\n id: form.id,\n title: form.title,\n }\n }\n\n warn('\"form\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n}\n\nexport function formatModalContextData(event: AnalyticsContext): ModalContext['data'] {\n const { modal } = event\n\n if (modal) {\n return {\n id: modal.id,\n title: modal.title,\n }\n }\n\n warn('\"modal\" is required for this event', event)\n\n return {\n id: UNKNOWN,\n title: UNKNOWN,\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function debounce(fn: Function, ms = 300) {\n let timeoutId: ReturnType<typeof setTimeout>\n\n return function (this: unknown, ...args: unknown[]) {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn.apply(this, args), ms)\n }\n}\n\nfunction ensureNumber(input: string | number | undefined): number | undefined {\n if (typeof input === 'number') {\n return input\n }\n\n if (typeof input !== 'string') {\n return undefined\n }\n\n const numericValue = parseFloat(input)\n\n if (isNaN(numericValue)) {\n return undefined\n }\n\n return numericValue\n}\n\n/**\n * Parse the _ga cookie to extract the client ID.\n * For Universal Analytics and GA4 the _ga cookie is typically in the format: _ga=GA1.2.XXXXXXXXXX.XXXXXXXXXX\n * The client ID is the last two dot-separated parts: \"XXXXXXXXXX.XXXXXXXXXX\".\n */\nfunction getGoogleAnalyticsClientId() {\n const cookieName = '_ga='\n const cookies = document.cookie ? document.cookie.split(';') : []\n\n for (const cookie of cookies) {\n const c = cookie.trim()\n if (c.startsWith(cookieName)) {\n const gaValue = c.substring(cookieName.length) // e.g. \"GA1.2.1234567890.1234567890\"\n const parts = gaValue.split('.')\n if (parts.length > 2) {\n return parts.slice(2).join('.')\n }\n }\n }\n}\n","import {\n addGlobalContexts,\n enableActivityTracking,\n enableActivityTrackingCallback,\n newTracker as spNewTracker,\n type TrackerConfiguration,\n} from '@snowplow/browser-tracker'\nimport {\n ButtonClickTrackingPlugin as buttonClickTrackingPlugin,\n enableButtonClickTracking,\n} from '@snowplow/browser-plugin-button-click-tracking'\nimport { PerformanceNavigationTimingPlugin as performanceNavigationTimingPlugin } from '@snowplow/browser-plugin-performance-navigation-timing'\nimport {\n enableErrorTracking,\n ErrorTrackingPlugin as errorTrackingPlugin,\n} from '@snowplow/browser-plugin-error-tracking'\nimport { WebVitalsPlugin as webVitalsPlugin } from '@snowplow/browser-plugin-web-vitals'\nimport type {\n AppContext,\n CreateTrackerOptions,\n CvlyFunnelContext,\n CvlyXContext,\n PickedContext,\n} from './types'\nimport { createContext, log } from './utils'\n\nfunction getEnabledPlugins(options: CreateTrackerOptions) {\n const plugins = []\n\n if (options.trackErrors) {\n log('Enabling error tracking')\n plugins.push(errorTrackingPlugin())\n }\n\n if (options.trackVitals) {\n log('Enabling web vitals tracking')\n plugins.push(webVitalsPlugin())\n }\n\n if (options.trackPerformance) {\n log('Enabling performance tracking')\n plugins.push(performanceNavigationTimingPlugin())\n }\n\n if (options.trackButtonClickAllowList || options.trackButtonClickFilter) {\n plugins.push(buttonClickTrackingPlugin())\n }\n\n return plugins\n}\n\nfunction initializePlugins(options: CreateTrackerOptions) {\n if (options.trackActivity && !options.trackActivityCallback) {\n log('Enabling activity tracking')\n\n enableActivityTracking({\n minimumVisitLength: 30,\n heartbeatDelay: 10,\n })\n }\n\n if (options.trackActivity && options.trackActivityCallback) {\n log('Enabling activity tracking with callback')\n\n enableActivityTrackingCallback({\n minimumVisitLength: 30,\n heartbeatDelay: 10,\n callback: options.trackActivityCallback,\n })\n }\n\n if (options.trackButtonClickAllowList || options.trackButtonClickFilter) {\n log('Enabling button click tracking')\n\n enableButtonClickTracking({\n filter: options.trackButtonClickAllowList\n ? {\n allowlist: options.trackButtonClickAllowList,\n }\n : options.trackButtonClickFilter,\n })\n }\n\n if (options.trackErrors) {\n log('Enabling error tracking')\n enableErrorTracking()\n }\n}\n\nexport function createTracker({\n organizationId,\n projectId,\n cvlyX,\n collectorUrl = 'evnts.pckd.dev',\n appId = 'picked-analytics',\n trackVitals = true,\n trackPerformance = true,\n trackWebPage = true,\n trackSessions = true,\n trackBrowser = true,\n trackActivity = true,\n trackErrors = true,\n trackActivityCallback,\n trackButtonClickAllowList,\n}: CreateTrackerOptions) {\n log('Initializing tracker')\n\n const trackerPlugins = {\n trackVitals,\n trackErrors,\n trackActivity,\n trackPerformance,\n trackActivityCallback,\n trackButtonClickAllowList,\n }\n\n const newTrackerConfiguration: TrackerConfiguration = {\n appId,\n platform: 'web',\n contexts: {\n webPage: trackWebPage,\n session: trackSessions,\n browser: trackBrowser || false,\n },\n plugins: getEnabledPlugins(trackerPlugins),\n }\n\n const tracker = spNewTracker(appId, collectorUrl, newTrackerConfiguration)\n\n bindGlobalContext({\n organizationId,\n projectId,\n cvlyX,\n })\n\n initializePlugins(trackerPlugins)\n\n return tracker\n}\n\ninterface GlobalContextOptions {\n organizationId?: string\n projectId?: string\n cvlyX?: { vercelDeploymentId: string; vercelEnv: string; vercelUrl: string }\n}\n\nfunction bindGlobalContext({ organizationId, projectId, cvlyX }: GlobalContextOptions) {\n if (!organizationId || !projectId) {\n throw new Error('bindGlobalContext: Both organizationId and projectId are required')\n }\n\n const globalContexts: (CvlyXContext | CvlyFunnelContext | PickedContext | AppContext)[] = []\n\n globalContexts.push(\n createContext('app', '1-0-0', {\n organization_id: organizationId,\n project_id: projectId,\n }),\n )\n\n if (cvlyX) {\n globalContexts.push(\n createContext('cvly_x', '1-0-1', {\n vercel_deployment_id: cvlyX.vercelDeploymentId,\n vercel_env: cvlyX.vercelEnv,\n vercel_url: cvlyX.vercelUrl,\n }),\n )\n }\n\n addGlobalContexts(globalContexts)\n}\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_close'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(event: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(event)\n const sessionContextData = formatSessionContextData(event)\n const experienceContextData = formatExperienceContextData(event)\n const stepContextData = formatStepContextData(event)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppCloseEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_load'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppLoadEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'app_open'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackAppOpenEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'experience_load'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExperienceContext],\n [StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext, true)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('experience', '1-0-0', experienceContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackExperienceLoadEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'field_validation_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ExceptionContext],\n [FormContext, ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFieldValidationErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExceptionContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExceptionContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit_error'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext, ExceptionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const exceptionContextData = formatExceptionContextData(analyticsContext, true)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n createContext('exception', '1-0-0', exceptionContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitErrorEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFormContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FormContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'form_submit_success'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, FormContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const formContextData = formatFormContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('form', '1-0-0', formContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n stepContextData && createContext('step', '1-0-0', stepContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackFormSubmitSuccessEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_enter'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepEnterEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatResponseListContextData,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatFieldListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../utils'\nimport type {\n AnalyticsContext,\n ResponseListContext,\n ExperienceContext,\n FeatureListContext,\n FieldListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../types'\nimport type { EventSchema } from '../schemas'\n\nconst EVENT_TYPE = 'step_submit_success'\n\ntype ApplicationEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, StepContext],\n [FieldListContext, ResponseListContext, ExperienceContext]\n>\n\nfunction formatEvent(analyticsContext: AnalyticsContext, eventMeta?: EventSchema['meta']) {\n const featureListContextData = formatFeatureListContextData(analyticsContext)\n const sessionContextData = formatSessionContextData(analyticsContext)\n const experienceContextData = formatExperienceContextData(analyticsContext)\n const stepContextData = formatStepContextData(analyticsContext, true)\n const fieldListContextData = formatFieldListContextData(analyticsContext)\n const responseListContextData = formatResponseListContextData(analyticsContext)\n\n return createEvent<ApplicationEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('step', '1-0-0', stepContextData),\n fieldListContextData && createContext('field_list', '1-0-0', fieldListContextData),\n responseListContextData && createContext('response_list', '1-0-0', responseListContextData),\n experienceContextData && createContext('experience', '1-0-0', experienceContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackStepSubmitSuccessEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","export function isElement(target: EventTarget | null): target is Element {\n return target instanceof Element\n}\n\nexport function findClosestInteractiveElement(element: Element | EventTarget): Element | null {\n const interactiveSelectors = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'details',\n 'summary',\n 'label',\n 'form',\n 'fieldset',\n 'legend',\n 'optgroup',\n 'option',\n 'output',\n 'datalist',\n 'dialog',\n 'menu',\n 'menuitem',\n 'iframe',\n 'audio',\n 'video',\n 'embed',\n 'object',\n 'canvas',\n ].join(', ')\n\n if (isElement(element)) {\n if (element.matches(interactiveSelectors)) {\n return element\n }\n\n return element.closest(interactiveSelectors)\n }\n\n return null\n}\n\nexport function getElementTextContent(element: Element): string | null {\n if (element instanceof HTMLSelectElement) {\n const selectedIndex = element.selectedIndex || 0\n const selectedOption = element.options[selectedIndex]\n return selectedOption?.text ?? ''\n }\n\n if ('innerText' in element && typeof element.innerText === 'string') {\n return element.innerText\n }\n\n return element.textContent\n}\n\nexport function getElementLabel(element: Element): string | null {\n const ariaLabel = element.getAttribute('aria-label')\n\n if (ariaLabel) {\n return ariaLabel\n }\n\n const ariaLabelledBy = element.getAttribute('aria-labelledby')\n\n if (ariaLabelledBy) {\n const labelledElement = document.getElementById(ariaLabelledBy)\n\n if (labelledElement) {\n const label = getElementTextContent(labelledElement)\n\n if (label) {\n return label\n }\n }\n }\n\n if ('id' in element && element.id) {\n const labelElement = document.querySelector(`label[for=\"${element.id}\"]`)\n\n if (labelElement) {\n const label = getElementTextContent(labelElement)\n\n if (label) {\n return label\n }\n }\n }\n\n let parent = element.parentElement\n\n while (parent) {\n if (parent.tagName.toLowerCase() === 'label') {\n const label = getElementTextContent(parent)\n\n if (label) {\n return label\n }\n }\n\n parent = parent.parentElement\n }\n\n if (element instanceof HTMLInputElement && 'labels' in element && element.labels) {\n const label = Array.from(element.labels)\n .map((label) => getElementTextContent(label))\n .filter(Boolean)\n .join(' ')\n\n if (label) {\n return label\n }\n }\n\n if ('placeholder' in element && typeof element.placeholder === 'string') {\n return element.placeholder\n }\n\n return null\n}\n","const MAX_TEXT_LENGTH = 255\n\nexport function trimText(text: string | null): string | null {\n return text ? text.slice(0, MAX_TEXT_LENGTH) : null\n}\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'rapid_scroll'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/rapid_scroll'\nimport { createBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst RAPID_SCROLL_THRESHOLD = 100\nconst RAPID_SCROLL_INTERVAL = 100\nconst DEBOUNCE_TIME = 300\n\nlet previousScrollY = 0\nlet lastRapidScrollTime = 0\n\nconst debouncedTrackEvent = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n DEBOUNCE_TIME,\n)\n\nfunction handleRapidScroll(\n interaction: { analyticsContext: AnalyticsContext; event: UIEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const target = interaction.event.target || document.documentElement\n if (!(target instanceof HTMLElement)) {\n return\n }\n const currentScrollY = target.scrollTop\n const timeDiff = Date.now() - lastRapidScrollTime\n\n if (\n Math.abs(currentScrollY - previousScrollY) > RAPID_SCROLL_THRESHOLD &&\n timeDiff < RAPID_SCROLL_INTERVAL\n ) {\n debouncedTrackEvent(interaction.event, eventMeta)\n }\n\n previousScrollY = currentScrollY\n lastRapidScrollTime = Date.now()\n}\n\nexport const bindListener = createBindListener('scroll', handleRapidScroll, true)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'rapid_click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/rapid_click'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nlet clickCount = 0\nlet lastClickTime = 0\nconst RAGE_CLICK_THRESHOLD = 3\nconst TIME_WINDOW_MS = 500\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const currentTime = new Date().getTime()\n\n if (currentTime - lastClickTime < TIME_WINDOW_MS) {\n clickCount++\n } else {\n clickCount = 1\n }\n\n lastClickTime = currentTime\n\n if (clickCount >= RAGE_CLICK_THRESHOLD) {\n trackEvent(interaction, eventMeta)\n\n clickCount = 0\n }\n}\n\nexport const bindListener = createBindListener('click', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'right_click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(EVENT_TYPE, [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ])\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/right_click'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('contextmenu', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'mouse_shake'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { createBindListener, debounce } from '../utils'\nimport { trackEvent } from '../events/interaction/mouse_shake'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst THRESHOLD = 5\nconst DEBOUNCE_TIME = 500\nconst SHAKE_TIME_LIMIT = 500\n\nlet lastMove = { x: 0, y: 0 }\nlet directions: number[] = []\nlet lastShakeTime = 0\n\nconst debouncedTrackEvent = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: MouseEvent },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n DEBOUNCE_TIME,\n)\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: MouseEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const now = Date.now()\n const dx = interaction.event.clientX - lastMove.x\n const direction = Math.sign(dx)\n if (now - lastShakeTime > SHAKE_TIME_LIMIT) {\n directions = []\n }\n\n if (\n direction !== 0 &&\n (directions.length === 0 || directions[directions.length - 1] !== direction)\n ) {\n directions.push(direction)\n }\n\n lastMove = { x: interaction.event.clientX, y: interaction.event.clientY }\n\n if (directions.length >= THRESHOLD) {\n debouncedTrackEvent(interaction, eventMeta)\n directions = []\n }\n\n lastShakeTime = now\n}\n\nexport const bindListener = createBindListener('mousemove', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_visible'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_hidden'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent as trackPageVisibleEvent } from '../events/interaction/page_visible'\nimport { trackEvent as trackPageHiddenEvent } from '../events/interaction/page_hidden'\nimport { createDocumentBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n if (document.visibilityState === 'visible') {\n trackPageVisibleEvent(interaction, eventMeta)\n\n return\n }\n\n trackPageHiddenEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createDocumentBindListener('visibilitychange', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'backspace'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: KeyboardEvent },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/backspace'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: KeyboardEvent },\n eventMeta?: EventSchema['meta'],\n) {\n if (interaction.event.key === 'Backspace') {\n trackEvent(interaction, eventMeta)\n }\n}\n\nexport const bindListener = createBindListener<KeyboardEvent>('keydown', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_hide'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/page_hide'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('pagehide', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'page_show'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/page_show'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('pageshow', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'offline'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/offline'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('offline', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'scroll'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/scroll'\nimport { createBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nconst debouncedHandler = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n trackEvent(interaction, eventMeta)\n },\n 500,\n)\n\nexport const bindListener = createBindListener('scroll', debouncedHandler, true)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'online'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/online'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('online', handler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'resize'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/resize'\nimport { createWindowBindListener, debounce } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nlet previousWidth = 0\n\nconst debouncedHandler = debounce(\n (\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n ) => {\n const currentWidth = window.innerWidth\n\n if (currentWidth !== previousWidth) {\n trackEvent(interaction, eventMeta)\n previousWidth = currentWidth\n } else if (!('ontouchstart' in window)) {\n trackEvent(interaction, eventMeta)\n }\n\n previousWidth = currentWidth\n },\n 300,\n)\n\nexport const bindListener = createWindowBindListener('resize', debouncedHandler)\n","import {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type {\n AnalyticsContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'unload'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/unload'\nimport { createWindowBindListener } from '../utils'\nimport type { EventSchema } from '../schemas'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createWindowBindListener('unload', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport { trimText } from '../../helpers/text'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\n\nconst EVENT_TYPE = 'click'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext, ElementContext],\n [ExperienceContext, StepContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n const elementContextData: ElementContext['data'] = {\n node_type: 'unknown',\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n createContext('element', '1-0-0', elementContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/click'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\nimport type { EventSchema } from '../schemas'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('click', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'paste'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/paste'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('paste', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'copy'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/copy'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('copy', handler)\n","import {\n findClosestInteractiveElement,\n getElementLabel,\n getElementTextContent,\n isElement,\n} from '../../helpers/element'\nimport type {\n AnalyticsContext,\n ElementContext,\n ExperienceContext,\n FeatureListContext,\n SessionContext,\n SnowplowEventWithContext,\n StepContext,\n} from '../../types'\nimport {\n createContext,\n createEvent,\n createTrackEvent,\n formatExperienceContextData,\n formatFeatureListContextData,\n formatSessionContextData,\n formatStepContextData,\n} from '../../utils'\nimport type { EventSchema } from '../../schemas'\nimport { trimText } from '../../helpers/text'\n\nconst EVENT_TYPE = 'drag'\n\ntype UserInteractionEvent = SnowplowEventWithContext<\n typeof EVENT_TYPE,\n [FeatureListContext, SessionContext],\n [ExperienceContext, StepContext, ElementContext]\n>\n\nfunction formatEvent(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const featureListContextData = formatFeatureListContextData(interaction.analyticsContext)\n const sessionContextData = formatSessionContextData(interaction.analyticsContext)\n const experienceContextData = formatExperienceContextData(interaction.analyticsContext)\n const stepContextData = formatStepContextData(interaction.analyticsContext)\n\n const targetElement =\n interaction.event.target || document.activeElement || interaction.event.currentTarget\n\n if (!isElement(targetElement)) {\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n ],\n eventMeta,\n )\n }\n\n const element = findClosestInteractiveElement(targetElement) || targetElement\n\n const elementContextData: ElementContext['data'] = {\n id: element.id || null,\n node_type: element.nodeName.toLowerCase(),\n label: trimText(getElementLabel(element)),\n text: trimText(getElementTextContent(element)),\n }\n\n return createEvent<UserInteractionEvent>(\n EVENT_TYPE,\n [\n createContext('feature_list', '2-0-0', featureListContextData),\n createContext('session', '1-0-1', sessionContextData),\n stepContextData ? createContext('step', '1-0-0', stepContextData) : undefined,\n experienceContextData\n ? createContext('experience', '1-0-0', experienceContextData)\n : undefined,\n createContext('element', '1-0-0', elementContextData),\n ],\n eventMeta,\n )\n}\n\nexport const trackEvent = createTrackEvent(EVENT_TYPE, formatEvent)\n","import { trackEvent } from '../events/interaction/drag'\nimport type { EventSchema } from '../schemas'\nimport { createBindListener } from '../utils'\nimport type { AnalyticsContext } from '../types'\n\nfunction handler(\n interaction: { analyticsContext: AnalyticsContext; event: Event },\n eventMeta?: EventSchema['meta'],\n) {\n const currentTarget = interaction.event.currentTarget\n\n if (!currentTarget || !(currentTarget instanceof HTMLElement)) {\n return\n }\n\n function wrappedHandler(event: Event) {\n handler({ event, analyticsContext: interaction.analyticsContext })\n }\n\n currentTarget.removeEventListener('drag', wrappedHandler)\n currentTarget.addEventListener('dragend', () =>\n bindListener(currentTarget, () => interaction.analyticsContext),\n )\n\n trackEvent(interaction, eventMeta)\n}\n\nexport const bindListener = createBindListener('drag', handler)\n","import { bindListener as bindRapidScrollListener } from './listeners/rapid_scroll'\nimport { bindListener as bindRapidClickListener } from './listeners/rapid_click'\nimport { bindListener as bindRightClickListener } from './listeners/right_click'\nimport { bindListener as bindMouseShakeListener } from './listeners/mouse_shake'\nimport { bindListener as bindVisibilityListener } from './listeners/visibility'\nimport { bindListener as bindBackspaceListener } from './listeners/backspace'\nimport { bindListener as bindPageHideListener } from './listeners/pagehide'\nimport { bindListener as bindPageShowListener } from './listeners/pageshow'\nimport { bindListener as bindOfflineListener } from './listeners/offline'\nimport { bindListener as bindScrollListener } from './listeners/scroll'\nimport { bindListener as bindOnlineListener } from './listeners/online'\nimport { bindListener as bindResizeListener } from './listeners/resize'\nimport { bindListener as bindUnloadListener } from './listeners/unload'\nimport { bindListener as bindClickListener } from './listeners/click'\nimport { bindListener as bindPasteListener } from './listeners/paste'\nimport { bindListener as bindCopyListener } from './listeners/copy'\nimport { bindListener as bindDragListener } from './listeners/drag'\nimport type { AnalyticsContext } from './types'\n\nexport function bindUserInteractionListeners(\n createAnalyticsContext: () => AnalyticsContext,\n target: EventTarget | null,\n) {\n if (target) {\n bindClickListener(target, createAnalyticsContext)\n bindRapidClickListener(target, createAnalyticsContext)\n bindRightClickListener(target, createAnalyticsContext)\n bindCopyListener(target, createAnalyticsContext)\n bindPasteListener(target, createAnalyticsContext)\n bindDragListener(target, createAnalyticsContext)\n bindBackspaceListener(target, createAnalyticsContext)\n bindScrollListener(target, createAnalyticsContext)\n bindRapidScrollListener(target, createAnalyticsContext)\n bindMouseShakeListener(target, createAnalyticsContext)\n }\n}\n\nexport function bindGlobalEventListeners(createAnalyticsContext: () => AnalyticsContext) {\n bindVisibilityListener(createAnalyticsContext)\n bindPageHideListener(createAnalyticsContext)\n bindPageShowListener(createAnalyticsContext)\n bindOfflineListener(createAnalyticsContext)\n bindOnlineListener(createAnalyticsContext)\n bindResizeListener(createAnalyticsContext)\n bindUnloadListener(createAnalyticsContext)\n}\n"],"names":["schemaUrl","schema","version","log","message","data","warn","createEvent","type","context","meta","c","createContext","createTrackEvent","eventName","formatter","eventPayload","eventMeta","eventData","trackSelfDescribingEvent","createBindListener","handler","options","boundEventsMap","target","createAnalyticsContext","boundEvents","wrappedHandler","event","analyticsContext","createDocumentBindListener","createWindowBindListener","formatFeatureListContextData","_a","feature","name","key","bucket","UNKNOWN","formatSessionContextData","gaClientId","getGoogleAnalyticsClientId","formatFieldListContextData","id","label","formatResponseListContextData","fieldId","value","v","formatStepContextData","required","step","formatProductListContextData","productList","productItem","ensureNumber","formatExperienceContextData","experience","formatExceptionContextData","exception","formatFormContextData","form","formatModalContextData","modal","debounce","fn","ms","timeoutId","args","input","numericValue","cookieName","cookies","cookie","parts","getEnabledPlugins","plugins","errorTrackingPlugin","webVitalsPlugin","performanceNavigationTimingPlugin","buttonClickTrackingPlugin","initializePlugins","enableActivityTracking","enableActivityTrackingCallback","enableButtonClickTracking","enableErrorTracking","createTracker","organizationId","projectId","cvlyX","collectorUrl","appId","trackVitals","trackPerformance","trackWebPage","trackSessions","trackBrowser","trackActivity","trackErrors","trackActivityCallback","trackButtonClickAllowList","trackerPlugins","newTrackerConfiguration","tracker","spNewTracker","bindGlobalContext","globalContexts","addGlobalContexts","EVENT_TYPE","formatEvent","featureListContextData","sessionContextData","experienceContextData","stepContextData","trackAppCloseEvent","trackAppLoadEvent","trackAppOpenEvent","trackExperienceLoadEvent","formContextData","exceptionContextData","trackFieldValidationErrorEvent","trackFormSubmitEvent","trackFormSubmitErrorEvent","trackFormSubmitSuccessEvent","fieldListContextData","trackStepEnterEvent","responseListContextData","trackStepSubmitEvent","trackStepSubmitSuccessEvent","isElement","findClosestInteractiveElement","element","interactiveSelectors","getElementTextContent","selectedIndex","selectedOption","getElementLabel","ariaLabel","ariaLabelledBy","labelledElement","labelElement","parent","MAX_TEXT_LENGTH","trimText","text","interaction","targetElement","elementContextData","trackEvent","RAPID_SCROLL_THRESHOLD","RAPID_SCROLL_INTERVAL","DEBOUNCE_TIME","previousScrollY","lastRapidScrollTime","debouncedTrackEvent","handleRapidScroll","currentScrollY","timeDiff","bindListener","clickCount","lastClickTime","RAGE_CLICK_THRESHOLD","TIME_WINDOW_MS","currentTime","THRESHOLD","SHAKE_TIME_LIMIT","lastMove","directions","lastShakeTime","now","dx","direction","trackPageVisibleEvent","trackPageHiddenEvent","debouncedHandler","previousWidth","currentWidth","currentTarget","bindUserInteractionListeners","bindClickListener","bindRapidClickListener","bindRightClickListener","bindCopyListener","bindPasteListener","bindDragListener","bindBackspaceListener","bindScrollListener","bindRapidScrollListener","bindMouseShakeListener","bindGlobalEventListeners","bindVisibilityListener","bindPageHideListener","bindPageShowListener","bindOfflineListener","bindOnlineListener","bindResizeListener","bindUnloadListener"],"mappings":"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"}