primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 9.45 kB
JavaScript
import e from"primevue/icons/chevrondown";import t from"primevue/icons/chevronright";import n from"primevue/ripple";import{UniqueComponentId as i,DomHandler as a}from"primevue/utils";import{mergeProps as o,openBlock as r,createElementBlock as c,Fragment as d,renderList as s,createElementVNode as l,createBlock as p,resolveDynamicComponent as b,toDisplayString as u,createCommentVNode as h,createVNode as f,Transition as v,withCtx as g,withDirectives as m,vShow as T}from"vue";import y from"primevue/basecomponent";import{useStyle as x}from"primevue/usestyle";var A=x("\n.p-accordion-header-action {\n cursor: pointer;\n display: flex;\n align-items: center;\n user-select: none;\n position: relative;\n text-decoration: none;\n}\n\n.p-accordion-header-action:focus {\n z-index: 1;\n}\n\n.p-accordion-header-text {\n line-height: 1;\n}\n",{name:"accordion",manual:!0}),I={name:"Accordion",extends:{name:"BaseAccordion",extends:y,props:{multiple:{type:Boolean,default:!1},activeIndex:{type:[Number,Array],default:null},lazy:{type:Boolean,default:!1},expandIcon:{type:String,default:void 0},collapseIcon:{type:String,default:void 0},tabindex:{type:Number,default:0},selectOnFocus:{type:Boolean,default:!1}},css:{classes:{root:"p-accordion p-component",tab:{root:function(e){return["p-accordion-tab",{"p-accordion-tab-active":e.instance.isTabActive(e.index)}]},header:function(e){var t=e.instance,n=e.tab;return["p-accordion-header",{"p-highlight":t.isTabActive(e.index),"p-disabled":t.getTabProp(n,"disabled")}]},headerAction:"p-accordion-header-link p-accordion-header-action",headerIcon:"p-accordion-toggle-icon",headerTitle:"p-accordion-header-text",toggleableContent:"p-toggleable-content",content:"p-accordion-content"}},loadStyle:A.load},provide:function(){return{$parentInstance:this}}},emits:["update:activeIndex","tab-open","tab-close","tab-click"],data:function(){return{id:this.$attrs.id,d_activeIndex:this.activeIndex}},watch:{"$attrs.id":function(e){this.id=e||i()},activeIndex:function(e){this.d_activeIndex=e}},mounted:function(){this.id=this.id||i()},methods:{isAccordionTab:function(e){return"AccordionTab"===e.type.name},isTabActive:function(e){return this.multiple?this.d_activeIndex&&this.d_activeIndex.includes(e):this.d_activeIndex===e},getTabProp:function(e,t){return e.props?e.props[t]:void 0},getKey:function(e,t){return this.getTabProp(e,"header")||t},getTabHeaderActionId:function(e){return"".concat(this.id,"_").concat(e,"_header_action")},getTabContentId:function(e){return"".concat(this.id,"_").concat(e,"_content")},getTabPT:function(e,t,n){var i=this.tabs.length,a={props:e.props||{},parent:{props:this.$props,state:this.$data},context:{index:n,count:i,first:0===n,last:n===i-1,active:this.isTabActive(n)}};return o(this.ptm("tab.".concat(t),{tab:a}),this.ptm("accordiontab.".concat(t),{accordiontab:a}),this.ptm("accordiontab.".concat(t),a),this.ptmo(this.getTabProp(e,"pt"),t,a))},onTabClick:function(e,t,n){this.changeActiveIndex(e,t,n),this.$emit("tab-click",{originalEvent:e,index:n})},onTabKeyDown:function(e,t,n){switch(e.code){case"ArrowDown":this.onTabArrowDownKey(e);break;case"ArrowUp":this.onTabArrowUpKey(e);break;case"Home":this.onTabHomeKey(e);break;case"End":this.onTabEndKey(e);break;case"Enter":case"Space":this.onTabEnterKey(e,t,n)}},onTabArrowDownKey:function(e){var t=this.findNextHeaderAction(e.target.parentElement.parentElement);t?this.changeFocusedTab(e,t):this.onTabHomeKey(e),e.preventDefault()},onTabArrowUpKey:function(e){var t=this.findPrevHeaderAction(e.target.parentElement.parentElement);t?this.changeFocusedTab(e,t):this.onTabEndKey(e),e.preventDefault()},onTabHomeKey:function(e){var t=this.findFirstHeaderAction();this.changeFocusedTab(e,t),e.preventDefault()},onTabEndKey:function(e){var t=this.findLastHeaderAction();this.changeFocusedTab(e,t),e.preventDefault()},onTabEnterKey:function(e,t,n){this.changeActiveIndex(e,t,n),e.preventDefault()},findNextHeaderAction:function(e){var t=a.findSingle(arguments.length>1&&void 0!==arguments[1]&&arguments[1]?e:e.nextElementSibling,'[data-pc-section="header"]');return t?a.getAttribute(t,"data-p-disabled")?this.findNextHeaderAction(t.parentElement):a.findSingle(t,'[data-pc-section="headeraction"]'):null},findPrevHeaderAction:function(e){var t=a.findSingle(arguments.length>1&&void 0!==arguments[1]&&arguments[1]?e:e.previousElementSibling,'[data-pc-section="header"]');return t?a.getAttribute(t,"data-p-disabled")?this.findPrevHeaderAction(t.parentElement):a.findSingle(t,'[data-pc-section="headeraction"]'):null},findFirstHeaderAction:function(){return this.findNextHeaderAction(this.$el.firstElementChild,!0)},findLastHeaderAction:function(){return this.findPrevHeaderAction(this.$el.lastElementChild,!0)},changeActiveIndex:function(e,t,n){if(!this.getTabProp(t,"disabled")){var i=this.isTabActive(n),a=i?"tab-close":"tab-open";this.multiple?i?this.d_activeIndex=this.d_activeIndex.filter((function(e){return e!==n})):this.d_activeIndex?this.d_activeIndex.push(n):this.d_activeIndex=[n]:this.d_activeIndex=this.d_activeIndex===n?null:n,this.$emit("update:activeIndex",this.d_activeIndex),this.$emit(a,{originalEvent:e,index:n})}},changeFocusedTab:function(e,t){if(t&&(a.focus(t),this.selectOnFocus)){var n=parseInt(t.parentElement.parentElement.dataset.pcIndex,10);this.changeActiveIndex(e,this.tabs[n],n)}}},computed:{tabs:function(){var e=this;return this.$slots.default().reduce((function(t,n){return e.isAccordionTab(n)?t.push(n):n.children&&n.children instanceof Array&&n.children.forEach((function(n){e.isAccordionTab(n)&&t.push(n)})),t}),[])}},components:{ChevronDownIcon:e,ChevronRightIcon:t},directives:{ripple:n}};function P(e){return P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},P(e)}function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?w(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):w(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function S(e,t,n){return(t=O(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function O(e){var t=k(e,"string");return"symbol"===P(t)?t:String(t)}function k(e,t){if("object"!==P(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t||"default");if("object"!==P(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}var H=["data-pc-index","data-p-active"],_=["data-p-highlight","data-p-disabled"],K=["id","tabindex","aria-disabled","aria-expanded","aria-controls","onClick","onKeydown"],C=["id","aria-labelledby"];I.render=function(e,t,n,i,a,y){return r(),c("div",o({class:e.cx("root")},e.ptm("root")),[(r(!0),c(d,null,s(y.tabs,(function(t,n){return r(),c("div",o({key:y.getKey(t,n),class:e.cx("tab.root",{tab:t,index:n})},y.getTabPT(t,"root",n),{"data-pc-name":"accordiontab","data-pc-index":n,"data-p-active":y.isTabActive(n)}),[l("div",o({style:y.getTabProp(t,"headerStyle"),class:[e.cx("tab.header",{tab:t,index:n}),y.getTabProp(t,"headerClass")]},E(E({},y.getTabProp(t,"headerProps")),y.getTabPT(t,"header",n)),{"data-p-highlight":y.isTabActive(n),"data-p-disabled":y.getTabProp(t,"disabled")}),[l("a",o({id:y.getTabHeaderActionId(n),class:e.cx("tab.headerAction"),tabindex:y.getTabProp(t,"disabled")?-1:e.tabindex,role:"button","aria-disabled":y.getTabProp(t,"disabled"),"aria-expanded":y.isTabActive(n),"aria-controls":y.getTabContentId(n),onClick:function(e){return y.onTabClick(e,t,n)},onKeydown:function(e){return y.onTabKeyDown(e,t,n)}},E(E({},y.getTabProp(t,"headeractionprops")),y.getTabPT(t,"headeraction",n))),[t.children&&t.children.headericon?(r(),p(b(t.children.headericon),{key:0,isTabActive:y.isTabActive(n),index:n},null,8,["isTabActive","index"])):y.isTabActive(n)?(r(),p(b(e.collapseIcon?"span":"ChevronDownIcon"),o({key:1,class:[e.cx("tab.headerIcon"),e.collapseIcon],"aria-hidden":"true"},y.getTabPT(t,"headericon",n)),null,16,["class"])):(r(),p(b(e.expandIcon?"span":"ChevronRightIcon"),o({key:2,class:[e.cx("tab.headerIcon"),e.expandIcon],"aria-hidden":"true"},y.getTabPT(t,"headericon",n)),null,16,["class"])),t.props&&t.props.header?(r(),c("span",o({key:3,class:e.cx("tab.headerTitle")},y.getTabPT(t,"headertitle",n)),u(t.props.header),17)):h("",!0),t.children&&t.children.header?(r(),p(b(t.children.header),{key:4})):h("",!0)],16,K)],16,_),f(v,{name:"p-toggleable-content"},{default:g((function(){return[!e.lazy||y.isTabActive(n)?m((r(),c("div",o({key:0,id:y.getTabContentId(n),style:y.getTabProp(t,"contentStyle"),class:[e.cx("tab.toggleableContent"),y.getTabProp(t,"contentClass")],role:"region","aria-labelledby":y.getTabHeaderActionId(n)},E(E({},y.getTabProp(t,"contentProps")),y.getTabPT(t,"toggleablecontent",n))),[l("div",o({class:e.cx("tab.content")},y.getTabPT(t,"content",n)),[(r(),p(b(t)))],16)],16,C)),[[T,!!e.lazy||y.isTabActive(n)]]):h("",!0)]})),_:2},1024)],16,H)})),128))],16)};export{I as default};