@walkeros/web-source-browser 4.8.0 → 4.8.1-next-1792019907609

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/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,r)=>{for(var o in r)e(t,o,{get:r[o],enumerable:!0})},r={};t(r,{DataAttributePrefix:()=>i,JavaScriptVarName:()=>s,ScopeSelector:()=>c,SettingsSchema:()=>u,TaggerSchema:()=>p,settings:()=>m,tagger:()=>f});import{zodToSchema as o}from"@walkeros/core/dev";import{z as n}from"@walkeros/core/dev";import{z as a}from"@walkeros/core/dev";var i=a.string().min(1).regex(/^[a-z][a-z0-9-]*$/,"Must be lowercase kebab-case").describe("Prefix for data attributes on DOM elements"),s=a.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),c=a.string().describe('DOM scope for event tracking (CSS selector or "document")').optional(),l=n.union([n.boolean(),n.string(),n.any().describe("Elb.Layer array for async command queuing")]),u=n.object({prefix:i.default("data-elb").describe("Prefix for data attributes (default: data-elb)"),scope:c.describe("DOM scope for event tracking (default: document)"),pageview:n.boolean().default(!0).describe("Enable automatic pageview tracking"),capture:n.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)"),history:n.boolean().default(!1).describe("Single-page apps: send a page view on every route change (pushState, replaceState with a new path, back and forward) and pick up tagged elements as the new route renders"),elb:n.union([s,n.literal(!1)]).default("elb").describe("Name for global elb function, or false to install none"),name:n.string().describe("Custom name for source instance").optional(),elbLayer:l.default("elbLayer").describe("Enable elbLayer for async command queuing (boolean, string, or Elb.Layer)")});import{z as d}from"@walkeros/core/dev";var p=d.object({prefix:i.default("data-elb").describe("Custom prefix for generated data attributes")}),m=o(u),f=o(p),b={};t(b,{createTrigger:()=>xe,env:()=>g,step:()=>x,trigger:()=>ke});var g={};t(g,{push:()=>y});var h=()=>{},v=()=>()=>Promise.resolve({ok:!0}),w={error:h,warn:h,info:h,debug:h,throw:e=>{throw"string"==typeof e?new Error(e):e},json:h,scope:()=>w},y={get push(){return v()},get command(){return v()},get elb(){return v()},get window(){return{addEventListener:h,removeEventListener:h,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:h,removeEventListener:h,querySelector:h,querySelectorAll:()=>[],getElementById:h,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:h,getAttribute:h,addEventListener:h,removeEventListener:h}),body:{appendChild:h,removeChild:h},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:w},x={};t(x,{clickEvent:()=>S,contextAndGlobals:()=>$,dataAttributeTypes:()=>O,impressionEvent:()=>A,nestedEntities:()=>C,pageView:()=>k,routeChange:()=>E,submitEvent:()=>L});var k={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/"}}]]},E={title:"Route change",description:"With history enabled, a single-page app route change sends a page view for the new URL, with the previous page as its referrer.",trigger:{type:"history",options:{url:"https://example.com/docs",path:"/pricing"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/docs"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:""}}],["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"https://example.com/docs",id:"/pricing"},context:{},globals:{},nested:void 0,custom:void 0,trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/pricing",referrer:""}}]]},S={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"}]]},L={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"}]]},A={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"}]]},C={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"}]]},O={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"}]]},$={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"}]]};import{isArray as T,isObject as j,isString as P}from"@walkeros/core";import{startFlow as R}from"@walkeros/collector";import{throttle as D,tryCatch as M}from"@walkeros/core";import{Const as z}from"@walkeros/collector";import{getAttribute as N}from"@walkeros/web-core";import{assign as U,castValue as q,isArray as W,trim as V}from"@walkeros/core";import{Const as I}from"@walkeros/collector";import{getAttribute as _,splitAttribute as B,splitKeyVal as G}from"@walkeros/web-core";function J(e,t,r=!0){return e+(t=null!=t?(r?"-":"")+t:"")}function H(e,t,r,o=!0){const n=_(t,J(e,r,o))||"";return B(n).reduce((e,r)=>{let[o,n]=G(r);if(!o)return e;if(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),W(e[o])||(e[o]=[]),e[o].push(q(n))):e[o]=q(n),e},{})}function K(e,t,r=I.Commands.Prefix){const o=[],{actions:n,nearestOnly:a}=function(e,t,r){let o=t;for(;o;){const t=_(o,J(e,I.Commands.Actions,!1));if(t){const e=Y(t);if(e[r])return{actions:e[r],nearestOnly:!1}}const n=_(o,J(e,I.Commands.Action,!1));if(n){const e=Y(n);if(e[r]||"click"!==r)return{actions:e[r]||[],nearestOnly:!0}}o=ee(e,o)}return{actions:[],nearestOnly:!1}}(r,e,t);return n.length?(n.forEach(n=>{const i=B(n.actionParams||"",",").reduce((e,t)=>(e[V(t)]=!0,e),{}),s=Z(r,e,i,a);if(!s.length){const t="page",o=`[${J(r,t)}]`,[n,a]=te(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 X(e=I.Commands.Prefix,t){if(!t)return{};const r=J(e,I.Commands.Globals,!1);let o={};return re(t,`[${r}]`,t=>{o=U(o,H(e,t,I.Commands.Globals,!1))}),o}function Y(e){const t={};return B(e).forEach(e=>{const[r,o]=G(e),[n,a]=ae(r);if(!n)return;let[i,s]=ae(o||"");i=i||n,t[n]||(t[n]=[]),t[n].push({trigger:n,triggerParams:a,action:i,actionParams:s})}),t}function Z(e,t,r,o=!1){const n=[];let a=t;for(r=0!==Object.keys(r||{}).length?r:void 0;a;){const i=Q(e,a,t,r);if(i&&(n.push(i),o))break;a=ee(e,a)}return n}var F=/^[\w\u0080-\uffff-]+$/;function Q(e,t,r,o){const n=_(t,J(e));if(!n||!F.test(n)||o&&!o[n])return null;const a=[t],i=`[${J(e,n)}],[${J(e,"")}]`,s=J(e,I.Commands.Link,!1);let c={};const l=[],[u,d]=te(r||t,i,e,n,!0);oe(t,`[${s}]`,r=>{const[o,n]=ne(r,s);"parent"===n&&oe(t.ownerDocument.body,`[${s}]`,t=>{const[r,n]=ne(t,s);if(r!==o||"child"!==n)return;a.push(t);const i=Q(e,t);i&&l.push(i)})});const p=[];a.forEach(e=>{e.matches(i)&&p.push(e),oe(e,i,e=>p.push(e))});let m={};return p.forEach(t=>{m=U(m,H(e,t,"")),c=U(c,H(e,t,n))}),c=U(U(m,c),u),a.forEach(t=>{oe(t,`[${J(e)}]`,t=>{const r=Q(e,t);r&&l.push(r)})}),{entity:n,data:c,context:d,nested:l}}function ee(e,t){const r=J(e,I.Commands.Link,!1);if(t.matches(`[${r}]`)){const[e,o]=ne(t,r);if("child"===o){const o=t.ownerDocument;let n=null;return re(o,`[${r}]`,t=>{const[o,a]=ne(t,r);n||o!==e||"parent"!==a||(n=t)}),n}}const o=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof o.ShadowRoot?t.getRootNode().host:t.parentElement}function te(e,t,r,o,n=!1){let a={};const i={};let s=e;const c=`[${J(r,I.Commands.Context,!1)}]`,l=I.Commands.Scoped,u=`[${J(r,l,!1)}]`;let d=0;for(;s;)n&&l&&s.matches(u)&&(a=U(H(r,s,l,!1),a)),s.matches(t)&&(a=U(H(r,s,""),a),a=U(H(r,s,o),a)),s.matches(c)&&(Object.entries(H(r,s,I.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,d])}),++d),s=ee(r,s);return[a,i]}function re(e,t,r){e.querySelectorAll(t).forEach(r)}function oe(e,t,r){e.querySelectorAll(t).forEach(r);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&oe(e.shadowRoot,t,r),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&oe(e.shadowRoot,t,r)})}function ne(e,t){return G(_(e,t))}function ae(e){const[t,r]=e.split("(",2);return[t,r?r.slice(0,-1):""]}import{tryCatch as ie}from"@walkeros/core";import{isVisible as se}from"@walkeros/web-core";Array.from({length:101},(e,t)=>t/100);import{isString as ce,isObject as le,isElementOrDocument as ue}from"@walkeros/core";import{createPushResult as de}from"@walkeros/collector";function pe(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 me(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(ce(t)&&t.startsWith("walker ")){if("walker init"===t&&e.initScope){const t=function(e,t){if(pe(e))return[e];if(Array.isArray(e)){const t=[];for(const r of e)pe(r)&&t.push(r);return t}if(void 0===e){const e=t.scope;if(pe(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(de({ok:!0}))}return c(t,r)}if(le(t)){const r=t;if(!r.source&&u.scope){const t=u.scope.ownerDocument||u.scope,o=t.defaultView;r.source=fe(o,t,e.href)}return!r.globals&&d&&(r.globals=be(d)?X(u.prefix,d):{}),l(r)}const[p]=String(le(t)?t.name:t).split(" ");let m,f=le(r)?r:{},b={},g=!1;if(ue(r)&&(m=r,g=!0),ue(n)?m=n:le(n)&&Object.keys(n).length&&(b=n),m){const e=Z(u.prefix||"data-elb",m).find(e=>e.entity===p);e&&(g&&(f=e.data),e.context&&(b=e.context))}const h=u.scope?u.scope.ownerDocument||u.scope:void 0,v=null==h?void 0:h.defaultView;"page"===p&&v&&(f.id=f.id||(e.href?new URL(e.href):v.location).pathname);const w=d&&be(d)?X(u.prefix,d):{};return l({name:String(t||""),data:f,context:b,globals:w,nested:a,custom:i,trigger:ce(o)?o:"",source:v&&h?fe(v,h,e.href):void 0})}function fe(e,t,r){return{type:"browser",platform:"web",url:r||e.location.href,referrer:t.referrer}}function be(e){return 11!==e.nodeType}import{isBoolean as ge,isObject as he,isString as ve}from"@walkeros/core";function we(e={},t){return{prefix:"data-elb",pageview:!0,capture:!0,history:!1,elb:"elb",elbLayer:"elbLayer",scope:t||void 0,...e}}function ye(e){if(!he(e))return we();const t={};return ve(e.prefix)&&(t.prefix=e.prefix),ge(e.pageview)&&(t.pageview=e.pageview),ge(e.capture)&&(t.capture=e.capture),ge(e.history)&&(t.history=e.history),ve(e.name)&&(t.name=e.name),(ve(e.elb)||!1===e.elb)&&(t.elb=e.elb),(ve(e.elbLayer)||ge(e.elbLayer))&&(t.elbLayer=e.elbLayer),pe(e.scope)&&(t.scope=e.scope),we(t)}var xe=async(e,t)=>{const r=j(t)&&P(t.sourceId)&&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||"history"===t||!t){const e=Le(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 R({...e,run:null==(c=e.run)||c});o={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;if("history"===t){const e=j(i)?Ee(i.path):void 0;return e&&a.history.pushState({},"",e),void await new Promise(e=>setTimeout(e,0))}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:ye(d.config.settings),registry:{scopes:new Map,elements:new WeakMap,visibility:new WeakMap,destroyed:!1}};await async function(e,t,r){const o=K(t,r,e.settings.prefix);return Promise.all(o.map(t=>me(e,{name:`${t.entity} ${t.action}`,...t,trigger:r})))}(p,u,t)}}},ke=(e,t)=>{const r=function(e){var t;if(!j(e))return;const r=T(e.children)?e.children.map(Se).filter(Ae):void 0;return{...Le(e),trigger:null!=(t=Ee(e.trigger))?t:"",element:Ee(e.element),attributes:Se(e.attributes),children:r}}(e),o=t.document,n=t.window;if(!r||("object"!=typeof(a=o)||null===a||!("createElement"in a))||!function(e){return"object"==typeof e&&null!==e&&"addEventListener"in e}(n))return;var a;const i=()=>{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 i()}return()=>{const e=i();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"))}}};function Ee(e){return P(e)?e:void 0}function Se(e){if(!j(e))return;const t={};for(const[r,o]of Object.entries(e))P(o)&&(t[r]=o);return t}function Le(e){return j(e)?{url:Ee(e.url),title:Ee(e.title),referrer:Ee(e.referrer)}:{}}function Ae(e){return void 0!==e}export{b as examples,r as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,r)=>{for(var o in r)e(t,o,{get:r[o],enumerable:!0})},r={};t(r,{DataAttributePrefix:()=>i,JavaScriptVarName:()=>s,ScopeSelector:()=>c,SettingsSchema:()=>u,TaggerSchema:()=>p,settings:()=>m,tagger:()=>f});import{zodToSchema as o}from"@walkeros/core/dev";import{z as n}from"@walkeros/core/dev";import{z as a}from"@walkeros/core/dev";var i=a.string().min(1).regex(/^[a-z][a-z0-9-]*$/,"Must be lowercase kebab-case").describe("Prefix for data attributes on DOM elements"),s=a.string().min(1).regex(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/,"Must be a valid JavaScript identifier").describe("JavaScript variable name"),c=a.string().describe('DOM scope for event tracking (CSS selector or "document")').optional(),l=n.union([n.boolean(),n.string(),n.any().describe("Elb.Layer array for async command queuing")]),u=n.object({prefix:i.default("data-elb").describe("Prefix for data attributes (default: data-elb)"),scope:c.describe("DOM scope for event tracking (default: document)"),pageview:n.boolean().default(!0).describe("Enable automatic pageview tracking"),capture:n.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)"),history:n.boolean().default(!1).describe("Single-page apps: send a page view on every route change (pushState, replaceState with a new path, back and forward) and pick up tagged elements as the new route renders"),elb:n.union([s,n.literal(!1)]).default("elb").describe("Name for global elb function, or false to install none"),name:n.string().describe("Custom name for source instance").optional(),elbLayer:l.default("elbLayer").describe("Enable elbLayer for async command queuing (boolean, string, or Elb.Layer)")});import{z as d}from"@walkeros/core/dev";var p=d.object({prefix:i.default("data-elb").describe("Custom prefix for generated data attributes")}),m=o(u),f=o(p),b={};t(b,{createTrigger:()=>we,env:()=>g,step:()=>k,trigger:()=>ye});var g={};t(g,{push:()=>y});var h=()=>{},v=()=>()=>Promise.resolve({ok:!0}),w={error:h,warn:h,info:h,debug:h,throw:e=>{throw"string"==typeof e?new Error(e):e},json:h,scope:()=>w},y={get push(){return v()},get command(){return v()},get elb(){return v()},get window(){return{addEventListener:h,removeEventListener:h,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:h,removeEventListener:h,querySelector:h,querySelectorAll:()=>[],getElementById:h,getElementsByClassName:()=>[],getElementsByTagName:()=>[],createElement:()=>({setAttribute:h,getAttribute:h,addEventListener:h,removeEventListener:h}),body:{appendChild:h,removeChild:h},documentElement:{scrollTop:0,scrollLeft:0},readyState:"complete",title:"Test Page",referrer:"",cookie:""}},logger:w},k={};t(k,{clickEvent:()=>S,contextAndGlobals:()=>O,dataAttributeTypes:()=>$,impressionEvent:()=>C,nestedEntities:()=>L,pageView:()=>x,routeChange:()=>E,submitEvent:()=>A});var x={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:{},trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:"https://example.com/"}}]]},E={title:"Route change",description:"With history enabled, a single-page app route change sends a page view for the new URL, with the previous page as its referrer.",trigger:{type:"history",options:{url:"https://example.com/docs",path:"/pricing"}},in:"",out:[["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"",id:"/docs"},context:{},globals:{},trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/docs",referrer:""}}],["elb",{name:"page view",data:{domain:"example.com",title:"",referrer:"https://example.com/docs",id:"/pricing"},context:{},globals:{},trigger:"load",source:{type:"browser",platform:"web",url:"https://example.com/pricing",referrer:""}}]]},S={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"}]]},A={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"}]]},C={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"}]]},L={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:{},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"}]]},O={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"}]]};import{isArray as T,isObject as P,isString as j}from"@walkeros/core";import{startFlow as R}from"@walkeros/collector";import{throttle as D,tryCatch as M}from"@walkeros/core";import{Const as z}from"@walkeros/collector";import{getAttribute as N}from"@walkeros/web-core";import{assign as U,castValue as q,isArray as W,trim as I}from"@walkeros/core";import{Const as V}from"@walkeros/collector";import{getAttribute as _,splitAttribute as B,splitKeyVal as G}from"@walkeros/web-core";function J(e,t,r=!0){return e+(t=null!=t?(r?"-":"")+t:"")}function H(e,t,r,o=!0){const n=_(t,J(e,r,o))||"";return B(n).reduce((e,r)=>{let[o,n]=G(r);if(!o)return e;if(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),W(e[o])||(e[o]=[]),e[o].push(q(n))):e[o]=q(n),e},{})}function K(e,t,r=V.Commands.Prefix){const o=[],{actions:n,nearestOnly:a}=function(e,t,r){let o=t;for(;o;){const t=_(o,J(e,V.Commands.Actions,!1));if(t){const e=X(t);if(e[r])return{actions:e[r],nearestOnly:!1}}const n=_(o,J(e,V.Commands.Action,!1));if(n){const e=X(n);if(e[r]||"click"!==r)return{actions:e[r]||[],nearestOnly:!0}}o=F(e,o)}return{actions:[],nearestOnly:!1}}(r,e,t);return n.length?(n.forEach(n=>{const i=B(n.actionParams||"",",").reduce((e,t)=>(e[I(t)]=!0,e),{}),s=function(e,t,r,o=!1){const n=[];let a=t;r=0!==Object.keys(r||{}).length?r:void 0;for(;a;){const i=Z(e,a,t,r);if(i&&(n.push(i),o))break;a=F(e,a)}return n}(r,e,i,a);if(!s.length){const t="page",o=`[${J(r,t)}]`,[n,a]=Q(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 X(e){const t={};return B(e).forEach(e=>{const[r,o]=G(e),[n,a]=oe(r);if(!n)return;let[i,s]=oe(o||"");i=i||n,t[n]||(t[n]=[]),t[n].push({trigger:n,triggerParams:a,action:i,actionParams:s})}),t}var Y=/^[\w\u0080-\uffff-]+$/;function Z(e,t,r,o){const n=_(t,J(e));if(!n||!Y.test(n)||o&&!o[n])return null;const a=[t],i=`[${J(e,n)}],[${J(e,"")}]`,s=J(e,V.Commands.Link,!1);let c={};const l=[],[u,d]=Q(r||t,i,e,n,!0);te(t,`[${s}]`,r=>{const[o,n]=re(r,s);"parent"===n&&te(t.ownerDocument.body,`[${s}]`,t=>{const[r,n]=re(t,s);if(r!==o||"child"!==n)return;a.push(t);const i=Z(e,t);i&&l.push(i)})});const p=[];a.forEach(e=>{e.matches(i)&&p.push(e),te(e,i,e=>p.push(e))});let m={};return p.forEach(t=>{m=U(m,H(e,t,"")),c=U(c,H(e,t,n))}),c=U(U(m,c),u),a.forEach(t=>{te(t,`[${J(e)}]`,t=>{const r=Z(e,t);r&&l.push(r)})}),{entity:n,data:c,context:d,nested:l}}function F(e,t){const r=J(e,V.Commands.Link,!1);if(t.matches(`[${r}]`)){const[e,o]=re(t,r);if("child"===o){const o=t.ownerDocument;let n=null;return ee(o,`[${r}]`,t=>{const[o,a]=re(t,r);n||o!==e||"parent"!==a||(n=t)}),n}}const o=t.ownerDocument.defaultView;return!t.parentElement&&t.getRootNode&&t.getRootNode()instanceof o.ShadowRoot?t.getRootNode().host:t.parentElement}function Q(e,t,r,o,n=!1){let a={};const i={};let s=e;const c=`[${J(r,V.Commands.Context,!1)}]`,l=V.Commands.Scoped,u=`[${J(r,l,!1)}]`;let d=0;for(;s;)n&&l&&s.matches(u)&&(a=U(H(r,s,l,!1),a)),s.matches(t)&&(a=U(H(r,s,""),a),a=U(H(r,s,o),a)),s.matches(c)&&(Object.entries(H(r,s,V.Commands.Context,!1)).forEach(([e,t])=>{t&&!i[e]&&(i[e]=[t,d])}),++d),s=F(r,s);return[a,i]}function ee(e,t,r){e.querySelectorAll(t).forEach(r)}function te(e,t,r){e.querySelectorAll(t).forEach(r);e instanceof(e.ownerDocument||e).defaultView.Element&&e.shadowRoot&&te(e.shadowRoot,t,r),e.querySelectorAll("*").forEach(e=>{e.shadowRoot&&te(e.shadowRoot,t,r)})}function re(e,t){return G(_(e,t))}function oe(e){const[t,r]=e.split("(",2);return[t,r?r.slice(0,-1):""]}import{tryCatch as ne}from"@walkeros/core";import{isVisible as ae}from"@walkeros/web-core";Array.from({length:101},(e,t)=>t/100);import{isString as ie,isObject as se}from"@walkeros/core";import{createPushResult as ce,ELB_IGNORED_ARGUMENTS as le}from"@walkeros/collector";function ue(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 de(e,t,r,...o){var n;const{elb:a,push:i,settings:s}=e,c=null!=(n=e.root)?n:s.scope;if(ie(t)&&t.startsWith("walker ")){if(pe(o)&&me(e,t),"walker init"===t&&e.initScope){const t=function(e,t){if(ue(e))return[e];if(Array.isArray(e)){const t=[];for(const r of e)ue(r)&&t.push(r);return t}if(void 0===e){const e=t.scope;if(ue(e))return[e];if(void 0!==globalThis.document)return[globalThis.document]}return[]}(r,s);for(const r of t)e.initScope({...e,settings:{...s,scope:r}});return Promise.resolve(ce({ok:!0}))}return a(t,r)}const l=s.scope?s.scope.ownerDocument||s.scope:void 0,u=null==l?void 0:l.defaultView,d=u&&l?(p=u,m=l,{type:"browser",platform:"web",url:e.href||p.location.href,referrer:m.referrer}):void 0;var p,m;const f=c&&11!==c.nodeType?function(e=V.Commands.Prefix,t){if(!t)return{};const r=J(e,V.Commands.Globals,!1);let o={};return ee(t,`[${r}]`,t=>{o=U(o,H(e,t,V.Commands.Globals,!1))}),o}(s.prefix,c):{};if(se(t)){(void 0!==r||pe(o))&&me(e,String(t.name));const n={...t};return!n.source&&d&&(n.source=d),n.globals={...f,...n.globals},i(n)}const b=String(t||"");(pe(o)||void 0!==r&&!se(r))&&me(e,b);return i({name:b,data:se(r)?{...r}:{},globals:f,trigger:"",source:d})}function pe(e){return e.some(e=>void 0!==e)}function me(e,t){const{registry:r,logger:o}=e;r.ignoredArguments.has(t)||(r.ignoredArguments.add(t),o.error(le,{event:t}))}import{isBoolean as fe,isObject as be,isString as ge}from"@walkeros/core";function he(e={},t){return{prefix:"data-elb",pageview:!0,capture:!0,history:!1,elb:"elb",elbLayer:"elbLayer",scope:t||void 0,...e}}function ve(e){if(!be(e))return he();const t={};return ge(e.prefix)&&(t.prefix=e.prefix),fe(e.pageview)&&(t.pageview=e.pageview),fe(e.capture)&&(t.capture=e.capture),fe(e.history)&&(t.history=e.history),ge(e.name)&&(t.name=e.name),(ge(e.elb)||!1===e.elb)&&(t.elb=e.elb),(ge(e.elbLayer)||fe(e.elbLayer))&&(t.elbLayer=e.elbLayer),ue(e.scope)&&(t.scope=e.scope),he(t)}var we=async(e,t)=>{const r=P(t)&&j(t.sourceId)&&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||"history"===t||!t){const e=Ee(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 R({...e,run:null==(c=e.run)||c});o={collector:t.collector,elb:t.elb}}if(!t||"load"===t)return;if("history"===t){const e=P(i)?ke(i.path):void 0;return e&&a.history.pushState({},"",e),void await new Promise(e=>setTimeout(e,0))}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:ve(d.config.settings),registry:{scopes:new Map,elements:new WeakMap,visibility:new WeakMap,destroyed:!1,ignoredArguments:new Set},logger:o.collector.logger};await async function(e,t,r){const o=K(t,r,e.settings.prefix);return Promise.all(o.map(t=>de(e,{name:`${t.entity} ${t.action}`,...t,trigger:r})))}(p,u,t)}}},ye=(e,t)=>{const r=function(e){var t;if(!P(e))return;const r=T(e.children)?e.children.map(xe).filter(Se):void 0;return{...Ee(e),trigger:null!=(t=ke(e.trigger))?t:"",element:ke(e.element),attributes:xe(e.attributes),children:r}}(e),o=t.document,n=t.window;if(!r||("object"!=typeof(a=o)||null===a||!("createElement"in a))||!function(e){return"object"==typeof e&&null!==e&&"addEventListener"in e}(n))return;var a;const i=()=>{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 i()}return()=>{const e=i();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"))}}};function ke(e){return j(e)?e:void 0}function xe(e){if(!P(e))return;const t={};for(const[r,o]of Object.entries(e))j(o)&&(t[r]=o);return t}function Ee(e){return P(e)?{url:ke(e.url),title:ke(e.title),referrer:ke(e.referrer)}:{}}function Se(e){return void 0!==e}export{b as examples,r as schemas};//# sourceMappingURL=dev.mjs.map