UNPKG

@coreui/vue

Version:

UI Components Library for Vue.js

70 lines (67 loc) 2.03 kB
import { defineComponent, ref, h, Transition, withDirectives, vShow } from 'vue'; import { executeAfterTransition } from '../../utils/transition.js'; const CTabPane = defineComponent({ name: 'CTabPane', props: { /** * Enable fade in and fade out transition. * * @since 5.1.0 */ transition: { type: Boolean, default: true, }, /** * Toggle the visibility of component. */ visible: { type: Boolean, default: false, }, }, emits: [ /** * Callback fired when the component requests to be hidden. */ 'hide', /** * Callback fired when the component requests to be shown. */ 'show', ], setup(props, { slots, emit }) { const tabPaneRef = ref(); const firstRender = ref(true); const handleEnter = (el, done) => { firstRender.value = false; emit('show'); setTimeout(() => { executeAfterTransition(() => done(), el); el.classList.add('show'); }, 1); }; const handleLeave = (el, done) => { firstRender.value = false; emit('hide'); el.classList.remove('show'); executeAfterTransition(() => done(), el); }; return () => h(Transition, { onEnter: (el, done) => handleEnter(el, done), onLeave: (el, done) => handleLeave(el, done), }, () => withDirectives(h('div', { class: [ 'tab-pane', { active: props.visible, fade: props.transition, show: firstRender.value && props.visible, }, ], ref: tabPaneRef, }, slots.default && slots.default()), [[vShow, props.visible]])); }, }); export { CTabPane }; //# sourceMappingURL=CTabPane.js.map