vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 1.38 kB
JavaScript
;const e=require("vue"),r=require("@vexip-ui/config"),v=require("./props.cjs"),f=require("./symbol.cjs"),h=["aria-hidden"],_=e.defineComponent({name:"TabPanel",__name:"tab-panel",props:v.tabPanelProps,setup(u){const i=u,t=r.useProps("tabPanel",i,{lazy:null}),d=e.useSlots(),l=e.inject(f.TABS_STATE,null),m=r.useNameHelper("tabs"),n=e.ref(!1),s=e.ref(t.label),c=e.computed(()=>t.lazy??(l==null?void 0:l.lazy)??!1),b=e.computed(()=>{const a=m.be("panel");return{[a]:!0,[`${a}--disabled`]:t.disabled,[`${a}--lazy`]:c.value,[`${a}--active`]:!t.disabled&&n.value}});if(e.watch(()=>t.label,a=>{s.value=a,l==null||l.refreshLabels()}),e.watch(n,a=>{r.emitEvent(t.onToggle,a)}),l){const a=e.reactive({label:s,name:e.toRef(t,"name"),icon:e.toRef(t,"icon"),disabled:e.toRef(t,"disabled"),closable:e.toRef(t,"closable"),labelRenderer:null});e.watch(()=>d.label,o=>{a.labelRenderer=o?p=>o(p):null},{immediate:!0}),e.watch(s,()=>{n.value=s.value===l.currentActive}),e.watch(()=>l.currentActive,o=>{n.value=s.value===o},{immediate:!0}),l.increaseItem(a),e.onBeforeUnmount(()=>{l.decreaseItem(a)})}return(a,o)=>!c.value||n.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(b.value),role:"tabpanel","aria-hidden":!n.value},[e.renderSlot(a.$slots,"default")],10,h)):e.createCommentVNode("",!0)}});module.exports=_;
//# sourceMappingURL=tab-panel.vue2.cjs.map