import { activeElement, contains, getDocument, getTarget, isTypeableCombobox, isVirtualClick, isVirtualPointerEvent, stopEvent, } from '@floating-ui/react/utils'; import {getNodeName, isHTMLElement} from '@floating-ui/utils/dom'; import * as React from 'react'; import type {FocusableElement} from 'tabbable'; import {tabbable} from 'tabbable'; import useModernLayoutEffect from 'use-isomorphic-layout-effect'; import {useLatestRef} from '../hooks/utils/useLatestRef'; import type {FloatingContext, OpenChangeReason, ReferenceType} from '../types'; import {createAttribute} from '../utils/createAttribute'; import {enqueueFocus} from '../utils/enqueueFocus'; import {getAncestors} from '../utils/getAncestors'; import {getChildren} from '../utils/getChildren'; import {markOthers, supportsInert} from '../utils/markOthers'; import { getNextTabbable, getPreviousTabbable, getTabbableOptions, isOutsideEvent, } from '../utils/tabbable'; import {usePortalContext} from './FloatingPortal'; import {useFloatingTree} from './FloatingTree'; import {FocusGuard, HIDDEN_STYLES} from './FocusGuard'; const LIST_LIMIT = 20; let previouslyFocusedElements: Element[] = []; function addPreviouslyFocusedElement(element: Element | null) { previouslyFocusedElements = previouslyFocusedElements.filter( (el) => el.isConnected, ); if (element && getNodeName(element) !== 'body') { previouslyFocusedElements.push(element); if (previouslyFocusedElements.length > LIST_LIMIT) { previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT); } } } function getPreviouslyFocusedElement() { return previouslyFocusedElements .slice() .reverse() .find((el) => el.isConnected); } const VisuallyHiddenDismiss = React.forwardRef(function VisuallyHiddenDismiss( props: React.ButtonHTMLAttributes, ref: React.Ref, ) { return (