mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-28 12:11:08 -04:00 
			
		
		
		
	* add dark mode in base tabGroup and tab * fix tab-list border in dark-mode --------- Co-authored-by: yogesh-gohil <yogeshgohil1611@gmail.com>
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div>
 | |
|     <TabGroup
 | |
|       :selected-index="selectedIndex"
 | |
|       :default-index="defaultIndex"
 | |
|       @change="onChange"
 | |
|     >
 | |
|       <TabList
 | |
|         :class="[
 | |
|           'flex border-b border-grey-light dark:border-gray-600',
 | |
|           'relative overflow-x-auto overflow-y-hidden',
 | |
|           'lg:pb-0 lg:ml-0',
 | |
|         ]"
 | |
|       >
 | |
|         <Tab
 | |
|           v-for="(tab, index) in tabs"
 | |
|           v-slot="{ selected }"
 | |
|           :key="index"
 | |
|           as="template"
 | |
|         >
 | |
|           <button
 | |
|             :class="[
 | |
|               'px-8 py-2 text-sm leading-5 font-medium flex items-center relative border-b-2 mt-4 focus:outline-none whitespace-nowrap',
 | |
|               selected
 | |
|                 ? 'border-primary-400 text-black font-medium dark:text-white'
 | |
|                 : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:border-gray-500',
 | |
|             ]"
 | |
|           >
 | |
|             {{ tab.title }}
 | |
| 
 | |
|             <BaseBadge
 | |
|               v-if="tab.count"
 | |
|               class="!rounded-full overflow-hidden ml-2"
 | |
|               :variant="tab['count-variant']"
 | |
|               default-class="flex items-center justify-center w-5 h-5 p-1 rounded-full text-medium"
 | |
|             >
 | |
|               {{ tab.count }}
 | |
|             </BaseBadge>
 | |
|           </button>
 | |
|         </Tab>
 | |
|       </TabList>
 | |
| 
 | |
|       <slot name="before-tabs" />
 | |
| 
 | |
|       <TabPanels>
 | |
|         <slot />
 | |
|       </TabPanels>
 | |
|     </TabGroup>
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script setup>
 | |
| import { computed, useSlots } from 'vue'
 | |
| import { TabGroup, TabList, Tab, TabPanels } from '@headlessui/vue'
 | |
| 
 | |
| const props = defineProps({
 | |
|   defaultIndex: {
 | |
|     type: Number,
 | |
|     default: 0,
 | |
|   },
 | |
|   selectedIndex: {
 | |
|     type: Number,
 | |
|     default: 0,
 | |
|   },
 | |
|   filter: {
 | |
|     type: String,
 | |
|     default: null,
 | |
|   },
 | |
| })
 | |
| 
 | |
| const emit = defineEmits(['change'])
 | |
| 
 | |
| const slots = useSlots()
 | |
| 
 | |
| const tabs = computed(() => slots.default().map((tab) => tab.props))
 | |
| 
 | |
| function onChange(d) {
 | |
|   emit('change', tabs.value[d], d)
 | |
| }
 | |
| </script>
 |