@afixt/test-utils 2.0.0 → 2.1.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 (74) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/CLAUDE.md +1 -1
  3. package/README.md +40 -1
  4. package/docs/arrayUtils.js.html +8 -13
  5. package/docs/colorConversions.js.html +238 -0
  6. package/docs/constants.js.html +671 -0
  7. package/docs/cssUtils.js.html +80 -0
  8. package/docs/data/search.json +1 -1
  9. package/docs/domUtils.js.html +252 -32
  10. package/docs/formUtils.js.html +161 -0
  11. package/docs/getAccessibleName.js.html +215 -120
  12. package/docs/getAccessibleText.js.html +103 -48
  13. package/docs/getAriaAttributesByElement.js.html +4 -4
  14. package/docs/getCSSGeneratedContent.js.html +50 -41
  15. package/docs/getComputedRole.js.html +8 -3
  16. package/docs/getFocusableElements.js.html +25 -21
  17. package/docs/getGeneratedContent.js.html +24 -13
  18. package/docs/getImageText.js.html +31 -9
  19. package/docs/getStyleObject.js.html +7 -3
  20. package/docs/global.html +1 -1
  21. package/docs/hasAccessibleName.js.html +2 -10
  22. package/docs/hasAttribute.js.html +7 -3
  23. package/docs/hasCSSGeneratedContent.js.html +18 -14
  24. package/docs/hasHiddenParent.js.html +4 -4
  25. package/docs/hasParent.js.html +7 -3
  26. package/docs/hasValidAriaAttributes.js.html +7 -3
  27. package/docs/index.html +1 -1
  28. package/docs/index.js.html +98 -32
  29. package/docs/isA11yVisible.js.html +98 -0
  30. package/docs/isAriaAttributesValid.js.html +10 -64
  31. package/docs/isComplexTable.js.html +13 -6
  32. package/docs/isDataTable.js.html +11 -6
  33. package/docs/isFocusable.js.html +36 -12
  34. package/docs/isHidden.js.html +47 -11
  35. package/docs/isOffScreen.js.html +7 -3
  36. package/docs/isValidUrl.js.html +7 -3
  37. package/docs/listEventListeners.js.html +203 -0
  38. package/docs/module-QueryCache.html +3 -0
  39. package/docs/module-afixt-test-utils.html +1 -1
  40. package/docs/module-colorConversions.html +3 -0
  41. package/docs/module-constants.html +3 -0
  42. package/docs/module-cssUtils.html +3 -0
  43. package/docs/module-formUtils.html +3 -0
  44. package/docs/module-suggestContrast.html +3 -0
  45. package/docs/module-tableUtils.html +3 -0
  46. package/docs/queryCache.js.html +360 -0
  47. package/docs/scripts/core.js +726 -726
  48. package/docs/scripts/core.min.js +22 -22
  49. package/docs/scripts/resize.js +90 -90
  50. package/docs/scripts/search.js +265 -265
  51. package/docs/scripts/third-party/Apache-License-2.0.txt +202 -202
  52. package/docs/scripts/third-party/fuse.js +8 -8
  53. package/docs/scripts/third-party/hljs-line-num-original.js +369 -369
  54. package/docs/scripts/third-party/hljs-original.js +5171 -5171
  55. package/docs/scripts/third-party/popper.js +5 -5
  56. package/docs/scripts/third-party/tippy.js +1 -1
  57. package/docs/scripts/third-party/tocbot.js +671 -671
  58. package/docs/styles/clean-jsdoc-theme-base.css +1159 -1159
  59. package/docs/styles/clean-jsdoc-theme-dark.css +412 -412
  60. package/docs/styles/clean-jsdoc-theme-light.css +482 -482
  61. package/docs/styles/clean-jsdoc-theme-scrollbar.css +29 -29
  62. package/docs/suggestContrast.js.html +389 -0
  63. package/docs/tableUtils.js.html +151 -0
  64. package/docs/testContrast.js.html +201 -24
  65. package/docs/testLang.js.html +533 -451
  66. package/docs/testOrder.js.html +9 -4
  67. package/package.json +1 -1
  68. package/src/colorConversions.js +235 -0
  69. package/src/index.js +6 -0
  70. package/src/stringUtils.js +35 -0
  71. package/src/suggestContrast.js +386 -0
  72. package/test/colorConversions.test.js +223 -0
  73. package/test/stringUtils.test.js +60 -0
  74. package/test/suggestContrast.test.js +394 -0
package/docs/global.html CHANGED
@@ -1,3 +1,3 @@
1
1
  <!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Global</title><!--[if lt IE 9]>
2
2
  <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
3
- <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributes">getAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaRole">hasValidAriaRole</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#isVisible">isVisible</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validAriaAttributes">validAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="langCodes"><span class="type-signature">(constant) </span>langCodes<span class="type-signature"></span></h3><div class="description"><p>An array of language codes and their corresponding details. Each object in the array represents a language and contains the following properties:</p></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>alpha3</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The ISO 639-2 three-letter code for the language.</p></td></tr><tr><td class="name"><code>alpha2</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The ISO 639-1 two-letter code for the language.</p></td></tr><tr><td class="name"><code>English</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The English name of the language.</p></td></tr><tr><td class="name"><code>franc3</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The three-letter code used by the franc library, if available.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line10">line 10</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="rtls"><span class="type-signature">(constant) </span>rtls<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>An array of language codes that are written from right to left.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line492">line 492</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="validAriaAttributes"><span class="type-signature">(constant) </span>validAriaAttributes<span class="type-signature"> :Set.&lt;string></span></h3><div class="description"><p>List of valid ARIA attributes based on WAI-ARIA specification.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Set.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isAriaAttributesValid.js.html">isAriaAttributesValid.js</a>, <a href="isAriaAttributesValid.js.html#line5">line 5</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="validLangCodes"><span class="type-signature">(constant) </span>validLangCodes<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>An array of valid language codes.</p><p>This array contains ISO 639-1 language codes that are used to identify languages.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line288">line 288</a></li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="arrayCount"><span class="type-signature"></span>arrayCount<span class="signature">(array)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Get a count of each occurrence for items in an array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line29">line 29</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Object containing key/value pairs where key is array value and value is occurrence count</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="arrayRemoveByValue"><span class="type-signature"></span>arrayRemoveByValue<span class="signature">(array, value)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Remove specified items by value from an array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">String</span></td><td class="description last"><p>Value to remove</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array without the specified value</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="arrayUnique"><span class="type-signature"></span>arrayUnique<span class="signature">(array)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Reduce an array to only the unique items.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array with unique items</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="cellColorDiffs"><span class="type-signature"></span>cellColorDiffs<span class="signature">(table, maxColors, maxDiffs)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the color differences in the table cells exceed the specified limits.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to check.</p></td></tr><tr><td class="name"><code>maxColors</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The maximum number of unique colors allowed.</p></td></tr><tr><td class="name"><code>maxDiffs</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The maximum percentage difference allowed for any color.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line74">line 74</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the color differences exceed the specified limits, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="cellCount"><span class="type-signature"></span>cellCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Counts the number of cells (both</p><td>and<th>) in a given table element.<p></p></th></td></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to count cells in.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The total number of cells in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="checkInconsistent"><span class="type-signature"></span>checkInconsistent<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a table element has inconsistent row or column spans.</p><p>This function normalizes the table by removing <code>colspan</code> and <code>rowspan</code> attributes, and then checks if the number of columns is consistent across all rows.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check for inconsistencies.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line40">line 40</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns <code>true</code> if the table has inconsistent row or column spans, otherwise <code>false</code>.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="checkMultiRowsInHeader"><span class="type-signature"></span>checkMultiRowsInHeader<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given table element has multiple rows in the header.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the table has more than one row in the header, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="checkMultiRowsWithColspan"><span class="type-signature"></span>checkMultiRowsWithColspan<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given table element has multiple rows with at least one cell that has a colspan attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if there are more than one row with at least one cell having a colspan attribute, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="cleanBlank"><span class="type-signature"></span>cleanBlank<span class="signature">(obj)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Remove items from an object that do not have a value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Object to remove empty values from</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line41">line 41</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Cleaned object</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="colCount"><span class="type-signature"></span>colCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculates the average number of columns in a given HTML table.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to analyze.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line52">line 52</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The average number of columns per row in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="countBordersPct"><span class="type-signature"></span>countBordersPct<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculates the percentage of table cells that have a border.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to analyze.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line30">line 30</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The percentage of table cells that have a border.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="getAccessibleName"><span class="type-signature"></span>getAccessibleName<span class="signature">(element)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Gets the accessible name of an element according to the accessible name calculation algorithm</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to get the accessible name for</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The accessible name or false if none exists</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getAccessibleText"><span class="type-signature"></span>getAccessibleText<span class="signature">(el)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Get all accessible text for an element, including aria-labels and content from children.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleText.js.html">getAccessibleText.js</a>, <a href="getAccessibleText.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The accessible text.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getAriaAttributes"><span class="type-signature"></span>getAriaAttributes<span class="signature">(element)</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h3><div class="description"><p>Retrieves all ARIA attributes from a given DOM element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element from which to extract ARIA attributes.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAriaAttributesByElement.js.html">getAriaAttributesByElement.js</a>, <a href="getAriaAttributesByElement.js.html#line7">line 7</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>An array of ARIA attribute names present on the element.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;string></span></dd></dl></div><h3 class="name has-anchor" id="getCSSGeneratedContent"><span class="type-signature"></span>getCSSGeneratedContent<span class="signature">(el, pseudoElement<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Gets the CSS generated content for an element's ::before or ::after pseudo-elements. Unlike getGeneratedContent, this function focuses only on CSS-generated content and does not include the element's own text content.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The DOM element to check</p></td></tr><tr><td class="name"><code>pseudoElement</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'both'</td><td class="description last"><p>Which pseudo-element to check ('before', 'after', or 'both')</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getCSSGeneratedContent.js.html">getCSSGeneratedContent.js</a>, <a href="getCSSGeneratedContent.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The generated content as a string or false if none exists</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getColorContrast"><span class="type-signature"></span>getColorContrast<span class="signature">(el)</span><span class="type-signature"> &rarr; {number|boolean}</span></h3><div class="description"><p>Calculate color contrast ratio between foreground and background</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line68">line 68</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Contrast ratio or false if calculation not possible</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getComputedBackgroundColor"><span class="type-signature"></span>getComputedBackgroundColor<span class="signature">(el)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Get the computed background color for an element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>the element to be tested</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>background color or false</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getComputedRole"><span class="type-signature"></span>getComputedRole<span class="signature">(element)</span><span class="type-signature"> &rarr; {string|undefined}</span></h3><div class="description"><p>Gets the computed role of an HTML element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The HTML element to get the role for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getComputedRole.js.html">getComputedRole.js</a>, <a href="getComputedRole.js.html#line149">line 149</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The computed role of the element, or undefined if no role is found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="getFocusableElements"><span class="type-signature"></span>getFocusableElements<span class="signature">(el)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>the element to be tested</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getFocusableElements.js.html">getFocusableElements.js</a>, <a href="getFocusableElements.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array of focusable elements</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="getGeneratedContent"><span class="type-signature"></span>getGeneratedContent<span class="signature">(el)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Get the generated content for an element (<code>::before</code>, <code>::after</code>, and inner content).</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getGeneratedContent.js.html">getGeneratedContent.js</a>, <a href="getGeneratedContent.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The generated content or <code>false</code> if not available.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getImageText"><span class="type-signature"></span>getImageText<span class="signature">(imagePath)</span><span class="type-signature"> &rarr; {Promise.&lt;(string|false)>}</span></h3><div class="description"><p>Extracts text from an image using OCR.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>imagePath</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The path or URL of the image.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getImageText.js.html">getImageText.js</a>, <a href="getImageText.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Extracted text if found, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;(string|false)></span></dd></dl></div><h3 class="name has-anchor" id="getStyleObject"><span class="type-signature"></span>getStyleObject<span class="signature">(el)</span><span class="type-signature"> &rarr; {Object|boolean}</span></h3><div class="description"><p>Retrieves the computed style properties of a given DOM element and returns them as an object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element for which to retrieve the computed style properties.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getStyleObject.js.html">getStyleObject.js</a>, <a href="getStyleObject.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>An object containing the computed style properties of the element, with property names in camelCase. Returns false if the style object cannot be retrieved.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getTwoLetterCode"><span class="type-signature"></span>getTwoLetterCode<span class="signature">(threeLetterCode)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Converts a three-letter language code to a two-letter language code.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>threeLetterCode</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The three-letter language code to convert.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line501">line 501</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The corresponding two-letter language code, or false if not found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasAccessibleName"><span class="type-signature"></span>hasAccessibleName<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if an element has an accessible name</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasAccessibleName.js.html">hasAccessibleName.js</a>, <a href="hasAccessibleName.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has an accessible name, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasAttribute"><span class="type-signature"></span>hasAttribute<span class="signature">(attribute, element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a given element has a specified attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>attribute</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the attribute to check for.</p></td></tr><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check the attribute on.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasAttribute.js.html">hasAttribute.js</a>, <a href="hasAttribute.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the attribute exists on the element, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasCSSGeneratedContent"><span class="type-signature"></span>hasCSSGeneratedContent<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if an element has CSS generated content in its ::before or ::after pseudo-elements or text content.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The element to check for generated content.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasCSSGeneratedContent.js.html">hasCSSGeneratedContent.js</a>, <a href="hasCSSGeneratedContent.js.html#line11">line 11</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has any generated content, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasHiddenParent"><span class="type-signature"></span>hasHiddenParent<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given element has a hidden parent element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasHiddenParent.js.html">hasHiddenParent.js</a>, <a href="hasHiddenParent.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element has a hidden parent, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasParent"><span class="type-signature"></span>hasParent<span class="signature">(element, selectors)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given element has a parent that matches any of the selectors in the array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr><tr><td class="name"><code>selectors</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="description last"><p>An array of selectors to match against the element's parents.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasParent.js.html">hasParent.js</a>, <a href="hasParent.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element has a parent that matches any of the selectors, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasValidAriaAttributes"><span class="type-signature"></span>hasValidAriaAttributes<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if an element has any valid ARIA attributes.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasValidAriaAttributes.js.html">hasValidAriaAttributes.js</a>, <a href="hasValidAriaAttributes.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has at least one valid ARIA attribute, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasValidAriaRole"><span class="type-signature"></span>hasValidAriaRole<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given element has a valid ARIA role.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasValidAriaRole.js.html">hasValidAriaRole.js</a>, <a href="hasValidAriaRole.js.html#line7">line 7</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has a valid ARIA role, false otherwise.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isAriaAttributeValid"><span class="type-signature"></span>isAriaAttributeValid<span class="signature">(attributeName)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a specific ARIA attribute is valid according to the WAI-ARIA specification.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>attributeName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the ARIA attribute to check (e.g., 'aria-label')</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isAriaAttributesValid.js.html">isAriaAttributesValid.js</a>, <a href="isAriaAttributesValid.js.html#line68">line 68</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the attribute is a valid ARIA attribute, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isComplexTable"><span class="type-signature"></span>isComplexTable<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if a given table element is complex. A table is considered complex if it has multiple rows in the header, rows with colspan attributes, or inconsistent structure.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line97">line 97</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the table is complex, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isDataTable"><span class="type-signature"></span>isDataTable<span class="signature">(table, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if a given table element is a data table based on various heuristics and options.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The table element to evaluate.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Optional settings to override default heuristics.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>numDTColumns</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">5</td><td class="description last"><p>Minimum number of columns to consider as a data table.</p></td></tr><tr><td class="name"><code>pctCellsWBorder</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">33</td><td class="description last"><p>Minimum percentage of cells with borders to consider as a data table.</p></td></tr><tr><td class="name"><code>numDTRows</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">20</td><td class="description last"><p>Minimum number of rows to consider as a data table.</p></td></tr><tr><td class="name"><code>maxWidthLT</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">95</td><td class="description last"><p>Maximum width percentage of the viewport to consider as a data table.</p></td></tr><tr><td class="name"><code>minCellsLT</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">10</td><td class="description last"><p>Minimum number of cells to consider as a data table.</p></td></tr><tr><td class="name"><code>maxCellColors</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">3</td><td class="description last"><p>Maximum number of different cell colors to consider as a data table.</p></td></tr><tr><td class="name"><code>maxColorDiffs</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">30</td><td class="description last"><p>Maximum number of color differences to consider as a data table.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line118">line 118</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the table is considered a data table, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isFocusable"><span class="type-signature"></span>isFocusable<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if an element is focusable.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The HTML element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isFocusable.js.html">isFocusable.js</a>, <a href="isFocusable.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element is focusable, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isHidden"><span class="type-signature"></span>isHidden<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a given DOM element is hidden.</p><p>An element is considered hidden if its <code>display</code> style is set to &quot;none&quot; or if it has the <code>hidden</code> attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isHidden.js.html">isHidden.js</a>, <a href="isHidden.js.html#line11">line 11</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns <code>true</code> if the element is hidden, otherwise <code>false</code>.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isNotVisible"><span class="type-signature"></span>isNotVisible<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Helper function to check if element is NOT visible</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line385">line 385</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if element is not visible, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isOffScreen"><span class="type-signature"></span>isOffScreen<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the selected element is off-screen.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isOffScreen.js.html">isOffScreen.js</a>, <a href="isOffScreen.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>True if the element is off-screen, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidUrl"><span class="type-signature"></span>isValidUrl<span class="signature">(str)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Validate if a string is a valid URL.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>str</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The string to validate.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isValidUrl.js.html">isValidUrl.js</a>, <a href="isValidUrl.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the string is a valid URL, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isVisible"><span class="type-signature"></span>isVisible<span class="signature">(element, strict)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the selected item is visible to assistive technologies.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check.</p></td></tr><tr><td class="name"><code>strict</code></td><td class="type"><span class="param-type">boolean</span></td><td class="description last"><p>Option to be more strict about visibility of aria-hidden=&quot;true&quot; in addition to CSS display: none.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isVisible.js.html">isVisible.js</a>, <a href="isVisible.js.html#line7">line 7</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="luminance"><span class="type-signature"></span>luminance<span class="signature">(R8bit, G8bit, B8bit)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculate the luminance of an RGB color.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>R8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Red value between 0 and 255</p></td></tr><tr><td class="name"><code>G8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Green value between 0 and 255</p></td></tr><tr><td class="name"><code>B8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Blue value between 0 and 255</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line38">line 38</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>luminance value</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="matchesSelector"><span class="type-signature"></span>matchesSelector<span class="signature">(element, selector)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Helper function to check if an element matches a selector</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>Element to check</p></td></tr><tr><td class="name"><code>selector</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>CSS selector to match against</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line420">line 420</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if element matches the selector</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="parseRGB"><span class="type-signature"></span>parseRGB<span class="signature">(rgb)</span><span class="type-signature"> &rarr; {Array|null}</span></h3><div class="description"><p>Parse an RGB or RGBA color string into its components</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>rgb</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>RGB(A) color string (e.g., &quot;rgb(255, 0, 0)&quot; or &quot;rgba(255, 0, 0, 0.5)&quot;)</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line58">line 58</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of RGB(A) values or null if parsing fails</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="rowCount"><span class="type-signature"></span>rowCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Returns the number of rows in the given table element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to count rows in.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The number of rows in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="sortByVisualOrder"><span class="type-signature"></span>sortByVisualOrder<span class="signature">(a, b)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>a</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>First element to compare</p></td></tr><tr><td class="name"><code>b</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>Second element to compare</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testOrder.js.html">testOrder.js</a>, <a href="testOrder.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Sorting order based on visual position</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="strlen"><span class="type-signature"></span>strlen<span class="signature">(str)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Get the length of a trimmed string, or return 0 if not a valid string</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>str</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The string to measure</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line441">line 441</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The string length or 0</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="testContrast"><span class="type-signature"></span>testContrast<span class="signature">(el, options)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Test if an element meets WCAG color contrast requirements</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to test</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Configuration options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>level</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>WCAG level to test against ('AA' or 'AAA')</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line118">line 118</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if contrast requirements are met, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="testLang"><span class="type-signature"></span>testLang<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests the language of an HTML element against its content.</p><p>This function checks the <code>lang</code> or <code>xml:lang</code> attribute of the given element and its ancestors to determine the language. It then uses the <code>franc</code> library to detect the language of the element's text content and compares it to the language attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The HTML element to test.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line525">line 525</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns <code>true</code> if the detected language matches the language attribute or if the detected language is undefined (&quot;und&quot;). Otherwise, returns <code>false</code>.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="testOrder"><span class="type-signature"></span>testOrder<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The container element to test focus order</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testOrder.js.html">testOrder.js</a>, <a href="testOrder.js.html#line24">line 24</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>True if the focus order matches visual order</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributes">getAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaRole">hasValidAriaRole</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#isVisible">isVisible</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validAriaAttributes">validAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
3
+ <![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-QueryCache.html">QueryCache</a></div><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div><div class="sidebar-section-children"><a href="module-colorConversions.html">colorConversions</a></div><div class="sidebar-section-children"><a href="module-constants.html">constants</a></div><div class="sidebar-section-children"><a href="module-cssUtils.html">cssUtils</a></div><div class="sidebar-section-children"><a href="module-formUtils.html">formUtils</a></div><div class="sidebar-section-children"><a href="module-suggestContrast.html">suggestContrast</a></div><div class="sidebar-section-children"><a href="module-tableUtils.html">tableUtils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#RTL_LANGUAGES">RTL_LANGUAGES</a></div><div class="sidebar-section-children"><a href="global.html#_internal">_internal</a></div><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#collectSubtreeText">collectSubtreeText</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#extractMeaningfulContent">extractMeaningfulContent</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributesByElement">getAriaAttributesByElement</a></div><div class="sidebar-section-children"><a href="global.html#getAttributeHandlers">getAttributeHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getContrastRatio">getContrastRatio</a></div><div class="sidebar-section-children"><a href="global.html#getEffectiveDir">getEffectiveDir</a></div><div class="sidebar-section-children"><a href="global.html#getEventListeners">getEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getPropertyHandlers">getPropertyHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getRelativeLuminance">getRelativeLuminance</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasBackgroundImage">hasBackgroundImage</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#isA11yVisible">isA11yVisible</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isRTLLanguage">isRTLLanguage</a></div><div class="sidebar-section-children"><a href="global.html#isValidLanguageCode">isValidLanguageCode</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#listEventListeners">listEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseColor">parseColor</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><article><div class="container-overview"></div><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="RTL_LANGUAGES"><span class="type-signature">(constant) </span>RTL_LANGUAGES<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>ISO 639-1 codes for right-to-left languages (comprehensive list).</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line580">line 580</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="_internal"><span class="type-signature">(private, constant) </span>_internal<span class="type-signature"></span></h3><div class="description"><p>Internal reference to Tesseract.recognize, exposed for test mocking.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getImageText.js.html">getImageText.js</a>, <a href="getImageText.js.html#line7">line 7</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="langCodes"><span class="type-signature">(constant) </span>langCodes<span class="type-signature"></span></h3><div class="description"><p>An array of language codes and their corresponding details. Each object in the array represents a language and contains the following properties:</p></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>alpha3</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The ISO 639-2 three-letter code for the language.</p></td></tr><tr><td class="name"><code>alpha2</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The ISO 639-1 two-letter code for the language.</p></td></tr><tr><td class="name"><code>English</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The English name of the language.</p></td></tr><tr><td class="name"><code>franc3</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The three-letter code used by the franc library, if available.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line12">line 12</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="rtls"><span class="type-signature">(constant) </span>rtls<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>An array of language codes that are written from right to left.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line493">line 493</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="validLangCodes"><span class="type-signature">(constant) </span>validLangCodes<span class="type-signature"> :Array.&lt;string></span></h3><div class="description"><p>An array of valid language codes.</p><p>This array contains ISO 639-1 language codes that are used to identify languages.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">Array.&lt;string></span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line289">line 289</a></li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="arrayCount"><span class="type-signature"></span>arrayCount<span class="signature">(array)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Get a count of each occurrence for items in an array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line29">line 29</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Object containing key/value pairs where key is array value and value is occurrence count</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="arrayRemoveByValue"><span class="type-signature"></span>arrayRemoveByValue<span class="signature">(array, value)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Remove specified items by value from an array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">String</span></td><td class="description last"><p>Value to remove</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array without the specified value</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="arrayUnique"><span class="type-signature"></span>arrayUnique<span class="signature">(array)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Reduce an array to only the unique items.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>array</code></td><td class="type"><span class="param-type">Array</span></td><td class="description last"><p>Array of items</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array with unique items</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="cellColorDiffs"><span class="type-signature"></span>cellColorDiffs<span class="signature">(table, maxColors, maxDiffs)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the color differences in the table cells exceed the specified limits.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to check.</p></td></tr><tr><td class="name"><code>maxColors</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The maximum number of unique colors allowed.</p></td></tr><tr><td class="name"><code>maxDiffs</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The maximum percentage difference allowed for any color.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line74">line 74</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the color differences exceed the specified limits, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="cellCount"><span class="type-signature"></span>cellCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Counts the number of cells (both</p><td>and<th>) in a given table element.<p></p></th></td></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to count cells in.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The total number of cells in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="checkInconsistent"><span class="type-signature"></span>checkInconsistent<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a table element has inconsistent row or column spans.</p><p>This function normalizes the table by removing <code>colspan</code> and <code>rowspan</code> attributes, and then checks if the number of columns is consistent across all rows.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check for inconsistencies.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line40">line 40</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns <code>true</code> if the table has inconsistent row or column spans, otherwise <code>false</code>.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="checkMultiRowsInHeader"><span class="type-signature"></span>checkMultiRowsInHeader<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given table element has multiple rows in the header.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the table has more than one row in the header, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="checkMultiRowsWithColspan"><span class="type-signature"></span>checkMultiRowsWithColspan<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given table element has multiple rows with at least one cell that has a colspan attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line20">line 20</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if there are more than one row with at least one cell having a colspan attribute, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="cleanBlank"><span class="type-signature"></span>cleanBlank<span class="signature">(obj)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Remove items from an object that do not have a value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Object to remove empty values from</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="arrayUtils.js.html">arrayUtils.js</a>, <a href="arrayUtils.js.html#line41">line 41</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Cleaned object</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="colCount"><span class="type-signature"></span>colCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculates the average number of columns in a given HTML table.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to analyze.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line52">line 52</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The average number of columns per row in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="collectSubtreeText"><span class="type-signature"></span>collectSubtreeText<span class="signature">(node, visibleOnly<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h3><div class="description"><p>Recursively collect accessible text parts from an element's subtree. Handles text nodes, img alt text, and input[type=&quot;image&quot;] alt text.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>node</code></td><td class="type"><span class="param-type">Node</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The DOM node to traverse.</p></td></tr><tr><td class="name"><code>visibleOnly</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If true, skip non-visible content.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleText.js.html">getAccessibleText.js</a>, <a href="getAccessibleText.js.html#line62">line 62</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of text parts found in the subtree.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;string></span></dd></dl></div><h3 class="name has-anchor" id="countBordersPct"><span class="type-signature"></span>countBordersPct<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculates the percentage of table cells that have a border.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to analyze.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line30">line 30</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The percentage of table cells that have a border.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="extractMeaningfulContent"><span class="type-signature"></span>extractMeaningfulContent<span class="signature">(rawValue)</span><span class="type-signature"> &rarr; {string|false}</span></h3><div class="description"><p>Checks if a CSS content value is meaningful (non-empty, non-whitespace). Strips surrounding quotes and checks for actual visible content.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>rawValue</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The raw CSS content value from getComputedStyle</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getCSSGeneratedContent.js.html">getCSSGeneratedContent.js</a>, <a href="getCSSGeneratedContent.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The cleaned content string or false if empty/whitespace</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">false</span></dd></dl></div><h3 class="name has-anchor" id="getAccessibleName"><span class="type-signature"></span>getAccessibleName<span class="signature">(element)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Gets the accessible name of an element according to the accessible name calculation algorithm</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to get the accessible name for</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line15">line 15</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The accessible name or false if none exists</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getAccessibleText"><span class="type-signature"></span>getAccessibleText<span class="signature">(el, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string}</span></h3><div class="description"><p>Get all accessible text for an element, including aria-labels and content from children. Traverses the DOM subtree collecting text from text nodes, img alt attributes, and input[type=&quot;image&quot;] alt attributes.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="attributes"></td><td class="description last"><p>The DOM element.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Configuration options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>visibleOnly</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If true, return only visually rendered text, skipping aria-label, img alt, input[type=&quot;image&quot;] alt, style, script, and aria-hidden=&quot;true&quot; elements. Useful for WCAG 2.5.3 Label in Name comparisons.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleText.js.html">getAccessibleText.js</a>, <a href="getAccessibleText.js.html#line14">line 14</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The accessible text.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="getAriaAttributesByElement"><span class="type-signature"></span>getAriaAttributesByElement<span class="signature">(element)</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h3><div class="description"><p>Retrieves all ARIA attributes from a given DOM element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element from which to extract ARIA attributes.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAriaAttributesByElement.js.html">getAriaAttributesByElement.js</a>, <a href="getAriaAttributesByElement.js.html#line7">line 7</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>An array of ARIA attribute names present on the element.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;string></span></dd></dl></div><h3 class="name has-anchor" id="getAttributeHandlers"><span class="type-signature"></span>getAttributeHandlers<span class="signature">(element)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Collect inline attribute event handlers from an element</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to inspect</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="listEventListeners.js.html">listEventListeners.js</a>, <a href="listEventListeners.js.html#line87">line 87</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Map of event names to listener entry arrays</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getCSSGeneratedContent"><span class="type-signature"></span>getCSSGeneratedContent<span class="signature">(el, pseudoElement<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Gets the CSS generated content for an element's ::before or ::after pseudo-elements. This function only checks for content added via the CSS <code>content</code> property, not the element's own text content. Empty, whitespace-only, and blank content values are filtered out as they do not convey meaningful information.</p><p>Use getGeneratedContent() if you need ::before + textContent + ::after combined.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The DOM element to check</p></td></tr><tr><td class="name"><code>pseudoElement</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'both'</td><td class="description last"><p>Which pseudo-element to check ('before', 'after', or 'both')</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getCSSGeneratedContent.js.html">getCSSGeneratedContent.js</a>, <a href="getCSSGeneratedContent.js.html#line34">line 34</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The generated content as a string or false if none exists</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getColorContrast"><span class="type-signature"></span>getColorContrast<span class="signature">(el)</span><span class="type-signature"> &rarr; {number|boolean}</span></h3><div class="description"><p>Calculate color contrast ratio between foreground and background</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line232">line 232</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Contrast ratio or false if calculation not possible</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getComputedBackgroundColor"><span class="type-signature"></span>getComputedBackgroundColor<span class="signature">(el, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Get the computed background color for an element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="attributes"></td><td class="description last"><p>the element to be tested</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>Configuration options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>fallbackColor</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'rgb(255, 255, 255)'</td><td class="description last"><p>Color to use when background can't be determined</p></td></tr><tr><td class="name"><code>skipBackgroundImages</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">true</td><td class="description last"><p>If true (default), return false for background images. If false, use fallbackColor instead.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line56">line 56</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>background color or false</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getComputedRole"><span class="type-signature"></span>getComputedRole<span class="signature">(element)</span><span class="type-signature"> &rarr; {string|undefined}</span></h3><div class="description"><p>Gets the computed role of an HTML element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The HTML element to get the role for.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getComputedRole.js.html">getComputedRole.js</a>, <a href="getComputedRole.js.html#line149">line 149</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The computed role of the element, or undefined if no role is found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">undefined</span></dd></dl></div><h3 class="name has-anchor" id="getContrastRatio"><span class="type-signature"></span>getContrastRatio<span class="signature">(color1, color2)</span><span class="type-signature"> &rarr; {number|null}</span></h3><div class="description"><p>Calculate contrast ratio between two color strings.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>color1</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>e.g., 'rgb(0, 0, 0)'</p></td></tr><tr><td class="name"><code>color2</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>e.g., 'rgb(255, 255, 255)'</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line210">line 210</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Contrast ratio (1 to 21) or null if colors can't be parsed</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getEffectiveDir"><span class="type-signature"></span>getEffectiveDir<span class="signature">(element)</span><span class="type-signature"> &rarr; {string|null}</span></h3><div class="description"><p>Gets the effective dir attribute value for an element (including inherited).</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line600">line 600</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The effective direction ('ltr', 'rtl', 'auto') or null</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getEventListeners"><span class="type-signature"></span>getEventListeners<span class="signature">(element)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Get all event listeners on an element, including addEventListener, attribute, and property handlers</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to inspect</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="listEventListeners.js.html">listEventListeners.js</a>, <a href="listEventListeners.js.html#line129">line 129</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Map of event names to listener entry arrays</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getFocusableElements"><span class="type-signature"></span>getFocusableElements<span class="signature">(el)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>Gets all focusable elements within the specified container element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>the element to be tested</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getFocusableElements.js.html">getFocusableElements.js</a>, <a href="getFocusableElements.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Array of focusable elements</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="getGeneratedContent"><span class="type-signature"></span>getGeneratedContent<span class="signature">(el)</span><span class="type-signature"> &rarr; {string|false}</span></h3><div class="description"><p>Get all visible text for an element, including CSS-generated ::before and ::after content combined with the element's own text content.</p><p>Unlike getCSSGeneratedContent (which returns only pseudo-element content), this function returns the full visible text: ::before + textContent + ::after.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getGeneratedContent.js.html">getGeneratedContent.js</a>, <a href="getGeneratedContent.js.html#line13">line 13</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The combined text or false if no content exists.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">false</span></dd></dl></div><h3 class="name has-anchor" id="getImageText"><span class="type-signature">(async) </span>getImageText<span class="signature">(imagePath, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;(string|false)>}</span></h3><div class="description"><p>Extracts text from an image using OCR.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>imagePath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The path or URL of the image.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>OCR options.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default">'eng'</td><td class="description last"><p>Tesseract language(s) for OCR (e.g. 'fra', 'eng+deu').</p></td></tr><tr><td class="name"><code>logger</code></td><td class="type"><span class="param-type">function</span> |<wbr> <span class="param-type">null</span></td><td class="attributes">&lt;optional><br></td><td class="default">console.log</td><td class="description last"><p>Logger callback for Tesseract progress. Pass null to disable.</p></td></tr><tr><td class="name"><code>corePath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Custom path to Tesseract core WASM files.</p></td></tr><tr><td class="name"><code>langPath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Custom path to language training data.</p></td></tr><tr><td class="name"><code>cachePath</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>Custom cache directory path.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getImageText.js.html">getImageText.js</a>, <a href="getImageText.js.html#line22">line 22</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Extracted text if found, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;(string|false)></span></dd></dl></div><h3 class="name has-anchor" id="getPropertyHandlers"><span class="type-signature"></span>getPropertyHandlers<span class="signature">(element, attributeHandlers)</span><span class="type-signature"> &rarr; {Object}</span></h3><div class="description"><p>Collect property-based event handlers from an element</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to inspect</p></td></tr><tr><td class="name"><code>attributeHandlers</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Already-detected attribute handlers to avoid duplicates</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="listEventListeners.js.html">listEventListeners.js</a>, <a href="listEventListeners.js.html#line108">line 108</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Map of event names to listener entry arrays</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span></dd></dl></div><h3 class="name has-anchor" id="getRelativeLuminance"><span class="type-signature"></span>getRelativeLuminance<span class="signature">(rgb)</span><span class="type-signature"> &rarr; {number|null}</span></h3><div class="description"><p>Calculate relative luminance from an RGB object. Wrapper around luminance() that accepts an object instead of three separate arguments.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>rgb</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Object with r, g, b properties (0-255)</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line154">line 154</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Relative luminance value (0-1) or null if input is invalid</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getStyleObject"><span class="type-signature"></span>getStyleObject<span class="signature">(el)</span><span class="type-signature"> &rarr; {Object|boolean}</span></h3><div class="description"><p>Retrieves the computed style properties of a given DOM element and returns them as an object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element for which to retrieve the computed style properties.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getStyleObject.js.html">getStyleObject.js</a>, <a href="getStyleObject.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>An object containing the computed style properties of the element, with property names in camelCase. Returns false if the style object cannot be retrieved.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Object</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="getTwoLetterCode"><span class="type-signature"></span>getTwoLetterCode<span class="signature">(threeLetterCode)</span><span class="type-signature"> &rarr; {string|boolean}</span></h3><div class="description"><p>Converts a three-letter language code to a two-letter language code.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>threeLetterCode</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The three-letter language code to convert.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line501">line 501</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The corresponding two-letter language code, or false if not found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasAccessibleName"><span class="type-signature"></span>hasAccessibleName<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if an element has an accessible name</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasAccessibleName.js.html">hasAccessibleName.js</a>, <a href="hasAccessibleName.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has an accessible name, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasAttribute"><span class="type-signature"></span>hasAttribute<span class="signature">(attribute, element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a given element has a specified attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>attribute</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the attribute to check for.</p></td></tr><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check the attribute on.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasAttribute.js.html">hasAttribute.js</a>, <a href="hasAttribute.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the attribute exists on the element, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasBackgroundImage"><span class="type-signature"></span>hasBackgroundImage<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Check if an element or any of its ancestors has a background image set. Walks up the DOM tree until it finds a background image or an opaque background color.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line7">line 7</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element or a visible ancestor has a background image</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasCSSGeneratedContent"><span class="type-signature"></span>hasCSSGeneratedContent<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if an element has CSS generated content in its ::before or ::after pseudo-elements. This only checks for content added via the CSS <code>content</code> property, not regular HTML text content.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The element to check for CSS-generated content.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasCSSGeneratedContent.js.html">hasCSSGeneratedContent.js</a>, <a href="hasCSSGeneratedContent.js.html#line11">line 11</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has CSS-generated content, otherwise false.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasHiddenParent"><span class="type-signature"></span>hasHiddenParent<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given element has a hidden parent element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasHiddenParent.js.html">hasHiddenParent.js</a>, <a href="hasHiddenParent.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element has a hidden parent, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasParent"><span class="type-signature"></span>hasParent<span class="signature">(element, selectors)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the given element has a parent that matches any of the selectors in the array.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The DOM element to check.</p></td></tr><tr><td class="name"><code>selectors</code></td><td class="type"><span class="param-type">Array.&lt;string></span></td><td class="description last"><p>An array of selectors to match against the element's parents.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasParent.js.html">hasParent.js</a>, <a href="hasParent.js.html#line8">line 8</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element has a parent that matches any of the selectors, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="hasValidAriaAttributes"><span class="type-signature"></span>hasValidAriaAttributes<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if an element has any valid ARIA attributes.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="hasValidAriaAttributes.js.html">hasValidAriaAttributes.js</a>, <a href="hasValidAriaAttributes.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element has at least one valid ARIA attribute, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isA11yVisible"><span class="type-signature"></span>isA11yVisible<span class="signature">(element, strict<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if an element is visible to assistive technologies (AT).</p><p>Unlike isHidden (which checks simple visual hiding), this function determines whether an element is meaningful to screen readers and other AT. Key differences:</p><ul><li>Elements referenced by aria-labelledby or aria-describedby are considered AT-visible even if visually hidden (display:none), because they provide accessible names/descriptions to other elements.</li><li>Inherently non-visible elements (script, style, input[type=&quot;hidden&quot;], etc.) are treated as AT-visible since they carry semantic meaning.</li><li>Parent chain is walked to detect inherited hiding (CSS and aria-hidden in strict mode).</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The element to check.</p></td></tr><tr><td class="name"><code>strict</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>When true, also treats aria-hidden=&quot;true&quot; (on the element or any ancestor) as hidden.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isA11yVisible.js.html">isA11yVisible.js</a>, <a href="isA11yVisible.js.html#line22">line 22</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element is visible to assistive technologies.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isAriaAttributeValid"><span class="type-signature"></span>isAriaAttributeValid<span class="signature">(attributeName)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a specific ARIA attribute is valid according to the WAI-ARIA specification.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>attributeName</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The name of the ARIA attribute to check (e.g., 'aria-label')</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isAriaAttributesValid.js.html">isAriaAttributesValid.js</a>, <a href="isAriaAttributesValid.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the attribute is a valid ARIA attribute, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isComplexTable"><span class="type-signature"></span>isComplexTable<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if a given table element is complex. A table is considered complex if it has multiple rows in the header, rows with colspan attributes, or inconsistent structure.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The table element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isComplexTable.js.html">isComplexTable.js</a>, <a href="isComplexTable.js.html#line97">line 97</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the table is complex, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isDataTable"><span class="type-signature"></span>isDataTable<span class="signature">(table, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if a given table element is a data table based on various heuristics and options.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The table element to evaluate.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Optional settings to override default heuristics.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>numDTColumns</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">5</td><td class="description last"><p>Minimum number of columns to consider as a data table.</p></td></tr><tr><td class="name"><code>pctCellsWBorder</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">33</td><td class="description last"><p>Minimum percentage of cells with borders to consider as a data table.</p></td></tr><tr><td class="name"><code>numDTRows</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">20</td><td class="description last"><p>Minimum number of rows to consider as a data table.</p></td></tr><tr><td class="name"><code>maxWidthLT</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">95</td><td class="description last"><p>Maximum width percentage of the viewport to consider as a data table.</p></td></tr><tr><td class="name"><code>minCellsLT</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">10</td><td class="description last"><p>Minimum number of cells to consider as a data table.</p></td></tr><tr><td class="name"><code>maxCellColors</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">3</td><td class="description last"><p>Maximum number of different cell colors to consider as a data table.</p></td></tr><tr><td class="name"><code>maxColorDiffs</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes">&lt;optional><br></td><td class="default">30</td><td class="description last"><p>Maximum number of color differences to consider as a data table.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line116">line 116</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the table is considered a data table, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isFocusable"><span class="type-signature"></span>isFocusable<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Determines if an element is focusable via user interaction (tab order). Elements with tabindex=&quot;-1&quot; are programmatically focusable via .focus() but are NOT considered focusable by this function, as they are not reachable through keyboard navigation.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The HTML element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isFocusable.js.html">isFocusable.js</a>, <a href="isFocusable.js.html#line12">line 12</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the element is focusable, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isHidden"><span class="type-signature"></span>isHidden<span class="signature">(element, options<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a given DOM element is hidden.</p><p>By default checks: computed display:none, visibility:hidden, and the hidden attribute. Additional checks can be enabled via the options parameter.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The DOM element to check.</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="attributes">&lt;optional><br></td><td class="default">{}</td><td class="description last"><p>Optional configuration.</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>checkAriaHidden</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Also check aria-hidden=&quot;true&quot;.</p></td></tr><tr><td class="name"><code>checkOpacity</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Also treat opacity:0 as hidden.</p></td></tr><tr><td class="name"><code>checkDimensions</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>Also treat zero width+height as hidden.</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isHidden.js.html">isHidden.js</a>, <a href="isHidden.js.html#line14">line 14</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the element is hidden.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isNotVisible"><span class="type-signature"></span>isNotVisible<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Helper function to check if element is NOT visible</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line482">line 482</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if element is not visible, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isOffScreen"><span class="type-signature"></span>isOffScreen<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if the selected element is off-screen.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The element to check.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isOffScreen.js.html">isOffScreen.js</a>, <a href="isOffScreen.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>True if the element is off-screen, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isRTLLanguage"><span class="type-signature"></span>isRTLLanguage<span class="signature">(lang)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Checks if a language code represents an RTL language.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>lang</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The language code (e.g., &quot;ar&quot;, &quot;ar-SA&quot;, &quot;he-IL&quot;)</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line587">line 587</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if the language is RTL</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidLanguageCode"><span class="type-signature"></span>isValidLanguageCode<span class="signature">(langCode)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Validates if a language code is a valid ISO 639 language code. Uses pre-defined lists of valid language codes from ISO 639-1 and ISO 639-2.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>langCode</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The language code to validate</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line618">line 618</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if valid language code</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValidUrl"><span class="type-signature"></span>isValidUrl<span class="signature">(str)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Validate if a string is a valid URL.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>str</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The string to validate.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isValidUrl.js.html">isValidUrl.js</a>, <a href="isValidUrl.js.html#line6">line 6</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns true if the string is a valid URL, otherwise false.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="listEventListeners"><span class="type-signature"></span>listEventListeners<span class="signature">(rootElement)</span><span class="type-signature"> &rarr; {Array}</span></h3><div class="description"><p>List all event listeners for an element and its children</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>rootElement</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The root element to start listing from (defaults to document)</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="listEventListeners.js.html">listEventListeners.js</a>, <a href="listEventListeners.js.html#line167">line 167</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of event listener objects with element, xpath, and event properties</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span></dd></dl></div><h3 class="name has-anchor" id="luminance"><span class="type-signature"></span>luminance<span class="signature">(R8bit, G8bit, B8bit)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Calculate the luminance of an RGB color.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>R8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Red value between 0 and 255</p></td></tr><tr><td class="name"><code>G8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Green value between 0 and 255</p></td></tr><tr><td class="name"><code>B8bit</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>Blue value between 0 and 255</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line133">line 133</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>luminance value</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="matchesSelector"><span class="type-signature"></span>matchesSelector<span class="signature">(element, selector)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Helper function to check if an element matches a selector</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>Element to check</p></td></tr><tr><td class="name"><code>selector</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>CSS selector to match against</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line521">line 521</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if element matches the selector</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="parseColor"><span class="type-signature"></span>parseColor<span class="signature">(colorStr)</span></h3><div class="description"><p>Parse an RGB/RGBA color string into a structured object.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>colorStr</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>e.g., 'rgb(255, 128, 0)' or 'rgba(255, 128, 0, 0.5)'</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line181">line 181</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong></div><h3 class="name has-anchor" id="parseRGB"><span class="type-signature"></span>parseRGB<span class="signature">(rgb)</span><span class="type-signature"> &rarr; {Array|null}</span></h3><div class="description"><p>Parse an RGB or RGBA color string into its components</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>rgb</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>RGB(A) color string (e.g., &quot;rgb(255, 0, 0)&quot; or &quot;rgba(255, 0, 0, 0.5)&quot;)</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line171">line 171</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Array of RGB(A) values or null if parsing fails</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="rowCount"><span class="type-signature"></span>rowCount<span class="signature">(table)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Returns the number of rows in the given table element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>table</code></td><td class="type"><span class="param-type">HTMLTableElement</span></td><td class="description last"><p>The table element to count rows in.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="isDataTable.js.html">isDataTable.js</a>, <a href="isDataTable.js.html#line10">line 10</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The number of rows in the table.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="sortByVisualOrder"><span class="type-signature"></span>sortByVisualOrder<span class="signature">(a, b)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>a</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>First element to compare</p></td></tr><tr><td class="name"><code>b</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>Second element to compare</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testOrder.js.html">testOrder.js</a>, <a href="testOrder.js.html#line9">line 9</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Sorting order based on visual position</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="strlen"><span class="type-signature"></span>strlen<span class="signature">(str)</span><span class="type-signature"> &rarr; {number}</span></h3><div class="description"><p>Get the length of a trimmed string, or return 0 if not a valid string</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>str</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The string to measure</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="getAccessibleName.js.html">getAccessibleName.js</a>, <a href="getAccessibleName.js.html#line543">line 543</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The string length or 0</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">number</span></dd></dl></div><h3 class="name has-anchor" id="testContrast"><span class="type-signature"></span>testContrast<span class="signature">(el, options)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Test if an element meets WCAG color contrast requirements</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The DOM element to test</p></td></tr><tr><td class="name"><code>options</code></td><td class="type"><span class="param-type">Object</span></td><td class="description last"><p>Configuration options</p><h6>Properties</h6><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>level</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>WCAG level to test against ('AA' or 'AAA')</p></td></tr></tbody></table></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testContrast.js.html">testContrast.js</a>, <a href="testContrast.js.html#line282">line 282</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>True if contrast requirements are met, false otherwise</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="testLang"><span class="type-signature"></span>testLang<span class="signature">(element)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="description"><p>Tests the language of an HTML element against its content.</p><p>This function checks the <code>lang</code> or <code>xml:lang</code> attribute of the given element and its ancestors to determine the language. It then uses the <code>franc</code> library to detect the language of the element's text content and compares it to the language attribute.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>element</code></td><td class="type"><span class="param-type">HTMLElement</span></td><td class="description last"><p>The HTML element to test.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testLang.js.html">testLang.js</a>, <a href="testLang.js.html#line524">line 524</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>Returns <code>true</code> if the detected language matches the language attribute or if the detected language is undefined (&quot;und&quot;). Otherwise, returns <code>false</code>.</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="testOrder"><span class="type-signature"></span>testOrder<span class="signature">(el)</span><span class="type-signature"> &rarr; {boolean}</span></h3><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>el</code></td><td class="type"><span class="param-type">Element</span></td><td class="description last"><p>The container element to test focus order</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="testOrder.js.html">testOrder.js</a>, <a href="testOrder.js.html#line24">line 24</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><ul><li>True if the focus order matches visual order</li></ul></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">boolean</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><div class="mobile-nav-links"></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-QueryCache.html">QueryCache</a></div><div class="sidebar-section-children"><a href="module-afixt-test-utils.html">afixt-test-utils</a></div><div class="sidebar-section-children"><a href="module-colorConversions.html">colorConversions</a></div><div class="sidebar-section-children"><a href="module-constants.html">constants</a></div><div class="sidebar-section-children"><a href="module-cssUtils.html">cssUtils</a></div><div class="sidebar-section-children"><a href="module-formUtils.html">formUtils</a></div><div class="sidebar-section-children"><a href="module-suggestContrast.html">suggestContrast</a></div><div class="sidebar-section-children"><a href="module-tableUtils.html">tableUtils</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#RTL_LANGUAGES">RTL_LANGUAGES</a></div><div class="sidebar-section-children"><a href="global.html#_internal">_internal</a></div><div class="sidebar-section-children"><a href="global.html#arrayCount">arrayCount</a></div><div class="sidebar-section-children"><a href="global.html#arrayRemoveByValue">arrayRemoveByValue</a></div><div class="sidebar-section-children"><a href="global.html#arrayUnique">arrayUnique</a></div><div class="sidebar-section-children"><a href="global.html#cellColorDiffs">cellColorDiffs</a></div><div class="sidebar-section-children"><a href="global.html#cellCount">cellCount</a></div><div class="sidebar-section-children"><a href="global.html#checkInconsistent">checkInconsistent</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsInHeader">checkMultiRowsInHeader</a></div><div class="sidebar-section-children"><a href="global.html#checkMultiRowsWithColspan">checkMultiRowsWithColspan</a></div><div class="sidebar-section-children"><a href="global.html#cleanBlank">cleanBlank</a></div><div class="sidebar-section-children"><a href="global.html#colCount">colCount</a></div><div class="sidebar-section-children"><a href="global.html#collectSubtreeText">collectSubtreeText</a></div><div class="sidebar-section-children"><a href="global.html#countBordersPct">countBordersPct</a></div><div class="sidebar-section-children"><a href="global.html#extractMeaningfulContent">extractMeaningfulContent</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleName">getAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#getAccessibleText">getAccessibleText</a></div><div class="sidebar-section-children"><a href="global.html#getAriaAttributesByElement">getAriaAttributesByElement</a></div><div class="sidebar-section-children"><a href="global.html#getAttributeHandlers">getAttributeHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getCSSGeneratedContent">getCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getColorContrast">getColorContrast</a></div><div class="sidebar-section-children"><a href="global.html#getComputedBackgroundColor">getComputedBackgroundColor</a></div><div class="sidebar-section-children"><a href="global.html#getComputedRole">getComputedRole</a></div><div class="sidebar-section-children"><a href="global.html#getContrastRatio">getContrastRatio</a></div><div class="sidebar-section-children"><a href="global.html#getEffectiveDir">getEffectiveDir</a></div><div class="sidebar-section-children"><a href="global.html#getEventListeners">getEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#getFocusableElements">getFocusableElements</a></div><div class="sidebar-section-children"><a href="global.html#getGeneratedContent">getGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#getImageText">getImageText</a></div><div class="sidebar-section-children"><a href="global.html#getPropertyHandlers">getPropertyHandlers</a></div><div class="sidebar-section-children"><a href="global.html#getRelativeLuminance">getRelativeLuminance</a></div><div class="sidebar-section-children"><a href="global.html#getStyleObject">getStyleObject</a></div><div class="sidebar-section-children"><a href="global.html#getTwoLetterCode">getTwoLetterCode</a></div><div class="sidebar-section-children"><a href="global.html#hasAccessibleName">hasAccessibleName</a></div><div class="sidebar-section-children"><a href="global.html#hasAttribute">hasAttribute</a></div><div class="sidebar-section-children"><a href="global.html#hasBackgroundImage">hasBackgroundImage</a></div><div class="sidebar-section-children"><a href="global.html#hasCSSGeneratedContent">hasCSSGeneratedContent</a></div><div class="sidebar-section-children"><a href="global.html#hasHiddenParent">hasHiddenParent</a></div><div class="sidebar-section-children"><a href="global.html#hasParent">hasParent</a></div><div class="sidebar-section-children"><a href="global.html#hasValidAriaAttributes">hasValidAriaAttributes</a></div><div class="sidebar-section-children"><a href="global.html#isA11yVisible">isA11yVisible</a></div><div class="sidebar-section-children"><a href="global.html#isAriaAttributeValid">isAriaAttributeValid</a></div><div class="sidebar-section-children"><a href="global.html#isComplexTable">isComplexTable</a></div><div class="sidebar-section-children"><a href="global.html#isDataTable">isDataTable</a></div><div class="sidebar-section-children"><a href="global.html#isFocusable">isFocusable</a></div><div class="sidebar-section-children"><a href="global.html#isHidden">isHidden</a></div><div class="sidebar-section-children"><a href="global.html#isNotVisible">isNotVisible</a></div><div class="sidebar-section-children"><a href="global.html#isOffScreen">isOffScreen</a></div><div class="sidebar-section-children"><a href="global.html#isRTLLanguage">isRTLLanguage</a></div><div class="sidebar-section-children"><a href="global.html#isValidLanguageCode">isValidLanguageCode</a></div><div class="sidebar-section-children"><a href="global.html#isValidUrl">isValidUrl</a></div><div class="sidebar-section-children"><a href="global.html#langCodes">langCodes</a></div><div class="sidebar-section-children"><a href="global.html#listEventListeners">listEventListeners</a></div><div class="sidebar-section-children"><a href="global.html#luminance">luminance</a></div><div class="sidebar-section-children"><a href="global.html#matchesSelector">matchesSelector</a></div><div class="sidebar-section-children"><a href="global.html#parseColor">parseColor</a></div><div class="sidebar-section-children"><a href="global.html#parseRGB">parseRGB</a></div><div class="sidebar-section-children"><a href="global.html#rowCount">rowCount</a></div><div class="sidebar-section-children"><a href="global.html#rtls">rtls</a></div><div class="sidebar-section-children"><a href="global.html#sortByVisualOrder">sortByVisualOrder</a></div><div class="sidebar-section-children"><a href="global.html#strlen">strlen</a></div><div class="sidebar-section-children"><a href="global.html#testContrast">testContrast</a></div><div class="sidebar-section-children"><a href="global.html#testLang">testLang</a></div><div class="sidebar-section-children"><a href="global.html#testOrder">testOrder</a></div><div class="sidebar-section-children"><a href="global.html#validLangCodes">validLangCodes</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#light-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>