UNPKG

use-line-clamp

Version:

React.js hook to detect if text will clamp in X number of lines

1 lines 2.46 kB
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import debounce from \"lodash.debounce\";\nimport { RefObject, useEffect, useState } from \"react\";\n\nexport default function useLineClamp<T extends HTMLElement>(\n ref: RefObject<T>,\n { lines }: { lines: number }\n) {\n const [clamps, setClamps] = useState(true);\n\n useEffect(() => {\n const checkClamps = () => {\n if (!ref.current) return;\n\n const initialValues = {\n webkitLineClamp: ref.current.style.webkitLineClamp,\n display: ref.current.style.display,\n webkitBoxOrient: ref.current.style.webkitBoxOrient,\n overflow: ref.current.style.overflow,\n };\n\n ref.current.style.webkitLineClamp = lines.toString();\n ref.current.style.display = \"-webkit-box\";\n ref.current.style.webkitBoxOrient = \"vertical\";\n ref.current.style.overflow = \"hidden\";\n\n setClamps(ref.current.clientHeight !== ref.current.scrollHeight);\n\n ref.current.style.webkitLineClamp = initialValues.webkitLineClamp;\n ref.current.style.display = initialValues.display;\n ref.current.style.webkitBoxOrient = initialValues.webkitBoxOrient;\n ref.current.style.overflow = initialValues.overflow;\n };\n\n const debouncedCheck = debounce(checkClamps, 50);\n\n checkClamps();\n\n window.addEventListener(\"resize\", debouncedCheck);\n return () => window.removeEventListener(\"resize\", debouncedCheck);\n }, [ref]);\n\n return clamps;\n}\n"],"mappings":"AAAA,OAAOA,MAAc,kBACrB,OAAoB,aAAAC,EAAW,YAAAC,MAAgB,QAEhC,SAARC,EACLC,EACA,CAAE,MAAAC,CAAM,EACR,CACA,GAAM,CAACC,EAAQC,CAAS,EAAIL,EAAS,EAAI,EAEzC,OAAAD,EAAU,IAAM,CACd,IAAMO,EAAc,IAAM,CACxB,GAAI,CAACJ,EAAI,QAAS,OAElB,IAAMK,EAAgB,CACpB,gBAAiBL,EAAI,QAAQ,MAAM,gBACnC,QAASA,EAAI,QAAQ,MAAM,QAC3B,gBAAiBA,EAAI,QAAQ,MAAM,gBACnC,SAAUA,EAAI,QAAQ,MAAM,QAC9B,EAEAA,EAAI,QAAQ,MAAM,gBAAkBC,EAAM,SAAS,EACnDD,EAAI,QAAQ,MAAM,QAAU,cAC5BA,EAAI,QAAQ,MAAM,gBAAkB,WACpCA,EAAI,QAAQ,MAAM,SAAW,SAE7BG,EAAUH,EAAI,QAAQ,eAAiBA,EAAI,QAAQ,YAAY,EAE/DA,EAAI,QAAQ,MAAM,gBAAkBK,EAAc,gBAClDL,EAAI,QAAQ,MAAM,QAAUK,EAAc,QAC1CL,EAAI,QAAQ,MAAM,gBAAkBK,EAAc,gBAClDL,EAAI,QAAQ,MAAM,SAAWK,EAAc,QAC7C,EAEMC,EAAiBV,EAASQ,EAAa,EAAE,EAE/C,OAAAA,EAAY,EAEZ,OAAO,iBAAiB,SAAUE,CAAc,EACzC,IAAM,OAAO,oBAAoB,SAAUA,CAAc,CAClE,EAAG,CAACN,CAAG,CAAC,EAEDE,CACT","names":["debounce","useEffect","useState","useLineClamp","ref","lines","clamps","setClamps","checkClamps","initialValues","debouncedCheck"]}