mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	 6df2d76c1e
			
		
	
	6df2d76c1e
	
	
	
		
			
			Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com>
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <script setup>
 | |
| import { computed } from 'vue';
 | |
| const props = defineProps({
 | |
|   initialActiveTab: {
 | |
|     type: Number,
 | |
|     default: 0,
 | |
|   },
 | |
|   tabs: {
 | |
|     type: Array,
 | |
|     required: true,
 | |
|     validator: value => {
 | |
|       return value.every(
 | |
|         tab =>
 | |
|           typeof tab.label === 'string' &&
 | |
|           (tab.count ? typeof tab.count === 'number' : true)
 | |
|       );
 | |
|     },
 | |
|   },
 | |
| });
 | |
| 
 | |
| const emit = defineEmits(['tabChanged']);
 | |
| 
 | |
| const activeTab = computed(() => props.initialActiveTab);
 | |
| 
 | |
| const selectTab = index => {
 | |
|   emit('tabChanged', props.tabs[index]);
 | |
| };
 | |
| 
 | |
| const showDivider = index => {
 | |
|   return (
 | |
|     // Show dividers after the active tab, but not after the last tab
 | |
|     (index > activeTab.value && index < props.tabs.length - 1) ||
 | |
|     // Show dividers before the active tab, but not immediately before it and not before the first tab
 | |
|     (index < activeTab.value - 1 && index > -1)
 | |
|   );
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
|   <div class="flex items-center h-8 rounded-lg bg-n-alpha-1 w-fit">
 | |
|     <template v-for="(tab, index) in tabs" :key="index">
 | |
|       <button
 | |
|         class="relative px-4 truncate py-1.5 text-sm border-0 outline-1 outline rounded-lg transition-colors duration-300 ease-in-out hover:text-n-brand"
 | |
|         :class="[
 | |
|           activeTab === index
 | |
|             ? 'text-n-brand bg-n-solid-active outline-n-container dark:outline-transparent'
 | |
|             : 'text-n-slate-10 outline-transparent h-8',
 | |
|         ]"
 | |
|         @click="selectTab(index)"
 | |
|       >
 | |
|         {{ tab.label }} {{ tab.count ? `(${tab.count})` : '' }}
 | |
|       </button>
 | |
|       <div
 | |
|         class="w-px h-3.5 rounded my-auto transition-colors duration-300 ease-in-out"
 | |
|         :class="
 | |
|           showDivider(index)
 | |
|             ? 'bg-slate-75 dark:bg-slate-800'
 | |
|             : 'bg-transparent dark:bg-transparent'
 | |
|         "
 | |
|       />
 | |
|     </template>
 | |
|   </div>
 | |
| </template>
 |