2023-11-15 15:57:04 +08:00

2 lines
6.4 KiB
JavaScript

import{c as A,d as Z}from"./index-bcd7a424.js";import{t as ee,v as te,T as le}from"./event-f85d77b0.js";import{b as Y,i as ae,d as se,a as E,e as D}from"./index-cf9a2dd7.js";import{d as P,I as oe,b as F,r as c,c as w,K as re,a3 as K,e as k,v as W,x as G,M as ne,g as $,n as H,u as m,j as X,_ as j,f as J,y as U,F as ie,w as V,E as I,J as ce,O as ue,o as ve,V as fe,h as me,S as de,H as pe,q as he,l as be}from"./plugin-vue_export-helper-85a4d40b.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=Y({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=oe(Q),a=F("scrollbar");r||ee(Se,"can not inject scrollbar context");const i=c(),v=c(),o=c({}),f=c(!1);let l=!1,h=!1,b=ae?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=s=>{var e;if(s.stopPropagation(),s.ctrlKey||[1,2].includes(s.button))return;(e=window.getSelection())==null||e.removeAllRanges(),L(s);const n=s.currentTarget;n&&(o.value[t.value.axis]=n[t.value.offset]-(s[t.value.client]-n.getBoundingClientRect()[t.value.direction]))},x=s=>{if(!v.value||!i.value||!r.wrapElement)return;const e=Math.abs(s.target.getBoundingClientRect()[t.value.direction]-s[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},L=s=>{s.stopImmediatePropagation(),l=!0,document.addEventListener("mousemove",C),document.addEventListener("mouseup",y),b=document.onselectstart,document.onselectstart=()=>!1},C=s=>{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]-s[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},O=()=>{h=!0,f.value=l};re(()=>{N(),document.removeEventListener("mouseup",y)});const N=()=>{document.onselectstart!==b&&(document.onselectstart=b)};return A(K(r,"scrollbarElement"),"mousemove",M),A(K(r,"scrollbarElement"),"mouseleave",O),(s,e)=>(k(),W(le,{name:m(a).b("fade"),persisted:""},{default:G(()=>[ne($("div",{ref_key:"instance",ref:i,class:H([m(a).e("bar"),m(a).is(m(t).key)]),onMousedown:x},[$("div",{ref_key:"thumb",ref:v,class:H(m(a).e("thumb")),style:X(m(S)),onMousedown:T},null,38)],34),[[te,s.always||f.value]])]),_:1},8,["name"]))}});var q=j(ze,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/thumb.vue"]]);const _e=Y({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,a=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,a.value=o.scrollLeft*100/l*r.ratioX}}}),(o,f)=>(k(),J(ie,null,[U(q,{move:a.value,ratio:o.ratioX,size:o.width,always:o.always},null,8,["move","ratio","size","always"]),U(q,{move:i.value,ratio:o.ratioY,size:o.height,vertical:"",always:o.always},null,8,["move","ratio","size","always"])],64))}});var ke=j(Ee,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/bar.vue"]]);const He=Y({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:se([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 a=d,i=F("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),x=w(()=>{const e={};return a.height&&(e.height=D(a.height)),a.maxHeight&&(e.maxHeight=D(a.maxHeight)),[a.wrapStyle,e]}),L=w(()=>[a.wrapClass,i.e("wrap"),{[i.em("wrap","hidden-default")]:!a.native}]),C=w(()=>[i.e("view"),a.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){he(e)?l.value.scrollTo(e):E(e)&&E(n)&&l.value.scrollTo(e,n)}const O=e=>{E(e)&&(l.value.scrollTop=e)},N=e=>{E(e)&&(l.value.scrollLeft=e)},s=()=>{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,a.minSize),B=Math.max(_,a.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(()=>a.noresize,e=>{e?(v==null||v(),o==null||o()):({stop:v}=Z(h,s),o=A("resize",s))},{immediate:!0}),V(()=>[a.maxHeight,a.height],()=>{a.native||I(()=>{var e;s(),l.value&&((e=S.value)==null||e.handleScroll(l.value))})}),ce(Q,ue({scrollbarElement:f,wrapElement:l})),ve(()=>{a.native||I(()=>{s()})}),fe(()=>s()),u({wrapRef:l,update:s,scrollTo:M,setScrollTop:O,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(L)),style:X(m(x)),onScroll:y},[(k(),W(de(e.tag),{ref_key:"resizeRef",ref:h,class:H(m(C)),style:X(e.viewStyle)},{default:G(()=>[me(e.$slots,"default")]),_:3},8,["class","style"]))],38),e.native?pe("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=j(Re,[["__file","/home/runner/work/element-plus/element-plus/packages/components/scrollbar/src/scrollbar.vue"]]);const Oe=be(Be);export{ye as B,Oe as E};