UNPKG

react-foundation-components

Version:

Foundation Sites components built with the power of React and CSS Modules

220 lines (170 loc) 7.09 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.Tabs = exports.Tab = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _bind = require('classnames/bind'); var _bind2 = _interopRequireDefault(_bind); var _uncontrollable = require('uncontrollable'); var _uncontrollable2 = _interopRequireDefault(_uncontrollable); var _isBlank = require('underscore.string/isBlank'); var _isBlank2 = _interopRequireDefault(_isBlank); var _styles = require('./_styles.scss'); var _styles2 = _interopRequireDefault(_styles); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var cxStyles = _bind2.default.bind(_styles2.default); var Tab = function Tab(_ref) { var active = _ref.active, className = _ref.className, id = _ref.id, eventKey = _ref.eventKey, restProps = (0, _objectWithoutProperties3.default)(_ref, ['active', 'className', 'id', 'eventKey']); var classNames = (0, _classnames2.default)(className, cxStyles('tabs-panel', { 'is-active': active })); return _react2.default.createElement('div', (0, _extends3.default)({}, restProps, { 'aria-hidden': !active, 'aria-labelledby': (0, _isBlank2.default)(id) ? null : id + 'Label', className: classNames, id: id, role: 'tabpanel' })); }; exports.Tab = Tab; Tab.propTypes = { active: _propTypes2.default.bool, className: _propTypes2.default.string, id: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), eventKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]) }; var TabTitle = function TabTitle(_ref2) { var active = _ref2.active, containerClassName = _ref2.containerClassName, containerStyle = _ref2.containerStyle, eventKey = _ref2.eventKey, onSelect = _ref2.onSelect, tabId = _ref2.tabId, restProps = (0, _objectWithoutProperties3.default)(_ref2, ['active', 'containerClassName', 'containerStyle', 'eventKey', 'onSelect', 'tabId']); var classNames = (0, _classnames2.default)(containerClassName, cxStyles('tabs-title', { 'is-active': active })); var onClick = function onClick() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var event = args[0]; event.preventDefault(); if (onSelect && !(0, _isBlank2.default)(eventKey)) { onSelect.apply(undefined, [eventKey].concat(args)); } }; return _react2.default.createElement( 'li', { className: classNames, role: 'presentation', style: containerStyle }, _react2.default.createElement('a', (0, _extends3.default)({}, restProps, { 'aria-controls': tabId, 'aria-selected': active, href: '#' + ((0, _isBlank2.default)(tabId) ? '' : tabId), onClick: onClick, role: 'tab' })) ); }; TabTitle.propTypes = { active: _propTypes2.default.bool, containerClassName: _propTypes2.default.string, containerStyle: _propTypes2.default.object, eventKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), onSelect: _propTypes2.default.func, tabId: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]) }; var TabsHeader = function TabsHeader(_ref3) { var className = _ref3.className, vertical = _ref3.vertical, restProps = (0, _objectWithoutProperties3.default)(_ref3, ['className', 'vertical']); var classNames = (0, _classnames2.default)(className, cxStyles('tabs', { vertical: vertical })); return _react2.default.createElement('div', (0, _extends3.default)({}, restProps, { className: classNames })); }; TabsHeader.propTypes = { className: _propTypes2.default.string, vertical: _propTypes2.default.bool }; var TabsContent = function TabsContent(_ref4) { var className = _ref4.className, restProps = (0, _objectWithoutProperties3.default)(_ref4, ['className']); var classNames = (0, _classnames2.default)(className, cxStyles('tabs-content')); return _react2.default.createElement('div', (0, _extends3.default)({}, restProps, { className: classNames })); }; TabsContent.propTypes = { className: _propTypes2.default.string }; var TabsControlled = function TabsControlled(_ref5) { var activeKey = _ref5.activeKey, children = _ref5.children, contentClassName = _ref5.contentClassName, contentStyle = _ref5.contentStyle, headerClassName = _ref5.headerClassName, headerStyle = _ref5.headerStyle, onSelect = _ref5.onSelect, vertical = _ref5.vertical, restProps = (0, _objectWithoutProperties3.default)(_ref5, ['activeKey', 'children', 'contentClassName', 'contentStyle', 'headerClassName', 'headerStyle', 'onSelect', 'vertical']); var headerChildren = _react.Children.map(children, function (child) { if ((0, _react.isValidElement)(child)) { return _react2.default.createElement( TabTitle, (0, _extends3.default)({}, child.props, { active: child.props.eventKey === activeKey, id: (0, _isBlank2.default)(child.props.id) ? null : child.props.id + 'Title', onSelect: onSelect, tabId: child.props.id }), child.props.title ); } return null; }); var contentChildren = _react.Children.map(children, function (child) { if ((0, _react.isValidElement)(child)) { return (0, _react.cloneElement)(child, { active: activeKey === child.props.eventKey }); } return child; }); return _react2.default.createElement( 'div', restProps, _react2.default.createElement( TabsHeader, { className: headerClassName, style: headerStyle, vertical: vertical }, headerChildren ), _react2.default.createElement( TabsContent, { className: contentClassName, style: contentStyle }, contentChildren ) ); }; TabsControlled.propTypes = { activeKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]), children: _propTypes2.default.node, contentClassName: _propTypes2.default.string, contentStyle: _propTypes2.default.object, headerClassName: _propTypes2.default.string, headerStyle: _propTypes2.default.object, onSelect: _propTypes2.default.func, vertical: _propTypes2.default.bool }; var Tabs = exports.Tabs = (0, _uncontrollable2.default)(TabsControlled, { activeKey: 'onSelect' }); Tabs.displayName = 'Tabs'; Tabs.Tab = Tab; exports.default = Tabs;