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) • 8.84 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("primereact/api"),n=require("primereact/componentbase"),t=require("primereact/hooks"),o=require("primereact/utils");function l(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var a=l(e);function c(){return c=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},c.apply(null,arguments)}function u(e){if(Array.isArray(e))return e}function i(e,r){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var t,o,l,a,c=[],u=!0,i=!1;try{if(l=(n=n.call(e)).next,0===r){if(Object(n)!==n)return;u=!1}else for(;!(u=(t=l.call(n)).done)&&(c.push(t.value),c.length!==r);u=!0);}catch(e){i=!0,o=e}finally{try{if(!u&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(i)throw o}}return c}}function s(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function p(e,r){if(e){if("string"==typeof e)return s(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,r):void 0}}function d(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,r){return u(e)||i(e,r)||p(e,r)||d()}var m=n.ComponentBase.extend({defaultProps:{__TYPE:"ScrollPanel",id:null,style:null,className:null,children:void 0,step:5},css:{classes:{root:"p-scrollpanel p-component",wrapper:"p-scrollpanel-wrapper",content:"p-scrollpanel-content",barx:"p-scrollpanel-bar p-scrollpanel-bar-x",bary:"p-scrollpanel-bar p-scrollpanel-bar-y"},styles:"\n @layer primereact {\n .p-scrollpanel-wrapper {\n overflow: hidden;\n width: 100%;\n height: 100%;\n position: relative;\n z-index: 1;\n float: left;\n }\n\n .p-scrollpanel-content {\n height: calc(100% + 18px);\n width: calc(100% + 18px);\n padding: 0 18px 18px 0;\n position: relative;\n overflow: auto;\n box-sizing: border-box;\n }\n\n .p-scrollpanel-bar {\n position: relative;\n background: #c1c1c1;\n border-radius: 3px;\n z-index: 2;\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.25s linear;\n }\n\n .p-scrollpanel-bar-y {\n width: 9px;\n top: 0;\n }\n\n .p-scrollpanel-bar-x {\n height: 9px;\n bottom: 0;\n }\n\n .p-scrollpanel-hidden {\n visibility: hidden;\n }\n\n .p-scrollpanel:hover .p-scrollpanel-bar,\n .p-scrollpanel:active .p-scrollpanel-bar {\n opacity: 1;\n }\n\n .p-scrollpanel-grabbed {\n user-select: none;\n }\n }\n "}}),h=a.forwardRef((function(e,l){var u=t.useMergeProps(),i=a.useContext(r.PrimeReactContext),s=m.getProps(e,i),p=f(a.useState(s.id),2),d=p[0],h=p[1],v=f(a.useState("vertical"),2),b=v[0],g=v[1],y=m.setMetaData({props:s}),w=y.ptm,x=y.cx;n.useHandleStyle(m.css.styles,y.isUnstyled,{name:"scrollpanel"});var D=a.useRef(null),H=a.useRef(null),E=a.useRef(null),S=a.useRef(null),C=f(a.useState(0),2),A=C[0],R=C[1],L=f(a.useState(0),2),O=L[0],P=L[1],j=a.useRef(!1),T=a.useRef(!1),z=a.useRef(null),M=a.useRef(null),N=a.useRef(null),F=a.useRef(null),I=a.useRef(null),q=a.useRef(!1),U=a.useRef(null),k=d+"_content",B=function(){if(H.current){var e=H.current.scrollWidth,r=-1*(D.current.clientHeight-E.current.clientHeight);N.current=H.current.clientWidth/e;var n=H.current.scrollHeight,t=-1*(D.current.clientWidth-S.current.clientWidth);F.current=H.current.clientHeight/n,I.current=window.requestAnimationFrame((function(){N.current>=1?o.DomHandler.addClass(E.current,"p-scrollpanel-hidden"):(o.DomHandler.removeClass(E.current,"p-scrollpanel-hidden"),o.DomHandler.applyStyle(E.current,{width:Math.max(100*N.current,10)+"%",left:H.current.scrollLeft/e*100+"%",bottom:r+"px"})),F.current>=1?o.DomHandler.addClass(S.current,"p-scrollpanel-hidden"):(o.DomHandler.removeClass(S.current,"p-scrollpanel-hidden"),o.DomHandler.applyStyle(S.current,{height:Math.max(100*F.current,10)+"%",top:"calc("+H.current.scrollTop/n*100+"% - "+E.current.clientHeight+"px)",right:t+"px"}))}))}},_=function(e){E.current.isSameNode(e.target)?g("horizontal"):S.current.isSameNode(e.target)&&g("vertical")},W=function(){"horizontal"===b&&g("vertical")},Y=function(e){j.current?K(e):(T.current||K(e),X(e))},K=function(e){var r=e.pageX-z.current;z.current=e.pageX,I.current=window.requestAnimationFrame((function(){H.current.scrollLeft+=r/N.current}))},X=function(e){var r=e.pageY-M.current;M.current=e.pageY,I.current=window.requestAnimationFrame((function(){H.current.scrollTop+=r/F.current}))},$=function(e){o.DomHandler.removeClass(S.current,"p-scrollpanel-grabbed"),o.DomHandler.removeClass(E.current,"p-scrollpanel-grabbed"),o.DomHandler.removeClass(document.body,"p-scrollpanel-grabbed"),document.removeEventListener("mousemove",Y),document.removeEventListener("mouseup",$),j.current=!1,T.current=!1},G=function(e){if("vertical"===b)switch(e.code){case"ArrowDown":V("scrollTop",s.step),e.preventDefault();break;case"ArrowUp":V("scrollTop",-1*s.step),e.preventDefault();break;case"ArrowLeft":case"ArrowRight":e.preventDefault()}else if("horizontal"===b)switch(e.code){case"ArrowRight":V("scrollLeft",s.step),e.preventDefault();break;case"ArrowLeft":V("scrollLeft",-1*s.step),e.preventDefault();break;case"ArrowDown":case"ArrowUp":e.preventDefault()}},J=function(){Z()},Q=function(e,r){H.current[e]+=r,B()},V=function(e,r){Z(),U.current=setTimeout((function(){Q(e,r)}),40)},Z=function(){U.current&&clearTimeout(U.current)},ee=function(){B()};t.useMountEffect((function(){var e,r,n;s.id||h(o.UniqueComponentId()),B(),window.addEventListener("resize",B),e=getComputedStyle(D.current),r=getComputedStyle(E.current),n=o.DomHandler.getHeight(D.current)-parseInt(r.height,10),"none"!==e["max-height"]&&0===n&&(D.current.style.height=H.current.offsetHeight+parseInt(r.height,10)>parseInt(e["max-height"],10)?e["max-height"]:H.current.offsetHeight+parseFloat(e.paddingTop)+parseFloat(e.paddingBottom)+parseFloat(e.borderTopWidth)+parseFloat(e.borderBottomWidth)+"px"),q.current=!0})),t.useUnmountEffect((function(){q.current&&window.removeEventListener("resize",B),I.current&&window.cancelAnimationFrame(I.current)})),a.useImperativeHandle(l,(function(){return{props:s,refresh:ee,getElement:function(){return D.current},getContent:function(){return H.current},getXBar:function(){return E.current},getYBar:function(){return S.current}}}));var re=u({id:s.id,ref:D,style:s.style,className:o.classNames(s.className,x("root"))},m.getOtherProps(s),w("root")),ne=u({className:x("wrapper")},w("wrapper")),te=u({className:x("content"),onScroll:function(e){A!==e.target.scrollLeft?(R(e.target.scrollLeft),g("horizontal")):O!==e.target.scrollTop&&(P(e.target.scrollTop),g("vertical")),B()},onMouseEnter:B},w("content")),oe=u({ref:E,role:"scrollbar",className:x("barx"),tabIndex:0,"aria-valuenow":O,"aria-controls":k,"aria-orientation":"horizontal",onFocus:_,onBlur:W,onKeyDown:G,onKeyUp:J,onMouseDown:function(e){j.current=!0,z.current=e.pageX,o.DomHandler.addClass(E.current,"p-scrollpanel-grabbed"),o.DomHandler.addClass(document.body,"p-scrollpanel-grabbed"),document.addEventListener("mousemove",Y),document.addEventListener("mouseup",$),e.preventDefault()}},w("barx")),le=u({ref:S,role:"scrollbar",className:x("bary"),tabIndex:0,"aria-valuenow":A,"aria-controls":k,"aria-orientation":"vertical",onFocus:_,onBlur:W,onKeyDown:G,onKeyUp:J,onMouseDown:function(e){T.current=!0,M.current=e.pageY,o.DomHandler.addClass(S.current,"p-scrollpanel-grabbed"),o.DomHandler.addClass(document.body,"p-scrollpanel-grabbed"),document.addEventListener("mousemove",Y),document.addEventListener("mouseup",$),e.preventDefault()}},w("bary"));return a.createElement("div",re,a.createElement("div",ne,a.createElement("div",c({ref:H},te),s.children)),a.createElement("div",oe),a.createElement("div",le))}));h.displayName="ScrollPanel",exports.ScrollPanel=h;
;