ellipsis.js.flow 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // @flow
  2. import type { Styles } from '../types/style'
  3. /**
  4. * CSS to represent truncated text with an ellipsis. You can optionally pass a max-width and number of lines before truncating.
  5. *
  6. * @example
  7. * // Styles as object usage
  8. * const styles = {
  9. * ...ellipsis('250px')
  10. * }
  11. *
  12. * // styled-components usage
  13. * const div = styled.div`
  14. * ${ellipsis('250px')}
  15. * `
  16. *
  17. * // CSS as JS Output
  18. *
  19. * div: {
  20. * 'display': 'inline-block',
  21. * 'maxWidth': '250px',
  22. * 'overflow': 'hidden',
  23. * 'textOverflow': 'ellipsis',
  24. * 'whiteSpace': 'nowrap',
  25. * 'wordWrap': 'normal'
  26. * }
  27. */
  28. export default function ellipsis(width?: ?string | ?number, lines?: number = 1): Styles {
  29. const styles = {
  30. display: 'inline-block',
  31. maxWidth: width || '100%',
  32. overflow: 'hidden',
  33. textOverflow: 'ellipsis',
  34. whiteSpace: 'nowrap',
  35. wordWrap: 'normal',
  36. }
  37. return lines > 1
  38. ? {
  39. ...styles,
  40. WebkitBoxOrient: 'vertical',
  41. WebkitLineClamp: lines,
  42. display: '-webkit-box',
  43. whiteSpace: 'normal',
  44. }
  45. : styles
  46. }