FezVrasta/popper.js

View on GitHub
packages/react/src/utils/getFloatingFocusElement.ts

Summary

Maintainability
A
0 mins
Test Coverage
export const FOCUSABLE_ATTRIBUTE = 'data-floating-ui-focusable';

export function getFloatingFocusElement(
  floatingElement: HTMLElement | null,
): HTMLElement | null {
  if (!floatingElement) {
    return null;
  }
  // Try to find the element that has `{...getFloatingProps()}` spread on it.
  // This indicates the floating element is acting as a positioning wrapper, and
  // so focus should be managed on the child element with the event handlers and
  // aria props.
  return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE)
    ? floatingElement
    : floatingElement.querySelector(`[${FOCUSABLE_ATTRIBUTE}]`) ||
        floatingElement;
}