// @flow import type { Styles } from '../types/style' /** * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating. * * @example * // Styles as object usage * const styles = { * ...ellipsis('250px') * } * * // styled-components usage * const div = styled.div` * ${ellipsis('250px')} * ` * * // CSS as JS Output * * div: { * 'display': 'inline-block', * 'maxWidth': '250px', * 'overflow': 'hidden', * 'textOverflow': 'ellipsis', * 'whiteSpace': 'nowrap', * 'wordWrap': 'normal' * } */ export default function ellipsis(width?: ?string | ?number, lines?: number = 1): Styles { const styles = { display: 'inline-block', maxWidth: width || '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', wordWrap: 'normal', } return lines > 1 ? { ...styles, WebkitBoxOrient: 'vertical', WebkitLineClamp: lines, display: '-webkit-box', whiteSpace: 'normal', } : styles }