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) • 5.92 kB
JavaScript
import*as t from"react";import e,{PrimeReactContext as r,localeOption as n}from"primereact/api";import{ComponentBase as o,useHandleStyle as i}from"primereact/componentbase";import{CSSTransition as l}from"primereact/csstransition";import{useMergeProps as c,useEventListener as a,useUnmountEffect as s}from"primereact/hooks";import{ChevronUpIcon as p}from"primereact/icons/chevronup";import{Ripple as u}from"primereact/ripple";import{classNames as f,DomHandler as m,ZIndexUtils as y,IconUtils as b}from"primereact/utils";function d(){return d=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},d.apply(this,arguments)}function v(t){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},v(t)}function g(t,e){if("object"!==v(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==v(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}function h(t){var e=g(t,"string");return"symbol"===v(e)?e:String(e)}function w(t){if(Array.isArray(t))return t}function O(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,l,c=[],a=!0,s=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;a=!1}else for(;!(a=(n=i.call(r)).done)&&(c.push(n.value),c.length!==e);a=!0);}catch(t){s=!0,o=t}finally{try{if(!a&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw o}}return c}}function j(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function S(t,e){if(t){if("string"==typeof t)return j(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?j(t,e):void 0}}function E(){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 x(t,e){return w(t)||O(t,e)||S(t,e)||E()}var P=o.extend({defaultProps:{__TYPE:"ScrollTop",target:"window",threshold:400,icon:null,behavior:"smooth",className:null,style:null,transitionOptions:null,onShow:null,onHide:null,children:void 0},css:{classes:{root:function(t){return f("p-scrolltop p-link p-component",{"p-scrolltop-sticky":"window"!==t.props.target})},icon:"p-scrolltop-icon",transition:"p-scrolltop"},styles:"\n@layer primereact {\n .p-scrolltop {\n position: fixed;\n bottom: 20px;\n right: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n \n .p-scrolltop-sticky {\n position: sticky;\n }\n \n .p-scrolltop-sticky.p-link {\n margin-left: auto;\n }\n \n .p-scrolltop-helper {\n display: none;\n }\n \n .p-scrolltop-enter {\n opacity: 0;\n }\n \n .p-scrolltop-enter-active {\n opacity: 1;\n transition: opacity .15s;\n }\n \n .p-scrolltop-exit {\n opacity: 1;\n }\n \n .p-scrolltop-exit-active {\n opacity: 0;\n transition: opacity .15s;\n }\n}\n"}});function k(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function I(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?k(Object(r),!0).forEach((function(e){var n,o,i;n=t,i=r[e],(o=h(o=e))in n?Object.defineProperty(n,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):n[o]=i})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):k(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}var T=t.memo(t.forwardRef((function(o,v){var g=x(t.useState(!1),2),h=g[0],w=g[1],O=c(),j=t.useContext(r),S=P.getProps(o,j),E=P.setMetaData({props:S,state:{visible:h}}),k=E.ptm,T=E.cx;i(P.css.styles,E.isUnstyled,{name:"scrolltop"});var N=t.useRef(null),A=t.useRef(null),D="parent"===S.target,R=x(a({target:function(){return A.current&&A.current.parentElement},type:"scroll",listener:function(t){C(t.currentTarget.scrollTop)}}),1)[0],H=x(a({target:"window",type:"scroll",listener:function(t){t&&C(m.getWindowScrollTop())}}),1)[0],C=function(t){w(t>S.threshold)};t.useImperativeHandle(v,(function(){return{props:S,getElement:function(){return elementRef.current}}})),t.useEffect((function(){"window"===S.target?H():"parent"===S.target&&R()}),[]),s((function(){y.clear(N.current)}));var z=O({className:T("icon")},k("icon")),M=b.getJSXIcon(S.icon||t.createElement(p,z),I({},z),{props:S}),U=n("aria")?n("aria").scrollTop:void 0,Z=O({ref:N,type:"button",className:f(S.className,T("root")),style:S.style,onClick:function(){("window"===S.target?window:A.current.parentElement).scroll({top:0,behavior:S.behavior})},"aria-label":U},P.getOtherProps(S),k("root")),_=O({classNames:T("transition"),in:h,timeout:{enter:150,exit:150},options:S.transitionOptions,unmountOnExit:!0,onEnter:function(){y.set("overlay",N.current,j&&j.autoZIndex||e.autoZIndex,j&&j.zIndex.overlay||e.zIndex.overlay)},onEntered:function(){S.onShow&&S.onShow()},onExited:function(){y.clear(N.current),S.onHide&&S.onHide()}},k("transition"));return t.createElement(t.Fragment,null,t.createElement(l,d({nodeRef:N},_),t.createElement("button",Z,M,t.createElement(u,null))),D&&t.createElement("span",{ref:A,className:"p-scrolltop-helper"}))})));T.displayName="ScrollTop";export{T as ScrollTop};