primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
2 lines (1 loc) • 4.66 kB
JavaScript
this.primereact=this.primereact||{},this.primereact.scrollpanel=function(e,r,t,n){"use strict";function l(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var c=l(r);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},o.apply(this,arguments)}var u={defaultProps:{__TYPE:"ScrollPanel",id:null,style:null,className:null,children:void 0},getProps:function(e){return n.ObjectUtils.getMergedProps(e,u.defaultProps)},getOtherProps:function(e){return n.ObjectUtils.getDiffProps(e,u.defaultProps)}},a=c.forwardRef((function(e,r){var l=u.getProps(e),a=c.useRef(null),s=c.useRef(null),i=c.useRef(null),d=c.useRef(null),p=c.useRef(!1),m=c.useRef(!1),f=c.useRef(null),g=c.useRef(null),h=c.useRef(null),v=c.useRef(null),b=c.useRef(null),H=c.useRef(!1),y=function(){var e=s.current.scrollWidth,r=-1*(a.current.clientHeight-i.current.clientHeight);h.current=s.current.clientWidth/e;var t=s.current.scrollHeight,l=-1*(a.current.clientWidth-d.current.clientWidth);v.current=s.current.clientHeight/t,b.current=window.requestAnimationFrame((function(){h.current>=1?n.DomHandler.addClass(i.current,"p-scrollpanel-hidden"):(n.DomHandler.removeClass(i.current,"p-scrollpanel-hidden"),i.current.style.cssText="width:"+Math.max(100*h.current,10)+"%; left:"+s.current.scrollLeft/e*100+"%;bottom:"+r+"px;"),v.current>=1?n.DomHandler.addClass(d.current,"p-scrollpanel-hidden"):(n.DomHandler.removeClass(d.current,"p-scrollpanel-hidden"),d.current.style.cssText="height:"+Math.max(100*v.current,10)+"%; top: calc("+s.current.scrollTop/t*100+"% - "+i.current.clientHeight+"px);right:"+l+"px;")}))},w=function(e){p.current?E(e):(m.current||E(e),D(e))},E=function(e){var r=e.pageX-f.current;f.current=e.pageX,b.current=window.requestAnimationFrame((function(){s.current.scrollLeft+=r/h.current}))},D=function(e){var r=e.pageY-g.current;g.current=e.pageY,b.current=window.requestAnimationFrame((function(){s.current.scrollTop+=r/v.current}))},P=function e(r){n.DomHandler.removeClass(d.current,"p-scrollpanel-grabbed"),n.DomHandler.removeClass(i.current,"p-scrollpanel-grabbed"),n.DomHandler.removeClass(document.body,"p-scrollpanel-grabbed"),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",e),p.current=!1,m.current=!1},O=function(){y()};t.useMountEffect((function(){var e,r,t;y(),window.addEventListener("resize",y),e=getComputedStyle(a.current),r=getComputedStyle(i.current),t=n.DomHandler.getHeight(a.current)-parseInt(r.height,10),"none"!==e["max-height"]&&0===t&&(a.current.style.height=s.current.offsetHeight+parseInt(r.height,10)>parseInt(e["max-height"],10)?e["max-height"]:s.current.offsetHeight+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom)+parseFloat(e.borderTopWidth)+parseFloat(e.borderBottomWidth)+"px"),H.current=!0})),t.useUnmountEffect((function(){H.current&&window.removeEventListener("resize",y),b.current&&window.cancelAnimationFrame(b.current)})),c.useImperativeHandle(r,(function(){return{props:l,refresh:O,getElement:function(){return a.current},getContent:function(){return s.current},getXBar:function(){return i.current},getYBar:function(){return d.current}}}));var C=u.getOtherProps(l),R=n.classNames("p-scrollpanel p-component",l.className);return c.createElement("div",o({ref:a,id:l.id,className:R,style:l.style},C),c.createElement("div",{className:"p-scrollpanel-wrapper"},c.createElement("div",{ref:s,className:"p-scrollpanel-content",onScroll:y,onMouseEnter:y},l.children)),c.createElement("div",{ref:i,className:"p-scrollpanel-bar p-scrollpanel-bar-x",onMouseDown:function(e){p.current=!0,f.current=e.pageX,n.DomHandler.addClass(i.current,"p-scrollpanel-grabbed"),n.DomHandler.addClass(document.body,"p-scrollpanel-grabbed"),document.addEventListener("mousemove",w),document.addEventListener("mouseup",P),e.preventDefault()}}),c.createElement("div",{ref:d,className:"p-scrollpanel-bar p-scrollpanel-bar-y",onMouseDown:function(e){m.current=!0,g.current=e.pageY,n.DomHandler.addClass(d.current,"p-scrollpanel-grabbed"),n.DomHandler.addClass(document.body,"p-scrollpanel-grabbed"),document.addEventListener("mousemove",w),document.addEventListener("mouseup",P),e.preventDefault()}}))}));return a.displayName="ScrollPanel",e.ScrollPanel=a,Object.defineProperty(e,"__esModule",{value:!0}),e}({},React,primereact.hooks,primereact.utils);