| 141 | return null; |
| 142 | }; |
| 143 | const isVisible = element => { |
| 144 | if (!isElement(element) || element.getClientRects().length === 0) { |
| 145 | return false; |
| 146 | } |
| 147 | const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; |
| 148 | // Handle `details` element as its content may falsie appear visible when it is closed |
| 149 | const closedDetails = element.closest('details:not([open])'); |
| 150 | if (!closedDetails) { |
| 151 | return elementIsVisible; |
| 152 | } |
| 153 | if (closedDetails !== element) { |
| 154 | const summary = element.closest('summary'); |
| 155 | if (summary && summary.parentNode !== closedDetails) { |
| 156 | return false; |
| 157 | } |
| 158 | if (summary === null) { |
| 159 | return false; |
| 160 | } |
| 161 | } |
| 162 | return elementIsVisible; |
| 163 | }; |
| 164 | const isDisabled = element => { |
| 165 | if (!element || element.nodeType !== Node.ELEMENT_NODE) { |
| 166 | return true; |
no test coverage detected