nishant-design-system
Version:
Sense UI components library
51 lines (42 loc) • 1.09 kB
Flow
// @flow strict
import * as React from 'react';
import {
// $FlowFixMe[untyped-import]
FloatingFocusManager,
// $FlowFixMe[untyped-import]
useFloating,
} from '@floating-ui/react-dom-interactions';
import classify from '../../utils/classify';
import css from './FocusManager.module.css';
type ClassNames = $ReadOnly<{wrapper?: string}>;
export type FocusManagerProps = {
classNames?: ClassNames,
children?: React.Node,
initialFocus?: number,
returnFocus?: boolean,
guards?: boolean,
};
export const FocusManager = (props: FocusManagerProps): React.Node => {
const {floating, context} = useFloating();
const {
classNames,
children,
initialFocus = -1,
...restFloatingFocusManagerProps
} = props;
return (
<FloatingFocusManager
context={context}
initialFocus={initialFocus}
{...restFloatingFocusManagerProps}
>
<div
ref={floating}
data-testid="FocusManager"
className={classify(css.wrapper, classNames?.wrapper)}
>
{children}
</div>
</FloatingFocusManager>
);
};