{"version":3,"file":"dom-tools-BfYL7rmo.cjs","sources":["../../lib/vowel/platforms/generic/snapshot.ts","../../lib/vowel/platforms/generic/dom-search.ts","../../lib/vowel/platforms/generic/dom-tools.ts"],"sourcesContent":["/**\n * Browser-compatible implementation of Playwright's _snapshotForAI function chain\n * Extracts a complete TypeScript implementation that can work in a browser environment\n */\n\n// ============================================================================\n// TYPES AND INTERFACES\n// ============================================================================\n\nexport type AriaRole = 'alert' | 'alertdialog' | 'application' | 'article' | 'banner' | 'blockquote' | 'button' | 'caption' | 'cell' | 'checkbox' | 'code' | 'columnheader' | 'combobox' |\n  'complementary' | 'contentinfo' | 'definition' | 'deletion' | 'dialog' | 'directory' | 'document' | 'emphasis' | 'feed' | 'figure' | 'form' | 'generic' | 'grid' |\n  'gridcell' | 'group' | 'heading' | 'img' | 'insertion' | 'link' | 'list' | 'listbox' | 'listitem' | 'log' | 'main' | 'mark' | 'marquee' | 'math' | 'meter' | 'menu' |\n  'menubar' | 'menuitem' | 'menuitemcheckbox' | 'menuitemradio' | 'navigation' | 'none' | 'note' | 'option' | 'paragraph' | 'presentation' | 'progressbar' | 'radio' | 'radiogroup' |\n  'region' | 'row' | 'rowgroup' | 'rowheader' | 'scrollbar' | 'search' | 'searchbox' | 'separator' | 'slider' |\n  'spinbutton' | 'status' | 'strong' | 'subscript' | 'superscript' | 'switch' | 'tab' | 'table' | 'tablist' | 'tabpanel' | 'term' | 'textbox' | 'time' | 'timer' |\n  'toolbar' | 'tooltip' | 'tree' | 'treegrid' | 'treeitem';\n\nexport type AriaProps = {\n  checked?: boolean | 'mixed';\n  disabled?: boolean;\n  expanded?: boolean;\n  active?: boolean;\n  level?: number;\n  pressed?: boolean | 'mixed';\n  selected?: boolean;\n};\n\nexport type AriaRegex = { pattern: string };\n\nexport type AriaTextValue = {\n  raw: string;\n  normalized: string;\n};\n\nexport type AriaTemplateTextNode = {\n  kind: 'text';\n  text: AriaTextValue;\n};\n\nexport type AriaTemplateRoleNode = AriaProps & {\n  kind: 'role';\n  role: AriaRole | 'fragment';\n  name?: AriaRegex | string;\n  children?: AriaTemplateNode[];\n  props?: Record<string, AriaTextValue>;\n  containerMode?: 'contain' | 'equal' | 'deep-equal';\n};\n\nexport type AriaTemplateNode = AriaTemplateRoleNode | AriaTemplateTextNode;\n\nexport type AriaNode = AriaProps & {\n  role: AriaRole | 'fragment' | 'iframe';\n  name: string;\n  ref?: string;\n  children: (AriaNode | string)[];\n  element: Element;\n  box: Box;\n  receivesPointerEvents: boolean;\n  props: Record<string, string>;\n};\n\nexport type AriaSnapshot = {\n  root: AriaNode;\n  elements: Map<string, Element>;\n  refs: Map<Element, string>;\n};\n\nexport type AriaTreeOptions = {\n  mode: 'ai' | 'expect' | 'codegen' | 'autoexpect';\n  refPrefix?: string;\n};\n\ntype Box = {\n  visible: boolean;\n  inline: boolean;\n  rect?: DOMRect;\n  cursor?: string;\n};\n\ntype InternalOptions = {\n  visibility: 'aria' | 'ariaOrVisible' | 'ariaAndVisible';\n  refs: 'all' | 'interactable' | 'none';\n  refPrefix?: string;\n  includeGenericRole?: boolean;\n  renderCursorPointer?: boolean;\n  renderActive?: boolean;\n  renderStringsAsRegex?: boolean;\n};\n\n// ============================================================================\n// UTILITY FUNCTIONS\n// ============================================================================\n\n// From stringUtils.ts\nexport function escapeRegExp(s: string): string {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function normalizeWhiteSpace(text: string): string {\n  return text.replace(/[\\u200b\\u00ad]/g, '').trim().replace(/\\s+/g, ' ');\n}\n\nexport function longestCommonSubstring(s1: string, s2: string): string {\n  const n = s1.length;\n  const m = s2.length;\n  let maxLen = 0;\n  let endingIndex = 0;\n\n  const dp = Array(n + 1)\n    .fill(null)\n    .map(() => Array(m + 1).fill(0));\n\n  for (let i = 1; i <= n; i++) {\n    for (let j = 1; j <= m; j++) {\n      if (s1[i - 1] === s2[j - 1]) {\n        dp[i][j] = dp[i - 1][j - 1] + 1;\n\n        if (dp[i][j] > maxLen) {\n          maxLen = dp[i][j];\n          endingIndex = i;\n        }\n      }\n    }\n  }\n\n  return s1.substring(endingIndex - maxLen, endingIndex);\n}\n\n// From yaml.ts\nexport function yamlEscapeKeyIfNeeded(str: string): string {\n  if (!yamlStringNeedsQuotes(str))\n    return str;\n  return `'` + str.replace(/'/g, `''`) + `'`;\n}\n\nexport function yamlEscapeValueIfNeeded(str: string): string {\n  if (!yamlStringNeedsQuotes(str))\n    return str;\n  return '\"' + str.replace(/[\\\\\"\\x00-\\x1f\\x7f-\\x9f]/g, c => {\n    switch (c) {\n      case '\\\\':\n        return '\\\\\\\\';\n      case '\"':\n        return '\\\\\"';\n      case '\\b':\n        return '\\\\b';\n      case '\\f':\n        return '\\\\f';\n      case '\\n':\n        return '\\\\n';\n      case '\\r':\n        return '\\\\r';\n      case '\\t':\n        return '\\\\t';\n      default:\n        const code = c.charCodeAt(0);\n        return '\\\\x' + code.toString(16).padStart(2, '0');\n    }\n  }) + '\"';\n}\n\nfunction yamlStringNeedsQuotes(str: string): boolean {\n  if (str.length === 0)\n    return true;\n\n  if (/^\\s|\\s$/.test(str))\n    return true;\n\n  if (/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f-\\x9f]/.test(str))\n    return true;\n\n  if (/^-/.test(str))\n    return true;\n\n  if (/[\\n:](\\s|$)/.test(str))\n    return true;\n\n  if (/\\s#/.test(str))\n    return true;\n\n  if (/[\\n\\r]/.test(str))\n    return true;\n\n  if (/^[&*\\],?!>|@\"'#%]/.test(str))\n    return true;\n\n  if (/[{}`]/.test(str))\n    return true;\n\n  if (/^\\[/.test(str))\n    return true;\n\n  if (!isNaN(Number(str)) || ['y', 'n', 'yes', 'no', 'true', 'false', 'on', 'off', 'null'].includes(str.toLowerCase()))\n    return true;\n\n  return false;\n}\n\n// From domUtils.ts\nexport function computeBox(element: Element): Box {\n  const style = getElementComputedStyle(element);\n  if (!style)\n    return { visible: true, inline: false };\n  const cursor = style.cursor;\n  if (style.display === 'contents') {\n    for (let child = element.firstChild; child; child = child.nextSibling) {\n      if (child.nodeType === 1 /* Node.ELEMENT_NODE */ && isElementVisible(child as Element))\n        return { visible: true, inline: false, cursor };\n      if (child.nodeType === 3 /* Node.TEXT_NODE */ && isVisibleTextNode(child as Text))\n        return { visible: true, inline: true, cursor };\n    }\n    return { visible: false, inline: false, cursor };\n  }\n  if (!isElementStyleVisibilityVisible(element, style))\n    return { cursor, visible: false, inline: false };\n  const rect = element.getBoundingClientRect();\n  return { rect, cursor, visible: rect.width > 0 && rect.height > 0, inline: style.display === 'inline' };\n}\n\nexport function isElementVisible(element: Element): boolean {\n  return computeBox(element).visible;\n}\n\nfunction isVisibleTextNode(node: Text): boolean {\n  const range = node.ownerDocument.createRange();\n  range.selectNode(node);\n  const rect = range.getBoundingClientRect();\n  return rect.width > 0 && rect.height > 0;\n}\n\nfunction isElementStyleVisibilityVisible(element: Element, style?: CSSStyleDeclaration): boolean {\n  style = style ?? getElementComputedStyle(element);\n  if (!style)\n    return true;\n\n  if (typeof Element.prototype.checkVisibility === 'function') {\n    if (!element.checkVisibility())\n      return false;\n  } else {\n    // Fallback for browsers that don't support checkVisibility\n    if (style.visibility === 'hidden' || style.visibility === 'collapse')\n      return false;\n    if (style.display === 'none')\n      return false;\n    if (style.opacity === '0')\n      return false;\n  }\n\n  const rect = element.getBoundingClientRect();\n  if (rect.width === 0 && rect.height === 0 && style.overflow === 'hidden')\n    return false;\n\n  return true;\n}\n\nfunction getElementComputedStyle(element: Element, pseudo?: string): CSSStyleDeclaration | undefined {\n  const style = element.ownerDocument && element.ownerDocument.defaultView ? element.ownerDocument.defaultView.getComputedStyle(element, pseudo) : undefined;\n  return style;\n}\n\nfunction parentElementOrShadowHost(element: Element): Element | undefined {\n  if (element.parentElement)\n    return element.parentElement;\n  if (!element.parentNode)\n    return;\n  if (element.parentNode.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ && (element.parentNode as ShadowRoot).host)\n    return (element.parentNode as ShadowRoot).host;\n}\n\n// ============================================================================\n// ROLE UTILITIES (simplified version for browser compatibility)\n// ============================================================================\n\nconst kAriaCheckedRoles = ['checkbox', 'menuitemcheckbox', 'option', 'radio', 'switch', 'menuitemradio', 'treeitem'];\nconst kAriaDisabledRoles = ['button', 'checkbox', 'columnheader', 'combobox', 'gridcell', 'link', 'listbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'rowheader', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab', 'textbox', 'treeitem'];\nconst kAriaExpandedRoles = ['button', 'checkbox', 'columnheader', 'combobox', 'gridcell', 'link', 'listbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'row', 'rowheader', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab', 'treeitem'];\nconst kAriaLevelRoles = ['heading', 'listitem', 'row', 'treeitem'];\nconst kAriaPressedRoles = ['button'];\nconst kAriaSelectedRoles = ['gridcell', 'option', 'row', 'tab', 'treeitem'];\n\nfunction getAriaRole(element: Element): AriaRole | null {\n  const explicitRole = element.getAttribute('role');\n  if (explicitRole)\n    return explicitRole as AriaRole;\n\n  const tagName = element.tagName.toLowerCase();\n\n  // Basic role mappings\n  switch (tagName) {\n    case 'a': return element.hasAttribute('href') ? 'link' : null;\n    case 'article': return 'article';\n    case 'aside': return 'complementary';\n    case 'body': return 'document';\n    case 'button': return 'button';\n    case 'datalist': return 'listbox';\n    case 'dd': return 'definition';\n    case 'details': return 'group';\n    case 'dialog': return 'dialog';\n    case 'dl': return 'list';\n    case 'dt': return 'term';\n    case 'fieldset': return 'group';\n    case 'figure': return 'figure';\n    case 'footer': return element.closest('article, aside, main, nav, section') ? null : 'contentinfo';\n    case 'form': return 'form';\n    case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6': return 'heading';\n    case 'header': return element.closest('article, aside, main, nav, section') ? null : 'banner';\n    case 'hr': return 'separator';\n    case 'img': return element.getAttribute('alt') ? 'img' : null;\n    case 'input': {\n      const type = element.getAttribute('type') || 'text';\n      switch (type) {\n        case 'button': case 'submit': case 'reset': case 'image': return 'button';\n        case 'checkbox': return 'checkbox';\n        case 'radio': return 'radio';\n        case 'range': return 'slider';\n        case 'number': return 'spinbutton';\n        case 'search': return 'searchbox';\n        case 'email': case 'tel': case 'text': case 'url': return element.getAttribute('list') ? 'combobox' : 'textbox';\n        case 'hidden': return null;\n        default: return 'textbox';\n      }\n    }\n    case 'li': return 'listitem';\n    case 'main': return 'main';\n    case 'menu': return 'list';\n    case 'meter': return 'progressbar';\n    case 'nav': return 'navigation';\n    case 'ol': case 'ul': return 'list';\n    case 'optgroup': return 'group';\n    case 'option': return 'option';\n    case 'output': return 'status';\n    case 'progress': return 'progressbar';\n    case 'section': return 'region';\n    case 'select': return element.hasAttribute('multiple') || parseInt(element.getAttribute('size') || '1') > 1 ? 'listbox' : 'combobox';\n    case 'summary': return 'button';\n    case 'table': return 'table';\n    case 'tbody': return 'rowgroup';\n    case 'td': return 'gridcell';\n    case 'textarea': return 'textbox';\n    case 'tfoot': return 'rowgroup';\n    case 'th': return 'columnheader';\n    case 'thead': return 'rowgroup';\n    case 'tr': return 'row';\n    default: return null;\n  }\n}\n\nfunction isElementHiddenForAria(element: Element): boolean {\n  if (element.getAttribute('aria-hidden') === 'true')\n    return true;\n\n  const style = getElementComputedStyle(element);\n  if (!style)\n    return false;\n\n  if (style.display === 'none')\n    return true;\n\n  // Check if element is inside a hidden parent\n  let parent = parentElementOrShadowHost(element);\n  while (parent) {\n    const parentStyle = getElementComputedStyle(parent);\n    if (parentStyle?.display === 'none')\n      return true;\n    parent = parentElementOrShadowHost(parent);\n  }\n\n  return false;\n}\n\nfunction getAriaChecked(element: Element): boolean | 'mixed' {\n  const checked = element.getAttribute('aria-checked');\n  if (checked === 'true') return true;\n  if (checked === 'false') return false;\n  if (checked === 'mixed') return 'mixed';\n\n  if (element instanceof HTMLInputElement && (element.type === 'checkbox' || element.type === 'radio')) {\n    return element.indeterminate ? 'mixed' : element.checked;\n  }\n\n  return false;\n}\n\nfunction getAriaDisabled(element: Element): boolean {\n  const disabled = element.getAttribute('aria-disabled');\n  if (disabled === 'true') return true;\n  if (disabled === 'false') return false;\n\n  if (element instanceof HTMLElement && element.hasAttribute('disabled'))\n    return true;\n\n  return false;\n}\n\nfunction getAriaExpanded(element: Element): boolean {\n  const expanded = element.getAttribute('aria-expanded');\n  if (expanded === 'true') return true;\n  if (expanded === 'false') return false;\n\n  if (element instanceof HTMLDetailsElement)\n    return element.open;\n\n  return false;\n}\n\nfunction getAriaLevel(element: Element): number | undefined {\n  const level = element.getAttribute('aria-level');\n  if (level) {\n    const parsed = parseInt(level, 10);\n    if (!isNaN(parsed)) return parsed;\n  }\n\n  if (element.tagName.match(/^h[1-6]$/i)) {\n    return parseInt(element.tagName.charAt(1), 10);\n  }\n\n  return undefined;\n}\n\nfunction getAriaPressed(element: Element): boolean | 'mixed' {\n  const pressed = element.getAttribute('aria-pressed');\n  if (pressed === 'true') return true;\n  if (pressed === 'false') return false;\n  if (pressed === 'mixed') return 'mixed';\n\n  return false;\n}\n\nfunction getAriaSelected(element: Element): boolean {\n  const selected = element.getAttribute('aria-selected');\n  if (selected === 'true') return true;\n  if (selected === 'false') return false;\n\n  if (element instanceof HTMLOptionElement)\n    return element.selected;\n\n  return false;\n}\n\nfunction getElementAccessibleName(element: Element, _includeHidden: boolean): string {\n  // Simplified implementation - in a real browser environment,\n  // this would need to follow the full WAI-ARIA accessible name computation\n  if (element.getAttribute('aria-label'))\n    return element.getAttribute('aria-label')!;\n\n  if (element.getAttribute('aria-labelledby')) {\n    const ids = element.getAttribute('aria-labelledby')!.split(/\\s+/);\n    const labels = ids.map(id => {\n      const labelElement = element.ownerDocument.getElementById(id);\n      return labelElement?.textContent || '';\n    }).filter(Boolean);\n    if (labels.length > 0)\n      return labels.join(' ');\n  }\n\n  if (element instanceof HTMLInputElement && element.type === 'image' && element.alt)\n    return element.alt;\n\n  if (element instanceof HTMLImageElement && element.alt)\n    return element.alt;\n\n  if (element instanceof HTMLAreaElement && element.alt)\n    return element.alt;\n\n  // For form controls, use labels\n  if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement ||\n      element instanceof HTMLSelectElement) {\n    const labels = element.ownerDocument.querySelectorAll(`label[for=\"${element.id}\"]`);\n    if (labels.length > 0) {\n      return Array.from(labels).map(label => label.textContent || '').join(' ').trim();\n    }\n  }\n\n  // Use element text content as fallback\n  return element.textContent || '';\n}\n\nfunction receivesPointerEvents(element: Element): boolean {\n  const style = getElementComputedStyle(element);\n  if (!style) return true;\n\n  return style.pointerEvents !== 'none';\n}\n\nfunction getCSSContent(element: Element, pseudo: string): string {\n  const style = getElementComputedStyle(element, pseudo);\n  if (!style) return '';\n\n  const content = style.content;\n  if (content && content !== 'none' && content !== 'normal') {\n    // Remove quotes from content\n    return content.replace(/^[\"']|[\"']$/g, '');\n  }\n\n  return '';\n}\n\n// ============================================================================\n// ARIA SNAPSHOT IMPLEMENTATION\n// ============================================================================\n\nlet lastRef = 0;\n\nfunction toInternalOptions(options: AriaTreeOptions): InternalOptions {\n  if (options.mode === 'ai') {\n    return {\n      visibility: 'ariaOrVisible',\n      refs: 'interactable',\n      refPrefix: options.refPrefix,\n      includeGenericRole: true,\n      renderActive: true,\n      renderCursorPointer: true,\n    };\n  }\n  if (options.mode === 'autoexpect') {\n    return { visibility: 'ariaAndVisible', refs: 'none' };\n  }\n  if (options.mode === 'codegen') {\n    return { visibility: 'aria', refs: 'none', renderStringsAsRegex: true };\n  }\n  return { visibility: 'aria', refs: 'none' };\n}\n\nfunction computeAriaRef(ariaNode: AriaNode, options: InternalOptions) {\n  if (options.refs === 'none')\n    return;\n  if (options.refs === 'interactable' && (!ariaNode.box.visible || !ariaNode.receivesPointerEvents))\n    return;\n\n  let ariaRef: { role: string; name: string; ref: string };\n  const existingRef = (ariaNode.element as any)._ariaRef;\n  if (!existingRef || existingRef.role !== ariaNode.role || existingRef.name !== ariaNode.name) {\n    ariaRef = { role: ariaNode.role, name: ariaNode.name, ref: (options.refPrefix ?? '') + 'e' + (++lastRef) };\n    (ariaNode.element as any)._ariaRef = ariaRef;\n  } else {\n    ariaRef = existingRef;\n  }\n  ariaNode.ref = ariaRef.ref;\n}\n\nfunction toAriaNode(element: Element, options: InternalOptions): AriaNode | null {\n  const active = element.ownerDocument.activeElement === element;\n  if (element.nodeName === 'IFRAME') {\n    const ariaNode: AriaNode = {\n      role: 'iframe',\n      name: '',\n      children: [],\n      props: {},\n      element,\n      box: computeBox(element),\n      receivesPointerEvents: true,\n      active\n    };\n    computeAriaRef(ariaNode, options);\n    return ariaNode;\n  }\n\n  const defaultRole = options.includeGenericRole ? 'generic' : null;\n  const role = getAriaRole(element) ?? defaultRole;\n  if (!role || role === 'presentation' || role === 'none')\n    return null;\n\n  const name = normalizeWhiteSpace(getElementAccessibleName(element, false) || '');\n  const receivesPointerEventsFlag = receivesPointerEvents(element);\n\n  const box = computeBox(element);\n  if (role === 'generic' && box.inline && element.childNodes.length === 1 && element.childNodes[0].nodeType === Node.TEXT_NODE)\n    return null;\n\n  const result: AriaNode = {\n    role,\n    name,\n    children: [],\n    props: {},\n    element,\n    box,\n    receivesPointerEvents: receivesPointerEventsFlag,\n    active\n  };\n  computeAriaRef(result, options);\n\n  if (kAriaCheckedRoles.includes(role))\n    result.checked = getAriaChecked(element);\n\n  if (kAriaDisabledRoles.includes(role))\n    result.disabled = getAriaDisabled(element);\n\n  if (kAriaExpandedRoles.includes(role))\n    result.expanded = getAriaExpanded(element);\n\n  if (kAriaLevelRoles.includes(role))\n    result.level = getAriaLevel(element);\n\n  if (kAriaPressedRoles.includes(role))\n    result.pressed = getAriaPressed(element);\n\n  if (kAriaSelectedRoles.includes(role))\n    result.selected = getAriaSelected(element);\n\n  if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {\n    if (element.type !== 'checkbox' && element.type !== 'radio' && element.type !== 'file')\n      result.children = [element.value];\n  }\n\n  return result;\n}\n\nfunction normalizeGenericRoles(node: AriaNode) {\n  const normalizeChildren = (node: AriaNode) => {\n    const result: (AriaNode | string)[] = [];\n    for (const child of node.children || []) {\n      if (typeof child === 'string') {\n        result.push(child);\n        continue;\n      }\n      const normalized = normalizeChildren(child);\n      result.push(...normalized);\n    }\n\n    const removeSelf = node.role === 'generic' && !node.name && result.length <= 1 && result.every(c => typeof c !== 'string' && !!c.ref);\n    if (removeSelf)\n      return result;\n    node.children = result;\n    return [node];\n  };\n\n  normalizeChildren(node);\n}\n\nfunction normalizeStringChildren(rootA11yNode: AriaNode) {\n  const flushChildren = (buffer: string[], normalizedChildren: (AriaNode | string)[]) => {\n    if (!buffer.length)\n      return;\n    const text = normalizeWhiteSpace(buffer.join(''));\n    if (text)\n      normalizedChildren.push(text);\n    buffer.length = 0;\n  };\n\n  const visit = (ariaNode: AriaNode) => {\n    const normalizedChildren: (AriaNode | string)[] = [];\n    const buffer: string[] = [];\n    for (const child of ariaNode.children || []) {\n      if (typeof child === 'string') {\n        buffer.push(child);\n      } else {\n        flushChildren(buffer, normalizedChildren);\n        visit(child);\n        normalizedChildren.push(child);\n      }\n    }\n    flushChildren(buffer, normalizedChildren);\n    ariaNode.children = normalizedChildren.length ? normalizedChildren : [];\n    if (ariaNode.children.length === 1 && ariaNode.children[0] === ariaNode.name)\n      ariaNode.children = [];\n  };\n  visit(rootA11yNode);\n}\n\nfunction convertToBestGuessRegex(text: string): string {\n  const dynamicContent = [\n    { regex: /\\b[\\d,.]+[bkmBKM]+\\b/, replacement: '[\\\\d,.]+[bkmBKM]+' },\n    { regex: /\\b\\d+[hmsp]+\\b/, replacement: '\\\\d+[hmsp]+' },\n    { regex: /\\b[\\d,.]+[hmsp]+\\b/, replacement: '[\\\\d,.]+[hmsp]+' },\n    { regex: /\\b\\d+,\\d+\\b/, replacement: '\\\\d+,\\\\d+' },\n    { regex: /\\b\\d+\\.\\d{2,}\\b/, replacement: '\\\\d+\\\\.\\\\d+' },\n    { regex: /\\b\\d+\\.\\d+\\b/, replacement: '\\\\d+\\\\.\\\\d+' },\n    { regex: /\\b\\d{2,}\\b/, replacement: '\\\\d+' },\n  ];\n\n  let pattern = '';\n  let lastIndex = 0;\n\n  const combinedRegex = new RegExp(dynamicContent.map(r => '(' + r.regex.source + ')').join('|'), 'g');\n  text.replace(combinedRegex, (match, ...args) => {\n    const offset = args[args.length - 2];\n    const groups = args.slice(0, -2);\n    pattern += escapeRegExp(text.slice(lastIndex, offset));\n    for (let i = 0; i < groups.length; i++) {\n      if (groups[i]) {\n        const { replacement } = dynamicContent[i];\n        pattern += replacement;\n        break;\n      }\n    }\n    lastIndex = offset + match.length;\n    return match;\n  });\n  if (!pattern)\n    return text;\n\n  pattern += escapeRegExp(text.slice(lastIndex));\n  return String(new RegExp(pattern));\n}\n\nfunction textContributesInfo(node: AriaNode, text: string): boolean {\n  if (!text.length)\n    return false;\n\n  if (!node.name)\n    return true;\n\n  if (node.name.length > text.length)\n    return false;\n\n  const substr = (text.length <= 200 && node.name.length <= 200) ? longestCommonSubstring(text, node.name) : '';\n  let filtered = text;\n  while (substr && filtered.includes(substr))\n    filtered = filtered.replace(substr, '');\n  return filtered.trim().length / text.length > 0.1;\n}\n\nfunction hasPointerCursor(ariaNode: AriaNode): boolean {\n  return ariaNode.box.cursor === 'pointer';\n}\n\nfunction buildByRefMap(root: AriaNode | undefined, map: Map<string, AriaNode> = new Map()): Map<string, AriaNode> {\n  if (root?.ref)\n    map.set(root.ref, root);\n  for (const child of root?.children || []) {\n    if (typeof child !== 'string')\n      buildByRefMap(child, map);\n  }\n  return map;\n}\n\nfunction arePropsEqual(a: AriaNode, b: AriaNode): boolean {\n  const aKeys = Object.keys(a.props);\n  const bKeys = Object.keys(b.props);\n  return aKeys.length === bKeys.length && aKeys.every(k => a.props[k] === b.props[k]);\n}\n\nexport function generateAriaTree(rootElement: Element, publicOptions: AriaTreeOptions): AriaSnapshot {\n  const options = toInternalOptions(publicOptions);\n  const visited = new Set<Node>();\n\n  const snapshot: AriaSnapshot = {\n    root: { role: 'fragment', name: '', children: [], element: rootElement, props: {}, box: computeBox(rootElement), receivesPointerEvents: true },\n    elements: new Map<string, Element>(),\n    refs: new Map<Element, string>(),\n  };\n\n  const visit = (ariaNode: AriaNode, node: Node, parentElementVisible: boolean) => {\n    if (visited.has(node))\n      return;\n    visited.add(node);\n\n    if (node.nodeType === Node.TEXT_NODE && node.nodeValue) {\n      if (!parentElementVisible)\n        return;\n\n      const text = node.nodeValue;\n      if (ariaNode.role !== 'textbox' && text)\n        ariaNode.children.push(node.nodeValue || '');\n      return;\n    }\n\n    if (node.nodeType !== Node.ELEMENT_NODE)\n      return;\n\n    const element = node as Element;\n    const isElementVisibleForAria = !isElementHiddenForAria(element);\n    let visible = isElementVisibleForAria;\n    if (options.visibility === 'ariaOrVisible')\n      visible = isElementVisibleForAria || isElementVisible(element);\n    if (options.visibility === 'ariaAndVisible')\n      visible = isElementVisibleForAria && isElementVisible(element);\n\n    if (options.visibility === 'aria' && !visible)\n      return;\n\n    const ariaChildren: Element[] = [];\n    if (element.hasAttribute('aria-owns')) {\n      const ids = element.getAttribute('aria-owns')!.split(/\\s+/);\n      for (const id of ids) {\n        const ownedElement = rootElement.ownerDocument.getElementById(id);\n        if (ownedElement)\n          ariaChildren.push(ownedElement);\n      }\n    }\n\n    const childAriaNode = visible ? toAriaNode(element, options) : null;\n    if (childAriaNode) {\n      if (childAriaNode.ref) {\n        snapshot.elements.set(childAriaNode.ref, element);\n        snapshot.refs.set(element, childAriaNode.ref);\n      }\n      ariaNode.children.push(childAriaNode);\n    }\n    processElement(childAriaNode || ariaNode, element, ariaChildren, visible);\n  };\n\n  function processElement(ariaNode: AriaNode, element: Element, ariaChildren: Element[], parentElementVisible: boolean) {\n    const display = getElementComputedStyle(element)?.display || 'inline';\n    const treatAsBlock = (display !== 'inline' || element.nodeName === 'BR') ? ' ' : '';\n    if (treatAsBlock)\n      ariaNode.children.push(treatAsBlock);\n\n    ariaNode.children.push(getCSSContent(element, '::before') || '');\n    const assignedNodes = element.nodeName === 'SLOT' ? (element as HTMLSlotElement).assignedNodes() : [];\n    if (assignedNodes.length) {\n      for (const child of assignedNodes)\n        visit(ariaNode, child, parentElementVisible);\n    } else {\n      for (let child = element.firstChild; child; child = child.nextSibling) {\n        if (!(child as Element | Text).assignedSlot)\n          visit(ariaNode, child, parentElementVisible);\n      }\n      if (element.shadowRoot) {\n        for (let child = element.shadowRoot.firstChild; child; child = child.nextSibling)\n          visit(ariaNode, child, parentElementVisible);\n      }\n    }\n\n    for (const child of ariaChildren)\n      visit(ariaNode, child, parentElementVisible);\n\n    ariaNode.children.push(getCSSContent(element, '::after') || '');\n\n    if (treatAsBlock)\n      ariaNode.children.push(treatAsBlock);\n\n    if (ariaNode.children.length === 1 && ariaNode.name === ariaNode.children[0])\n      ariaNode.children = [];\n\n    if (ariaNode.role === 'link' && element.hasAttribute('href')) {\n      const href = element.getAttribute('href')!;\n      ariaNode.props['url'] = href;\n    }\n\n    if (ariaNode.role === 'textbox' && element.hasAttribute('placeholder') && element.getAttribute('placeholder') !== ariaNode.name) {\n      const placeholder = element.getAttribute('placeholder')!;\n      ariaNode.props['placeholder'] = placeholder;\n    }\n  }\n\n  visit(snapshot.root, rootElement, true);\n  normalizeStringChildren(snapshot.root);\n  normalizeGenericRoles(snapshot.root);\n  return snapshot;\n}\n\nexport function renderAriaTree(ariaSnapshot: AriaSnapshot, publicOptions: AriaTreeOptions, previous?: AriaSnapshot): string {\n  const options = toInternalOptions(publicOptions);\n  const lines: string[] = [];\n  const includeText = options.renderStringsAsRegex ? textContributesInfo : () => true;\n  const renderString = options.renderStringsAsRegex ? convertToBestGuessRegex : (str: string) => str;\n  const previousByRef = buildByRefMap(previous?.root);\n\n  const visitText = (text: string, indent: string) => {\n    const escaped = yamlEscapeValueIfNeeded(renderString(text));\n    if (escaped)\n      lines.push(indent + '- text: ' + escaped);\n  };\n\n  const createKey = (ariaNode: AriaNode, renderCursorPointer: boolean): string => {\n    let key = ariaNode.role;\n    if (ariaNode.name && ariaNode.name.length <= 900) {\n      const name = renderString(ariaNode.name);\n      if (name) {\n        const stringifiedName = name.startsWith('/') && name.endsWith('/') ? name : JSON.stringify(name);\n        key += ' ' + stringifiedName;\n      }\n    }\n    if (ariaNode.checked === 'mixed')\n      key += ` [checked=mixed]`;\n    if (ariaNode.checked === true)\n      key += ` [checked]`;\n    if (ariaNode.disabled)\n      key += ` [disabled]`;\n    if (ariaNode.expanded)\n      key += ` [expanded]`;\n    if (ariaNode.active && options.renderActive)\n      key += ` [active]`;\n    if (ariaNode.level)\n      key += ` [level=${ariaNode.level}]`;\n    if (ariaNode.pressed === 'mixed')\n      key += ` [pressed=mixed]`;\n    if (ariaNode.pressed === true)\n      key += ` [pressed]`;\n    if (ariaNode.selected === true)\n      key += ` [selected]`;\n\n    if (ariaNode.ref) {\n      key += ` [ref=${ariaNode.ref}]`;\n      if (renderCursorPointer && hasPointerCursor(ariaNode))\n        key += ' [cursor=pointer]';\n    }\n    return key;\n  };\n\n  const getSingleInlinedTextChild = (ariaNode: AriaNode | undefined): string | undefined => {\n    return ariaNode?.children.length === 1 && typeof ariaNode.children[0] === 'string' && !Object.keys(ariaNode.props).length ? ariaNode.children[0] : undefined;\n  };\n\n  const visit = (ariaNode: AriaNode, indent: string, renderCursorPointer: boolean, previousNode: AriaNode | undefined): { unchanged: boolean } => {\n    if (ariaNode.ref)\n      previousNode = previousByRef.get(ariaNode.ref);\n\n    const linesBefore = lines.length;\n    const key = createKey(ariaNode, renderCursorPointer);\n    const escapedKey = indent + '- ' + yamlEscapeKeyIfNeeded(key);\n    const inCursorPointer = renderCursorPointer && !!ariaNode.ref && hasPointerCursor(ariaNode);\n    const singleInlinedTextChild = getSingleInlinedTextChild(ariaNode);\n\n    let unchanged = !!previousNode && key === createKey(previousNode, renderCursorPointer) && arePropsEqual(ariaNode, previousNode);\n\n    if (!ariaNode.children.length && !Object.keys(ariaNode.props).length) {\n      lines.push(escapedKey);\n    } else if (singleInlinedTextChild !== undefined) {\n      unchanged = unchanged && getSingleInlinedTextChild(previousNode) === singleInlinedTextChild;\n\n      const shouldInclude = includeText(ariaNode, singleInlinedTextChild);\n      if (shouldInclude)\n        lines.push(escapedKey + ': ' + yamlEscapeValueIfNeeded(renderString(singleInlinedTextChild)));\n      else\n        lines.push(escapedKey);\n    } else {\n      lines.push(escapedKey + ':');\n      for (const [name, value] of Object.entries(ariaNode.props))\n        lines.push(indent + '  - /' + name + ': ' + yamlEscapeValueIfNeeded(value));\n\n      unchanged = unchanged && previousNode?.children.length === ariaNode.children.length;\n\n      const childIndent = indent + '  ';\n      for (let childIndex = 0; childIndex < ariaNode.children.length; childIndex++) {\n        const child = ariaNode.children[childIndex];\n        if (typeof child === 'string') {\n          unchanged = unchanged && previousNode?.children[childIndex] === child;\n          if (includeText(ariaNode, child))\n            visitText(child, childIndent);\n        } else {\n          const previousChild = previousNode?.children[childIndex];\n          const childResult = visit(child, childIndent, renderCursorPointer && !inCursorPointer, typeof previousChild !== 'string' ? previousChild : undefined);\n          unchanged = unchanged && childResult.unchanged;\n        }\n      }\n    }\n\n    if (unchanged && ariaNode.ref) {\n      lines.splice(linesBefore);\n      lines.push(indent + `- ref=${ariaNode.ref} [unchanged]`);\n    }\n\n    return { unchanged };\n  };\n\n  const nodesToRender = ariaSnapshot.root.role === 'fragment' ? ariaSnapshot.root.children : [ariaSnapshot.root];\n  for (const nodeToRender of nodesToRender) {\n    if (typeof nodeToRender === 'string')\n      visitText(nodeToRender, '');\n    else\n      visit(nodeToRender, '', !!options.renderCursorPointer, undefined);\n  }\n  return lines.join('\\n');\n}\n\n// ============================================================================\n// MAIN SNAPSHOT FOR AI FUNCTION\n// ============================================================================\n\nexport type TimeoutOptions = {\n  timeout?: number;\n};\n\nexport type SnapshotForAIOptions = TimeoutOptions & {\n  track?: string;\n  mode?: 'full' | 'incremental';\n};\n\n/**\n * Main function that generates an AI-readable snapshot of a DOM element\n * This is the browser-compatible equivalent of Playwright's _snapshotForAI\n */\nexport function snapshotForAI(rootElement: Element, _options: SnapshotForAIOptions = {}): string {\n  const ariaSnapshot = generateAriaTree(rootElement, { mode: 'ai' });\n  return renderAriaTree(ariaSnapshot, { mode: 'ai' });\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { snapshotForAI as default };\n","/**\n * Smart DOM Search with Levenshtein Distance\n * \n * Searches elements by text, classes, aria-labels, values, etc.\n * Uses spoken-word IDs (e.g., \"apple_banana\") for easy interaction\n * IDs are deterministically generated from XPath for consistency\n */\n\nimport { snapshotForAI, generateAriaTree } from './snapshot';\n\n/**\n * Word list for generating spoken IDs (500 common, simple words)\n */\nconst WORD_LIST = [\n  'apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew', 'kiwi', 'lemon',\n  'mango', 'nectar', 'orange', 'papaya', 'quince', 'raspberry', 'strawberry', 'tangerine', 'ugli', 'vanilla',\n  'watermelon', 'apricot', 'berry', 'citrus', 'dragon', 'fruit', 'guava', 'huckleberry', 'iced', 'juice',\n  'kumquat', 'lime', 'melon', 'nectarine', 'olive', 'peach', 'plum', 'pear', 'raisin', 'star',\n  'tomato', 'avocado', 'beet', 'carrot', 'daikon', 'eggplant', 'fennel', 'garlic', 'herb', 'ice',\n  'jalapeno', 'kale', 'leek', 'mushroom', 'nut', 'onion', 'pepper', 'quinoa', 'radish', 'spinach',\n  'turnip', 'yam', 'zucchini', 'bread', 'cake', 'donut', 'egg', 'flour', 'grain', 'honey',\n  'jam', 'kernel', 'loaf', 'muffin', 'noodle', 'oat', 'pasta', 'rice', 'salt', 'toast',\n  'wheat', 'yeast', 'beef', 'chicken', 'duck', 'fish', 'goat', 'ham', 'jerky', 'lamb',\n  'meat', 'pork', 'quail', 'salmon', 'tuna', 'veal', 'bacon', 'butter', 'cheese', 'cream',\n  'dairy', 'gelato', 'ice', 'milk', 'yogurt', 'bean', 'celery', 'corn', 'lettuce', 'pea',\n  'squash', 'broccoli', 'cabbage', 'cucumber', 'green', 'pickle', 'salad', 'blue', 'red', 'green',\n  'yellow', 'purple', 'orange', 'pink', 'brown', 'black', 'white', 'gray', 'silver', 'gold',\n  'bronze', 'copper', 'iron', 'steel', 'wood', 'stone', 'rock', 'sand', 'clay', 'dirt',\n  'grass', 'leaf', 'tree', 'flower', 'rose', 'tulip', 'daisy', 'lily', 'orchid', 'violet',\n  'sun', 'moon', 'star', 'cloud', 'rain', 'snow', 'wind', 'storm', 'thunder', 'lightning',\n  'river', 'lake', 'ocean', 'sea', 'pond', 'stream', 'wave', 'beach', 'shore', 'island',\n  'mountain', 'hill', 'valley', 'canyon', 'cliff', 'cave', 'forest', 'jungle', 'desert', 'field',\n  'north', 'south', 'east', 'west', 'up', 'down', 'left', 'right', 'front', 'back',\n  'top', 'bottom', 'side', 'edge', 'corner', 'center', 'middle', 'inside', 'outside', 'above',\n  'below', 'over', 'under', 'next', 'previous', 'first', 'last', 'start', 'end', 'begin',\n  'cat', 'dog', 'bird', 'fish', 'rabbit', 'mouse', 'horse', 'cow', 'pig', 'sheep',\n  'goose', 'duck', 'hen', 'rooster', 'turkey', 'deer', 'bear', 'wolf', 'fox', 'lion',\n  'tiger', 'elephant', 'monkey', 'zebra', 'giraffe', 'hippo', 'rhino', 'kangaroo', 'koala', 'panda',\n  'car', 'truck', 'bus', 'train', 'plane', 'boat', 'ship', 'bike', 'scooter', 'skateboard',\n  'rocket', 'helicopter', 'submarine', 'van', 'taxi', 'ambulance', 'firetruck', 'police', 'tractor', 'motorcycle',\n  'house', 'home', 'building', 'tower', 'castle', 'palace', 'temple', 'church', 'school', 'hospital',\n  'store', 'shop', 'market', 'mall', 'office', 'factory', 'warehouse', 'garage', 'barn', 'shed',\n  'book', 'pen', 'pencil', 'paper', 'desk', 'chair', 'table', 'lamp', 'clock', 'phone',\n  'computer', 'keyboard', 'mouse', 'screen', 'monitor', 'printer', 'scanner', 'camera', 'speaker', 'microphone',\n  'shirt', 'pants', 'dress', 'skirt', 'jacket', 'coat', 'hat', 'cap', 'glove', 'sock',\n  'shoe', 'boot', 'sandal', 'slipper', 'tie', 'scarf', 'belt', 'watch', 'ring', 'necklace',\n  'ball', 'bat', 'racket', 'club', 'stick', 'puck', 'net', 'goal', 'hoop', 'target',\n  'game', 'toy', 'puzzle', 'doll', 'robot', 'lego', 'block', 'card', 'dice', 'chess',\n  'music', 'song', 'tune', 'beat', 'rhythm', 'melody', 'harmony', 'note', 'chord', 'key',\n  'guitar', 'piano', 'drum', 'flute', 'violin', 'trumpet', 'saxophone', 'harp', 'bell', 'whistle',\n  'happy', 'sad', 'glad', 'mad', 'calm', 'wild', 'hot', 'cold', 'warm', 'cool',\n  'big', 'small', 'large', 'tiny', 'huge', 'mini', 'giant', 'short', 'tall', 'long',\n  'wide', 'narrow', 'thick', 'thin', 'heavy', 'light', 'soft', 'hard', 'smooth', 'rough',\n  'clean', 'dirty', 'bright', 'dark', 'loud', 'quiet', 'fast', 'slow', 'quick', 'lazy',\n  'strong', 'weak', 'brave', 'shy', 'kind', 'mean', 'smart', 'silly', 'funny', 'serious',\n  'new', 'old', 'young', 'ancient', 'modern', 'classic', 'vintage', 'fresh', 'stale', 'ripe',\n  'raw', 'cooked', 'baked', 'fried', 'boiled', 'grilled', 'roasted', 'steamed', 'frozen', 'melted',\n  'open', 'closed', 'locked', 'unlocked', 'hidden', 'visible', 'clear', 'blurry', 'sharp', 'dull',\n  'full', 'empty', 'half', 'whole', 'partial', 'complete', 'broken', 'fixed', 'damaged', 'perfect',\n  'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',\n  'hundred', 'thousand', 'million', 'billion', 'zero', 'single', 'double', 'triple', 'multiple', 'many',\n  'few', 'some', 'all', 'none', 'every', 'each', 'any', 'other', 'another', 'same',\n  'different', 'similar', 'equal', 'unique', 'common', 'rare', 'special', 'normal', 'strange', 'weird'\n];\n\n/**\n * Levenshtein search options\n */\nexport interface LevenshteinSearchOptions {\n  /** Maximum Levenshtein distance (lower = stricter, default: 3) */\n  maxDistance?: number;\n  \n  /** Minimum similarity score 0-1 (higher = stricter, default: 0.6) */\n  minSimilarity?: number;\n  \n  /** Maximum results to return (default: 10) */\n  maxResults?: number;\n  \n  /** Search in class names (default: true) */\n  searchClasses?: boolean;\n  \n  /** Search in element IDs (default: true) */\n  searchIds?: boolean;\n  \n  /** Search in text content (default: true) */\n  searchText?: boolean;\n  \n  /** Search in placeholders (default: true) */\n  searchPlaceholders?: boolean;\n  \n  /** Search in aria labels (default: true) */\n  searchAriaLabels?: boolean;\n  \n  /** Search in element values - inputs, selects, radio buttons, etc. (default: true) */\n  searchValues?: boolean;\n  \n  /** Only return interactive elements (default: false) */\n  requireInteractive?: boolean;\n  \n  /** Only return visible elements (default: true) */\n  requireVisible?: boolean;\n  \n  /** Filter by tag name (e.g., 'button', 'input') */\n  tag?: string;\n}\n\n/**\n * Search result element\n */\nexport interface SearchResultElement {\n  /** Spoken-word ID for interaction (e.g., \"apple_banana\") */\n  id: string;\n  \n  /** HTML tag name */\n  tag: string;\n  \n  /** Element type (for inputs) */\n  type?: string;\n  \n  /** Visible text content (truncated) */\n  text?: string;\n  \n  /** Placeholder text */\n  placeholder?: string;\n  \n  /** ARIA label */\n  ariaLabel?: string;\n  \n  /** Role */\n  role?: string;\n  \n  /** Match score (0-1, higher = better) */\n  matchScore: number;\n  \n  /** Field that matched (e.g., 'text', 'aria-label', 'class') */\n  matchedField?: string;\n  \n  /** Value that matched */\n  matchedValue?: string;\n  \n  /** Whether element is visible */\n  visible: boolean;\n  \n  /** Whether element is interactive */\n  interactive: boolean;\n}\n\n/**\n * Search results\n */\nexport interface DOMSearchResults {\n  /** Search query that was used */\n  query: string;\n  \n  /** Found elements */\n  elements: SearchResultElement[];\n  \n  /** Total elements searched */\n  totalSearched: number;\n  \n  /** Timestamp */\n  timestamp: number;\n}\n\n/**\n * Smart DOM Searcher with Levenshtein Distance\n * \n * Features:\n * - Searches across all element properties (text, classes, aria-labels, values, etc.)\n * - Generates deterministic spoken-word IDs from XPath\n * - Maintains element store for reliable interaction\n */\nexport class FuzzyDOMSearcher {\n  /** Element store: spoken ID -> actual element */\n  private elementStore: Map<string, Element> = new Map();\n  \n  /**\n   * Generate XPath for an element\n   */\n  private getElementXPath(element: Element): string {\n    if (element.id) {\n      return `//*[@id=\"${element.id}\"]`;\n    }\n    \n    const parts: string[] = [];\n    let current: Element | null = element;\n    \n    while (current && current.nodeType === Node.ELEMENT_NODE) {\n      let index = 1;\n      let sibling = current.previousElementSibling;\n      \n      while (sibling) {\n        if (sibling.tagName === current.tagName) {\n          index++;\n        }\n        sibling = sibling.previousElementSibling;\n      }\n      \n      const tagName = current.tagName.toLowerCase();\n      const part = index > 1 ? `${tagName}[${index}]` : tagName;\n      parts.unshift(part);\n      \n      current = current.parentElement;\n    }\n    \n    return '/' + parts.join('/');\n  }\n  \n  /**\n   * Simple hash function for strings\n   */\n  private simpleHash(str: string): number {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const char = str.charCodeAt(i);\n      hash = ((hash << 5) - hash) + char;\n      hash = hash & hash; // Convert to 32bit integer\n    }\n    return Math.abs(hash);\n  }\n  \n  /**\n   * Generate spoken-word ID from XPath\n   * Format: \"word1_word2\" (e.g., \"apple_banana\")\n   */\n  private generateSpokenId(xpath: string): string {\n    const hash = this.simpleHash(xpath);\n    const word1Index = hash % WORD_LIST.length;\n    const word2Index = Math.floor(hash / WORD_LIST.length) % WORD_LIST.length;\n    return `${WORD_LIST[word1Index]}_${WORD_LIST[word2Index]}`;\n  }\n  \n  /**\n   * Get or create spoken ID for element\n   */\n  private getElementId(element: Element): string {\n    // Check if element already has data-vowel-id attribute\n    if (element instanceof HTMLElement) {\n      const existingId = element.getAttribute('data-vowel-id');\n      if (existingId && this.elementStore.get(existingId) === element) {\n        return existingId;\n      }\n    }\n    \n    // Check if already in store\n    for (const [id, el] of this.elementStore.entries()) {\n      if (el === element) {\n        return id;\n      }\n    }\n    \n    // Generate new ID\n    const xpath = this.getElementXPath(element);\n    const id = this.generateSpokenId(xpath);\n    \n    // Store element\n    this.elementStore.set(id, element);\n    \n    // Set data-vowel-id attribute on the element for floating cursor to find it\n    if (element instanceof HTMLElement) {\n      element.setAttribute('data-vowel-id', id);\n    }\n    \n    return id;\n  }\n  \n  /**\n   * Get element by spoken ID\n   */\n  getElementById(id: string): Element | null {\n    return this.elementStore.get(id) || null;\n  }\n  \n  /**\n   * Clear element store (call on page navigation)\n   */\n  clearStore(): void {\n    // Remove data-vowel-id attributes from all stored elements\n    for (const [id, element] of this.elementStore.entries()) {\n      if (element instanceof HTMLElement && element.getAttribute('data-vowel-id') === id) {\n        element.removeAttribute('data-vowel-id');\n      }\n    }\n    \n    this.elementStore.clear();\n    console.log('🗑️ [FuzzyDOMSearch] Element store cleared (removed data-vowel-id attributes)');\n  }\n  \n  /**\n   * Search for elements by term using Levenshtein distance\n   * \n   * @param query - Search term (e.g., \"cart button\", \"search\", \"add to cart\")\n   * @param options - Search options\n   * @returns Search results with spoken IDs\n   */\n  search(query: string, options: LevenshteinSearchOptions = {}): DOMSearchResults {\n    const {\n      maxDistance = 3,\n      minSimilarity = 0.3, // Lowered for better fuzzy matching (substring matches still score 0.9+)\n      maxResults = 10,\n      searchClasses = true,\n      searchIds = true,\n      searchText = true,\n      searchPlaceholders = true,\n      searchAriaLabels = true,\n      searchValues = true,\n      requireInteractive = false,\n      requireVisible = true,\n      tag = undefined\n    } = options;\n    \n    const normalizedQuery = query.toLowerCase().trim();\n    \n    console.log('🔍 [FuzzyDOMSearch] Searching for:', query);\n    console.log('   Options:', { maxDistance, minSimilarity, maxResults });\n    \n    const allElements = Array.from(document.querySelectorAll('*')).slice(0, 2000);\n    const results: Array<{ element: Element; score: number; matchedField: string; matchedValue: string }> = [];\n    \n    console.log('   Searching', allElements.length, 'elements');\n    \n    for (const element of allElements) {\n      if (requireVisible && !this.isElementVisible(element)) continue;\n      if (requireInteractive && !this.isElementInteractive(element)) continue;\n      if (tag && element.tagName.toLowerCase() !== tag) continue;\n      if (this.shouldSkipElement(element)) continue;\n      \n      let bestScore = 0;\n      let bestField = '';\n      let bestValue = '';\n      \n      // Search in class names\n      if (searchClasses) {\n        const classes = Array.from(element.classList);\n        for (const className of classes) {\n          const similarity = this.calculateSimilarity(normalizedQuery, className.toLowerCase(), maxDistance);\n          if (similarity > bestScore) {\n            bestScore = similarity;\n            bestField = 'class';\n            bestValue = className;\n          }\n        }\n      }\n      \n      // Search in ID\n      if (searchIds && element.id && typeof element.id === 'string') {\n        const id = element.id.toLowerCase();\n        const similarity = this.calculateSimilarity(normalizedQuery, id, maxDistance);\n        if (similarity > bestScore) {\n          bestScore = similarity;\n          bestField = 'id';\n          bestValue = id;\n        }\n      }\n      \n      // Search in text content\n      if (searchText) {\n        const rawText = (element as HTMLElement).innerText;\n        if (rawText && typeof rawText === 'string') {\n          const text = rawText.toLowerCase().trim();\n          if (text && text.length < 200) {\n            const similarity = this.calculateSimilarity(normalizedQuery, text, maxDistance);\n            if (similarity > bestScore) {\n              bestScore = similarity;\n              bestField = 'text';\n              bestValue = text;\n            }\n          }\n        }\n      }\n      \n      // Search in placeholder\n      if (searchPlaceholders) {\n        const rawPlaceholder = element.getAttribute('placeholder');\n        if (rawPlaceholder && typeof rawPlaceholder === 'string') {\n          const placeholder = rawPlaceholder.toLowerCase();\n          const similarity = this.calculateSimilarity(normalizedQuery, placeholder, maxDistance);\n          if (similarity > bestScore) {\n            bestScore = similarity;\n            bestField = 'placeholder';\n            bestValue = placeholder;\n          }\n        }\n      }\n      \n      // Search in aria-label\n      if (searchAriaLabels) {\n        const rawAriaLabel = element.getAttribute('aria-label');\n        if (rawAriaLabel && typeof rawAriaLabel === 'string') {\n          const ariaLabel = rawAriaLabel.toLowerCase();\n          const similarity = this.calculateSimilarity(normalizedQuery, ariaLabel, maxDistance);\n          if (similarity > bestScore) {\n            bestScore = similarity;\n            bestField = 'aria-label';\n            bestValue = ariaLabel;\n          }\n        }\n      }\n      \n      // Search in element values (inputs, selects, radio buttons, etc.)\n      if (searchValues) {\n        const rawValue = (element as HTMLInputElement).value;\n        if (rawValue && typeof rawValue === 'string') {\n          const value = rawValue.toLowerCase();\n          const similarity = this.calculateSimilarity(normalizedQuery, value, maxDistance);\n          if (similarity > bestScore) {\n            bestScore = similarity;\n            bestField = 'value';\n            bestValue = value;\n          }\n        }\n      }\n      \n      // Add to results if meets threshold\n      if (bestScore >= minSimilarity) {\n        // Apply small boost for preferred interactive elements\n        let finalScore = bestScore;\n        const tag = element.tagName.toLowerCase();\n        \n        // Boost labels (for form controls), buttons, and links slightly\n        if (['label', 'button', 'a'].includes(tag)) {\n          finalScore = Math.min(1.0, bestScore * 1.05);\n        }\n        \n        results.push({\n          element,\n          score: finalScore,\n          matchedField: bestField,\n          matchedValue: bestValue\n        });\n      }\n    }\n    \n    // Sort by score (highest first) and limit results\n    results.sort((a, b) => b.score - a.score);\n    const topResults = results.slice(0, maxResults);\n    \n    console.log(`   ✅ Found ${topResults.length} matches (from ${results.length} candidates)`);\n    \n    // Debug: Show why we have so few results\n    if (results.length === 0) {\n      console.log('   ℹ️  No candidates found - check if minSimilarity is too strict');\n    } else if (results.length < 5) {\n      console.log(`   ℹ️  Only ${results.length} candidate(s) - possible issues:`);\n      console.log('      - Query too specific?');\n      console.log('      - minSimilarity too high? (current default: 0.4)');\n      console.log('      - Try searching for more specific text (e.g., \"ice\" instead of \"color\")');\n    }\n    \n    // Convert to SearchResultElement with spoken IDs\n    const elements = topResults.map(result => {\n      const element = result.element;\n      const spokenId = this.getElementId(element);\n      \n      const text = (element as HTMLElement).innerText?.trim().substring(0, 50);\n      const type = element.getAttribute('type') || undefined;\n      const placeholder = element.getAttribute('placeholder') || undefined;\n      const ariaLabel = element.getAttribute('aria-label') || undefined;\n      const role = element.getAttribute('role') || undefined;\n      \n      return {\n        id: spokenId,\n        tag: element.tagName.toLowerCase(),\n        type,\n        text: text || undefined,\n        placeholder,\n        ariaLabel,\n        role,\n        matchScore: result.score,\n        matchedField: result.matchedField,\n        matchedValue: result.matchedValue,\n        visible: this.isElementVisible(element),\n        interactive: this.isElementInteractive(element)\n      };\n    });\n    \n    // Log top matches\n    console.log('   Top 5 matches:');\n    elements.slice(0, 5).forEach((el, i) => {\n      console.log(`     ${i + 1}. [${el.id}] <${el.tag}> similarity=${el.matchScore.toFixed(2)} ${el.matchedField}=\"${el.matchedValue?.substring(0, 30)}\"`);\n      if (el.text) console.log(`        Text: \"${el.text}\"`);\n    });\n    \n    // Build result\n    const result: DOMSearchResults = {\n      query,\n      elements,\n      totalSearched: allElements.length,\n      timestamp: Date.now()\n    };\n    \n    // Note: Snapshot is no longer auto-included\n    // AI should explicitly call getPageSnapshot tool if needed\n    \n    return result;\n  }\n  \n  /**\n   * Get compressed page snapshot using Playwright's AI snapshot algorithm\n   * Returns a hierarchical ARIA tree view optimized for AI comprehension\n   * \n   * This uses the same algorithm as Playwright's built-in AI snapshot feature,\n   * which provides semantic structure and interactive element references.\n   * \n   * Performance optimizations:\n   * - Uses efficient ARIA tree generation (O(n) where n = DOM nodes)\n   * - Caches element mappings to avoid redundant lookups\n   * - Uses regex replacement with pre-compiled patterns\n   * - Detailed timing metrics for performance monitoring\n   * - No size limits (LLM supports very long context)\n   */\n  getCompressedPageSnapshot(): string {\n    const startTime = performance.now();\n    console.log('📸 [FuzzyDOMSearch] Generating AI snapshot using Playwright algorithm...');\n    \n    try {\n      // Generate ARIA snapshot using Playwright's algorithm\n      // This creates a hierarchical tree with interactive element refs\n      const treeStartTime = performance.now();\n      const ariaSnapshot = generateAriaTree(document.body, { \n        mode: 'ai',\n        refPrefix: '' // Use default 'e' prefix (e1, e2, etc.)\n      });\n      const treeEndTime = performance.now();\n      console.log(`   ⏱️  Tree generation: ${(treeEndTime - treeStartTime).toFixed(2)}ms`);\n      \n      // Map Playwright refs (e1, e2, etc.) to our spoken IDs (apple_banana, etc.)\n      // Performance: Pre-allocate map size based on elements count\n      const refMapping: { [playwrightRef: string]: string } = {};\n      \n      const mappingStartTime = performance.now();\n      ariaSnapshot.elements.forEach((element, playwrightRef) => {\n        const spokenId = this.getElementId(element);\n        refMapping[playwrightRef] = spokenId;\n        \n        // Store element in our store using spoken ID\n        this.elementStore.set(spokenId, element);\n      });\n      const mappingEndTime = performance.now();\n      console.log(`   ⏱️  Element mapping: ${(mappingEndTime - mappingStartTime).toFixed(2)}ms (${ariaSnapshot.elements.size} elements)`);\n      \n      // Render the tree to YAML format\n      const renderStartTime = performance.now();\n      let snapshotText = snapshotForAI(document.body, { mode: 'full' });\n      const renderEndTime = performance.now();\n      console.log(`   ⏱️  YAML rendering: ${(renderEndTime - renderStartTime).toFixed(2)}ms`);\n      \n      // Replace Playwright refs with spoken IDs for consistency with our tools\n      // Performance: Use batch replacement with pre-built regex patterns\n      const replaceStartTime = performance.now();\n      \n      // Build all replacement patterns at once (more efficient than creating regex in loop)\n      const replacements = Object.entries(refMapping).map(([playwrightRef, spokenId]) => ({\n        // Escape special regex characters in the ref\n        pattern: new RegExp(`\\\\[ref=${playwrightRef.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\]`, 'g'),\n        replacement: `[ref=${spokenId}]`\n      }));\n      \n      // Apply all replacements\n      for (const { pattern, replacement } of replacements) {\n        snapshotText = snapshotText.replace(pattern, replacement);\n      }\n      \n      const replaceEndTime = performance.now();\n      console.log(`   ⏱️  Ref replacement: ${(replaceEndTime - replaceStartTime).toFixed(2)}ms (${replacements.length} refs)`);\n      \n      // Count interactive elements\n      const elementCount = ariaSnapshot.elements.size;\n      \n      const endTime = performance.now();\n      const totalTime = endTime - startTime;\n      \n      console.log(`   ✅ Generated AI snapshot with ${elementCount} interactive elements`);\n      console.log(`   📊 Snapshot size: ${(snapshotText.length / 1024).toFixed(1)}KB`);\n      console.log(`   🎯 Total time: ${totalTime.toFixed(2)}ms`);\n      \n      // Performance warning for slow generation only (not size)\n      // Size warnings removed - LLM supports very long context\n      if (totalTime > 100) {\n        console.warn(`⚠️  [Performance] Snapshot generation took ${totalTime.toFixed(0)}ms (threshold: 100ms)`);\n        console.warn(`   Consider optimizing page structure if this impacts user experience`);\n      }\n      \n      // Add header explaining the format\n      const header = `PAGE SNAPSHOT (Playwright AI Format)\nInteractive elements have [ref=spoken_id] tags for use with DOM tools.\nUse these spoken IDs with clickElement, typeIntoElement, etc.\n\n`;\n      \n      return header + snapshotText;\n    } catch (error) {\n      console.error('   ❌ Failed to generate AI snapshot:', error);\n      return `Error generating snapshot: ${error instanceof Error ? error.message : String(error)}`;\n    }\n  }\n  \n  /**\n   * Calculate Levenshtein distance between two strings\n   * Optimized with early exit for performance\n   */\n  private levenshteinDistance(a: string, b: string, maxDistance: number): number {\n    if (a === b) return 0;\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n    \n    // Early exit if length difference exceeds max distance\n    if (Math.abs(a.length - b.length) > maxDistance) {\n      return maxDistance + 1;\n    }\n    \n    const matrix: number[][] = [];\n    \n    // Initialize first row and column\n    for (let i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n    for (let j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n    \n    // Fill matrix\n    for (let i = 1; i <= b.length; i++) {\n      let minInRow = Infinity;\n      \n      for (let j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) === a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(\n            matrix[i - 1][j - 1] + 1, // substitution\n            matrix[i][j - 1] + 1,     // insertion\n            matrix[i - 1][j] + 1      // deletion\n          );\n        }\n        minInRow = Math.min(minInRow, matrix[i][j]);\n      }\n      \n      // Early exit if this row exceeds max distance\n      if (minInRow > maxDistance) {\n        return maxDistance + 1;\n      }\n    }\n    \n    return matrix[b.length][a.length];\n  }\n  \n  /**\n   * Calculate similarity score from Levenshtein distance\n   * Returns 0-1 (higher = more similar)\n   * \n   * Enhanced with substring matching for better partial matches\n   */\n  private calculateSimilarity(query: string, target: string, maxDistance: number): number {\n    // BOOST: If query is contained in target as a substring, give high score\n    if (target.includes(query)) {\n      // Perfect substring match - return high score based on how much of target it covers\n      return 0.9 + (query.length / target.length) * 0.1; // 0.9 to 1.0\n    }\n    \n    // BOOST: Check if query matches a whole word in target\n    const words = target.split(/\\s+/);\n    for (const word of words) {\n      if (word === query) {\n        return 0.95; // Exact word match\n      }\n      if (word.includes(query)) {\n        return 0.85 + (query.length / word.length) * 0.1; // 0.85 to 0.95\n      }\n    }\n    \n    // Fall back to Levenshtein distance for fuzzy matching\n    const distance = this.levenshteinDistance(query, target, maxDistance);\n    \n    if (distance > maxDistance) {\n      return 0;\n    }\n    \n    // Normalize to 0-1 score\n    const maxLen = Math.max(query.length, target.length);\n    const similarity = 1 - (distance / maxLen);\n    \n    return Math.max(0, similarity);\n  }\n  \n  /**\n   * Check if element is visible\n   */\n  private isElementVisible(element: Element): boolean {\n    const htmlElement = element as HTMLElement;\n    const style = window.getComputedStyle(htmlElement);\n    \n    return !!(\n      htmlElement.offsetWidth ||\n      htmlElement.offsetHeight ||\n      htmlElement.getClientRects().length\n    ) && style.visibility !== 'hidden' && style.display !== 'none';\n  }\n  \n  /**\n   * Check if element is interactive\n   */\n  private isElementInteractive(element: Element): boolean {\n    const tag = element.tagName.toLowerCase();\n    const interactiveTags = ['a', 'button', 'input', 'select', 'textarea', 'details', 'summary', 'label'];\n    \n    if (interactiveTags.includes(tag)) {\n      return true;\n    }\n    \n    // Check for click handlers or tabindex\n    const hasClickHandler = element.hasAttribute('onclick') || element.hasAttribute('on:click');\n    const hasTabIndex = element.hasAttribute('tabindex') && element.getAttribute('tabindex') !== '-1';\n    const hasRole = element.getAttribute('role') === 'button' || element.getAttribute('role') === 'link';\n    const hasCursor = window.getComputedStyle(element as HTMLElement).cursor === 'pointer';\n    \n    return hasClickHandler || hasTabIndex || hasRole || hasCursor;\n  }\n  \n  /**\n   * Check if element should be skipped\n   */\n  private shouldSkipElement(element: Element): boolean {\n    const tag = element.tagName.toLowerCase();\n    const skipTags = ['script', 'style', 'noscript', 'meta', 'link', 'br', 'hr', 'svg', 'path'];\n    \n    return skipTags.includes(tag);\n  }\n}\n","/**\n * DOM Manipulation Tools\n * \n * Simple interaction tools that use spoken-word IDs (e.g., \"apple_banana\")\n * to identify and interact with elements found via search\n */\n\n/**\n * DOM Manipulator - Provides interaction methods for elements\n * Uses spoken IDs to identify elements from the FuzzyDOMSearcher\n */\nexport class DOMManipulator {\n  private getElementById: (id: string) => Element | null;\n  \n  constructor(options: { getElementById: (id: string) => Element | null }) {\n    this.getElementById = options.getElementById;\n  }\n  \n  /**\n   * Click an element\n   * @param params.id - Spoken ID (e.g., \"apple_banana\")\n   * \n   * Smart clicking: If target isn't directly clickable (e.g., hidden radio input),\n   * automatically finds and clicks the nearest interactive parent (e.g., label)\n   */\n  async clickElement(params: { id: string }): Promise<{ success: boolean; error?: string }> {\n    try {\n      console.log(`🖱️ [DOMManipulator] Clicking element: ${params.id}`);\n      \n      let element = this.getElementById(params.id);\n      if (!element) {\n        throw new Error(`Element ${params.id} not found`);\n      }\n      \n      // Find the best element to click (might be a parent)\n      const clickTarget = this.findClickableElement(element);\n      \n      // Scroll into view\n      clickTarget.scrollIntoView({ behavior: 'smooth', block: 'center' });\n      await new Promise(resolve => setTimeout(resolve, 300));\n      \n      // Click element\n      (clickTarget as HTMLElement).click();\n      \n      if (clickTarget !== element) {\n        console.log(`   ℹ️  Clicked parent <${clickTarget.tagName.toLowerCase()}> (target was hidden/non-interactive)`);\n      }\n      console.log('   ✅ Element clicked');\n      return { success: true };\n    } catch (error) {\n      console.error('   ❌ Click failed:', error);\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error)\n      };\n    }\n  }\n  \n  /**\n   * Find the best clickable element (may traverse up to find interactive parent)\n   * Handles cases like hidden radio inputs inside labels, custom form controls, etc.\n   * \n   * @param element - Starting element\n   * @returns The element to actually click\n   */\n  private findClickableElement(element: Element): Element {\n    const isVisible = (el: Element): boolean => {\n      const htmlEl = el as HTMLElement;\n      const style = window.getComputedStyle(htmlEl);\n      return !!(\n        htmlEl.offsetWidth ||\n        htmlEl.offsetHeight ||\n        htmlEl.getClientRects().length\n      ) && style.visibility !== 'hidden' && style.display !== 'none';\n    };\n    \n    const isClickable = (el: Element): boolean => {\n      const tag = el.tagName.toLowerCase();\n      \n      // Direct interactive elements\n      if (['a', 'button', 'label', 'summary'].includes(tag)) {\n        return true;\n      }\n      \n      // Check for click indicators\n      const hasClickHandler = el.hasAttribute('onclick') || el.hasAttribute('on:click');\n      const hasTabIndex = el.hasAttribute('tabindex') && el.getAttribute('tabindex') !== '-1';\n      const hasClickRole = el.getAttribute('role') === 'button' || el.getAttribute('role') === 'link';\n      const hasCursor = window.getComputedStyle(el as HTMLElement).cursor === 'pointer';\n      \n      return hasClickHandler || hasTabIndex || hasClickRole || hasCursor;\n    };\n    \n    // If element is visible and clickable, use it\n    if (isVisible(element) && isClickable(element)) {\n      return element;\n    }\n    \n    // Otherwise, traverse up to find the nearest clickable parent\n    let current: Element | null = element;\n    let maxDepth = 10; // Prevent infinite loops\n    \n    while (current && maxDepth > 0) {\n      current = current.parentElement;\n      maxDepth--;\n      \n      if (current && isVisible(current) && isClickable(current)) {\n        console.log(`   🔍 Found clickable parent: <${current.tagName.toLowerCase()}>`);\n        return current;\n      }\n    }\n    \n    // Fallback: return original element (click will still work in most cases)\n    console.log('   ⚠️  No clickable parent found, using original element');\n    return element;\n  }\n  \n  /**\n   * Type text into an input element\n   * @param params.id - Spoken ID\n   * @param params.text - Text to type\n   */\n  async typeIntoElement(params: { id: string; text: string }): Promise<{ success: boolean; error?: string }> {\n    try {\n      console.log(`⌨️ [DOMManipulator] Typing into element: ${params.id}`);\n      console.log(`   Text: \"${params.text}\"`);\n      \n      const element = this.getElementById(params.id);\n      if (!element) {\n        throw new Error(`Element ${params.id} not found`);\n      }\n      \n      const inputElement = element as HTMLInputElement | HTMLTextAreaElement;\n      \n      // Focus first\n      inputElement.focus();\n      await new Promise(resolve => setTimeout(resolve, 100));\n      \n      // Set value\n      inputElement.value = params.text;\n      \n      // Dispatch input event to trigger any listeners\n      inputElement.dispatchEvent(new Event('input', { bubbles: true }));\n      inputElement.dispatchEvent(new Event('change', { bubbles: true }));\n      \n      console.log('   ✅ Text entered');\n      return { success: true };\n    } catch (error) {\n      console.error('   ❌ Type failed:', error);\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error)\n      };\n    }\n  }\n  \n  /**\n   * Press a key (e.g., Enter, Escape)\n   * @param params.key - Key name (e.g., 'Enter', 'Escape', 'Tab')\n   */\n  async pressKey(params: { key: string }): Promise<{ success: boolean; error?: string }> {\n    try {\n      console.log(`⌨️ [DOMManipulator] Pressing key: ${params.key}`);\n      \n      const event = new KeyboardEvent('keydown', {\n        key: params.key,\n        bubbles: true,\n        cancelable: true\n      });\n      \n      document.activeElement?.dispatchEvent(event);\n      \n      // Also dispatch keyup\n      const upEvent = new KeyboardEvent('keyup', {\n        key: params.key,\n        bubbles: true,\n        cancelable: true\n      });\n      \n      document.activeElement?.dispatchEvent(upEvent);\n      \n      console.log('   ✅ Key pressed');\n      return { success: true };\n    } catch (error) {\n      console.error('   ❌ Press key failed:', error);\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error)\n      };\n    }\n  }\n  \n  /**\n   * Focus an element\n   * @param params.id - Spoken ID\n   */\n  async focusElement(params: { id: string }): Promise<{ success: boolean; error?: string }> {\n    try {\n      console.log(`🎯 [DOMManipulator] Focusing element: ${params.id}`);\n      \n      const element = this.getElementById(params.id);\n      if (!element) {\n        throw new Error(`Element ${params.id} not found`);\n      }\n      \n      (element as HTMLElement).focus();\n      \n      console.log('   ✅ Element focused');\n      return { success: true };\n    } catch (error) {\n      console.error('   ❌ Focus failed:', error);\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error)\n      };\n    }\n  }\n  \n  /**\n   * Scroll to an element\n   * @param params.id - Spoken ID\n   */\n  async scrollToElement(params: { id: string }): Promise<{ success: boolean; error?: string }> {\n    try {\n      console.log(`📜 [DOMManipulator] Scrolling to element: ${params.id}`);\n      \n      const element = this.getElementById(params.id);\n      if (!element) {\n        throw new Error(`Element ${params.id} not found`);\n      }\n      \n      element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n      \n      console.log('   ✅ Scrolled to element');\n      return { success: true };\n    } catch (error) {\n      console.error('   ❌ Scroll failed:', error);\n      return {\n        success: false,\n        error: error instanceof Error ? error.message : String(error)\n      };\n    }\n  }\n}\n"],"names":["node","id","tag","result"],"mappings":"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"}