| @@ -120,19 +120,13 @@ | ||
| 120 | 120 | } |
| 121 | 121 | const img = element.ownerDocument.querySelector( |
| 122 | 122 | 'img[usemap="#' + map.name + '"]' |
| 123 | 123 | ); |
| 124 | - return !!img && isVisible(img); | |
| 124 | + return !!img && !img.closest("[inert]") && isVisible(img); | |
| 125 | 125 | } |
| 126 | 126 | function find(context, { sequential = false } = {}) { |
| 127 | 127 | const elements = context.querySelectorAll(buildSelector(sequential)); |
| 128 | 128 | return Array.from(elements).filter((element) => { |
| 129 | - if (!isVisible(element)) { | |
| 130 | - return false; | |
| 131 | - } | |
| 132 | - if (element.closest("[inert]")) { | |
| 133 | - return false; | |
| 134 | - } | |
| 135 | 129 | const { nodeName } = element; |
| 136 | 130 | if ("AREA" === nodeName) { |
| 137 | 131 | return isValidFocusableArea( |
| 138 | 132 | /** @type {HTMLAreaElement} */ |
| @@ -138,9 +132,12 @@ | ||
| 138 | 132 | /** @type {HTMLAreaElement} */ |
| 139 | 133 | element |
| 140 | 134 | ); |
| 141 | 135 | } |
| 142 | - return true; | |
| 136 | + if (element.closest("[inert]")) { | |
| 137 | + return false; | |
| 138 | + } | |
| 139 | + return isVisible(element); | |
| 143 | 140 | }); |
| 144 | 141 | } |
| 145 | 142 | |
| 146 | 143 | // packages/dom/build-module/tabbable.mjs |
| @@ -264,22 +261,57 @@ | ||
| 264 | 261 | furthestRight - furthestLeft, |
| 265 | 262 | furthestBottom - furthestTop |
| 266 | 263 | ); |
| 267 | 264 | } |
| 268 | - const { startContainer } = range; | |
| 265 | + const { startContainer, startOffset } = range; | |
| 269 | 266 | const { ownerDocument } = startContainer; |
| 270 | - if (startContainer.nodeName === "BR") { | |
| 271 | - const { parentNode } = startContainer; | |
| 272 | - assertIsDefined(parentNode, "parentNode"); | |
| 273 | - const index = ( | |
| 274 | - /** @type {Node[]} */ | |
| 275 | - Array.from(parentNode.childNodes).indexOf(startContainer) | |
| 276 | - ); | |
| 277 | - assertIsDefined(ownerDocument, "ownerDocument"); | |
| 267 | + assertIsDefined(ownerDocument, "ownerDocument"); | |
| 268 | + if (startContainer.nodeType !== startContainer.TEXT_NODE && !startContainer.childNodes.length && startContainer.parentNode) { | |
| 278 | 269 | range = ownerDocument.createRange(); |
| 279 | - range.setStart(parentNode, index); | |
| 280 | - range.setEnd(parentNode, index); | |
| 270 | + range.setStartBefore(startContainer); | |
| 271 | + range.collapse(true); | |
| 272 | + return getRectangleFromRange(range); | |
| 281 | 273 | } |
| 274 | + if (startContainer.nodeType !== startContainer.TEXT_NODE) { | |
| 275 | + let before = startContainer.childNodes[startOffset - 1]; | |
| 276 | + while (before?.lastChild) { | |
| 277 | + before = before.lastChild; | |
| 278 | + } | |
| 279 | + let after = startContainer.childNodes[startOffset]; | |
| 280 | + while (after?.firstChild) { | |
| 281 | + after = after.firstChild; | |
| 282 | + } | |
| 283 | + let beforeRange; | |
| 284 | + if (before && before.nodeType === before.TEXT_NODE) { | |
| 285 | + beforeRange = ownerDocument.createRange(); | |
| 286 | + beforeRange.setStart( | |
| 287 | + before, | |
| 288 | + /** @type {Text} */ | |
| 289 | + before.length | |
| 290 | + ); | |
| 291 | + beforeRange.collapse(true); | |
| 292 | + } | |
| 293 | + let afterRange; | |
| 294 | + if (after && after.nodeType === after.TEXT_NODE) { | |
| 295 | + afterRange = ownerDocument.createRange(); | |
| 296 | + afterRange.setStart(after, 0); | |
| 297 | + afterRange.collapse(true); | |
| 298 | + } | |
| 299 | + if (beforeRange && afterRange) { | |
| 300 | + const beforeRect = beforeRange.getClientRects()[0]; | |
| 301 | + const afterRect = afterRange.getClientRects()[0]; | |
| 302 | + if (beforeRect && afterRect && beforeRect.bottom <= afterRect.top) { | |
| 303 | + return null; | |
| 304 | + } | |
| 305 | + } | |
| 306 | + if (afterRange) { | |
| 307 | + range = afterRange; | |
| 308 | + } else if (beforeRange) { | |
| 309 | + range = beforeRange; | |
| 310 | + } else { | |
| 311 | + return null; | |
| 312 | + } | |
| 313 | + } | |
| 282 | 314 | const rects = range.getClientRects(); |
| 283 | 315 | if (rects.length > 1) { |
| 284 | 316 | return null; |
| 285 | 317 | } |
| @@ -297,19 +329,9 @@ | ||
| 297 | 329 | if (before.bottom <= after.top) { |
| 298 | 330 | return null; |
| 299 | 331 | } |
| 300 | 332 | } |
| 301 | - let rect = rects[0]; | |
| 302 | - if (!rect || rect.height === 0) { | |
| 303 | - assertIsDefined(ownerDocument, "ownerDocument"); | |
| 304 | - const padNode = ownerDocument.createTextNode("\u200B"); | |
| 305 | - range = range.cloneRange(); | |
| 306 | - range.insertNode(padNode); | |
| 307 | - rect = range.getClientRects()[0]; | |
| 308 | - assertIsDefined(padNode.parentNode, "padNode.parentNode"); | |
| 309 | - padNode.parentNode.removeChild(padNode); | |
| 310 | - } | |
| 311 | - return rect; | |
| 333 | + return rects[0] ?? null; | |
| 312 | 334 | } |
| 313 | 335 | |
| 314 | 336 | // packages/dom/build-module/dom/compute-caret-rect.mjs |
| 315 | 337 | function computeCaretRect(win) { |