UNPKG

@material-ui/core

Version:

React components that implement Google's Material Design.

136 lines (120 loc) 3.95 kB
import _extends from "@babel/runtime/helpers/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; // @inheritedComponent Paper import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import withStyles from '../styles/withStyles'; import { capitalize } from '../utils/helpers'; import Paper from '../Paper'; export const styles = theme => { const backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900]; return { /* Styles applied to the root element. */ root: { display: 'flex', flexDirection: 'column', width: '100%', boxSizing: 'border-box', // Prevent padding issue with the Modal and fixed positioned AppBar. zIndex: theme.zIndex.appBar, flexShrink: 0 }, /* Styles applied to the root element if `position="fixed"`. */ positionFixed: { position: 'fixed', top: 0, left: 'auto', right: 0 }, /* Styles applied to the root element if `position="absolute"`. */ positionAbsolute: { position: 'absolute', top: 0, left: 'auto', right: 0 }, /* Styles applied to the root element if `position="sticky"`. */ positionSticky: { position: 'sticky', top: 0, left: 'auto', right: 0 }, /* Styles applied to the root element if `position="static"`. */ positionStatic: { position: 'static' }, /* Styles applied to the root element if `position="relative"`. */ positionRelative: { position: 'relative' }, /* Styles applied to the root element if `color="default"`. */ colorDefault: { backgroundColor: backgroundColorDefault, color: theme.palette.getContrastText(backgroundColorDefault) }, /* Styles applied to the root element if `color="primary"`. */ colorPrimary: { backgroundColor: theme.palette.primary.main, color: theme.palette.primary.contrastText }, /* Styles applied to the root element if `color="secondary"`. */ colorSecondary: { backgroundColor: theme.palette.secondary.main, color: theme.palette.secondary.contrastText } }; }; function AppBar(props) { const { children, classes, className: classNameProp, color, position } = props, other = _objectWithoutProperties(props, ["children", "classes", "className", "color", "position"]); const className = classNames(classes.root, classes[`position${capitalize(position)}`], { [classes[`color${capitalize(color)}`]]: color !== 'inherit', 'mui-fixed': position === 'fixed' // Useful for the Dialog }, classNameProp); return React.createElement(Paper, _extends({ square: true, component: "header", elevation: 4, className: className }, other), children); } AppBar.propTypes = process.env.NODE_ENV !== "production" ? { /** * The content of the component. */ children: PropTypes.node.isRequired, /** * Override or extend the styles applied to the component. * See [CSS API](#css-api) below for more details. */ classes: PropTypes.object.isRequired, /** * @ignore */ className: PropTypes.string, /** * The color of the component. It supports those theme colors that make sense for this component. */ color: PropTypes.oneOf(['inherit', 'primary', 'secondary', 'default']), /** * The positioning type. The behavior of the different options is described * [here](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning). * Note: `sticky` is not universally supported and will fall back to `static` when unavailable. */ position: PropTypes.oneOf(['fixed', 'absolute', 'sticky', 'static', 'relative']) } : {}; AppBar.defaultProps = { color: 'primary', position: 'fixed' }; export default withStyles(styles, { name: 'MuiAppBar' })(AppBar);