Skip to content

A React library that handles multiline ellipsis with a custom hook or a component, using TypeScript.

Notifications You must be signed in to change notification settings

XenoverseUp/react-clamped

Repository files navigation

React Clamped

A React Library to handle multiline ellipsises and to clamp the text to a fixed line number.

React-Clamped is a lightweight clamping library which allows you to create multiline ellipsis texts in react apps. Its bundle size is only 724B. Since it is very lightweight, you can use it any project and it will have almost no impact ont bundle size of the app.

Find the demo in this link: https://xenoverseup.github.io/react-clamped/

NPM JavaScript Style Guide

Install

npm install --save react-clamped

Usage

Basic Usage

Just import the Clamped component and wrap your content inside. The line number can be adjusted with clamp prop. The default for clamp prop is "1".

import React, { Component } from 'react'

import { Clamped } from 'react-clamped'

class Card extends Component {
  render() {
    return (
      <div className="card">
        <Clamped clamp={4}>{...your multiline content...}</Clamped>
      </div>
    )
  }
}

useClamped Hook

You can truncate the lines to a fixed number with useClamped hook, as well. Import the hook and initialize. Then assign the ref to the element you want to truncate.

import React, { Component } from 'react'

import { useClamped } from 'react-clamped'

const Card = () => {
  const ref = useClamped({
    clamp: 3,
    isClamped: true
  })
  
  return (
      <div className="card">
        <p ref={ref}>{...your multiline content...}</p>
      </div>
    )
}

Props

  • clamp : Number

    This prop determines how many lines should be rendered. The "clamp" can be used in both "Clamped" component as a prop and in "useClamped" hook as an object entry. Default value is 1.

  • element : String

    The "element" prop can be used in only "Clamped" component as a prop and it determines which DOM element should be used to wrap content. Default value is "p".

  • isClamped : Boolean

    This prop determines if the text should be truncated. The "isClamped" can be used in both "Clamped" component as a prop and in "useClamped" hook as an object entry. This prop can be very handy if you want to make a "show more" button. The default value if true.

Example

Here is an example of making collapsible text with React Clamped.

import React, { useState } from 'react'
import { Clamped, useClamped } from 'react-clamped'
import './App.css'

const App = () => {
  const [state, setState] = useState({
    component: true,
    hook: true
  })

  const ref = useClamped({
    clamp: 3,
    isClamped: state.hook
  })

  return (
    <div className='App'>
      <section>
        <div className='clamped-component'>
          <header>
            <h2>Am I clamped?</h2>
            <span>Clamped Component</span>
          </header>
          <Clamped clamp={3} isClamped={state.component} element="p">
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Natus eos
            temporibus voluptas porro earum sequi ipsum aut aliquam accusamus id
            saepe necessitatibus impedit nesciunt accusantium dolor culpa,
            corporis suscipit nisi molestias. Neque ipsa officia quis explicabo
            asperiores itaque porro facilis perspiciatis? Eaque, eos? Fuga
            facilis voluptate, molestiae maiores pariatur culpa excepturi nulla
            doloribus laboriosam minus mollitia porro dicta, cumque repellat
            illo, cum tempore itaque possimus repellendus corporis? Illo, quod
            consequuntur?
          </Clamped>
          <button onClick={() => setState({ ...state, component: !state.component })}>
            {state.first ? 'Show More' : 'Show Less'}
          </button>
        </div>
        <div className='use-clamped'>
          <header>
            <h2>Did you use clamp?</h2>
            <span>useClamped Hook</span>
          </header>
          <p ref={ref}>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Natus eos
            temporibus voluptas porro earum sequi ipsum aut aliquam accusamus id
            saepe necessitatibus impedit nesciunt accusantium dolor culpa,
            corporis suscipit nisi molestias. Neque ipsa officia quis explicabo
            asperiores itaque porro facilis perspiciatis? Eaque, eos? Fuga
            facilis voluptate, molestiae maiores pariatur culpa excepturi nulla
            doloribus laboriosam minus mollitia porro dicta, cumque repellat
            illo, cum tempore itaque possimus repellendus corporis? Illo, quod
            consequuntur?
          </p>
          <button onClick={() => setState({ ...state, hook: !state.hook })}>
            {state.second ? 'Show More' : 'Show Less'}
          </button>
        </div>
      </section>
    </div>
  )
}

export default App

License

MIT © XenoverseUp

About

A React library that handles multiline ellipsis with a custom hook or a component, using TypeScript.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published