2023-10-26 09:57:34 +08:00

2 lines
6.4 KiB
JavaScript

import{t as Z,c as O,v as ee,T as te,e as le}from"./event-a537c4cb.js";import{b as X,i as se,d as ae,a as E,e as j}from"./index-72686045.js";import{u as I,_ as Y,w as oe}from"./base-0e92f4db.js";import{d as P,D as re,r as c,c as w,J as ne,$ as K,b as k,m as W,p as G,L as ie,f as $,n as H,u as m,h as D,e as J,q as U,F as ce,w as V,A as q,E as ue,M as ve,o as fe,W as me,g as de,U as pe,C as he,k as be}from"./runtime-core.esm-bundler-67034826.js";const Q=Symbol("scrollbarContextKey"),g=4,ye={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},ge=({move:d,size:u,bar:r})=>({[r.size]:u,transform:`translate${r.axis}(${d}%)`}),we=X({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),Se="Thumb",ze=P({__name:"thumb",props:we,setup(d){const u=d,r=re(Q),s=I("scrollbar");r||Z(Se,"can not inject scrollbar context");const i=c(),v=c(),o=c({}),f=c(!1);let l=!1,h=!1,b=se?document.onselectstart:null;const t=w(()=>ye[u.vertical?"vertical":"horizontal"]),S=w(()=>ge({size:u.size,move:u.move,bar:t.value})),z=w(()=>i.value[t.value.offset]**2/r.wrapElement[t.value.scrollSize]/u.ratio/v.value[t.value.offset]),T=a=>{var e;if(a.stopPropagation(),a.ctrlKey||[1,2].includes(a.button))return;(e=window.getSelection())==null||e.removeAllRanges(),x(a);const n=a.currentTarget;n&&(o.value[t.value.axis]=n[t.value.offset]-(a[t.value.client]-n.getBoundingClientRect()[t.value.direction]))},L=a=>{if(!v.value||!i.value||!r.wrapElement)return;const e=Math.abs(a.target.getBoundingClientRect()[t.value.direction]-a[t.value.client]),n=v.value[t.value.offset]/2,p=(e-n)*100*z.value/i.value[t.value.offset];r.wrapElement[t.value.scroll]=p*r.wrapElement[t.value.scrollSize]/100},x=a=>{a.stopImmediatePropagation(),l=!0,document.addEventListener("mousemove",C),document.addEventListener("mouseup",y),b=document.onselectstart,document.onselectstart=()=>!1},C=a=>{if(!i.value||!v.value||l===!1)return;const e=o.value[t.value.axis];if(!e)return;const n=(i.value.getBoundingClientRect()[t.value.direction]-a[t.value.client])*-1,p=v.value[t.value.offset]-e,_=(n-p)*100*z.value/i.value[t.value.offset];r.wrapElement[t.value.scroll]=_*r.wrapElement[t.value.scrollSize]/100},y=()=>{l=!1,o.value[t.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",y),N(),h&&(f.value=!1)},M=()=>{h=!1,f.value=!!u.size},A=()=>{h=!0,f.value=l};ne(()=>{N(),document.removeEventListener("mouseup",y)});const N=()=>{document.onselectstart!==b&&(document.onselectstart=b)};return O(K(r,"scrollbarElement"),"mousemove",M),O(K(r,"scrollbarElement"),"mouseleave",A),(a,e)=>(k(),W(te,{name:m(s).b("fade"),persisted:""},{default:G(()=>[ie($("div",{ref_key:"instance",ref:i,class:H([m(s).e("bar"),m(s).is(m(t).key)]),onMousedown:L},[$("div",{ref_key:"thumb",ref:v,class:H(m(s).e("thumb")),style:D(m(S)),onMousedown:T},null,38)],34),[[ee,a.always||f.value]])]),_:1},8,["name"]))}});var F=Y(ze,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/thumb.vue"]]);const _e=X({always:{type:Boolean,default:!0},width:String,height:String,ratioX:{type:Number,default:1},ratioY:{type:Number,default:1}}),Ee=P({__name:"bar",props:_e,setup(d,{expose:u}){const r=d,s=c(0),i=c(0);return u({handleScroll:o=>{if(o){const f=o.offsetHeight-g,l=o.offsetWidth-g;i.value=o.scrollTop*100/f*r.ratioY,s.value=o.scrollLeft*100/l*r.ratioX}}}),(o,f)=>(k(),J(ce,null,[U(F,{move:s.value,ratio:o.ratioX,size:o.width,always:o.always},null,8,["move","ratio","size","always"]),U(F,{move:i.value,ratio:o.ratioY,size:o.height,vertical:"",always:o.always},null,8,["move","ratio","size","always"])],64))}});var ke=Y(Ee,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/bar.vue"]]);const He=X({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:ae([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20}}),Te={scroll:({scrollTop:d,scrollLeft:u})=>[d,u].every(E)},Ce="ElScrollbar",Ne=P({name:Ce}),Re=P({...Ne,props:He,emits:Te,setup(d,{expose:u,emit:r}){const s=d,i=I("scrollbar");let v,o;const f=c(),l=c(),h=c(),b=c("0"),t=c("0"),S=c(),z=c(1),T=c(1),L=w(()=>{const e={};return s.height&&(e.height=j(s.height)),s.maxHeight&&(e.maxHeight=j(s.maxHeight)),[s.wrapStyle,e]}),x=w(()=>[s.wrapClass,i.e("wrap"),{[i.em("wrap","hidden-default")]:!s.native}]),C=w(()=>[i.e("view"),s.viewClass]),y=()=>{var e;l.value&&((e=S.value)==null||e.handleScroll(l.value),r("scroll",{scrollTop:l.value.scrollTop,scrollLeft:l.value.scrollLeft}))};function M(e,n){be(e)?l.value.scrollTo(e):E(e)&&E(n)&&l.value.scrollTo(e,n)}const A=e=>{E(e)&&(l.value.scrollTop=e)},N=e=>{E(e)&&(l.value.scrollLeft=e)},a=()=>{if(!l.value)return;const e=l.value.offsetHeight-g,n=l.value.offsetWidth-g,p=e**2/l.value.scrollHeight,_=n**2/l.value.scrollWidth,R=Math.max(p,s.minSize),B=Math.max(_,s.minSize);z.value=p/(e-p)/(R/(e-R)),T.value=_/(n-_)/(B/(n-B)),t.value=R+g<e?`${R}px`:"",b.value=B+g<n?`${B}px`:""};return V(()=>s.noresize,e=>{e?(v==null||v(),o==null||o()):({stop:v}=le(h,a),o=O("resize",a))},{immediate:!0}),V(()=>[s.maxHeight,s.height],()=>{s.native||q(()=>{var e;a(),l.value&&((e=S.value)==null||e.handleScroll(l.value))})}),ue(Q,ve({scrollbarElement:f,wrapElement:l})),fe(()=>{s.native||q(()=>{a()})}),me(()=>a()),u({wrapRef:l,update:a,scrollTo:M,setScrollTop:A,setScrollLeft:N,handleScroll:y}),(e,n)=>(k(),J("div",{ref_key:"scrollbarRef",ref:f,class:H(m(i).b())},[$("div",{ref_key:"wrapRef",ref:l,class:H(m(x)),style:D(m(L)),onScroll:y},[(k(),W(pe(e.tag),{ref_key:"resizeRef",ref:h,class:H(m(C)),style:D(e.viewStyle)},{default:G(()=>[de(e.$slots,"default")]),_:3},8,["class","style"]))],38),e.native?he("v-if",!0):(k(),W(ke,{key:0,ref_key:"barRef",ref:S,height:t.value,width:b.value,always:e.always,"ratio-x":T.value,"ratio-y":z.value},null,8,["height","width","always","ratio-x","ratio-y"]))],2))}});var Be=Y(Re,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/scrollbar.vue"]]);const Ae=oe(Be);export{ye as B,Ae as E};