kopia lustrzana https://github.com/elk-zone/elk
				
				
				
			
		
			
				
	
	
		
			49 wiersze
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			49 wiersze
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
| <script setup lang="ts">
 | |
| const { disabled = false } = defineProps<{
 | |
|   icon?: string
 | |
|   text?: string
 | |
|   checked: boolean
 | |
|   disabled?: boolean
 | |
| }>()
 | |
| </script>
 | |
| 
 | |
| <template>
 | |
|   <button
 | |
|     exact-active-class="text-primary"
 | |
|     block w-full group focus:outline-none text-start
 | |
|     role="checkbox" :aria-checked="checked"
 | |
|     :disabled="disabled"
 | |
|     :class="disabled ? 'opacity-50 cursor-not-allowed' : ''"
 | |
|   >
 | |
|     <div
 | |
|       w-full flex w-fit px5 py3 md:gap2 gap4 items-center
 | |
|       transition-250
 | |
|       :class="disabled ? '' : 'group-hover:bg-active'"
 | |
|       group-focus-visible:ring="2 current"
 | |
|     >
 | |
|       <div flex-1 flex items-center md:gap2 gap4>
 | |
|         <div
 | |
|           v-if="icon" flex items-center justify-center
 | |
|           flex-shrink-0
 | |
|           :class="$slots.description ? 'w-12 h-12' : ''"
 | |
|         >
 | |
|           <slot name="icon">
 | |
|             <div v-if="icon" :class="icon" md:text-size-inherit text-xl />
 | |
|           </slot>
 | |
|         </div>
 | |
|         <div space-y-1>
 | |
|           <p :class="checked ? 'text-base' : 'text-secondary'">
 | |
|             <slot>
 | |
|               <span>{{ text }}</span>
 | |
|             </slot>
 | |
|           </p>
 | |
|           <p v-if="$slots.description" text-sm text-secondary>
 | |
|             <slot name="description" />
 | |
|           </p>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div text-lg :class="checked ? 'i-ri-checkbox-line text-primary' : 'i-ri-checkbox-blank-line text-secondary'" />
 | |
|     </div>
 | |
|   </button>
 | |
| </template>
 |