primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 13.2 kB
JavaScript
import t from"primevue/icons/chevronleft";import e from"primevue/icons/chevronright";import n from"primevue/ripple";import{UniqueComponentId as a,DomHandler as i}from"primevue/utils";import{mergeProps as r,resolveDirective as o,openBlock as c,createElementBlock as s,createElementVNode as l,withDirectives as d,renderSlot as p,createBlock as u,resolveDynamicComponent as b,createCommentVNode as v,Fragment as h,renderList as f,toDisplayString as g,vShow as x}from"vue";import y from"primevue/basecomponent";import{useStyle as m}from"primevue/usestyle";var w=m("\n.p-tabview-nav-container {\n position: relative;\n}\n\n.p-tabview-scrollable .p-tabview-nav-container {\n overflow: hidden;\n}\n\n.p-tabview-nav-content {\n overflow-x: auto;\n overflow-y: hidden;\n scroll-behavior: smooth;\n scrollbar-width: none;\n overscroll-behavior: contain auto;\n}\n\n.p-tabview-nav {\n display: flex;\n margin: 0;\n padding: 0;\n list-style-type: none;\n flex: 1 1 auto;\n}\n\n.p-tabview-header-action {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n position: relative;\n text-decoration: none;\n overflow: hidden;\n}\n\n.p-tabview-ink-bar {\n display: none;\n z-index: 1;\n}\n\n.p-tabview-header-action:focus {\n z-index: 1;\n}\n\n.p-tabview-title {\n line-height: 1;\n white-space: nowrap;\n}\n\n.p-tabview-nav-btn {\n position: absolute;\n top: 0;\n z-index: 2;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.p-tabview-nav-prev {\n left: 0;\n}\n\n.p-tabview-nav-next {\n right: 0;\n}\n\n.p-tabview-nav-content::-webkit-scrollbar {\n display: none;\n}\n",{name:"tabview",manual:!0}),T={name:"TabView",extends:{name:"BaseTabView",extends:y,props:{activeIndex:{type:Number,default:0},lazy:{type:Boolean,default:!1},scrollable:{type:Boolean,default:!1},tabindex:{type:Number,default:0},selectOnFocus:{type:Boolean,default:!1},previousButtonProps:{type:null,default:null},nextButtonProps:{type:null,default:null},prevIcon:{type:String,default:void 0},nextIcon:{type:String,default:void 0}},css:{classes:{root:function(t){return["p-tabview p-component",{"p-tabview-scrollable":t.props.scrollable}]},navContainer:"p-tabview-nav-container",previousButton:"p-tabview-nav-prev p-tabview-nav-btn p-link",navContent:"p-tabview-nav-content",nav:"p-tabview-nav",tab:{header:function(t){var e=t.instance,n=t.tab,a=t.index;return["p-tabview-header",e.getTabProp(n,"headerClass"),{"p-highlight":e.d_activeIndex===a,"p-disabled":e.getTabProp(n,"disabled")}]},headerAction:"p-tabview-nav-link p-tabview-header-action",headerTitle:"p-tabview-title",content:function(t){return["p-tabview-panel",t.instance.getTabProp(t.tab,"contentClass")]}},inkbar:"p-tabview-ink-bar",nextButton:"p-tabview-nav-next p-tabview-nav-btn p-link",panelContainer:"p-tabview-panels"},loadStyle:w.load},provide:function(){return{$parentInstance:this}}},emits:["update:activeIndex","tab-change","tab-click"],data:function(){return{id:this.$attrs.id,d_activeIndex:this.activeIndex,isPrevButtonDisabled:!0,isNextButtonDisabled:!1}},watch:{"$attrs.id":function(t){this.id=t||a()},activeIndex:function(t){this.d_activeIndex=t,this.scrollInView({index:t})}},mounted:function(){this.id=this.id||a(),this.updateInkBar(),this.scrollable&&this.updateButtonState()},updated:function(){this.updateInkBar()},methods:{isTabPanel:function(t){return"TabPanel"===t.type.name},isTabActive:function(t){return this.d_activeIndex===t},getTabProp:function(t,e){return t.props?t.props[e]:void 0},getKey:function(t,e){return this.getTabProp(t,"header")||e},getTabHeaderActionId:function(t){return"".concat(this.id,"_").concat(t,"_header_action")},getTabContentId:function(t){return"".concat(this.id,"_").concat(t,"_content")},getTabPT:function(t,e,n){var a=this.tabs.length,i={props:t.props,parent:{props:this.$props,state:this.$data},context:{index:n,count:a,first:0===n,last:n===a-1,active:this.isTabActive(n)}};return r(this.ptm("tab.".concat(e),{tab:i}),this.ptm("tabpanel.".concat(e),{tabpanel:i}),this.ptm("tabpanel.".concat(e),i),this.ptmo(this.getTabProp(t,"pt"),e,i))},onScroll:function(t){this.scrollable&&this.updateButtonState(),t.preventDefault()},onPrevButtonClick:function(){var t=this.$refs.content,e=i.getWidth(t),n=t.scrollLeft-e;t.scrollLeft=n<=0?0:n},onNextButtonClick:function(){var t=this.$refs.content,e=i.getWidth(t)-this.getVisibleButtonWidths(),n=t.scrollLeft+e,a=t.scrollWidth-e;t.scrollLeft=n>=a?a:n},onTabClick:function(t,e,n){this.changeActiveIndex(t,e,n),this.$emit("tab-click",{originalEvent:t,index:n})},onTabKeyDown:function(t,e,n){switch(t.code){case"ArrowLeft":this.onTabArrowLeftKey(t);break;case"ArrowRight":this.onTabArrowRightKey(t);break;case"Home":this.onTabHomeKey(t);break;case"End":this.onTabEndKey(t);break;case"PageDown":this.onPageDownKey(t);break;case"PageUp":this.onPageUpKey(t);break;case"Enter":case"Space":this.onTabEnterKey(t,e,n)}},onTabArrowRightKey:function(t){var e=this.findNextHeaderAction(t.target.parentElement);e?this.changeFocusedTab(t,e):this.onTabHomeKey(t),t.preventDefault()},onTabArrowLeftKey:function(t){var e=this.findPrevHeaderAction(t.target.parentElement);e?this.changeFocusedTab(t,e):this.onTabEndKey(t),t.preventDefault()},onTabHomeKey:function(t){var e=this.findFirstHeaderAction();this.changeFocusedTab(t,e),t.preventDefault()},onTabEndKey:function(t){var e=this.findLastHeaderAction();this.changeFocusedTab(t,e),t.preventDefault()},onPageDownKey:function(t){this.scrollInView({index:this.$refs.nav.children.length-2}),t.preventDefault()},onPageUpKey:function(t){this.scrollInView({index:0}),t.preventDefault()},onTabEnterKey:function(t,e,n){this.changeActiveIndex(t,e,n),t.preventDefault()},findNextHeaderAction:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1]?t:t.nextElementSibling;return e?i.getAttribute(e,"data-p-disabled")||"inkbar"===i.getAttribute(e,"data-pc-section")?this.findNextHeaderAction(e):i.findSingle(e,'[data-pc-section="headeraction"]'):null},findPrevHeaderAction:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1]?t:t.previousElementSibling;return e?i.getAttribute(e,"data-p-disabled")||"inkbar"===i.getAttribute(e,"data-pc-section")?this.findPrevHeaderAction(e):i.findSingle(e,'[data-pc-section="headeraction"]'):null},findFirstHeaderAction:function(){return this.findNextHeaderAction(this.$refs.nav.firstElementChild,!0)},findLastHeaderAction:function(){return this.findPrevHeaderAction(this.$refs.nav.lastElementChild,!0)},changeActiveIndex:function(t,e,n){this.getTabProp(e,"disabled")||this.d_activeIndex===n||(this.d_activeIndex=n,this.$emit("update:activeIndex",n),this.$emit("tab-change",{originalEvent:t,index:n}),this.scrollInView({index:n}))},changeFocusedTab:function(t,e){if(e&&(i.focus(e),this.scrollInView({element:e}),this.selectOnFocus)){var n=parseInt(e.parentElement.dataset.index,10);this.changeActiveIndex(t,this.tabs[n],n)}},scrollInView:function(t){var e=t.index,n=t.element||this.$refs.nav.children[void 0===e?-1:e];n&&n.scrollIntoView&&n.scrollIntoView({block:"nearest"})},updateInkBar:function(){var t=this.$refs.nav.children[this.d_activeIndex];this.$refs.inkbar.style.width=i.getWidth(t)+"px",this.$refs.inkbar.style.left=i.getOffset(t).left-i.getOffset(this.$refs.nav).left+"px"},updateButtonState:function(){var t=this.$refs.content,e=t.scrollLeft,n=t.scrollWidth,a=i.getWidth(t);this.isPrevButtonDisabled=0===e,this.isNextButtonDisabled=parseInt(e)===n-a},getVisibleButtonWidths:function(){var t=this.$refs;return[t.prevBtn,t.nextBtn].reduce((function(t,e){return e?t+i.getWidth(e):t}),0)}},computed:{tabs:function(){var t=this;return this.$slots.default().reduce((function(e,n){return t.isTabPanel(n)?e.push(n):n.children&&n.children instanceof Array&&n.children.forEach((function(n){t.isTabPanel(n)&&e.push(n)})),e}),[])},prevButtonAriaLabel:function(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.previous:void 0},nextButtonAriaLabel:function(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.next:void 0}},directives:{ripple:n},components:{ChevronLeftIcon:t,ChevronRightIcon:e}};function P(t){return P="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},P(t)}function I(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function k(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?I(Object(n),!0).forEach((function(e){A(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):I(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function A(t,e,n){return(e=B(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function B(t){var e=C(t,"string");return"symbol"===P(e)?e:String(e)}function C(t,e){if("object"!==P(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var a=n.call(t,e||"default");if("object"!==P(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}var S=["tabindex","aria-label"],$=["data-p-highlight","data-p-disabled","data-pc-index","data-p-active"],D=["id","tabindex","aria-disabled","aria-selected","aria-controls","onClick","onKeydown"],K=["tabindex","aria-label"],O=["id","aria-labelledby","data-pc-index","data-p-active"];T.render=function(t,e,n,a,i,y){var m=o("ripple");return c(),s("div",r({class:t.cx("root")},t.ptm("root"),{"data-pc-name":"tabview"}),[l("div",r({class:t.cx("navContainer")},t.ptm("navContainer")),[t.scrollable&&!i.isPrevButtonDisabled?d((c(),s("button",r({key:0,ref:"prevBtn",type:"button",class:t.cx("previousButton"),tabindex:t.tabindex,"aria-label":y.prevButtonAriaLabel,onClick:e[0]||(e[0]=function(){return y.onPrevButtonClick&&y.onPrevButtonClick.apply(y,arguments)})},k(k({},t.previousButtonProps),t.ptm("previousButton")),{"data-pc-group-section":"navbutton"}),[p(t.$slots,"previcon",{},(function(){return[(c(),u(b(t.prevIcon?"span":"ChevronLeftIcon"),r({"aria-hidden":"true",class:t.prevIcon},t.ptm("previousIcon")),null,16,["class"]))]}))],16,S)),[[m]]):v("",!0),l("div",r({ref:"content",class:t.cx("navContent"),onScroll:e[1]||(e[1]=function(){return y.onScroll&&y.onScroll.apply(y,arguments)})},t.ptm("navContent")),[l("ul",r({ref:"nav",class:t.cx("nav"),role:"tablist"},t.ptm("nav")),[(c(!0),s(h,null,f(y.tabs,(function(e,n){return c(),s("li",r({key:y.getKey(e,n),style:y.getTabProp(e,"headerStyle"),class:t.cx("tab.header",{tab:e,index:n}),role:"presentation"},k(k(k({},y.getTabProp(e,"headerProps")),y.getTabPT(e,"root",n)),y.getTabPT(e,"header",n)),{"data-pc-name":"tabpanel","data-p-highlight":i.d_activeIndex===n,"data-p-disabled":y.getTabProp(e,"disabled"),"data-pc-index":n,"data-p-active":i.d_activeIndex===n}),[d((c(),s("a",r({id:y.getTabHeaderActionId(n),class:t.cx("tab.headerAction"),tabindex:y.getTabProp(e,"disabled")||!y.isTabActive(n)?-1:t.tabindex,role:"tab","aria-disabled":y.getTabProp(e,"disabled"),"aria-selected":y.isTabActive(n),"aria-controls":y.getTabContentId(n),onClick:function(t){return y.onTabClick(t,e,n)},onKeydown:function(t){return y.onTabKeyDown(t,e,n)}},k(k({},y.getTabProp(e,"headerActionProps")),y.getTabPT(e,"headerAction",n))),[e.props&&e.props.header?(c(),s("span",r({key:0,class:t.cx("tab.headerTitle")},y.getTabPT(e,"headerTitle",n)),g(e.props.header),17)):v("",!0),e.children&&e.children.header?(c(),u(b(e.children.header),{key:1})):v("",!0)],16,D)),[[m]])],16,$)})),128)),l("li",r({ref:"inkbar",class:t.cx("inkbar"),role:"presentation","aria-hidden":"true"},t.ptm("inkbar")),null,16)],16)],16),t.scrollable&&!i.isNextButtonDisabled?d((c(),s("button",r({key:1,ref:"nextBtn",type:"button",class:t.cx("nextButton"),tabindex:t.tabindex,"aria-label":y.nextButtonAriaLabel,onClick:e[2]||(e[2]=function(){return y.onNextButtonClick&&y.onNextButtonClick.apply(y,arguments)})},k(k({},t.nextButtonProps),t.ptm("nextButton")),{"data-pc-group-section":"navbutton"}),[p(t.$slots,"nexticon",{},(function(){return[(c(),u(b(t.nextIcon?"span":"ChevronRightIcon"),r({"aria-hidden":"true",class:t.nextIcon},t.ptm("nextIcon")),null,16,["class"]))]}))],16,K)),[[m]]):v("",!0)],16),l("div",r({class:t.cx("panelContainer")},t.ptm("panelContainer")),[(c(!0),s(h,null,f(y.tabs,(function(e,n){return c(),s(h,{key:y.getKey(e,n)},[!t.lazy||y.isTabActive(n)?d((c(),s("div",r({key:0,id:y.getTabContentId(n),style:y.getTabProp(e,"contentStyle"),class:t.cx("tab.content",{tab:e}),role:"tabpanel","aria-labelledby":y.getTabHeaderActionId(n)},k(k(k({},y.getTabProp(e,"contentProps")),y.getTabPT(e,"root",n)),y.getTabPT(e,"content",n)),{"data-pc-name":"tabpanel","data-pc-index":n,"data-p-active":i.d_activeIndex===n}),[(c(),u(b(e)))],16,O)),[[x,!!t.lazy||y.isTabActive(n)]]):v("",!0)],64)})),128))],16)],16)};export{T as default};