-
Notifications
You must be signed in to change notification settings - Fork 127
/
Copy pathuseAccordionContentClasses.ts
26 lines (24 loc) · 1.23 KB
/
useAccordionContentClasses.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { computed, type Ref } from 'vue'
import { useAccordionState } from '@/components/Accordion/composables/useAccordionState'
import { twMerge } from 'tailwind-merge'
const baseContentClasses = 'p-5 border border-gray-200 dark:border-gray-700 dark:bg-gray-900'
export function useAccordionContentClasses(contentRef: Ref) {
const accordionId = computed(() => contentRef.value.parentElement.parentElement.dataset.accordionId)
const panelId = computed(() => contentRef.value.parentElement.dataset.panelId)
const { accordionsStates } = useAccordionState()
const accordionState = computed(() => accordionsStates[accordionId.value])
const panelState = computed(() => accordionsStates[accordionId.value].panels[panelId.value])
const panelsCount = computed(() => Object.keys(accordionsStates[accordionId.value].panels[panelId.value]).length)
const contentClasses = computed(() => {
return twMerge(
baseContentClasses,
!panelState.value.isVisible && 'hidden',
(panelState.value.order !== panelsCount.value - 1 || accordionState.value.flush) && 'border-b-0',
panelState.value.order === panelsCount.value - 1 && 'border-t-0',
accordionState.value.flush && 'border-x-0',
)
})
return {
contentClasses,
}
}