UNPKG

@wordpress/components

Version:
52 lines (44 loc) 1.56 kB
import { createElement } from "@wordpress/element"; /** * WordPress dependencies */ import { useRef, forwardRef } from '@wordpress/element'; /** * Internal dependencies */ import { useRovingTabIndexContext } from './roving-tab-index-context'; export const RovingTabIndexItem = forwardRef(function UnforwardedRovingTabIndexItem(_ref, forwardedRef) { let { children, as: Component, ...props } = _ref; const localRef = useRef(); const ref = forwardedRef || localRef; // @ts-expect-error - We actually want to throw an error if this is undefined. const { lastFocusedElement, setLastFocusedElement } = useRovingTabIndexContext(); let tabIndex; if (lastFocusedElement) { tabIndex = lastFocusedElement === ( // TODO: The original implementation simply used `ref.current` here, assuming // that a forwarded ref would always be an object, which is not necessarily true. // This workaround maintains the original runtime behavior in a type-safe way, // but should be revisited. 'current' in ref ? ref.current : undefined) ? 0 : -1; } const onFocus = event => setLastFocusedElement === null || setLastFocusedElement === void 0 ? void 0 : setLastFocusedElement(event.target); const allProps = { ref, tabIndex, onFocus, ...props }; if (typeof children === 'function') { return children(allProps); } if (!Component) return null; return createElement(Component, allProps, children); }); export default RovingTabIndexItem; //# sourceMappingURL=roving-tab-index-item.js.map