32 lines
1.0 KiB
JavaScript
32 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = activeElement;
|
|
/**
|
|
* Gets the actual active element, traversing through shadow roots if necessary.
|
|
*
|
|
* When an element inside a shadow root has focus, `document.activeElement` returns
|
|
* the shadow host element. This function recursively traverses shadow roots to find
|
|
* the actual focused element.
|
|
*
|
|
* @param root - The document or shadow root to start the search from.
|
|
* @returns The actual focused element, or null if no element has focus.
|
|
*
|
|
* @example
|
|
* // In a shadow DOM context
|
|
* const activeElement = getActiveElement(document);
|
|
* // Returns the actual focused element inside the shadow root
|
|
*
|
|
* @example
|
|
* // Starting from a specific document
|
|
* const activeElement = getActiveElement(ownerDocument(element));
|
|
*/
|
|
function activeElement(doc) {
|
|
let element = doc.activeElement;
|
|
while (element?.shadowRoot?.activeElement != null) {
|
|
element = element.shadowRoot.activeElement;
|
|
}
|
|
return element;
|
|
} |