donobu 2.15.1 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/dist/assets/control-panel.js +30 -3
  2. package/dist/assets/generated/parameter-schemas.json +33 -33
  3. package/dist/assets/generated/version +1 -1
  4. package/dist/assets/interactive-elements-tracker.js +351 -0
  5. package/dist/assets/page-interactions-tracker.js +39 -20
  6. package/dist/assets/smart-selector-generator.js +38 -15
  7. package/dist/bindings/FocusPage.d.ts +6 -1
  8. package/dist/bindings/FocusPage.d.ts.map +1 -1
  9. package/dist/bindings/FocusPage.js +2 -8
  10. package/dist/bindings/FocusPage.js.map +1 -1
  11. package/dist/bindings/PageInteractionTracker.d.ts +9 -2
  12. package/dist/bindings/PageInteractionTracker.d.ts.map +1 -1
  13. package/dist/bindings/PageInteractionTracker.js +27 -3
  14. package/dist/bindings/PageInteractionTracker.js.map +1 -1
  15. package/dist/bindings/ProposeToolCall.d.ts +20 -0
  16. package/dist/bindings/ProposeToolCall.d.ts.map +1 -0
  17. package/dist/bindings/ProposeToolCall.js +29 -0
  18. package/dist/bindings/ProposeToolCall.js.map +1 -0
  19. package/dist/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  20. package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  21. package/dist/bindings/ToggleDonobuAnnotations.js +12 -6
  22. package/dist/bindings/ToggleDonobuAnnotations.js.map +1 -1
  23. package/dist/esm/assets/control-panel.js +30 -3
  24. package/dist/esm/assets/generated/parameter-schemas.json +33 -33
  25. package/dist/esm/assets/generated/version +1 -1
  26. package/dist/esm/assets/interactive-elements-tracker.js +351 -0
  27. package/dist/esm/assets/page-interactions-tracker.js +39 -20
  28. package/dist/esm/assets/smart-selector-generator.js +38 -15
  29. package/dist/esm/bindings/FocusPage.d.ts +6 -1
  30. package/dist/esm/bindings/FocusPage.d.ts.map +1 -1
  31. package/dist/esm/bindings/FocusPage.js +2 -8
  32. package/dist/esm/bindings/FocusPage.js.map +1 -1
  33. package/dist/esm/bindings/PageInteractionTracker.d.ts +9 -2
  34. package/dist/esm/bindings/PageInteractionTracker.d.ts.map +1 -1
  35. package/dist/esm/bindings/PageInteractionTracker.js +27 -3
  36. package/dist/esm/bindings/PageInteractionTracker.js.map +1 -1
  37. package/dist/esm/bindings/ProposeToolCall.d.ts +20 -0
  38. package/dist/esm/bindings/ProposeToolCall.d.ts.map +1 -0
  39. package/dist/esm/bindings/ProposeToolCall.js +29 -0
  40. package/dist/esm/bindings/ProposeToolCall.js.map +1 -0
  41. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  42. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  43. package/dist/esm/bindings/ToggleDonobuAnnotations.js +12 -6
  44. package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +1 -1
  45. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  46. package/dist/esm/managers/CodeGenerator.js +2 -1
  47. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  48. package/dist/esm/managers/ControlPanel.d.ts +124 -0
  49. package/dist/esm/managers/ControlPanel.d.ts.map +1 -0
  50. package/dist/esm/managers/ControlPanel.js +282 -0
  51. package/dist/esm/managers/ControlPanel.js.map +1 -0
  52. package/dist/esm/managers/DonobuFlow.d.ts +4 -12
  53. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  54. package/dist/esm/managers/DonobuFlow.js +35 -140
  55. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  56. package/dist/esm/managers/InteractionVisualizer.d.ts +9 -15
  57. package/dist/esm/managers/InteractionVisualizer.d.ts.map +1 -1
  58. package/dist/esm/managers/InteractionVisualizer.js +44 -44
  59. package/dist/esm/managers/InteractionVisualizer.js.map +1 -1
  60. package/dist/esm/managers/PageInspector.d.ts +242 -0
  61. package/dist/esm/managers/PageInspector.d.ts.map +1 -0
  62. package/dist/esm/managers/PageInspector.js +783 -0
  63. package/dist/esm/managers/PageInspector.js.map +1 -0
  64. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  65. package/dist/esm/managers/ToolManager.js +3 -5
  66. package/dist/esm/managers/ToolManager.js.map +1 -1
  67. package/dist/esm/models/InteractableElement.d.ts +2 -2
  68. package/dist/esm/models/ToolCallContext.d.ts +6 -2
  69. package/dist/esm/models/ToolCallContext.d.ts.map +1 -1
  70. package/dist/esm/playwrightTestExtensions.d.ts +5 -0
  71. package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
  72. package/dist/esm/playwrightTestExtensions.js +52 -13
  73. package/dist/esm/playwrightTestExtensions.js.map +1 -1
  74. package/dist/esm/tools/AnalyzePageTextTool.js +1 -1
  75. package/dist/esm/tools/AnalyzePageTextTool.js.map +1 -1
  76. package/dist/esm/tools/AssertPageTextTool.js +1 -1
  77. package/dist/esm/tools/AssertPageTextTool.js.map +1 -1
  78. package/dist/esm/tools/AssertTool.d.ts.map +1 -1
  79. package/dist/esm/tools/AssertTool.js +4 -4
  80. package/dist/esm/tools/AssertTool.js.map +1 -1
  81. package/dist/esm/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  82. package/dist/esm/tools/ChangeWebBrowserTabTool.js +8 -7
  83. package/dist/esm/tools/ChangeWebBrowserTabTool.js.map +1 -1
  84. package/dist/esm/tools/ClickTool.js +1 -1
  85. package/dist/esm/tools/ClickTool.js.map +1 -1
  86. package/dist/esm/tools/CreateBrowserCookieReportTool.js +1 -1
  87. package/dist/esm/tools/CreateBrowserCookieReportTool.js.map +1 -1
  88. package/dist/esm/tools/CustomToolRunnerTool.d.ts.map +1 -1
  89. package/dist/esm/tools/CustomToolRunnerTool.js +1 -1
  90. package/dist/esm/tools/CustomToolRunnerTool.js.map +1 -1
  91. package/dist/esm/tools/DetectBrokenLinksTool.js +1 -1
  92. package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
  93. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  94. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  95. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js +1 -1
  96. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  97. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  98. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  99. package/dist/esm/tools/GoForwardOrBackTool.js +1 -1
  100. package/dist/esm/tools/GoForwardOrBackTool.js.map +1 -1
  101. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  102. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  103. package/dist/esm/tools/GoToWebpageTool.js +1 -1
  104. package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
  105. package/dist/esm/tools/HoverOverElementTool.d.ts.map +1 -1
  106. package/dist/esm/tools/HoverOverElementTool.js +1 -1
  107. package/dist/esm/tools/HoverOverElementTool.js.map +1 -1
  108. package/dist/esm/tools/NavigateWithinStreetView.js +1 -1
  109. package/dist/esm/tools/NavigateWithinStreetView.js.map +1 -1
  110. package/dist/esm/tools/PressKeyTool.js +1 -1
  111. package/dist/esm/tools/PressKeyTool.js.map +1 -1
  112. package/dist/esm/tools/ReloadPageTool.js +1 -1
  113. package/dist/esm/tools/ReloadPageTool.js.map +1 -1
  114. package/dist/esm/tools/ReplayableInteraction.d.ts +16 -1
  115. package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
  116. package/dist/esm/tools/ReplayableInteraction.js +169 -16
  117. package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
  118. package/dist/esm/tools/RunAccessibilityTestTool.d.ts +8 -0
  119. package/dist/esm/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  120. package/dist/esm/tools/RunAccessibilityTestTool.js +15 -2
  121. package/dist/esm/tools/RunAccessibilityTestTool.js.map +1 -1
  122. package/dist/esm/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  123. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js +1 -1
  124. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  125. package/dist/esm/tools/SaveWebpageAsPdfTool.js +1 -1
  126. package/dist/esm/tools/SaveWebpageAsPdfTool.js.map +1 -1
  127. package/dist/esm/tools/ScrollPageTool.d.ts +1 -1
  128. package/dist/esm/tools/ScrollPageTool.d.ts.map +1 -1
  129. package/dist/esm/tools/ScrollPageTool.js +47 -4
  130. package/dist/esm/tools/ScrollPageTool.js.map +1 -1
  131. package/dist/esm/tools/WaitTool.js +1 -1
  132. package/dist/esm/tools/WaitTool.js.map +1 -1
  133. package/dist/esm/utils/MiscUtils.d.ts +2 -2
  134. package/dist/esm/utils/MiscUtils.js +2 -2
  135. package/dist/esm/utils/PlaywrightUtils.d.ts +26 -127
  136. package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
  137. package/dist/esm/utils/PlaywrightUtils.js +133 -935
  138. package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
  139. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  140. package/dist/managers/CodeGenerator.js +2 -1
  141. package/dist/managers/CodeGenerator.js.map +1 -1
  142. package/dist/managers/ControlPanel.d.ts +124 -0
  143. package/dist/managers/ControlPanel.d.ts.map +1 -0
  144. package/dist/managers/ControlPanel.js +282 -0
  145. package/dist/managers/ControlPanel.js.map +1 -0
  146. package/dist/managers/DonobuFlow.d.ts +4 -12
  147. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  148. package/dist/managers/DonobuFlow.js +35 -140
  149. package/dist/managers/DonobuFlow.js.map +1 -1
  150. package/dist/managers/InteractionVisualizer.d.ts +9 -15
  151. package/dist/managers/InteractionVisualizer.d.ts.map +1 -1
  152. package/dist/managers/InteractionVisualizer.js +44 -44
  153. package/dist/managers/InteractionVisualizer.js.map +1 -1
  154. package/dist/managers/PageInspector.d.ts +242 -0
  155. package/dist/managers/PageInspector.d.ts.map +1 -0
  156. package/dist/managers/PageInspector.js +783 -0
  157. package/dist/managers/PageInspector.js.map +1 -0
  158. package/dist/managers/ToolManager.d.ts.map +1 -1
  159. package/dist/managers/ToolManager.js +3 -5
  160. package/dist/managers/ToolManager.js.map +1 -1
  161. package/dist/models/InteractableElement.d.ts +2 -2
  162. package/dist/models/ToolCallContext.d.ts +6 -2
  163. package/dist/models/ToolCallContext.d.ts.map +1 -1
  164. package/dist/playwrightTestExtensions.d.ts +5 -0
  165. package/dist/playwrightTestExtensions.d.ts.map +1 -1
  166. package/dist/playwrightTestExtensions.js +52 -13
  167. package/dist/playwrightTestExtensions.js.map +1 -1
  168. package/dist/tools/AnalyzePageTextTool.js +1 -1
  169. package/dist/tools/AnalyzePageTextTool.js.map +1 -1
  170. package/dist/tools/AssertPageTextTool.js +1 -1
  171. package/dist/tools/AssertPageTextTool.js.map +1 -1
  172. package/dist/tools/AssertTool.d.ts.map +1 -1
  173. package/dist/tools/AssertTool.js +4 -4
  174. package/dist/tools/AssertTool.js.map +1 -1
  175. package/dist/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  176. package/dist/tools/ChangeWebBrowserTabTool.js +8 -7
  177. package/dist/tools/ChangeWebBrowserTabTool.js.map +1 -1
  178. package/dist/tools/ClickTool.js +1 -1
  179. package/dist/tools/ClickTool.js.map +1 -1
  180. package/dist/tools/CreateBrowserCookieReportTool.js +1 -1
  181. package/dist/tools/CreateBrowserCookieReportTool.js.map +1 -1
  182. package/dist/tools/CustomToolRunnerTool.d.ts.map +1 -1
  183. package/dist/tools/CustomToolRunnerTool.js +1 -1
  184. package/dist/tools/CustomToolRunnerTool.js.map +1 -1
  185. package/dist/tools/DetectBrokenLinksTool.js +1 -1
  186. package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
  187. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  188. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  189. package/dist/tools/ExtractPaymentProviderKeyTool.js +1 -1
  190. package/dist/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  191. package/dist/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  192. package/dist/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  193. package/dist/tools/GoForwardOrBackTool.js +1 -1
  194. package/dist/tools/GoForwardOrBackTool.js.map +1 -1
  195. package/dist/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  196. package/dist/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  197. package/dist/tools/GoToWebpageTool.js +1 -1
  198. package/dist/tools/GoToWebpageTool.js.map +1 -1
  199. package/dist/tools/HoverOverElementTool.d.ts.map +1 -1
  200. package/dist/tools/HoverOverElementTool.js +1 -1
  201. package/dist/tools/HoverOverElementTool.js.map +1 -1
  202. package/dist/tools/NavigateWithinStreetView.js +1 -1
  203. package/dist/tools/NavigateWithinStreetView.js.map +1 -1
  204. package/dist/tools/PressKeyTool.js +1 -1
  205. package/dist/tools/PressKeyTool.js.map +1 -1
  206. package/dist/tools/ReloadPageTool.js +1 -1
  207. package/dist/tools/ReloadPageTool.js.map +1 -1
  208. package/dist/tools/ReplayableInteraction.d.ts +16 -1
  209. package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
  210. package/dist/tools/ReplayableInteraction.js +169 -16
  211. package/dist/tools/ReplayableInteraction.js.map +1 -1
  212. package/dist/tools/RunAccessibilityTestTool.d.ts +8 -0
  213. package/dist/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  214. package/dist/tools/RunAccessibilityTestTool.js +15 -2
  215. package/dist/tools/RunAccessibilityTestTool.js.map +1 -1
  216. package/dist/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  217. package/dist/tools/RunInlineJavaScriptCodeTool.js +1 -1
  218. package/dist/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  219. package/dist/tools/SaveWebpageAsPdfTool.js +1 -1
  220. package/dist/tools/SaveWebpageAsPdfTool.js.map +1 -1
  221. package/dist/tools/ScrollPageTool.d.ts +1 -1
  222. package/dist/tools/ScrollPageTool.d.ts.map +1 -1
  223. package/dist/tools/ScrollPageTool.js +47 -4
  224. package/dist/tools/ScrollPageTool.js.map +1 -1
  225. package/dist/tools/WaitTool.js +1 -1
  226. package/dist/tools/WaitTool.js.map +1 -1
  227. package/dist/utils/MiscUtils.d.ts +2 -2
  228. package/dist/utils/MiscUtils.js +2 -2
  229. package/dist/utils/PlaywrightUtils.d.ts +26 -127
  230. package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
  231. package/dist/utils/PlaywrightUtils.js +133 -935
  232. package/dist/utils/PlaywrightUtils.js.map +1 -1
  233. package/package.json +1 -1
  234. package/dist/assets/clickable-elements-tracker.js +0 -63
  235. package/dist/assets/zaru-eyes.html +0 -141
  236. package/dist/esm/assets/clickable-elements-tracker.js +0 -63
  237. package/dist/esm/assets/zaru-eyes.html +0 -141
  238. package/dist/esm/managers/TemplateInterpolator.d.ts +0 -19
  239. package/dist/esm/managers/TemplateInterpolator.d.ts.map +0 -1
  240. package/dist/esm/managers/TemplateInterpolator.js +0 -86
  241. package/dist/esm/managers/TemplateInterpolator.js.map +0 -1
  242. package/dist/esm/managers/ToolTipper.d.ts +0 -32
  243. package/dist/esm/managers/ToolTipper.d.ts.map +0 -1
  244. package/dist/esm/managers/ToolTipper.js +0 -229
  245. package/dist/esm/managers/ToolTipper.js.map +0 -1
  246. package/dist/esm/models/BrowserState.d.ts +0 -26
  247. package/dist/esm/models/BrowserState.d.ts.map +0 -1
  248. package/dist/esm/models/BrowserState.js +0 -3
  249. package/dist/esm/models/BrowserState.js.map +0 -1
  250. package/dist/esm/models/ResolverContext.d.ts +0 -7
  251. package/dist/esm/models/ResolverContext.d.ts.map +0 -1
  252. package/dist/esm/models/ResolverContext.js +0 -3
  253. package/dist/esm/models/ResolverContext.js.map +0 -1
  254. package/dist/esm/models/ToolTemplateDataSource.d.ts +0 -36
  255. package/dist/esm/models/ToolTemplateDataSource.d.ts.map +0 -1
  256. package/dist/esm/models/ToolTemplateDataSource.js +0 -3
  257. package/dist/esm/models/ToolTemplateDataSource.js.map +0 -1
  258. package/dist/esm/test.d.ts +0 -78
  259. package/dist/esm/test.d.ts.map +0 -1
  260. package/dist/esm/test.js +0 -423
  261. package/dist/esm/test.js.map +0 -1
  262. package/dist/esm/utils/TemplateInterpolator.d.ts +0 -29
  263. package/dist/esm/utils/TemplateInterpolator.d.ts.map +0 -1
  264. package/dist/esm/utils/TemplateInterpolator.js +0 -206
  265. package/dist/esm/utils/TemplateInterpolator.js.map +0 -1
  266. package/dist/managers/TemplateInterpolator.d.ts +0 -19
  267. package/dist/managers/TemplateInterpolator.d.ts.map +0 -1
  268. package/dist/managers/TemplateInterpolator.js +0 -86
  269. package/dist/managers/TemplateInterpolator.js.map +0 -1
  270. package/dist/managers/ToolTipper.d.ts +0 -32
  271. package/dist/managers/ToolTipper.d.ts.map +0 -1
  272. package/dist/managers/ToolTipper.js +0 -229
  273. package/dist/managers/ToolTipper.js.map +0 -1
  274. package/dist/models/BrowserState.d.ts +0 -26
  275. package/dist/models/BrowserState.d.ts.map +0 -1
  276. package/dist/models/BrowserState.js +0 -3
  277. package/dist/models/BrowserState.js.map +0 -1
  278. package/dist/models/ResolverContext.d.ts +0 -7
  279. package/dist/models/ResolverContext.d.ts.map +0 -1
  280. package/dist/models/ResolverContext.js +0 -3
  281. package/dist/models/ResolverContext.js.map +0 -1
  282. package/dist/models/ToolTemplateDataSource.d.ts +0 -36
  283. package/dist/models/ToolTemplateDataSource.d.ts.map +0 -1
  284. package/dist/models/ToolTemplateDataSource.js +0 -3
  285. package/dist/models/ToolTemplateDataSource.js.map +0 -1
  286. package/dist/test.d.ts +0 -78
  287. package/dist/test.d.ts.map +0 -1
  288. package/dist/test.js +0 -423
  289. package/dist/test.js.map +0 -1
  290. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  291. package/dist/utils/TemplateInterpolator.d.ts +0 -29
  292. package/dist/utils/TemplateInterpolator.d.ts.map +0 -1
  293. package/dist/utils/TemplateInterpolator.js +0 -211
  294. package/dist/utils/TemplateInterpolator.js.map +0 -1
@@ -0,0 +1,351 @@
1
+ // interactive-elements-tracker.js
2
+ (() => {
3
+ // Store all elements deemed to be interactive
4
+ const interactiveElements = new Set();
5
+
6
+ // Original method references for monkey patching
7
+ const originalAddEventListener = EventTarget.prototype.addEventListener;
8
+ const originalRemoveEventListener = EventTarget.prototype.removeEventListener;
9
+
10
+ // Events that indicate interactivity
11
+ const pointerEvents = [
12
+ 'click',
13
+ 'mousedown',
14
+ 'pointerdown',
15
+ 'mouseup',
16
+ 'pointerup',
17
+ 'touchstart',
18
+ 'focus',
19
+ 'blur',
20
+ 'change',
21
+ 'input',
22
+ 'submit',
23
+ ];
24
+
25
+ // Helper function to check if an element is in shadow DOM
26
+ const isInShadowDOM = (element) => {
27
+ return (
28
+ element instanceof Element && element.getRootNode() instanceof ShadowRoot
29
+ );
30
+ };
31
+
32
+ // Function to check if an element has interactive CSS properties
33
+ const hasInteractiveStyling = (element) => {
34
+ if (!(element instanceof Element)) return false;
35
+
36
+ try {
37
+ const computedStyle = window.getComputedStyle(element);
38
+
39
+ // Check for style properties that suggest interactivity
40
+ return (
41
+ computedStyle.cursor === 'pointer' ||
42
+ computedStyle.cursor === 'hand' ||
43
+ element.getAttribute('role') === 'button' ||
44
+ element.getAttribute('role') === 'link' ||
45
+ element.getAttribute('aria-haspopup') === 'true' ||
46
+ element.getAttribute('tabindex') === '0' ||
47
+ element.getAttribute('contenteditable') === 'true'
48
+ );
49
+ } catch (error) {
50
+ return false; // Handle potential errors in computed style
51
+ }
52
+ };
53
+
54
+ // Function to check for React-specific attributes that suggest interactivity
55
+ const hasReactInteractiveProps = (element) => {
56
+ if (!(element instanceof Element)) return false;
57
+
58
+ try {
59
+ // Check for React event handler attributes and data attributes
60
+ const reactEventAttrs = [
61
+ 'data-donobu-interactable',
62
+ 'onClick',
63
+ 'onMouseDown',
64
+ 'onMouseUp',
65
+ 'onPointerDown',
66
+ 'onPointerUp',
67
+ 'onTouchStart',
68
+ 'onChange',
69
+ 'onInput',
70
+ 'onFocus',
71
+ 'onBlur',
72
+ 'onSubmit',
73
+ ];
74
+
75
+ // Check for React component CSS classes that suggest interactivity
76
+ const interactiveClasses = [
77
+ 'cursor-pointer',
78
+ 'hover:bg-', // Common Tailwind hover classes
79
+ 'active:bg-',
80
+ 'focus:outline-',
81
+ 'hover:text-',
82
+ ];
83
+
84
+ // Check for attributes
85
+ for (const attr of reactEventAttrs) {
86
+ if (
87
+ element.hasAttribute(attr) ||
88
+ element.getAttribute(attr.toLowerCase()) !== null ||
89
+ (element.dataset && attr in element.dataset)
90
+ ) {
91
+ return true;
92
+ }
93
+ }
94
+
95
+ // Check for class names suggesting interactivity
96
+ const className = element.className || '';
97
+ if (typeof className === 'string') {
98
+ for (const cls of interactiveClasses) {
99
+ if (className.includes(cls)) {
100
+ return true;
101
+ }
102
+ }
103
+ }
104
+
105
+ return false;
106
+ } catch (error) {
107
+ return false; // Handle any potential errors
108
+ }
109
+ };
110
+
111
+ // Monkey patch addEventListener to track elements with event listeners
112
+ EventTarget.prototype.addEventListener = function (type, listener, options) {
113
+ if (pointerEvents.includes(type) && this !== window && this !== document) {
114
+ interactiveElements.add(this);
115
+
116
+ // If this element is in shadow DOM, ensure it's accessible
117
+ if (isInShadowDOM(this)) {
118
+ try {
119
+ const shadowRoot = this.getRootNode();
120
+ if (shadowRoot.host) {
121
+ interactiveElements.add(shadowRoot.host);
122
+ }
123
+ } catch (error) {
124
+ // Ignore errors if getRootNode fails
125
+ }
126
+ }
127
+ }
128
+ return originalAddEventListener.call(this, type, listener, options);
129
+ };
130
+
131
+ // Restore original removeEventListener behavior
132
+ EventTarget.prototype.removeEventListener = function (
133
+ type,
134
+ listener,
135
+ options,
136
+ ) {
137
+ if (pointerEvents.includes(type) && this !== window && this !== document) {
138
+ interactiveElements.delete(this);
139
+ }
140
+ return originalRemoveEventListener.call(this, type, listener, options);
141
+ };
142
+
143
+ // Scan DOM for potentially interactive elements
144
+ const scanForInteractiveElements = () => {
145
+ try {
146
+ // Common interactive element selectors
147
+ const interactiveSelectors = [
148
+ 'a',
149
+ 'button',
150
+ 'input',
151
+ 'select',
152
+ 'textarea',
153
+ 'summary',
154
+ '[role="button"]',
155
+ '[role="link"]',
156
+ '[role="menuitem"]',
157
+ '[role="tab"]',
158
+ '[tabindex]',
159
+ '[contenteditable="true"]',
160
+ '[data-donobu-interactable]',
161
+ '.cursor-pointer',
162
+ ];
163
+
164
+ // Only proceed if document is available
165
+ if (document && document.body) {
166
+ // Query for potential interactive elements
167
+ const potentialElements = document.querySelectorAll(
168
+ interactiveSelectors.join(','),
169
+ );
170
+
171
+ potentialElements.forEach((element) => {
172
+ // Add element if it has interactive styling or React props
173
+ if (
174
+ hasInteractiveStyling(element) ||
175
+ hasReactInteractiveProps(element)
176
+ ) {
177
+ interactiveElements.add(element);
178
+ }
179
+ });
180
+
181
+ // Handle shadow DOM
182
+ document.querySelectorAll('*').forEach((element) => {
183
+ if (element.shadowRoot) {
184
+ try {
185
+ const shadowElements = element.shadowRoot.querySelectorAll(
186
+ interactiveSelectors.join(','),
187
+ );
188
+ shadowElements.forEach((shadowEl) => {
189
+ if (
190
+ hasInteractiveStyling(shadowEl) ||
191
+ hasReactInteractiveProps(shadowEl)
192
+ ) {
193
+ interactiveElements.add(shadowEl);
194
+ interactiveElements.add(element); // Add the host element as well
195
+ }
196
+ });
197
+ } catch (error) {
198
+ // Continue if there's an error with a particular shadow root
199
+ }
200
+ }
201
+ });
202
+ }
203
+ } catch (error) {
204
+ console.error('Error scanning for interactive elements:', error);
205
+ }
206
+ };
207
+
208
+ // Initialize MutationObserver safely
209
+ let observer = null;
210
+
211
+ const initializeMutationObserver = () => {
212
+ if (!document || !document.body) return;
213
+
214
+ try {
215
+ observer = new MutationObserver((mutations) => {
216
+ let shouldRescan = false;
217
+
218
+ for (const mutation of mutations) {
219
+ if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
220
+ shouldRescan = true;
221
+ break;
222
+ }
223
+ }
224
+
225
+ if (shouldRescan) {
226
+ scanForInteractiveElements();
227
+ }
228
+ });
229
+
230
+ // Start observing the document body
231
+ observer.observe(document.body, {
232
+ childList: true,
233
+ subtree: true,
234
+ });
235
+ } catch (error) {
236
+ console.error('Error initializing MutationObserver:', error);
237
+ }
238
+ };
239
+
240
+ if (!window.__donobu) {
241
+ Object.defineProperty(window, '__donobu', {
242
+ value: {},
243
+ enumerable: false,
244
+ writable: true,
245
+ configurable: false,
246
+ });
247
+ }
248
+
249
+ // Add components without overwriting the namespace
250
+ if (!window.__donobu.getInteractiveElements) {
251
+ Object.defineProperty(window.__donobu, 'getInteractiveElements', {
252
+ value: () => {
253
+ // Trigger a scan to ensure we have the latest elements
254
+ scanForInteractiveElements();
255
+
256
+ const allInteractiveElements = [];
257
+
258
+ interactiveElements.forEach((element) => {
259
+ if (element instanceof Element) {
260
+ allInteractiveElements.push(element);
261
+
262
+ // Include shadow DOM elements
263
+ if (element.shadowRoot) {
264
+ try {
265
+ const shadowElements = Array.from(
266
+ element.shadowRoot.querySelectorAll('*'),
267
+ ).filter((el) => interactiveElements.has(el));
268
+
269
+ allInteractiveElements.push(...shadowElements);
270
+ } catch (error) {
271
+ // Continue if there's an error with a particular shadow element
272
+ }
273
+ }
274
+ }
275
+ });
276
+
277
+ return allInteractiveElements;
278
+ },
279
+ enumerable: false,
280
+ writable: false,
281
+ configurable: false,
282
+ });
283
+ }
284
+
285
+ if (!window.__donobu.debugInteractiveElement) {
286
+ Object.defineProperty(window.__donobu, 'debugInteractiveElement', {
287
+ value: (element) => {
288
+ if (!(element instanceof Element)) {
289
+ return { isInteractive: false, reason: 'Not a DOM element' };
290
+ }
291
+
292
+ const reasons = [];
293
+
294
+ if (hasInteractiveStyling(element)) {
295
+ reasons.push('Has interactive CSS styling');
296
+ }
297
+
298
+ if (hasReactInteractiveProps(element)) {
299
+ reasons.push('Has React interactive props or classes');
300
+ }
301
+
302
+ // Check common interactive elements
303
+ if (
304
+ element.tagName === 'A' ||
305
+ element.tagName === 'BUTTON' ||
306
+ element.tagName === 'INPUT' ||
307
+ element.tagName === 'SELECT'
308
+ ) {
309
+ reasons.push(`Is a ${element.tagName} element`);
310
+ }
311
+
312
+ // Check if element has an explicit event listener
313
+ if (interactiveElements.has(element)) {
314
+ reasons.push('Has registered event listener');
315
+ }
316
+
317
+ return {
318
+ isInteractive: reasons.length > 0,
319
+ reasons: reasons,
320
+ };
321
+ },
322
+ enumerable: false,
323
+ writable: false,
324
+ configurable: false,
325
+ });
326
+ }
327
+
328
+ // Initialize things safely after DOM content is loaded
329
+ const initialize = () => {
330
+ scanForInteractiveElements();
331
+ initializeMutationObserver();
332
+ };
333
+
334
+ // Set up a safer initialization approach
335
+ if (document.readyState === 'loading') {
336
+ document.addEventListener('DOMContentLoaded', initialize);
337
+ } else {
338
+ // DOM already ready, initialize now
339
+ initialize();
340
+ }
341
+
342
+ // Periodically scan for interactive elements (React/SPA behavior)
343
+ const rescanInterval = 2000; // milliseconds
344
+ setInterval(() => {
345
+ try {
346
+ scanForInteractiveElements();
347
+ } catch (error) {
348
+ console.error('Error during periodic scan:', error);
349
+ }
350
+ }, rescanInterval);
351
+ })();
@@ -1,16 +1,37 @@
1
1
  /**
2
2
  * Donobu script for tracking interactions with the current page. This scripts assumes the
3
3
  * following:
4
- * 1. There is an exposed binding to call back to Java named "donobuTrackInteraction".
5
- * 2. The smart-selector-generator.js script has defined the "donobuGenerateSmartSelectors"
4
+ * 1. There is an exposed binding to call back to NodeJS named "__donobuTrackInteraction".
5
+ * 2. The smart-selector-generator.js script has defined the "__donobu.generateSmartSelectors"
6
6
  * method on the window object.
7
7
  */
8
8
  (() => {
9
- if (window.donobuListenersRegistered) {
10
- return;
9
+ if (!window.__donobu) {
10
+ Object.defineProperty(window, '__donobu', {
11
+ value: {},
12
+ enumerable: false,
13
+ writable: true,
14
+ configurable: false,
15
+ });
11
16
  }
12
17
 
13
- window.donobuStartDragPosition = { x: 0, y: 0 };
18
+ if (!window.__donobu.interactionListenersRegistered) {
19
+ Object.defineProperty(window.__donobu, 'interactionListenersRegistered', {
20
+ value: true,
21
+ enumerable: false,
22
+ writable: false,
23
+ configurable: false,
24
+ });
25
+ }
26
+
27
+ if (!window.__donobu.startDragPosition) {
28
+ Object.defineProperty(window.__donobu, 'startDragPosition', {
29
+ value: { x: 0, y: 0 },
30
+ enumerable: false,
31
+ writable: true,
32
+ configurable: false,
33
+ });
34
+ }
14
35
 
15
36
  // Helper function to check if an event target is inside the Donobu control panel.
16
37
  const isDonobuControlPanelInteraction = (element) => {
@@ -40,20 +61,20 @@
40
61
  type: eventType,
41
62
  x: e.clientX,
42
63
  y: e.clientY,
43
- selectors: window.donobuGenerateSmartSelectors(e.target),
64
+ selectors: window.__donobu.generateSmartSelectors(e.target),
44
65
  timestamp: new Date().getTime(),
45
66
  };
46
67
 
47
68
  if (eventType === 'mousedown') {
48
- donobuStartDragPosition = { x: e.clientX, y: e.clientY };
69
+ window.__donobu.startDragPosition = { x: e.clientX, y: e.clientY };
49
70
  } else if (eventType === 'mouseup') {
50
71
  eventData.dragDistance = Math.sqrt(
51
- Math.pow(e.clientX - donobuStartDragPosition.x, 2) +
52
- Math.pow(e.clientY - donobuStartDragPosition.y, 2),
72
+ Math.pow(e.clientX - window.__donobu.startDragPosition.x, 2) +
73
+ Math.pow(e.clientY - window.__donobu.startDragPosition.y, 2),
53
74
  );
54
75
  }
55
76
 
56
- donobuTrackInteraction(eventData);
77
+ __donobuTrackInteraction(eventData);
57
78
  },
58
79
  true,
59
80
  );
@@ -70,7 +91,7 @@
70
91
  return;
71
92
  }
72
93
 
73
- donobuTrackInteraction({
94
+ __donobuTrackInteraction({
74
95
  type: eventType,
75
96
  key: e.key,
76
97
  keyCode: e.keyCode,
@@ -78,7 +99,7 @@
78
99
  ctrlKey: e.ctrlKey,
79
100
  metaKey: e.metaKey,
80
101
  shiftKey: e.shiftKey,
81
- selectors: window.donobuGenerateSmartSelectors(e.target),
102
+ selectors: window.__donobu.generateSmartSelectors(e.target),
82
103
  timestamp: new Date().getTime(),
83
104
  });
84
105
  },
@@ -98,7 +119,7 @@
98
119
 
99
120
  const eventData = {
100
121
  type: eventType,
101
- selectors: window.donobuGenerateSmartSelectors(e.target),
122
+ selectors: window.__donobu.generateSmartSelectors(e.target),
102
123
  timestamp: new Date().getTime(),
103
124
  };
104
125
 
@@ -115,7 +136,7 @@
115
136
  }
116
137
  }
117
138
 
118
- donobuTrackInteraction(eventData);
139
+ __donobuTrackInteraction(eventData);
119
140
  },
120
141
  true,
121
142
  );
@@ -127,7 +148,7 @@
127
148
  // window.addEventListener(
128
149
  // "scroll",
129
150
  // function (e) {
130
- // donobuTrackInteraction({
151
+ // __donobuTrackInteraction({
131
152
  // type: "scroll",
132
153
  // scrollX: window.scrollX,
133
154
  // scrollY: window.scrollY,
@@ -141,7 +162,7 @@
141
162
  // window.addEventListener(
142
163
  // "resize",
143
164
  // function (e) {
144
- // donobuTrackInteraction({
165
+ // __donobuTrackInteraction({
145
166
  // type: "resize",
146
167
  // width: window.innerWidth,
147
168
  // height: window.innerHeight,
@@ -168,10 +189,10 @@
168
189
  identifier: touch.identifier,
169
190
  }));
170
191
 
171
- donobuTrackInteraction({
192
+ __donobuTrackInteraction({
172
193
  type: eventType,
173
194
  touches: touches,
174
- selectors: window.donobuGenerateSmartSelectors(e.target),
195
+ selectors: window.__donobu.generateSmartSelectors(e.target),
175
196
  timestamp: new Date().getTime(),
176
197
  });
177
198
  },
@@ -179,6 +200,4 @@
179
200
  );
180
201
  },
181
202
  );
182
-
183
- window.donobuListenersRegistered = true;
184
203
  })();
@@ -1,8 +1,23 @@
1
1
  (() => {
2
- // Prevent sneaky websites from undefining the CSS escape function.
3
- // We run first and we can save the CSS escape function.
4
- window.donobuCssEscape =
5
- typeof CSS.escape !== 'undefined' ? CSS.escape : window.donobuCssEscape;
2
+ if (!window.__donobu) {
3
+ Object.defineProperty(window, '__donobu', {
4
+ value: {},
5
+ enumerable: false,
6
+ writable: true,
7
+ configurable: false,
8
+ });
9
+ }
10
+
11
+ if (!window.__donobu.cssEscape) {
12
+ // Prevent sneaky websites from undefining the CSS escape function.
13
+ // We run first and we can save the CSS escape function.
14
+ Object.defineProperty(window.__donobu, 'cssEscape', {
15
+ value: CSS.escape,
16
+ enumerable: false,
17
+ writable: false,
18
+ configurable: false,
19
+ });
20
+ }
6
21
 
7
22
  class SelectorToCount {
8
23
  constructor(selector) {
@@ -118,7 +133,8 @@
118
133
  return null;
119
134
  }
120
135
  })
121
- .filter((a) => a !== null && a.count !== 0)
136
+ .filter((a) => a !== null)
137
+ .filter((a) => a.count !== 0)
122
138
  .sort((a, b) => {
123
139
  // 1. fewer matches -> better
124
140
  if (a.count !== b.count) return a.count - b.count;
@@ -235,7 +251,7 @@
235
251
  if (id) {
236
252
  const label = document.querySelector(`label[for='${id}']`);
237
253
  if (label) {
238
- const labelText = label.textContent.trim();
254
+ const labelText = label.textContent?.trim();
239
255
  if (labelText) {
240
256
  const safeLabelText = xpathLiteral(labelText);
241
257
  return [
@@ -311,16 +327,23 @@
311
327
  }
312
328
 
313
329
  escapeCss(str) {
314
- return window.donobuCssEscape(str);
330
+ return window.__donobu.cssEscape(str);
315
331
  }
316
332
  }
317
333
 
318
- window.donobuGenerateSmartSelectors = (element) => {
319
- try {
320
- return new SelectorGenerator(element).generate();
321
- } catch (e) {
322
- console.warn('Exception while generating selector', e);
323
- return [];
324
- }
325
- };
334
+ if (!window.__donobu.generateSmartSelectors) {
335
+ Object.defineProperty(window.__donobu, 'generateSmartSelectors', {
336
+ value: (element) => {
337
+ try {
338
+ return new SelectorGenerator(element).generate();
339
+ } catch (e) {
340
+ console.warn('Exception while generating selector', e);
341
+ return [];
342
+ }
343
+ },
344
+ enumerable: false,
345
+ writable: false,
346
+ configurable: false,
347
+ });
348
+ }
326
349
  })();
@@ -1,6 +1,11 @@
1
1
  import { FocusedPage } from '../models/FocusedPage';
2
2
  import { NamedBindingCallback } from './NamedBindingCallback';
3
3
  import { BrowserContext, Page, Frame } from 'playwright';
4
+ declare global {
5
+ interface Window {
6
+ [FocusPage.NAME]: () => void;
7
+ }
8
+ }
4
9
  /**
5
10
  * A binding that brings the page executing this callback into focus.
6
11
  */
@@ -13,6 +18,6 @@ export declare class FocusPage implements NamedBindingCallback {
13
18
  context: BrowserContext;
14
19
  page: Page;
15
20
  frame: Frame;
16
- }, ...args: any[]): any;
21
+ }, ..._args: any[]): void;
17
22
  }
18
23
  //# sourceMappingURL=FocusPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FocusPage.d.ts","sourceRoot":"","sources":["../../../src/bindings/FocusPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,qBAAa,SAAU,YAAW,oBAAoB;IAGjC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAF/C,gBAAuB,IAAI,qBAAqB;gBAEZ,WAAW,EAAE,WAAW;IAErD,IAAI,IAAI,MAAM;IAId,IAAI,CACT,MAAM,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAC7D,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,GAAG;CAWP"}
1
+ {"version":3,"file":"FocusPage.d.ts","sourceRoot":"","sources":["../../../src/bindings/FocusPage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;KAC9B;CACF;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,oBAAoB;IAGjC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAF/C,gBAAuB,IAAI,qBAAqB;gBAEZ,WAAW,EAAE,WAAW;IAErD,IAAI,IAAI,MAAM;IAId,IAAI,CACT,MAAM,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAC7D,GAAG,KAAK,EAAE,GAAG,EAAE,GACd,IAAI;CAGR"}
@@ -11,14 +11,8 @@ class FocusPage {
11
11
  name() {
12
12
  return FocusPage.NAME;
13
13
  }
14
- call(source, ...args) {
15
- const tabUrl = args[0];
16
- const page = source.context.pages().find((tab) => tab.url() === tabUrl);
17
- if (page) {
18
- this.focusedPage.current = page;
19
- return true;
20
- }
21
- return false;
14
+ call(source, ..._args) {
15
+ this.focusedPage.current = source.page;
22
16
  }
23
17
  }
24
18
  exports.FocusPage = FocusPage;
@@ -1 +1 @@
1
- {"version":3,"file":"FocusPage.js","sourceRoot":"","sources":["../../../src/bindings/FocusPage.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,MAAa,SAAS;IAGpB,YAAoC,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEzD,IAAI;QACT,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAEM,IAAI,CACT,MAA6D,EAC7D,GAAG,IAAW;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC;QAExE,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;;AAtBH,8BAuBC;AAtBwB,cAAI,GAAG,iBAAiB,CAAC"}
1
+ {"version":3,"file":"FocusPage.js","sourceRoot":"","sources":["../../../src/bindings/FocusPage.ts"],"names":[],"mappings":";;;AAUA;;GAEG;AACH,MAAa,SAAS;IAGpB,YAAoC,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEzD,IAAI;QACT,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAEM,IAAI,CACT,MAA6D,EAC7D,GAAG,KAAY;QAEf,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IACzC,CAAC;;AAdH,8BAeC;AAdwB,cAAI,GAAG,iBAAiB,CAAC"}
@@ -1,6 +1,11 @@
1
1
  import { BrowserContext, Page, Frame } from 'playwright';
2
2
  import { NamedBindingCallback } from './NamedBindingCallback';
3
3
  import { DonobuFlow } from '../managers/DonobuFlow';
4
+ declare global {
5
+ interface Window {
6
+ [PageInteractionTracker.NAME]: () => boolean;
7
+ }
8
+ }
4
9
  /**
5
10
  * Tracks direct user actions that have occurred in the web browser.
6
11
  * This differs from normal Donobu flows which use GPT to analyze pages and propose actions.
@@ -8,8 +13,10 @@ import { DonobuFlow } from '../managers/DonobuFlow';
8
13
  */
9
14
  export declare class PageInteractionTracker implements NamedBindingCallback {
10
15
  private readonly donobuFlow;
11
- static readonly NAME = "donobuTrackInteraction";
12
- constructor(donobuFlow: DonobuFlow);
16
+ private static readonly INIT_SCRIPT;
17
+ static readonly NAME = "__donobuTrackInteraction";
18
+ static register(donobuFlow: DonobuFlow, browserContext: BrowserContext): Promise<PageInteractionTracker>;
19
+ private constructor();
13
20
  name(): string;
14
21
  /**
15
22
  * Handles tracking of page interactions.
@@ -1 +1 @@
1
- {"version":3,"file":"PageInteractionTracker.d.ts","sourceRoot":"","sources":["../../../src/bindings/PageInteractionTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAqBpD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,oBAAoB;IAG9C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAF9C,gBAAuB,IAAI,4BAA4B;gBAEnB,UAAU,EAAE,UAAU;IAEnD,IAAI,IAAI,MAAM;IAIrB;;;;;OAKG;IACU,IAAI,CACf,MAAM,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAC7D,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;YAgDF,cAAc;CAyD7B"}
1
+ {"version":3,"file":"PageInteractionTracker.d.ts","sourceRoot":"","sources":["../../../src/bindings/PageInteractionTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAgBpD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC;KAC9C;CACF;AAQD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,oBAAoB;IAqC7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IApC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAEjC;IAGF,gBAAuB,IAAI,8BAA8B;WAErC,QAAQ,CAC1B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,sBAAsB,CAAC;IA0BlC,OAAO;IAEA,IAAI,IAAI,MAAM;IAIrB;;;;;OAKG;IACU,IAAI,CACf,MAAM,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAC7D,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;YAkDF,cAAc;CAyD7B"}