@flyyer/use-fit-text
Version:
React hook used to fit text in a div
3 lines (2 loc) • 2.26 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("dequal/lite")):"function"==typeof define&&define.amd?define(["exports","react","dequal/lite"],t):t((e||self).useFitText={},e.react,e.lite)}(this,function(e,t,n){function i(){return(i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}var o={debug:10,info:20,warn:30,error:40,none:100},r="undefined"!=typeof window&&window.document&&window.document.createElement?t.useLayoutEffect:t.useEffect;e.useFitText=function(e,f){var u=void 0===e?{}:e,c=u.logLevel,a=u.maxFontSize,l=void 0===a?100:a,s=u.minFontSize,d=void 0===s?20:s,S=u.onFinish,z=u.onStart,v=u.resolution,w=void 0===v?5:v,h=o[void 0===c?"warn":c],y=t.useCallback(function(){return{calcKey:0,fontSize:l,fontSizePrev:d,fontSizeMax:l,fontSizeMin:d}},[l,d]),m=t.useRef(null),p=t.useRef(!1),x=t.useRef(),M=t.useState(y),b=M[0],g=M[1],F=t.useState(!1),q=F[0],K=F[1],E=b.calcKey,P=b.fontSize,O=b.fontSizeMax,R=b.fontSizeMin,T=b.fontSizePrev,j=null,A=t.useState(function(){return new window.ResizeObserver(function(){j=window.requestAnimationFrame(function(){p.current||(z&&z(),p.current=!0,K(!0),g(i({},y(),{calcKey:E+1})))})})})[0];t.useEffect(function(){return m.current&&A.observe(m.current),function(){j&&window.cancelAnimationFrame(j),A.disconnect()}},[j,A]);var C=x.current;return t.useEffect(function(){0===E||p.current||(n.dequal(C,f)||(z&&z(),K(!0),g(i({},y(),{calcKey:E+1}))),x.current=f)},[E,y,z,C].concat(f)),r(function(){if(0!==E){var e=Math.abs(P-T)<=w,t=!!m.current&&(m.current.scrollHeight>m.current.offsetHeight||m.current.scrollWidth>m.current.offsetWidth),n=P>T;if(e)t&&P===T?(p.current=!1,K(!1),h<=o.info&&console.info("[use-fit-text] reached `minFontSize = "+d+"` without fitting text")):t?g({fontSize:n?T:R,fontSizeMax:O,fontSizeMin:R,fontSizePrev:T,calcKey:E}):(p.current=!1,K(!1),S&&S(P));else{var i,r=O,f=R;t?(i=n?T-P:R-P,r=Math.min(O,P)):(i=n?O-P:T-P,f=Math.max(R,P)),g({calcKey:E,fontSize:P+i/2,fontSizeMax:r,fontSizeMin:f,fontSizePrev:P})}}},[E,P,O,R,T,S,m,w]),{fontSize:P+"%",ref:m,isCalculating:q}}});
//# sourceMappingURL=index.umd.js.map