vuux
Version:
Vue3 Nuxt3 Nuxt4 组件库
2 lines (1 loc) • 1.63 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("vue"),A=require("@vuux/utils"),H=(t,s,y,w)=>{const c=l.ref(t.max),u=l.ref(t.text.length),a=l.ref(!1),i=l.ref(null),F=l.computed(()=>(t.text.slice(0,u.value)||"").trim()+t.ellipsis),h=l.computed(()=>t.text&&u.value!==t.text.length),L=l.computed(()=>h.value&&!a.value?F.value:t.text);let x=0,v=[];const T=()=>{w.value&&(w.value.textContent=L.value)},d=()=>{if(!y.value)return 0;const e=Array.from(y.value.getClientRects());if(v.length===e.length&&v.every((n,g)=>n.top===e[g].top&&n.bottom===e[g].bottom))return x;v=e;const r=Object.keys(e.reduce((n,{top:g,bottom:z})=>{const E=`${g}/${z}`;return n[E]||(n[E]=!0),n},{})).length;return x=r,r},o=()=>!c.value||!s.value?!1:!!(c.value&&d()>c.value||s.value.scrollHeight>s.value.offsetHeight),m=e=>{u.value=e,T()},C=e=>{m(u.value+e)},M=()=>{for(;(!o()||d()<2)&&u.value<t.text.length;)C(1)},U=()=>{for(;o()&&d()>1&&u.value>0;)C(-1)},j=()=>{M(),U()},b=(e=0,r=u.value)=>{if(r-e<=3){j();return}const n=Math.floor((r+e)/2);m(n),o()?b(e,n):b(n,r)},O=()=>{i.value&&(i.value.disconnect(),i.value=null),v=[],x=0},f=A.Utils.debounce(()=>{a.value||(T(),(o()||h.value)&&b())},10),k=()=>{t.text&&(u.value=t.text.length,O(),l.nextTick(()=>{f()}))},q=()=>{a.value=!a.value,c.value=a.value?void 0:t.max,a.value?m(t.text.length):f()};return l.watch(()=>t.text,k),l.watch(()=>t.max,e=>{c.value=e,a.value||f()}),l.onMounted(()=>{k(),s.value&&(i.value=new ResizeObserver(()=>{f()}),i.value.observe(s.value))}),l.onUnmounted(()=>{O()}),{localExpanded:a,isClamped:h,handleToggleExpand:q}};exports.useFold=H;