UNPKG

@material-ui/core

Version:

React components that implement Google's Material Design.

262 lines (216 loc) 7.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.styles = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _clsx = _interopRequireDefault(require("clsx")); var _withStyles = _interopRequireDefault(require("../styles/withStyles")); var _ButtonBase = _interopRequireDefault(require("../ButtonBase")); var _helpers = require("../utils/helpers"); var _unsupportedProp = _interopRequireDefault(require("../utils/unsupportedProp")); var styles = function styles(theme) { var _extends2; return { /* Styles applied to the root element. */ root: (0, _extends3.default)({}, theme.typography.button, (_extends2 = { maxWidth: 264, minWidth: 72, position: 'relative', boxSizing: 'border-box', minHeight: 48, flexShrink: 0, padding: '6px 12px' }, (0, _defineProperty2.default)(_extends2, theme.breakpoints.up('md'), { padding: '6px 24px' }), (0, _defineProperty2.default)(_extends2, "overflow", 'hidden'), (0, _defineProperty2.default)(_extends2, "whiteSpace", 'normal'), (0, _defineProperty2.default)(_extends2, "textAlign", 'center'), (0, _defineProperty2.default)(_extends2, theme.breakpoints.up('md'), { fontSize: theme.typography.pxToRem(13), minWidth: 160 }), _extends2)), /* Styles applied to the root element if both `icon` and `label` are provided. */ labelIcon: { minHeight: 72, paddingTop: 9, '& $wrapper > *:first-child': { marginBottom: 6 } }, /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor="inherit"`. */ textColorInherit: { color: 'inherit', opacity: 0.7, '&$selected': { opacity: 1 }, '&$disabled': { opacity: 0.4 } }, /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor="primary"`. */ textColorPrimary: { color: theme.palette.text.secondary, '&$selected': { color: theme.palette.primary.main }, '&$disabled': { color: theme.palette.text.disabled } }, /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor="secondary"`. */ textColorSecondary: { color: theme.palette.text.secondary, '&$selected': { color: theme.palette.secondary.main }, '&$disabled': { color: theme.palette.text.disabled } }, /* Pseudo-class applied to the root element if `selected={true}` (controlled by the Tabs component). */ selected: {}, /* Pseudo-class applied to the root element if `disabled={true}` (controlled by the Tabs component). */ disabled: {}, /* Styles applied to the root element if `fullWidth={true}` (controlled by the Tabs component). */ fullWidth: { flexShrink: 1, flexGrow: 1, flexBasis: 0, maxWidth: 'none' }, /* Styles applied to the root element if `wrapped={true}`. */ wrapped: { fontSize: theme.typography.pxToRem(12), lineHeight: 1.5 }, /* Styles applied to the `icon` and `label`'s wrapper element. */ wrapper: { display: 'inline-flex', alignItems: 'center', justifyContent: 'center', width: '100%', flexDirection: 'column' } }; }; exports.styles = styles; var Tab = _react.default.forwardRef(function Tab(props, ref) { var classes = props.classes, className = props.className, _props$disabled = props.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, _props$disableFocusRi = props.disableFocusRipple, disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi, fullWidth = props.fullWidth, icon = props.icon, indicator = props.indicator, label = props.label, onChange = props.onChange, onClick = props.onClick, selected = props.selected, _props$textColor = props.textColor, textColor = _props$textColor === void 0 ? 'inherit' : _props$textColor, value = props.value, _props$wrapped = props.wrapped, wrapped = _props$wrapped === void 0 ? false : _props$wrapped, other = (0, _objectWithoutProperties2.default)(props, ["classes", "className", "disabled", "disableFocusRipple", "fullWidth", "icon", "indicator", "label", "onChange", "onClick", "selected", "textColor", "value", "wrapped"]); var handleChange = function handleChange(event) { if (onChange) { onChange(event, value); } if (onClick) { onClick(event); } }; return _react.default.createElement(_ButtonBase.default, (0, _extends3.default)({ focusRipple: !disableFocusRipple, className: (0, _clsx.default)(classes.root, classes["textColor".concat((0, _helpers.capitalize)(textColor))], className, disabled && classes.disabled, selected && classes.selected, label && icon && classes.labelIcon, fullWidth && classes.fullWidth, wrapped && classes.wrapped), ref: ref, role: "tab", "aria-selected": selected, disabled: disabled, onClick: handleChange }, other), _react.default.createElement("span", { className: classes.wrapper }, icon, label), indicator); }); process.env.NODE_ENV !== "production" ? Tab.propTypes = { /** * This prop isn't supported. * Use the `component` prop if you need to change the children structure. */ children: _unsupportedProp.default, /** * Override or extend the styles applied to the component. * See [CSS API](#css) below for more details. */ classes: _propTypes.default.object.isRequired, /** * @ignore */ className: _propTypes.default.string, /** * If `true`, the tab will be disabled. */ disabled: _propTypes.default.bool, /** * If `true`, the keyboard focus ripple will be disabled. * `disableRipple` must also be true. */ disableFocusRipple: _propTypes.default.bool, /** * If `true`, the ripple effect will be disabled. */ disableRipple: _propTypes.default.bool, /** * @ignore */ fullWidth: _propTypes.default.bool, /** * The icon element. */ icon: _propTypes.default.node, /** * @ignore * For server-side rendering consideration, we let the selected tab * render the indicator. */ indicator: _propTypes.default.node, /** * The label element. */ label: _propTypes.default.node, /** * @ignore */ onChange: _propTypes.default.func, /** * @ignore */ onClick: _propTypes.default.func, /** * @ignore */ selected: _propTypes.default.bool, /** * @ignore */ textColor: _propTypes.default.oneOf(['secondary', 'primary', 'inherit']), /** * You can provide your own value. Otherwise, we fallback to the child position index. */ value: _propTypes.default.any, /** * Tab labels appear in a single row. * They can use a second line if needed. */ wrapped: _propTypes.default.bool } : void 0; var _default = (0, _withStyles.default)(styles, { name: 'MuiTab' })(Tab); exports.default = _default;