UNPKG

@material-ui/core

Version:

React components that implement Google's Material Design.

154 lines (136 loc) 4.32 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; import withStyles from '../styles/withStyles'; export const styles = theme => ({ /* Styles applied to the root element. */ root: { position: 'absolute', left: 0, right: 0, height: 48, background: 'rgba(0, 0, 0, 0.5)', display: 'flex', alignItems: 'center', fontFamily: theme.typography.fontFamily }, /* Styles applied to the root element if `titlePosition="bottom"`. */ titlePositionBottom: { bottom: 0 }, /* Styles applied to the root element if `titlePosition="top"`. */ titlePositionTop: { top: 0 }, /* Styles applied to the root element if a `subtitle` is provided. */ rootSubtitle: { height: 68 }, /* Styles applied to the title and subtitle container element. */ titleWrap: { flexGrow: 1, marginLeft: 16, marginRight: 16, color: theme.palette.common.white, overflow: 'hidden' }, /* Styles applied to the container element if `actionPosition="left"`. */ titleWrapActionPosLeft: { marginLeft: 0 }, /* Styles applied to the container element if `actionPosition="right"`. */ titleWrapActionPosRight: { marginRight: 0 }, /* Styles applied to the title container element. */ title: { fontSize: theme.typography.pxToRem(16), lineHeight: '24px', textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap' }, /* Styles applied to the subtitle container element. */ subtitle: { fontSize: theme.typography.pxToRem(12), lineHeight: 1, textOverflow: 'ellipsis', overflow: 'hidden', whiteSpace: 'nowrap' }, /* Styles applied to the actionIcon if supplied. */ actionIcon: {}, /* Styles applied to the actionIcon if `actionPosition="left"`. */ actionIconActionPosLeft: { order: -1 } }); const GridListTileBar = React.forwardRef(function GridListTileBar(props, ref) { const { actionIcon, actionPosition = 'right', classes, className: classNameProp, subtitle, title, titlePosition = 'bottom' } = props, other = _objectWithoutPropertiesLoose(props, ["actionIcon", "actionPosition", "classes", "className", "subtitle", "title", "titlePosition"]); const actionPos = actionIcon && actionPosition; const className = clsx(classes.root, classNameProp, titlePosition === 'top' ? classes.titlePositionTop : classes.titlePositionBottom, subtitle && classes.rootSubtitle); // Remove the margin between the title / subtitle wrapper, and the Action Icon const titleWrapClassName = clsx(classes.titleWrap, { left: classes.titleWrapActionPosLeft, right: classes.titleWrapActionPosRight }[actionPos]); return React.createElement("div", _extends({ className: className, ref: ref }, other), React.createElement("div", { className: titleWrapClassName }, React.createElement("div", { className: classes.title }, title), subtitle ? React.createElement("div", { className: classes.subtitle }, subtitle) : null), actionIcon ? React.createElement("div", { className: clsx(classes.actionIcon, { left: classes.actionIconActionPosLeft }[actionPos]) }, actionIcon) : null); }); process.env.NODE_ENV !== "production" ? GridListTileBar.propTypes = { /** * An IconButton element to be used as secondary action target * (primary action target is the tile itself). */ actionIcon: PropTypes.node, /** * Position of secondary action IconButton. */ actionPosition: PropTypes.oneOf(['left', 'right']), /** * Override or extend the styles applied to the component. * See [CSS API](#css) below for more details. */ classes: PropTypes.object.isRequired, /** * @ignore */ className: PropTypes.string, /** * String or element serving as subtitle (support text). */ subtitle: PropTypes.node, /** * Title to be displayed on tile. */ title: PropTypes.node, /** * Position of the title bar. */ titlePosition: PropTypes.oneOf(['top', 'bottom']) } : void 0; export default withStyles(styles, { name: 'MuiGridListTileBar' })(GridListTileBar);