| 164 | return null; |
| 165 | }; |
| 166 | const isVisible = element => { |
| 167 | if (!isElement(element) || element.getClientRects().length === 0) { |
| 168 | return false; |
| 169 | } |
| 170 | const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; |
| 171 | // Handle `details` element as its content may falsie appear visible when it is closed |
| 172 | const closedDetails = element.closest('details:not([open])'); |
| 173 | if (!closedDetails) { |
| 174 | return elementIsVisible; |
| 175 | } |
| 176 | if (closedDetails !== element) { |
| 177 | const summary = element.closest('summary'); |
| 178 | if (summary && summary.parentNode !== closedDetails) { |
| 179 | return false; |
| 180 | } |
| 181 | if (summary === null) { |
| 182 | return false; |
| 183 | } |
| 184 | } |
| 185 | return elementIsVisible; |
| 186 | }; |
| 187 | const isDisabled = element => { |
| 188 | if (!element || element.nodeType !== Node.ELEMENT_NODE) { |
| 189 | return true; |
no test coverage detected