UNPKG

@chakra-xui/tabs

Version:

Accessible Tabs component for React and Chakra xui

181 lines (151 loc) 6.52 kB
"use strict"; exports.__esModule = true; exports.TabIndicator = exports.TabPanels = exports.TabPanel = exports.TabList = exports.Tab = exports.Tabs = void 0; var _system = require("@chakra-xui/system"); var _utils = require("@chakra-xui/utils"); var React = _interopRequireWildcard(require("react")); var _useTabs2 = require("./use-tabs"); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } /** * Tabs * * Provides context and logic for all tabs components. It doesn't render * any DOM node. */ var Tabs = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var styles = (0, _system.useMultiStyleConfig)("Tabs", props); var _omitThemingProps = (0, _system.omitThemingProps)(props), children = _omitThemingProps.children, className = _omitThemingProps.className, rest = _objectWithoutPropertiesLoose(_omitThemingProps, ["children", "className"]); var _useTabs = (0, _useTabs2.useTabs)(rest), htmlProps = _useTabs.htmlProps, ctx = _objectWithoutPropertiesLoose(_useTabs, ["htmlProps"]); var context = React.useMemo(function () { return ctx; }, [ctx]); var rootProps = (0, _utils.omit)(htmlProps, ["isFitted"]); return /*#__PURE__*/React.createElement(_useTabs2.TabsProvider, { value: context }, /*#__PURE__*/React.createElement(_system.StylesProvider, { value: styles }, /*#__PURE__*/React.createElement(_system.chakra.div, _extends({ className: (0, _utils.cx)("chakra-tabs", className), ref: ref }, rootProps, { __css: styles.root }), children))); }); exports.Tabs = Tabs; if (_utils.__DEV__) { Tabs.displayName = "Tabs"; } /** * Tab button used to activate a specific tab panel. It renders a `button`, * and is responsible for automatic and manual selection modes. */ var Tab = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var styles = (0, _system.useStyles)(); var tabProps = (0, _useTabs2.useTab)(_extends({}, props, { ref: ref })); var tabStyles = _extends({ outline: "0", display: "flex", alignItems: "center", justifyContent: "center" }, styles.tab); return /*#__PURE__*/React.createElement(_system.chakra.button, _extends({}, tabProps, { className: (0, _utils.cx)("chakra-tabs__tab", props.className), __css: tabStyles })); }); exports.Tab = Tab; if (_utils.__DEV__) { Tab.displayName = "Tab"; } /** * TabList is used to manage a list of tab buttons. It renders a `div` by default, * and is responsible the keyboard interaction between tabs. */ var TabList = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var tablistProps = (0, _useTabs2.useTabList)(_extends({}, props, { ref: ref })); var styles = (0, _system.useStyles)(); var tablistStyles = _extends({ display: "flex" }, styles.tablist); return /*#__PURE__*/React.createElement(_system.chakra.div, _extends({}, tablistProps, { className: (0, _utils.cx)("chakra-tabs__tablist", props.className), __css: tablistStyles })); }); exports.TabList = TabList; if (_utils.__DEV__) { TabList.displayName = "TabList"; } /** * TabPanel * Used to render the content for a specific tab. */ var TabPanel = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var panelProps = (0, _useTabs2.useTabPanel)(_extends({}, props, { ref: ref })); var styles = (0, _system.useStyles)(); return /*#__PURE__*/React.createElement(_system.chakra.div, _extends({}, panelProps, { className: (0, _utils.cx)("chakra-tabs__tab-panel", props.className), __css: styles.tabpanel })); }); exports.TabPanel = TabPanel; if (_utils.__DEV__) { TabPanel.displayName = "TabPanel"; } /** * TabPanel * * Used to manage the rendering of multiple tab panels. It uses * `cloneElement` to hide/show tab panels. * * It renders a `div` by default. */ var TabPanels = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var panelsProps = (0, _useTabs2.useTabPanels)(props); return /*#__PURE__*/React.createElement(_system.chakra.div, _extends({}, panelsProps, { width: "100%", ref: ref, className: (0, _utils.cx)("chakra-tabs__tab-panels", props.className) })); }); exports.TabPanels = TabPanels; if (_utils.__DEV__) { TabPanels.displayName = "TabPanels"; } /** * TabIndicator * * Used to render an active tab indicator that animates between * selected tabs. */ var TabIndicator = /*#__PURE__*/(0, _system.forwardRef)(function (props, ref) { var indicatorStyle = (0, _useTabs2.useTabIndicator)(); var style = _extends({}, props.style, indicatorStyle); var styles = (0, _system.useStyles)(); return /*#__PURE__*/React.createElement(_system.chakra.div, _extends({ ref: ref }, props, { className: (0, _utils.cx)("chakra-tabs__tab-indicator", props.className), style: style, __css: styles.indicator })); }); exports.TabIndicator = TabIndicator; if (_utils.__DEV__) { TabIndicator.displayName = "TabIndicator"; } //# sourceMappingURL=tabs.js.map