@wdio/image-comparison-core 1.0.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 (416) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/LICENSE +21 -0
  3. package/README.md +12 -0
  4. package/assets/ios/ipadair4th.ipadair5th-bottom.png +0 -0
  5. package/assets/ios/ipadair4th.ipadair5th-top.png +0 -0
  6. package/assets/ios/ipadmini6th-bottom.png +0 -0
  7. package/assets/ios/ipadmini6th-top.png +0 -0
  8. package/assets/ios/ipadpro11-bottom.png +0 -0
  9. package/assets/ios/ipadpro11-top.png +0 -0
  10. package/assets/ios/ipadpro129-bottom.png +0 -0
  11. package/assets/ios/ipadpro129-top.png +0 -0
  12. package/assets/ios/iphone11promax-bottom.png +0 -0
  13. package/assets/ios/iphone11promax-top.png +0 -0
  14. package/assets/ios/iphone12.iphone12pro-top.png +0 -0
  15. package/assets/ios/iphone12.iphone12pro.iphone13.iphone13pro.iphone14-bottom.png +0 -0
  16. package/assets/ios/iphone12mini-top.png +0 -0
  17. package/assets/ios/iphone12mini.iphone13mini-bottom.png +0 -0
  18. package/assets/ios/iphone12promax-top.png +0 -0
  19. package/assets/ios/iphone12promax.iphone13promax.iphone14plus-bottom.png +0 -0
  20. package/assets/ios/iphone13.iphone13pro.iphone14-top.png +0 -0
  21. package/assets/ios/iphone13mini-top.png +0 -0
  22. package/assets/ios/iphone13promax.iphone14plus-top.png +0 -0
  23. package/assets/ios/iphone14pro-bottom.png +0 -0
  24. package/assets/ios/iphone14pro-top.png +0 -0
  25. package/assets/ios/iphone14promax-bottom.png +0 -0
  26. package/assets/ios/iphone14promax-top.png +0 -0
  27. package/assets/ios/iphone15-bottom.png +0 -0
  28. package/assets/ios/iphone15-top.png +0 -0
  29. package/assets/ios/iphonex.iphonexs.iphone11pro-bottom.png +0 -0
  30. package/assets/ios/iphonex.iphonexs.iphone11pro-top.png +0 -0
  31. package/assets/ios/iphonexr.iphone11-bottom.png +0 -0
  32. package/assets/ios/iphonexr.iphone11-top.png +0 -0
  33. package/assets/ios/iphonexsmax-bottom.png +0 -0
  34. package/assets/ios/iphonexsmax-top.png +0 -0
  35. package/dist/base.d.ts +18 -0
  36. package/dist/base.d.ts.map +1 -0
  37. package/dist/base.interfaces.d.ts +200 -0
  38. package/dist/base.interfaces.d.ts.map +1 -0
  39. package/dist/base.interfaces.js +1 -0
  40. package/dist/base.js +58 -0
  41. package/dist/base.test.d.ts +2 -0
  42. package/dist/base.test.d.ts.map +1 -0
  43. package/dist/base.test.js +45 -0
  44. package/dist/clientSideScripts/checkMetaTag.d.ts +2 -0
  45. package/dist/clientSideScripts/checkMetaTag.d.ts.map +1 -0
  46. package/dist/clientSideScripts/checkMetaTag.js +9 -0
  47. package/dist/clientSideScripts/checkMetaTag.test.d.ts +2 -0
  48. package/dist/clientSideScripts/checkMetaTag.test.d.ts.map +1 -0
  49. package/dist/clientSideScripts/checkMetaTag.test.js +25 -0
  50. package/dist/clientSideScripts/customCss.interfaces.d.ts +8 -0
  51. package/dist/clientSideScripts/customCss.interfaces.d.ts.map +1 -0
  52. package/dist/clientSideScripts/customCss.interfaces.js +1 -0
  53. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts +8 -0
  54. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts.map +1 -0
  55. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts +4 -0
  56. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts.map +1 -0
  57. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.js +1 -0
  58. package/dist/clientSideScripts/drawTabbableOnCanvas.js +275 -0
  59. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts +2 -0
  60. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts.map +1 -0
  61. package/dist/clientSideScripts/drawTabbableOnCanvas.test.js +251 -0
  62. package/dist/clientSideScripts/elementPosition.interfaces.d.ts +3 -0
  63. package/dist/clientSideScripts/elementPosition.interfaces.d.ts.map +1 -0
  64. package/dist/clientSideScripts/elementPosition.interfaces.js +1 -0
  65. package/dist/clientSideScripts/getBoundingClientRect.d.ts +6 -0
  66. package/dist/clientSideScripts/getBoundingClientRect.d.ts.map +1 -0
  67. package/dist/clientSideScripts/getBoundingClientRect.js +12 -0
  68. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts +2 -0
  69. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts.map +1 -0
  70. package/dist/clientSideScripts/getBoundingClientRect.test.js +28 -0
  71. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts +5 -0
  72. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts.map +1 -0
  73. package/dist/clientSideScripts/getDocumentScrollHeight.js +48 -0
  74. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts +2 -0
  75. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts.map +1 -0
  76. package/dist/clientSideScripts/getDocumentScrollHeight.test.js +30 -0
  77. package/dist/clientSideScripts/getElementPositionTopDom.d.ts +6 -0
  78. package/dist/clientSideScripts/getElementPositionTopDom.d.ts.map +1 -0
  79. package/dist/clientSideScripts/getElementPositionTopDom.js +11 -0
  80. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts +2 -0
  81. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts.map +1 -0
  82. package/dist/clientSideScripts/getElementPositionTopDom.test.js +11 -0
  83. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts +14 -0
  84. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts.map +1 -0
  85. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.js +19 -0
  86. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts +2 -0
  87. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts.map +1 -0
  88. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.js +52 -0
  89. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts +6 -0
  90. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts.map +1 -0
  91. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.js +17 -0
  92. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts +2 -0
  93. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts.map +1 -0
  94. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.js +47 -0
  95. package/dist/clientSideScripts/getScreenDimensions.d.ts +6 -0
  96. package/dist/clientSideScripts/getScreenDimensions.d.ts.map +1 -0
  97. package/dist/clientSideScripts/getScreenDimensions.js +104 -0
  98. package/dist/clientSideScripts/getScreenDimensions.test.d.ts +2 -0
  99. package/dist/clientSideScripts/getScreenDimensions.test.d.ts.map +1 -0
  100. package/dist/clientSideScripts/getScreenDimensions.test.js +161 -0
  101. package/dist/clientSideScripts/hideRemoveElements.d.ts +8 -0
  102. package/dist/clientSideScripts/hideRemoveElements.d.ts.map +1 -0
  103. package/dist/clientSideScripts/hideRemoveElements.js +60 -0
  104. package/dist/clientSideScripts/hideRemoveElements.test.d.ts +2 -0
  105. package/dist/clientSideScripts/hideRemoveElements.test.d.ts.map +1 -0
  106. package/dist/clientSideScripts/hideRemoveElements.test.js +199 -0
  107. package/dist/clientSideScripts/hideScrollbars.d.ts +9 -0
  108. package/dist/clientSideScripts/hideScrollbars.d.ts.map +1 -0
  109. package/dist/clientSideScripts/hideScrollbars.js +15 -0
  110. package/dist/clientSideScripts/hideScrollbars.test.d.ts +2 -0
  111. package/dist/clientSideScripts/hideScrollbars.test.d.ts.map +1 -0
  112. package/dist/clientSideScripts/hideScrollbars.test.js +12 -0
  113. package/dist/clientSideScripts/injectWebviewOverlay.d.ts +5 -0
  114. package/dist/clientSideScripts/injectWebviewOverlay.d.ts.map +1 -0
  115. package/dist/clientSideScripts/injectWebviewOverlay.js +35 -0
  116. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts +2 -0
  117. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts.map +1 -0
  118. package/dist/clientSideScripts/injectWebviewOverlay.test.js +74 -0
  119. package/dist/clientSideScripts/removeElementFromDom.d.ts +5 -0
  120. package/dist/clientSideScripts/removeElementFromDom.d.ts.map +1 -0
  121. package/dist/clientSideScripts/removeElementFromDom.js +9 -0
  122. package/dist/clientSideScripts/removeElementFromDom.test.d.ts +2 -0
  123. package/dist/clientSideScripts/removeElementFromDom.test.d.ts.map +1 -0
  124. package/dist/clientSideScripts/removeElementFromDom.test.js +43 -0
  125. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts +96 -0
  126. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts.map +1 -0
  127. package/dist/clientSideScripts/screenDimensions.interfaces.js +1 -0
  128. package/dist/clientSideScripts/scrollElementIntoView.d.ts +5 -0
  129. package/dist/clientSideScripts/scrollElementIntoView.d.ts.map +1 -0
  130. package/dist/clientSideScripts/scrollElementIntoView.js +31 -0
  131. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts +2 -0
  132. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts.map +1 -0
  133. package/dist/clientSideScripts/scrollElementIntoView.test.js +79 -0
  134. package/dist/clientSideScripts/scrollToPosition.d.ts +5 -0
  135. package/dist/clientSideScripts/scrollToPosition.d.ts.map +1 -0
  136. package/dist/clientSideScripts/scrollToPosition.js +25 -0
  137. package/dist/clientSideScripts/scrollToPosition.test.d.ts +2 -0
  138. package/dist/clientSideScripts/scrollToPosition.test.d.ts.map +1 -0
  139. package/dist/clientSideScripts/scrollToPosition.test.js +72 -0
  140. package/dist/clientSideScripts/setCustomCss.d.ts +6 -0
  141. package/dist/clientSideScripts/setCustomCss.d.ts.map +1 -0
  142. package/dist/clientSideScripts/setCustomCss.js +36 -0
  143. package/dist/clientSideScripts/setCustomCss.test.d.ts +2 -0
  144. package/dist/clientSideScripts/setCustomCss.test.d.ts.map +1 -0
  145. package/dist/clientSideScripts/setCustomCss.test.js +68 -0
  146. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts +11 -0
  147. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts.map +1 -0
  148. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.js +1 -0
  149. package/dist/clientSideScripts/toggleTextTransparency.d.ts +5 -0
  150. package/dist/clientSideScripts/toggleTextTransparency.d.ts.map +1 -0
  151. package/dist/clientSideScripts/toggleTextTransparency.js +16 -0
  152. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts +2 -0
  153. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts.map +1 -0
  154. package/dist/clientSideScripts/toggleTextTransparency.test.js +35 -0
  155. package/dist/clientSideScripts/waitForFonts.d.ts +8 -0
  156. package/dist/clientSideScripts/waitForFonts.d.ts.map +1 -0
  157. package/dist/clientSideScripts/waitForFonts.js +20 -0
  158. package/dist/clientSideScripts/waitForFonts.test.d.ts +2 -0
  159. package/dist/clientSideScripts/waitForFonts.test.d.ts.map +1 -0
  160. package/dist/clientSideScripts/waitForFonts.test.js +37 -0
  161. package/dist/commands/check.interfaces.d.ts +35 -0
  162. package/dist/commands/check.interfaces.d.ts.map +1 -0
  163. package/dist/commands/check.interfaces.js +1 -0
  164. package/dist/commands/checkAppElement.d.ts +7 -0
  165. package/dist/commands/checkAppElement.d.ts.map +1 -0
  166. package/dist/commands/checkAppElement.js +44 -0
  167. package/dist/commands/checkAppElement.test.d.ts +2 -0
  168. package/dist/commands/checkAppElement.test.d.ts.map +1 -0
  169. package/dist/commands/checkAppElement.test.js +241 -0
  170. package/dist/commands/checkAppScreen.d.ts +7 -0
  171. package/dist/commands/checkAppScreen.d.ts.map +1 -0
  172. package/dist/commands/checkAppScreen.js +73 -0
  173. package/dist/commands/checkAppScreen.test.d.ts +2 -0
  174. package/dist/commands/checkAppScreen.test.d.ts.map +1 -0
  175. package/dist/commands/checkAppScreen.test.js +295 -0
  176. package/dist/commands/checkElement.d.ts +7 -0
  177. package/dist/commands/checkElement.d.ts.map +1 -0
  178. package/dist/commands/checkElement.js +10 -0
  179. package/dist/commands/checkElement.test.d.ts +2 -0
  180. package/dist/commands/checkElement.test.d.ts.map +1 -0
  181. package/dist/commands/checkElement.test.js +66 -0
  182. package/dist/commands/checkFullPageScreen.d.ts +7 -0
  183. package/dist/commands/checkFullPageScreen.d.ts.map +1 -0
  184. package/dist/commands/checkFullPageScreen.js +56 -0
  185. package/dist/commands/checkFullPageScreen.test.d.ts +2 -0
  186. package/dist/commands/checkFullPageScreen.test.d.ts.map +1 -0
  187. package/dist/commands/checkFullPageScreen.test.js +259 -0
  188. package/dist/commands/checkScreen.d.ts +7 -0
  189. package/dist/commands/checkScreen.d.ts.map +1 -0
  190. package/dist/commands/checkScreen.js +10 -0
  191. package/dist/commands/checkScreen.test.d.ts +2 -0
  192. package/dist/commands/checkScreen.test.d.ts.map +1 -0
  193. package/dist/commands/checkScreen.test.js +62 -0
  194. package/dist/commands/checkTabbablePage.d.ts +7 -0
  195. package/dist/commands/checkTabbablePage.d.ts.map +1 -0
  196. package/dist/commands/checkTabbablePage.js +28 -0
  197. package/dist/commands/checkTabbablePage.test.d.ts +2 -0
  198. package/dist/commands/checkTabbablePage.test.d.ts.map +1 -0
  199. package/dist/commands/checkTabbablePage.test.js +200 -0
  200. package/dist/commands/checkWebElement.d.ts +7 -0
  201. package/dist/commands/checkWebElement.d.ts.map +1 -0
  202. package/dist/commands/checkWebElement.js +52 -0
  203. package/dist/commands/checkWebElement.test.d.ts +2 -0
  204. package/dist/commands/checkWebElement.test.d.ts.map +1 -0
  205. package/dist/commands/checkWebElement.test.js +278 -0
  206. package/dist/commands/checkWebScreen.d.ts +7 -0
  207. package/dist/commands/checkWebScreen.d.ts.map +1 -0
  208. package/dist/commands/checkWebScreen.js +50 -0
  209. package/dist/commands/checkWebScreen.test.d.ts +2 -0
  210. package/dist/commands/checkWebScreen.test.d.ts.map +1 -0
  211. package/dist/commands/checkWebScreen.test.js +227 -0
  212. package/dist/commands/element.interfaces.d.ts +27 -0
  213. package/dist/commands/element.interfaces.d.ts.map +1 -0
  214. package/dist/commands/element.interfaces.js +1 -0
  215. package/dist/commands/fullPage.interfaces.d.ts +38 -0
  216. package/dist/commands/fullPage.interfaces.d.ts.map +1 -0
  217. package/dist/commands/fullPage.interfaces.js +1 -0
  218. package/dist/commands/save.interfaces.d.ts +27 -0
  219. package/dist/commands/save.interfaces.d.ts.map +1 -0
  220. package/dist/commands/save.interfaces.js +1 -0
  221. package/dist/commands/saveAppElement.d.ts +7 -0
  222. package/dist/commands/saveAppElement.d.ts.map +1 -0
  223. package/dist/commands/saveAppElement.js +30 -0
  224. package/dist/commands/saveAppElement.test.d.ts +2 -0
  225. package/dist/commands/saveAppElement.test.d.ts.map +1 -0
  226. package/dist/commands/saveAppElement.test.js +199 -0
  227. package/dist/commands/saveAppScreen.d.ts +7 -0
  228. package/dist/commands/saveAppScreen.d.ts.map +1 -0
  229. package/dist/commands/saveAppScreen.js +43 -0
  230. package/dist/commands/saveAppScreen.test.d.ts +2 -0
  231. package/dist/commands/saveAppScreen.test.d.ts.map +1 -0
  232. package/dist/commands/saveAppScreen.test.js +221 -0
  233. package/dist/commands/saveElement.d.ts +7 -0
  234. package/dist/commands/saveElement.d.ts.map +1 -0
  235. package/dist/commands/saveElement.js +10 -0
  236. package/dist/commands/saveElement.test.d.ts +2 -0
  237. package/dist/commands/saveElement.test.d.ts.map +1 -0
  238. package/dist/commands/saveElement.test.js +62 -0
  239. package/dist/commands/saveFullPageScreen.d.ts +7 -0
  240. package/dist/commands/saveFullPageScreen.d.ts.map +1 -0
  241. package/dist/commands/saveFullPageScreen.js +60 -0
  242. package/dist/commands/saveFullPageScreen.test.d.ts +2 -0
  243. package/dist/commands/saveFullPageScreen.test.d.ts.map +1 -0
  244. package/dist/commands/saveFullPageScreen.test.js +293 -0
  245. package/dist/commands/saveScreen.d.ts +7 -0
  246. package/dist/commands/saveScreen.d.ts.map +1 -0
  247. package/dist/commands/saveScreen.js +10 -0
  248. package/dist/commands/saveScreen.test.d.ts +2 -0
  249. package/dist/commands/saveScreen.test.d.ts.map +1 -0
  250. package/dist/commands/saveScreen.test.js +47 -0
  251. package/dist/commands/saveTabbablePage.d.ts +7 -0
  252. package/dist/commands/saveTabbablePage.d.ts.map +1 -0
  253. package/dist/commands/saveTabbablePage.js +20 -0
  254. package/dist/commands/saveTabbablePage.test.d.ts +2 -0
  255. package/dist/commands/saveTabbablePage.test.d.ts.map +1 -0
  256. package/dist/commands/saveTabbablePage.test.js +74 -0
  257. package/dist/commands/saveWebElement.d.ts +7 -0
  258. package/dist/commands/saveWebElement.d.ts.map +1 -0
  259. package/dist/commands/saveWebElement.js +53 -0
  260. package/dist/commands/saveWebElement.test.d.ts +2 -0
  261. package/dist/commands/saveWebElement.test.d.ts.map +1 -0
  262. package/dist/commands/saveWebElement.test.js +253 -0
  263. package/dist/commands/saveWebScreen.d.ts +7 -0
  264. package/dist/commands/saveWebScreen.d.ts.map +1 -0
  265. package/dist/commands/saveWebScreen.js +48 -0
  266. package/dist/commands/saveWebScreen.test.d.ts +2 -0
  267. package/dist/commands/saveWebScreen.test.d.ts.map +1 -0
  268. package/dist/commands/saveWebScreen.test.js +222 -0
  269. package/dist/commands/screen.interfaces.d.ts +16 -0
  270. package/dist/commands/screen.interfaces.d.ts.map +1 -0
  271. package/dist/commands/screen.interfaces.js +1 -0
  272. package/dist/commands/tabbable.interfaces.d.ts +29 -0
  273. package/dist/commands/tabbable.interfaces.d.ts.map +1 -0
  274. package/dist/commands/tabbable.interfaces.js +1 -0
  275. package/dist/helpers/afterScreenshot.d.ts +7 -0
  276. package/dist/helpers/afterScreenshot.d.ts.map +1 -0
  277. package/dist/helpers/afterScreenshot.interfaces.d.ts +46 -0
  278. package/dist/helpers/afterScreenshot.interfaces.d.ts.map +1 -0
  279. package/dist/helpers/afterScreenshot.interfaces.js +1 -0
  280. package/dist/helpers/afterScreenshot.js +55 -0
  281. package/dist/helpers/afterScreenshot.test.d.ts +2 -0
  282. package/dist/helpers/afterScreenshot.test.d.ts.map +1 -0
  283. package/dist/helpers/afterScreenshot.test.js +241 -0
  284. package/dist/helpers/beforeScreenshot.d.ts +6 -0
  285. package/dist/helpers/beforeScreenshot.d.ts.map +1 -0
  286. package/dist/helpers/beforeScreenshot.interfaces.d.ts +15 -0
  287. package/dist/helpers/beforeScreenshot.interfaces.d.ts.map +1 -0
  288. package/dist/helpers/beforeScreenshot.interfaces.js +1 -0
  289. package/dist/helpers/beforeScreenshot.js +79 -0
  290. package/dist/helpers/beforeScreenshot.test.d.ts +2 -0
  291. package/dist/helpers/beforeScreenshot.test.d.ts.map +1 -0
  292. package/dist/helpers/beforeScreenshot.test.js +261 -0
  293. package/dist/helpers/compare.interfaces.d.ts +16 -0
  294. package/dist/helpers/compare.interfaces.d.ts.map +1 -0
  295. package/dist/helpers/compare.interfaces.js +1 -0
  296. package/dist/helpers/constants.d.ts +108 -0
  297. package/dist/helpers/constants.d.ts.map +1 -0
  298. package/dist/helpers/constants.interfaces.d.ts +30 -0
  299. package/dist/helpers/constants.interfaces.d.ts.map +1 -0
  300. package/dist/helpers/constants.interfaces.js +11 -0
  301. package/dist/helpers/constants.js +436 -0
  302. package/dist/helpers/options.d.ts +64 -0
  303. package/dist/helpers/options.d.ts.map +1 -0
  304. package/dist/helpers/options.interfaces.d.ts +363 -0
  305. package/dist/helpers/options.interfaces.d.ts.map +1 -0
  306. package/dist/helpers/options.interfaces.js +1 -0
  307. package/dist/helpers/options.js +184 -0
  308. package/dist/helpers/options.test.d.ts +2 -0
  309. package/dist/helpers/options.test.d.ts.map +1 -0
  310. package/dist/helpers/options.test.js +428 -0
  311. package/dist/helpers/utils.d.ts +134 -0
  312. package/dist/helpers/utils.d.ts.map +1 -0
  313. package/dist/helpers/utils.interfaces.d.ts +254 -0
  314. package/dist/helpers/utils.interfaces.d.ts.map +1 -0
  315. package/dist/helpers/utils.interfaces.js +1 -0
  316. package/dist/helpers/utils.js +566 -0
  317. package/dist/helpers/utils.test.d.ts +2 -0
  318. package/dist/helpers/utils.test.d.ts.map +1 -0
  319. package/dist/helpers/utils.test.js +900 -0
  320. package/dist/index.d.ts +26 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +18 -0
  323. package/dist/methods/compareReport.interfaces.d.ts +109 -0
  324. package/dist/methods/compareReport.interfaces.d.ts.map +1 -0
  325. package/dist/methods/compareReport.interfaces.js +1 -0
  326. package/dist/methods/createCompareReport.d.ts +7 -0
  327. package/dist/methods/createCompareReport.d.ts.map +1 -0
  328. package/dist/methods/createCompareReport.js +61 -0
  329. package/dist/methods/createCompareReport.test.d.ts +2 -0
  330. package/dist/methods/createCompareReport.test.d.ts.map +1 -0
  331. package/dist/methods/createCompareReport.test.js +236 -0
  332. package/dist/methods/elementPosition.d.ts +18 -0
  333. package/dist/methods/elementPosition.d.ts.map +1 -0
  334. package/dist/methods/elementPosition.interfaces.d.ts +14 -0
  335. package/dist/methods/elementPosition.interfaces.d.ts.map +1 -0
  336. package/dist/methods/elementPosition.interfaces.js +1 -0
  337. package/dist/methods/elementPosition.js +34 -0
  338. package/dist/methods/images.d.ts +69 -0
  339. package/dist/methods/images.d.ts.map +1 -0
  340. package/dist/methods/images.executeImageCompare.test.d.ts +2 -0
  341. package/dist/methods/images.executeImageCompare.test.d.ts.map +1 -0
  342. package/dist/methods/images.executeImageCompare.test.js +770 -0
  343. package/dist/methods/images.interfaces.d.ts +214 -0
  344. package/dist/methods/images.interfaces.d.ts.map +1 -0
  345. package/dist/methods/images.interfaces.js +1 -0
  346. package/dist/methods/images.js +428 -0
  347. package/dist/methods/images.test.d.ts +2 -0
  348. package/dist/methods/images.test.d.ts.map +1 -0
  349. package/dist/methods/images.test.js +1465 -0
  350. package/dist/methods/instanceData.d.ts +6 -0
  351. package/dist/methods/instanceData.d.ts.map +1 -0
  352. package/dist/methods/instanceData.interfaces.d.ts +57 -0
  353. package/dist/methods/instanceData.interfaces.d.ts.map +1 -0
  354. package/dist/methods/instanceData.interfaces.js +1 -0
  355. package/dist/methods/instanceData.js +42 -0
  356. package/dist/methods/instanceData.test.d.ts +2 -0
  357. package/dist/methods/instanceData.test.d.ts.map +1 -0
  358. package/dist/methods/instanceData.test.js +224 -0
  359. package/dist/methods/processDiffPixels.d.ts +59 -0
  360. package/dist/methods/processDiffPixels.d.ts.map +1 -0
  361. package/dist/methods/processDiffPixels.js +242 -0
  362. package/dist/methods/processDiffPixels.test.d.ts +2 -0
  363. package/dist/methods/processDiffPixels.test.d.ts.map +1 -0
  364. package/dist/methods/processDiffPixels.test.js +122 -0
  365. package/dist/methods/rectangles.d.ts +51 -0
  366. package/dist/methods/rectangles.d.ts.map +1 -0
  367. package/dist/methods/rectangles.interfaces.d.ts +146 -0
  368. package/dist/methods/rectangles.interfaces.d.ts.map +1 -0
  369. package/dist/methods/rectangles.interfaces.js +1 -0
  370. package/dist/methods/rectangles.js +266 -0
  371. package/dist/methods/rectangles.test.d.ts +2 -0
  372. package/dist/methods/rectangles.test.d.ts.map +1 -0
  373. package/dist/methods/rectangles.test.js +853 -0
  374. package/dist/methods/screenshots.d.ts +37 -0
  375. package/dist/methods/screenshots.d.ts.map +1 -0
  376. package/dist/methods/screenshots.interfaces.d.ts +203 -0
  377. package/dist/methods/screenshots.interfaces.d.ts.map +1 -0
  378. package/dist/methods/screenshots.interfaces.js +1 -0
  379. package/dist/methods/screenshots.js +394 -0
  380. package/dist/methods/screenshots.test.d.ts +2 -0
  381. package/dist/methods/screenshots.test.d.ts.map +1 -0
  382. package/dist/methods/screenshots.test.js +656 -0
  383. package/dist/methods/takeElementScreenshots.d.ts +3 -0
  384. package/dist/methods/takeElementScreenshots.d.ts.map +1 -0
  385. package/dist/methods/takeElementScreenshots.js +104 -0
  386. package/dist/methods/takeElementScreenshots.test.d.ts +2 -0
  387. package/dist/methods/takeElementScreenshots.test.d.ts.map +1 -0
  388. package/dist/methods/takeElementScreenshots.test.js +314 -0
  389. package/dist/methods/takeFullPageScreenshots.d.ts +3 -0
  390. package/dist/methods/takeFullPageScreenshots.d.ts.map +1 -0
  391. package/dist/methods/takeFullPageScreenshots.js +56 -0
  392. package/dist/methods/takeFullPageScreenshots.test.d.ts +2 -0
  393. package/dist/methods/takeFullPageScreenshots.test.d.ts.map +1 -0
  394. package/dist/methods/takeFullPageScreenshots.test.js +72 -0
  395. package/dist/methods/takeWebScreenshots.d.ts +3 -0
  396. package/dist/methods/takeWebScreenshots.d.ts.map +1 -0
  397. package/dist/methods/takeWebScreenshots.js +41 -0
  398. package/dist/methods/takeWebScreenshots.test.d.ts +2 -0
  399. package/dist/methods/takeWebScreenshots.test.d.ts.map +1 -0
  400. package/dist/methods/takeWebScreenshots.test.js +149 -0
  401. package/dist/mocks/image.d.ts +4 -0
  402. package/dist/mocks/image.d.ts.map +1 -0
  403. package/dist/mocks/image.js +3 -0
  404. package/dist/mocks/mocks.d.ts +745 -0
  405. package/dist/mocks/mocks.d.ts.map +1 -0
  406. package/dist/mocks/mocks.js +392 -0
  407. package/dist/resemble/compare.interfaces.d.ts +136 -0
  408. package/dist/resemble/compare.interfaces.d.ts.map +1 -0
  409. package/dist/resemble/compare.interfaces.js +1 -0
  410. package/dist/resemble/compareImages.d.ts +3 -0
  411. package/dist/resemble/compareImages.d.ts.map +1 -0
  412. package/dist/resemble/compareImages.js +21 -0
  413. package/dist/resemble/resemble.jimp.cjs +981 -0
  414. package/dist/resemble/resemble.jimp.d.cts +46 -0
  415. package/dist/resemble/resemble.jimp.d.cts.map +1 -0
  416. package/package.json +47 -0
@@ -0,0 +1,199 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect } from 'vitest';
3
+ import hideRemoveElements from './hideRemoveElements.js';
4
+ describe('hideRemoveElements', () => {
5
+ it('should be able to hide elements and put them back again', () => {
6
+ document.body.innerHTML =
7
+ '<div>' +
8
+ ' <span id="id-1">Hello</span>' +
9
+ ' <span id="id-2">Hello</span>' +
10
+ ' <div>' +
11
+ ' <span id="id-3">Hello</span>' +
12
+ ' <span id="id-4">Hello</span>' +
13
+ ' </div>' +
14
+ '</div>';
15
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
16
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
17
+ hideRemoveElements({
18
+ hide: [document.querySelector('#id-1'), document.querySelector('#id-3')],
19
+ remove: [],
20
+ }, true);
21
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
22
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
23
+ hideRemoveElements({
24
+ hide: [document.querySelector('#id-1'), document.querySelector('#id-3')],
25
+ remove: [],
26
+ }, false);
27
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
28
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
29
+ });
30
+ it('should be able to hide elements and put them back again when an array of hidden elements is provided', () => {
31
+ document.body.innerHTML =
32
+ '<div>' +
33
+ ' <span class="hide">Hello</span>' +
34
+ ' <span class="hide">Hello</span>' +
35
+ ' <div>' +
36
+ ' <span id="id-3">Hello</span>' +
37
+ ' <span class="hide">Hello</span>' +
38
+ ' </div>' +
39
+ '</div>';
40
+ expect(document.querySelectorAll('.hide')[0].style.visibility).toMatchSnapshot();
41
+ expect(document.querySelectorAll('.hide')[1].style.visibility).toMatchSnapshot();
42
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
43
+ expect(document.querySelectorAll('.hide')[2].style.visibility).toMatchSnapshot();
44
+ hideRemoveElements({
45
+ hide: [[...document.querySelectorAll('.hide')]],
46
+ remove: [],
47
+ }, true);
48
+ expect(document.querySelectorAll('.hide')[0].style.visibility).toMatchSnapshot();
49
+ expect(document.querySelectorAll('.hide')[1].style.visibility).toMatchSnapshot();
50
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
51
+ expect(document.querySelectorAll('.hide')[2].style.visibility).toMatchSnapshot();
52
+ hideRemoveElements({
53
+ hide: [[...document.querySelectorAll('.hide')]],
54
+ remove: [],
55
+ }, false);
56
+ expect(document.querySelectorAll('.hide')[0].style.visibility).toMatchSnapshot();
57
+ expect(document.querySelectorAll('.hide')[1].style.visibility).toMatchSnapshot();
58
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
59
+ expect(document.querySelectorAll('.hide')[2].style.visibility).toMatchSnapshot();
60
+ });
61
+ it('should be able to remove elements and put them back again', () => {
62
+ document.body.innerHTML =
63
+ '<div>' +
64
+ ' <span id="id-1">Hello</span>' +
65
+ ' <span id="id-2">Hello</span>' +
66
+ ' <div>' +
67
+ ' <span id="id-3">Hello</span>' +
68
+ ' <span id="id-4">Hello</span>' +
69
+ ' </div>' +
70
+ '</div>';
71
+ expect(document.querySelector('#id-2').style.display).toMatchSnapshot();
72
+ expect(document.querySelector('#id-4').style.display).toMatchSnapshot();
73
+ hideRemoveElements({
74
+ hide: [],
75
+ remove: [document.querySelector('#id-2'), document.querySelector('#id-4')],
76
+ }, true);
77
+ expect(document.querySelector('#id-2').style.display).toMatchSnapshot();
78
+ expect(document.querySelector('#id-4').style.display).toMatchSnapshot();
79
+ hideRemoveElements({
80
+ remove: [document.querySelector('#id-2'), document.querySelector('#id-4')],
81
+ hide: [],
82
+ }, false);
83
+ expect(document.querySelector('#id-2').style.display).toMatchSnapshot();
84
+ expect(document.querySelector('#id-4').style.display).toMatchSnapshot();
85
+ });
86
+ it('should be able to remove elements and put them back again when an array of to be removed elements is provided', () => {
87
+ document.body.innerHTML =
88
+ '<div>' +
89
+ ' <span class="remove">Hello</span>' +
90
+ ' <span class="remove">Hello</span>' +
91
+ ' <div>' +
92
+ ' <span id="id-3">Hello</span>' +
93
+ ' <span class="remove">Hello</span>' +
94
+ ' </div>' +
95
+ '</div>';
96
+ expect(document.querySelectorAll('.remove')[0].style.display).toMatchSnapshot();
97
+ expect(document.querySelectorAll('.remove')[1].style.display).toMatchSnapshot();
98
+ expect(document.querySelector('#id-3').style.display).toMatchSnapshot();
99
+ expect(document.querySelectorAll('.remove')[2].style.display).toMatchSnapshot();
100
+ hideRemoveElements({
101
+ remove: [[...document.querySelectorAll('.remove')]],
102
+ hide: [],
103
+ }, true);
104
+ expect(document.querySelectorAll('.remove')[0].style.display).toMatchSnapshot();
105
+ expect(document.querySelectorAll('.remove')[1].style.display).toMatchSnapshot();
106
+ expect(document.querySelector('#id-3').style.display).toMatchSnapshot();
107
+ expect(document.querySelectorAll('.remove')[2].style.display).toMatchSnapshot();
108
+ hideRemoveElements({
109
+ remove: [[...document.querySelectorAll('.remove')]],
110
+ hide: [],
111
+ }, false);
112
+ expect(document.querySelectorAll('.remove')[0].style.display).toMatchSnapshot();
113
+ expect(document.querySelectorAll('.remove')[1].style.display).toMatchSnapshot();
114
+ expect(document.querySelector('#id-3').style.display).toMatchSnapshot();
115
+ expect(document.querySelectorAll('.remove')[2].style.display).toMatchSnapshot();
116
+ });
117
+ it('should be able to find and hide single element based on xpath', () => {
118
+ document.body.innerHTML =
119
+ '<div>' +
120
+ ' <span id="id-1">Hello</span>' +
121
+ ' <span id="id-2">Hello</span>' +
122
+ ' <div>' +
123
+ ' <span id="id-3">Hello</span>' +
124
+ ' <span id="id-4">Hello</span>' +
125
+ ' </div>' +
126
+ '</div>';
127
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
128
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
129
+ hideRemoveElements({
130
+ hide: [{ selector: "//span[@id='id-1']" }, { selector: "//span[@id='id-3']" }],
131
+ remove: [],
132
+ }, true);
133
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
134
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
135
+ });
136
+ it('should be able to find and hide elements based on xpath', () => {
137
+ document.body.innerHTML =
138
+ '<div>' +
139
+ ' <span id="id-1">Hello</span>' +
140
+ ' <span id="id-2">Hello</span>' +
141
+ ' <div>' +
142
+ ' <span id="id-3">Hello</span>' +
143
+ ' <span id="id-4">Hello</span>' +
144
+ ' </div>' +
145
+ '</div>';
146
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
147
+ expect(document.querySelector('#id-2').style.visibility).toMatchSnapshot();
148
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
149
+ expect(document.querySelector('#id-4').style.visibility).toMatchSnapshot();
150
+ hideRemoveElements({
151
+ hide: [[{ selector: '//span' }]],
152
+ remove: [],
153
+ }, true);
154
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
155
+ expect(document.querySelector('#id-2').style.visibility).toMatchSnapshot();
156
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
157
+ expect(document.querySelector('#id-4').style.visibility).toMatchSnapshot();
158
+ });
159
+ it('should be able to find and hide a single element based on a css selector', () => {
160
+ document.body.innerHTML =
161
+ '<div>' +
162
+ ' <span id="id-1">Hello</span>' +
163
+ ' <span id="id-2">Hello</span>' +
164
+ ' <div>' +
165
+ ' <span id="id-3">Hello</span>' +
166
+ ' <span class="hide">Hello</span>' +
167
+ ' </div>' +
168
+ '</div>';
169
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
170
+ expect(document.querySelector('#id-2').style.visibility).toMatchSnapshot();
171
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
172
+ expect(document.querySelector('.hide').style.visibility).toMatchSnapshot();
173
+ hideRemoveElements({
174
+ hide: [{ selector: '.hide' }],
175
+ remove: [],
176
+ }, true);
177
+ expect(document.querySelector('#id-1').style.visibility).toMatchSnapshot();
178
+ expect(document.querySelector('#id-2').style.visibility).toMatchSnapshot();
179
+ expect(document.querySelector('#id-3').style.visibility).toMatchSnapshot();
180
+ expect(document.querySelector('.hide').style.visibility).toMatchSnapshot();
181
+ });
182
+ it('should be able to find and hide elements based on a css selector', () => {
183
+ document.body.innerHTML =
184
+ '<div>' +
185
+ ' <span class="hide">Hello</span>' +
186
+ ' <span class="hide">Hello</span>' +
187
+ ' <div>' +
188
+ ' <span class="hide">Hello</span>' +
189
+ ' <span class="hide">Hello</span>' +
190
+ ' </div>' +
191
+ '</div>';
192
+ expect(document.querySelectorAll('.hide')).toMatchSnapshot();
193
+ hideRemoveElements({
194
+ hide: [[{ selector: '.hide' }, { selector: '.hide' }]],
195
+ remove: [],
196
+ }, true);
197
+ expect(document.querySelectorAll('.hide')).toMatchSnapshot();
198
+ });
199
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hide the scrollbars
3
+ *
4
+ * There is a `try/catch` for this issue
5
+ * https://github.com/wswebcreation/webdriver-image-comparison/issues/30
6
+ * Some browsers don't wrap XML into a body element, so this will fail
7
+ */
8
+ export default function hideScrollBars(hide: boolean): void;
9
+ //# sourceMappingURL=hideScrollbars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hideScrollbars.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideScrollbars.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAM1D"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Hide the scrollbars
3
+ *
4
+ * There is a `try/catch` for this issue
5
+ * https://github.com/wswebcreation/webdriver-image-comparison/issues/30
6
+ * Some browsers don't wrap XML into a body element, so this will fail
7
+ */
8
+ export default function hideScrollBars(hide) {
9
+ try {
10
+ document.body.style.overflow = hide ? 'hidden' : '';
11
+ }
12
+ catch (_e) {
13
+ // Do nothing
14
+ }
15
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hideScrollbars.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hideScrollbars.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/hideScrollbars.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect } from 'vitest';
3
+ import hideScrollBars from './hideScrollbars.js';
4
+ describe('hideScrollBars', () => {
5
+ it('should be able to hide and show the scrollbars', () => {
6
+ expect(document.body.style.overflow).toMatchSnapshot();
7
+ hideScrollBars(true);
8
+ expect(document.body.style.overflow).toMatchSnapshot();
9
+ hideScrollBars(false);
10
+ expect(document.body.style.overflow).toMatchSnapshot();
11
+ });
12
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Inject an overlay on top of the webview with an event listener that stores the click position in the webview
3
+ */
4
+ export declare function injectWebviewOverlay(isAndroid: boolean): void;
5
+ //# sourceMappingURL=injectWebviewOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectWebviewOverlay.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/injectWebviewOverlay.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAkC7D"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Inject an overlay on top of the webview with an event listener that stores the click position in the webview
3
+ */
4
+ export function injectWebviewOverlay(isAndroid) {
5
+ if (document.querySelector('[data-test="ics-overlay"]')) {
6
+ return;
7
+ }
8
+ const overlay = document.createElement('div');
9
+ const dpr = isAndroid ? window.devicePixelRatio : 1;
10
+ overlay.style.cssText = `
11
+ position: fixed; top: 0; left: 0; width: 100vw;
12
+ height: ${document.documentElement.clientHeight}px;
13
+ background: rgba(255, 165, 0, 0.5); z-index: 2147483647;
14
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
15
+ color: black; font-size: 36px; font-family: Arial, sans-serif; text-align: center;`;
16
+ overlay.dataset.test = 'ics-overlay';
17
+ const textContainer = document.createElement('div');
18
+ textContainer.innerText = 'This overlay is used to determine the position of the webview.';
19
+ overlay.appendChild(textContainer);
20
+ overlay.onclick = (event) => {
21
+ const { clientX: x, clientY: y } = event;
22
+ const data = {
23
+ x: Math.round(x * dpr),
24
+ y: Math.round(y * dpr),
25
+ width: Math.round(window.innerWidth * dpr),
26
+ height: Math.round(document.documentElement.clientHeight * dpr),
27
+ };
28
+ overlay.dataset.icsWebviewData = JSON.stringify(data);
29
+ textContainer.innerHTML = `
30
+ This overlay is used to determine the position of the webview.<br>
31
+ Clicked at: X: ${data.x}, Y: ${data.y}<br/>
32
+ Dimensions: Viewport width: ${data.width}, Viewport height: ${data.height}`;
33
+ };
34
+ document.body.appendChild(overlay);
35
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=injectWebviewOverlay.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectWebviewOverlay.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/injectWebviewOverlay.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { JSDOM } from 'jsdom';
3
+ import { injectWebviewOverlay } from './injectWebviewOverlay.js';
4
+ describe('injectWebviewOverlay', () => {
5
+ beforeEach(() => {
6
+ const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
7
+ pretendToBeVisual: true,
8
+ runScripts: 'dangerously',
9
+ });
10
+ global.window = dom.window;
11
+ global.document = dom.window.document;
12
+ Object.defineProperty(document.documentElement, 'clientHeight', {
13
+ value: 800,
14
+ configurable: true,
15
+ });
16
+ Object.defineProperty(window, 'innerWidth', {
17
+ value: 400,
18
+ configurable: true,
19
+ });
20
+ Object.defineProperty(window, 'devicePixelRatio', {
21
+ value: 2,
22
+ configurable: true,
23
+ });
24
+ });
25
+ it('should inject an overlay if not already present', () => {
26
+ expect(document.querySelector('[data-test="ics-overlay"]')).toBeNull();
27
+ injectWebviewOverlay(true);
28
+ const overlay = document.querySelector('[data-test="ics-overlay"]');
29
+ expect(overlay).toBeTruthy();
30
+ expect(overlay?.tagName).toBe('DIV');
31
+ expect(overlay?.style.position).toBe('fixed');
32
+ expect(overlay?.style.height).toContain('800px');
33
+ });
34
+ it('should not inject a second overlay if one already exists', () => {
35
+ injectWebviewOverlay(true);
36
+ injectWebviewOverlay(true);
37
+ const overlays = document.querySelectorAll('[data-test="ics-overlay"]');
38
+ expect(overlays.length).toBe(1);
39
+ });
40
+ it('should store click position and dimensions in dataset on click (Android DPR)', () => {
41
+ injectWebviewOverlay(true);
42
+ const overlay = document.querySelector('[data-test="ics-overlay"]');
43
+ const event = new window.MouseEvent('click', {
44
+ clientX: 50,
45
+ clientY: 100,
46
+ bubbles: true,
47
+ });
48
+ overlay.dispatchEvent(event);
49
+ const parsedData = JSON.parse(overlay.dataset.icsWebviewData);
50
+ expect(parsedData).toEqual({
51
+ x: 100,
52
+ y: 200,
53
+ width: 800,
54
+ height: 1600,
55
+ });
56
+ });
57
+ it('should use DPR = 1 for iOS (isAndroid = false)', () => {
58
+ injectWebviewOverlay(false);
59
+ const overlay = document.querySelector('[data-test="ics-overlay"]');
60
+ const event = new window.MouseEvent('click', {
61
+ clientX: 50,
62
+ clientY: 100,
63
+ bubbles: true,
64
+ });
65
+ overlay.dispatchEvent(event);
66
+ const parsedData = JSON.parse(overlay.dataset.icsWebviewData);
67
+ expect(parsedData).toEqual({
68
+ x: 50,
69
+ y: 100,
70
+ width: 400,
71
+ height: 800,
72
+ });
73
+ });
74
+ });
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Remove a DOM element from the DOM
3
+ */
4
+ export default function removeElementFromDom(id: string): void;
5
+ //# sourceMappingURL=removeElementFromDom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeElementFromDom.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/removeElementFromDom.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK7D"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Remove a DOM element from the DOM
3
+ */
4
+ export default function removeElementFromDom(id) {
5
+ const elem = document.querySelector(`#${id}`);
6
+ if (elem) {
7
+ elem.parentNode.removeChild(elem);
8
+ }
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=removeElementFromDom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeElementFromDom.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/removeElementFromDom.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect } from 'vitest';
3
+ import removeElementFromDom from './removeElementFromDom.js';
4
+ describe('removeElementFromDom', () => {
5
+ it('should be able to remove the custom css', () => {
6
+ const id = 'test';
7
+ const cssText = 'body:{width:100%}';
8
+ const head = document.head || document.getElementsByTagName('head')[0];
9
+ const style = document.createElement('style');
10
+ style.id = id;
11
+ style.appendChild(document.createTextNode(cssText));
12
+ head.appendChild(style);
13
+ expect(document.head.textContent).toMatchSnapshot();
14
+ removeElementFromDom(id);
15
+ expect(document.head.textContent).toMatchSnapshot();
16
+ });
17
+ it('should do nothing if custom css is not present', () => {
18
+ const id = 'test';
19
+ expect(document.head.textContent).toMatchSnapshot();
20
+ removeElementFromDom(id);
21
+ expect(document.head.textContent).toMatchSnapshot();
22
+ });
23
+ it('should do nothing if document.head is null', () => {
24
+ const id = 'test';
25
+ Object.defineProperty(document, 'head', { value: null });
26
+ removeElementFromDom(id);
27
+ expect(document.head).toBe(null);
28
+ });
29
+ it('should be able to remove an element from the body', () => {
30
+ document.body.innerHTML =
31
+ '<div>' +
32
+ ' <span id="id-1">Hello</span>' +
33
+ ' <span id="id-2">Hello</span>' +
34
+ ' <div>' +
35
+ ' <span id="id-3">Hello</span>' +
36
+ ' <span id="id-4">Hello</span>' +
37
+ ' </div>' +
38
+ '</div>';
39
+ expect(document.body).toMatchSnapshot();
40
+ removeElementFromDom('id-1');
41
+ expect(document.body).toMatchSnapshot();
42
+ });
43
+ });
@@ -0,0 +1,96 @@
1
+ export interface ScreenDimensions {
2
+ dimensions: {
3
+ body: {
4
+ /**
5
+ * Mobile & Desktop: Total scrollable height of the body element, including content not visible on screen.
6
+ * Includes padding but not border, margin or horizontal scrollbar.
7
+ * Equal to clientHeight if no vertical scrolling is needed.
8
+ */
9
+ scrollHeight?: number;
10
+ /**
11
+ * Mobile & Desktop: Height of body element including padding and borders, but not margins.
12
+ * For document.body, represents total linear content height.
13
+ * Floated elements extending below other linear content are ignored.
14
+ */
15
+ offsetHeight?: number;
16
+ };
17
+ html: {
18
+ /**
19
+ * Mobile & Desktop: Viewport width excluding scrollbars.
20
+ * Includes padding but not borders, margins, or vertical scrollbars.
21
+ */
22
+ clientWidth?: number;
23
+ /**
24
+ * Mobile & Desktop: Total scrollable width including overflow content.
25
+ * Includes padding but not borders, margins, or vertical scrollbars.
26
+ * Equal to clientWidth if no horizontal scrolling is needed.
27
+ */
28
+ scrollWidth?: number;
29
+ /**
30
+ * Mobile & Desktop: Viewport height excluding scrollbars.
31
+ * Includes padding but not borders, margins, or horizontal scrollbars.
32
+ */
33
+ clientHeight?: number;
34
+ /**
35
+ * Mobile & Desktop: Total scrollable height including overflow content.
36
+ * Includes padding but not borders, margins, or horizontal scrollbars.
37
+ * Equal to clientHeight if no vertical scrolling is needed.
38
+ */
39
+ scrollHeight?: number;
40
+ /**
41
+ * Mobile & Desktop: Height of html element including padding and borders.
42
+ * For document.documentElement, represents total rendered height including overflow.
43
+ * Floated elements extending below other linear content are ignored.
44
+ */
45
+ offsetHeight?: number;
46
+ };
47
+ window: {
48
+ /**
49
+ * Mobile: Viewport width (changes with zoom)
50
+ * Desktop: Viewport width including vertical scrollbar
51
+ */
52
+ innerWidth?: number;
53
+ /**
54
+ * Mobile: Viewport height (changes with zoom)
55
+ * Desktop: Viewport height including horizontal scrollbar
56
+ */
57
+ innerHeight?: number;
58
+ /**
59
+ * Mobile: True if device is in landscape orientation
60
+ * Desktop: Based on viewport aspect ratio using matchMedia
61
+ */
62
+ isLandscape: boolean;
63
+ /**
64
+ * Mobile: Full browser width including UI elements
65
+ * Desktop: Browser window width including window chrome/borders
66
+ */
67
+ outerWidth?: number;
68
+ /**
69
+ * Mobile: Full browser height including UI elements
70
+ * Desktop: Browser window height including window chrome/borders
71
+ */
72
+ outerHeight?: number;
73
+ /**
74
+ * Mobile: Physical pixel ratio (typically >1 for high DPI screens)
75
+ * Desktop: Usually 1, or higher for high DPI displays
76
+ */
77
+ devicePixelRatio?: number;
78
+ /**
79
+ * Mobile: Always false
80
+ * Desktop: Depending if the screen is emulated to a "mobile" device
81
+ */
82
+ isEmulated: boolean;
83
+ /**
84
+ * Mobile: Physical screen width in CSS pixels
85
+ * Desktop: Monitor width in pixels
86
+ */
87
+ screenWidth?: number;
88
+ /**
89
+ * Mobile: Physical screen height in CSS pixels
90
+ * Desktop: Monitor height in pixels
91
+ */
92
+ screenHeight?: number;
93
+ };
94
+ };
95
+ }
96
+ //# sourceMappingURL=screenDimensions.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenDimensions.interfaces.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/screenDimensions.interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE;QACR,IAAI,EAAE;YACF;;;;eAIG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB;;;;eAIG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;QACF,IAAI,EAAE;YACF;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB;;;;eAIG;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB;;;eAGG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB;;;;eAIG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB;;;;eAIG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;QACF,MAAM,EAAE;YACJ;;;eAGG;YACH,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB;;;eAGG;YACH,WAAW,EAAE,OAAO,CAAC;YACrB;;;eAGG;YACH,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB;;;eAGG;YACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B;;;eAGG;YACH,UAAU,EAAE,OAAO,CAAC;YACpB;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB;;;eAGG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;SACzB,CAAC;KACL,CAAC;CACL"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Scroll the element into the top of the viewport
3
+ */
4
+ export default function scrollElementIntoView(element: HTMLElement, addressBarShadowPadding: number): number;
5
+ //# sourceMappingURL=scrollElementIntoView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollElementIntoView.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/scrollElementIntoView.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,GAAG,MAAM,CA+B3G"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Scroll the element into the top of the viewport
3
+ */
4
+ export default function scrollElementIntoView(element, addressBarShadowPadding) {
5
+ let currentPosition = 0;
6
+ const htmlNode = document.documentElement;
7
+ const bodyNode = document.body;
8
+ // Apply new global style
9
+ const styleTag = document.createElement('style');
10
+ styleTag.innerHTML = '* { scroll-behavior: unset !important; }';
11
+ document.head.appendChild(styleTag);
12
+ // Determine the current scroll position
13
+ if (htmlNode.scrollTop > 0) {
14
+ currentPosition = htmlNode.scrollTop;
15
+ }
16
+ else if (bodyNode.scrollTop > 0) {
17
+ currentPosition = bodyNode.scrollTop;
18
+ }
19
+ const { top } = element.getBoundingClientRect();
20
+ const yPosition = top - addressBarShadowPadding;
21
+ // Scroll to the position
22
+ if (htmlNode.scrollHeight > htmlNode.clientHeight) {
23
+ htmlNode.scrollTop = yPosition;
24
+ }
25
+ else if (bodyNode.scrollHeight > bodyNode.clientHeight) {
26
+ bodyNode.scrollTop = yPosition;
27
+ }
28
+ // Remove the injected style
29
+ document.head.removeChild(styleTag);
30
+ return currentPosition;
31
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scrollElementIntoView.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollElementIntoView.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/scrollElementIntoView.test.ts"],"names":[],"mappings":""}