{
  "$meta": {
    "package": "@walkeros/web-source-browser",
    "version": "4.2.1",
    "type": "source",
    "platform": [
      "web"
    ],
    "renderer": "browser",
    "docs": "https://www.walkeros.io/docs/sources/web/browser",
    "source": "https://github.com/elbwalker/walkerOS/tree/main/packages/web/sources/browser/src"
  },
  "schemas": {
    "settings": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "properties": {
        "prefix": {
          "default": "data-elb",
          "description": "Prefix for data attributes (default: data-elb)",
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-z][a-z0-9-]*$"
        },
        "scope": {
          "description": "DOM scope for event tracking (default: document)",
          "type": "string"
        },
        "pageview": {
          "default": true,
          "description": "Enable automatic pageview tracking",
          "type": "boolean"
        },
        "elb": {
          "default": "elb",
          "description": "Name for global elb function",
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-zA-Z_$][a-zA-Z0-9_$]*$"
        },
        "name": {
          "type": "string",
          "description": "Custom name for source instance"
        },
        "elbLayer": {
          "default": "elbLayer",
          "description": "Enable elbLayer for async command queuing (boolean, string, or Elb.Layer)",
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "string"
            },
            {
              "description": "Elb.Layer array for async command queuing"
            }
          ]
        }
      },
      "required": [],
      "additionalProperties": false
    },
    "tagger": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "properties": {
        "prefix": {
          "default": "data-elb",
          "description": "Custom prefix for generated data attributes",
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-z][a-z0-9-]*$"
        }
      },
      "required": [],
      "additionalProperties": false
    }
  },
  "examples": {
    "createTrigger": {
      "$code": "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 O({...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,d=l?n.querySelector(l):null;if(!d)return void console.warn(`Trigger: element not found for selector \"${l}\"`);const u=o.collector.sources[r];if(!u)return void console.warn(`Trigger: source \"${r}\" not found in collector`);const p={elb:o.elb,settings:u.config.settings};await async function(e,t,r){const o=_(t,r,e.settings.prefix);return Promise.all(o.map(t=>se(e,{name:`${t.entity} ${t.action}`,...t,trigger:r})))}(p,d,t)}}}"
    },
    "env": {
      "push": {
        "push": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "command": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "elb": {
          "$code": "()=>Promise.resolve({ok:!0})"
        },
        "window": {
          "addEventListener": {
            "$code": "()=>{}"
          },
          "removeEventListener": {
            "$code": "()=>{}"
          },
          "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
        },
        "document": {
          "addEventListener": {
            "$code": "()=>{}"
          },
          "removeEventListener": {
            "$code": "()=>{}"
          },
          "querySelector": {
            "$code": "()=>{}"
          },
          "querySelectorAll": {
            "$code": "()=>[]"
          },
          "getElementById": {
            "$code": "()=>{}"
          },
          "getElementsByClassName": {
            "$code": "()=>[]"
          },
          "getElementsByTagName": {
            "$code": "()=>[]"
          },
          "createElement": {
            "$code": "()=>({setAttribute:v,getAttribute:v,addEventListener:v,removeEventListener:v})"
          },
          "body": {
            "appendChild": {
              "$code": "()=>{}"
            },
            "removeChild": {
              "$code": "()=>{}"
            }
          },
          "documentElement": {
            "scrollTop": 0,
            "scrollLeft": 0
          },
          "readyState": "complete",
          "title": "Test Page",
          "referrer": "",
          "cookie": ""
        },
        "logger": {
          "error": {
            "$code": "()=>{}"
          },
          "warn": {
            "$code": "()=>{}"
          },
          "info": {
            "$code": "()=>{}"
          },
          "debug": {
            "$code": "()=>{}"
          },
          "throw": {
            "$code": "e=>{throw\"string\"==typeof e?new Error(e):e}"
          },
          "json": {
            "$code": "()=>{}"
          },
          "scope": {
            "$code": "()=>w"
          }
        }
      }
    },
    "step": {
      "clickEvent": {
        "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"
            }
          ]
        ]
      },
      "contextAndGlobals": {
        "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"
            }
          ]
        ]
      },
      "dataAttributeTypes": {
        "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": true,
                "colors": [
                  "red",
                  "blue"
                ]
              },
              "context": {},
              "globals": {},
              "nested": [],
              "source": {
                "type": "browser",
                "platform": "web",
                "url": "https://example.com/",
                "referrer": ""
              },
              "trigger": "click"
            }
          ]
        ]
      },
      "impressionEvent": {
        "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"
            }
          ]
        ]
      },
      "nestedEntities": {
        "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": true
                  },
                  "context": {},
                  "nested": []
                }
              ],
              "source": {
                "type": "browser",
                "platform": "web",
                "url": "https://example.com/",
                "referrer": ""
              },
              "trigger": "load"
            }
          ]
        ]
      },
      "pageView": {
        "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/"
              }
            }
          ]
        ]
      },
      "submitEvent": {
        "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"
            }
          ]
        ]
      }
    },
    "trigger": {
      "$code": "(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\"))}}}"
    }
  }
}