UNPKG

primevue

Version:

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![npm version](https://badge.fury.io/js/primevue.svg)](https://badge.fury.io/js/primevue)

2 lines (1 loc) 14.8 kB
"use strict";var e=require("primevue/utils"),t=require("primevue/ripple"),i=require("vue");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n={emits:["update:page"],props:{value:null,page:{type:Number,default:0},numVisible:{type:Number,default:1},numScroll:{type:Number,default:1},responsiveOptions:Array,orientation:{type:String,default:"horizontal"},verticalViewPortHeight:{type:String,default:"300px"},contentClass:String,containerClass:String,indicatorsContentClass:String,circular:{type:Boolean,default:!1},autoplayInterval:{type:Number,default:0}},data(){return{id:e.UniqueComponentId(),remainingItems:0,d_numVisible:this.numVisible,d_numScroll:this.numScroll,d_oldNumScroll:0,d_oldNumVisible:0,d_oldValue:null,d_page:this.page,totalShiftedItems:this.page*this.numScroll*-1,allowAutoplay:!!this.autoplayInterval,d_circular:this.circular||this.allowAutoplay,swipeThreshold:20}},isRemainingItemsAdded:!1,watch:{page(e){this.d_page=e},circular(e){this.d_circular=e},numVisible(e,t){this.d_numVisible=e,this.d_oldNumVisible=t},numScroll(e,t){this.d_oldNumScroll=t,this.d_numScroll=e},value(e){this.d_oldValue=e}},methods:{step(t,i){let s=this.totalShiftedItems;const n=this.isCircular();if(null!=i)s=this.d_numScroll*i*-1,n&&(s-=this.d_numVisible),this.isRemainingItemsAdded=!1;else{s+=this.d_numScroll*t,this.isRemainingItemsAdded&&(s+=this.remainingItems-this.d_numScroll*t,this.isRemainingItemsAdded=!1);let e=n?s+this.d_numVisible:s;i=Math.abs(Math.floor(e/this.d_numScroll))}n&&this.d_page===this.totalIndicators-1&&-1===t?(s=-1*(this.value.length+this.d_numVisible),i=0):n&&0===this.d_page&&1===t?(s=0,i=this.totalIndicators-1):i===this.totalIndicators-1&&this.remainingItems>0&&(s+=-1*this.remainingItems-this.d_numScroll*t,this.isRemainingItemsAdded=!0),this.$refs.itemsContainer&&(e.DomHandler.removeClass(this.$refs.itemsContainer,"p-items-hidden"),this.$refs.itemsContainer.style.transform=this.isVertical()?`translate3d(0, ${s*(100/this.d_numVisible)}%, 0)`:`translate3d(${s*(100/this.d_numVisible)}%, 0, 0)`,this.$refs.itemsContainer.style.transition="transform 500ms ease 0s"),this.totalShiftedItems=s,this.$emit("update:page",i),this.d_page=i},calculatePosition(){if(this.$refs.itemsContainer&&this.responsiveOptions){let e=window.innerWidth,t={numVisible:this.numVisible,numScroll:this.numScroll};for(let i=0;i<this.responsiveOptions.length;i++){let s=this.responsiveOptions[i];parseInt(s.breakpoint,10)>=e&&(t=s)}if(this.d_numScroll!==t.numScroll){let e=this.d_page;e=parseInt(e*this.d_numScroll/t.numScroll),this.totalShiftedItems=t.numScroll*e*-1,this.isCircular()&&(this.totalShiftedItems-=t.numVisible),this.d_numScroll=t.numScroll,this.$emit("update:page",e),this.d_page=e}this.d_numVisible!==t.numVisible&&(this.d_numVisible=t.numVisible)}},navBackward(e,t){(this.d_circular||0!==this.d_page)&&this.step(1,t),this.allowAutoplay=!1,e.cancelable&&e.preventDefault()},navForward(e,t){(this.d_circular||this.d_page<this.totalIndicators-1)&&this.step(-1,t),this.allowAutoplay=!1,e.cancelable&&e.preventDefault()},onIndicatorClick(e,t){let i=this.d_page;t>i?this.navForward(e,t):t<i&&this.navBackward(e,t)},onTransitionEnd(){this.$refs.itemsContainer&&(e.DomHandler.addClass(this.$refs.itemsContainer,"p-items-hidden"),this.$refs.itemsContainer.style.transition="",0!==this.d_page&&this.d_page!==this.totalIndicators-1||!this.isCircular()||(this.$refs.itemsContainer.style.transform=this.isVertical()?`translate3d(0, ${this.totalShiftedItems*(100/this.d_numVisible)}%, 0)`:`translate3d(${this.totalShiftedItems*(100/this.d_numVisible)}%, 0, 0)`))},onTouchStart(e){let t=e.changedTouches[0];this.startPos={x:t.pageX,y:t.pageY}},onTouchMove(e){e.cancelable&&e.preventDefault()},onTouchEnd(e){let t=e.changedTouches[0];this.isVertical()?this.changePageOnTouch(e,t.pageY-this.startPos.y):this.changePageOnTouch(e,t.pageX-this.startPos.x)},changePageOnTouch(e,t){Math.abs(t)>this.swipeThreshold&&(t<0?this.navForward(e):this.navBackward(e))},bindDocumentListeners(){this.documentResizeListener||(this.documentResizeListener=e=>{this.calculatePosition(e)},window.addEventListener("resize",this.documentResizeListener))},unbindDocumentListeners(){this.documentResizeListener&&(window.removeEventListener("resize",this.documentResizeListener),this.documentResizeListener=null)},startAutoplay(){this.interval=setInterval((()=>{this.d_page===this.totalIndicators-1?this.step(-1,0):this.step(-1,this.d_page+1)}),this.autoplayInterval)},stopAutoplay(){this.interval&&clearInterval(this.interval)},createStyle(){this.carouselStyle||(this.carouselStyle=document.createElement("style"),this.carouselStyle.type="text/css",document.body.appendChild(this.carouselStyle));let e=`\n #${this.id} .p-carousel-item {\n flex: 1 0 ${100/this.d_numVisible}%\n }\n `;if(this.responsiveOptions){let t=[...this.responsiveOptions];t.sort(((e,t)=>{const i=e.breakpoint,s=t.breakpoint;let n=null;return n=null==i&&null!=s?-1:null!=i&&null==s?1:null==i&&null==s?0:"string"==typeof i&&"string"==typeof s?i.localeCompare(s,void 0,{numeric:!0}):i<s?-1:i>s?1:0,-1*n}));for(let i=0;i<t.length;i++){let s=t[i];e+=`\n @media screen and (max-width: ${s.breakpoint}) {\n #${this.id} .p-carousel-item {\n flex: 1 0 ${100/s.numVisible}%\n }\n }\n `}}this.carouselStyle.innerHTML=e},isVertical(){return"vertical"===this.orientation},isCircular(){return this.value&&this.d_circular&&this.value.length>=this.d_numVisible},isAutoplay(){return this.autoplayInterval&&this.allowAutoplay},firstIndex(){return this.isCircular()?-1*(this.totalShiftedItems+this.d_numVisible):-1*this.totalShiftedItems},lastIndex(){return this.firstIndex()+this.d_numVisible-1}},mounted(){this.createStyle(),this.calculatePosition(),this.responsiveOptions&&this.bindDocumentListeners()},updated(){const e=this.isCircular();let t=!1,i=this.totalShiftedItems;if(this.autoplayInterval&&this.stopAutoplay(),this.d_oldNumScroll!==this.d_numScroll||this.d_oldNumVisible!==this.d_numVisible||this.d_oldValue.length!==this.value.length){this.remainingItems=(this.value.length-this.d_numVisible)%this.d_numScroll;let s=this.d_page;0!==this.totalIndicators&&s>=this.totalIndicators&&(s=this.totalIndicators-1,this.$emit("update:page",s),this.d_page=s,t=!0),i=s*this.d_numScroll*-1,e&&(i-=this.d_numVisible),s===this.totalIndicators-1&&this.remainingItems>0?(i+=-1*this.remainingItems+this.d_numScroll,this.isRemainingItemsAdded=!0):this.isRemainingItemsAdded=!1,i!==this.totalShiftedItems&&(this.totalShiftedItems=i,t=!0),this.d_oldNumScroll=this.d_numScroll,this.d_oldNumVisible=this.d_numVisible,this.d_oldValue=this.value,this.$refs.itemsContainer.style.transform=this.isVertical()?`translate3d(0, ${i*(100/this.d_numVisible)}%, 0)`:`translate3d(${i*(100/this.d_numVisible)}%, 0, 0)`}e&&(0===this.d_page?i=-1*this.d_numVisible:0===i&&(i=-1*this.value.length,this.remainingItems>0&&(this.isRemainingItemsAdded=!0)),i!==this.totalShiftedItems&&(this.totalShiftedItems=i,t=!0)),!t&&this.isAutoplay()&&this.startAutoplay()},beforeUnmount(){this.responsiveOptions&&this.unbindDocumentListeners(),this.autoplayInterval&&this.stopAutoplay()},computed:{totalIndicators(){return this.value?Math.ceil((this.value.length-this.d_numVisible)/this.d_numScroll)+1:0},backwardIsDisabled(){return this.value&&(!this.circular||this.value.length<this.d_numVisible)&&0===this.d_page},forwardIsDisabled(){return this.value&&(!this.circular||this.value.length<this.d_numVisible)&&(this.d_page===this.totalIndicators-1||0===this.totalIndicators)},containerClasses(){return["p-carousel-container",this.containerClass]},contentClasses(){return["p-carousel-content ",this.contentClass]},indicatorsContentClasses(){return["p-carousel-indicators p-reset",this.indicatorsContentClass]}},directives:{ripple:s(t).default},name:"Carousel"};const l={key:0,class:"p-carousel-header"},a={key:1,class:"p-carousel-footer"};!function(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var s=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===i&&s.firstChild?s.insertBefore(n,s.firstChild):s.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}("\n.p-carousel {\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n}\n.p-carousel-content {\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\toverflow: auto;\n}\n.p-carousel-prev,\n.p-carousel-next {\n\t-ms-flex-item-align: center;\n\t align-self: center;\n\t-webkit-box-flex: 0;\n\t -ms-flex-positive: 0;\n\t flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n overflow: hidden;\n position: relative;\n}\n.p-carousel-container {\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: horizontal;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: row;\n\t flex-direction: row;\n}\n.p-carousel-items-content {\n\toverflow: hidden;\n width: 100%;\n}\n.p-carousel-items-container {\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: horizontal;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: row;\n\t flex-direction: row;\n}\n.p-carousel-indicators {\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-orient: horizontal;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: row;\n\t flex-direction: row;\n\t-webkit-box-pack: center;\n\t -ms-flex-pack: center;\n\t justify-content: center;\n\t-ms-flex-wrap: wrap;\n\t flex-wrap: wrap;\n}\n.p-carousel-indicator > button {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n/* Vertical */\n.p-carousel-vertical .p-carousel-container {\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n}\n.p-carousel-vertical .p-carousel-items-container {\n\t-webkit-box-orient: vertical;\n\t-webkit-box-direction: normal;\n\t -ms-flex-direction: column;\n\t flex-direction: column;\n\theight: 100%;\n}\n\n/* Keyboard Support */\n.p-items-hidden .p-carousel-item {\n\tvisibility: hidden;\n}\n.p-items-hidden .p-carousel-item.p-carousel-item-active {\n\tvisibility: visible;\n}\n"),n.render=function(e,t,s,n,o,r){const c=i.resolveDirective("ripple");return i.openBlock(),i.createBlock("div",{id:o.id,class:["p-carousel p-component",{"p-carousel-vertical":r.isVertical(),"p-carousel-horizontal":!r.isVertical()}]},[e.$slots.header?(i.openBlock(),i.createBlock("div",l,[i.renderSlot(e.$slots,"header")])):i.createCommentVNode("",!0),i.createVNode("div",{class:r.contentClasses},[i.createVNode("div",{class:r.containerClasses},[i.withDirectives(i.createVNode("button",{class:["p-carousel-prev p-link",{"p-disabled":r.backwardIsDisabled}],disabled:r.backwardIsDisabled,onClick:t[1]||(t[1]=(...e)=>r.navBackward&&r.navBackward(...e)),type:"button"},[i.createVNode("span",{class:["p-carousel-prev-icon pi",{"pi-chevron-left":!r.isVertical(),"pi-chevron-up":r.isVertical()}]},null,2)],10,["disabled"]),[[c]]),i.createVNode("div",{class:"p-carousel-items-content",style:[{height:r.isVertical()?s.verticalViewPortHeight:"auto"}]},[i.createVNode("div",{ref:"itemsContainer",class:"p-carousel-items-container",onTransitionend:t[2]||(t[2]=(...e)=>r.onTransitionEnd&&r.onTransitionEnd(...e)),onTouchend:t[3]||(t[3]=(...e)=>r.onTouchEnd&&r.onTouchEnd(...e)),onTouchstart:t[4]||(t[4]=(...e)=>r.onTouchStart&&r.onTouchStart(...e)),onTouchmove:t[5]||(t[5]=(...e)=>r.onTouchMove&&r.onTouchMove(...e))},[r.isCircular()?(i.openBlock(!0),i.createBlock(i.Fragment,{key:0},i.renderList(s.value.slice(-1*o.d_numVisible),((t,n)=>(i.openBlock(),i.createBlock("div",{key:n+"_scloned",class:["p-carousel-item p-carousel-item-cloned",{"p-carousel-item-active":-1*o.totalShiftedItems===s.value.length+o.d_numVisible,"p-carousel-item-start":0===n,"p-carousel-item-end":s.value.slice(-1*o.d_numVisible).length-1===n}]},[i.renderSlot(e.$slots,"item",{data:t,index:n})],2)))),128)):i.createCommentVNode("",!0),(i.openBlock(!0),i.createBlock(i.Fragment,null,i.renderList(s.value,((t,s)=>(i.openBlock(),i.createBlock("div",{key:s,class:["p-carousel-item",{"p-carousel-item-active":r.firstIndex()<=s&&r.lastIndex()>=s,"p-carousel-item-start":r.firstIndex()===s,"p-carousel-item-end":r.lastIndex()===s}]},[i.renderSlot(e.$slots,"item",{data:t,index:s})],2)))),128)),r.isCircular()?(i.openBlock(!0),i.createBlock(i.Fragment,{key:1},i.renderList(s.value.slice(0,o.d_numVisible),((t,n)=>(i.openBlock(),i.createBlock("div",{key:n+"_fcloned",class:["p-carousel-item p-carousel-item-cloned",{"p-carousel-item-active":0===o.totalShiftedItems,"p-carousel-item-start":0===n,"p-carousel-item-end":s.value.slice(0,o.d_numVisible).length-1===n}]},[i.renderSlot(e.$slots,"item",{data:t,index:n})],2)))),128)):i.createCommentVNode("",!0)],544)],4),i.withDirectives(i.createVNode("button",{class:["p-carousel-next p-link",{"p-disabled":r.forwardIsDisabled}],disabled:r.forwardIsDisabled,onClick:t[6]||(t[6]=(...e)=>r.navForward&&r.navForward(...e)),type:"button"},[i.createVNode("span",{class:["p-carousel-prev-icon pi",{"pi-chevron-right":!r.isVertical(),"pi-chevron-down":r.isVertical()}]},null,2)],10,["disabled"]),[[c]])],2),i.createVNode("ul",{class:r.indicatorsContentClasses},[(i.openBlock(!0),i.createBlock(i.Fragment,null,i.renderList(r.totalIndicators,((e,t)=>(i.openBlock(),i.createBlock("li",{key:"p-carousel-indicator-"+t,class:["p-carousel-indicator",{"p-highlight":o.d_page===t}]},[i.createVNode("button",{class:"p-link",onClick:e=>r.onIndicatorClick(e,t),type:"button"},null,8,["onClick"])],2)))),128))],2)],2),e.$slots.footer?(i.openBlock(),i.createBlock("div",a,[i.renderSlot(e.$slots,"footer")])):i.createCommentVNode("",!0)],10,["id"])},module.exports=n;