<script lang="ts"> import { createEventDispatcher } from 'svelte'; const dispatch = createEventDispatcher(); export let state = 'unchecked'; export let indeterminate = false; let _state = 'unchecked'; $: _state = state; </script> <button class=" outline -outline-offset-1 outline-[1.5px] outline-gray-200 dark:outline-gray-600 {state !== 'unchecked' ? 'bg-black outline-black ' : 'hover:outline-gray-500 hover:bg-gray-50 dark:hover:bg-gray-800'} text-white transition-all rounded inline-block w-3.5 h-3.5 relative" on:click={() => { if (_state === 'unchecked') { _state = 'checked'; dispatch('change', _state); } else if (_state === 'checked') { _state = 'unchecked'; if (!indeterminate) { dispatch('change', _state); } } else if (indeterminate) { _state = 'checked'; dispatch('change', _state); } }} type="button" > <div class="top-0 left-0 absolute w-full flex justify-center"> {#if _state === 'checked'} <svg class="w-3.5 h-3.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" > <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="m5 12 4.7 4.5 9.3-9" /> </svg> {:else if indeterminate} <svg class="w-3 h-3.5 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" > <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 12h14" /> </svg> {/if} </div> <!-- {checked} --> </button>