UNPKG

mdc-react

Version:

Material Components for the web implemented in React

88 lines (75 loc) 2.35 kB
import { Children, forwardRef } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { Clone } from '../component'; import { cssClasses } from './constants'; const CardHeader = forwardRef(({ title, subtitle, overline, graphic, actions, element = 'div', component: Element = element, className, children, ...props }, ref) => { const classNames = classnames(cssClasses.HEADER, className); return ( <Element ref={ref} className={classNames} {...props}> {graphic && <Clone component={graphic} className={cssClasses.HEADER_GRAPHIC} /> } <div className={cssClasses.HEADER_CONTENT}> {overline && <Clone component={overline} fallback="span" className={cssClasses.OVERLINE} /> } {title && <Clone component={title} fallback="h2" className={cssClasses.TITLE} /> } {subtitle && <Clone component={subtitle} fallback="h3" className={cssClasses.SUBTITLE} /> } {children} </div> {actions && <div className={cssClasses.HEADER_ACTIONS}> {Children.map(actions, action => <Clone component={action} className={cssClasses.ACTION} /> )} </div> } </Element> ); }); CardHeader.displayName = 'MDCCardHeader'; CardHeader.propTypes = { title: PropTypes.node, subtitle: PropTypes.node, overline: PropTypes.node, graphic: PropTypes.element, actions: PropTypes.oneOfType([ PropTypes.element, PropTypes.arrayOf(PropTypes.element) ]) }; export default CardHeader;