primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 80+ 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) • 14.4 kB
JavaScript
import*as e from"react";import t,{localeOption as n}from"primereact/api";import{CSSTransition as a}from"primereact/csstransition";import{useMountEffect as i,usePrevious as r,useResizeListener as l,useUpdateEffect as o,useInterval as c,useUnmountEffect as u}from"primereact/hooks";import{Portal as s}from"primereact/portal";import{Ripple as m}from"primereact/ripple";import{classNames as d,UniqueComponentId as v,DomHandler as p,ObjectUtils as h,ZIndexUtils as f}from"primereact/utils";function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},g.apply(this,arguments)}function I(e){if(Array.isArray(e))return e}function b(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r=[],l=!0,o=!1;try{for(n=n.call(e);!(l=(a=n.next()).done)&&(r.push(a.value),!t||r.length!==t);l=!0);}catch(e){o=!0,i=e}finally{try{l||null==n.return||n.return()}finally{if(o)throw i}}return r}}function x(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function y(e,t){if(e){if("string"==typeof e)return x(e,t);var n=Object.prototype.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)?x(e,t):void 0}}function w(){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 E(e,t){return I(e)||b(e,t)||y(e,t)||w()}var N=e.memo(e.forwardRef((function(t,n){var a=function(){t.slideShowActive&&t.stopSlideShow&&t.stopSlideShow()},r=function(e){a(),t.onActiveItemChange({index:t.circular&&0===t.activeItemIndex?t.value.length-1:0!==t.activeItemIndex?t.activeItemIndex-1:0}),e&&e.cancelable&&e.preventDefault()},l=function(e){a(),t.onActiveItemChange({index:t.circular&&t.value.length-1===t.activeItemIndex?0:t.activeItemIndex+1}),e&&e.cancelable&&e.preventDefault()},o=function(e){a(),t.onActiveItemChange({index:e})},c=function(e){t.changeItemOnIndicatorHover&&(a(),t.onActiveItemChange({index:e}))},u=function(e,n){13===e.which&&(a(),t.onActiveItemChange({index:n}))};i((function(){t.autoPlay&&t.startSlideShow()}));var s=function(n){var a="p-galleria-indicator-"+n,i=d("p-galleria-indicator",{"p-highlight":t.activeItemIndex===n}),r=t.indicator&&t.indicator(n);return r||(r=e.createElement("button",{type:"button",tabIndex:-1,className:"p-link"},e.createElement(m,null))),e.createElement("li",{className:i,key:a,tabIndex:0,onClick:function(){return o(n)},onMouseEnter:function(){return c(n)},onKeyDown:function(e){return u(e,n)}},r)},v=t.itemTemplate&&t.itemTemplate(t.value[t.activeItemIndex]),p=function(){if(t.showItemNavigators){var n=!t.circular&&0===t.activeItemIndex,a=d("p-galleria-item-prev p-galleria-item-nav p-link",{"p-disabled":n});return e.createElement("button",{type:"button",className:a,onClick:r,disabled:n},e.createElement("span",{className:"p-galleria-item-prev-icon pi pi-chevron-left"}),e.createElement(m,null))}return null}(),h=function(){if(t.showItemNavigators){var n=!t.circular&&t.activeItemIndex===t.value.length-1,a=d("p-galleria-item-next p-galleria-item-nav p-link",{"p-disabled":n});return e.createElement("button",{type:"button",className:a,onClick:l,disabled:n},e.createElement("span",{className:"p-galleria-item-next-icon pi pi-chevron-right"}),e.createElement(m,null))}return null}(),f=function(){if(t.caption){var n=t.caption(t.value[t.activeItemIndex]);return e.createElement("div",{className:"p-galleria-caption"},n)}return null}(),g=function(){if(t.showIndicators){for(var n=d("p-galleria-indicators p-reset",t.indicatorsContentClassName),a=[],i=0;i<t.value.length;i++)a.push(s(i));return e.createElement("ul",{className:n},a)}return null}();return e.createElement("div",{ref:n,className:"p-galleria-item-wrapper"},e.createElement("div",{className:"p-galleria-item-container"},p,e.createElement("div",{className:"p-galleria-item"},v),h,f),g)})));function S(e){if(Array.isArray(e))return x(e)}function C(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function T(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}N.displayName="GalleriaItem";var A=e.memo((function(t){var n=t.active?0:null,a=t.template&&t.template(t.item),i=d("p-galleria-thumbnail-item",{"p-galleria-thumbnail-item-current":t.current,"p-galleria-thumbnail-item-active":t.active,"p-galleria-thumbnail-item-start":t.start,"p-galleria-thumbnail-item-end":t.end},t.className);return e.createElement("div",{className:i},e.createElement("div",{className:"p-galleria-thumbnail-item-content",tabIndex:n,onClick:function(e){t.onItemClick({originalEvent:e,index:t.index})},onKeyDown:function(e){13===e.which&&t.onItemClick({originalEvent:e,index:t.index})}},a))})),k=e.memo(e.forwardRef((function(n,a){var c=E(e.useState(n.numVisible),2),u=c[0],s=c[1],f=E(e.useState(0),2),g=f[0],I=f[1],b=e.useRef(null),x=e.useRef(null),w=e.useRef(""),N=e.useRef(null),k=e.useRef(null),O=r(u),V=r(n.activeItemIndex),P=E(l({listener:function(){U()},when:n.responsiveOptions}),1)[0],H=function(e){var t=g+e;e<0&&-1*t+u>n.value.length-1?t=u-n.value.length:e>0&&t>0&&(t=0),n.circular&&(e<0&&n.value.length-1===n.activeItemIndex?t=0:e>0&&0===n.activeItemIndex&&(t=u-n.value.length)),b.current&&(p.removeClass(b.current,"p-items-hidden"),b.current.style.transform=n.isVertical?"translate3d(0, ".concat(t*(100/u),"%, 0)"):"translate3d(".concat(t*(100/u),"%, 0, 0)"),b.current.style.transition="transform 500ms ease 0s"),I(t)},R=function(){n.slideShowActive&&n.stopSlideShow&&n.stopSlideShow()},D=function(){var e=Math.floor(u/2);return u%2?e:e-1},j=function(e){R();var t=0!==n.activeItemIndex?n.activeItemIndex-1:0;u-(t+g)-1>D()&&(-1*g!=0||n.circular)&&H(1),n.onActiveItemChange({index:n.circular&&0===n.activeItemIndex?n.value.length-1:t}),e.cancelable&&e.preventDefault()},M=function(e){R();var t=n.activeItemIndex+1;t+g>D()&&(-1*g<z()-1||n.circular)&&H(-1),n.onActiveItemChange({index:n.circular&&n.value.length-1===n.activeItemIndex?0:t}),e.cancelable&&e.preventDefault()},G=function(e){R();var t=e.index;if(t!==n.activeItemIndex){var a=t+g,i=0;t<n.activeItemIndex?(i=u-a-1-D())>0&&-1*g!=0&&H(i):(i=D()-a)<0&&-1*g<z()-1&&H(i),n.onActiveItemChange({index:t})}},K=function(e){b.current&&"transform"===e.propertyName&&(p.addClass(b.current,"p-items-hidden"),b.current.style.transition="")},Y=function(e){var t=e.changedTouches[0];x.current={x:t.pageX,y:t.pageY}},Z=function(e){e.cancelable&&e.preventDefault()},X=function(e){var t=e.changedTouches[0];_(e,n.isVertical?t.pageY-x.current.y:t.pageX-x.current.x)},_=function(e,t){t<0?M(e):j(e)},z=function(){return n.value.length>u?n.value.length-u+1:0},L=function(){N.current||(N.current=p.createInlineStyle(t.nonce));var e,a="\n .p-galleria-thumbnail-items[".concat(w.current,"] .p-galleria-thumbnail-item {\n flex: 1 0 ").concat(100/u,"%\n }\n ");if(n.responsiveOptions){k.current=S(e=n.responsiveOptions)||C(e)||y(e)||T(),k.current.sort((function(e,n){return h.sort(e.breakpoint,n.breakpoint,-1,t.locale,t.nullSortOrder)}));for(var i=0;i<k.current.length;i++){var r=k.current[i];a+="\n @media screen and (max-width: ".concat(r.breakpoint,") {\n .p-galleria-thumbnail-items[").concat(w.current,"] .p-galleria-thumbnail-item {\n flex: 1 0 ").concat(100/r.numVisible,"%\n }\n }\n ")}}N.current.innerHTML=a},U=function(){if(b.current&&k.current){for(var e=window.innerWidth,t={numVisible:n.numVisible},a=0;a<k.current.length;a++){var i=k.current[a];parseInt(i.breakpoint,10)>=e&&(t=i)}u!==t.numVisible&&s(t.numVisible)}};i((function(){b.current&&(w.current=v(),b.current.setAttribute(w.current,"")),L(),U(),P()})),o((function(){var e=g;O===u&&V===n.activeItemIndex||((e=n.activeItemIndex<=D()?0:n.value.length-u+D()<n.activeItemIndex?u-n.value.length:n.value.length-u<n.activeItemIndex&&u%2==0?-1*n.activeItemIndex+D()+1:-1*n.activeItemIndex+D())!==g&&I(e),b.current.style.transform=n.isVertical?"translate3d(0, ".concat(e*(100/u),"%, 0)"):"translate3d(".concat(e*(100/u),"%, 0, 0)"),V!==n.activeItemIndex&&(p.removeClass(b.current,"p-items-hidden"),b.current.style.transition="transform 500ms ease 0s"))}));var W,$,q,B,F=function(){if(n.showThumbnailNavigators){var t=!n.circular&&0===n.activeItemIndex||n.value.length<=u,a=d("p-galleria-thumbnail-prev p-link",{"p-disabled":t}),i=d("p-galleria-thumbnail-prev-icon pi",{"pi-chevron-left":!n.isVertical,"pi-chevron-up":n.isVertical});return e.createElement("button",{className:a,onClick:j,disabled:t},e.createElement("span",{className:i}),e.createElement(m,null))}return null},J=function(){if(n.showThumbnailNavigators){var t=!n.circular&&n.activeItemIndex===n.value.length-1||n.value.length<=u,a=d("p-galleria-thumbnail-next p-link",{"p-disabled":t}),i=d("p-galleria-thumbnail-next-icon pi",{"pi-chevron-right":!n.isVertical,"pi-chevron-down":n.isVertical});return e.createElement("button",{className:a,onClick:M,disabled:t},e.createElement("span",{className:i}),e.createElement(m,null))}return null},Q=(W=n.value.map((function(t,a){var i=-1*g,r=i+u-1;return e.createElement(A,{key:a,index:a,template:n.itemTemplate,item:t,active:i<=a&&r>=a,start:i===a,end:r===a,onItemClick:G,current:n.activeItemIndex===a})})),$=n.isVertical?n.contentHeight:"",q=F(),B=J(),e.createElement("div",{className:"p-galleria-thumbnail-container"},q,e.createElement("div",{className:"p-galleria-thumbnail-items-container",style:{height:$}},e.createElement("div",{ref:b,className:"p-galleria-thumbnail-items",onTransitionEnd:K,onTouchStart:Y,onTouchMove:Z,onTouchEnd:X},W)),B));return e.createElement("div",{className:"p-galleria-thumbnail-wrapper"},Q)})));A.displayName="GalleriaThumbnailItem",k.displayName="GalleriaThumbnails";var O=e.memo(e.forwardRef((function(i,r){var l=E(e.useState(!1),2),o=l[0],v=l[1],I=E(e.useState(i.numVisible),2),b=I[0],x=I[1],y=E(e.useState(!1),2),w=y[0],S=y[1],C=E(e.useState(i.activeIndex),2),T=C[0],A=C[1],V=e.useRef(null),P=e.useRef(null),H=e.useRef(null),R=i.onItemChange?i.activeIndex:T,D="left"===i.thumbnailsPosition||"right"===i.thumbnailsPosition;c((function(){j({index:i.circular&&i.value.length-1===R?0:R+1})}),i.transitionInterval,w);var j=function(e){i.onItemChange?i.onItemChange(e):A(e.index)},M=function(){v(!0)},G=function(){v(!1)},K=function(){p.addClass(document.body,"p-overflow-hidden")},Y=function(){f.set("modal",H.current,t.autoZIndex,i.baseZIndex||t.zIndex.modal),p.addMultipleClasses(H.current,"p-component-overlay p-component-overlay-enter")},Z=function(){i.onShow&&i.onShow()},X=function(){p.removeClass(document.body,"p-overflow-hidden"),p.addClass(H.current,"p-component-overlay-leave")},_=function(){f.clear(H.current),i.onHide&&i.onHide()},z=function(){return w},L=function(){S(!0)},U=function(){S(!1)},W=function(e,t){var n=["top","left","bottom","right"].find((function(e){return e===t}));return n?"".concat(e,"-").concat(n):""};e.useEffect((function(){i.value&&i.value.length<b&&x(i.value.length)}),[i.value,b]),e.useEffect((function(){x(i.numVisible)}),[i.numVisible]),u((function(){w&&U(),f.clear(H.current)})),e.useImperativeHandle(r,(function(){return{props:i,show:M,hide:G,isAutoPlayActive:z,startSlideShow:L,stopSlideShow:U,getElement:function(){return V.current},getPreviewContent:function(){return P.current}}}));return h.isNotEmpty(i.value)&&function(){var t,r,l,c,u,v,p,f=(t=h.findDiffKeys(i,O.defaultProps),r=i.showThumbnails&&W("p-galleria-thumbnails",i.thumbnailsPosition),l=i.showIndicators&&W("p-galleria-indicators",i.indicatorsPosition),c=d("p-galleria p-component",i.className,{"p-galleria-fullscreen":i.fullScreen,"p-galleria-indicator-onitem":i.showIndicatorsOnItem,"p-galleria-item-nav-onhover":i.showItemNavigatorsOnHover&&!i.fullScreen},r,l),u=i.fullScreen&&e.createElement("button",{type:"button",className:"p-galleria-close p-link","aria-label":n("close"),onClick:G},e.createElement("span",{className:"p-galleria-close-icon pi pi-times","aria-hidden":"true"}),e.createElement(m,null)),v=i.header?e.createElement("div",{className:"p-galleria-header"},i.header):null,p=i.footer?e.createElement("div",{className:"p-galleria-footer"},i.footer):null,e.createElement("div",g({ref:V,id:i.id,className:c,style:i.style},t),u,v,e.createElement("div",{className:"p-galleria-content"},e.createElement(N,{ref:P,value:i.value,activeItemIndex:R,onActiveItemChange:j,itemTemplate:i.item,circular:i.circular,caption:i.caption,showIndicators:i.showIndicators,changeItemOnIndicatorHover:i.changeItemOnIndicatorHover,indicator:i.indicator,showItemNavigators:i.showItemNavigators,autoPlay:i.autoPlay,slideShowActive:w,startSlideShow:L,stopSlideShow:U}),i.showThumbnails&&e.createElement(k,{value:i.value,activeItemIndex:R,onActiveItemChange:j,itemTemplate:i.thumbnail,numVisible:b,responsiveOptions:i.responsiveOptions,circular:i.circular,isVertical:D,contentHeight:i.verticalThumbnailViewPortHeight,showThumbnailNavigators:i.showThumbnailNavigators,autoPlay:i.autoPlay,slideShowActive:w,stopSlideShow:U})),p));if(i.fullScreen){var I=d("p-galleria-mask",{"p-galleria-visible":o});return e.createElement(s,{element:e.createElement("div",{ref:H,className:I},e.createElement(a,{nodeRef:V,classNames:"p-galleria",in:o,timeout:{enter:150,exit:150},options:i.transitionOptions,unmountOnExit:!0,onEnter:K,onEntering:Y,onEntered:Z,onExit:X,onExited:_},f))})}return f}()})));O.displayName="Galleria",O.defaultProps={__TYPE:"Galleria",id:null,value:null,activeIndex:0,fullScreen:!1,item:null,thumbnail:null,indicator:null,caption:null,className:null,style:null,header:null,footer:null,numVisible:3,responsiveOptions:null,showItemNavigators:!1,showThumbnailNavigators:!0,showItemNavigatorsOnHover:!1,changeItemOnIndicatorHover:!1,circular:!1,autoPlay:!1,transitionInterval:4e3,showThumbnails:!0,thumbnailsPosition:"bottom",verticalThumbnailViewPortHeight:"300px",showIndicators:!1,showIndicatorsOnItem:!1,indicatorsPosition:"bottom",baseZIndex:0,transitionOptions:null,onItemChange:null};export{O as Galleria};