{"version":3,"sources":["../src/utils.ts","../src/core.ts"],"sourcesContent":["// utils.ts - Helper functions (pure functions)\nexport const logMessage = (message: string): void => {\n  console.log(`LLM Optimization Library: ${message}`);\n};\n\nexport const createDOMComment = (message: string): Comment => {\n  return document.createComment(message);\n};\n","// core.ts - Web Augmentation Optimizer (WAO)\nimport type {\n  ElementDescription,\n  PageState,\n  InteractionMapping,\n  PageStructure,\n  DataFlow,\n  AccessibilityInfo,\n} from './types';\nimport { createDOMComment, logMessage } from './utils';\n\n// Core state for the library\nconst pageState: PageState = {\n  originalDOM: document.body, // Initial state\n  optimizedElements: [],\n  interactionMappings: [],\n  isActive: false,\n  pageStructure: undefined,\n  dataFlows: [],\n  accessibility: {\n    ariaLabels: {},\n    tabOrder: [],\n    colorContrast: {},\n  },\n};\n\n// CSS Styles for optimized elements\nconst injectStyles = (): void => {\n  const styleElement = document.createElement('style');\n  styleElement.id = 'wao-styles';\n  styleElement.textContent = `\n    .wao-optimized-element {\n      border: 2px solid #3498db;\n      padding: 8px;\n      margin: 4px;\n      background-color: #f8f9fa;\n      border-radius: 4px;\n      position: relative;\n      display: block;\n    }\n    \n    .wao-description {\n      font-family: monospace;\n      margin-bottom: 6px;\n      color: #2c3e50;\n      display: block;\n    }\n    \n    .wao-tag {\n      background-color: #3498db;\n      color: white;\n      padding: 2px 6px;\n      border-radius: 3px;\n      font-size: 12px;\n      font-family: monospace;\n      position: absolute;\n      top: -10px;\n      right: 5px;\n    }\n    \n    .wao-interaction {\n      margin-top: 6px;\n      font-style: italic;\n      color: #e74c3c;\n      font-size: 12px;\n      border-top: 1px dashed #ccc;\n      padding-top: 4px;\n    }\n    \n    .wao-toggle {\n      position: fixed;\n      bottom: 20px;\n      right: 20px;\n      z-index: 10000;\n      padding: 8px 16px;\n      background-color: #3498db;\n      color: white;\n      border: none;\n      border-radius: 4px;\n      cursor: pointer;\n      font-weight: bold;\n      box-shadow: 0 2px 5px rgba(0,0,0,0.2);\n    }\n    \n    .wao-role {\n      position: absolute;\n      top: -10px;\n      left: 5px;\n      background-color: #27ae60;\n      color: white;\n      padding: 2px 6px;\n      border-radius: 3px;\n      font-size: 12px;\n      font-family: monospace;\n    }\n    \n    .wao-importance-primary {\n      border-color: #e74c3c !important;\n      border-width: 3px !important;\n    }\n    \n    .wao-importance-secondary {\n      border-color: #f39c12 !important;\n    }\n    \n    .wao-importance-tertiary {\n      border-color: #95a5a6 !important;\n      border-style: dashed !important;\n    }\n    \n    .wao-data-flow {\n      position: relative;\n      border: 1px dashed #9b59b6;\n      margin: 10px 0;\n      padding: 8px;\n      background-color: rgba(155, 89, 182, 0.1);\n    }\n    \n    .wao-data-flow::before {\n      content: attr(data-description);\n      font-size: 12px;\n      color: #9b59b6;\n      position: absolute;\n      top: -10px;\n      left: 10px;\n      background: white;\n      padding: 0 5px;\n    }\n    \n    .wao-page-structure {\n      position: fixed;\n      top: 20px;\n      right: 20px;\n      background: rgba(52, 152, 219, 0.9);\n      color: white;\n      padding: 10px;\n      border-radius: 4px;\n      font-family: monospace;\n      font-size: 12px;\n      z-index: 10000;\n      max-width: 300px;\n      max-height: 300px;\n      overflow: auto;\n    }\n    \n    body[data-wao-active=\"true\"] {\n      filter: grayscale(0.3);\n      background-color: #f0f0f0 !important;\n    }\n    \n    .wao-accessibility-issue {\n      outline: 3px solid #c0392b !important;\n      position: relative;\n    }\n    \n    .wao-accessibility-issue::after {\n      content: \"⚠️\";\n      position: absolute;\n      top: 0;\n      right: 0;\n      background: #c0392b;\n      color: white;\n      padding: 2px;\n    }\n  `;\n  document.head.appendChild(styleElement);\n};\n\n// Inject activation instructions for the LLM Agent\nconst injectActivationInstructions = (): void => {\n  const comment = createDOMComment(`\n    LLM Agent Instructions:\n    - To activate this optimization library, set 'data-wao-active=\"true\"' on the body element\n    - For visual descriptions, call 'window.WAO.describeElementVisually(selector, description, elementType)'\n    - To map interactions, call 'window.WAO.defineInteraction(selector, interactionType, methodName)'\n    - To describe page structure, call 'window.WAO.describePage(pageInfo)'\n    - To analyze page semantics, call 'window.WAO.extractSemanticStructure()'\n    - To describe data flows, call 'window.WAO.describeDataFlow(flow)'\n    - To analyze accessibility, call 'window.WAO.analyzeAccessibility()'\n    - To highlight element roles, call 'window.WAO.highlightElementRole(selector, role)'\n    - To deactivate, call 'window.WAO.deactivateOptimizer()'\n  `);\n  document.body.prepend(comment);\n\n  // Also inject a data attribute observer\n  const observer = new MutationObserver(mutations => {\n    mutations.forEach(mutation => {\n      if (mutation.attributeName === 'data-wao-active') {\n        const bodyElement = document.body;\n        const isActive = bodyElement.getAttribute('data-wao-active') === 'true';\n\n        if (isActive && !pageState.isActive) {\n          activateOptimizer(bodyElement);\n        } else if (!isActive && pageState.isActive) {\n          deactivateOptimizer();\n        }\n      }\n    });\n  });\n\n  observer.observe(document.body, { attributes: true });\n};\n\n// Check if the optimizer is activated\nexport const isActivated = (): boolean => {\n  return pageState.isActive;\n};\n\n// Activate the optimizer\nconst activateOptimizer = (domElement: HTMLElement): void => {\n  if (!isActivated()) {\n    pageState.originalDOM = domElement.cloneNode(true) as HTMLElement;\n    pageState.isActive = true;\n    document.body.setAttribute('data-wao-active', 'true');\n    injectStyles();\n    addToggle();\n    setupEventListeners();\n    logMessage('Optimizer activated');\n  } else {\n    logMessage('Optimizer already active');\n  }\n};\n\n// Deactivate and restore original DOM\nconst deactivateOptimizer = (): void => {\n  if (pageState.isActive) {\n    // Don't replace the whole body to avoid losing the script\n    // Instead, revert individual optimized elements\n    pageState.optimizedElements.forEach(revertElementVisuals);\n\n    // Remove any added styles and toggles\n    const styleElement = document.getElementById('wao-styles');\n    if (styleElement) styleElement.remove();\n\n    const toggleButton = document.querySelector('.wao-toggle');\n    if (toggleButton) toggleButton.remove();\n\n    // Cleanup\n    document.body.removeAttribute('data-wao-active');\n    removeEventListeners();\n    pageState.optimizedElements = [];\n    pageState.interactionMappings = [];\n    pageState.isActive = false;\n    logMessage('Optimizer deactivated');\n  } else {\n    logMessage('Optimizer is not active');\n  }\n};\n\n// Define an interaction for an element\nconst defineInteraction = (\n  elementSelector: string,\n  interactionType: 'click' | 'hover' | 'focus',\n  methodName: string,\n  expectedOutcome?: string,\n): void => {\n  if (!isActivated()) return;\n\n  const mapping: InteractionMapping = {\n    elementSelector,\n    interactionType,\n    methodName,\n    expectedOutcome,\n  };\n\n  pageState.interactionMappings.push(mapping);\n\n  // Find any already optimized elements and add interaction information\n  const element = document.querySelector(elementSelector);\n  if (element) {\n    const optimizedElement = element.closest('.wao-optimized-element');\n    if (optimizedElement) {\n      let interactionElement = optimizedElement.querySelector('.wao-interaction');\n      if (!interactionElement) {\n        interactionElement = document.createElement('div');\n        interactionElement.className = 'wao-interaction';\n        optimizedElement.appendChild(interactionElement);\n      }\n\n      const interactionText = `${interactionType} → ${methodName}`;\n      interactionElement.textContent +=\n        interactionText + (expectedOutcome ? ` (${expectedOutcome})` : '') + ' ';\n    }\n  }\n};\n\n// Handle interaction events\nconst handleInteraction = (event: Event): void => {\n  const target = event.target as HTMLElement;\n\n  pageState.interactionMappings.forEach(mapping => {\n    const matchedElement = target.closest(mapping.elementSelector);\n    if (matchedElement && mapping.interactionType === event.type) {\n      logMessage(`Interaction triggered: ${mapping.methodName} on ${mapping.elementSelector}`);\n\n      // Here you would execute the actual method\n      // Safely attempt to call the method if it exists on window\n      const method = window[mapping.methodName as keyof typeof window];\n      if (typeof method === 'function') {\n        try {\n          method(matchedElement);\n        } catch (error) {\n          logMessage(`Error executing method ${mapping.methodName}: ${error}`);\n        }\n      }\n    }\n  });\n};\n\n// Add toggle button to UI\nconst addToggle = (): void => {\n  // Remove existing button if present\n  const existingButton = document.querySelector('.wao-toggle');\n  if (existingButton) existingButton.remove();\n\n  const toggleButton = document.createElement('button');\n  toggleButton.className = 'wao-toggle';\n  toggleButton.textContent = pageState.isActive\n    ? 'Deactivate Optimization'\n    : 'Activate Optimization';\n\n  toggleButton.addEventListener('click', () => {\n    if (pageState.isActive) {\n      deactivateOptimizer();\n    } else {\n      activateOptimizer(document.body);\n    }\n    toggleButton.textContent = pageState.isActive\n      ? 'Deactivate Optimization'\n      : 'Activate Optimization';\n  });\n\n  document.body.appendChild(toggleButton);\n};\n\n// Setup event listeners\nconst setupEventListeners = (): void => {\n  document.addEventListener('click', handleInteraction);\n  document.addEventListener('mouseover', handleInteraction); // Use mouseover for hover\n  document.addEventListener('focus', handleInteraction, true); // Capture phase for focus\n};\n\n// Remove event listeners\nconst removeEventListeners = (): void => {\n  document.removeEventListener('click', handleInteraction);\n  document.removeEventListener('mouseover', handleInteraction);\n  document.removeEventListener('focus', handleInteraction, true);\n};\n\n// Visually describe an element\nconst describeElementVisually = (\n  selector: string,\n  description: string,\n  elementType: string,\n  options?: {\n    role?: string;\n    importance?: 'primary' | 'secondary' | 'tertiary';\n    dataContext?: string;\n  },\n): void => {\n  if (!isActivated()) return;\n\n  const element = document.querySelector(selector);\n  if (!element) {\n    logMessage(`Element not found: ${selector}`);\n    return;\n  }\n\n  // Check if already optimized\n  if (element.closest('.wao-optimized-element')) {\n    logMessage(`Element already optimized: ${selector}`);\n    return;\n  }\n\n  // Create the wrapper\n  const wrapper = document.createElement('div');\n  wrapper.className = 'wao-optimized-element';\n  wrapper.setAttribute('data-original-selector', selector);\n\n  // Add importance class if specified\n  if (options?.importance) {\n    wrapper.classList.add(`wao-importance-${options.importance}`);\n  }\n\n  // Create description\n  const descriptionElement = document.createElement('div');\n  descriptionElement.className = 'wao-description';\n  descriptionElement.textContent = description;\n\n  // Add data context if specified\n  if (options?.dataContext) {\n    const dataContextEl = document.createElement('div');\n    dataContextEl.style.fontSize = '12px';\n    dataContextEl.style.fontStyle = 'italic';\n    dataContextEl.textContent = `Data: ${options.dataContext}`;\n    descriptionElement.appendChild(dataContextEl);\n  }\n\n  // Create tag\n  const tagElement = document.createElement('span');\n  tagElement.className = 'wao-tag';\n  tagElement.textContent = `<${elementType}>`;\n\n  // Create role tag if specified\n  if (options?.role) {\n    const roleElement = document.createElement('span');\n    roleElement.className = 'wao-role';\n    roleElement.textContent = options.role;\n    wrapper.appendChild(roleElement);\n  }\n\n  // Assemble the wrapper\n  wrapper.appendChild(tagElement);\n  wrapper.appendChild(descriptionElement);\n\n  // Replace the original element with our wrapper\n  element.parentNode?.replaceChild(wrapper, element);\n\n  // Store the optimization for potential revert\n  pageState.optimizedElements.push({\n    selector,\n    description,\n    originalHTML: element.outerHTML,\n    role: options?.role,\n    importance: options?.importance,\n    dataContext: options?.dataContext,\n  });\n};\n\n// Revert visual optimization\nconst revertElementVisuals = (elementDescription: ElementDescription): void => {\n  const optimizedElement = document.querySelector(\n    `.wao-optimized-element[data-original-selector=\"${elementDescription.selector}\"]`,\n  );\n\n  if (optimizedElement) {\n    // Create a temporary container to convert HTML string to Element\n    const tempContainer = document.createElement('div');\n    if (elementDescription.originalHTML) {\n      tempContainer.innerHTML = elementDescription.originalHTML;\n      const originalElement = tempContainer.firstElementChild;\n\n      if (originalElement) {\n        optimizedElement.parentNode?.replaceChild(originalElement, optimizedElement);\n      }\n    }\n  }\n};\n\n// New function: Describe overall page structure\nconst describePage = (pageInfo: Partial<PageStructure>): void => {\n  if (!isActivated()) return;\n\n  // Store page structure\n  pageState.pageStructure = {\n    ...pageState.pageStructure,\n    ...pageInfo,\n  } as PageStructure;\n\n  // Create or update page structure visualization\n  let structureEl = document.querySelector('.wao-page-structure');\n\n  if (!structureEl) {\n    structureEl = document.createElement('div');\n    structureEl.className = 'wao-page-structure';\n    document.body.appendChild(structureEl);\n  }\n\n  // Build HTML content for page structure\n  let structureHTML = '<h3>Page Structure</h3>';\n\n  if (pageInfo.title) {\n    structureHTML += `<div><strong>Title:</strong> ${pageInfo.title}</div>`;\n  }\n\n  if (pageInfo.mainContent) {\n    structureHTML += `<div><strong>Main:</strong> ${pageInfo.mainContent}</div>`;\n\n    // Highlight main content\n    const mainEl = document.querySelector(pageInfo.mainContent);\n    if (mainEl && !mainEl.classList.contains('wao-optimized-element')) {\n      mainEl.setAttribute('data-wao-role', 'main-content');\n      mainEl.setAttribute('style', 'border: 2px dashed #3498db !important; padding: 8px;');\n    }\n  }\n\n  if (pageInfo.navigation) {\n    structureHTML += `<div><strong>Navigation:</strong></div><ul>`;\n    const navItems = Array.isArray(pageInfo.navigation)\n      ? pageInfo.navigation\n      : [pageInfo.navigation];\n\n    navItems.forEach((nav: string) => {\n      structureHTML += `<li>${nav}</li>`;\n\n      // Highlight navigation\n      const navEl = document.querySelector(nav);\n      if (navEl && !navEl.classList.contains('wao-optimized-element')) {\n        navEl.setAttribute('data-wao-role', 'navigation');\n        navEl.setAttribute('style', 'border: 2px dashed #2ecc71 !important; padding: 4px;');\n      }\n    });\n    structureHTML += `</ul>`;\n  }\n\n  if (pageInfo.sidebar) {\n    structureHTML += `<div><strong>Sidebars:</strong></div><ul>`;\n    const sidebarItems = Array.isArray(pageInfo.sidebar) ? pageInfo.sidebar : [pageInfo.sidebar];\n\n    sidebarItems.forEach((side: string) => {\n      structureHTML += `<li>${side}</li>`;\n\n      // Highlight sidebar\n      const sideEl = document.querySelector(side);\n      if (sideEl && !sideEl.classList.contains('wao-optimized-element')) {\n        sideEl.setAttribute('data-wao-role', 'sidebar');\n        sideEl.setAttribute('style', 'border: 2px dashed #f39c12 !important; padding: 4px;');\n      }\n    });\n    structureHTML += `</ul>`;\n  }\n\n  if (pageInfo.footer) {\n    structureHTML += `<div><strong>Footer:</strong> ${pageInfo.footer}</div>`;\n\n    // Highlight footer\n    const footerEl = document.querySelector(pageInfo.footer);\n    if (footerEl && !footerEl.classList.contains('wao-optimized-element')) {\n      footerEl.setAttribute('data-wao-role', 'footer');\n      footerEl.setAttribute('style', 'border: 2px dashed #9b59b6 !important; padding: 4px;');\n    }\n  }\n\n  structureEl.innerHTML = structureHTML;\n};\n\n// New function: Describe data flows between elements\nconst describeDataFlow = (flow: DataFlow): void => {\n  if (!isActivated()) return;\n\n  // Store the data flow\n  if (!pageState.dataFlows) {\n    pageState.dataFlows = [];\n  }\n\n  pageState.dataFlows.push(flow);\n\n  // Visualize the data flow\n  const sourceEl = document.querySelector(flow.source);\n  const destEl = document.querySelector(flow.destination);\n\n  if (sourceEl && destEl) {\n    // Create flow container\n    const flowContainer = document.createElement('div');\n    flowContainer.className = 'wao-data-flow';\n    flowContainer.setAttribute('data-description', flow.description ?? '');\n    flowContainer.innerHTML = `\n      <div><strong>From:</strong> ${flow.source} (${flow.dataType})</div>\n      <div style=\"text-align: center;\">↓</div>\n      <div><strong>To:</strong> ${flow.destination}</div>\n    `;\n\n    // Insert after destination element\n    destEl.parentNode?.insertBefore(flowContainer, destEl.nextSibling);\n  }\n};\n\n// New function: Analyze page for accessibility issues\nconst analyzeAccessibility = (): void => {\n  if (!isActivated()) return;\n\n  const accessibilityInfo: AccessibilityInfo = {\n    ariaLabels: {},\n    tabOrder: [],\n    colorContrast: {},\n  };\n\n  // Find all interactive elements\n  const interactiveElements = document.querySelectorAll(\n    'button, a, input, select, textarea, [role=\"button\"], [tabindex]',\n  );\n\n  // Analyze each element\n  interactiveElements.forEach(element => {\n    const elemNode = element as HTMLElement;\n    const selector = getUniqueSelector(elemNode);\n\n    // Check for ARIA labels\n    const ariaLabel = elemNode.getAttribute('aria-label');\n    const ariaLabelledBy = elemNode.getAttribute('aria-labelledby');\n\n    if (!ariaLabel && !ariaLabelledBy && elemNode.tagName !== 'INPUT') {\n      // Mark as accessibility issue\n      elemNode.classList.add('wao-accessibility-issue');\n\n      // Store issue\n      accessibilityInfo.colorContrast[selector] = 'Missing ARIA label';\n    }\n\n    // Store existing labels\n    if (ariaLabel) {\n      accessibilityInfo.ariaLabels[selector] = ariaLabel;\n    }\n\n    // Build tab order\n    if (\n      elemNode.tabIndex >= 0 ||\n      elemNode.tagName === 'A' ||\n      elemNode.tagName === 'BUTTON' ||\n      elemNode.tagName === 'INPUT' ||\n      elemNode.tagName === 'SELECT' ||\n      elemNode.tagName === 'TEXTAREA'\n    ) {\n      accessibilityInfo.tabOrder.push(selector);\n    }\n  });\n\n  // Store accessibility info\n  pageState.accessibility = accessibilityInfo;\n\n  // Create accessibility report\n  let accessibilityEl = document.querySelector('.wao-accessibility-report');\n\n  if (!accessibilityEl) {\n    accessibilityEl = document.createElement('div');\n    accessibilityEl.className = 'wao-accessibility-report';\n    accessibilityEl.setAttribute(\n      'style',\n      `\n      position: fixed;\n      left: 20px;\n      top: 20px;\n      background: rgba(44, 62, 80, 0.9);\n      color: white;\n      padding: 15px;\n      border-radius: 4px;\n      font-family: monospace;\n      z-index: 10000;\n      max-width: 300px;\n      max-height: 300px;\n      overflow: auto;\n    `,\n    );\n    document.body.appendChild(accessibilityEl);\n  }\n\n  // Build HTML content for accessibility report\n  let reportHTML = '<h3>Accessibility Report</h3>';\n\n  // Tab order\n  reportHTML += `<div><strong>Tab Order (${accessibilityInfo.tabOrder.length} elements):</strong></div><ol>`;\n  accessibilityInfo.tabOrder.slice(0, 10).forEach(selector => {\n    reportHTML += `<li>${selector}</li>`;\n  });\n\n  if (accessibilityInfo.tabOrder.length > 10) {\n    reportHTML += `<li>... and ${accessibilityInfo.tabOrder.length - 10} more</li>`;\n  }\n\n  reportHTML += `</ol>`;\n\n  // Issues\n  const issueCount = Object.keys(accessibilityInfo.colorContrast).length;\n  reportHTML += `<div><strong>Issues (${issueCount}):</strong></div>`;\n\n  if (issueCount > 0) {\n    reportHTML += `<ul>`;\n    Object.entries(accessibilityInfo.colorContrast)\n      .slice(0, 5)\n      .forEach(([selector, issue]) => {\n        reportHTML += `<li>${selector}: ${issue}</li>`;\n      });\n\n    if (issueCount > 5) {\n      reportHTML += `<li>... and ${issueCount - 5} more</li>`;\n    }\n\n    reportHTML += `</ul>`;\n  }\n\n  accessibilityEl.innerHTML = reportHTML;\n};\n\n// New function: Extract semantic structure automatically\nconst extractSemanticStructure = (): void => {\n  if (!isActivated()) return;\n\n  const pageInfo: Partial<PageStructure> = {\n    title: document.title,\n    navigation: [],\n    sidebar: [],\n  };\n\n  // Detect main content\n  const mainContent =\n    document.querySelector('main') ||\n    document.querySelector('[role=\"main\"]') ||\n    document.querySelector('#main');\n\n  if (mainContent) {\n    pageInfo.mainContent = getUniqueSelector(mainContent as HTMLElement);\n  }\n\n  // Detect navigation\n  const navElements = document.querySelectorAll(\n    'nav, [role=\"navigation\"], header ul, .nav, .navbar',\n  );\n  navElements.forEach(nav => {\n    if (Array.isArray(pageInfo.navigation)) {\n      pageInfo.navigation.push(getUniqueSelector(nav as HTMLElement));\n    }\n  });\n\n  // Detect footer\n  const footer =\n    document.querySelector('footer') ||\n    document.querySelector('.footer') ||\n    document.querySelector('#footer');\n  if (footer) {\n    pageInfo.footer = getUniqueSelector(footer as HTMLElement);\n  }\n\n  // Detect sidebars\n  const sidebars = document.querySelectorAll('aside, .sidebar, [role=\"complementary\"]');\n  sidebars.forEach(sidebar => {\n    if (Array.isArray(pageInfo.sidebar)) {\n      pageInfo.sidebar.push(getUniqueSelector(sidebar as HTMLElement));\n    }\n  });\n\n  // Apply the structure\n  describePage(pageInfo);\n\n  // Also process headings for hierarchy\n  const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');\n  headings.forEach(heading => {\n    const level = parseInt(heading.tagName.charAt(1));\n    const text = heading.textContent || '';\n    const selector = getUniqueSelector(heading as HTMLElement);\n\n    describeElementVisually(selector, `Heading: ${text}`, heading.tagName.toLowerCase(), {\n      role: 'heading-level-' + level,\n      importance: level <= 2 ? 'primary' : level <= 4 ? 'secondary' : 'tertiary',\n    });\n  });\n};\n\n// New function: Highlight element with its semantic role\nconst highlightElementRole = (selector: string, role: string): void => {\n  if (!isActivated()) return;\n\n  const element = document.querySelector(selector);\n  if (!element) {\n    logMessage(`Element not found: ${selector}`);\n    return;\n  }\n\n  // If already optimized, add role to existing element\n  const optimizedElement = element.closest('.wao-optimized-element');\n  if (optimizedElement) {\n    let roleElement = optimizedElement.querySelector('.wao-role');\n\n    if (!roleElement) {\n      roleElement = document.createElement('span');\n      roleElement.className = 'wao-role';\n      optimizedElement.appendChild(roleElement);\n    }\n\n    (roleElement as HTMLElement).textContent = role;\n    return;\n  }\n\n  // Otherwise, create a minimal wrapper with just the role\n  const wrapper = document.createElement('div');\n  wrapper.className = 'wao-optimized-element';\n  wrapper.setAttribute('data-original-selector', selector);\n\n  const roleElement = document.createElement('span');\n  roleElement.className = 'wao-role';\n  roleElement.textContent = role;\n\n  // Clone the original element as a child of the wrapper\n  const clonedElement = element.cloneNode(true);\n\n  wrapper.appendChild(roleElement);\n  wrapper.appendChild(clonedElement);\n\n  // Replace original with wrapper\n  element.parentNode?.replaceChild(wrapper, element);\n\n  // Store for reversion\n  pageState.optimizedElements.push({\n    selector,\n    description: `Element with role: ${role}`,\n    originalHTML: element.outerHTML,\n    role,\n  });\n};\n\n// Helper function: Generate a unique CSS selector for an element\nconst getUniqueSelector = (element: HTMLElement): string => {\n  if (element.id) {\n    return `#${element.id}`;\n  }\n\n  // Try using classes\n  if (element.className && typeof element.className === 'string') {\n    const classes = element.className.trim().split(/\\s+/);\n    if (classes.length > 0) {\n      const selector = `.${classes.join('.')}`;\n      if (document.querySelectorAll(selector).length === 1) {\n        return selector;\n      }\n    }\n  }\n\n  // Fallback to tag name and position\n  const sameTagElements = Array.from(document.querySelectorAll(element.tagName));\n  const index = sameTagElements.indexOf(element);\n  return `${element.tagName.toLowerCase()}:nth-of-type(${index + 1})`;\n};\n\n// Initialize the library\nconst initialize = (): void => {\n  injectActivationInstructions();\n\n  // Check if the body already has the activation attribute\n  if (document.body.getAttribute('data-wao-active') === 'true') {\n    activateOptimizer(document.body);\n  }\n\n  // Expose API globally\n  window.WAO = {\n    activateOptimizer,\n    deactivateOptimizer,\n    describeElementVisually,\n    defineInteraction,\n    isActivated,\n    describePage,\n    describeDataFlow,\n    analyzeAccessibility,\n    extractSemanticStructure,\n    highlightElementRole,\n  };\n};\n\n// Run initialization\ninitialize();\n\n// Export public API\nexport {\n  activateOptimizer,\n  deactivateOptimizer,\n  describeElementVisually,\n  defineInteraction,\n  revertElementVisuals,\n  describePage,\n  describeDataFlow,\n  analyzeAccessibility,\n  extractSemanticStructure,\n  highlightElementRole,\n};\n"],"mappings":"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","names":["logMessage","message","createDOMComment","pageState","injectStyles","styleElement","injectActivationInstructions","comment","createDOMComment","mutations","mutation","bodyElement","isActive","activateOptimizer","deactivateOptimizer","isActivated","domElement","logMessage","addToggle","setupEventListeners","revertElementVisuals","toggleButton","removeEventListeners","defineInteraction","elementSelector","interactionType","methodName","expectedOutcome","mapping","element","optimizedElement","interactionElement","interactionText","handleInteraction","event","target","matchedElement","method","error","existingButton","describeElementVisually","selector","description","elementType","options","wrapper","descriptionElement","dataContextEl","tagElement","roleElement","elementDescription","tempContainer","originalElement","describePage","pageInfo","structureEl","structureHTML","mainEl","nav","navEl","side","sideEl","footerEl","describeDataFlow","flow","sourceEl","destEl","flowContainer","analyzeAccessibility","accessibilityInfo","elemNode","getUniqueSelector","ariaLabel","ariaLabelledBy","accessibilityEl","reportHTML","issueCount","issue","extractSemanticStructure","mainContent","footer","sidebar","heading","level","text","highlightElementRole","role","clonedElement","classes","index","initialize"]}