import React, { ElementType, HTMLAttributes } from "react";
import { FocusFallback } from "./usePreviousFocus";
export interface FocusContainerOptionsProps {
/**
* By default, the focus container will try to maintain a cache of the
* focusable elements that is updated only when this component re-renders. If
* the children are extremely dynamic and focusable elements can be
* removed/added without this component updating, you should disable the cache
* so that the focusable elements are updated each time the tab key is
* pressed. Disabling the cache will be slightly slower for larger focusable
* areas, but it might not be too bad.
*
* NOTE: The only important elements are the *first* and *last* elements in
* this list. So if your children aren't changing the first and last
* elements, there's no need to disable the cache.
*/
disableFocusCache?: boolean;
/**
* The default behavior for the focus container is to focus an element once it
* is mounted and the `disabled` prop is not enabled. This behavior can be
* disabled if this is not wanted for some reason.
*/
disableFocusOnMount?: boolean;
/**
* Boolean if the focus behavior should be disabled. This should really be
* used if you are using nested focus containers for temporary material (such
* as dialogs or menus).
*/
disableTabFocusWrap?: boolean;
/**
* Boolean if the element that gets focused on mount should try to not scroll
* the focused element into view which is the default behavior. This should
* normally remain `false`, but it is useful to set to `true` if the
* `FocusContainer` is within a transition that appears offscreen.
*/
disableFocusOnMountScroll?: boolean;
/**
* The default behavior for the focus container is to attempt to focus the
* element that was focused before the focus container was mounted since it is
* generally used for temporary material. If there are cases where this
* behavior is not wanted, you can enable this prop.
*/
disableFocusOnUnmount?: boolean;
/**
* This is the element that should be focused by default when the component is
* mounted. This can either be the first or last focusable item or a query
* selector string that is run against this component to focus.
*/
defaultFocus?: "first" | "last" | string;
/**
* When the focus container unmounts, it will attempt to re-focus the element
* that was focused before the focus container was mounted unless the
* `disableFocusOnUnmount` prop is enabled. There might be cases where
* unmounting the focus container causes the page to re-render and the
* previous element no longer exists. When this happens keyboard users _might_
* have a problem navigating through the page again depending on how the
* browser implemented the native tab behavior so this prop allows you to
* ensure that a specific element is focused in these cases.
*
* This can either be a query selector string, a specific HTMLElement, or a
* function that finds a specific HTMLElement to focus.
*/
unmountFocusFallback?: FocusFallback;
}
export interface FocusContainerProps extends FocusContainerOptionsProps, HTMLAttributes {
/**
* The component to render the focus container as. This should really not be
* used as it is more for internal usage. The only base requirements for this
* prop is that it must either be a element string (`"div"`, `"span"`, etc) or
* a custom component that has forwarded the ref to the DOM node.
*/
component?: ElementType;
}
/**
* The `FocusContainer` is a wrapper for a few of the accessibility hooks to
* maintain focus within an element.
*/
declare const FocusContainer: React.ForwardRefExoticComponent>;
export default FocusContainer;