@walkeros/storybook-addon 4.7.2-next-1791147139360 → 4.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,15 +1,26 @@
1
1
  # @walkeros/storybook-addon
2
2
 
3
- ## 4.7.2-next-1791147139360
3
+ ## 4.7.2
4
4
 
5
5
  ### Patch Changes
6
6
 
7
+ - 98398fe: `startFlow` now types each step by the package passed as `code`, so
8
+ settings, mapping rule settings and `env` keys autocomplete and an unknown
9
+ setting is a type error; steps without typed code stay as loose as before. The
10
+ Storybook addon no longer passes a `session` setting the browser source never
11
+ had.
12
+ - Updated dependencies [98398fe]
13
+ - Updated dependencies [98398fe]
7
14
  - Updated dependencies [ff23953]
8
15
  - Updated dependencies [ff23953]
9
- - @walkeros/web-core@4.7.2-next-1791147139360
10
- - @walkeros/web-source-browser@4.7.2-next-1791147139360
11
- - @walkeros/core@4.7.2-next-1791147139360
12
- - @walkeros/collector@4.7.2-next-1791147139360
16
+ - Updated dependencies [98398fe]
17
+ - Updated dependencies [98398fe]
18
+ - Updated dependencies [98398fe]
19
+ - Updated dependencies [98398fe]
20
+ - @walkeros/core@4.7.2
21
+ - @walkeros/web-core@4.7.2
22
+ - @walkeros/web-source-browser@4.7.2
23
+ - @walkeros/collector@4.7.2
13
24
 
14
25
  ## 4.7.1
15
26
 
package/dist/preview.cjs CHANGED
@@ -1,4 +1,4 @@
1
- 'use strict';var previewApi=require('storybook/preview-api'),webSourceBrowser=require('@walkeros/web-source-browser'),collector=require('@walkeros/collector');var g="walkerOS";var p={RESULT:`${g}/result`,REQUEST:`${g}/request`,HIGHLIGHT:`${g}/highlight`,LIVE_EVENT:`${g}/live-event`,ATTRIBUTES_RESULT:`${g}/attributes-result`,ATTRIBUTES_REQUEST:`${g}/attributes-request`};var M={type:"console",push:(t,i)=>{console.log("Storybook Event:",t);},config:{}},V={type:"live",push:(t,i)=>{let o=previewApi.addons.getChannel();o&&o.emit(p.LIVE_EVENT,t);},config:{}};function q(){try{let t=parent.document.querySelector("#storybook-preview-iframe");if(t!=null&&t.contentDocument&&(t!=null&&t.contentWindow))return {document:t.contentDocument,window:t.contentWindow}}catch(t){}return {document,window}}async function C(t){if(!window.__storybookWalker)try{let{document:i,window:o}=q();if(!i){console.warn("Document not available, skipping walkerOS initialization");return}let h=await collector.startFlow({consent:{functional:!0},sources:{browser:{code:webSourceBrowser.sourceBrowser,config:{settings:{pageview:!0,session:!1,elbLayer:"__storybookElbLayer",elb:"__storybookElb",prefix:(t==null?void 0:t.prefix)||"data-elb",scope:i.body||i}},env:{window:o,document:i}}},destinations:{console:{code:M},live:{code:V}}}),{collector:e,elb:n}=h;if(!e)throw new Error("Collector creation failed - no collector returned");window.__storybookWalker=e,window.__storybookElb=n;}catch(i){console.error("Failed to initialize walkerOS:",i);}}var A=()=>{let t=document.querySelector("#storybook-preview-iframe");return t!=null&&t.contentDocument?t.contentDocument:document},u=()=>{let t=A(),i=["#storybook-root","#root",'[data-testid="storybook-root"]',"body"];for(let o of i){let h=t.querySelector(o);if(h)return h}return t.body},_=t=>{let i=[],o=t;for(;o&&o!==document.body&&o.parentElement;){let h=o.tagName.toLowerCase();o.id?h+=`#${o.id}`:o.className&&typeof o.className=="string"&&(h+=`.${o.className.split(" ").filter(e=>e).join(".")}`),i.unshift(h),o=o.parentElement;}return i.join(" > ")},E=(t,i="data-elb")=>{let o=Array.from(t.querySelectorAll("*")),h=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Scoped,false),e=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Action,false),n=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Context,false),d=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Globals,false);o.forEach(s=>{Array.from(s.attributes).some(c=>c.name===h?true:c.name.startsWith(`${i}-`)&&c.name!==e&&c.name!==n&&c.name!==d)&&s.setAttribute(webSourceBrowser.getElbAttributeName(i,"property",false),"");});};var B=(t,i)=>{let o=t.tagName.toLowerCase(),h=webSourceBrowser.getElbAttributeName(i,"property",false),e=Array.from(t.attributes).filter(n=>n.name!==h).map(n=>`${n.name}="${n.value}"`);return e.length===0?`<${o}></${o}>`:e.length===1?`<${o} ${e[0]}></${o}>`:`<${o}
1
+ 'use strict';var previewApi=require('storybook/preview-api'),webSourceBrowser=require('@walkeros/web-source-browser'),collector=require('@walkeros/collector');var g="walkerOS";var p={RESULT:`${g}/result`,REQUEST:`${g}/request`,HIGHLIGHT:`${g}/highlight`,LIVE_EVENT:`${g}/live-event`,ATTRIBUTES_RESULT:`${g}/attributes-result`,ATTRIBUTES_REQUEST:`${g}/attributes-request`};var M={type:"console",push:(t,i)=>{console.log("Storybook Event:",t);},config:{}},V={type:"live",push:(t,i)=>{let o=previewApi.addons.getChannel();o&&o.emit(p.LIVE_EVENT,t);},config:{}};function q(){try{let t=parent.document.querySelector("#storybook-preview-iframe");if(t!=null&&t.contentDocument&&(t!=null&&t.contentWindow))return {document:t.contentDocument,window:t.contentWindow}}catch(t){}return {document,window}}async function C(t){if(!window.__storybookWalker)try{let{document:i,window:o}=q();if(!i){console.warn("Document not available, skipping walkerOS initialization");return}let h=await collector.startFlow({consent:{functional:!0},sources:{browser:{code:webSourceBrowser.sourceBrowser,config:{settings:{pageview:!0,elbLayer:"__storybookElbLayer",elb:"__storybookElb",prefix:(t==null?void 0:t.prefix)||"data-elb",scope:i.body||i}},env:{window:o,document:i}}},destinations:{console:{code:M},live:{code:V}}}),{collector:e,elb:n}=h;if(!e)throw new Error("Collector creation failed - no collector returned");window.__storybookWalker=e,window.__storybookElb=n;}catch(i){console.error("Failed to initialize walkerOS:",i);}}var A=()=>{let t=document.querySelector("#storybook-preview-iframe");return t!=null&&t.contentDocument?t.contentDocument:document},u=()=>{let t=A(),i=["#storybook-root","#root",'[data-testid="storybook-root"]',"body"];for(let o of i){let h=t.querySelector(o);if(h)return h}return t.body},_=t=>{let i=[],o=t;for(;o&&o!==document.body&&o.parentElement;){let h=o.tagName.toLowerCase();o.id?h+=`#${o.id}`:o.className&&typeof o.className=="string"&&(h+=`.${o.className.split(" ").filter(e=>e).join(".")}`),i.unshift(h),o=o.parentElement;}return i.join(" > ")},E=(t,i="data-elb")=>{let o=Array.from(t.querySelectorAll("*")),h=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Scoped,false),e=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Action,false),n=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Context,false),d=webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Globals,false);o.forEach(s=>{Array.from(s.attributes).some(c=>c.name===h?true:c.name.startsWith(`${i}-`)&&c.name!==e&&c.name!==n&&c.name!==d)&&s.setAttribute(webSourceBrowser.getElbAttributeName(i,"property",false),"");});};var B=(t,i)=>{let o=t.tagName.toLowerCase(),h=webSourceBrowser.getElbAttributeName(i,"property",false),e=Array.from(t.attributes).filter(n=>n.name!==h).map(n=>`${n.name}="${n.value}"`);return e.length===0?`<${o}></${o}>`:e.length===1?`<${o} ${e[0]}></${o}>`:`<${o}
2
2
  ${e.map(n=>` ${n}`).join(`
3
3
  `)}
4
4
  ></${o}>`},O={data:3,scoped:2,generic:1},P=(t,i,o,h)=>{if(!i||o==null||o==="")return;let e=t.get(i);(!e||O[h]>O[e.origin])&&t.set(i,{key:i,value:o,origin:h});},k=(t,i,o,h,e)=>{let n=webSourceBrowser.getElbValues(i,o,h,true);Object.entries(n).forEach(([d,s])=>P(t,d,s,e));},D=(t,i=collector.Const.Commands.Prefix)=>{let o=webSourceBrowser.getElbAttributeName(i),h=collector.Const.Commands.Scoped,e=[];t.matches(`[${o}]`)&&e.push(t),t.querySelectorAll(`[${o}]`).forEach(r=>e.push(r));let n=new Set(e),d=r=>{let l=r;for(;l;){if(n.has(l))return l;l=l.parentElement;}return null},s=new Map;e.forEach(r=>{let l=r.getAttribute(o)||"",m=new Map,$=[r];r.querySelectorAll("*").forEach(a=>{d(a)===r&&$.push(a);}),$.forEach(a=>{k(m,i,a,l,"data"),k(m,i,a,"","generic");});let x=r;for(;x;)k(m,i,x,l,"data"),k(m,i,x,"","generic"),Object.entries(webSourceBrowser.getElbValues(i,x,h,false)).forEach(([a,H])=>P(m,a,H,"scoped")),x=x.parentElement;s.set(r,{element:r.tagName.toLowerCase(),path:_(r),htmlMarkup:B(r,i),attributes:{entity:l,action:r.getAttribute(webSourceBrowser.getElbAttributeName(i,collector.Const.Commands.Action,false))||void 0,context:(()=>{let a=webSourceBrowser.getElbValues(i,r,collector.Const.Commands.Context,false);return Object.keys(a).length?a:void 0})(),globals:(()=>{let a=webSourceBrowser.getElbValues(i,r,collector.Const.Commands.Globals,false);return Object.keys(a).length?a:void 0})(),properties:Array.from(m.values())},children:[]});});let b=[];s.forEach((r,l)=>{let m=l.parentElement?d(l.parentElement):null,$=m?s.get(m):void 0;$?$.children.push(r):b.push(r);});let c=webSourceBrowser.getGlobals(i,t),v=[];return Object.entries(c).forEach(([r,l])=>{l!=null&&l!==""&&v.push({key:r,value:l,origin:"data"});}),{nodes:b,globals:v}};var F=t=>{let i=`${t}globals`,o=`${t}context`,h=t,e=`${t}property`;return `
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/walker.ts","../src/utils/domUtils.ts","../src/utils/attributeTreeUtils.ts","../src/utils/cssUtils.ts","../src/utils/highlightingUtils.ts","../src/withRoundTrip.ts","../src/preview.ts"],"names":["ADDON_ID","EVENTS","destinationConsole","event","context","destinationLive","channel","addons","getIframeContext","iframe","e","initializeWalker","config","iframeDoc","iframeWin","result","startFlow","sourceBrowser","collector","elb","error","getStoryDocument","getStoryRootElement","storyDoc","selectors","selector","element","getElementPath","el","path","current","c","enhanceProperties","storyRoot","prefix","allElements","scopedAttr","getElbAttributeName","Const","actionAttr","contextAttr","globalsAttr","attr","generateElementHTML","tagName","propertyMarker","attribs","a","PRIORITY","addProperty","acc","key","value","origin","existing","collectValues","name","values","getElbValues","k","v","buildAttributeTree","scope","entityAttr","scopedName","entityEls","entitySet","owningEntity","cur","nodeMap","entity","props","owned","child","o","anc","g","roots","node","parentEl","parentNode","globalsValues","getGlobals","globals","generateHighlightCSS","globalsSelector","contextSelector","baseSelector","propertySelector","injectHighlightingCSS","existingStyle","highlightingStyleElement","css","applyHighlighting","highlights","setupHighlighting","currentStoryId","events","getAllEvents","eventsWithGlobals","withRoundTrip","storyFn","_a","storyId","hasStoryChanged","parameters","autoRefresh","err","preview","preview_default"],"mappings":"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","file":"preview.cjs","sourcesContent":["export const ADDON_ID = 'walkerOS';\nexport const PANEL_ID = `${ADDON_ID}/panel`;\nexport const KEY = `walkerOS`;\n\nexport const EVENTS = {\n RESULT: `${ADDON_ID}/result`,\n REQUEST: `${ADDON_ID}/request`,\n HIGHLIGHT: `${ADDON_ID}/highlight`,\n LIVE_EVENT: `${ADDON_ID}/live-event`,\n ATTRIBUTES_RESULT: `${ADDON_ID}/attributes-result`,\n ATTRIBUTES_REQUEST: `${ADDON_ID}/attributes-request`,\n};\n","import type { Collector, WalkerOS, Destination } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { sourceBrowser } from '@walkeros/web-source-browser';\nimport { addons } from 'storybook/preview-api';\nimport { EVENTS } from './constants';\n\ndeclare global {\n interface Window {\n __storybookElb: WalkerOS.Elb;\n __storybookWalker: Collector.Instance;\n }\n}\n\n// Simple console destination for Storybook\nconst destinationConsole = {\n type: 'console',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n console.log('Storybook Event:', event);\n },\n config: {},\n};\n\n// Live destination for Storybook panel\nconst destinationLive = {\n type: 'live',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n // Send event to Storybook panel for live display\n const channel = addons.getChannel();\n if (channel) {\n channel.emit(EVENTS.LIVE_EVENT, event);\n }\n },\n config: {},\n};\n\n// Function to get Storybook iframe context\nfunction getIframeContext() {\n try {\n // Try to get iframe from parent document (manager context)\n const iframe = parent.document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument && iframe?.contentWindow) {\n return {\n document: iframe.contentDocument,\n window: iframe.contentWindow,\n };\n }\n } catch (e) {\n // If we can't access parent, we're likely already in iframe context\n }\n\n // Fallback to current context\n return { document, window };\n}\n\nexport async function initializeWalker(config?: {\n prefix?: string;\n autoRefresh?: boolean;\n}): Promise<void> {\n // Skip initialization if already done\n if (window.__storybookWalker) return;\n\n try {\n // Get iframe context for proper event capture\n const { document: iframeDoc, window: iframeWin } = getIframeContext();\n\n if (!iframeDoc) {\n console.warn('Document not available, skipping walkerOS initialization');\n return;\n }\n\n // Create collector with browser source and destinations\n const result = await startFlow({\n consent: { functional: true },\n sources: {\n browser: {\n code: sourceBrowser,\n config: {\n settings: {\n pageview: true,\n session: false,\n elbLayer: '__storybookElbLayer',\n elb: '__storybookElb',\n prefix: config?.prefix || 'data-elb',\n scope: iframeDoc.body || iframeDoc, // Set scope to iframe document\n },\n },\n env: {\n window: iframeWin,\n document: iframeDoc,\n },\n },\n },\n destinations: {\n console: { code: destinationConsole },\n live: { code: destinationLive },\n },\n });\n\n const { collector, elb } = result;\n\n // Verify collector was created successfully\n if (!collector) {\n throw new Error('Collector creation failed - no collector returned');\n }\n\n // Set global window objects\n window.__storybookWalker = collector;\n window.__storybookElb = elb;\n } catch (error) {\n console.error('Failed to initialize walkerOS:', error);\n }\n}\n","// DOM utilities for working with story elements\n\nimport { Const } from '@walkeros/collector';\nimport { getElbAttributeName } from '@walkeros/web-source-browser';\n\n// Function to get the story document (either iframe or main document)\nexport const getStoryDocument = (): Document => {\n // Try to find story iframe\n const iframe = document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument) {\n return iframe.contentDocument;\n }\n // Fallback to main document\n return document;\n};\n\n// Function to get the story root element\nexport const getStoryRootElement = (): Element | null => {\n const storyDoc = getStoryDocument();\n\n // Try multiple selectors for story root\n const selectors = [\n '#storybook-root',\n '#root',\n '[data-testid=\"storybook-root\"]',\n 'body',\n ];\n\n for (const selector of selectors) {\n const element = storyDoc.querySelector(selector);\n if (element) {\n return element;\n }\n }\n\n return storyDoc.body;\n};\n\n// Helper to get element path\nexport const getElementPath = (el: Element): string => {\n const path = [];\n let current = el;\n while (current && current !== document.body && current.parentElement) {\n let selector = current.tagName.toLowerCase();\n if (current.id) {\n selector += `#${current.id}`;\n } else if (current.className && typeof current.className === 'string') {\n selector += `.${current.className\n .split(' ')\n .filter((c) => c)\n .join('.')}`;\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n return path.join(' > ');\n};\n\n// Function to enhance DOM with property attributes\nexport const enhanceProperties = (\n storyRoot: Element,\n prefix: string = 'data-elb',\n): void => {\n // Find all elements with any attributes starting with prefix-\n const allElements = Array.from(storyRoot.querySelectorAll('*'));\n\n const scopedAttr = getElbAttributeName(prefix, Const.Commands.Scoped, false); // data-elb_\n const actionAttr = getElbAttributeName(prefix, Const.Commands.Action, false);\n const contextAttr = getElbAttributeName(\n prefix,\n Const.Commands.Context,\n false,\n );\n const globalsAttr = getElbAttributeName(\n prefix,\n Const.Commands.Globals,\n false,\n );\n\n allElements.forEach((el) => {\n const hasProperties = Array.from(el.attributes).some((attr) => {\n if (attr.name === scopedAttr) return true; // scoped generic data-elb_\n return (\n attr.name.startsWith(`${prefix}-`) &&\n attr.name !== actionAttr &&\n attr.name !== contextAttr &&\n attr.name !== globalsAttr\n );\n });\n\n // Mark elements with property attributes\n if (hasProperties) {\n el.setAttribute(getElbAttributeName(prefix, 'property', false), '');\n }\n });\n};\n","// Builds an entity-centric \"skeleton\" tree: each node is a data-elb entity, with\n// generic (data-elb-), scoped (data-elb_), and explicit (data-elb-<entity>)\n// values resolved onto it and tagged by origin. Interim addon-local\n// approximation of the walker's resolution (see the design doc for fidelity\n// limits: cross-DOM links, shadow piercing, exact collision priority, and\n// context ordering index are out of scope for Phase 1).\n\nimport type { WalkerOS } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport {\n getElbValues,\n getElbAttributeName,\n getGlobals,\n} from '@walkeros/web-source-browser';\nimport type { AttributeNode, ResolvedProperty } from '../types';\nimport { getElementPath } from './domUtils';\n\nconst generateElementHTML = (element: Element, prefix: string): string => {\n const tagName = element.tagName.toLowerCase();\n // Hide the synthetic highlight marker (data-elbproperty) that\n // enhanceProperties stamps on the live DOM; it is an internal helper, not\n // author-written tagging, so it must not appear in the displayed markup.\n const propertyMarker = getElbAttributeName(prefix, 'property', false);\n const attribs = Array.from(element.attributes)\n .filter((a) => a.name !== propertyMarker)\n .map((a) => `${a.name}=\"${a.value}\"`);\n if (attribs.length === 0) return `<${tagName}></${tagName}>`;\n if (attribs.length === 1) return `<${tagName} ${attribs[0]}></${tagName}>`;\n return `<${tagName}\\n${attribs.map((a) => ` ${a}`).join('\\n')}\\n></${tagName}>`;\n};\n\n// Origin priority for same-key collisions (highest first). Approximate; real\n// walker priority is documented as out of scope for Phase 1.\nconst PRIORITY: Record<ResolvedProperty['origin'], number> = {\n data: 3,\n scoped: 2,\n generic: 1,\n};\n\nconst addProperty = (\n acc: Map<string, ResolvedProperty>,\n key: string,\n value: WalkerOS.Property | undefined,\n origin: ResolvedProperty['origin'],\n) => {\n if (!key) return; // never store the blank-key generic\n if (value === undefined || value === null || value === '') return;\n const existing = acc.get(key);\n if (!existing || PRIORITY[origin] > PRIORITY[existing.origin]) {\n acc.set(key, { key, value, origin });\n }\n};\n\nconst collectValues = (\n acc: Map<string, ResolvedProperty>,\n prefix: string,\n el: Element,\n name: string, // '' for generic, entity name for explicit\n origin: ResolvedProperty['origin'],\n) => {\n const values = getElbValues(prefix, el, name, true);\n Object.entries(values).forEach(([k, v]) => addProperty(acc, k, v, origin));\n};\n\nexport const buildAttributeTree = (\n scope: Element,\n prefix: string = Const.Commands.Prefix,\n): { nodes: AttributeNode[]; globals: ResolvedProperty[] } => {\n const entityAttr = getElbAttributeName(prefix); // data-elb\n const scopedName = Const.Commands.Scoped; // '_'\n\n // All entity elements (self + descendants).\n const entityEls: Element[] = [];\n if (scope.matches(`[${entityAttr}]`)) entityEls.push(scope);\n scope.querySelectorAll(`[${entityAttr}]`).forEach((el) => entityEls.push(el));\n const entitySet = new Set(entityEls);\n\n // Nearest ancestor-or-self entity for any element (DOM ancestry).\n const owningEntity = (el: Element): Element | null => {\n let cur: Element | null = el;\n while (cur) {\n if (entitySet.has(cur)) return cur;\n cur = cur.parentElement;\n }\n return null;\n };\n\n const nodeMap = new Map<Element, AttributeNode>();\n\n entityEls.forEach((el) => {\n const entity = el.getAttribute(entityAttr) || '';\n const props = new Map<string, ResolvedProperty>();\n\n // Own + owned descendants: explicit (data-elb-<entity>) and generic (data-elb-)\n const owned: Element[] = [el];\n el.querySelectorAll('*').forEach((child) => {\n if (owningEntity(child) === el) owned.push(child);\n });\n owned.forEach((o) => {\n collectValues(props, prefix, o, entity, 'data');\n collectValues(props, prefix, o, '', 'generic');\n });\n\n // Ancestors (incl. self start): explicit, generic, and scoped (data-elb_)\n let anc: Element | null = el;\n while (anc) {\n collectValues(props, prefix, anc, entity, 'data');\n collectValues(props, prefix, anc, '', 'generic');\n // scoped uses isProperty=false (suffix '_' with no dash)\n Object.entries(getElbValues(prefix, anc, scopedName, false)).forEach(\n ([k, v]) => addProperty(props, k, v, 'scoped'),\n );\n anc = anc.parentElement;\n }\n\n nodeMap.set(el, {\n element: el.tagName.toLowerCase(),\n path: getElementPath(el),\n htmlMarkup: generateElementHTML(el, prefix),\n attributes: {\n entity,\n action:\n el.getAttribute(\n getElbAttributeName(prefix, Const.Commands.Action, false),\n ) || undefined,\n context: (() => {\n const c = getElbValues(prefix, el, Const.Commands.Context, false);\n return Object.keys(c).length ? c : undefined;\n })(),\n globals: (() => {\n const g = getElbValues(prefix, el, Const.Commands.Globals, false);\n return Object.keys(g).length ? g : undefined;\n })(),\n properties: Array.from(props.values()),\n },\n children: [],\n });\n });\n\n // Nest by nearest ancestor entity.\n const roots: AttributeNode[] = [];\n nodeMap.forEach((node, el) => {\n const parentEl = el.parentElement ? owningEntity(el.parentElement) : null;\n const parentNode = parentEl ? nodeMap.get(parentEl) : undefined;\n if (parentNode) parentNode.children.push(node);\n else roots.push(node);\n });\n\n const globalsValues = getGlobals(prefix, scope);\n const globals: ResolvedProperty[] = [];\n Object.entries(globalsValues).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '')\n globals.push({ key, value, origin: 'data' });\n });\n\n return { nodes: roots, globals };\n};\n","// CSS utilities for highlighting DOM elements\n\n// Generate dynamic CSS based on prefix\nexport const generateHighlightCSS = (prefix: string): string => {\n // Define selectors based on prefix\n const globalsSelector = `${prefix}globals`;\n const contextSelector = `${prefix}context`;\n const baseSelector = prefix;\n const propertySelector = `${prefix}property`;\n\n // Template CSS with actual selectors\n const cssTemplate = `\n /* Highlight colors - original from website */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n --highlight-background: #1f2937;\n --highlight-text: #9ca3af;\n --highlight-hover: rgba(255, 255, 255, 0.05);\n --highlight-separator: rgba(255, 255, 255, 0.05);\n }\n\n .highlight-globals [${globalsSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-globals) !important;\n }\n\n .highlight-context [${contextSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-context) !important;\n }\n\n .highlight-entity [${baseSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-entity) !important;\n }\n\n .highlight-property [${propertySelector}] {\n box-shadow: 0 0 0 2px var(--highlight-property) !important;\n }\n\n .highlight-action [${prefix}action] {\n box-shadow: 0 0 0 2px var(--highlight-action) !important;\n }\n\n /* Combined highlights with layered solid borders */\n .highlight-entity.highlight-action [${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-entity.highlight-context [${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-entity.highlight-property [${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context [${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-context.highlight-property [${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-property [${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Globals combinations */\n .highlight-globals.highlight-entity [${globalsSelector}][${baseSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-globals.highlight-action [${globalsSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-context [${globalsSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-property [${globalsSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Triple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action\n [${globalsSelector}][${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context\n [${globalsSelector}][${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-property\n [${globalsSelector}][${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context\n [${globalsSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-action.highlight-property\n [${globalsSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-context.highlight-property\n [${globalsSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Triple combinations with distinct layers */\n .highlight-entity.highlight-action.highlight-context\n [${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n /* Triple combinations with property */\n .highlight-entity.highlight-action.highlight-property\n [${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-entity.highlight-context.highlight-property\n [${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context.highlight-property\n [${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Quadruple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action.highlight-context\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-action.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quadruple combination */\n .highlight-entity.highlight-action.highlight-context.highlight-property\n [${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quintuple combination with all attributes */\n .highlight-globals.highlight-entity.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context),\n 0 0 0 10px var(--highlight-property) !important;\n }\n `;\n\n return cssTemplate;\n};\n\n// Function to inject highlighting CSS into story document\nexport const injectHighlightingCSS = (\n storyDoc: Document,\n prefix: string = 'data-elb',\n): void => {\n // Remove existing styles\n const existingStyle = storyDoc.querySelector('#walkeros-highlighting');\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const highlightingStyleElement = storyDoc.createElement('style');\n highlightingStyleElement.id = 'walkeros-highlighting';\n const css = generateHighlightCSS(prefix);\n highlightingStyleElement.textContent = css;\n\n storyDoc.head.appendChild(highlightingStyleElement);\n};\n","// Utilities for managing DOM highlighting\n\nimport type { WalkerOSAddon } from '../types';\nimport {\n getStoryDocument,\n getStoryRootElement,\n enhanceProperties,\n} from './domUtils';\nimport { injectHighlightingCSS } from './cssUtils';\n\n// Function to apply highlighting to story root\nexport const applyHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) return;\n\n // Remove existing highlighting classes\n storyRoot.classList.remove('highlight-context');\n storyRoot.classList.remove('highlight-entity');\n storyRoot.classList.remove('highlight-property');\n storyRoot.classList.remove('highlight-action');\n storyRoot.classList.remove('highlight-globals');\n\n if (!highlights) return;\n\n // Re-enhance properties FIRST to ensure they're marked\n enhanceProperties(storyRoot, prefix);\n\n // Then add specific highlighting classes\n if (highlights.context) storyRoot.classList.add('highlight-context');\n if (highlights.entity) storyRoot.classList.add('highlight-entity');\n if (highlights.property) storyRoot.classList.add('highlight-property');\n if (highlights.action) storyRoot.classList.add('highlight-action');\n if (highlights.globals) storyRoot.classList.add('highlight-globals');\n};\n\n// Combined function to inject CSS and apply highlighting\nexport const setupHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyDoc = getStoryDocument();\n\n // Always inject CSS first\n injectHighlightingCSS(storyDoc, prefix);\n\n // Then apply highlighting\n applyHighlighting(highlights, prefix);\n};\n","import type { WalkerOSAddon } from './types';\nimport type { DecoratorFunction } from 'storybook/internal/types';\nimport { addons } from 'storybook/preview-api';\nimport { getAllEvents, getGlobals } from '@walkeros/web-source-browser';\n\nimport { ADDON_ID, EVENTS } from './constants';\nimport { initializeWalker } from './walker';\nimport { getStoryRootElement, enhanceProperties } from './utils/domUtils';\nimport { buildAttributeTree } from './utils/attributeTreeUtils';\nimport { setupHighlighting } from './utils/highlightingUtils';\n\n// Set up the channel listener globally, not per story\nconst channel = addons.getChannel();\nlet currentStoryId: string | null = null;\n\n// Global listener for the request events\nchannel.addListener(EVENTS.REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.RESULT, []);\n return;\n }\n\n // Enhance DOM with property attributes\n enhanceProperties(storyRoot, config.prefix || 'data-elb');\n\n const events = getAllEvents(storyRoot as Element, config.prefix);\n\n // Collect globals from data-elbglobals attributes\n const globals = getGlobals(config.prefix || 'data-elb', storyRoot as Element);\n\n // Add globals to each event if any globals exist\n const eventsWithGlobals = events.map((event) => {\n if (Object.keys(globals).length > 0) {\n return { ...event, globals };\n }\n return event;\n });\n\n // Send the result back to the manager\n channel.emit(EVENTS.RESULT, eventsWithGlobals);\n});\n\n// Global listener for highlighting events\nchannel.addListener(EVENTS.HIGHLIGHT, (config: WalkerOSAddon) => {\n setupHighlighting(config.highlights, config.prefix);\n});\n\n// Global listener for attribute tree requests\nchannel.addListener(EVENTS.ATTRIBUTES_REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.ATTRIBUTES_RESULT, { nodes: [], globals: [] });\n return;\n }\n\n // Build the skeleton tree ({ nodes, globals })\n const result = buildAttributeTree(\n storyRoot as Element,\n config.prefix || 'data-elb',\n );\n\n // Send the result back to the manager\n channel.emit(EVENTS.ATTRIBUTES_RESULT, result);\n});\n\nexport const withRoundTrip: DecoratorFunction = (storyFn, context) => {\n // Check if story changed and auto-run is enabled\n const storyId = context.id;\n const hasStoryChanged = currentStoryId !== storyId;\n const { parameters } = context;\n const autoRefresh = parameters?.[ADDON_ID]?.autoRefresh;\n\n if (hasStoryChanged) {\n currentStoryId = storyId;\n }\n\n const result = storyFn();\n\n // Initialize walker and inject CSS after story renders\n setTimeout(() => {\n // Initialize walkerOS for live event capture\n const prefix = parameters?.[ADDON_ID]?.prefix || 'data-elb';\n initializeWalker({ prefix, autoRefresh }).catch((err) => {\n console.error('Walker initialization failed:', err);\n });\n\n // Inject highlighting CSS and enhance properties\n const storyRoot = getStoryRootElement();\n if (storyRoot) {\n setupHighlighting(undefined, prefix);\n enhanceProperties(storyRoot, prefix);\n }\n\n // Auto-run walker if story changed and auto-refresh is enabled\n if (hasStoryChanged && autoRefresh && window.__storybookElb) {\n window.__storybookElb('walker run');\n }\n }, 200);\n\n return result;\n};\n","/**\n * A decorator is a way to wrap a story in extra “rendering” functionality. Many addons define decorators\n * in order to augment stories:\n * - with extra rendering\n * - gather details about how a story is rendered\n *\n * When writing stories, decorators are typically used to wrap stories with extra markup or context mocking.\n *\n * https://storybook.js.org/docs/react/writing-stories/decorators\n */\nimport type { ProjectAnnotations, Renderer } from 'storybook/internal/types';\n\nimport { ADDON_ID } from './constants';\nimport { withRoundTrip } from './withRoundTrip';\n\n/**\n * Note: if you want to use JSX in this file, rename it to `preview.tsx`\n * and update the entry prop in tsup.config.ts to use \"src/preview.tsx\",\n */\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withRoundTrip],\n parameters: {\n [ADDON_ID]: {\n autoRefresh: true,\n prefix: 'data-elb',\n },\n },\n};\n\nexport default preview;\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/walker.ts","../src/utils/domUtils.ts","../src/utils/attributeTreeUtils.ts","../src/utils/cssUtils.ts","../src/utils/highlightingUtils.ts","../src/withRoundTrip.ts","../src/preview.ts"],"names":["ADDON_ID","EVENTS","destinationConsole","event","context","destinationLive","channel","addons","getIframeContext","iframe","e","initializeWalker","config","iframeDoc","iframeWin","result","startFlow","sourceBrowser","collector","elb","error","getStoryDocument","getStoryRootElement","storyDoc","selectors","selector","element","getElementPath","el","path","current","c","enhanceProperties","storyRoot","prefix","allElements","scopedAttr","getElbAttributeName","Const","actionAttr","contextAttr","globalsAttr","attr","generateElementHTML","tagName","propertyMarker","attribs","a","PRIORITY","addProperty","acc","key","value","origin","existing","collectValues","name","values","getElbValues","k","v","buildAttributeTree","scope","entityAttr","scopedName","entityEls","entitySet","owningEntity","cur","nodeMap","entity","props","owned","child","o","anc","g","roots","node","parentEl","parentNode","globalsValues","getGlobals","globals","generateHighlightCSS","globalsSelector","contextSelector","baseSelector","propertySelector","injectHighlightingCSS","existingStyle","highlightingStyleElement","css","applyHighlighting","highlights","setupHighlighting","currentStoryId","events","getAllEvents","eventsWithGlobals","withRoundTrip","storyFn","_a","storyId","hasStoryChanged","parameters","autoRefresh","err","preview","preview_default"],"mappings":"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","file":"preview.cjs","sourcesContent":["export const ADDON_ID = 'walkerOS';\nexport const PANEL_ID = `${ADDON_ID}/panel`;\nexport const KEY = `walkerOS`;\n\nexport const EVENTS = {\n RESULT: `${ADDON_ID}/result`,\n REQUEST: `${ADDON_ID}/request`,\n HIGHLIGHT: `${ADDON_ID}/highlight`,\n LIVE_EVENT: `${ADDON_ID}/live-event`,\n ATTRIBUTES_RESULT: `${ADDON_ID}/attributes-result`,\n ATTRIBUTES_REQUEST: `${ADDON_ID}/attributes-request`,\n};\n","import type { Collector, WalkerOS, Destination } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { sourceBrowser } from '@walkeros/web-source-browser';\nimport { addons } from 'storybook/preview-api';\nimport { EVENTS } from './constants';\n\ndeclare global {\n interface Window {\n __storybookElb: WalkerOS.Elb;\n __storybookWalker: Collector.Instance;\n }\n}\n\n// Simple console destination for Storybook\nconst destinationConsole = {\n type: 'console',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n console.log('Storybook Event:', event);\n },\n config: {},\n};\n\n// Live destination for Storybook panel\nconst destinationLive = {\n type: 'live',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n // Send event to Storybook panel for live display\n const channel = addons.getChannel();\n if (channel) {\n channel.emit(EVENTS.LIVE_EVENT, event);\n }\n },\n config: {},\n};\n\n// Function to get Storybook iframe context\nfunction getIframeContext() {\n try {\n // Try to get iframe from parent document (manager context)\n const iframe = parent.document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument && iframe?.contentWindow) {\n return {\n document: iframe.contentDocument,\n window: iframe.contentWindow,\n };\n }\n } catch (e) {\n // If we can't access parent, we're likely already in iframe context\n }\n\n // Fallback to current context\n return { document, window };\n}\n\nexport async function initializeWalker(config?: {\n prefix?: string;\n autoRefresh?: boolean;\n}): Promise<void> {\n // Skip initialization if already done\n if (window.__storybookWalker) return;\n\n try {\n // Get iframe context for proper event capture\n const { document: iframeDoc, window: iframeWin } = getIframeContext();\n\n if (!iframeDoc) {\n console.warn('Document not available, skipping walkerOS initialization');\n return;\n }\n\n // Create collector with browser source and destinations\n const result = await startFlow({\n consent: { functional: true },\n sources: {\n browser: {\n code: sourceBrowser,\n config: {\n settings: {\n pageview: true,\n elbLayer: '__storybookElbLayer',\n elb: '__storybookElb',\n prefix: config?.prefix || 'data-elb',\n scope: iframeDoc.body || iframeDoc, // Set scope to iframe document\n },\n },\n env: {\n window: iframeWin,\n document: iframeDoc,\n },\n },\n },\n destinations: {\n console: { code: destinationConsole },\n live: { code: destinationLive },\n },\n });\n\n const { collector, elb } = result;\n\n // Verify collector was created successfully\n if (!collector) {\n throw new Error('Collector creation failed - no collector returned');\n }\n\n // Set global window objects\n window.__storybookWalker = collector;\n window.__storybookElb = elb;\n } catch (error) {\n console.error('Failed to initialize walkerOS:', error);\n }\n}\n","// DOM utilities for working with story elements\n\nimport { Const } from '@walkeros/collector';\nimport { getElbAttributeName } from '@walkeros/web-source-browser';\n\n// Function to get the story document (either iframe or main document)\nexport const getStoryDocument = (): Document => {\n // Try to find story iframe\n const iframe = document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument) {\n return iframe.contentDocument;\n }\n // Fallback to main document\n return document;\n};\n\n// Function to get the story root element\nexport const getStoryRootElement = (): Element | null => {\n const storyDoc = getStoryDocument();\n\n // Try multiple selectors for story root\n const selectors = [\n '#storybook-root',\n '#root',\n '[data-testid=\"storybook-root\"]',\n 'body',\n ];\n\n for (const selector of selectors) {\n const element = storyDoc.querySelector(selector);\n if (element) {\n return element;\n }\n }\n\n return storyDoc.body;\n};\n\n// Helper to get element path\nexport const getElementPath = (el: Element): string => {\n const path = [];\n let current = el;\n while (current && current !== document.body && current.parentElement) {\n let selector = current.tagName.toLowerCase();\n if (current.id) {\n selector += `#${current.id}`;\n } else if (current.className && typeof current.className === 'string') {\n selector += `.${current.className\n .split(' ')\n .filter((c) => c)\n .join('.')}`;\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n return path.join(' > ');\n};\n\n// Function to enhance DOM with property attributes\nexport const enhanceProperties = (\n storyRoot: Element,\n prefix: string = 'data-elb',\n): void => {\n // Find all elements with any attributes starting with prefix-\n const allElements = Array.from(storyRoot.querySelectorAll('*'));\n\n const scopedAttr = getElbAttributeName(prefix, Const.Commands.Scoped, false); // data-elb_\n const actionAttr = getElbAttributeName(prefix, Const.Commands.Action, false);\n const contextAttr = getElbAttributeName(\n prefix,\n Const.Commands.Context,\n false,\n );\n const globalsAttr = getElbAttributeName(\n prefix,\n Const.Commands.Globals,\n false,\n );\n\n allElements.forEach((el) => {\n const hasProperties = Array.from(el.attributes).some((attr) => {\n if (attr.name === scopedAttr) return true; // scoped generic data-elb_\n return (\n attr.name.startsWith(`${prefix}-`) &&\n attr.name !== actionAttr &&\n attr.name !== contextAttr &&\n attr.name !== globalsAttr\n );\n });\n\n // Mark elements with property attributes\n if (hasProperties) {\n el.setAttribute(getElbAttributeName(prefix, 'property', false), '');\n }\n });\n};\n","// Builds an entity-centric \"skeleton\" tree: each node is a data-elb entity, with\n// generic (data-elb-), scoped (data-elb_), and explicit (data-elb-<entity>)\n// values resolved onto it and tagged by origin. Interim addon-local\n// approximation of the walker's resolution (see the design doc for fidelity\n// limits: cross-DOM links, shadow piercing, exact collision priority, and\n// context ordering index are out of scope for Phase 1).\n\nimport type { WalkerOS } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport {\n getElbValues,\n getElbAttributeName,\n getGlobals,\n} from '@walkeros/web-source-browser';\nimport type { AttributeNode, ResolvedProperty } from '../types';\nimport { getElementPath } from './domUtils';\n\nconst generateElementHTML = (element: Element, prefix: string): string => {\n const tagName = element.tagName.toLowerCase();\n // Hide the synthetic highlight marker (data-elbproperty) that\n // enhanceProperties stamps on the live DOM; it is an internal helper, not\n // author-written tagging, so it must not appear in the displayed markup.\n const propertyMarker = getElbAttributeName(prefix, 'property', false);\n const attribs = Array.from(element.attributes)\n .filter((a) => a.name !== propertyMarker)\n .map((a) => `${a.name}=\"${a.value}\"`);\n if (attribs.length === 0) return `<${tagName}></${tagName}>`;\n if (attribs.length === 1) return `<${tagName} ${attribs[0]}></${tagName}>`;\n return `<${tagName}\\n${attribs.map((a) => ` ${a}`).join('\\n')}\\n></${tagName}>`;\n};\n\n// Origin priority for same-key collisions (highest first). Approximate; real\n// walker priority is documented as out of scope for Phase 1.\nconst PRIORITY: Record<ResolvedProperty['origin'], number> = {\n data: 3,\n scoped: 2,\n generic: 1,\n};\n\nconst addProperty = (\n acc: Map<string, ResolvedProperty>,\n key: string,\n value: WalkerOS.Property | undefined,\n origin: ResolvedProperty['origin'],\n) => {\n if (!key) return; // never store the blank-key generic\n if (value === undefined || value === null || value === '') return;\n const existing = acc.get(key);\n if (!existing || PRIORITY[origin] > PRIORITY[existing.origin]) {\n acc.set(key, { key, value, origin });\n }\n};\n\nconst collectValues = (\n acc: Map<string, ResolvedProperty>,\n prefix: string,\n el: Element,\n name: string, // '' for generic, entity name for explicit\n origin: ResolvedProperty['origin'],\n) => {\n const values = getElbValues(prefix, el, name, true);\n Object.entries(values).forEach(([k, v]) => addProperty(acc, k, v, origin));\n};\n\nexport const buildAttributeTree = (\n scope: Element,\n prefix: string = Const.Commands.Prefix,\n): { nodes: AttributeNode[]; globals: ResolvedProperty[] } => {\n const entityAttr = getElbAttributeName(prefix); // data-elb\n const scopedName = Const.Commands.Scoped; // '_'\n\n // All entity elements (self + descendants).\n const entityEls: Element[] = [];\n if (scope.matches(`[${entityAttr}]`)) entityEls.push(scope);\n scope.querySelectorAll(`[${entityAttr}]`).forEach((el) => entityEls.push(el));\n const entitySet = new Set(entityEls);\n\n // Nearest ancestor-or-self entity for any element (DOM ancestry).\n const owningEntity = (el: Element): Element | null => {\n let cur: Element | null = el;\n while (cur) {\n if (entitySet.has(cur)) return cur;\n cur = cur.parentElement;\n }\n return null;\n };\n\n const nodeMap = new Map<Element, AttributeNode>();\n\n entityEls.forEach((el) => {\n const entity = el.getAttribute(entityAttr) || '';\n const props = new Map<string, ResolvedProperty>();\n\n // Own + owned descendants: explicit (data-elb-<entity>) and generic (data-elb-)\n const owned: Element[] = [el];\n el.querySelectorAll('*').forEach((child) => {\n if (owningEntity(child) === el) owned.push(child);\n });\n owned.forEach((o) => {\n collectValues(props, prefix, o, entity, 'data');\n collectValues(props, prefix, o, '', 'generic');\n });\n\n // Ancestors (incl. self start): explicit, generic, and scoped (data-elb_)\n let anc: Element | null = el;\n while (anc) {\n collectValues(props, prefix, anc, entity, 'data');\n collectValues(props, prefix, anc, '', 'generic');\n // scoped uses isProperty=false (suffix '_' with no dash)\n Object.entries(getElbValues(prefix, anc, scopedName, false)).forEach(\n ([k, v]) => addProperty(props, k, v, 'scoped'),\n );\n anc = anc.parentElement;\n }\n\n nodeMap.set(el, {\n element: el.tagName.toLowerCase(),\n path: getElementPath(el),\n htmlMarkup: generateElementHTML(el, prefix),\n attributes: {\n entity,\n action:\n el.getAttribute(\n getElbAttributeName(prefix, Const.Commands.Action, false),\n ) || undefined,\n context: (() => {\n const c = getElbValues(prefix, el, Const.Commands.Context, false);\n return Object.keys(c).length ? c : undefined;\n })(),\n globals: (() => {\n const g = getElbValues(prefix, el, Const.Commands.Globals, false);\n return Object.keys(g).length ? g : undefined;\n })(),\n properties: Array.from(props.values()),\n },\n children: [],\n });\n });\n\n // Nest by nearest ancestor entity.\n const roots: AttributeNode[] = [];\n nodeMap.forEach((node, el) => {\n const parentEl = el.parentElement ? owningEntity(el.parentElement) : null;\n const parentNode = parentEl ? nodeMap.get(parentEl) : undefined;\n if (parentNode) parentNode.children.push(node);\n else roots.push(node);\n });\n\n const globalsValues = getGlobals(prefix, scope);\n const globals: ResolvedProperty[] = [];\n Object.entries(globalsValues).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '')\n globals.push({ key, value, origin: 'data' });\n });\n\n return { nodes: roots, globals };\n};\n","// CSS utilities for highlighting DOM elements\n\n// Generate dynamic CSS based on prefix\nexport const generateHighlightCSS = (prefix: string): string => {\n // Define selectors based on prefix\n const globalsSelector = `${prefix}globals`;\n const contextSelector = `${prefix}context`;\n const baseSelector = prefix;\n const propertySelector = `${prefix}property`;\n\n // Template CSS with actual selectors\n const cssTemplate = `\n /* Highlight colors - original from website */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n --highlight-background: #1f2937;\n --highlight-text: #9ca3af;\n --highlight-hover: rgba(255, 255, 255, 0.05);\n --highlight-separator: rgba(255, 255, 255, 0.05);\n }\n\n .highlight-globals [${globalsSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-globals) !important;\n }\n\n .highlight-context [${contextSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-context) !important;\n }\n\n .highlight-entity [${baseSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-entity) !important;\n }\n\n .highlight-property [${propertySelector}] {\n box-shadow: 0 0 0 2px var(--highlight-property) !important;\n }\n\n .highlight-action [${prefix}action] {\n box-shadow: 0 0 0 2px var(--highlight-action) !important;\n }\n\n /* Combined highlights with layered solid borders */\n .highlight-entity.highlight-action [${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-entity.highlight-context [${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-entity.highlight-property [${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context [${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-context.highlight-property [${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-property [${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Globals combinations */\n .highlight-globals.highlight-entity [${globalsSelector}][${baseSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-globals.highlight-action [${globalsSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-context [${globalsSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-property [${globalsSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Triple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action\n [${globalsSelector}][${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context\n [${globalsSelector}][${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-property\n [${globalsSelector}][${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context\n [${globalsSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-action.highlight-property\n [${globalsSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-context.highlight-property\n [${globalsSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Triple combinations with distinct layers */\n .highlight-entity.highlight-action.highlight-context\n [${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n /* Triple combinations with property */\n .highlight-entity.highlight-action.highlight-property\n [${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-entity.highlight-context.highlight-property\n [${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context.highlight-property\n [${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Quadruple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action.highlight-context\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-action.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quadruple combination */\n .highlight-entity.highlight-action.highlight-context.highlight-property\n [${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quintuple combination with all attributes */\n .highlight-globals.highlight-entity.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context),\n 0 0 0 10px var(--highlight-property) !important;\n }\n `;\n\n return cssTemplate;\n};\n\n// Function to inject highlighting CSS into story document\nexport const injectHighlightingCSS = (\n storyDoc: Document,\n prefix: string = 'data-elb',\n): void => {\n // Remove existing styles\n const existingStyle = storyDoc.querySelector('#walkeros-highlighting');\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const highlightingStyleElement = storyDoc.createElement('style');\n highlightingStyleElement.id = 'walkeros-highlighting';\n const css = generateHighlightCSS(prefix);\n highlightingStyleElement.textContent = css;\n\n storyDoc.head.appendChild(highlightingStyleElement);\n};\n","// Utilities for managing DOM highlighting\n\nimport type { WalkerOSAddon } from '../types';\nimport {\n getStoryDocument,\n getStoryRootElement,\n enhanceProperties,\n} from './domUtils';\nimport { injectHighlightingCSS } from './cssUtils';\n\n// Function to apply highlighting to story root\nexport const applyHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) return;\n\n // Remove existing highlighting classes\n storyRoot.classList.remove('highlight-context');\n storyRoot.classList.remove('highlight-entity');\n storyRoot.classList.remove('highlight-property');\n storyRoot.classList.remove('highlight-action');\n storyRoot.classList.remove('highlight-globals');\n\n if (!highlights) return;\n\n // Re-enhance properties FIRST to ensure they're marked\n enhanceProperties(storyRoot, prefix);\n\n // Then add specific highlighting classes\n if (highlights.context) storyRoot.classList.add('highlight-context');\n if (highlights.entity) storyRoot.classList.add('highlight-entity');\n if (highlights.property) storyRoot.classList.add('highlight-property');\n if (highlights.action) storyRoot.classList.add('highlight-action');\n if (highlights.globals) storyRoot.classList.add('highlight-globals');\n};\n\n// Combined function to inject CSS and apply highlighting\nexport const setupHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyDoc = getStoryDocument();\n\n // Always inject CSS first\n injectHighlightingCSS(storyDoc, prefix);\n\n // Then apply highlighting\n applyHighlighting(highlights, prefix);\n};\n","import type { WalkerOSAddon } from './types';\nimport type { DecoratorFunction } from 'storybook/internal/types';\nimport { addons } from 'storybook/preview-api';\nimport { getAllEvents, getGlobals } from '@walkeros/web-source-browser';\n\nimport { ADDON_ID, EVENTS } from './constants';\nimport { initializeWalker } from './walker';\nimport { getStoryRootElement, enhanceProperties } from './utils/domUtils';\nimport { buildAttributeTree } from './utils/attributeTreeUtils';\nimport { setupHighlighting } from './utils/highlightingUtils';\n\n// Set up the channel listener globally, not per story\nconst channel = addons.getChannel();\nlet currentStoryId: string | null = null;\n\n// Global listener for the request events\nchannel.addListener(EVENTS.REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.RESULT, []);\n return;\n }\n\n // Enhance DOM with property attributes\n enhanceProperties(storyRoot, config.prefix || 'data-elb');\n\n const events = getAllEvents(storyRoot as Element, config.prefix);\n\n // Collect globals from data-elbglobals attributes\n const globals = getGlobals(config.prefix || 'data-elb', storyRoot as Element);\n\n // Add globals to each event if any globals exist\n const eventsWithGlobals = events.map((event) => {\n if (Object.keys(globals).length > 0) {\n return { ...event, globals };\n }\n return event;\n });\n\n // Send the result back to the manager\n channel.emit(EVENTS.RESULT, eventsWithGlobals);\n});\n\n// Global listener for highlighting events\nchannel.addListener(EVENTS.HIGHLIGHT, (config: WalkerOSAddon) => {\n setupHighlighting(config.highlights, config.prefix);\n});\n\n// Global listener for attribute tree requests\nchannel.addListener(EVENTS.ATTRIBUTES_REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.ATTRIBUTES_RESULT, { nodes: [], globals: [] });\n return;\n }\n\n // Build the skeleton tree ({ nodes, globals })\n const result = buildAttributeTree(\n storyRoot as Element,\n config.prefix || 'data-elb',\n );\n\n // Send the result back to the manager\n channel.emit(EVENTS.ATTRIBUTES_RESULT, result);\n});\n\nexport const withRoundTrip: DecoratorFunction = (storyFn, context) => {\n // Check if story changed and auto-run is enabled\n const storyId = context.id;\n const hasStoryChanged = currentStoryId !== storyId;\n const { parameters } = context;\n const autoRefresh = parameters?.[ADDON_ID]?.autoRefresh;\n\n if (hasStoryChanged) {\n currentStoryId = storyId;\n }\n\n const result = storyFn();\n\n // Initialize walker and inject CSS after story renders\n setTimeout(() => {\n // Initialize walkerOS for live event capture\n const prefix = parameters?.[ADDON_ID]?.prefix || 'data-elb';\n initializeWalker({ prefix, autoRefresh }).catch((err) => {\n console.error('Walker initialization failed:', err);\n });\n\n // Inject highlighting CSS and enhance properties\n const storyRoot = getStoryRootElement();\n if (storyRoot) {\n setupHighlighting(undefined, prefix);\n enhanceProperties(storyRoot, prefix);\n }\n\n // Auto-run walker if story changed and auto-refresh is enabled\n if (hasStoryChanged && autoRefresh && window.__storybookElb) {\n window.__storybookElb('walker run');\n }\n }, 200);\n\n return result;\n};\n","/**\n * A decorator is a way to wrap a story in extra “rendering” functionality. Many addons define decorators\n * in order to augment stories:\n * - with extra rendering\n * - gather details about how a story is rendered\n *\n * When writing stories, decorators are typically used to wrap stories with extra markup or context mocking.\n *\n * https://storybook.js.org/docs/react/writing-stories/decorators\n */\nimport type { ProjectAnnotations, Renderer } from 'storybook/internal/types';\n\nimport { ADDON_ID } from './constants';\nimport { withRoundTrip } from './withRoundTrip';\n\n/**\n * Note: if you want to use JSX in this file, rename it to `preview.tsx`\n * and update the entry prop in tsup.config.ts to use \"src/preview.tsx\",\n */\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withRoundTrip],\n parameters: {\n [ADDON_ID]: {\n autoRefresh: true,\n prefix: 'data-elb',\n },\n },\n};\n\nexport default preview;\n"]}
package/dist/preview.js CHANGED
@@ -1,4 +1,4 @@
1
- import {addons}from'storybook/preview-api';import {getAllEvents,getGlobals,getElbAttributeName,getElbValues,sourceBrowser}from'@walkeros/web-source-browser';import {Const,startFlow}from'@walkeros/collector';var g="walkerOS";var p={RESULT:`${g}/result`,REQUEST:`${g}/request`,HIGHLIGHT:`${g}/highlight`,LIVE_EVENT:`${g}/live-event`,ATTRIBUTES_RESULT:`${g}/attributes-result`,ATTRIBUTES_REQUEST:`${g}/attributes-request`};var M={type:"console",push:(t,i)=>{console.log("Storybook Event:",t);},config:{}},V={type:"live",push:(t,i)=>{let o=addons.getChannel();o&&o.emit(p.LIVE_EVENT,t);},config:{}};function q(){try{let t=parent.document.querySelector("#storybook-preview-iframe");if(t!=null&&t.contentDocument&&(t!=null&&t.contentWindow))return {document:t.contentDocument,window:t.contentWindow}}catch(t){}return {document,window}}async function C(t){if(!window.__storybookWalker)try{let{document:i,window:o}=q();if(!i){console.warn("Document not available, skipping walkerOS initialization");return}let h=await startFlow({consent:{functional:!0},sources:{browser:{code:sourceBrowser,config:{settings:{pageview:!0,session:!1,elbLayer:"__storybookElbLayer",elb:"__storybookElb",prefix:(t==null?void 0:t.prefix)||"data-elb",scope:i.body||i}},env:{window:o,document:i}}},destinations:{console:{code:M},live:{code:V}}}),{collector:e,elb:n}=h;if(!e)throw new Error("Collector creation failed - no collector returned");window.__storybookWalker=e,window.__storybookElb=n;}catch(i){console.error("Failed to initialize walkerOS:",i);}}var A=()=>{let t=document.querySelector("#storybook-preview-iframe");return t!=null&&t.contentDocument?t.contentDocument:document},u=()=>{let t=A(),i=["#storybook-root","#root",'[data-testid="storybook-root"]',"body"];for(let o of i){let h=t.querySelector(o);if(h)return h}return t.body},_=t=>{let i=[],o=t;for(;o&&o!==document.body&&o.parentElement;){let h=o.tagName.toLowerCase();o.id?h+=`#${o.id}`:o.className&&typeof o.className=="string"&&(h+=`.${o.className.split(" ").filter(e=>e).join(".")}`),i.unshift(h),o=o.parentElement;}return i.join(" > ")},E=(t,i="data-elb")=>{let o=Array.from(t.querySelectorAll("*")),h=getElbAttributeName(i,Const.Commands.Scoped,false),e=getElbAttributeName(i,Const.Commands.Action,false),n=getElbAttributeName(i,Const.Commands.Context,false),d=getElbAttributeName(i,Const.Commands.Globals,false);o.forEach(s=>{Array.from(s.attributes).some(c=>c.name===h?true:c.name.startsWith(`${i}-`)&&c.name!==e&&c.name!==n&&c.name!==d)&&s.setAttribute(getElbAttributeName(i,"property",false),"");});};var B=(t,i)=>{let o=t.tagName.toLowerCase(),h=getElbAttributeName(i,"property",false),e=Array.from(t.attributes).filter(n=>n.name!==h).map(n=>`${n.name}="${n.value}"`);return e.length===0?`<${o}></${o}>`:e.length===1?`<${o} ${e[0]}></${o}>`:`<${o}
1
+ import {addons}from'storybook/preview-api';import {getAllEvents,getGlobals,getElbAttributeName,getElbValues,sourceBrowser}from'@walkeros/web-source-browser';import {Const,startFlow}from'@walkeros/collector';var g="walkerOS";var p={RESULT:`${g}/result`,REQUEST:`${g}/request`,HIGHLIGHT:`${g}/highlight`,LIVE_EVENT:`${g}/live-event`,ATTRIBUTES_RESULT:`${g}/attributes-result`,ATTRIBUTES_REQUEST:`${g}/attributes-request`};var M={type:"console",push:(t,i)=>{console.log("Storybook Event:",t);},config:{}},V={type:"live",push:(t,i)=>{let o=addons.getChannel();o&&o.emit(p.LIVE_EVENT,t);},config:{}};function q(){try{let t=parent.document.querySelector("#storybook-preview-iframe");if(t!=null&&t.contentDocument&&(t!=null&&t.contentWindow))return {document:t.contentDocument,window:t.contentWindow}}catch(t){}return {document,window}}async function C(t){if(!window.__storybookWalker)try{let{document:i,window:o}=q();if(!i){console.warn("Document not available, skipping walkerOS initialization");return}let h=await startFlow({consent:{functional:!0},sources:{browser:{code:sourceBrowser,config:{settings:{pageview:!0,elbLayer:"__storybookElbLayer",elb:"__storybookElb",prefix:(t==null?void 0:t.prefix)||"data-elb",scope:i.body||i}},env:{window:o,document:i}}},destinations:{console:{code:M},live:{code:V}}}),{collector:e,elb:n}=h;if(!e)throw new Error("Collector creation failed - no collector returned");window.__storybookWalker=e,window.__storybookElb=n;}catch(i){console.error("Failed to initialize walkerOS:",i);}}var A=()=>{let t=document.querySelector("#storybook-preview-iframe");return t!=null&&t.contentDocument?t.contentDocument:document},u=()=>{let t=A(),i=["#storybook-root","#root",'[data-testid="storybook-root"]',"body"];for(let o of i){let h=t.querySelector(o);if(h)return h}return t.body},_=t=>{let i=[],o=t;for(;o&&o!==document.body&&o.parentElement;){let h=o.tagName.toLowerCase();o.id?h+=`#${o.id}`:o.className&&typeof o.className=="string"&&(h+=`.${o.className.split(" ").filter(e=>e).join(".")}`),i.unshift(h),o=o.parentElement;}return i.join(" > ")},E=(t,i="data-elb")=>{let o=Array.from(t.querySelectorAll("*")),h=getElbAttributeName(i,Const.Commands.Scoped,false),e=getElbAttributeName(i,Const.Commands.Action,false),n=getElbAttributeName(i,Const.Commands.Context,false),d=getElbAttributeName(i,Const.Commands.Globals,false);o.forEach(s=>{Array.from(s.attributes).some(c=>c.name===h?true:c.name.startsWith(`${i}-`)&&c.name!==e&&c.name!==n&&c.name!==d)&&s.setAttribute(getElbAttributeName(i,"property",false),"");});};var B=(t,i)=>{let o=t.tagName.toLowerCase(),h=getElbAttributeName(i,"property",false),e=Array.from(t.attributes).filter(n=>n.name!==h).map(n=>`${n.name}="${n.value}"`);return e.length===0?`<${o}></${o}>`:e.length===1?`<${o} ${e[0]}></${o}>`:`<${o}
2
2
  ${e.map(n=>` ${n}`).join(`
3
3
  `)}
4
4
  ></${o}>`},O={data:3,scoped:2,generic:1},P=(t,i,o,h)=>{if(!i||o==null||o==="")return;let e=t.get(i);(!e||O[h]>O[e.origin])&&t.set(i,{key:i,value:o,origin:h});},k=(t,i,o,h,e)=>{let n=getElbValues(i,o,h,true);Object.entries(n).forEach(([d,s])=>P(t,d,s,e));},D=(t,i=Const.Commands.Prefix)=>{let o=getElbAttributeName(i),h=Const.Commands.Scoped,e=[];t.matches(`[${o}]`)&&e.push(t),t.querySelectorAll(`[${o}]`).forEach(r=>e.push(r));let n=new Set(e),d=r=>{let l=r;for(;l;){if(n.has(l))return l;l=l.parentElement;}return null},s=new Map;e.forEach(r=>{let l=r.getAttribute(o)||"",m=new Map,$=[r];r.querySelectorAll("*").forEach(a=>{d(a)===r&&$.push(a);}),$.forEach(a=>{k(m,i,a,l,"data"),k(m,i,a,"","generic");});let x=r;for(;x;)k(m,i,x,l,"data"),k(m,i,x,"","generic"),Object.entries(getElbValues(i,x,h,false)).forEach(([a,H])=>P(m,a,H,"scoped")),x=x.parentElement;s.set(r,{element:r.tagName.toLowerCase(),path:_(r),htmlMarkup:B(r,i),attributes:{entity:l,action:r.getAttribute(getElbAttributeName(i,Const.Commands.Action,false))||void 0,context:(()=>{let a=getElbValues(i,r,Const.Commands.Context,false);return Object.keys(a).length?a:void 0})(),globals:(()=>{let a=getElbValues(i,r,Const.Commands.Globals,false);return Object.keys(a).length?a:void 0})(),properties:Array.from(m.values())},children:[]});});let b=[];s.forEach((r,l)=>{let m=l.parentElement?d(l.parentElement):null,$=m?s.get(m):void 0;$?$.children.push(r):b.push(r);});let c=getGlobals(i,t),v=[];return Object.entries(c).forEach(([r,l])=>{l!=null&&l!==""&&v.push({key:r,value:l,origin:"data"});}),{nodes:b,globals:v}};var F=t=>{let i=`${t}globals`,o=`${t}context`,h=t,e=`${t}property`;return `
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/walker.ts","../src/utils/domUtils.ts","../src/utils/attributeTreeUtils.ts","../src/utils/cssUtils.ts","../src/utils/highlightingUtils.ts","../src/withRoundTrip.ts","../src/preview.ts"],"names":["ADDON_ID","EVENTS","destinationConsole","event","context","destinationLive","channel","addons","getIframeContext","iframe","e","initializeWalker","config","iframeDoc","iframeWin","result","startFlow","sourceBrowser","collector","elb","error","getStoryDocument","getStoryRootElement","storyDoc","selectors","selector","element","getElementPath","el","path","current","c","enhanceProperties","storyRoot","prefix","allElements","scopedAttr","getElbAttributeName","Const","actionAttr","contextAttr","globalsAttr","attr","generateElementHTML","tagName","propertyMarker","attribs","a","PRIORITY","addProperty","acc","key","value","origin","existing","collectValues","name","values","getElbValues","k","v","buildAttributeTree","scope","entityAttr","scopedName","entityEls","entitySet","owningEntity","cur","nodeMap","entity","props","owned","child","o","anc","g","roots","node","parentEl","parentNode","globalsValues","getGlobals","globals","generateHighlightCSS","globalsSelector","contextSelector","baseSelector","propertySelector","injectHighlightingCSS","existingStyle","highlightingStyleElement","css","applyHighlighting","highlights","setupHighlighting","currentStoryId","events","getAllEvents","eventsWithGlobals","withRoundTrip","storyFn","_a","storyId","hasStoryChanged","parameters","autoRefresh","err","preview","preview_default"],"mappings":"+MAAO,IAAMA,CAAAA,CAAW,UAAA,CAIjB,IAAMC,CAAAA,CAAS,CACpB,MAAA,CAAQ,CAAA,EAAGD,CAAQ,UACnB,OAAA,CAAS,CAAA,EAAGA,CAAQ,CAAA,QAAA,CAAA,CACpB,SAAA,CAAW,CAAA,EAAGA,CAAQ,CAAA,UAAA,CAAA,CACtB,UAAA,CAAY,CAAA,EAAGA,CAAQ,CAAA,WAAA,CAAA,CACvB,iBAAA,CAAmB,CAAA,EAAGA,CAAQ,CAAA,kBAAA,CAAA,CAC9B,mBAAoB,CAAA,EAAGA,CAAQ,CAAA,mBAAA,CACjC,CAAA,CCGA,IAAME,CAAAA,CAAqB,CACzB,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,CAACC,CAAAA,CAAuBC,IAAqC,CACjE,OAAA,CAAQ,GAAA,CAAI,kBAAA,CAAoBD,CAAK,EACvC,CAAA,CACA,MAAA,CAAQ,EACV,CAAA,CAGME,CAAAA,CAAkB,CACtB,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,CAACF,CAAAA,CAAuBC,CAAAA,GAAqC,CAEjE,IAAME,CAAAA,CAAUC,MAAAA,CAAO,UAAA,EAAW,CAC9BD,GACFA,CAAAA,CAAQ,IAAA,CAAKL,CAAAA,CAAO,UAAA,CAAYE,CAAK,EAEzC,CAAA,CACA,MAAA,CAAQ,EACV,CAAA,CAGA,SAASK,CAAAA,EAAmB,CAC1B,GAAI,CAEF,IAAMC,CAAAA,CAAS,MAAA,CAAO,QAAA,CAAS,aAAA,CAC7B,2BACF,CAAA,CACA,GAAIA,CAAAA,EAAA,MAAAA,CAAAA,CAAQ,eAAA,GAAmBA,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAQ,aAAA,CAAA,CACrC,OAAO,CACL,SAAUA,CAAAA,CAAO,eAAA,CACjB,MAAA,CAAQA,CAAAA,CAAO,aACjB,CAEJ,CAAA,MAASC,CAAAA,CAAG,CAEZ,CAGA,OAAO,CAAE,QAAA,CAAU,MAAO,CAC5B,CAEA,eAAsBC,CAAAA,CAAiBC,CAAAA,CAGrB,CAEhB,GAAI,CAAA,MAAA,CAAO,iBAAA,CAEX,GAAI,CAEF,GAAM,CAAE,QAAA,CAAUC,CAAAA,CAAW,MAAA,CAAQC,CAAU,CAAA,CAAIN,CAAAA,EAAiB,CAEpE,GAAI,CAACK,CAAAA,CAAW,CACd,OAAA,CAAQ,IAAA,CAAK,0DAA0D,CAAA,CACvE,MACF,CAGA,IAAME,CAAAA,CAAS,MAAMC,SAAAA,CAAU,CAC7B,OAAA,CAAS,CAAE,UAAA,CAAY,CAAA,CAAK,CAAA,CAC5B,OAAA,CAAS,CACP,OAAA,CAAS,CACP,IAAA,CAAMC,aAAAA,CACN,OAAQ,CACN,QAAA,CAAU,CACR,QAAA,CAAU,CAAA,CAAA,CACV,OAAA,CAAS,CAAA,CAAA,CACT,QAAA,CAAU,sBACV,GAAA,CAAK,gBAAA,CACL,MAAA,CAAA,CAAQL,CAAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAAA,CAAQ,MAAA,GAAU,UAAA,CAC1B,MAAOC,CAAAA,CAAU,IAAA,EAAQA,CAC3B,CACF,CAAA,CACA,GAAA,CAAK,CACH,MAAA,CAAQC,CAAAA,CACR,QAAA,CAAUD,CACZ,CACF,CACF,CAAA,CACA,YAAA,CAAc,CACZ,QAAS,CAAE,IAAA,CAAMX,CAAmB,CAAA,CACpC,IAAA,CAAM,CAAE,IAAA,CAAMG,CAAgB,CAChC,CACF,CAAC,CAAA,CAEK,CAAE,SAAA,CAAAa,CAAAA,CAAW,GAAA,CAAAC,CAAI,EAAIJ,CAAAA,CAG3B,GAAI,CAACG,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAIrE,MAAA,CAAO,iBAAA,CAAoBA,CAAAA,CAC3B,MAAA,CAAO,cAAA,CAAiBC,EAC1B,CAAA,MAASC,EAAO,CACd,OAAA,CAAQ,KAAA,CAAM,gCAAA,CAAkCA,CAAK,EACvD,CACF,CC3GO,IAAMC,EAAmB,IAAgB,CAE9C,IAAMZ,CAAAA,CAAS,QAAA,CAAS,aAAA,CACtB,2BACF,CAAA,CACA,OAAIA,CAAAA,EAAA,IAAA,EAAAA,CAAAA,CAAQ,eAAA,CACHA,CAAAA,CAAO,eAAA,CAGT,QACT,EAGaa,CAAAA,CAAsB,IAAsB,CACvD,IAAMC,CAAAA,CAAWF,CAAAA,EAAiB,CAG5BG,CAAAA,CAAY,CAChB,iBAAA,CACA,OAAA,CACA,gCAAA,CACA,MACF,CAAA,CAEA,IAAA,IAAWC,CAAAA,IAAYD,CAAAA,CAAW,CAChC,IAAME,CAAAA,CAAUH,CAAAA,CAAS,aAAA,CAAcE,CAAQ,CAAA,CAC/C,GAAIC,CAAAA,CACF,OAAOA,CAEX,CAEA,OAAOH,CAAAA,CAAS,IAClB,CAAA,CAGaI,CAAAA,CAAkBC,GAAwB,CACrD,IAAMC,CAAAA,CAAO,EAAC,CACVC,CAAAA,CAAUF,CAAAA,CACd,KAAOE,GAAWA,CAAAA,GAAY,QAAA,CAAS,IAAA,EAAQA,CAAAA,CAAQ,aAAA,EAAe,CACpE,IAAIL,CAAAA,CAAWK,EAAQ,OAAA,CAAQ,WAAA,EAAY,CACvCA,CAAAA,CAAQ,EAAA,CACVL,CAAAA,EAAY,CAAA,CAAA,EAAIK,CAAAA,CAAQ,EAAE,CAAA,CAAA,CACjBA,CAAAA,CAAQ,SAAA,EAAa,OAAOA,CAAAA,CAAQ,SAAA,EAAc,QAAA,GAC3DL,GAAY,CAAA,CAAA,EAAIK,CAAAA,CAAQ,SAAA,CACrB,KAAA,CAAM,GAAG,CAAA,CACT,MAAA,CAAQC,CAAAA,EAAMA,CAAC,CAAA,CACf,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA,CAEdF,CAAAA,CAAK,OAAA,CAAQJ,CAAQ,EACrBK,CAAAA,CAAUA,CAAAA,CAAQ,cACpB,CACA,OAAOD,CAAAA,CAAK,IAAA,CAAK,KAAK,CACxB,CAAA,CAGaG,CAAAA,CAAoB,CAC/BC,CAAAA,CACAC,CAAAA,CAAiB,UAAA,GACR,CAET,IAAMC,CAAAA,CAAc,KAAA,CAAM,IAAA,CAAKF,CAAAA,CAAU,gBAAA,CAAiB,GAAG,CAAC,CAAA,CAExDG,EAAaC,mBAAAA,CAAoBH,CAAAA,CAAQI,KAAAA,CAAM,QAAA,CAAS,MAAA,CAAQ,KAAK,CAAA,CACrEC,CAAAA,CAAaF,oBAAoBH,CAAAA,CAAQI,KAAAA,CAAM,QAAA,CAAS,MAAA,CAAQ,KAAK,CAAA,CACrEE,CAAAA,CAAcH,mBAAAA,CAClBH,CAAAA,CACAI,KAAAA,CAAM,QAAA,CAAS,OAAA,CACf,KACF,CAAA,CACMG,CAAAA,CAAcJ,mBAAAA,CAClBH,EACAI,KAAAA,CAAM,QAAA,CAAS,OAAA,CACf,KACF,CAAA,CAEAH,CAAAA,CAAY,OAAA,CAASP,CAAAA,EAAO,CACJ,KAAA,CAAM,IAAA,CAAKA,CAAAA,CAAG,UAAU,CAAA,CAAE,IAAA,CAAMc,CAAAA,EAChDA,CAAAA,CAAK,OAASN,CAAAA,CAAmB,IAAA,CAEnCM,CAAAA,CAAK,IAAA,CAAK,UAAA,CAAW,CAAA,EAAGR,CAAM,CAAA,CAAA,CAAG,CAAA,EACjCQ,CAAAA,CAAK,IAAA,GAASH,CAAAA,EACdG,CAAAA,CAAK,IAAA,GAASF,CAAAA,EACdE,CAAAA,CAAK,OAASD,CAEjB,CAAA,EAICb,CAAAA,CAAG,YAAA,CAAaS,mBAAAA,CAAoBH,CAAAA,CAAQ,UAAA,CAAY,KAAK,EAAG,EAAE,EAEtE,CAAC,EACH,CAAA,CChFA,IAAMS,CAAAA,CAAsB,CAACjB,CAAAA,CAAkBQ,CAAAA,GAA2B,CACxE,IAAMU,CAAAA,CAAUlB,EAAQ,OAAA,CAAQ,WAAA,EAAY,CAItCmB,CAAAA,CAAiBR,mBAAAA,CAAoBH,CAAAA,CAAQ,UAAA,CAAY,KAAK,EAC9DY,CAAAA,CAAU,KAAA,CAAM,IAAA,CAAKpB,CAAAA,CAAQ,UAAU,CAAA,CAC1C,MAAA,CAAQqB,CAAAA,EAAMA,EAAE,IAAA,GAASF,CAAc,CAAA,CACvC,GAAA,CAAKE,CAAAA,EAAM,CAAA,EAAGA,CAAAA,CAAE,IAAI,CAAA,EAAA,EAAKA,CAAAA,CAAE,KAAK,CAAA,CAAA,CAAG,CAAA,CACtC,OAAID,CAAAA,CAAQ,MAAA,GAAW,EAAU,CAAA,CAAA,EAAIF,CAAO,CAAA,GAAA,EAAMA,CAAO,CAAA,CAAA,CAAA,CACrDE,CAAAA,CAAQ,MAAA,GAAW,CAAA,CAAU,IAAIF,CAAO,CAAA,CAAA,EAAIE,CAAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAMF,CAAO,CAAA,CAAA,CAAA,CAChE,IAAIA,CAAO;AAAA,EAAKE,EAAQ,GAAA,CAAKC,CAAAA,EAAM,KAAKA,CAAC,CAAA,CAAE,EAAE,IAAA,CAAK;AAAA,CAAI,CAAC;AAAA,GAAA,EAAQH,CAAO,CAAA,CAAA,CAC/E,CAAA,CAIMI,CAAAA,CAAuD,CAC3D,KAAM,CAAA,CACN,MAAA,CAAQ,CAAA,CACR,OAAA,CAAS,CACX,CAAA,CAEMC,EAAc,CAClBC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,GACG,CAEH,GADI,CAACF,CAAAA,EACsBC,CAAAA,EAAU,IAAA,EAAQA,CAAAA,GAAU,EAAA,CAAI,OAC3D,IAAME,CAAAA,CAAWJ,CAAAA,CAAI,GAAA,CAAIC,CAAG,CAAA,CAAA,CACxB,CAACG,CAAAA,EAAYN,CAAAA,CAASK,CAAM,CAAA,CAAIL,CAAAA,CAASM,CAAAA,CAAS,MAAM,CAAA,GAC1DJ,CAAAA,CAAI,GAAA,CAAIC,CAAAA,CAAK,CAAE,GAAA,CAAAA,CAAAA,CAAK,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAC,CAAO,CAAC,EAEvC,CAAA,CAEME,EAAgB,CACpBL,CAAAA,CACAhB,CAAAA,CACAN,CAAAA,CACA4B,CAAAA,CACAH,CAAAA,GACG,CACH,IAAMI,CAAAA,CAASC,YAAAA,CAAaxB,CAAAA,CAAQN,CAAAA,CAAI4B,CAAAA,CAAM,IAAI,CAAA,CAClD,MAAA,CAAO,OAAA,CAAQC,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACE,CAAAA,CAAGC,CAAC,CAAA,GAAMX,CAAAA,CAAYC,CAAAA,CAAKS,CAAAA,CAAGC,EAAGP,CAAM,CAAC,EAC3E,CAAA,CAEaQ,CAAAA,CAAqB,CAChCC,EACA5B,CAAAA,CAAiBI,KAAAA,CAAM,QAAA,CAAS,MAAA,GAC4B,CAC5D,IAAMyB,EAAa1B,mBAAAA,CAAoBH,CAAM,CAAA,CACvC8B,CAAAA,CAAa1B,KAAAA,CAAM,QAAA,CAAS,MAAA,CAG5B2B,CAAAA,CAAuB,EAAC,CAC1BH,CAAAA,CAAM,OAAA,CAAQ,CAAA,CAAA,EAAIC,CAAU,GAAG,CAAA,EAAGE,CAAAA,CAAU,IAAA,CAAKH,CAAK,CAAA,CAC1DA,CAAAA,CAAM,iBAAiB,CAAA,CAAA,EAAIC,CAAU,CAAA,CAAA,CAAG,CAAA,CAAE,OAAA,CAASnC,CAAAA,EAAOqC,EAAU,IAAA,CAAKrC,CAAE,CAAC,CAAA,CAC5E,IAAMsC,CAAAA,CAAY,IAAI,GAAA,CAAID,CAAS,CAAA,CAG7BE,CAAAA,CAAgBvC,CAAAA,EAAgC,CACpD,IAAIwC,EAAsBxC,CAAAA,CAC1B,KAAOwC,CAAAA,EAAK,CACV,GAAIF,CAAAA,CAAU,IAAIE,CAAG,CAAA,CAAG,OAAOA,CAAAA,CAC/BA,CAAAA,CAAMA,CAAAA,CAAI,cACZ,CACA,OAAO,IACT,CAAA,CAEMC,CAAAA,CAAU,IAAI,GAAA,CAEpBJ,CAAAA,CAAU,OAAA,CAASrC,CAAAA,EAAO,CACxB,IAAM0C,CAAAA,CAAS1C,CAAAA,CAAG,aAAamC,CAAU,CAAA,EAAK,EAAA,CACxCQ,CAAAA,CAAQ,IAAI,GAAA,CAGZC,EAAmB,CAAC5C,CAAE,CAAA,CAC5BA,CAAAA,CAAG,gBAAA,CAAiB,GAAG,EAAE,OAAA,CAAS6C,CAAAA,EAAU,CACtCN,CAAAA,CAAaM,CAAK,CAAA,GAAM7C,CAAAA,EAAI4C,CAAAA,CAAM,IAAA,CAAKC,CAAK,EAClD,CAAC,CAAA,CACDD,CAAAA,CAAM,QAASE,CAAAA,EAAM,CACnBnB,CAAAA,CAAcgB,CAAAA,CAAOrC,CAAAA,CAAQwC,CAAAA,CAAGJ,EAAQ,MAAM,CAAA,CAC9Cf,CAAAA,CAAcgB,CAAAA,CAAOrC,CAAAA,CAAQwC,CAAAA,CAAG,GAAI,SAAS,EAC/C,CAAC,CAAA,CAGD,IAAIC,CAAAA,CAAsB/C,CAAAA,CAC1B,KAAO+C,CAAAA,EACLpB,CAAAA,CAAcgB,CAAAA,CAAOrC,CAAAA,CAAQyC,CAAAA,CAAKL,CAAAA,CAAQ,MAAM,CAAA,CAChDf,CAAAA,CAAcgB,CAAAA,CAAOrC,CAAAA,CAAQyC,CAAAA,CAAK,EAAA,CAAI,SAAS,CAAA,CAE/C,MAAA,CAAO,OAAA,CAAQjB,YAAAA,CAAaxB,CAAAA,CAAQyC,CAAAA,CAAKX,EAAY,KAAK,CAAC,CAAA,CAAE,OAAA,CAC3D,CAAC,CAACL,CAAAA,CAAGC,CAAC,CAAA,GAAMX,CAAAA,CAAYsB,CAAAA,CAAOZ,CAAAA,CAAGC,CAAAA,CAAG,QAAQ,CAC/C,CAAA,CACAe,CAAAA,CAAMA,CAAAA,CAAI,aAAA,CAGZN,CAAAA,CAAQ,GAAA,CAAIzC,EAAI,CACd,OAAA,CAASA,CAAAA,CAAG,OAAA,CAAQ,WAAA,EAAY,CAChC,KAAMD,CAAAA,CAAeC,CAAE,CAAA,CACvB,UAAA,CAAYe,CAAAA,CAAoBf,CAAAA,CAAIM,CAAM,CAAA,CAC1C,UAAA,CAAY,CACV,MAAA,CAAAoC,CAAAA,CACA,MAAA,CACE1C,CAAAA,CAAG,aACDS,mBAAAA,CAAoBH,CAAAA,CAAQI,KAAAA,CAAM,QAAA,CAAS,MAAA,CAAQ,KAAK,CAC1D,CAAA,EAAK,MAAA,CACP,OAAA,CAAA,CAAU,IAAM,CACd,IAAMP,EAAI2B,YAAAA,CAAaxB,CAAAA,CAAQN,CAAAA,CAAIU,KAAAA,CAAM,QAAA,CAAS,OAAA,CAAS,KAAK,CAAA,CAChE,OAAO,MAAA,CAAO,IAAA,CAAKP,CAAC,CAAA,CAAE,MAAA,CAASA,EAAI,MACrC,CAAA,GAAG,CACH,OAAA,CAAA,CAAU,IAAM,CACd,IAAM6C,CAAAA,CAAIlB,YAAAA,CAAaxB,CAAAA,CAAQN,CAAAA,CAAIU,KAAAA,CAAM,QAAA,CAAS,QAAS,KAAK,CAAA,CAChE,OAAO,MAAA,CAAO,IAAA,CAAKsC,CAAC,CAAA,CAAE,MAAA,CAASA,CAAAA,CAAI,MACrC,CAAA,GAAG,CACH,UAAA,CAAY,KAAA,CAAM,KAAKL,CAAAA,CAAM,MAAA,EAAQ,CACvC,CAAA,CACA,QAAA,CAAU,EACZ,CAAC,EACH,CAAC,CAAA,CAGD,IAAMM,EAAyB,EAAC,CAChCR,CAAAA,CAAQ,OAAA,CAAQ,CAACS,CAAAA,CAAMlD,CAAAA,GAAO,CAC5B,IAAMmD,CAAAA,CAAWnD,CAAAA,CAAG,aAAA,CAAgBuC,CAAAA,CAAavC,CAAAA,CAAG,aAAa,CAAA,CAAI,IAAA,CAC/DoD,CAAAA,CAAaD,CAAAA,CAAWV,CAAAA,CAAQ,GAAA,CAAIU,CAAQ,CAAA,CAAI,MAAA,CAClDC,CAAAA,CAAYA,CAAAA,CAAW,QAAA,CAAS,IAAA,CAAKF,CAAI,CAAA,CACxCD,CAAAA,CAAM,IAAA,CAAKC,CAAI,EACtB,CAAC,CAAA,CAED,IAAMG,CAAAA,CAAgBC,UAAAA,CAAWhD,CAAAA,CAAQ4B,CAAK,CAAA,CACxCqB,CAAAA,CAA8B,EAAC,CACrC,OAAA,MAAA,CAAO,OAAA,CAAQF,CAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC9B,CAAAA,CAAKC,CAAK,CAAA,GAAM,CAC3BA,CAAAA,EAAU,MAAQA,CAAAA,GAAU,EAAA,EACrD+B,CAAAA,CAAQ,IAAA,CAAK,CAAE,GAAA,CAAAhC,CAAAA,CAAK,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAQ,MAAO,CAAC,EAC/C,CAAC,EAEM,CAAE,KAAA,CAAOyB,CAAAA,CAAO,OAAA,CAAAM,CAAQ,CACjC,ECzJO,IAAMC,CAAAA,CAAwBlD,CAAAA,EAA2B,CAE9D,IAAMmD,CAAAA,CAAkB,GAAGnD,CAAM,CAAA,OAAA,CAAA,CAC3BoD,CAAAA,CAAkB,CAAA,EAAGpD,CAAM,CAAA,OAAA,CAAA,CAC3BqD,CAAAA,CAAerD,CAAAA,CACfsD,CAAAA,CAAmB,CAAA,EAAGtD,CAAM,CAAA,QAAA,CAAA,CAiPlC,OA9OoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,wBAAA,EAcImD,CAAe,CAAA;AAAA;AAAA;;AAAA,wBAAA,EAIfC,CAAe,CAAA;AAAA;AAAA;;AAAA,uBAAA,EAIhBC,CAAY,CAAA;AAAA;AAAA;;AAAA,yBAAA,EAIVC,CAAgB,CAAA;AAAA;AAAA;;AAAA,uBAAA,EAIlBtD,CAAM,CAAA;AAAA;AAAA;;AAAA;AAAA,wCAAA,EAKWqD,CAAY,KAAKrD,CAAM,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,yCAAA,EAMtBqD,CAAY,KAAKD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0CAAA,EAM/BC,CAAY,KAAKC,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,yCAAA,EAMlCtD,CAAM,WAAWoD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,2CAAA,EAM9BA,CAAe,KAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0CAAA,EAMrCtD,CAAM,WAAWsD,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,yCAAA,EAOlCH,CAAe,KAAKE,CAAY,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,yCAAA,EAMhCF,CAAe,KAAKnD,CAAM,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,0CAAA,EAMzBmD,CAAe,KAAKC,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,2CAAA,EAMlCD,CAAe,KAAKG,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EAQxEH,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKrD,CAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQ3CmD,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQpDD,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKC,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQrDH,CAAe,CAAA,EAAA,EAAKnD,CAAM,CAAA,QAAA,EAAWoD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQpDD,CAAe,CAAA,EAAA,EAAKnD,CAAM,CAAA,QAAA,EAAWsD,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQrDH,CAAe,CAAA,EAAA,EAAKC,CAAe,CAAA,EAAA,EAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EASxDD,CAAY,CAAA,EAAA,EAAKrD,CAAM,CAAA,QAAA,EAAWoD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EASjDC,CAAY,CAAA,EAAA,EAAKrD,CAAM,CAAA,QAAA,EAAWsD,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQlDD,CAAY,CAAA,EAAA,EAAKD,CAAe,CAAA,EAAA,EAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAQrDtD,CAAM,CAAA,QAAA,EAAWoD,CAAe,CAAA,EAAA,EAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EASrDH,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKrD,CAAM,WAAWoD,CAAe,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EASrED,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKrD,CAAM,WAAWsD,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EAStEH,CAAe,CAAA,EAAA,EAAKE,CAAY,CAAA,EAAA,EAAKD,CAAe,KAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,OAAA,EASzEH,CAAe,CAAA,EAAA,EAAKnD,CAAM,CAAA,QAAA,EAAWoD,CAAe,KAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EAUzED,CAAY,CAAA,EAAA,EAAKrD,CAAM,CAAA,QAAA,EAAWoD,CAAe,KAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,OAAA,EAUtEH,CAAe,KAAKE,CAAY,CAAA,EAAA,EAAKrD,CAAM,CAAA,QAAA,EAAWoD,CAAe,KAAKE,CAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAWnG,CAAA,CAGaC,EAAwB,CACnClE,CAAAA,CACAW,EAAiB,UAAA,GACR,CAET,IAAMwD,CAAAA,CAAgBnE,CAAAA,CAAS,cAAc,wBAAwB,CAAA,CACjEmE,GACFA,CAAAA,CAAc,MAAA,GAGhB,IAAMC,CAAAA,CAA2BpE,EAAS,aAAA,CAAc,OAAO,EAC/DoE,CAAAA,CAAyB,EAAA,CAAK,wBAC9B,IAAMC,CAAAA,CAAMR,EAAqBlD,CAAM,CAAA,CACvCyD,EAAyB,WAAA,CAAcC,CAAAA,CAEvCrE,EAAS,IAAA,CAAK,WAAA,CAAYoE,CAAwB,EACpD,CAAA,CClQO,IAAME,CAAAA,CAAoB,CAC/BC,CAAAA,CACA5D,CAAAA,CAAiB,UAAA,GACR,CACT,IAAMD,CAAAA,CAAYX,CAAAA,GACbW,CAAAA,GAGLA,CAAAA,CAAU,UAAU,MAAA,CAAO,mBAAmB,EAC9CA,CAAAA,CAAU,SAAA,CAAU,OAAO,kBAAkB,CAAA,CAC7CA,EAAU,SAAA,CAAU,MAAA,CAAO,oBAAoB,CAAA,CAC/CA,CAAAA,CAAU,UAAU,MAAA,CAAO,kBAAkB,EAC7CA,CAAAA,CAAU,SAAA,CAAU,OAAO,mBAAmB,CAAA,CAEzC6D,IAGL9D,CAAAA,CAAkBC,CAAAA,CAAWC,CAAM,CAAA,CAG/B4D,CAAAA,CAAW,SAAS7D,CAAAA,CAAU,SAAA,CAAU,IAAI,mBAAmB,CAAA,CAC/D6D,EAAW,MAAA,EAAQ7D,CAAAA,CAAU,SAAA,CAAU,GAAA,CAAI,kBAAkB,CAAA,CAC7D6D,EAAW,QAAA,EAAU7D,CAAAA,CAAU,UAAU,GAAA,CAAI,oBAAoB,EACjE6D,CAAAA,CAAW,MAAA,EAAQ7D,EAAU,SAAA,CAAU,GAAA,CAAI,kBAAkB,CAAA,CAC7D6D,CAAAA,CAAW,SAAS7D,CAAAA,CAAU,SAAA,CAAU,IAAI,mBAAmB,CAAA,CAAA,EACrE,EAGa8D,CAAAA,CAAoB,CAC/BD,EACA5D,CAAAA,CAAiB,UAAA,GACR,CACT,IAAMX,CAAAA,CAAWF,GAAiB,CAGlCoE,CAAAA,CAAsBlE,EAAUW,CAAM,CAAA,CAGtC2D,EAAkBC,CAAAA,CAAY5D,CAAM,EACtC,CAAA,CCtCA,IAAM5B,EAAUC,MAAAA,CAAO,UAAA,EAAW,CAC9ByF,CAAAA,CAAgC,IAAA,CAGpC1F,CAAAA,CAAQ,YAAYL,CAAAA,CAAO,OAAA,CAAUW,GAA0B,CAC7D,IAAMqB,EAAYX,CAAAA,EAAoB,CACtC,GAAI,CAACW,CAAAA,CAAW,CACd3B,CAAAA,CAAQ,IAAA,CAAKL,EAAO,MAAA,CAAQ,EAAE,CAAA,CAC9B,MACF,CAGA+B,CAAAA,CAAkBC,CAAAA,CAAWrB,EAAO,MAAA,EAAU,UAAU,EAExD,IAAMqF,CAAAA,CAASC,aAAajE,CAAAA,CAAsBrB,CAAAA,CAAO,MAAM,CAAA,CAGzDuE,CAAAA,CAAUD,WAAWtE,CAAAA,CAAO,MAAA,EAAU,WAAYqB,CAAoB,CAAA,CAGtEkE,EAAoBF,CAAAA,CAAO,GAAA,CAAK9F,CAAAA,EAChC,MAAA,CAAO,IAAA,CAAKgF,CAAO,EAAE,MAAA,CAAS,CAAA,CACzB,CAAE,GAAGhF,CAAAA,CAAO,QAAAgF,CAAQ,CAAA,CAEtBhF,CACR,CAAA,CAGDG,CAAAA,CAAQ,KAAKL,CAAAA,CAAO,MAAA,CAAQkG,CAAiB,EAC/C,CAAC,EAGD7F,CAAAA,CAAQ,WAAA,CAAYL,EAAO,SAAA,CAAYW,CAAAA,EAA0B,CAC/DmF,CAAAA,CAAkBnF,CAAAA,CAAO,WAAYA,CAAAA,CAAO,MAAM,EACpD,CAAC,CAAA,CAGDN,EAAQ,WAAA,CAAYL,CAAAA,CAAO,mBAAqBW,CAAAA,EAA0B,CACxE,IAAMqB,CAAAA,CAAYX,CAAAA,GAClB,GAAI,CAACW,CAAAA,CAAW,CACd3B,CAAAA,CAAQ,IAAA,CAAKL,EAAO,iBAAA,CAAmB,CAAE,MAAO,EAAC,CAAG,QAAS,EAAG,CAAC,CAAA,CACjE,MACF,CAGA,IAAMc,CAAAA,CAAS8C,EACb5B,CAAAA,CACArB,CAAAA,CAAO,QAAU,UACnB,CAAA,CAGAN,EAAQ,IAAA,CAAKL,CAAAA,CAAO,kBAAmBc,CAAM,EAC/C,CAAC,CAAA,CAEM,IAAMqF,EAAmC,CAACC,CAAAA,CAASjG,IAAY,CAlEtE,IAAAkG,EAoEE,IAAMC,CAAAA,CAAUnG,EAAQ,EAAA,CAClBoG,CAAAA,CAAkBR,IAAmBO,CAAAA,CACrC,CAAE,UAAA,CAAAE,CAAW,CAAA,CAAIrG,CAAAA,CACjBsG,GAAcJ,CAAAA,CAAAG,CAAAA,EAAA,YAAAA,CAAAA,CAAazG,CAAAA,CAAAA,GAAb,YAAAsG,CAAAA,CAAwB,WAAA,CAExCE,IACFR,CAAAA,CAAiBO,CAAAA,CAAAA,CAGnB,IAAMxF,CAAAA,CAASsF,CAAAA,GAGf,OAAA,UAAA,CAAW,IAAM,CAhFnB,IAAAC,CAAAA,CAkFI,IAAMpE,CAAAA,CAAAA,CAAAA,CAASoE,CAAAA,CAAAG,GAAA,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAAazG,KAAb,IAAA,CAAA,MAAA,CAAAsG,CAAAA,CAAwB,SAAU,UAAA,CACjD3F,CAAAA,CAAiB,CAAE,MAAA,CAAAuB,CAAAA,CAAQ,YAAAwE,CAAY,CAAC,EAAE,KAAA,CAAOC,CAAAA,EAAQ,CACvD,OAAA,CAAQ,KAAA,CAAM,+BAAA,CAAiCA,CAAG,EACpD,CAAC,EAGD,IAAM1E,CAAAA,CAAYX,GAAoB,CAClCW,CAAAA,GACF8D,EAAkB,MAAA,CAAW7D,CAAM,EACnCF,CAAAA,CAAkBC,CAAAA,CAAWC,CAAM,CAAA,CAAA,CAIjCsE,CAAAA,EAAmBE,GAAe,MAAA,CAAO,cAAA,EAC3C,OAAO,cAAA,CAAe,YAAY,EAEtC,CAAA,CAAG,GAAG,EAEC3F,CACT,CAAA,KCjFM6F,CAAAA,CAAwC,CAC5C,WAAY,CAACR,CAAa,EAC1B,UAAA,CAAY,CACV,CAACpG,CAAQ,EAAG,CACV,WAAA,CAAa,IAAA,CACb,OAAQ,UACV,CACF,CACF,CAAA,CAEO6G,EAAAA,CAAQD","file":"preview.js","sourcesContent":["export const ADDON_ID = 'walkerOS';\nexport const PANEL_ID = `${ADDON_ID}/panel`;\nexport const KEY = `walkerOS`;\n\nexport const EVENTS = {\n RESULT: `${ADDON_ID}/result`,\n REQUEST: `${ADDON_ID}/request`,\n HIGHLIGHT: `${ADDON_ID}/highlight`,\n LIVE_EVENT: `${ADDON_ID}/live-event`,\n ATTRIBUTES_RESULT: `${ADDON_ID}/attributes-result`,\n ATTRIBUTES_REQUEST: `${ADDON_ID}/attributes-request`,\n};\n","import type { Collector, WalkerOS, Destination } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { sourceBrowser } from '@walkeros/web-source-browser';\nimport { addons } from 'storybook/preview-api';\nimport { EVENTS } from './constants';\n\ndeclare global {\n interface Window {\n __storybookElb: WalkerOS.Elb;\n __storybookWalker: Collector.Instance;\n }\n}\n\n// Simple console destination for Storybook\nconst destinationConsole = {\n type: 'console',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n console.log('Storybook Event:', event);\n },\n config: {},\n};\n\n// Live destination for Storybook panel\nconst destinationLive = {\n type: 'live',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n // Send event to Storybook panel for live display\n const channel = addons.getChannel();\n if (channel) {\n channel.emit(EVENTS.LIVE_EVENT, event);\n }\n },\n config: {},\n};\n\n// Function to get Storybook iframe context\nfunction getIframeContext() {\n try {\n // Try to get iframe from parent document (manager context)\n const iframe = parent.document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument && iframe?.contentWindow) {\n return {\n document: iframe.contentDocument,\n window: iframe.contentWindow,\n };\n }\n } catch (e) {\n // If we can't access parent, we're likely already in iframe context\n }\n\n // Fallback to current context\n return { document, window };\n}\n\nexport async function initializeWalker(config?: {\n prefix?: string;\n autoRefresh?: boolean;\n}): Promise<void> {\n // Skip initialization if already done\n if (window.__storybookWalker) return;\n\n try {\n // Get iframe context for proper event capture\n const { document: iframeDoc, window: iframeWin } = getIframeContext();\n\n if (!iframeDoc) {\n console.warn('Document not available, skipping walkerOS initialization');\n return;\n }\n\n // Create collector with browser source and destinations\n const result = await startFlow({\n consent: { functional: true },\n sources: {\n browser: {\n code: sourceBrowser,\n config: {\n settings: {\n pageview: true,\n session: false,\n elbLayer: '__storybookElbLayer',\n elb: '__storybookElb',\n prefix: config?.prefix || 'data-elb',\n scope: iframeDoc.body || iframeDoc, // Set scope to iframe document\n },\n },\n env: {\n window: iframeWin,\n document: iframeDoc,\n },\n },\n },\n destinations: {\n console: { code: destinationConsole },\n live: { code: destinationLive },\n },\n });\n\n const { collector, elb } = result;\n\n // Verify collector was created successfully\n if (!collector) {\n throw new Error('Collector creation failed - no collector returned');\n }\n\n // Set global window objects\n window.__storybookWalker = collector;\n window.__storybookElb = elb;\n } catch (error) {\n console.error('Failed to initialize walkerOS:', error);\n }\n}\n","// DOM utilities for working with story elements\n\nimport { Const } from '@walkeros/collector';\nimport { getElbAttributeName } from '@walkeros/web-source-browser';\n\n// Function to get the story document (either iframe or main document)\nexport const getStoryDocument = (): Document => {\n // Try to find story iframe\n const iframe = document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument) {\n return iframe.contentDocument;\n }\n // Fallback to main document\n return document;\n};\n\n// Function to get the story root element\nexport const getStoryRootElement = (): Element | null => {\n const storyDoc = getStoryDocument();\n\n // Try multiple selectors for story root\n const selectors = [\n '#storybook-root',\n '#root',\n '[data-testid=\"storybook-root\"]',\n 'body',\n ];\n\n for (const selector of selectors) {\n const element = storyDoc.querySelector(selector);\n if (element) {\n return element;\n }\n }\n\n return storyDoc.body;\n};\n\n// Helper to get element path\nexport const getElementPath = (el: Element): string => {\n const path = [];\n let current = el;\n while (current && current !== document.body && current.parentElement) {\n let selector = current.tagName.toLowerCase();\n if (current.id) {\n selector += `#${current.id}`;\n } else if (current.className && typeof current.className === 'string') {\n selector += `.${current.className\n .split(' ')\n .filter((c) => c)\n .join('.')}`;\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n return path.join(' > ');\n};\n\n// Function to enhance DOM with property attributes\nexport const enhanceProperties = (\n storyRoot: Element,\n prefix: string = 'data-elb',\n): void => {\n // Find all elements with any attributes starting with prefix-\n const allElements = Array.from(storyRoot.querySelectorAll('*'));\n\n const scopedAttr = getElbAttributeName(prefix, Const.Commands.Scoped, false); // data-elb_\n const actionAttr = getElbAttributeName(prefix, Const.Commands.Action, false);\n const contextAttr = getElbAttributeName(\n prefix,\n Const.Commands.Context,\n false,\n );\n const globalsAttr = getElbAttributeName(\n prefix,\n Const.Commands.Globals,\n false,\n );\n\n allElements.forEach((el) => {\n const hasProperties = Array.from(el.attributes).some((attr) => {\n if (attr.name === scopedAttr) return true; // scoped generic data-elb_\n return (\n attr.name.startsWith(`${prefix}-`) &&\n attr.name !== actionAttr &&\n attr.name !== contextAttr &&\n attr.name !== globalsAttr\n );\n });\n\n // Mark elements with property attributes\n if (hasProperties) {\n el.setAttribute(getElbAttributeName(prefix, 'property', false), '');\n }\n });\n};\n","// Builds an entity-centric \"skeleton\" tree: each node is a data-elb entity, with\n// generic (data-elb-), scoped (data-elb_), and explicit (data-elb-<entity>)\n// values resolved onto it and tagged by origin. Interim addon-local\n// approximation of the walker's resolution (see the design doc for fidelity\n// limits: cross-DOM links, shadow piercing, exact collision priority, and\n// context ordering index are out of scope for Phase 1).\n\nimport type { WalkerOS } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport {\n getElbValues,\n getElbAttributeName,\n getGlobals,\n} from '@walkeros/web-source-browser';\nimport type { AttributeNode, ResolvedProperty } from '../types';\nimport { getElementPath } from './domUtils';\n\nconst generateElementHTML = (element: Element, prefix: string): string => {\n const tagName = element.tagName.toLowerCase();\n // Hide the synthetic highlight marker (data-elbproperty) that\n // enhanceProperties stamps on the live DOM; it is an internal helper, not\n // author-written tagging, so it must not appear in the displayed markup.\n const propertyMarker = getElbAttributeName(prefix, 'property', false);\n const attribs = Array.from(element.attributes)\n .filter((a) => a.name !== propertyMarker)\n .map((a) => `${a.name}=\"${a.value}\"`);\n if (attribs.length === 0) return `<${tagName}></${tagName}>`;\n if (attribs.length === 1) return `<${tagName} ${attribs[0]}></${tagName}>`;\n return `<${tagName}\\n${attribs.map((a) => ` ${a}`).join('\\n')}\\n></${tagName}>`;\n};\n\n// Origin priority for same-key collisions (highest first). Approximate; real\n// walker priority is documented as out of scope for Phase 1.\nconst PRIORITY: Record<ResolvedProperty['origin'], number> = {\n data: 3,\n scoped: 2,\n generic: 1,\n};\n\nconst addProperty = (\n acc: Map<string, ResolvedProperty>,\n key: string,\n value: WalkerOS.Property | undefined,\n origin: ResolvedProperty['origin'],\n) => {\n if (!key) return; // never store the blank-key generic\n if (value === undefined || value === null || value === '') return;\n const existing = acc.get(key);\n if (!existing || PRIORITY[origin] > PRIORITY[existing.origin]) {\n acc.set(key, { key, value, origin });\n }\n};\n\nconst collectValues = (\n acc: Map<string, ResolvedProperty>,\n prefix: string,\n el: Element,\n name: string, // '' for generic, entity name for explicit\n origin: ResolvedProperty['origin'],\n) => {\n const values = getElbValues(prefix, el, name, true);\n Object.entries(values).forEach(([k, v]) => addProperty(acc, k, v, origin));\n};\n\nexport const buildAttributeTree = (\n scope: Element,\n prefix: string = Const.Commands.Prefix,\n): { nodes: AttributeNode[]; globals: ResolvedProperty[] } => {\n const entityAttr = getElbAttributeName(prefix); // data-elb\n const scopedName = Const.Commands.Scoped; // '_'\n\n // All entity elements (self + descendants).\n const entityEls: Element[] = [];\n if (scope.matches(`[${entityAttr}]`)) entityEls.push(scope);\n scope.querySelectorAll(`[${entityAttr}]`).forEach((el) => entityEls.push(el));\n const entitySet = new Set(entityEls);\n\n // Nearest ancestor-or-self entity for any element (DOM ancestry).\n const owningEntity = (el: Element): Element | null => {\n let cur: Element | null = el;\n while (cur) {\n if (entitySet.has(cur)) return cur;\n cur = cur.parentElement;\n }\n return null;\n };\n\n const nodeMap = new Map<Element, AttributeNode>();\n\n entityEls.forEach((el) => {\n const entity = el.getAttribute(entityAttr) || '';\n const props = new Map<string, ResolvedProperty>();\n\n // Own + owned descendants: explicit (data-elb-<entity>) and generic (data-elb-)\n const owned: Element[] = [el];\n el.querySelectorAll('*').forEach((child) => {\n if (owningEntity(child) === el) owned.push(child);\n });\n owned.forEach((o) => {\n collectValues(props, prefix, o, entity, 'data');\n collectValues(props, prefix, o, '', 'generic');\n });\n\n // Ancestors (incl. self start): explicit, generic, and scoped (data-elb_)\n let anc: Element | null = el;\n while (anc) {\n collectValues(props, prefix, anc, entity, 'data');\n collectValues(props, prefix, anc, '', 'generic');\n // scoped uses isProperty=false (suffix '_' with no dash)\n Object.entries(getElbValues(prefix, anc, scopedName, false)).forEach(\n ([k, v]) => addProperty(props, k, v, 'scoped'),\n );\n anc = anc.parentElement;\n }\n\n nodeMap.set(el, {\n element: el.tagName.toLowerCase(),\n path: getElementPath(el),\n htmlMarkup: generateElementHTML(el, prefix),\n attributes: {\n entity,\n action:\n el.getAttribute(\n getElbAttributeName(prefix, Const.Commands.Action, false),\n ) || undefined,\n context: (() => {\n const c = getElbValues(prefix, el, Const.Commands.Context, false);\n return Object.keys(c).length ? c : undefined;\n })(),\n globals: (() => {\n const g = getElbValues(prefix, el, Const.Commands.Globals, false);\n return Object.keys(g).length ? g : undefined;\n })(),\n properties: Array.from(props.values()),\n },\n children: [],\n });\n });\n\n // Nest by nearest ancestor entity.\n const roots: AttributeNode[] = [];\n nodeMap.forEach((node, el) => {\n const parentEl = el.parentElement ? owningEntity(el.parentElement) : null;\n const parentNode = parentEl ? nodeMap.get(parentEl) : undefined;\n if (parentNode) parentNode.children.push(node);\n else roots.push(node);\n });\n\n const globalsValues = getGlobals(prefix, scope);\n const globals: ResolvedProperty[] = [];\n Object.entries(globalsValues).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '')\n globals.push({ key, value, origin: 'data' });\n });\n\n return { nodes: roots, globals };\n};\n","// CSS utilities for highlighting DOM elements\n\n// Generate dynamic CSS based on prefix\nexport const generateHighlightCSS = (prefix: string): string => {\n // Define selectors based on prefix\n const globalsSelector = `${prefix}globals`;\n const contextSelector = `${prefix}context`;\n const baseSelector = prefix;\n const propertySelector = `${prefix}property`;\n\n // Template CSS with actual selectors\n const cssTemplate = `\n /* Highlight colors - original from website */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n --highlight-background: #1f2937;\n --highlight-text: #9ca3af;\n --highlight-hover: rgba(255, 255, 255, 0.05);\n --highlight-separator: rgba(255, 255, 255, 0.05);\n }\n\n .highlight-globals [${globalsSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-globals) !important;\n }\n\n .highlight-context [${contextSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-context) !important;\n }\n\n .highlight-entity [${baseSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-entity) !important;\n }\n\n .highlight-property [${propertySelector}] {\n box-shadow: 0 0 0 2px var(--highlight-property) !important;\n }\n\n .highlight-action [${prefix}action] {\n box-shadow: 0 0 0 2px var(--highlight-action) !important;\n }\n\n /* Combined highlights with layered solid borders */\n .highlight-entity.highlight-action [${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-entity.highlight-context [${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-entity.highlight-property [${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context [${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-context.highlight-property [${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-property [${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Globals combinations */\n .highlight-globals.highlight-entity [${globalsSelector}][${baseSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-globals.highlight-action [${globalsSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-context [${globalsSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-property [${globalsSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Triple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action\n [${globalsSelector}][${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context\n [${globalsSelector}][${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-property\n [${globalsSelector}][${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context\n [${globalsSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-action.highlight-property\n [${globalsSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-context.highlight-property\n [${globalsSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Triple combinations with distinct layers */\n .highlight-entity.highlight-action.highlight-context\n [${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n /* Triple combinations with property */\n .highlight-entity.highlight-action.highlight-property\n [${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-entity.highlight-context.highlight-property\n [${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context.highlight-property\n [${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Quadruple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action.highlight-context\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-action.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quadruple combination */\n .highlight-entity.highlight-action.highlight-context.highlight-property\n [${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quintuple combination with all attributes */\n .highlight-globals.highlight-entity.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context),\n 0 0 0 10px var(--highlight-property) !important;\n }\n `;\n\n return cssTemplate;\n};\n\n// Function to inject highlighting CSS into story document\nexport const injectHighlightingCSS = (\n storyDoc: Document,\n prefix: string = 'data-elb',\n): void => {\n // Remove existing styles\n const existingStyle = storyDoc.querySelector('#walkeros-highlighting');\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const highlightingStyleElement = storyDoc.createElement('style');\n highlightingStyleElement.id = 'walkeros-highlighting';\n const css = generateHighlightCSS(prefix);\n highlightingStyleElement.textContent = css;\n\n storyDoc.head.appendChild(highlightingStyleElement);\n};\n","// Utilities for managing DOM highlighting\n\nimport type { WalkerOSAddon } from '../types';\nimport {\n getStoryDocument,\n getStoryRootElement,\n enhanceProperties,\n} from './domUtils';\nimport { injectHighlightingCSS } from './cssUtils';\n\n// Function to apply highlighting to story root\nexport const applyHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) return;\n\n // Remove existing highlighting classes\n storyRoot.classList.remove('highlight-context');\n storyRoot.classList.remove('highlight-entity');\n storyRoot.classList.remove('highlight-property');\n storyRoot.classList.remove('highlight-action');\n storyRoot.classList.remove('highlight-globals');\n\n if (!highlights) return;\n\n // Re-enhance properties FIRST to ensure they're marked\n enhanceProperties(storyRoot, prefix);\n\n // Then add specific highlighting classes\n if (highlights.context) storyRoot.classList.add('highlight-context');\n if (highlights.entity) storyRoot.classList.add('highlight-entity');\n if (highlights.property) storyRoot.classList.add('highlight-property');\n if (highlights.action) storyRoot.classList.add('highlight-action');\n if (highlights.globals) storyRoot.classList.add('highlight-globals');\n};\n\n// Combined function to inject CSS and apply highlighting\nexport const setupHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyDoc = getStoryDocument();\n\n // Always inject CSS first\n injectHighlightingCSS(storyDoc, prefix);\n\n // Then apply highlighting\n applyHighlighting(highlights, prefix);\n};\n","import type { WalkerOSAddon } from './types';\nimport type { DecoratorFunction } from 'storybook/internal/types';\nimport { addons } from 'storybook/preview-api';\nimport { getAllEvents, getGlobals } from '@walkeros/web-source-browser';\n\nimport { ADDON_ID, EVENTS } from './constants';\nimport { initializeWalker } from './walker';\nimport { getStoryRootElement, enhanceProperties } from './utils/domUtils';\nimport { buildAttributeTree } from './utils/attributeTreeUtils';\nimport { setupHighlighting } from './utils/highlightingUtils';\n\n// Set up the channel listener globally, not per story\nconst channel = addons.getChannel();\nlet currentStoryId: string | null = null;\n\n// Global listener for the request events\nchannel.addListener(EVENTS.REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.RESULT, []);\n return;\n }\n\n // Enhance DOM with property attributes\n enhanceProperties(storyRoot, config.prefix || 'data-elb');\n\n const events = getAllEvents(storyRoot as Element, config.prefix);\n\n // Collect globals from data-elbglobals attributes\n const globals = getGlobals(config.prefix || 'data-elb', storyRoot as Element);\n\n // Add globals to each event if any globals exist\n const eventsWithGlobals = events.map((event) => {\n if (Object.keys(globals).length > 0) {\n return { ...event, globals };\n }\n return event;\n });\n\n // Send the result back to the manager\n channel.emit(EVENTS.RESULT, eventsWithGlobals);\n});\n\n// Global listener for highlighting events\nchannel.addListener(EVENTS.HIGHLIGHT, (config: WalkerOSAddon) => {\n setupHighlighting(config.highlights, config.prefix);\n});\n\n// Global listener for attribute tree requests\nchannel.addListener(EVENTS.ATTRIBUTES_REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.ATTRIBUTES_RESULT, { nodes: [], globals: [] });\n return;\n }\n\n // Build the skeleton tree ({ nodes, globals })\n const result = buildAttributeTree(\n storyRoot as Element,\n config.prefix || 'data-elb',\n );\n\n // Send the result back to the manager\n channel.emit(EVENTS.ATTRIBUTES_RESULT, result);\n});\n\nexport const withRoundTrip: DecoratorFunction = (storyFn, context) => {\n // Check if story changed and auto-run is enabled\n const storyId = context.id;\n const hasStoryChanged = currentStoryId !== storyId;\n const { parameters } = context;\n const autoRefresh = parameters?.[ADDON_ID]?.autoRefresh;\n\n if (hasStoryChanged) {\n currentStoryId = storyId;\n }\n\n const result = storyFn();\n\n // Initialize walker and inject CSS after story renders\n setTimeout(() => {\n // Initialize walkerOS for live event capture\n const prefix = parameters?.[ADDON_ID]?.prefix || 'data-elb';\n initializeWalker({ prefix, autoRefresh }).catch((err) => {\n console.error('Walker initialization failed:', err);\n });\n\n // Inject highlighting CSS and enhance properties\n const storyRoot = getStoryRootElement();\n if (storyRoot) {\n setupHighlighting(undefined, prefix);\n enhanceProperties(storyRoot, prefix);\n }\n\n // Auto-run walker if story changed and auto-refresh is enabled\n if (hasStoryChanged && autoRefresh && window.__storybookElb) {\n window.__storybookElb('walker run');\n }\n }, 200);\n\n return result;\n};\n","/**\n * A decorator is a way to wrap a story in extra “rendering” functionality. Many addons define decorators\n * in order to augment stories:\n * - with extra rendering\n * - gather details about how a story is rendered\n *\n * When writing stories, decorators are typically used to wrap stories with extra markup or context mocking.\n *\n * https://storybook.js.org/docs/react/writing-stories/decorators\n */\nimport type { ProjectAnnotations, Renderer } from 'storybook/internal/types';\n\nimport { ADDON_ID } from './constants';\nimport { withRoundTrip } from './withRoundTrip';\n\n/**\n * Note: if you want to use JSX in this file, rename it to `preview.tsx`\n * and update the entry prop in tsup.config.ts to use \"src/preview.tsx\",\n */\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withRoundTrip],\n parameters: {\n [ADDON_ID]: {\n autoRefresh: true,\n prefix: 'data-elb',\n },\n },\n};\n\nexport default preview;\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/walker.ts","../src/utils/domUtils.ts","../src/utils/attributeTreeUtils.ts","../src/utils/cssUtils.ts","../src/utils/highlightingUtils.ts","../src/withRoundTrip.ts","../src/preview.ts"],"names":["ADDON_ID","EVENTS","destinationConsole","event","context","destinationLive","channel","addons","getIframeContext","iframe","e","initializeWalker","config","iframeDoc","iframeWin","result","startFlow","sourceBrowser","collector","elb","error","getStoryDocument","getStoryRootElement","storyDoc","selectors","selector","element","getElementPath","el","path","current","c","enhanceProperties","storyRoot","prefix","allElements","scopedAttr","getElbAttributeName","Const","actionAttr","contextAttr","globalsAttr","attr","generateElementHTML","tagName","propertyMarker","attribs","a","PRIORITY","addProperty","acc","key","value","origin","existing","collectValues","name","values","getElbValues","k","v","buildAttributeTree","scope","entityAttr","scopedName","entityEls","entitySet","owningEntity","cur","nodeMap","entity","props","owned","child","o","anc","g","roots","node","parentEl","parentNode","globalsValues","getGlobals","globals","generateHighlightCSS","globalsSelector","contextSelector","baseSelector","propertySelector","injectHighlightingCSS","existingStyle","highlightingStyleElement","css","applyHighlighting","highlights","setupHighlighting","currentStoryId","events","getAllEvents","eventsWithGlobals","withRoundTrip","storyFn","_a","storyId","hasStoryChanged","parameters","autoRefresh","err","preview","preview_default"],"mappings":"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","file":"preview.js","sourcesContent":["export const ADDON_ID = 'walkerOS';\nexport const PANEL_ID = `${ADDON_ID}/panel`;\nexport const KEY = `walkerOS`;\n\nexport const EVENTS = {\n RESULT: `${ADDON_ID}/result`,\n REQUEST: `${ADDON_ID}/request`,\n HIGHLIGHT: `${ADDON_ID}/highlight`,\n LIVE_EVENT: `${ADDON_ID}/live-event`,\n ATTRIBUTES_RESULT: `${ADDON_ID}/attributes-result`,\n ATTRIBUTES_REQUEST: `${ADDON_ID}/attributes-request`,\n};\n","import type { Collector, WalkerOS, Destination } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { sourceBrowser } from '@walkeros/web-source-browser';\nimport { addons } from 'storybook/preview-api';\nimport { EVENTS } from './constants';\n\ndeclare global {\n interface Window {\n __storybookElb: WalkerOS.Elb;\n __storybookWalker: Collector.Instance;\n }\n}\n\n// Simple console destination for Storybook\nconst destinationConsole = {\n type: 'console',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n console.log('Storybook Event:', event);\n },\n config: {},\n};\n\n// Live destination for Storybook panel\nconst destinationLive = {\n type: 'live',\n push: (event: WalkerOS.Event, context: Destination.PushContext) => {\n // Send event to Storybook panel for live display\n const channel = addons.getChannel();\n if (channel) {\n channel.emit(EVENTS.LIVE_EVENT, event);\n }\n },\n config: {},\n};\n\n// Function to get Storybook iframe context\nfunction getIframeContext() {\n try {\n // Try to get iframe from parent document (manager context)\n const iframe = parent.document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument && iframe?.contentWindow) {\n return {\n document: iframe.contentDocument,\n window: iframe.contentWindow,\n };\n }\n } catch (e) {\n // If we can't access parent, we're likely already in iframe context\n }\n\n // Fallback to current context\n return { document, window };\n}\n\nexport async function initializeWalker(config?: {\n prefix?: string;\n autoRefresh?: boolean;\n}): Promise<void> {\n // Skip initialization if already done\n if (window.__storybookWalker) return;\n\n try {\n // Get iframe context for proper event capture\n const { document: iframeDoc, window: iframeWin } = getIframeContext();\n\n if (!iframeDoc) {\n console.warn('Document not available, skipping walkerOS initialization');\n return;\n }\n\n // Create collector with browser source and destinations\n const result = await startFlow({\n consent: { functional: true },\n sources: {\n browser: {\n code: sourceBrowser,\n config: {\n settings: {\n pageview: true,\n elbLayer: '__storybookElbLayer',\n elb: '__storybookElb',\n prefix: config?.prefix || 'data-elb',\n scope: iframeDoc.body || iframeDoc, // Set scope to iframe document\n },\n },\n env: {\n window: iframeWin,\n document: iframeDoc,\n },\n },\n },\n destinations: {\n console: { code: destinationConsole },\n live: { code: destinationLive },\n },\n });\n\n const { collector, elb } = result;\n\n // Verify collector was created successfully\n if (!collector) {\n throw new Error('Collector creation failed - no collector returned');\n }\n\n // Set global window objects\n window.__storybookWalker = collector;\n window.__storybookElb = elb;\n } catch (error) {\n console.error('Failed to initialize walkerOS:', error);\n }\n}\n","// DOM utilities for working with story elements\n\nimport { Const } from '@walkeros/collector';\nimport { getElbAttributeName } from '@walkeros/web-source-browser';\n\n// Function to get the story document (either iframe or main document)\nexport const getStoryDocument = (): Document => {\n // Try to find story iframe\n const iframe = document.querySelector(\n '#storybook-preview-iframe',\n ) as HTMLIFrameElement;\n if (iframe?.contentDocument) {\n return iframe.contentDocument;\n }\n // Fallback to main document\n return document;\n};\n\n// Function to get the story root element\nexport const getStoryRootElement = (): Element | null => {\n const storyDoc = getStoryDocument();\n\n // Try multiple selectors for story root\n const selectors = [\n '#storybook-root',\n '#root',\n '[data-testid=\"storybook-root\"]',\n 'body',\n ];\n\n for (const selector of selectors) {\n const element = storyDoc.querySelector(selector);\n if (element) {\n return element;\n }\n }\n\n return storyDoc.body;\n};\n\n// Helper to get element path\nexport const getElementPath = (el: Element): string => {\n const path = [];\n let current = el;\n while (current && current !== document.body && current.parentElement) {\n let selector = current.tagName.toLowerCase();\n if (current.id) {\n selector += `#${current.id}`;\n } else if (current.className && typeof current.className === 'string') {\n selector += `.${current.className\n .split(' ')\n .filter((c) => c)\n .join('.')}`;\n }\n path.unshift(selector);\n current = current.parentElement;\n }\n return path.join(' > ');\n};\n\n// Function to enhance DOM with property attributes\nexport const enhanceProperties = (\n storyRoot: Element,\n prefix: string = 'data-elb',\n): void => {\n // Find all elements with any attributes starting with prefix-\n const allElements = Array.from(storyRoot.querySelectorAll('*'));\n\n const scopedAttr = getElbAttributeName(prefix, Const.Commands.Scoped, false); // data-elb_\n const actionAttr = getElbAttributeName(prefix, Const.Commands.Action, false);\n const contextAttr = getElbAttributeName(\n prefix,\n Const.Commands.Context,\n false,\n );\n const globalsAttr = getElbAttributeName(\n prefix,\n Const.Commands.Globals,\n false,\n );\n\n allElements.forEach((el) => {\n const hasProperties = Array.from(el.attributes).some((attr) => {\n if (attr.name === scopedAttr) return true; // scoped generic data-elb_\n return (\n attr.name.startsWith(`${prefix}-`) &&\n attr.name !== actionAttr &&\n attr.name !== contextAttr &&\n attr.name !== globalsAttr\n );\n });\n\n // Mark elements with property attributes\n if (hasProperties) {\n el.setAttribute(getElbAttributeName(prefix, 'property', false), '');\n }\n });\n};\n","// Builds an entity-centric \"skeleton\" tree: each node is a data-elb entity, with\n// generic (data-elb-), scoped (data-elb_), and explicit (data-elb-<entity>)\n// values resolved onto it and tagged by origin. Interim addon-local\n// approximation of the walker's resolution (see the design doc for fidelity\n// limits: cross-DOM links, shadow piercing, exact collision priority, and\n// context ordering index are out of scope for Phase 1).\n\nimport type { WalkerOS } from '@walkeros/core';\nimport { Const } from '@walkeros/collector';\nimport {\n getElbValues,\n getElbAttributeName,\n getGlobals,\n} from '@walkeros/web-source-browser';\nimport type { AttributeNode, ResolvedProperty } from '../types';\nimport { getElementPath } from './domUtils';\n\nconst generateElementHTML = (element: Element, prefix: string): string => {\n const tagName = element.tagName.toLowerCase();\n // Hide the synthetic highlight marker (data-elbproperty) that\n // enhanceProperties stamps on the live DOM; it is an internal helper, not\n // author-written tagging, so it must not appear in the displayed markup.\n const propertyMarker = getElbAttributeName(prefix, 'property', false);\n const attribs = Array.from(element.attributes)\n .filter((a) => a.name !== propertyMarker)\n .map((a) => `${a.name}=\"${a.value}\"`);\n if (attribs.length === 0) return `<${tagName}></${tagName}>`;\n if (attribs.length === 1) return `<${tagName} ${attribs[0]}></${tagName}>`;\n return `<${tagName}\\n${attribs.map((a) => ` ${a}`).join('\\n')}\\n></${tagName}>`;\n};\n\n// Origin priority for same-key collisions (highest first). Approximate; real\n// walker priority is documented as out of scope for Phase 1.\nconst PRIORITY: Record<ResolvedProperty['origin'], number> = {\n data: 3,\n scoped: 2,\n generic: 1,\n};\n\nconst addProperty = (\n acc: Map<string, ResolvedProperty>,\n key: string,\n value: WalkerOS.Property | undefined,\n origin: ResolvedProperty['origin'],\n) => {\n if (!key) return; // never store the blank-key generic\n if (value === undefined || value === null || value === '') return;\n const existing = acc.get(key);\n if (!existing || PRIORITY[origin] > PRIORITY[existing.origin]) {\n acc.set(key, { key, value, origin });\n }\n};\n\nconst collectValues = (\n acc: Map<string, ResolvedProperty>,\n prefix: string,\n el: Element,\n name: string, // '' for generic, entity name for explicit\n origin: ResolvedProperty['origin'],\n) => {\n const values = getElbValues(prefix, el, name, true);\n Object.entries(values).forEach(([k, v]) => addProperty(acc, k, v, origin));\n};\n\nexport const buildAttributeTree = (\n scope: Element,\n prefix: string = Const.Commands.Prefix,\n): { nodes: AttributeNode[]; globals: ResolvedProperty[] } => {\n const entityAttr = getElbAttributeName(prefix); // data-elb\n const scopedName = Const.Commands.Scoped; // '_'\n\n // All entity elements (self + descendants).\n const entityEls: Element[] = [];\n if (scope.matches(`[${entityAttr}]`)) entityEls.push(scope);\n scope.querySelectorAll(`[${entityAttr}]`).forEach((el) => entityEls.push(el));\n const entitySet = new Set(entityEls);\n\n // Nearest ancestor-or-self entity for any element (DOM ancestry).\n const owningEntity = (el: Element): Element | null => {\n let cur: Element | null = el;\n while (cur) {\n if (entitySet.has(cur)) return cur;\n cur = cur.parentElement;\n }\n return null;\n };\n\n const nodeMap = new Map<Element, AttributeNode>();\n\n entityEls.forEach((el) => {\n const entity = el.getAttribute(entityAttr) || '';\n const props = new Map<string, ResolvedProperty>();\n\n // Own + owned descendants: explicit (data-elb-<entity>) and generic (data-elb-)\n const owned: Element[] = [el];\n el.querySelectorAll('*').forEach((child) => {\n if (owningEntity(child) === el) owned.push(child);\n });\n owned.forEach((o) => {\n collectValues(props, prefix, o, entity, 'data');\n collectValues(props, prefix, o, '', 'generic');\n });\n\n // Ancestors (incl. self start): explicit, generic, and scoped (data-elb_)\n let anc: Element | null = el;\n while (anc) {\n collectValues(props, prefix, anc, entity, 'data');\n collectValues(props, prefix, anc, '', 'generic');\n // scoped uses isProperty=false (suffix '_' with no dash)\n Object.entries(getElbValues(prefix, anc, scopedName, false)).forEach(\n ([k, v]) => addProperty(props, k, v, 'scoped'),\n );\n anc = anc.parentElement;\n }\n\n nodeMap.set(el, {\n element: el.tagName.toLowerCase(),\n path: getElementPath(el),\n htmlMarkup: generateElementHTML(el, prefix),\n attributes: {\n entity,\n action:\n el.getAttribute(\n getElbAttributeName(prefix, Const.Commands.Action, false),\n ) || undefined,\n context: (() => {\n const c = getElbValues(prefix, el, Const.Commands.Context, false);\n return Object.keys(c).length ? c : undefined;\n })(),\n globals: (() => {\n const g = getElbValues(prefix, el, Const.Commands.Globals, false);\n return Object.keys(g).length ? g : undefined;\n })(),\n properties: Array.from(props.values()),\n },\n children: [],\n });\n });\n\n // Nest by nearest ancestor entity.\n const roots: AttributeNode[] = [];\n nodeMap.forEach((node, el) => {\n const parentEl = el.parentElement ? owningEntity(el.parentElement) : null;\n const parentNode = parentEl ? nodeMap.get(parentEl) : undefined;\n if (parentNode) parentNode.children.push(node);\n else roots.push(node);\n });\n\n const globalsValues = getGlobals(prefix, scope);\n const globals: ResolvedProperty[] = [];\n Object.entries(globalsValues).forEach(([key, value]) => {\n if (value !== undefined && value !== null && value !== '')\n globals.push({ key, value, origin: 'data' });\n });\n\n return { nodes: roots, globals };\n};\n","// CSS utilities for highlighting DOM elements\n\n// Generate dynamic CSS based on prefix\nexport const generateHighlightCSS = (prefix: string): string => {\n // Define selectors based on prefix\n const globalsSelector = `${prefix}globals`;\n const contextSelector = `${prefix}context`;\n const baseSelector = prefix;\n const propertySelector = `${prefix}property`;\n\n // Template CSS with actual selectors\n const cssTemplate = `\n /* Highlight colors - original from website */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n --highlight-background: #1f2937;\n --highlight-text: #9ca3af;\n --highlight-hover: rgba(255, 255, 255, 0.05);\n --highlight-separator: rgba(255, 255, 255, 0.05);\n }\n\n .highlight-globals [${globalsSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-globals) !important;\n }\n\n .highlight-context [${contextSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-context) !important;\n }\n\n .highlight-entity [${baseSelector}] {\n box-shadow: 0 0 0 2px var(--highlight-entity) !important;\n }\n\n .highlight-property [${propertySelector}] {\n box-shadow: 0 0 0 2px var(--highlight-property) !important;\n }\n\n .highlight-action [${prefix}action] {\n box-shadow: 0 0 0 2px var(--highlight-action) !important;\n }\n\n /* Combined highlights with layered solid borders */\n .highlight-entity.highlight-action [${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-entity.highlight-context [${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-entity.highlight-property [${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-entity),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context [${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-context.highlight-property [${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-property [${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Globals combinations */\n .highlight-globals.highlight-entity [${globalsSelector}][${baseSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity) !important;\n }\n\n .highlight-globals.highlight-action [${globalsSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-context [${globalsSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-property [${globalsSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-property) !important;\n }\n\n /* Triple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action\n [${globalsSelector}][${baseSelector}][${prefix}action] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context\n [${globalsSelector}][${baseSelector}][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-property\n [${globalsSelector}][${baseSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context\n [${globalsSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-action.highlight-property\n [${globalsSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-context.highlight-property\n [${globalsSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Triple combinations with distinct layers */\n .highlight-entity.highlight-action.highlight-context\n [${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context) !important;\n }\n\n /* Triple combinations with property */\n .highlight-entity.highlight-action.highlight-property\n [${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-entity.highlight-context.highlight-property\n [${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-context),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n .highlight-action.highlight-context.highlight-property\n [${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-context),\n 0 0 0 6px var(--highlight-property) !important;\n }\n\n /* Quadruple combinations with globals */\n .highlight-globals.highlight-entity.highlight-action.highlight-context\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-action.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-entity.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n .highlight-globals.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-action),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quadruple combination */\n .highlight-entity.highlight-action.highlight-context.highlight-property\n [${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-action),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-context),\n 0 0 0 8px var(--highlight-property) !important;\n }\n\n /* Quintuple combination with all attributes */\n .highlight-globals.highlight-entity.highlight-action.highlight-context.highlight-property\n [${globalsSelector}][${baseSelector}][${prefix}action][${contextSelector}][${propertySelector}] {\n box-shadow:\n 0 0 0 2px var(--highlight-globals),\n 0 0 0 4px var(--highlight-entity),\n 0 0 0 6px var(--highlight-action),\n 0 0 0 8px var(--highlight-context),\n 0 0 0 10px var(--highlight-property) !important;\n }\n `;\n\n return cssTemplate;\n};\n\n// Function to inject highlighting CSS into story document\nexport const injectHighlightingCSS = (\n storyDoc: Document,\n prefix: string = 'data-elb',\n): void => {\n // Remove existing styles\n const existingStyle = storyDoc.querySelector('#walkeros-highlighting');\n if (existingStyle) {\n existingStyle.remove();\n }\n\n const highlightingStyleElement = storyDoc.createElement('style');\n highlightingStyleElement.id = 'walkeros-highlighting';\n const css = generateHighlightCSS(prefix);\n highlightingStyleElement.textContent = css;\n\n storyDoc.head.appendChild(highlightingStyleElement);\n};\n","// Utilities for managing DOM highlighting\n\nimport type { WalkerOSAddon } from '../types';\nimport {\n getStoryDocument,\n getStoryRootElement,\n enhanceProperties,\n} from './domUtils';\nimport { injectHighlightingCSS } from './cssUtils';\n\n// Function to apply highlighting to story root\nexport const applyHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) return;\n\n // Remove existing highlighting classes\n storyRoot.classList.remove('highlight-context');\n storyRoot.classList.remove('highlight-entity');\n storyRoot.classList.remove('highlight-property');\n storyRoot.classList.remove('highlight-action');\n storyRoot.classList.remove('highlight-globals');\n\n if (!highlights) return;\n\n // Re-enhance properties FIRST to ensure they're marked\n enhanceProperties(storyRoot, prefix);\n\n // Then add specific highlighting classes\n if (highlights.context) storyRoot.classList.add('highlight-context');\n if (highlights.entity) storyRoot.classList.add('highlight-entity');\n if (highlights.property) storyRoot.classList.add('highlight-property');\n if (highlights.action) storyRoot.classList.add('highlight-action');\n if (highlights.globals) storyRoot.classList.add('highlight-globals');\n};\n\n// Combined function to inject CSS and apply highlighting\nexport const setupHighlighting = (\n highlights: WalkerOSAddon['highlights'],\n prefix: string = 'data-elb',\n): void => {\n const storyDoc = getStoryDocument();\n\n // Always inject CSS first\n injectHighlightingCSS(storyDoc, prefix);\n\n // Then apply highlighting\n applyHighlighting(highlights, prefix);\n};\n","import type { WalkerOSAddon } from './types';\nimport type { DecoratorFunction } from 'storybook/internal/types';\nimport { addons } from 'storybook/preview-api';\nimport { getAllEvents, getGlobals } from '@walkeros/web-source-browser';\n\nimport { ADDON_ID, EVENTS } from './constants';\nimport { initializeWalker } from './walker';\nimport { getStoryRootElement, enhanceProperties } from './utils/domUtils';\nimport { buildAttributeTree } from './utils/attributeTreeUtils';\nimport { setupHighlighting } from './utils/highlightingUtils';\n\n// Set up the channel listener globally, not per story\nconst channel = addons.getChannel();\nlet currentStoryId: string | null = null;\n\n// Global listener for the request events\nchannel.addListener(EVENTS.REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.RESULT, []);\n return;\n }\n\n // Enhance DOM with property attributes\n enhanceProperties(storyRoot, config.prefix || 'data-elb');\n\n const events = getAllEvents(storyRoot as Element, config.prefix);\n\n // Collect globals from data-elbglobals attributes\n const globals = getGlobals(config.prefix || 'data-elb', storyRoot as Element);\n\n // Add globals to each event if any globals exist\n const eventsWithGlobals = events.map((event) => {\n if (Object.keys(globals).length > 0) {\n return { ...event, globals };\n }\n return event;\n });\n\n // Send the result back to the manager\n channel.emit(EVENTS.RESULT, eventsWithGlobals);\n});\n\n// Global listener for highlighting events\nchannel.addListener(EVENTS.HIGHLIGHT, (config: WalkerOSAddon) => {\n setupHighlighting(config.highlights, config.prefix);\n});\n\n// Global listener for attribute tree requests\nchannel.addListener(EVENTS.ATTRIBUTES_REQUEST, (config: WalkerOSAddon) => {\n const storyRoot = getStoryRootElement();\n if (!storyRoot) {\n channel.emit(EVENTS.ATTRIBUTES_RESULT, { nodes: [], globals: [] });\n return;\n }\n\n // Build the skeleton tree ({ nodes, globals })\n const result = buildAttributeTree(\n storyRoot as Element,\n config.prefix || 'data-elb',\n );\n\n // Send the result back to the manager\n channel.emit(EVENTS.ATTRIBUTES_RESULT, result);\n});\n\nexport const withRoundTrip: DecoratorFunction = (storyFn, context) => {\n // Check if story changed and auto-run is enabled\n const storyId = context.id;\n const hasStoryChanged = currentStoryId !== storyId;\n const { parameters } = context;\n const autoRefresh = parameters?.[ADDON_ID]?.autoRefresh;\n\n if (hasStoryChanged) {\n currentStoryId = storyId;\n }\n\n const result = storyFn();\n\n // Initialize walker and inject CSS after story renders\n setTimeout(() => {\n // Initialize walkerOS for live event capture\n const prefix = parameters?.[ADDON_ID]?.prefix || 'data-elb';\n initializeWalker({ prefix, autoRefresh }).catch((err) => {\n console.error('Walker initialization failed:', err);\n });\n\n // Inject highlighting CSS and enhance properties\n const storyRoot = getStoryRootElement();\n if (storyRoot) {\n setupHighlighting(undefined, prefix);\n enhanceProperties(storyRoot, prefix);\n }\n\n // Auto-run walker if story changed and auto-refresh is enabled\n if (hasStoryChanged && autoRefresh && window.__storybookElb) {\n window.__storybookElb('walker run');\n }\n }, 200);\n\n return result;\n};\n","/**\n * A decorator is a way to wrap a story in extra “rendering” functionality. Many addons define decorators\n * in order to augment stories:\n * - with extra rendering\n * - gather details about how a story is rendered\n *\n * When writing stories, decorators are typically used to wrap stories with extra markup or context mocking.\n *\n * https://storybook.js.org/docs/react/writing-stories/decorators\n */\nimport type { ProjectAnnotations, Renderer } from 'storybook/internal/types';\n\nimport { ADDON_ID } from './constants';\nimport { withRoundTrip } from './withRoundTrip';\n\n/**\n * Note: if you want to use JSX in this file, rename it to `preview.tsx`\n * and update the entry prop in tsup.config.ts to use \"src/preview.tsx\",\n */\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withRoundTrip],\n parameters: {\n [ADDON_ID]: {\n autoRefresh: true,\n prefix: 'data-elb',\n },\n },\n};\n\nexport default preview;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@walkeros/storybook-addon",
3
- "version": "4.7.2-next-1791147139360",
3
+ "version": "4.7.2",
4
4
  "description": "Visualize, debug, and validate walkerOS event tracking in your Storybook stories. Real-time event capture with visual DOM highlighting for data-attribute based tagging.",
5
5
  "keywords": [
6
6
  "storybook-addons",
@@ -62,10 +62,10 @@
62
62
  },
63
63
  "dependencies": {
64
64
  "@storybook/icons": "^2.0.1",
65
- "@walkeros/collector": "4.7.2-next-1791147139360",
66
- "@walkeros/core": "4.7.2-next-1791147139360",
67
- "@walkeros/web-core": "4.7.2-next-1791147139360",
68
- "@walkeros/web-source-browser": "4.7.2-next-1791147139360"
65
+ "@walkeros/collector": "4.7.2",
66
+ "@walkeros/core": "4.7.2",
67
+ "@walkeros/web-core": "4.7.2",
68
+ "@walkeros/web-source-browser": "4.7.2"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@storybook/addon-docs": "^10.1.9",
@@ -74,7 +74,7 @@
74
74
  "@types/react": "^19.2.7",
75
75
  "@types/react-dom": "^19.2.3",
76
76
  "@vitejs/plugin-react": "^6.0.2",
77
- "@walkeros/config": "4.7.2-next-1791147139360",
77
+ "@walkeros/config": "4.7.2",
78
78
  "auto": "^11.3.6",
79
79
  "boxen": "^8.0.1",
80
80
  "npm-run-all2": "^8.0.4",