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) [![Discord Chat](https://img.shields.io/discord/55794023

2 lines (1 loc) 16.4 kB
import t from"primevue/ripple";import{DomHandler as e,UniqueComponentId as i}from"primevue/utils";import{resolveDirective as s,openBlock as n,createElementBlock as a,normalizeClass as l,renderSlot as r,createCommentVNode as o,createElementVNode as d,withDirectives as c,mergeProps as h,normalizeStyle as u,Fragment as p,renderList as m}from"vue";var f={name:"Carousel",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},showNavigators:{type:Boolean,default:!0},showIndicators:{type:Boolean,default:!0},prevButtonProps:{type:null,default:null},nextButtonProps:{type:null,default:null}},isRemainingItemsAdded:!1,data(){return{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}},watch:{page(t){this.d_page=t},circular(t){this.d_circular=t},numVisible(t,e){this.d_numVisible=t,this.d_oldNumVisible=e},numScroll(t,e){this.d_oldNumScroll=e,this.d_numScroll=t},value(t){this.d_oldValue=t}},mounted(){let t=!1;if(this.$el.setAttribute(this.attributeSelector,""),this.createStyle(),this.calculatePosition(),this.responsiveOptions&&this.bindDocumentListeners(),this.isCircular()){let e=this.totalShiftedItems;0===this.d_page?e=-1*this.d_numVisible:0===e&&(e=-1*this.value.length,this.remainingItems>0&&(this.isRemainingItemsAdded=!0)),e!==this.totalShiftedItems&&(this.totalShiftedItems=e,t=!0)}!t&&this.isAutoplay()&&this.startAutoplay()},updated(){const t=this.isCircular();let e=!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,e=!0),i=s*this.d_numScroll*-1,t&&(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,e=!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)`}t&&(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,e=!0)),!e&&this.isAutoplay()&&this.startAutoplay()},beforeUnmount(){this.responsiveOptions&&this.unbindDocumentListeners(),this.autoplayInterval&&this.stopAutoplay()},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.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 t=window.innerWidth,e={numVisible:this.numVisible,numScroll:this.numScroll};for(let i=0;i<this.responsiveOptions.length;i++){let s=this.responsiveOptions[i];parseInt(s.breakpoint,10)>=t&&(e=s)}if(this.d_numScroll!==e.numScroll){let t=this.d_page;t=parseInt(t*this.d_numScroll/e.numScroll),this.totalShiftedItems=e.numScroll*t*-1,this.isCircular()&&(this.totalShiftedItems-=e.numVisible),this.d_numScroll=e.numScroll,this.$emit("update:page",t),this.d_page=t}this.d_numVisible!==e.numVisible&&(this.d_numVisible=e.numVisible)}},navBackward(t,e){(this.d_circular||0!==this.d_page)&&this.step(1,e),this.allowAutoplay=!1,t.cancelable&&t.preventDefault()},navForward(t,e){(this.d_circular||this.d_page<this.totalIndicators-1)&&this.step(-1,e),this.allowAutoplay=!1,t.cancelable&&t.preventDefault()},onIndicatorClick(t,e){let i=this.d_page;e>i?this.navForward(t,e):e<i&&this.navBackward(t,e)},onTransitionEnd(){this.$refs.itemsContainer&&(e.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(t){let e=t.changedTouches[0];this.startPos={x:e.pageX,y:e.pageY}},onTouchMove(t){t.cancelable&&t.preventDefault()},onTouchEnd(t){let e=t.changedTouches[0];this.isVertical()?this.changePageOnTouch(t,e.pageY-this.startPos.y):this.changePageOnTouch(t,e.pageX-this.startPos.x)},changePageOnTouch(t,e){Math.abs(e)>this.swipeThreshold&&(e<0?this.navForward(t):this.navBackward(t))},onIndicatorKeydown(t){switch(t.code){case"ArrowRight":this.onRightKey();break;case"ArrowLeft":this.onLeftKey();break;case"Home":this.onHomeKey(),t.preventDefault();break;case"End":this.onEndKey(),t.preventDefault();break;case"ArrowUp":case"ArrowDown":t.preventDefault();break;case"Tab":this.onTabKey()}},onRightKey(){const t=[...e.find(this.$refs.indicatorContent,".p-carousel-indicator")],i=this.findFocusedIndicatorIndex();this.changedFocusedIndicator(i,i+1===t.length?t.length-1:i+1)},onLeftKey(){const t=this.findFocusedIndicatorIndex();this.changedFocusedIndicator(t,t-1<=0?0:t-1)},onHomeKey(){const t=this.findFocusedIndicatorIndex();this.changedFocusedIndicator(t,0)},onEndKey(){const t=[...e.find(this.$refs.indicatorContent,".p-carousel-indicator")],i=this.findFocusedIndicatorIndex();this.changedFocusedIndicator(i,t.length-1)},onTabKey(){const t=[...e.find(this.$refs.indicatorContent,".p-carousel-indicator")],i=t.findIndex((t=>e.hasClass(t,"p-highlight"))),s=e.findSingle(this.$refs.indicatorContent,'.p-carousel-indicator > button[tabindex="0"]'),n=t.findIndex((t=>t===s.parentElement));t[n].children[0].tabIndex="-1",t[i].children[0].tabIndex="0"},findFocusedIndicatorIndex(){const t=[...e.find(this.$refs.indicatorContent,".p-carousel-indicator")],i=e.findSingle(this.$refs.indicatorContent,'.p-carousel-indicator > button[tabindex="0"]');return t.findIndex((t=>t===i.parentElement))},changedFocusedIndicator(t,i){const s=[...e.find(this.$refs.indicatorContent,".p-carousel-indicator")];s[t].children[0].tabIndex="-1",s[i].children[0].tabIndex="0",s[i].children[0].focus()},bindDocumentListeners(){this.documentResizeListener||(this.documentResizeListener=t=>{this.calculatePosition(t)},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 t=`\n .p-carousel[${this.attributeSelector}] .p-carousel-item {\n flex: 1 0 ${100/this.d_numVisible}%\n }\n `;if(this.responsiveOptions){let e=[...this.responsiveOptions];e.sort(((t,e)=>{const i=t.breakpoint,s=e.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<e.length;i++){let s=e[i];t+=`\n @media screen and (max-width: ${s.breakpoint}) {\n .p-carousel[${this.attributeSelector}] .p-carousel-item {\n flex: 1 0 ${100/s.numVisible}%\n }\n }\n `}}this.carouselStyle.innerHTML=t},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},ariaSlideNumber(t){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.slideNumber.replace(/{slideNumber}/g,t):void 0},ariaPageLabel(t){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.pageLabel.replace(/{page}/g,t):void 0}},computed:{totalIndicators(){return this.value?Math.max(Math.ceil((this.value.length-this.d_numVisible)/this.d_numScroll)+1,0):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]},ariaSlideLabel(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.slide:void 0},ariaPrevButtonLabel(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.prevPageLabel:void 0},ariaNextButtonLabel(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.nextPageLabel:void 0},attributeSelector:()=>i()},directives:{ripple:t}};const g={key:0,class:"p-carousel-header"},v=["aria-live"],b=["disabled","aria-label"],I=["aria-hidden","aria-label","aria-roledescription"],y=["disabled","aria-label"],_=["tabindex","aria-label","aria-current","onClick"],S={key:1,class:"p-carousel-footer"};!function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&"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=t:n.appendChild(document.createTextNode(t))}}("\n.p-carousel {\n display: flex;\n flex-direction: column;\n}\n.p-carousel-content {\n display: flex;\n flex-direction: column;\n overflow: auto;\n}\n.p-carousel-prev,\n.p-carousel-next {\n align-self: center;\n flex-grow: 0;\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n position: relative;\n}\n.p-carousel-container {\n display: flex;\n flex-direction: row;\n}\n.p-carousel-items-content {\n overflow: hidden;\n width: 100%;\n}\n.p-carousel-items-container {\n display: flex;\n flex-direction: row;\n}\n.p-carousel-indicators {\n display: flex;\n flex-direction: row;\n justify-content: center;\n flex-wrap: wrap;\n}\n.p-carousel-indicator > button {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* Vertical */\n.p-carousel-vertical .p-carousel-container {\n flex-direction: column;\n}\n.p-carousel-vertical .p-carousel-items-container {\n flex-direction: column;\n height: 100%;\n}\n\n/* Keyboard Support */\n.p-items-hidden .p-carousel-item {\n visibility: hidden;\n}\n.p-items-hidden .p-carousel-item.p-carousel-item-active {\n visibility: visible;\n}\n"),f.render=function(t,e,i,f,x,V){const w=s("ripple");return n(),a("div",{class:l(["p-carousel p-component",{"p-carousel-vertical":V.isVertical(),"p-carousel-horizontal":!V.isVertical()}]),role:"region"},[t.$slots.header?(n(),a("div",g,[r(t.$slots,"header")])):o("",!0),d("div",{class:l(V.contentClasses)},[d("div",{class:l(V.containerClasses),"aria-live":x.allowAutoplay?"polite":"off"},[i.showNavigators?c((n(),a("button",h({key:0,type:"button",class:["p-carousel-prev p-link",{"p-disabled":V.backwardIsDisabled}],disabled:V.backwardIsDisabled,"aria-label":V.ariaPrevButtonLabel,onClick:e[0]||(e[0]=(...t)=>V.navBackward&&V.navBackward(...t))},i.prevButtonProps),[d("span",{class:l(["p-carousel-prev-icon pi",{"pi-chevron-left":!V.isVertical(),"pi-chevron-up":V.isVertical()}])},null,2)],16,b)),[[w]]):o("",!0),d("div",{class:"p-carousel-items-content",style:u([{height:V.isVertical()?i.verticalViewPortHeight:"auto"}]),onTouchend:e[2]||(e[2]=(...t)=>V.onTouchEnd&&V.onTouchEnd(...t)),onTouchstart:e[3]||(e[3]=(...t)=>V.onTouchStart&&V.onTouchStart(...t)),onTouchmove:e[4]||(e[4]=(...t)=>V.onTouchMove&&V.onTouchMove(...t))},[d("div",{ref:"itemsContainer",class:"p-carousel-items-container",onTransitionend:e[1]||(e[1]=(...t)=>V.onTransitionEnd&&V.onTransitionEnd(...t))},[V.isCircular()?(n(!0),a(p,{key:0},m(i.value.slice(-1*x.d_numVisible),((e,s)=>(n(),a("div",{key:s+"_scloned",class:l(["p-carousel-item p-carousel-item-cloned",{"p-carousel-item-active":-1*x.totalShiftedItems===i.value.length+x.d_numVisible,"p-carousel-item-start":0===s,"p-carousel-item-end":i.value.slice(-1*x.d_numVisible).length-1===s}])},[r(t.$slots,"item",{data:e,index:s})],2)))),128)):o("",!0),(n(!0),a(p,null,m(i.value,((e,i)=>(n(),a("div",{key:i,class:l(["p-carousel-item",{"p-carousel-item-active":V.firstIndex()<=i&&V.lastIndex()>=i,"p-carousel-item-start":V.firstIndex()===i,"p-carousel-item-end":V.lastIndex()===i}]),role:"group","aria-hidden":V.firstIndex()>i||V.lastIndex()<i||void 0,"aria-label":V.ariaSlideNumber(i),"aria-roledescription":V.ariaSlideLabel},[r(t.$slots,"item",{data:e,index:i})],10,I)))),128)),V.isCircular()?(n(!0),a(p,{key:1},m(i.value.slice(0,x.d_numVisible),((e,s)=>(n(),a("div",{key:s+"_fcloned",class:l(["p-carousel-item p-carousel-item-cloned",{"p-carousel-item-active":0===x.totalShiftedItems,"p-carousel-item-start":0===s,"p-carousel-item-end":i.value.slice(0,x.d_numVisible).length-1===s}])},[r(t.$slots,"item",{data:e,index:s})],2)))),128)):o("",!0)],544)],36),i.showNavigators?c((n(),a("button",h({key:1,type:"button",class:["p-carousel-next p-link",{"p-disabled":V.forwardIsDisabled}],disabled:V.forwardIsDisabled,"aria-label":V.ariaNextButtonLabel,onClick:e[5]||(e[5]=(...t)=>V.navForward&&V.navForward(...t))},i.nextButtonProps),[d("span",{class:l(["p-carousel-prev-icon pi",{"pi-chevron-right":!V.isVertical(),"pi-chevron-down":V.isVertical()}])},null,2)],16,y)),[[w]]):o("",!0)],10,v),V.totalIndicators>=0&&i.showIndicators?(n(),a("ul",{key:0,ref:"indicatorContent",class:l(V.indicatorsContentClasses),onKeydown:e[6]||(e[6]=(...t)=>V.onIndicatorKeydown&&V.onIndicatorKeydown(...t))},[(n(!0),a(p,null,m(V.totalIndicators,((t,e)=>(n(),a("li",{key:"p-carousel-indicator-"+e.toString(),class:l(["p-carousel-indicator",{"p-highlight":x.d_page===e}])},[d("button",{class:"p-link",type:"button",tabindex:x.d_page===e?"0":"-1","aria-label":V.ariaPageLabel(e+1),"aria-current":x.d_page===e?"page":void 0,onClick:t=>V.onIndicatorClick(t,e)},null,8,_)],2)))),128))],34)):o("",!0)],2),t.$slots.footer?(n(),a("div",S,[r(t.$slots,"footer")])):o("",!0)],2)};export{f as default};