@coreui/vue
Version:
UI Components Library for Vue.js
30 lines (27 loc) • 1.14 kB
JavaScript
import { defineComponent, inject, ref, watch, provide, h } from 'vue';
const CAccordionItem = defineComponent({
name: 'CAccordionItem',
props: {
/**
* The item key.
*/
itemKey: [Number, String],
},
setup(props, { slots }) {
const activeItemKey = inject('activeItemKey');
const alwaysOpen = inject('alwaysOpen');
const setActiveItemKey = inject('setActiveItemKey');
const itemKey = ref(props.itemKey ?? Math.random().toString(36).slice(2, 11));
const visible = ref(Boolean(activeItemKey.value === itemKey.value));
watch(activeItemKey, () => (visible.value = Boolean(activeItemKey.value === itemKey.value)));
const toggleVisibility = () => {
visible.value = !visible.value;
!alwaysOpen && visible && setActiveItemKey(itemKey.value);
};
provide('visible', visible);
provide('toggleVisibility', toggleVisibility);
return () => h('div', { class: ['accordion-item'] }, slots.default && slots.default());
},
});
export { CAccordionItem };
//# sourceMappingURL=CAccordionItem.js.map