UNPKG

@carbon/react

Version:

React components for the Carbon Design System

77 lines (68 loc) 2.45 kB
/** * Copyright IBM Corp. 2016, 2023 * * This source code is licensed under the Apache-2.0 license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js'); var PropTypes = require('prop-types'); var React = require('react'); var cx = require('classnames'); var navigation = require('../../internal/keyboard/navigation.js'); var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js'); var usePrefix = require('../../internal/usePrefix.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx); /** * Determine if the node within the provided ref contains content that is tabbable. */ function useTabbableContent(ref) { const [hasTabbableContent, setHasTabbableContent] = React.useState(false); // eslint-disable-next-line react-hooks/exhaustive-deps useIsomorphicEffect["default"](() => { if (ref.current) { setHasTabbableContent(!!ref.current.querySelector(navigation.selectorTabbable)); } }); return hasTabbableContent; } function TabContent(props) { const { className, selected, children, ...other } = props; const prefix = usePrefix.usePrefix(); const tabContentClasses = cx__default["default"](`${prefix}--tab-content`, className); const ref = React.useRef(null); const hasTabbableContent = useTabbableContent(ref); return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({ role: "tabpanel" }, other, { className: tabContentClasses, selected: selected, hidden: !selected, ref: ref, tabIndex: hasTabbableContent ? undefined : 0 }), children); } TabContent.propTypes = { /** * Pass in content to render inside the TabContent */ children: PropTypes__default["default"].node, /** * Provide a className for the tab content container */ className: PropTypes__default["default"].string, /** * Specify whether the TabContent is selected */ selected: PropTypes__default["default"].bool }; exports["default"] = TabContent;