UNPKG

@flyyer/use-fit-text

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