UNPKG

@wordpress/components

Version:
61 lines (50 loc) 1.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.RovingTabIndexItem = void 0; var _element = require("@wordpress/element"); var _rovingTabIndexContext = require("./roving-tab-index-context"); /** * WordPress dependencies */ /** * Internal dependencies */ const RovingTabIndexItem = (0, _element.forwardRef)(function UnforwardedRovingTabIndexItem(_ref, forwardedRef) { let { children, as: Component, ...props } = _ref; const localRef = (0, _element.useRef)(); const ref = forwardedRef || localRef; // @ts-expect-error - We actually want to throw an error if this is undefined. const { lastFocusedElement, setLastFocusedElement } = (0, _rovingTabIndexContext.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 (0, _element.createElement)(Component, allProps, children); }); exports.RovingTabIndexItem = RovingTabIndexItem; var _default = RovingTabIndexItem; exports.default = _default; //# sourceMappingURL=roving-tab-index-item.js.map