{"version":3,"sources":["../src/index.ts","../src/trigger.ts","../src/walker.ts","../src/triggerVisible.ts","../src/translation.ts","../src/elbLayer.ts","../src/config.ts","../src/types/index.ts","../src/tagger.ts"],"sourcesContent":["import type { Source, WalkerOS, On } from '@walkeros/core';\nimport type { Scope, Types, Env } from './types';\nimport type {\n  BrowserPushData,\n  BrowserPushOptions,\n  BrowserPushContext,\n  BrowserPush,\n  BrowserArguments,\n} from './types/elb';\nimport { isString } from '@walkeros/core';\nimport { createPushResult } from '@walkeros/collector';\nimport {\n  initTriggers,\n  initScopeTrigger,\n  processLoadTriggers,\n  ready,\n  destroyTriggers,\n} from './trigger';\nimport { destroyVisibilityTracking } from './triggerVisible';\nimport { initElbLayer, drainNonWalkerEvents } from './elbLayer';\nimport { translateToCoreCollector } from './translation';\nimport { getPageViewData } from './walker';\nimport { getConfig } from './config';\n\nexport * as SourceBrowser from './types';\n\n/**\n * Window-scoped single-instance sentinel. The browser source must be\n * single-instance per window: one elbLayer adoption, one set of DOM\n * listeners, one `window.elb`. A second/synchronous load of the tag on the\n * same page is a SEPARATE module instance, so a module-scoped counter cannot\n * see it (each load starts at 0). The marker therefore lives on the window\n * itself. A Symbol key avoids collision with page globals and is\n * non-enumerable by nature.\n */\nconst SINGLE_INSTANCE_KEY = Symbol.for('@walkeros/web-source-browser:instance');\n\ntype EnvWindow = Window & typeof globalThis;\n\nfunction resolveGuardWindow(\n  envWindow: EnvWindow | undefined,\n): EnvWindow | undefined {\n  return (\n    envWindow ||\n    (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined)\n  );\n}\n\n/** For tests only. Clears the window-scoped single-instance sentinel. */\nexport function __resetInstanceCountForTests(): void {\n  const win = resolveGuardWindow(undefined);\n  if (win) Reflect.deleteProperty(win, SINGLE_INSTANCE_KEY);\n}\n\n/**\n * Inert source instance returned on a second load within the same window.\n * It satisfies the `Source.Instance` contract but performs no side effects:\n * `init` does not adopt elbLayer or bind DOM triggers, `push` resolves to a\n * successful no-op result, and `on`/`destroy` do nothing. This keeps a double\n * load from re-adopting `window.elbLayer` (the production crash vector)\n * without surfacing an error to the host page.\n */\nfunction createInertInstance(): Source.Instance<Types> {\n  const fullConfig: Source.Config<Types> = {\n    settings: getConfig({}, undefined),\n  };\n  const push: BrowserPush = ((..._args: Parameters<BrowserArguments>) =>\n    Promise.resolve(createPushResult({ ok: true }))) satisfies BrowserPush;\n  return {\n    type: 'browser',\n    config: fullConfig,\n    push,\n    on: async () => {},\n    init: async () => {},\n    destroy: async () => {},\n  };\n}\n\n// Export walker utility functions\nexport {\n  getAllEvents,\n  getEvents,\n  getGlobals,\n  getElbAttributeName,\n  getElbValues,\n} from './walker';\n\n// Export tagger functionality\nexport { createTagger } from './tagger';\nexport type { TaggerConfig, TaggerInstance } from './tagger';\n\n/**\n * Browser source implementation using environment injection.\n *\n * The factory body is side-effect-free: it constructs the Instance and\n * captures closure state. All eager setup (elbLayer drain, DOM listeners,\n * `window.elb` assignment) lives in the `init` lifecycle method, which\n * the collector calls after every source factory has registered. The\n * collector strictly gates `on()` delivery: lifecycle events are queued\n * in `instance.queueOn` until the source is started.\n */\nexport const sourceBrowser: Source.Init<Types> = async (context) => {\n  const { config, env, logger } = context;\n  const { elb, command, window, document } = env;\n\n  const userSettings = config?.settings || {};\n  const actualWindow =\n    window ||\n    (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n  const actualDocument =\n    document ||\n    (typeof globalThis.document !== 'undefined'\n      ? globalThis.document\n      : undefined);\n\n  // Single-instance per window. A second load on the same page is a separate\n  // module instance, so the marker lives on the window, not in module scope.\n  // Window-less environments (SSR/node/test without a window) are not guarded.\n  const guardWindow = resolveGuardWindow(actualWindow);\n  if (guardWindow) {\n    if (Reflect.get(guardWindow, SINGLE_INSTANCE_KEY))\n      return createInertInstance();\n    // Set before init() runs so a synchronous second load is caught before\n    // this first instance performs its own factory/init side effects.\n    Object.defineProperty(guardWindow, SINGLE_INSTANCE_KEY, {\n      value: true,\n      enumerable: false,\n      configurable: true,\n      writable: false,\n    });\n  }\n\n  const settings: Source.Settings<Types> = getConfig(\n    userSettings,\n    actualDocument as Document | undefined,\n  );\n\n  const fullConfig: Source.Config<Types> = {\n    settings,\n  };\n\n  const translationContext = {\n    elb,\n    settings,\n    initScope: initScopeTrigger,\n  };\n\n  // Helper to send pageview event if enabled\n  const sendPageview = (s: Source.Settings<Types>) => {\n    if (!s.pageview) return;\n    const [data, contextData] = getPageViewData(\n      s.prefix || 'data-elb',\n      s.scope as Scope,\n    );\n    translateToCoreCollector(\n      translationContext,\n      'page view',\n      data,\n      'load',\n      contextData,\n    );\n  };\n\n  // Lifecycle method — eager. The collector calls this AFTER all source\n  // factories have registered. Side effects allowed: drains walker\n  // commands from window.elbLayer, sets up DOM listeners, overrides\n  // elbLayer.push for live captures.\n  const init = async () => {\n    if (!actualWindow || !actualDocument) return;\n\n    if (settings.elbLayer !== false && elb) {\n      initElbLayer(elb, {\n        name: isString(settings.elbLayer) ? settings.elbLayer : 'elbLayer',\n        prefix: settings.prefix,\n        window: actualWindow as Window,\n        logger,\n      });\n    }\n\n    // Setup global triggers (click, submit) when DOM is ready\n    await ready(initTriggers, translationContext, settings);\n\n    // Set up automatic window.elb assignment if configured\n    if (isString(settings.elb) && settings.elb) {\n      (actualWindow as unknown as Record<string, unknown>)[settings.elb] = (\n        ...args: unknown[]\n      ) => {\n        const [event, data, options, context, nested, custom] = args;\n        return translateToCoreCollector(\n          translationContext,\n          event,\n          data as BrowserPushData | undefined,\n          options as BrowserPushOptions | undefined,\n          context as BrowserPushContext | undefined,\n          nested as WalkerOS.Entities,\n          custom as WalkerOS.Properties,\n        );\n      };\n    }\n  };\n\n  // Lifecycle handler — fired by the collector only when this source is\n  // started (config.init=true AND config.require empty). Pre-start events\n  // are buffered in instance.queueOn by the collector and replayed on start.\n  const handleEvent = async (event: On.Types) => {\n    switch (event) {\n      case 'run':\n        if (actualDocument && actualWindow) {\n          processLoadTriggers(translationContext, settings);\n          drainNonWalkerEvents(elb, settings, actualWindow as Window, logger);\n          sendPageview(settings);\n        }\n        break;\n\n      default:\n        break;\n    }\n  };\n\n  const push: BrowserPush = ((...args: Parameters<BrowserArguments>) => {\n    const [event, data, options, context, nested, custom] = args;\n    return translateToCoreCollector(\n      translationContext,\n      event,\n      data,\n      options,\n      context,\n      nested,\n      custom,\n    );\n  }) satisfies BrowserPush;\n\n  // Return stateless source instance with event handler and push method\n  return {\n    type: 'browser',\n    config: fullConfig,\n    push,\n    on: handleEvent,\n    init,\n    destroy: async () => {\n      // Remove all DOM trigger listeners registered via AbortController\n      destroyTriggers(settings);\n      // Cleanup visibility tracking and other resources\n      if (actualDocument) {\n        destroyVisibilityTracking(\n          settings.scope || (actualDocument as Document),\n        );\n      }\n    },\n  };\n};\n\nexport default sourceBrowser;\n","import type { WalkerOS, Collector } from '@walkeros/core';\nimport type { Walker } from '@walkeros/web-core';\nimport type { Scope, Settings, Context } from './types';\nimport { throttle, tryCatch } from '@walkeros/core';\nimport { Const, onApply } from '@walkeros/collector';\nimport { elb as elbOrg, getAttribute } from '@walkeros/web-core';\nimport {\n  getElbAttributeName,\n  getEvents,\n  getPageViewData,\n  getTriggerActions,\n  queryAllComposed,\n} from './walker';\nimport {\n  initVisibilityTracking,\n  triggerVisible,\n  destroyVisibilityTracking,\n} from './triggerVisible';\nimport { translateToCoreCollector } from './translation';\n\n// Module-level state is intentional. The walker.js browser source is\n// single-instance per window: one elb queue, one set of DOM listeners,\n// one scroll tracker. The state below is shared across all callers\n// because there is only ever one caller. If multi-instance ever becomes\n// a real requirement (e.g., micro-frontends with isolated walker queues),\n// refactor this into a per-instance closure returned by createSource()\n// and route every trigger function through that closure.\nlet scrollElements: Walker.ScrollElements = [];\nlet scrollListener: EventListenerOrEventListenerObject | undefined;\nlet globalAbortController: AbortController | undefined;\nlet pulseIntervals: ReturnType<typeof setInterval>[] = [];\nlet waitTimeouts: ReturnType<typeof setTimeout>[] = [];\n\n// Listeners registered before initTriggers (or after destroyTriggers) would\n// otherwise miss the AbortController and never be removed on teardown. This\n// helper guarantees every listener gets a signal from the current session's\n// controller, lazily creating one when needed.\nfunction ensureAbortController(): AbortController {\n  if (!globalAbortController) {\n    globalAbortController = new AbortController();\n  }\n  return globalAbortController;\n}\n\n// Reset function for testing\nexport function resetScrollListener() {\n  scrollListener = undefined;\n  scrollElements = [];\n}\n\nexport const createElb: (customLayer?: unknown) => unknown = (customLayer?) => {\n  return (\n    customLayer\n      ? function () {\n          (customLayer as unknown[]).push(arguments);\n        }\n      : elbOrg\n  ) as unknown;\n};\n\nexport const Triggers: { [key: string]: Walker.Trigger } = {\n  Click: 'click',\n  Custom: 'custom',\n  Hover: 'hover',\n  Load: 'load',\n  Pulse: 'pulse',\n  Scroll: 'scroll',\n  Submit: 'submit',\n  Impression: 'impression',\n  Visible: 'visible',\n  Wait: 'wait',\n} as const;\n\nexport async function ready(\n  fn: (context: Context, settings: Settings) => void,\n  context: Context,\n  settings: Settings,\n): Promise<void> {\n  const readyFn = () => {\n    fn(context, settings);\n  };\n\n  const scope = settings.scope;\n  if (!scope) {\n    readyFn();\n    return;\n  }\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  if (doc.readyState !== 'loading') {\n    readyFn();\n  } else {\n    doc.addEventListener('DOMContentLoaded', readyFn);\n  }\n}\n\n// Called once during source initialization to setup global listeners\nexport function initTriggers(context: Context, settings: Settings) {\n  if (!settings.scope) return; // Skip if no scope available\n  const requiredSettings = settings as Required<Settings>;\n  initGlobalTrigger(context, requiredSettings);\n}\n\n// Called on each walker run to process load triggers\nexport function processLoadTriggers(context: Context, settings: Settings) {\n  if (!settings.scope) return; // Skip if no scope available\n  const requiredSettings = settings as Required<Settings>;\n  initScopeTrigger(context, requiredSettings);\n}\n\nexport function initGlobalTrigger(context: Context, settings: Settings): void {\n  const scope = settings.scope;\n\n  if (!scope) return;\n\n  // Abort any previously registered listeners before re-registering\n  if (globalAbortController) globalAbortController.abort();\n  globalAbortController = new AbortController();\n  const { signal } = globalAbortController;\n\n  scope.addEventListener(\n    'click',\n    tryCatch(function (this: Scope, ev: unknown) {\n      triggerClick.call(this, context, ev as MouseEvent);\n    }) as EventListener,\n    { signal },\n  );\n  scope.addEventListener(\n    'submit',\n    tryCatch(function (this: Scope, ev: unknown) {\n      triggerSubmit.call(this, context, ev as SubmitEvent);\n    }) as EventListener,\n    { signal },\n  );\n}\n\n// Removes all listeners registered via the global AbortController and\n// resets module-level scroll state. Safe to call before any init.\nexport function destroyTriggers(settings: Settings): void {\n  if (globalAbortController) {\n    globalAbortController.abort();\n    globalAbortController = undefined;\n  }\n  scrollListener = undefined;\n  scrollElements = [];\n  pulseIntervals.forEach((id) => clearInterval(id));\n  pulseIntervals = [];\n  waitTimeouts.forEach((id) => clearTimeout(id));\n  waitTimeouts = [];\n}\n\nexport function initScopeTrigger(context: Context, settings: Settings) {\n  const elem = settings.scope;\n\n  // Reset all scroll events @TODO check if it's right here\n  scrollElements = [];\n\n  // Clean up any existing visibility tracking to prevent observer accumulation\n  const scope = elem;\n  if (!scope) return;\n  destroyVisibilityTracking(scope);\n  // Initialize visibility tracking for this scope\n  initVisibilityTracking(scope, 1000);\n\n  // default data-elbaction\n  const selectorAction = getElbAttributeName(\n    settings.prefix,\n    Const.Commands.Action,\n    false,\n  );\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  if (scope !== doc) {\n    // Handle the elements action(s), too\n    handleActionElem(context, scope as HTMLElement, selectorAction, settings);\n  }\n\n  // Handle all children action(s)\n  queryAllComposed(scope, `[${selectorAction}]`, (elem) => {\n    handleActionElem(context, elem as HTMLElement, selectorAction, settings);\n  });\n\n  if (scrollElements.length) scroll(context, scope, settings);\n}\n\nexport async function handleTrigger(\n  context: Context,\n  element: Element,\n  trigger: string,\n  // @TODO add triggerParams to filter for specific trigger\n): Promise<unknown[]> {\n  const events = getEvents(element, trigger, context.settings.prefix);\n  return Promise.all(\n    events.map((event: Walker.Event) =>\n      translateToCoreCollector(context, {\n        name: `${event.entity} ${event.action}`,\n        ...event,\n        trigger,\n      }),\n    ),\n  );\n}\n\nfunction handleActionElem(\n  context: Context,\n  elem: HTMLElement,\n  selectorAction: string,\n  settings: Settings,\n) {\n  const actionAttr = getAttribute(elem, selectorAction);\n\n  if (!actionAttr) return;\n\n  // TriggersActionGroups ([trigger: string]: TriggerActions)\n  Object.values(getTriggerActions(actionAttr)).forEach((triggerActions) =>\n    // TriggerActions (Array<TriggerAction>)\n    triggerActions.forEach((triggerAction: Walker.TriggerActions[0]) => {\n      // TriggerAction ({ trigger, triggerParams, action, actionParams })\n      switch (triggerAction.trigger) {\n        case Triggers.Hover:\n          triggerHover(context, elem);\n          break;\n        case Triggers.Load:\n          triggerLoad(context, elem);\n          break;\n        case Triggers.Pulse:\n          triggerPulse(context, elem, triggerAction.triggerParams);\n          break;\n        case Triggers.Scroll:\n          triggerScroll(elem, triggerAction.triggerParams);\n          break;\n        case Triggers.Impression:\n          triggerVisible(context, elem);\n          break;\n        case Triggers.Visible:\n          triggerVisible(context, elem, { multiple: true });\n          break;\n        case Triggers.Wait:\n          triggerWait(context, elem, triggerAction.triggerParams);\n          break;\n      }\n    }),\n  );\n}\n\n/**\n * Get the actual event target, piercing open shadow DOM boundaries.\n * Uses composedPath() to find the real target inside shadow roots.\n * For closed shadow DOM, falls back to the host element (by design).\n */\nfunction getComposedTarget(ev: Event): Element | undefined {\n  const path = ev.composedPath?.();\n  const target = path?.length ? path[0] : ev.target;\n  if (!target || typeof target !== 'object' || !('tagName' in target))\n    return undefined;\n  return target as Element;\n}\n\nfunction triggerClick(context: Context, ev: MouseEvent) {\n  const target = getComposedTarget(ev);\n  if (target) handleTrigger(context, target, Triggers.Click);\n}\n\nfunction triggerHover(context: Context, elem: HTMLElement) {\n  elem.addEventListener(\n    'mouseenter',\n    tryCatch(function (this: Document, ev: MouseEvent) {\n      const target = getComposedTarget(ev);\n      if (target) handleTrigger(context, target, Triggers.Hover);\n    }),\n    { signal: ensureAbortController().signal },\n  );\n}\n\nfunction triggerLoad(context: Context, elem: HTMLElement) {\n  handleTrigger(context, elem, Triggers.Load);\n}\n\nfunction triggerPulse(\n  context: Context,\n  elem: HTMLElement,\n  triggerParams: string = '',\n) {\n  const doc = elem.ownerDocument;\n  const intervalId = setInterval(\n    () => {\n      // Only trigger when tab is active\n      if (!doc.hidden) handleTrigger(context, elem, Triggers.Pulse);\n    },\n    parseInt(triggerParams || '') || 15000,\n  );\n  pulseIntervals.push(intervalId);\n}\n\nfunction triggerScroll(elem: HTMLElement, triggerParams: string = '') {\n  // Scroll depth in percent, default 50%\n  const depth = parseInt(triggerParams || '') || 50;\n\n  // Ignore invalid parameters\n  if (depth < 0 || depth > 100) return;\n\n  scrollElements.push([elem, depth]);\n}\n\nfunction triggerSubmit(context: Context, ev: SubmitEvent) {\n  const target = getComposedTarget(ev);\n  if (target) handleTrigger(context, target, Triggers.Submit);\n}\n\nfunction triggerWait(\n  context: Context,\n  elem: HTMLElement,\n  triggerParams: string = '',\n) {\n  const timeoutId = setTimeout(\n    () => handleTrigger(context, elem, Triggers.Wait),\n    parseInt(triggerParams || '') || 15000,\n  );\n  waitTimeouts.push(timeoutId);\n}\n\nfunction scroll(context: Context, scope: Scope, settings: Settings) {\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  const win = doc.defaultView!;\n  const scrolling = (\n    scrollElements: Walker.ScrollElements,\n    context: Context,\n  ) => {\n    return scrollElements.filter(([element, depth]: [Element, number]) => {\n      // Distance from top to the bottom of the visible screen\n      const windowBottom = win.scrollY + win.innerHeight;\n      // Distance from top to the elements relevant content\n      const elemTop = (element as HTMLElement).offsetTop;\n\n      // Skip calculations if not in viewport yet\n      if (windowBottom < elemTop) return true;\n\n      // Height of the elements box as 100 percent base\n      const elemHeight = element.clientHeight;\n      // Distance from top to the elements bottom\n      const elemBottom = elemTop + elemHeight;\n      // Height of the non-visible pixels below visible screen\n      const hidden = elemBottom - windowBottom;\n      // Visible percentage of the element\n      const scrollDepth = (1 - hidden / (elemHeight || 1)) * 100;\n\n      // Check if the elements visibility skipped the required border\n      if (scrollDepth >= depth) {\n        // Enough scrolling, it's time\n        handleTrigger(context, element, Triggers.Scroll);\n\n        // Remove the element from scrollEvents\n        return false;\n      }\n\n      // Keep observing the element\n      return true;\n    });\n  };\n\n  // Don't add unnecessary scroll listeners\n  if (!scrollListener) {\n    scrollListener = throttle(function () {\n      scrollElements = scrolling.call(scope, scrollElements, context);\n    });\n\n    scope.addEventListener('scroll', scrollListener, {\n      signal: ensureAbortController().signal,\n    });\n  }\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Walker } from '@walkeros/web-core';\nimport type { Scope } from './types';\nimport { assign, castValue, isArray, trim } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport { getAttribute } from '@walkeros/web-core';\n\nexport function getElbAttributeName(\n  prefix: string,\n  name?: string,\n  isProperty = true,\n): string {\n  // separate dynamic properties from walker Const.Commands\n  const separator = isProperty ? '-' : '';\n  name = name != undefined ? separator + name : '';\n  return prefix + name;\n}\n\nexport function getElbValues(\n  prefix: string,\n  element: Element,\n  name: string,\n  isProperty = true,\n): WalkerOS.Properties {\n  const attributeValue =\n    getAttribute(element, getElbAttributeName(prefix, name, isProperty)) || '';\n\n  const elbValues = splitAttribute(attributeValue).reduce((values, str) => {\n    let [key, val]: Walker.KeyVal = splitKeyVal(str);\n\n    if (!key) return values;\n\n    // Handle keys without value\n    if (!val) {\n      // Manually remove the : from key on empty values\n      if (key.endsWith(':')) key = key.slice(0, -1);\n      val = '';\n    }\n\n    // Dynamic values\n    if (val.startsWith('#')) {\n      val = val.slice(1); // Remove # symbol\n      try {\n        // Read property value from element\n        let dynamicValue = (element as Element)[val as keyof Element];\n        if (!dynamicValue && val === 'selected') {\n          // Try to read selected value with chance of error\n          dynamicValue = (element as HTMLSelectElement).options[\n            (element as HTMLSelectElement).selectedIndex\n          ].text;\n        }\n\n        val = String(dynamicValue);\n      } catch (error) {\n        val = '';\n      }\n    }\n\n    if (key.endsWith('[]')) {\n      key = key.slice(0, -2); // Remove [] symbol\n      if (!isArray(values[key])) values[key] = [];\n      (values[key] as WalkerOS.PropertyType[]).push(castValue(val));\n    } else {\n      values[key] = castValue(val);\n    }\n\n    return values;\n  }, {} as WalkerOS.Properties);\n\n  return elbValues;\n}\n\nexport function getAllEvents(\n  scope: Scope,\n  prefix: string = Const.Commands.Prefix,\n): Walker.Events {\n  const actualScope = scope;\n  if (!actualScope) return [];\n  let events: Walker.Events = [];\n  const action = Const.Commands.Action;\n  const actionSelector = `[${getElbAttributeName(prefix, action, false)}]`;\n\n  const processElementEvents = (elem: Element) => {\n    Object.keys(getElbValues(prefix, elem, action, false)).forEach(\n      (trigger) => {\n        events = events.concat(getEvents(elem, trigger, prefix));\n      },\n    );\n  };\n\n  // Check if the scope element itself has action attributes\n  const doc =\n    (actualScope as Element).ownerDocument || (actualScope as Document);\n  if (\n    actualScope !== doc &&\n    (actualScope as Element).matches?.(actionSelector)\n  ) {\n    processElementEvents(actualScope as Element);\n  }\n\n  queryAllComposed(actualScope, actionSelector, processElementEvents);\n\n  return events;\n}\n\nexport function getEvents(\n  target: Element,\n  trigger: string,\n  prefix: string = Const.Commands.Prefix,\n): Walker.Events {\n  const events: Walker.Events = [];\n\n  // Check for actions and get entity collection strategy\n  const { actions, nearestOnly } = resolveAttributes(prefix, target, trigger);\n\n  // Stop if there's no valid action combo\n  if (!actions.length) return events;\n\n  actions.forEach((triggerAction) => {\n    const filter = splitAttribute(triggerAction.actionParams || '', ',').reduce(\n      (filter, param) => {\n        filter[trim(param)] = true;\n        return filter;\n      },\n      {} as Walker.Filter,\n    );\n\n    // Get entities - using nearestOnly flag to determine collection strategy\n    const entities = getEntities(prefix, target, filter, nearestOnly);\n\n    // Use page as default entity if no one was set\n    if (!entities.length) {\n      const entity = 'page';\n      // Only use explicit page properties and ignore generic properties\n      const entitySelector = `[${getElbAttributeName(prefix, entity)}]`;\n\n      // Get matching properties from the element and its parents\n      const [data, context] = getThisAndParentProperties(\n        target,\n        entitySelector,\n        prefix,\n        entity,\n      );\n\n      entities.push({\n        entity, // page\n        data, // Consider only upper data\n        nested: [], // Skip nested in this faked page case\n        context,\n      });\n    }\n\n    // Return a list of full events\n    entities.forEach((entity) => {\n      events.push({\n        entity: entity.entity,\n        action: triggerAction.action,\n        data: entity.data,\n        trigger,\n        context: entity.context,\n        nested: entity.nested ?? [],\n      });\n    });\n  });\n\n  return events;\n}\n\nexport function getGlobals(\n  prefix: string = Const.Commands.Prefix,\n  scope?: Scope,\n): WalkerOS.Properties {\n  if (!scope) return {};\n  const globalsName = getElbAttributeName(\n    prefix,\n    Const.Commands.Globals,\n    false,\n  );\n  const globalSelector = `[${globalsName}]`;\n  let values = {};\n\n  queryAll(scope, globalSelector, (element) => {\n    values = assign(\n      values,\n      getElbValues(prefix, element, Const.Commands.Globals, false),\n    );\n  });\n\n  return values;\n}\n\nexport function getPageViewData(\n  prefix: string,\n  scope: Scope,\n): [WalkerOS.Properties, WalkerOS.OrderedProperties] {\n  // static page view\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  const win = doc.defaultView!;\n  const loc = win.location;\n  const page = 'page';\n  const scopeElement =\n    'body' in scope ? (scope as Document).body : (scope as Element);\n  const [data, context] = getThisAndParentProperties(\n    scopeElement,\n    `[${getElbAttributeName(prefix, page)}]`,\n    prefix,\n    page,\n  );\n  data.domain = loc.hostname;\n  data.title = doc.title;\n  data.referrer = doc.referrer;\n\n  if (loc.search) data.search = loc.search;\n  if (loc.hash) data.hash = loc.hash;\n\n  // @TODO get all nested entities\n  return [data, context];\n}\n\nexport function getTriggerActions(str: string): Walker.TriggersActionGroups {\n  const values: Walker.TriggersActionGroups = {};\n\n  const attributes = splitAttribute(str);\n\n  attributes.forEach((str) => {\n    const [triggerAttr, actionAttr] = splitKeyVal(str);\n    const [trigger, triggerParams] = parseAttribute(triggerAttr);\n\n    if (!trigger) return;\n\n    let [action, actionParams] = parseAttribute(actionAttr || '');\n\n    // Shortcut if trigger and action are the same (click:click)\n    action = action || trigger;\n\n    if (!values[trigger]) values[trigger] = [];\n\n    values[trigger].push({ trigger, triggerParams, action, actionParams });\n  });\n\n  return values;\n}\n\nexport function getEntities(\n  prefix: string,\n  target: Element,\n  filter?: Walker.Filter,\n  nearestOnly = false,\n): WalkerOS.Entities {\n  const entities: WalkerOS.Entities = [];\n  let element = target as Node['parentElement'];\n\n  // Unset empty filter object\n  filter = Object.keys(filter || {}).length !== 0 ? filter : undefined;\n\n  while (element) {\n    const entity = getEntity(prefix, element, target, filter);\n    if (entity) {\n      entities.push(entity);\n      if (nearestOnly) break; // Stop after first entity for data-elbaction\n    }\n\n    element = getParent(prefix, element);\n  }\n\n  return entities;\n}\n\nfunction getEntity(\n  prefix: string,\n  element: Element,\n  origin?: Element,\n  filter?: Walker.Filter,\n): WalkerOS.Entity | null {\n  const entity = getAttribute(element, getElbAttributeName(prefix));\n\n  // It's not a (valid) entity element or should be filtered\n  if (!entity || (filter && !filter[entity])) return null;\n\n  const scopeElems = [element]; // All related elements\n  const dataSelector = `[${getElbAttributeName(\n    prefix,\n    entity,\n  )}],[${getElbAttributeName(prefix, '')}]`; // [data-elb-entity,data-elb-]\n  const linkName = getElbAttributeName(prefix, Const.Commands.Link, false); // data-elblink\n\n  let data: WalkerOS.Properties = {};\n  const nested: WalkerOS.Entities = [];\n  const [parentData, context] = getThisAndParentProperties(\n    origin || element,\n    dataSelector,\n    prefix,\n    entity,\n    true, // collect scoped generic (data-elb_) for real entities\n  );\n\n  // Add linked elements (data-elblink)\n  queryAllComposed(element, `[${linkName}]`, (link) => {\n    const [linkId, linkState]: Walker.KeyVal = splitKeyVal(\n      getAttribute(link, linkName),\n    );\n\n    // Get all linked child elements if link is a parent\n    // Note: Searches entire document including shadow roots.\n    // Acceptable because link-parent usage is rare in practice.\n    if (linkState === 'parent')\n      queryAllComposed(\n        element.ownerDocument.body,\n        `[${linkName}=\"${linkId}:child\"]`,\n        (wormhole) => {\n          scopeElems.push(wormhole);\n\n          // A linked child can also be an entity\n          const nestedEntity = getEntity(prefix, wormhole);\n          if (nestedEntity) nested.push(nestedEntity);\n        },\n      );\n  });\n\n  // Get all property elements including linked elements\n  const propertyElems: Array<Element> = [];\n  scopeElems.forEach((elem) => {\n    // Also check for property on same level\n    if (elem.matches(dataSelector)) propertyElems.push(elem);\n\n    queryAllComposed(elem, dataSelector, (elem) => propertyElems.push(elem));\n  });\n\n  // Get properties\n  let genericData: WalkerOS.Properties = {};\n  propertyElems.forEach((child) => {\n    // Eventually override closer properties\n    genericData = assign(genericData, getElbValues(prefix, child, ''));\n    data = assign(data, getElbValues(prefix, child, entity));\n  });\n\n  // Merge properties with the hierarchy generic > data > parent\n  data = assign(assign(genericData, data), parentData);\n\n  // Get nested entities\n  scopeElems.forEach((elem) => {\n    queryAllComposed(\n      elem,\n      `[${getElbAttributeName(prefix)}]`,\n      (nestedEntityElement) => {\n        const nestedEntity = getEntity(prefix, nestedEntityElement);\n        if (nestedEntity) nested.push(nestedEntity);\n      },\n    );\n  });\n\n  return { entity, data, context, nested };\n}\n\nfunction getParent(prefix: string, elem: HTMLElement): HTMLElement | null {\n  const linkName = getElbAttributeName(prefix, Const.Commands.Link, false); // data-elblink\n\n  // Link\n  if (elem.matches(`[${linkName}]`)) {\n    const [linkId, linkState]: Walker.KeyVal = splitKeyVal(\n      getAttribute(elem, linkName),\n    );\n    if (linkState === 'child') {\n      // Link-parent lookup does not cross shadow boundaries.\n      // Uses simple queryAll (no shadow recursion) since this runs\n      // during per-event entity traversal.\n      const doc = elem.ownerDocument;\n      let found: HTMLElement | null = null;\n      queryAll(doc, `[${linkName}=\"${linkId}:parent\"]`, (el) => {\n        if (!found) found = el as HTMLElement;\n      });\n      return found;\n    }\n  }\n\n  // Shadow DOM traversal\n  const win = elem.ownerDocument.defaultView!;\n  if (\n    !elem.parentElement &&\n    elem.getRootNode &&\n    elem.getRootNode() instanceof win.ShadowRoot\n  ) {\n    return (elem.getRootNode() as ShadowRoot).host as HTMLElement;\n  }\n\n  return elem.parentElement;\n}\n\nfunction getThisAndParentProperties(\n  element: Element,\n  entitySelector: string,\n  prefix: string,\n  type: string,\n  collectScoped = false,\n): [data: WalkerOS.Properties, context: WalkerOS.OrderedProperties] {\n  let data: WalkerOS.Properties = {};\n  const context: WalkerOS.OrderedProperties = {};\n  let parent = element as Node['parentElement'];\n  const contextSelector = `[${getElbAttributeName(\n    prefix,\n    Const.Commands.Context,\n    false,\n  )}]`;\n  const scopedName = Const.Commands.Scoped; // '_' -> data-elb_\n  const scopedSelector = `[${getElbAttributeName(prefix, scopedName, false)}]`;\n\n  // Get all bubbling-up properties with decreasing priority\n  let contextI = 0; // Context counter\n  while (parent) {\n    // Scoped generic (data-elb_): same generic tier, bubble-up only.\n    // The synthetic page entity ignores generics, so it skips scoped too.\n    // Guard on scopedName so a falsy command constant degrades to \"no scoped\n    // collection\" instead of an empty suffix that would match the bare prefix.\n    if (collectScoped && scopedName && parent.matches(scopedSelector)) {\n      data = assign(getElbValues(prefix, parent, scopedName, false), data);\n    }\n\n    // Properties\n    if (parent.matches(entitySelector)) {\n      // Get higher properties first\n      data = assign(getElbValues(prefix, parent, ''), data); // Generic\n      data = assign(getElbValues(prefix, parent, type), data); // Explicit\n    }\n\n    // Context\n    if (parent.matches(contextSelector)) {\n      Object.entries(\n        getElbValues(prefix, parent, Const.Commands.Context, false),\n      ).forEach(([key, val]) => {\n        // Don't override context with same but higher key\n        if (val && !context[key]) context[key] = [val, contextI];\n      });\n\n      // Increase context counter with each parent level\n      ++contextI;\n    }\n\n    parent = getParent(prefix, parent);\n  }\n\n  return [data, context];\n}\n\nfunction queryAll(\n  scope: Document | Element,\n  selector: string,\n  fn: (element: Element) => void,\n): void {\n  scope.querySelectorAll(selector).forEach(fn);\n}\n\n// Shadow-aware version that recurses into open shadow roots.\n// Use for discovery (init) and entity-scoped queries (small subtrees).\n// Avoid for per-event document-scoped queries (e.g. getGlobals).\nexport function queryAllComposed(\n  scope: Document | Element | ShadowRoot,\n  selector: string,\n  fn: (element: Element) => void,\n): void {\n  scope.querySelectorAll(selector).forEach(fn);\n\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  const win = doc.defaultView!;\n  if (scope instanceof win.Element && scope.shadowRoot) {\n    queryAllComposed(scope.shadowRoot, selector, fn);\n  }\n  scope.querySelectorAll('*').forEach((el) => {\n    if (el.shadowRoot) {\n      queryAllComposed(el.shadowRoot, selector, fn);\n    }\n  });\n}\n\nfunction resolveAttributes(\n  prefix: string,\n  target: Element,\n  trigger: string,\n): { actions: Walker.TriggerActions; nearestOnly: boolean } {\n  let element = target as Node['parentElement'];\n\n  while (element) {\n    // Check for data-elbactions first (takes precedence)\n    const multiAttribute = getAttribute(\n      element,\n      getElbAttributeName(prefix, Const.Commands.Actions, false),\n    );\n\n    if (multiAttribute) {\n      const triggerActions = getTriggerActions(multiAttribute);\n      if (triggerActions[trigger]) {\n        return { actions: triggerActions[trigger], nearestOnly: false };\n      }\n    }\n\n    // Check for data-elbaction (nearest entity only)\n    const singleAttribute = getAttribute(\n      element,\n      getElbAttributeName(prefix, Const.Commands.Action, false),\n    );\n\n    if (singleAttribute) {\n      const triggerActions = getTriggerActions(singleAttribute);\n      // Action found on element or is not a click trigger\n      if (triggerActions[trigger] || trigger !== 'click') {\n        return { actions: triggerActions[trigger] || [], nearestOnly: true };\n      }\n    }\n\n    element = getParent(prefix, element);\n  }\n\n  return { actions: [], nearestOnly: false };\n}\n\nfunction splitAttribute(str: string, separator = ';'): Walker.Attributes {\n  const values: Walker.Attributes = [];\n\n  if (!str) return values;\n\n  const reg = new RegExp(`(?:[^${separator}']+|'[^']*')+`, 'ig');\n  return str.match(reg) || [];\n}\n\nfunction splitKeyVal(str: string): Walker.KeyVal {\n  const [key, value] = str.split(/:(.+)/, 2);\n  return [trim(key), trim(value)];\n}\n\nfunction parseAttribute(str: string): Walker.KeyVal {\n  // action(a, b, c)\n  const [key, value] = str.split('(', 2);\n  const param = value ? value.slice(0, -1) : ''; // Remove the )\n  // key = 'action'\n  // param = 'a, b, c'\n  return [key, param];\n}\n","import type { WalkerOS } from '@walkeros/core';\nimport type { Settings, Context } from './types';\nimport { tryCatch } from '@walkeros/core';\nimport { isVisible } from '@walkeros/web-core';\nimport { handleTrigger, Triggers } from './trigger';\n\n// Cache for element size calculations to reduce DOM queries\nconst elementSizeCache = new WeakMap<\n  HTMLElement,\n  { isLarge: boolean; lastChecked: number }\n>();\n\n// Cache for basic visibility checks to reduce expensive isVisible() calls\nconst visibilityCache = new WeakMap<\n  HTMLElement,\n  { isVisible: boolean; lastChecked: number }\n>();\n\n// Module-level visibility state management (stateless source architecture)\ninterface VisibilityState {\n  observer?: IntersectionObserver;\n  timers: WeakMap<HTMLElement, number>;\n  duration: number;\n  elementConfigs?: WeakMap<\n    HTMLElement,\n    { multiple: boolean; blocked: boolean; context: Context; trigger: string }\n  >;\n}\n\n// Module-level visibility state keyed by document/scope\nconst visibilityStates = new WeakMap<Document | Element, VisibilityState>();\n\n/**\n * Cached visibility check to reduce expensive isVisible() calls\n */\nfunction isElementVisible(element: HTMLElement): boolean {\n  const now = Date.now();\n  let cached = visibilityCache.get(element);\n\n  // Cache visibility result for 500ms to balance accuracy with performance\n  if (!cached || now - cached.lastChecked > 500) {\n    const win = element.ownerDocument.defaultView!;\n    const doc = element.ownerDocument;\n    cached = {\n      isVisible: isVisible(element, win, doc),\n      lastChecked: now,\n    };\n    visibilityCache.set(element, cached);\n  }\n\n  return cached.isVisible;\n}\n\n/**\n * Element cleanup (unobserve + timer + cache cleanup)\n */\nexport function unobserveElement(\n  scope: Document | Element,\n  element: HTMLElement,\n): void {\n  const state = visibilityStates.get(scope);\n  if (!state) return;\n\n  if (state.observer) {\n    state.observer.unobserve(element);\n  }\n\n  // Clear timer\n  const timer = state.timers.get(element);\n  if (timer) {\n    clearTimeout(timer);\n    state.timers.delete(element);\n  }\n\n  // Clean up caches to prevent memory leaks\n  elementSizeCache.delete(element);\n  visibilityCache.delete(element);\n}\n\n/**\n * Creates an IntersectionObserver for the given scope\n */\nfunction createObserver(\n  scope: Document | Element,\n): IntersectionObserver | undefined {\n  const doc = (scope as Element).ownerDocument || (scope as Document);\n  const win = doc.defaultView;\n  if (!win || !win.IntersectionObserver) return undefined;\n\n  return tryCatch(\n    () =>\n      new win.IntersectionObserver(\n        (entries) => {\n          entries.forEach((entry) => {\n            handleIntersection(scope, entry);\n          });\n        },\n        {\n          rootMargin: '0px',\n          threshold: [0, 0.5],\n        },\n      ),\n    () => undefined,\n  )();\n}\n\n/**\n * Handles intersection changes for observed elements\n */\nfunction handleIntersection(\n  scope: Document | Element,\n  entry: IntersectionObserverEntry,\n): void {\n  const target = entry.target as HTMLElement;\n  const state = visibilityStates.get(scope);\n\n  if (!state) return;\n\n  const existingTimer = state.timers.get(target);\n\n  if (entry.intersectionRatio > 0) {\n    // Optimize: Cache element size calculations to avoid repeated DOM queries\n    const now = Date.now();\n    let cached = elementSizeCache.get(target);\n\n    // Cache element size for 1 second to reduce DOM queries\n    if (!cached || now - cached.lastChecked > 1000) {\n      const win = target.ownerDocument.defaultView!;\n      cached = {\n        isLarge: target.offsetHeight > win.innerHeight,\n        lastChecked: now,\n      };\n      elementSizeCache.set(target, cached);\n    }\n\n    const meetsThreshold = entry.intersectionRatio >= 0.5;\n\n    // Optimized visibility strategy:\n    // - Standard elements: intersection ratio ≥ 0.5 is sufficient (fast)\n    // - Large elements: need additional overlay/occlusion check (slower but necessary)\n    const shouldTrigger =\n      meetsThreshold || (cached.isLarge && isElementVisible(target));\n\n    if (shouldTrigger) {\n      // Get element configuration\n      const elementConfig = state.elementConfigs?.get(target);\n\n      // For multiple triggers, only proceed if this is a re-entry (was not visible, now visible)\n      if (elementConfig?.multiple && elementConfig.blocked) return; // Don't trigger again\n\n      // Only create timer if none exists\n      if (!existingTimer) {\n        const targetWin = target.ownerDocument.defaultView!;\n        const timer = targetWin.setTimeout(async () => {\n          // Final visibility check before triggering (cached for performance)\n          if (isElementVisible(target)) {\n            // Get element configuration to access context\n            const elementConfig = state.elementConfigs?.get(target);\n            if (elementConfig?.context) {\n              await handleTrigger(\n                elementConfig.context,\n                target as Element,\n                elementConfig.trigger,\n              );\n            }\n\n            // Get fresh element config reference for state update\n            const currentConfig = state.elementConfigs?.get(target);\n\n            // For multiple triggers, mark as visible after firing\n            if (currentConfig?.multiple) {\n              currentConfig.blocked = true;\n            } else {\n              // Clean up and unobserve only if not a multiple trigger\n              unobserveElement(scope, target);\n            }\n          }\n        }, state.duration);\n\n        state.timers.set(target, timer);\n      }\n      return;\n    }\n  }\n\n  // Element isn't sufficiently in viewport - clear existing timer\n  if (existingTimer) {\n    clearTimeout(existingTimer);\n    state.timers.delete(target);\n  }\n\n  // For multiple triggers, mark as not visible for re-entry detection\n  const elementConfig = state.elementConfigs?.get(target);\n  if (elementConfig?.multiple) {\n    elementConfig.blocked = false;\n  }\n}\n\n/**\n * Initializes visibility tracking for a scope (document/element)\n */\nexport function initVisibilityTracking(\n  scope: Document | Element,\n  duration = 1000,\n): void {\n  if (visibilityStates.has(scope)) return; // Already initialized\n\n  visibilityStates.set(scope, {\n    observer: createObserver(scope),\n    timers: new WeakMap(),\n    duration,\n  });\n}\n\n/**\n * Main trigger function for visible elements\n */\nexport function triggerVisible(\n  context: Context,\n  element: HTMLElement,\n  config: { multiple?: boolean } = { multiple: false },\n): void {\n  const scope = context.settings.scope;\n  if (!scope) return;\n  const state = visibilityStates.get(scope);\n\n  if (state?.observer && element) {\n    // Store element config for later use in intersection handling\n    if (!state.elementConfigs) {\n      state.elementConfigs = new WeakMap();\n    }\n    state.elementConfigs.set(element, {\n      multiple: config.multiple ?? false,\n      blocked: false,\n      context,\n      trigger: config.multiple ? 'visible' : 'impression',\n    });\n    state.observer.observe(element);\n  }\n}\n\n/**\n * Destroys visibility tracking for a scope, cleaning up all resources\n */\nexport function destroyVisibilityTracking(scope?: Document | Element): void {\n  if (!scope) return; // No scope provided, nothing to clean up\n\n  const state = visibilityStates.get(scope);\n  if (!state) return;\n\n  if (state.observer) {\n    state.observer.disconnect();\n  }\n\n  visibilityStates.delete(scope);\n}\n","import type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport { isString, isObject, isElementOrDocument } from '@walkeros/core';\nimport { createPushResult } from '@walkeros/collector';\nimport type {\n  BrowserPushData,\n  BrowserPushOptions,\n  BrowserPushContext,\n} from './types/elb';\nimport type { Context, Settings } from './types';\nimport { getEntities, getGlobals } from './walker';\n\n/**\n * Translation layer that converts flexible browser source inputs\n * to the strict core collector format\n */\nexport function translateToCoreCollector(\n  context: Context,\n  eventOrCommand: unknown,\n  data?: BrowserPushData,\n  options?: BrowserPushOptions,\n  pushContext?: BrowserPushContext,\n  nested?: WalkerOS.Entities,\n  custom?: WalkerOS.Properties,\n): Promise<Elb.PushResult> {\n  const { elb, settings } = context;\n\n  // Handle walker commands. `walker init` is browser-only (re-scans a DOM\n  // scope for `data-elb*` tags and fires load triggers) and is dispatched\n  // here because the collector must stay DOM-free. All other walker\n  // commands route through elb to commonHandleCommand on the collector.\n  // `initScope` arrives on `context` from the source factory to avoid a\n  // static import of `./trigger` (which would form a load-time cycle).\n  if (isString(eventOrCommand) && eventOrCommand.startsWith('walker ')) {\n    if (eventOrCommand === 'walker init' && context.initScope) {\n      const scopes = normalizeInitScopes(data, settings);\n      for (const scope of scopes) {\n        context.initScope(context, { ...settings, scope });\n      }\n      return Promise.resolve(createPushResult({ ok: true }));\n    }\n    return elb(eventOrCommand, data as WalkerOS.Properties);\n  }\n\n  // Handle event objects - add source and globals if missing\n  if (isObject(eventOrCommand)) {\n    const event = eventOrCommand;\n    if (!event.source && settings.scope) {\n      const scopeDoc = ((settings.scope as Element).ownerDocument ||\n        settings.scope) as Document;\n      const scopeWin = scopeDoc.defaultView!;\n      event.source = getBrowserSource(scopeWin, scopeDoc);\n    }\n\n    // Add globals if not already present\n    if (!event.globals && settings.scope) {\n      event.globals = getGlobals(settings.prefix, settings.scope);\n    }\n\n    return elb(event);\n  }\n\n  // Extract entity name from event string\n  const [entity] = String(\n    isObject(eventOrCommand) ? eventOrCommand.name : eventOrCommand,\n  ).split(' ');\n\n  // Get data and context either from elements or parameters\n  let eventData = isObject(data) ? (data as WalkerOS.Properties) : {};\n  let eventContext: WalkerOS.OrderedProperties = {};\n\n  let elemParameter: undefined | Element;\n  let dataIsElem = false;\n\n  // Check if data parameter is an element\n  if (isElementOrDocument(data)) {\n    elemParameter = data as Element;\n    dataIsElem = true;\n  }\n\n  // Check if contextData parameter is an element\n  if (isElementOrDocument(pushContext)) {\n    elemParameter = pushContext as Element;\n  } else if (isObject(pushContext) && Object.keys(pushContext).length) {\n    eventContext = pushContext as WalkerOS.OrderedProperties;\n  }\n\n  // Extract data from element if provided\n  if (elemParameter) {\n    const entityObj = getEntities(\n      settings.prefix || 'data-elb',\n      elemParameter,\n    ).find((obj) => obj.entity === entity);\n    if (entityObj) {\n      if (dataIsElem) eventData = entityObj.data;\n      if (entityObj.context) eventContext = entityObj.context;\n    }\n  }\n\n  // Derive win/doc from scope for browser-specific APIs\n  const scopeDoc = settings.scope\n    ? (((settings.scope as Element).ownerDocument ||\n        settings.scope) as Document)\n    : undefined;\n  const scopeWin = scopeDoc?.defaultView;\n\n  // Special handling for page events\n  if (entity === 'page' && scopeWin) {\n    eventData.id = eventData.id || scopeWin.location.pathname;\n  }\n\n  // Collect globals from the DOM scope\n  const eventGlobals = getGlobals(settings.prefix, settings.scope);\n\n  // Build unified event from various elb usage patterns\n  const event: WalkerOS.DeepPartialEvent = {\n    name: String(eventOrCommand || ''),\n    data: eventData,\n    context: eventContext,\n    globals: eventGlobals,\n    nested,\n    custom,\n    trigger: isString(options) ? options : '',\n    source:\n      scopeWin && scopeDoc ? getBrowserSource(scopeWin, scopeDoc) : undefined,\n  };\n\n  return elb(event);\n}\n\n/**\n * Create source information for browser events\n */\nfunction getBrowserSource(win: Window, doc: Document): WalkerOS.Source {\n  return {\n    type: 'browser',\n    platform: 'web',\n    url: win.location.href,\n    referrer: doc.referrer,\n  };\n}\n\n/**\n * Local type guard: narrows `unknown` to `Element | Document`. Prefers the\n * native `instanceof` check (works in browsers and JSDOM) and falls back to\n * the WhatWG DOM `nodeType` property for realms where the global Element or\n * Document constructors are not in scope (cross-frame, certain test\n * runners). Returns an accurate `Element | Document` union so callers do\n * not need casts.\n */\nfunction isDomScope(value: unknown): value is Element | Document {\n  if (!value || typeof value !== 'object') return false;\n  if (typeof Element !== 'undefined' && value instanceof Element) return true;\n  if (typeof Document !== 'undefined' && value instanceof Document) return true;\n  if ('nodeType' in value) {\n    const nodeType = value.nodeType;\n    // 1 = ELEMENT_NODE, 9 = DOCUMENT_NODE per the WhatWG DOM standard.\n    return nodeType === 1 || nodeType === 9;\n  }\n  return false;\n}\n\n/**\n * Normalize the `data` argument of `elb('walker init', data)` to an array\n * of Element/Document scopes. Falls back to `settings.scope` (or `document`\n * if settings.scope is not a DOM node) when no scope is provided.\n */\nfunction normalizeInitScopes(\n  data: unknown,\n  settings: Settings,\n): Array<Element | Document> {\n  if (isDomScope(data)) return [data];\n  if (Array.isArray(data)) {\n    const filtered: Array<Element | Document> = [];\n    for (const entry of data) {\n      if (isDomScope(entry)) filtered.push(entry);\n    }\n    return filtered;\n  }\n  if (typeof data === 'undefined') {\n    const fallback = settings.scope;\n    if (isDomScope(fallback)) return [fallback];\n    if (typeof globalThis.document !== 'undefined') {\n      return [globalThis.document];\n    }\n  }\n  return [];\n}\n","import type { WalkerOS, Elb, Logger } from '@walkeros/core';\nimport type { ELBLayer, ELBLayerConfig, Settings } from './types';\nimport { tryCatch, isString, isObject } from '@walkeros/core';\nimport { translateToCoreCollector } from './translation';\n\n/**\n * Initialize elbLayer for async command handling.\n *\n * Installs the live `push` override on `window.elbLayer` and drains any\n * walker commands (`walker *`) that were queued before initialization.\n * Non-walker events stay in the array — they are drained later from the\n * source's `on('run')` handler via `drainNonWalkerEvents`, anchored at\n * the last `walker run` entry.\n */\nexport function initElbLayer(\n  elb: Elb.Fn,\n  config: ELBLayerConfig & {\n    prefix?: string;\n    window?: Window;\n    logger?: Logger.Instance;\n  } = {},\n): void {\n  const layerName = config.name || 'elbLayer';\n  const windowObj = config.window;\n  const logger = config.logger;\n  if (!windowObj) return;\n\n  // Ensure elbLayer exists on window\n  const windowWithLayer = windowObj as typeof windowObj &\n    Record<string, unknown>;\n  if (!windowWithLayer[layerName]) {\n    windowWithLayer[layerName] = [];\n  }\n\n  const elbLayer = windowWithLayer[layerName] as ELBLayer;\n\n  const scope = windowObj.document as Document;\n\n  logger?.debug('initElbLayer enter', {\n    layerName,\n    queuedItems: elbLayer.length,\n  });\n\n  // Override the push method to process items immediately\n  elbLayer.push = function (...args: Array<Elb.Layer | IArguments>) {\n    // Handle arguments object\n    if (isArguments(args[0])) {\n      const argsArray = [...Array.from(args[0])];\n      const i = Array.prototype.push.apply(this, [argsArray]);\n      // Process the arguments as a single command\n      pushCommand(elb, config.prefix, argsArray, scope, logger);\n      return i;\n    }\n\n    const i = Array.prototype.push.apply(this, args);\n\n    // Process each pushed item immediately\n    args.forEach((item) => {\n      pushCommand(elb, config.prefix, item, scope, logger);\n    });\n\n    return i;\n  };\n\n  // Drain walker commands from any pre-existing queue items.\n  // Non-walker events stay in the array for `drainNonWalkerEvents`.\n  if (Array.isArray(elbLayer) && elbLayer.length > 0) {\n    logger?.debug('initElbLayer drain walker commands', {\n      count: elbLayer.length,\n    });\n    drainWalkerCommands(\n      elb,\n      config.prefix ?? 'data-elb',\n      elbLayer,\n      scope,\n      logger,\n    );\n  }\n}\n\n/**\n * Drain walker commands (`walker *`) from the elbLayer queue.\n *\n * Called from `initElbLayer` during source init. Iterates the queue in\n * declaration order, pushes each walker command via `pushCommand`, then\n * removes the consumed entries from the live array. Non-walker events\n * stay in place.\n */\nfunction drainWalkerCommands(\n  elb: Elb.Fn,\n  prefix: string,\n  elbLayer: ELBLayer,\n  scope: Document,\n  logger?: Logger.Instance,\n): void {\n  const walkerCommand = 'walker '; // Space on purpose\n  // Iterate a snapshot — the array may be mutated by side effects of elb.\n  const snapshot = [...elbLayer];\n  const consumed = new Set<number>();\n  snapshot.forEach((pushedItem, idx) => {\n    const item = normalizeItem(pushedItem);\n    if (!item) return;\n    const firstParam = item[0];\n    const isCommand =\n      !isObject(firstParam) &&\n      isString(firstParam) &&\n      firstParam.startsWith(walkerCommand);\n    if (!isCommand) return;\n    consumed.add(idx);\n    pushCommand(elb, prefix, item, scope, logger);\n  });\n  // Remove consumed commands from the live array, descending index order\n  // so splice indices remain valid.\n  const indices = [...consumed].sort((a, b) => b - a);\n  for (const i of indices) elbLayer.splice(i, 1);\n  logger?.debug('drainWalkerCommands done', {\n    consumed: consumed.size,\n    remaining: elbLayer.length,\n  });\n}\n\n/**\n * Drain non-walker events from the elbLayer queue, anchored at the\n * LAST `walker run` entry.\n *\n * Items before that anchor are stale — a prior run already had its chance.\n * Items at strictly greater indices are current and replay through\n * `pushCommand`. If no `walker run` is in the queue, anchor is `-1` and\n * the entire queue replays.\n *\n * Called from the browser source's `on('run')` handler.\n */\nexport function drainNonWalkerEvents(\n  elb: Elb.Fn,\n  settings: Pick<Settings, 'prefix'> & {\n    elbLayer?: Settings['elbLayer'];\n  },\n  windowObj: Window,\n  logger?: Logger.Instance,\n): void {\n  const layerName = isString(settings.elbLayer)\n    ? settings.elbLayer\n    : 'elbLayer';\n  const prefix = settings.prefix || 'data-elb';\n  const layer = (windowObj as unknown as Record<string, unknown>)[layerName];\n  if (!Array.isArray(layer)) return;\n  const scope = windowObj.document as Document;\n\n  let anchor = -1;\n  layer.forEach((pushedItem, idx) => {\n    const item = normalizeItem(pushedItem);\n    if (!item) return;\n    if (isString(item[0]) && item[0] === 'walker run') anchor = idx;\n  });\n\n  const drained: unknown[] = [];\n  for (let i = anchor + 1; i < layer.length; i++) {\n    const normalized = normalizeItem(layer[i]);\n    if (normalized) drained.push(normalized);\n  }\n  // Remove drained tail from live array.\n  layer.length = anchor + 1;\n  logger?.debug('drainNonWalkerEvents', {\n    anchor,\n    drained: drained.length,\n  });\n  drained.forEach((item) => pushCommand(elb, prefix, item, scope, logger));\n}\n\n/**\n * Normalize a queue item into an Array (or null if invalid/empty).\n */\nfunction normalizeItem(pushedItem: unknown): unknown[] | null {\n  const item = isArguments(pushedItem)\n    ? [...Array.from(pushedItem)]\n    : isArrayLike(pushedItem)\n      ? Array.from(pushedItem as ArrayLike<unknown>)\n      : [pushedItem];\n  if (!Array.isArray(item) || item.length === 0) return null;\n  if (item.length === 1 && !item[0]) return null;\n  const firstParam = item[0];\n  if (isObject(firstParam) && Object.keys(firstParam as object).length === 0) {\n    return null;\n  }\n  if (\n    !isObject(firstParam) &&\n    isString(firstParam) &&\n    firstParam.trim() === ''\n  ) {\n    return null;\n  }\n  return item;\n}\n\n/**\n * Push command directly using elb or translation based on type\n */\nfunction pushCommand(\n  elb: Elb.Fn,\n  prefix: string = 'data-elb',\n  item: unknown,\n  scope?: Document,\n  logger?: Logger.Instance,\n): void {\n  tryCatch(\n    () => {\n      if (Array.isArray(item)) {\n        const [action, ...rest] = item;\n\n        // Skip empty or invalid actions\n        if (!action || (isString(action) && action.trim() === '')) {\n          logger?.debug('pushCommand skipped (empty/invalid action)', {\n            item,\n          });\n          return;\n        }\n\n        // Walker commands go directly to collector\n        if (isString(action) && action.startsWith('walker ')) {\n          logger?.debug('pushCommand walker command', {\n            action,\n            data: rest[0],\n          });\n          elb(action, rest[0]);\n          return;\n        }\n\n        logger?.debug('pushCommand event (translated)', {\n          action,\n          rest,\n        });\n        translateToCoreCollector(\n          {\n            elb,\n            settings: {\n              prefix,\n              scope,\n              pageview: false,\n              elb: '',\n              elbLayer: false,\n            },\n          },\n          action,\n          ...rest,\n        );\n      } else if (item && typeof item === 'object') {\n        // Skip empty objects\n        if (Object.keys(item).length === 0) {\n          logger?.debug('pushCommand skipped (empty object)');\n          return;\n        }\n        logger?.debug('pushCommand object event', { item });\n        // Object events go directly to elb\n        elb(item as WalkerOS.DeepPartialEvent);\n      }\n    },\n    (error) => {\n      logger?.warn('pushCommand failed', { error, item });\n    },\n  )();\n}\n\n/**\n * Check if value is arguments object\n */\nfunction isArguments(value: unknown): value is IArguments {\n  return (\n    value != null &&\n    typeof value === 'object' &&\n    Object.prototype.toString.call(value) === '[object Arguments]'\n  );\n}\n\n/**\n * Check if value is array-like (has length property)\n */\nfunction isArrayLike(value: unknown): boolean {\n  return (\n    value != null &&\n    typeof value === 'object' &&\n    'length' in value &&\n    typeof (value as unknown[]).length === 'number'\n  );\n}\n","import type { InitSettings, Settings } from './types';\n\n/**\n * Get browser source configuration with defaults\n * @param initSettings - Initial settings to override defaults\n * @param envDocument - Document from environment (optional)\n * @returns Complete settings object with all defaults applied\n */\nexport function getConfig(\n  initSettings: InitSettings = {},\n  envDocument?: Document,\n): Settings {\n  return {\n    prefix: 'data-elb',\n    pageview: true,\n    elb: 'elb',\n    elbLayer: 'elbLayer',\n    scope: envDocument || undefined,\n    ...initSettings,\n  };\n}\n","import type { Source, Elb } from '@walkeros/core';\nimport type { SettingsSchema } from '../schemas';\nimport type { z } from '@walkeros/core/dev';\n\n// Export browser-specific elb types\nexport * from './elb';\nimport type { BrowserPush } from './elb';\n\ndeclare module '@walkeros/core' {\n  interface SourceMap {\n    browser: {\n      type: 'browser';\n      platform: 'web';\n      url?: string;\n      referrer?: string;\n    };\n  }\n}\n\n// Base settings from Zod schema\ntype BaseSettings = z.infer<typeof SettingsSchema>;\n\n// InitSettings: what users provide (all optional)\n// Override specific fields with non-serializable types\nexport interface InitSettings extends Partial<\n  Omit<BaseSettings, 'scope' | 'elbLayer'>\n> {\n  scope?: Element | Document;\n  elbLayer?: boolean | string | Elb.Layer;\n}\n\n// Settings: resolved configuration\n// Override specific fields with non-serializable types\nexport interface Settings extends Omit<BaseSettings, 'scope' | 'elbLayer'> {\n  scope?: Element | Document;\n  elbLayer: boolean | string | Elb.Layer;\n}\n\nexport interface Mapping {}\n\nexport type Push = BrowserPush;\n\nexport interface Env extends Source.BaseEnv {\n  elb: Elb.Fn;\n  window?: Window & typeof globalThis;\n  document?: Document;\n}\n\nexport type Types = Source.Types<Settings, Mapping, Push, Env, InitSettings>;\n\nexport type Config = Source.Config<Types>;\n\nexport interface Context {\n  elb: Elb.Fn;\n  settings: Settings;\n  initScope?: (context: Context, settings: Settings) => void;\n}\n\n// ELB Layer types for async command handling\nexport type ELBLayer = Array<Elb.Layer | IArguments>;\nexport interface ELBLayerConfig {\n  name?: string; // Property name for window.elbLayer (default: 'elbLayer')\n}\n\n// Scope type for DOM operations\nexport type Scope = Document | Element;\n","import type { WalkerOS } from '@walkeros/core';\nimport { isString, isDefined } from '@walkeros/core';\n\nexport interface TaggerConfig {\n  prefix?: string;\n}\n\nexport interface TaggerInstance {\n  entity: (name: string) => TaggerInstance;\n  data: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n    ((data: WalkerOS.Properties) => TaggerInstance);\n  scoped: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n    ((scoped: WalkerOS.Properties) => TaggerInstance);\n  action: ((trigger: string, action?: string) => TaggerInstance) &\n    ((actions: Record<string, string>) => TaggerInstance);\n  actions: ((trigger: string, action?: string) => TaggerInstance) &\n    ((actions: Record<string, string>) => TaggerInstance);\n  context: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n    ((context: WalkerOS.Properties) => TaggerInstance);\n  globals: ((key: string, value: WalkerOS.Property) => TaggerInstance) &\n    ((globals: WalkerOS.Properties) => TaggerInstance);\n  link: ((id: string, type: string) => TaggerInstance) &\n    ((links: Record<string, string>) => TaggerInstance);\n  get: () => Record<string, string>;\n}\n\n/**\n * Creates a new tagger instance for generating walkerOS data attributes.\n *\n * @param config The configuration for the tagger.\n * @returns A new tagger instance.\n */\nexport function createTagger(\n  config: TaggerConfig = {},\n): (entity?: string) => TaggerInstance {\n  const prefix = config.prefix || 'data-elb';\n\n  return function (entity?: string): TaggerInstance {\n    // Internal state\n    let currentEntity: string | undefined = undefined; // Only set via .entity() method\n    let namingEntity: string | undefined = entity; // Used for data attribute naming\n    const dataProperties: Record<string, WalkerOS.Properties> = {};\n    const scopedProperties: WalkerOS.Properties = {};\n    const actionProperties: Record<string, string> = {};\n    const actionsProperties: Record<string, string> = {};\n    const contextProperties: WalkerOS.Properties = {};\n    const globalProperties: WalkerOS.Properties = {};\n    const linkProperties: Record<string, string> = {};\n\n    // Helper function to escape special characters\n    function escapeValue(value: WalkerOS.Property | undefined): string {\n      if (!isDefined(value) || value === null) return 'undefined';\n\n      let str = String(value);\n\n      // Escape backslashes first, then other characters\n      str = str.replace(/\\\\/g, '\\\\\\\\');\n      str = str.replace(/;/g, '\\\\;');\n      str = str.replace(/:/g, '\\\\:');\n      str = str.replace(/'/g, \"\\\\'\");\n\n      return str;\n    }\n\n    // Helper function to serialize key-value pairs\n    function serializeKeyValue(obj: WalkerOS.Properties): string {\n      return Object.entries(obj)\n        .map(([key, value]) => `${key}:${escapeValue(value)}`)\n        .join(';');\n    }\n\n    const instance: TaggerInstance = {\n      entity(name: string): TaggerInstance {\n        currentEntity = name;\n        namingEntity = name; // Always update naming scope when entity is set\n        return instance;\n      },\n\n      data(\n        keyOrData: string | WalkerOS.Properties,\n        value?: WalkerOS.Property,\n      ): TaggerInstance {\n        const entityKey = namingEntity ?? '';\n\n        if (!dataProperties[entityKey]) {\n          dataProperties[entityKey] = {};\n        }\n\n        if (isString(keyOrData)) {\n          dataProperties[entityKey][keyOrData] = value;\n        } else {\n          Object.assign(dataProperties[entityKey], keyOrData);\n        }\n\n        return instance;\n      },\n\n      scoped(\n        keyOrScoped: string | WalkerOS.Properties,\n        value?: WalkerOS.Property,\n      ): TaggerInstance {\n        if (isString(keyOrScoped)) {\n          scopedProperties[keyOrScoped] = value;\n        } else {\n          Object.assign(scopedProperties, keyOrScoped);\n        }\n\n        return instance;\n      },\n\n      action(\n        triggerOrActions: string | Record<string, string>,\n        actionValue?: string,\n      ): TaggerInstance {\n        if (isString(triggerOrActions)) {\n          if (isDefined(actionValue)) {\n            // Two parameters: trigger and action\n            actionProperties[triggerOrActions] = actionValue;\n          } else {\n            // Single parameter: could be \"trigger:action\" or just \"trigger\"\n            if (triggerOrActions.includes(':')) {\n              const [trigger, action] = triggerOrActions.split(':', 2);\n              actionProperties[trigger] = action;\n            } else {\n              actionProperties[triggerOrActions] = triggerOrActions;\n            }\n          }\n        } else {\n          Object.assign(actionProperties, triggerOrActions);\n        }\n\n        return instance;\n      },\n\n      actions(\n        triggerOrActions: string | Record<string, string>,\n        actionValue?: string,\n      ): TaggerInstance {\n        if (isString(triggerOrActions)) {\n          if (isDefined(actionValue)) {\n            // Two parameters: trigger and action\n            actionsProperties[triggerOrActions] = actionValue;\n          } else {\n            // Single parameter: could be \"trigger:action\" or just \"trigger\"\n            if (triggerOrActions.includes(':')) {\n              const [trigger, action] = triggerOrActions.split(':', 2);\n              actionsProperties[trigger] = action;\n            } else {\n              actionsProperties[triggerOrActions] = triggerOrActions;\n            }\n          }\n        } else {\n          Object.assign(actionsProperties, triggerOrActions);\n        }\n\n        return instance;\n      },\n\n      context(\n        keyOrContext: string | WalkerOS.Properties,\n        value?: WalkerOS.Property,\n      ): TaggerInstance {\n        if (isString(keyOrContext)) {\n          contextProperties[keyOrContext] = value;\n        } else {\n          Object.assign(contextProperties, keyOrContext);\n        }\n\n        return instance;\n      },\n\n      globals(\n        keyOrGlobals: string | WalkerOS.Properties,\n        value?: WalkerOS.Property,\n      ): TaggerInstance {\n        if (isString(keyOrGlobals)) {\n          globalProperties[keyOrGlobals] = value;\n        } else {\n          Object.assign(globalProperties, keyOrGlobals);\n        }\n\n        return instance;\n      },\n\n      link(\n        idOrLinks: string | Record<string, string>,\n        type?: string,\n      ): TaggerInstance {\n        if (isString(idOrLinks)) {\n          linkProperties[idOrLinks] = type!;\n        } else {\n          Object.assign(linkProperties, idOrLinks);\n        }\n\n        return instance;\n      },\n\n      get(): Record<string, string> {\n        const attributes: Record<string, string> = {};\n\n        // Add entity attribute if set\n        if (currentEntity) {\n          attributes[prefix] = currentEntity;\n        }\n\n        // Add data attributes\n        Object.entries(dataProperties).forEach(([entityKey, props]) => {\n          if (Object.keys(props).length > 0) {\n            const attrName = entityKey\n              ? `${prefix}-${entityKey}`\n              : `${prefix}-`;\n            attributes[attrName] = serializeKeyValue(props);\n          }\n        });\n\n        // Add scoped generic attribute (data-elb_): branch-scoped, bubble-up\n        // only. Suffix must match Const.Commands.Scoped ('_').\n        if (Object.keys(scopedProperties).length > 0) {\n          attributes[`${prefix}_`] = serializeKeyValue(scopedProperties);\n        }\n\n        // Add action attributes\n        if (Object.keys(actionProperties).length > 0) {\n          attributes[`${prefix}action`] = serializeKeyValue(actionProperties);\n        }\n\n        // Add actions attributes (for all entities)\n        if (Object.keys(actionsProperties).length > 0) {\n          attributes[`${prefix}actions`] = serializeKeyValue(actionsProperties);\n        }\n\n        // Add context attributes\n        if (Object.keys(contextProperties).length > 0) {\n          attributes[`${prefix}context`] = serializeKeyValue(contextProperties);\n        }\n\n        // Add global attributes\n        if (Object.keys(globalProperties).length > 0) {\n          attributes[`${prefix}globals`] = serializeKeyValue(globalProperties);\n        }\n\n        // Add link attributes\n        if (Object.keys(linkProperties).length > 0) {\n          attributes[`${prefix}link`] = serializeKeyValue(linkProperties);\n        }\n\n        return attributes;\n      },\n    };\n\n    return instance;\n  };\n}\n"],"mappings":"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","names":["isString","createPushResult","tryCatch","Const","getAttribute","filter","str","elem","elementConfig","_a","_b","event","scopeDoc","scopeWin","Triggers","tryCatch","Const","elem","getAttribute","scrollElements","context","tryCatch","isString","isObject","i","isObject","isString","tryCatch","isString","createPushResult","isString","context"]}