@walkeros/web-source-browser 4.4.0-next-1785261149472 → 4.4.0

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/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/web-source-browser
2
2
 
3
- ## 4.4.0-next-1785261149472
3
+ ## 4.4.0
4
4
 
5
5
  ### Minor Changes
6
6
 
@@ -10,15 +10,34 @@
10
10
  logged instead of silently disabling the source. `elb: false` installs no
11
11
  global. A page that includes the bundle twice now collects every event twice,
12
12
  once per source. `SourceBrowser.Context` now requires `registry`.
13
-
14
- ### Patch Changes
15
-
13
+ - 034b1de: Events pushed before the collector runs are now held and replayed at
14
+ run instead of being dropped, bounded by `queueMax`. `walker init <element>`
15
+ re-fires load triggers for already-tracked elements, restoring the SPA re-init
16
+ pattern. Queue sources start consuming at run and no longer acknowledge
17
+ messages the pipeline did not accept.
18
+ - 87937a8: Web sources now send events through the collector's source pipeline,
19
+ so `next`/`before` chains, source mapping, `cache`, `state` and per-source
20
+ status work on web like they do on server. Walker commands are unaffected and
21
+ still go straight to the collector. Flows that already configured these fields
22
+ on a web source will see them take effect for the first time.
23
+
24
+ ### Patch Changes
25
+
26
+ - 35756dd: Globals tagged with `data-elbglobals` are page level again:
27
+ `walker init` on an element no longer hides globals defined outside it.
28
+ Collector globals are merged into the event during enrichment, so destinations
29
+ and post-collector transformers see the same finished values. An event keeps
30
+ the globals it was captured with, so a later `walker globals` never reaches an
31
+ event awaiting consent.
16
32
  - Updated dependencies [393b942]
17
33
  - Updated dependencies [6c89afb]
18
34
  - Updated dependencies [393b942]
19
- - @walkeros/collector@4.4.0-next-1785261149472
20
- - @walkeros/core@4.4.0-next-1785261149472
21
- - @walkeros/web-core@4.4.0-next-1785261149472
35
+ - Updated dependencies [35756dd]
36
+ - Updated dependencies [034b1de]
37
+ - Updated dependencies [d00e2bd]
38
+ - @walkeros/collector@4.4.0
39
+ - @walkeros/core@4.4.0
40
+ - @walkeros/web-core@4.4.0
22
41
 
23
42
  ## 4.3.2
24
43
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,a=(e,r)=>{for(var o in r)t(e,o,{get:r[o],enumerable:!0})},i={};a(i,{examples:()=>v,schemas:()=>s}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of o(a))n.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=r(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};a(s,{DataAttributePrefix:()=>d,JavaScriptVarName:()=>p,ScopeSelector:()=>m,SettingsSchema:()=>f,TaggerSchema:()=>g,settings:()=>h,tagger:()=>w});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.string().min(1).regex(/^[a-z][a-z0-9-]*$/,"Must be lowercase kebab-case").describe("Prefix for data attributes on DOM elements"),p=u.z.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),m=u.z.string().describe('DOM scope for event tracking (CSS selector or "document")').optional(),b=l.z.union([l.z.boolean(),l.z.string(),l.z.any().describe("Elb.Layer array for async command queuing")]),f=l.z.object({prefix:d.default("data-elb").describe("Prefix for data attributes (default: data-elb)"),scope:m.describe("DOM scope for event tracking (default: document)"),pageview:l.z.boolean().default(!0).describe("Enable automatic pageview tracking"),capture:l.z.boolean().default(!0).describe("Read click/submit triggers in the capture phase so tagged elements are resolved at click time before app handlers run (set false for the previous bubble-phase behavior)"),elb:l.z.union([p,l.z.literal(!1)]).default("elb").describe("Name for global elb function, or false to install none"),name:l.z.string().describe("Custom name for source instance").optional(),elbLayer:b.default("elbLayer").describe("Enable elbLayer for async command queuing (boolean, string, or Elb.Layer)")}),g=require("@walkeros/core/dev").z.object({prefix:d.default("data-elb").describe("Custom prefix for generated data attributes")}),h=(0,c.zodToSchema)(f),w=(0,c.zodToSchema)(g),v={};a(v,{createTrigger:()=>oe,env:()=>y,step:()=>C,trigger:()=>ne});var y={};a(y,{push:()=>S});var k=()=>{},x=()=>()=>Promise.resolve({ok:!0}),E={error:k,warn:k,info:k,debug:k,throw:e=>{throw"string"==typeof e?new Error(e):e},json:k,scope:()=>E},S={get push(){return x()},get command(){return x()},get elb(){return x()},get window(){return{addEventListener:k,removeEventListener:k,location:{href:"https://example.com/page",pathname:"/page",search:"?query=test",hash:"#section",host:"example.com",hostname:"example.com",origin:"https://example.com",protocol:"https:"},document:{},navigator:{language:"en-US",userAgent:"Mozilla/5.0 (Test)"},screen:{width:1920,height:1080},innerWidth:1920,innerHeight:1080,pageXOffset:0,pageYOffset:0,scrollX:0,scrollY:0}},get document(){return{addEventListener:k,removeEventListener:k,querySelector:k,querySelectorAll:()=>[],getElementById:k,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:k,getAttribute:k,addEventListener:k,removeEventListener:k}),body:{appendChild:k,removeChild:k},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:E},C={};a(C,{clickEvent:()=>O,contextAndGlobals:()=>P,dataAttributeTypes:()=>$,impressionEvent:()=>q,nestedEntities:()=>j,pageView:()=>A,submitEvent:()=>z});var A={title:"Page view",description:"A page load trigger captures the current URL, title, and referrer as a walker page view event.",trigger:{type:"load",options:{url:"https://example.com/docs",title:"Documentation",referrer:"https://example.com/"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"Documentation",referrer:"https://example.com/",id:"/docs"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:"https://example.com/"}}]]},O={title:"Click event",description:"A button click with walker data attributes is captured as an entity action event with the mapped label data.",trigger:{type:"click",options:"button"},in:'<button data-elb="cta" data-elb-cta="label:Sign Up" data-elbaction="click:click">Sign Up</button>',out:[["elb",{name:"cta click",entity:"cta",action:"click",data:{label:"Sign Up"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},z={title:"Submit event",description:"A form submit with walker data attributes produces a signup complete event carrying the selected plan.",trigger:{type:"submit",options:"form"},in:'<form data-elb="signup" data-elb-signup="plan:premium" data-elbaction="submit:complete"></form>',out:[["elb",{name:"signup complete",entity:"signup",action:"complete",data:{plan:"premium"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"submit"}]]},q={title:"Impression event",description:"An intersection observer impression on a div with walker attributes emits a banner view event.",trigger:{type:"impression",options:"div"},in:'<div data-elb="banner" data-elb-banner="type:promotional;position:sidebar" data-elbaction="impression:view"></div>',out:[["elb",{name:"banner view",entity:"banner",action:"view",data:{type:"promotional",position:"sidebar"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"impression"}]]},j={title:"Nested entities",description:"A page load produces a page view plus a product view whose nested size entity is captured on the product event.",trigger:{type:"load"},in:'<div data-elb="product" data-elb-product="id:SKU-42;name:Sneakers" data-elbaction="load:view"><div data-elb="size" data-elb-size="selected:large;inStock:true"></div></div>',out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""}}],["elb",{name:"product view",entity:"product",action:"view",data:{id:"SKU-42",name:"Sneakers"},context:{},globals:{},nested:[{entity:"size",data:{selected:"large",inStock:!0},context:{},nested:[]}],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"load"}]]},$={title:"Data attribute types",description:"Walker data attributes parse scalar, boolean, and array values into typed fields on the emitted event.",trigger:{type:"click",options:"div"},in:'<div data-elb="product" data-elb-product="price:99.99;available:true;colors[]:red;colors[]:blue" data-elbaction="click:select"></div>',out:[["elb",{name:"product select",entity:"product",action:"select",data:{price:99.99,available:!0,colors:["red","blue"]},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},P={title:"Context and globals",description:"Walker context and globals attributes attach ambient metadata to events emitted by the browser source.",trigger:{type:"click",options:'[data-elb="cta"]'},in:'<div data-elbcontext="test:engagement_flow" data-elbglobals="language:en;plan:premium"><div data-elb="cta" data-elb-cta="label:Try Now" data-elbaction="click:signup">Try Now</div></div>',out:[["elb",{name:"cta signup",entity:"cta",action:"signup",data:{label:"Try Now"},context:{test:["engagement_flow",0]},globals:{language:"en",plan:"premium"},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},T=require("@walkeros/collector"),D=(require("@walkeros/core"),require("@walkeros/collector"),require("@walkeros/web-core"),require("@walkeros/core")),L=require("@walkeros/collector"),R=require("@walkeros/web-core");function M(e,t,r=!0){return e+(t=null!=t?(r?"-":"")+t:"")}function N(e,t,r,o=!0){return K((0,R.getAttribute)(t,M(e,r,o))||"").reduce((e,r)=>{let[o,n]=X(r);if(!o)return e;if(n||(o.endsWith(":")&&(o=o.slice(0,-1)),n=""),n.startsWith("#")){n=n.slice(1);try{let e=t[n];e||"selected"!==n||(e=t.options[t.selectedIndex].text),n=String(e)}catch(e){n=""}}return o.endsWith("[]")?(o=o.slice(0,-2),(0,D.isArray)(e[o])||(e[o]=[]),e[o].push((0,D.castValue)(n))):e[o]=(0,D.castValue)(n),e},{})}function U(e,t,r=L.Const.Commands.Prefix){const o=[],{actions:n,nearestOnly:a}=function(e,t,r){let o=t;for(;o;){const t=(0,R.getAttribute)(o,M(e,L.Const.Commands.Actions,!1));if(t){const e=V(t);if(e[r])return{actions:e[r],nearestOnly:!1}}const n=(0,R.getAttribute)(o,M(e,L.Const.Commands.Action,!1));if(n){const e=V(n);if(e[r]||"click"!==r)return{actions:e[r]||[],nearestOnly:!0}}o=B(e,o)}return{actions:[],nearestOnly:!1}}(r,e,t);return n.length?(n.forEach(n=>{const i=K(n.actionParams||"",",").reduce((e,t)=>(e[(0,D.trim)(t)]=!0,e),{}),s=_(r,e,i,a);if(!s.length){const t="page",o=`[${M(r,t)}]`,[n,a]=G(e,o,r,t);s.push({entity:t,data:n,nested:[],context:a})}s.forEach(e=>{var r;o.push({entity:e.entity,action:n.action,data:e.data,trigger:t,context:e.context,nested:null!=(r=e.nested)?r:[]})})}),o):o}function W(e=L.Const.Commands.Prefix,t){if(!t)return{};const r=M(e,L.Const.Commands.Globals,!1);let o={};return J(t,`[${r}]`,t=>{o=(0,D.assign)(o,N(e,t,L.Const.Commands.Globals,!1))}),o}function V(e){const t={};return K(e).forEach(e=>{const[r,o]=X(e),[n,a]=Y(r);if(!n)return;let[i,s]=Y(o||"");i=i||n,t[n]||(t[n]=[]),t[n].push({trigger:n,triggerParams:a,action:i,actionParams:s})}),t}function _(e,t,r,o=!1){const n=[];let a=t;for(r=0!==Object.keys(r||{}).length?r:void 0;a;){const i=I(e,a,t,r);if(i&&(n.push(i),o))break;a=B(e,a)}return n}function I(e,t,r,o){const n=(0,R.getAttribute)(t,M(e));if(!n||o&&!o[n])return null;const a=[t],i=`[${M(e,n)}],[${M(e,"")}]`,s=M(e,L.Const.Commands.Link,!1);let c={};const l=[],[u,d]=G(r||t,i,e,n,!0);H(t,`[${s}]`,r=>{const[o,n]=X((0,R.getAttribute)(r,s));"parent"===n&&H(t.ownerDocument.body,`[${s}="${o}:child"]`,t=>{a.push(t);const r=I(e,t);r&&l.push(r)})});const p=[];a.forEach(e=>{e.matches(i)&&p.push(e),H(e,i,e=>p.push(e))});let m={};return p.forEach(t=>{m=(0,D.assign)(m,N(e,t,"")),c=(0,D.assign)(c,N(e,t,n))}),c=(0,D.assign)((0,D.assign)(m,c),u),a.forEach(t=>{H(t,`[${M(e)}]`,t=>{const r=I(e,t);r&&l.push(r)})}),{entity:n,data:c,context:d,nested:l}}function B(e,t){const r=M(e,L.Const.Commands.Link,!1);if(t.matches(`[${r}]`)){const[e,o]=X((0,R.getAttribute)(t,r));if("child"===o){const o=t.ownerDocument;let n=null;return J(o,`[${r}="${e}:parent"]`,e=>{n||(n=e)}),n}}const o=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof o.ShadowRoot?t.getRootNode().host:t.parentElement}function G(e,t,r,o,n=!1){let a={};const i={};let s=e;const c=`[${M(r,L.Const.Commands.Context,!1)}]`,l=L.Const.Commands.Scoped,u=`[${M(r,l,!1)}]`;let d=0;for(;s;)n&&l&&s.matches(u)&&(a=(0,D.assign)(N(r,s,l,!1),a)),s.matches(t)&&(a=(0,D.assign)(N(r,s,""),a),a=(0,D.assign)(N(r,s,o),a)),s.matches(c)&&(Object.entries(N(r,s,L.Const.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,d])}),++d),s=B(r,s);return[a,i]}function J(e,t,r){e.querySelectorAll(t).forEach(r)}function H(e,t,r){e.querySelectorAll(t).forEach(r);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&H(e.shadowRoot,t,r),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&H(e.shadowRoot,t,r)})}function K(e,t=";"){if(!e)return[];const r=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(r)||[]}function X(e){const[t,r]=e.split(/:(.+)/,2);return[(0,D.trim)(t),(0,D.trim)(r)]}function Y(e){const[t,r]=e.split("(",2);return[t,r?r.slice(0,-1):""]}require("@walkeros/core"),require("@walkeros/web-core"),Array.from({length:101},(e,t)=>t/100);var Z=require("@walkeros/core"),F=require("@walkeros/collector");function Q(e,t,r,o,n,a,i){const{elb:s,settings:c}=e;if((0,Z.isString)(t)&&t.startsWith("walker ")){if("walker init"===t&&e.initScope){const t=function(e,t){if(te(e))return[e];if(Array.isArray(e)){const t=[];for(const r of e)te(r)&&t.push(r);return t}if(void 0===e){const e=t.scope;if(te(e))return[e];if(void 0!==globalThis.document)return[globalThis.document]}return[]}(r,c);for(const r of t)e.initScope({...e,settings:{...c,scope:r}});return Promise.resolve((0,F.createPushResult)({ok:!0}))}return s(t,r)}if((0,Z.isObject)(t)){const e=t;if(!e.source&&c.scope){const t=c.scope.ownerDocument||c.scope,r=t.defaultView;e.source=ee(r,t)}return!e.globals&&c.scope&&(e.globals=re(c.scope)?W(c.prefix,c.scope):{}),s(e)}const[l]=String((0,Z.isObject)(t)?t.name:t).split(" ");let u,d=(0,Z.isObject)(r)?r:{},p={},m=!1;if((0,Z.isElementOrDocument)(r)&&(u=r,m=!0),(0,Z.isElementOrDocument)(n)?u=n:(0,Z.isObject)(n)&&Object.keys(n).length&&(p=n),u){const e=_(c.prefix||"data-elb",u).find(e=>e.entity===l);e&&(m&&(d=e.data),e.context&&(p=e.context))}const b=c.scope?c.scope.ownerDocument||c.scope:void 0,f=null==b?void 0:b.defaultView;"page"===l&&f&&(d.id=d.id||f.location.pathname);const g=c.scope&&re(c.scope)?W(c.prefix,c.scope):{};return s({name:String(t||""),data:d,context:p,globals:g,nested:a,custom:i,trigger:(0,Z.isString)(o)?o:"",source:f&&b?ee(f,b):void 0})}function ee(e,t){return{type:"browser",platform:"web",url:e.location.href,referrer:t.referrer}}function te(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof Element&&e instanceof Element)return!0;if("undefined"!=typeof Document&&e instanceof Document)return!0;if("undefined"!=typeof ShadowRoot&&e instanceof ShadowRoot)return!0;if("nodeType"in e){const t=e.nodeType;return 1===t||9===t||11===t}return!1}function re(e){return 11!==e.nodeType}var oe=async(e,t)=>{const r=(null==t?void 0:t.sourceId)||"browser";let o;const n=document,a=window;return{get flow(){return o},trigger:(t,i)=>async s=>{var c;if("load"===t||!t){const e="object"==typeof i&&null!==i?i:{};if(e.url){const t=new URL(e.url);a.history.replaceState({},"",t.pathname)}e.title&&(n.title=e.title),e.referrer&&Object.defineProperty(n,"referrer",{value:e.referrer,configurable:!0})}if(s&&(n.body.innerHTML=s),!o){const t=await(0,T.startFlow)({...e,run:null==(c=e.run)||c});o={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;const l="string"==typeof i?i:void 0,u=l?n.querySelector(l):null;if(!u)return void console.warn(`Trigger: element not found for selector "${l}"`);const d=o.collector.sources[r];if(!d)return void console.warn(`Trigger: source "${r}" not found in collector`);const p={elb:o.elb,settings:d.config.settings,registry:{scopes:new Map,elements:new WeakMap,visibility:new WeakMap,destroyed:!1}};await async function(e,t,r){const o=U(t,r,e.settings.prefix);return Promise.all(o.map(t=>Q(e,{name:`${t.entity} ${t.action}`,...t,trigger:r})))}(p,u,t)}}},ne=(e,t)=>{if(!e||"object"!=typeof e)return;const r=e,o=t.document,n=t.window,a=()=>{var e,t;if(!r.attributes)return;const n=(null==(t=null==(e=r.element)?void 0:e.match(/^(\w+)/))?void 0:t[1])||"div",a=o.createElement(n);for(const[e,t]of Object.entries(r.attributes))a.setAttribute(e,t);if(r.children)for(const e of r.children){const t=o.createElement("div");for(const[r,o]of Object.entries(e))t.setAttribute(r,o);a.appendChild(t)}return o.body.appendChild(a),a};if(!r.trigger||"load"===r.trigger){if(r.url){const e=new URL(r.url);n.history.replaceState({},"",e.pathname)}return r.title&&(o.title=r.title),r.referrer&&Object.defineProperty(o,"referrer",{value:r.referrer}),void a()}return()=>{const e=a();if(e)switch(r.trigger){case"click":e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));break;case"submit":e.dispatchEvent(new Event("submit",{bubbles:!0}));break;case"hover":e.dispatchEvent(new MouseEvent("mouseenter",{bubbles:!0}));break;case"scroll":n.dispatchEvent(new Event("scroll"))}}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,n=Object.prototype.hasOwnProperty,a=(e,r)=>{for(var o in r)t(e,o,{get:r[o],enumerable:!0})},i={};a(i,{examples:()=>w,schemas:()=>s}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of o(a))n.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=r(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};a(s,{DataAttributePrefix:()=>d,JavaScriptVarName:()=>p,ScopeSelector:()=>m,SettingsSchema:()=>f,TaggerSchema:()=>g,settings:()=>h,tagger:()=>v});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.string().min(1).regex(/^[a-z][a-z0-9-]*$/,"Must be lowercase kebab-case").describe("Prefix for data attributes on DOM elements"),p=u.z.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),m=u.z.string().describe('DOM scope for event tracking (CSS selector or "document")').optional(),b=l.z.union([l.z.boolean(),l.z.string(),l.z.any().describe("Elb.Layer array for async command queuing")]),f=l.z.object({prefix:d.default("data-elb").describe("Prefix for data attributes (default: data-elb)"),scope:m.describe("DOM scope for event tracking (default: document)"),pageview:l.z.boolean().default(!0).describe("Enable automatic pageview tracking"),capture:l.z.boolean().default(!0).describe("Read click/submit triggers in the capture phase so tagged elements are resolved at click time before app handlers run (set false for the previous bubble-phase behavior)"),elb:l.z.union([p,l.z.literal(!1)]).default("elb").describe("Name for global elb function, or false to install none"),name:l.z.string().describe("Custom name for source instance").optional(),elbLayer:b.default("elbLayer").describe("Enable elbLayer for async command queuing (boolean, string, or Elb.Layer)")}),g=require("@walkeros/core/dev").z.object({prefix:d.default("data-elb").describe("Custom prefix for generated data attributes")}),h=(0,c.zodToSchema)(f),v=(0,c.zodToSchema)(g),w={};a(w,{createTrigger:()=>oe,env:()=>y,step:()=>C,trigger:()=>ne});var y={};a(y,{push:()=>S});var k=()=>{},x=()=>()=>Promise.resolve({ok:!0}),E={error:k,warn:k,info:k,debug:k,throw:e=>{throw"string"==typeof e?new Error(e):e},json:k,scope:()=>E},S={get push(){return x()},get command(){return x()},get elb(){return x()},get window(){return{addEventListener:k,removeEventListener:k,location:{href:"https://example.com/page",pathname:"/page",search:"?query=test",hash:"#section",host:"example.com",hostname:"example.com",origin:"https://example.com",protocol:"https:"},document:{},navigator:{language:"en-US",userAgent:"Mozilla/5.0 (Test)"},screen:{width:1920,height:1080},innerWidth:1920,innerHeight:1080,pageXOffset:0,pageYOffset:0,scrollX:0,scrollY:0}},get document(){return{addEventListener:k,removeEventListener:k,querySelector:k,querySelectorAll:()=>[],getElementById:k,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:k,getAttribute:k,addEventListener:k,removeEventListener:k}),body:{appendChild:k,removeChild:k},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:E},C={};a(C,{clickEvent:()=>O,contextAndGlobals:()=>P,dataAttributeTypes:()=>$,impressionEvent:()=>q,nestedEntities:()=>j,pageView:()=>A,submitEvent:()=>z});var A={title:"Page view",description:"A page load trigger captures the current URL, title, and referrer as a walker page view event.",trigger:{type:"load",options:{url:"https://example.com/docs",title:"Documentation",referrer:"https://example.com/"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"Documentation",referrer:"https://example.com/",id:"/docs"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:"https://example.com/"}}]]},O={title:"Click event",description:"A button click with walker data attributes is captured as an entity action event with the mapped label data.",trigger:{type:"click",options:"button"},in:'<button data-elb="cta" data-elb-cta="label:Sign Up" data-elbaction="click:click">Sign Up</button>',out:[["elb",{name:"cta click",entity:"cta",action:"click",data:{label:"Sign Up"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},z={title:"Submit event",description:"A form submit with walker data attributes produces a signup complete event carrying the selected plan.",trigger:{type:"submit",options:"form"},in:'<form data-elb="signup" data-elb-signup="plan:premium" data-elbaction="submit:complete"></form>',out:[["elb",{name:"signup complete",entity:"signup",action:"complete",data:{plan:"premium"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"submit"}]]},q={title:"Impression event",description:"An intersection observer impression on a div with walker attributes emits a banner view event.",trigger:{type:"impression",options:"div"},in:'<div data-elb="banner" data-elb-banner="type:promotional;position:sidebar" data-elbaction="impression:view"></div>',out:[["elb",{name:"banner view",entity:"banner",action:"view",data:{type:"promotional",position:"sidebar"},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"impression"}]]},j={title:"Nested entities",description:"A page load produces a page view plus a product view whose nested size entity is captured on the product event.",trigger:{type:"load"},in:'<div data-elb="product" data-elb-product="id:SKU-42;name:Sneakers" data-elbaction="load:view"><div data-elb="size" data-elb-size="selected:large;inStock:true"></div></div>',out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""}}],["elb",{name:"product view",entity:"product",action:"view",data:{id:"SKU-42",name:"Sneakers"},context:{},globals:{},nested:[{entity:"size",data:{selected:"large",inStock:!0},context:{},nested:[]}],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"load"}]]},$={title:"Data attribute types",description:"Walker data attributes parse scalar, boolean, and array values into typed fields on the emitted event.",trigger:{type:"click",options:"div"},in:'<div data-elb="product" data-elb-product="price:99.99;available:true;colors[]:red;colors[]:blue" data-elbaction="click:select"></div>',out:[["elb",{name:"product select",entity:"product",action:"select",data:{price:99.99,available:!0,colors:["red","blue"]},context:{},globals:{},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},P={title:"Context and globals",description:"Walker context and globals attributes attach ambient metadata to events emitted by the browser source.",trigger:{type:"click",options:'[data-elb="cta"]'},in:'<div data-elbcontext="test:engagement_flow" data-elbglobals="language:en;plan:premium"><div data-elb="cta" data-elb-cta="label:Try Now" data-elbaction="click:signup">Try Now</div></div>',out:[["elb",{name:"cta signup",entity:"cta",action:"signup",data:{label:"Try Now"},context:{test:["engagement_flow",0]},globals:{language:"en",plan:"premium"},nested:[],source:{type:"browser",platform:"web",url:"https://example.com/",referrer:""},trigger:"click"}]]},T=require("@walkeros/collector"),D=(require("@walkeros/core"),require("@walkeros/collector"),require("@walkeros/web-core"),require("@walkeros/core")),L=require("@walkeros/collector"),R=require("@walkeros/web-core");function M(e,t,r=!0){return e+(t=null!=t?(r?"-":"")+t:"")}function N(e,t,r,o=!0){return K((0,R.getAttribute)(t,M(e,r,o))||"").reduce((e,r)=>{let[o,n]=X(r);if(!o)return e;if(n||(o.endsWith(":")&&(o=o.slice(0,-1)),n=""),n.startsWith("#")){n=n.slice(1);try{let e=t[n];e||"selected"!==n||(e=t.options[t.selectedIndex].text),n=String(e)}catch(e){n=""}}return o.endsWith("[]")?(o=o.slice(0,-2),(0,D.isArray)(e[o])||(e[o]=[]),e[o].push((0,D.castValue)(n))):e[o]=(0,D.castValue)(n),e},{})}function U(e,t,r=L.Const.Commands.Prefix){const o=[],{actions:n,nearestOnly:a}=function(e,t,r){let o=t;for(;o;){const t=(0,R.getAttribute)(o,M(e,L.Const.Commands.Actions,!1));if(t){const e=V(t);if(e[r])return{actions:e[r],nearestOnly:!1}}const n=(0,R.getAttribute)(o,M(e,L.Const.Commands.Action,!1));if(n){const e=V(n);if(e[r]||"click"!==r)return{actions:e[r]||[],nearestOnly:!0}}o=B(e,o)}return{actions:[],nearestOnly:!1}}(r,e,t);return n.length?(n.forEach(n=>{const i=K(n.actionParams||"",",").reduce((e,t)=>(e[(0,D.trim)(t)]=!0,e),{}),s=_(r,e,i,a);if(!s.length){const t="page",o=`[${M(r,t)}]`,[n,a]=G(e,o,r,t);s.push({entity:t,data:n,nested:[],context:a})}s.forEach(e=>{var r;o.push({entity:e.entity,action:n.action,data:e.data,trigger:t,context:e.context,nested:null!=(r=e.nested)?r:[]})})}),o):o}function W(e=L.Const.Commands.Prefix,t){if(!t)return{};const r=M(e,L.Const.Commands.Globals,!1);let o={};return J(t,`[${r}]`,t=>{o=(0,D.assign)(o,N(e,t,L.Const.Commands.Globals,!1))}),o}function V(e){const t={};return K(e).forEach(e=>{const[r,o]=X(e),[n,a]=Y(r);if(!n)return;let[i,s]=Y(o||"");i=i||n,t[n]||(t[n]=[]),t[n].push({trigger:n,triggerParams:a,action:i,actionParams:s})}),t}function _(e,t,r,o=!1){const n=[];let a=t;for(r=0!==Object.keys(r||{}).length?r:void 0;a;){const i=I(e,a,t,r);if(i&&(n.push(i),o))break;a=B(e,a)}return n}function I(e,t,r,o){const n=(0,R.getAttribute)(t,M(e));if(!n||o&&!o[n])return null;const a=[t],i=`[${M(e,n)}],[${M(e,"")}]`,s=M(e,L.Const.Commands.Link,!1);let c={};const l=[],[u,d]=G(r||t,i,e,n,!0);H(t,`[${s}]`,r=>{const[o,n]=X((0,R.getAttribute)(r,s));"parent"===n&&H(t.ownerDocument.body,`[${s}="${o}:child"]`,t=>{a.push(t);const r=I(e,t);r&&l.push(r)})});const p=[];a.forEach(e=>{e.matches(i)&&p.push(e),H(e,i,e=>p.push(e))});let m={};return p.forEach(t=>{m=(0,D.assign)(m,N(e,t,"")),c=(0,D.assign)(c,N(e,t,n))}),c=(0,D.assign)((0,D.assign)(m,c),u),a.forEach(t=>{H(t,`[${M(e)}]`,t=>{const r=I(e,t);r&&l.push(r)})}),{entity:n,data:c,context:d,nested:l}}function B(e,t){const r=M(e,L.Const.Commands.Link,!1);if(t.matches(`[${r}]`)){const[e,o]=X((0,R.getAttribute)(t,r));if("child"===o){const o=t.ownerDocument;let n=null;return J(o,`[${r}="${e}:parent"]`,e=>{n||(n=e)}),n}}const o=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof o.ShadowRoot?t.getRootNode().host:t.parentElement}function G(e,t,r,o,n=!1){let a={};const i={};let s=e;const c=`[${M(r,L.Const.Commands.Context,!1)}]`,l=L.Const.Commands.Scoped,u=`[${M(r,l,!1)}]`;let d=0;for(;s;)n&&l&&s.matches(u)&&(a=(0,D.assign)(N(r,s,l,!1),a)),s.matches(t)&&(a=(0,D.assign)(N(r,s,""),a),a=(0,D.assign)(N(r,s,o),a)),s.matches(c)&&(Object.entries(N(r,s,L.Const.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,d])}),++d),s=B(r,s);return[a,i]}function J(e,t,r){e.querySelectorAll(t).forEach(r)}function H(e,t,r){e.querySelectorAll(t).forEach(r);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&H(e.shadowRoot,t,r),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&H(e.shadowRoot,t,r)})}function K(e,t=";"){if(!e)return[];const r=new RegExp(`(?:[^${t}']+|'[^']*')+`,"ig");return e.match(r)||[]}function X(e){const[t,r]=e.split(/:(.+)/,2);return[(0,D.trim)(t),(0,D.trim)(r)]}function Y(e){const[t,r]=e.split("(",2);return[t,r?r.slice(0,-1):""]}require("@walkeros/core"),require("@walkeros/web-core"),Array.from({length:101},(e,t)=>t/100);var Z=require("@walkeros/core"),F=require("@walkeros/collector");function Q(e,t,r,o,n,a,i){var s;const{elb:c,push:l,settings:u}=e,d=null!=(s=e.root)?s:u.scope;if((0,Z.isString)(t)&&t.startsWith("walker ")){if("walker init"===t&&e.initScope){const t=function(e,t){if(te(e))return[e];if(Array.isArray(e)){const t=[];for(const r of e)te(r)&&t.push(r);return t}if(void 0===e){const e=t.scope;if(te(e))return[e];if(void 0!==globalThis.document)return[globalThis.document]}return[]}(r,u);for(const r of t)e.initScope({...e,settings:{...u,scope:r}});return Promise.resolve((0,F.createPushResult)({ok:!0}))}return c(t,r)}if((0,Z.isObject)(t)){const e=t;if(!e.source&&u.scope){const t=u.scope.ownerDocument||u.scope,r=t.defaultView;e.source=ee(r,t)}return!e.globals&&d&&(e.globals=re(d)?W(u.prefix,d):{}),l(e)}const[p]=String((0,Z.isObject)(t)?t.name:t).split(" ");let m,b=(0,Z.isObject)(r)?r:{},f={},g=!1;if((0,Z.isElementOrDocument)(r)&&(m=r,g=!0),(0,Z.isElementOrDocument)(n)?m=n:(0,Z.isObject)(n)&&Object.keys(n).length&&(f=n),m){const e=_(u.prefix||"data-elb",m).find(e=>e.entity===p);e&&(g&&(b=e.data),e.context&&(f=e.context))}const h=u.scope?u.scope.ownerDocument||u.scope:void 0,v=null==h?void 0:h.defaultView;"page"===p&&v&&(b.id=b.id||v.location.pathname);const w=d&&re(d)?W(u.prefix,d):{};return l({name:String(t||""),data:b,context:f,globals:w,nested:a,custom:i,trigger:(0,Z.isString)(o)?o:"",source:v&&h?ee(v,h):void 0})}function ee(e,t){return{type:"browser",platform:"web",url:e.location.href,referrer:t.referrer}}function te(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof Element&&e instanceof Element)return!0;if("undefined"!=typeof Document&&e instanceof Document)return!0;if("undefined"!=typeof ShadowRoot&&e instanceof ShadowRoot)return!0;if("nodeType"in e){const t=e.nodeType;return 1===t||9===t||11===t}return!1}function re(e){return 11!==e.nodeType}var oe=async(e,t)=>{const r=(null==t?void 0:t.sourceId)||"browser";let o;const n=document,a=window;return{get flow(){return o},trigger:(t,i)=>async s=>{var c;if("load"===t||!t){const e="object"==typeof i&&null!==i?i:{};if(e.url){const t=new URL(e.url);a.history.replaceState({},"",t.pathname)}e.title&&(n.title=e.title),e.referrer&&Object.defineProperty(n,"referrer",{value:e.referrer,configurable:!0})}if(s&&(n.body.innerHTML=s),!o){const t=await(0,T.startFlow)({...e,run:null==(c=e.run)||c});o={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;const l="string"==typeof i?i:void 0,u=l?n.querySelector(l):null;if(!u)return void console.warn(`Trigger: element not found for selector "${l}"`);const d=o.collector.sources[r];if(!d)return void console.warn(`Trigger: source "${r}" not found in collector`);const p={elb:o.elb,push:o.collector.push,settings:d.config.settings,registry:{scopes:new Map,elements:new WeakMap,visibility:new WeakMap,destroyed:!1}};await async function(e,t,r){const o=U(t,r,e.settings.prefix);return Promise.all(o.map(t=>Q(e,{name:`${t.entity} ${t.action}`,...t,trigger:r})))}(p,u,t)}}},ne=(e,t)=>{if(!e||"object"!=typeof e)return;const r=e,o=t.document,n=t.window,a=()=>{var e,t;if(!r.attributes)return;const n=(null==(t=null==(e=r.element)?void 0:e.match(/^(\w+)/))?void 0:t[1])||"div",a=o.createElement(n);for(const[e,t]of Object.entries(r.attributes))a.setAttribute(e,t);if(r.children)for(const e of r.children){const t=o.createElement("div");for(const[r,o]of Object.entries(e))t.setAttribute(r,o);a.appendChild(t)}return o.body.appendChild(a),a};if(!r.trigger||"load"===r.trigger){if(r.url){const e=new URL(r.url);n.history.replaceState({},"",e.pathname)}return r.title&&(o.title=r.title),r.referrer&&Object.defineProperty(o,"referrer",{value:r.referrer}),void a()}return()=>{const e=a();if(e)switch(r.trigger){case"click":e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));break;case"submit":e.dispatchEvent(new Event("submit",{bubbles:!0}));break;case"hover":e.dispatchEvent(new MouseEvent("mouseenter",{bubbles:!0}));break;case"scroll":n.dispatchEvent(new Event("scroll"))}}};//# sourceMappingURL=dev.js.map