| | <script lang="ts"> |
| | import { createEventDispatcher } from 'svelte'; |
| | const dispatch = createEventDispatcher(); |
| |
|
| | export let state = 'unchecked'; |
| | export let indeterminate = false; |
| | export let disabled = false; |
| |
|
| | export let disabledClassName = 'opacity-50 cursor-not-allowed'; |
| |
|
| | 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-sm inline-block w-3.5 h-3.5 relative {disabled |
| | ? disabledClassName |
| | : ''}" |
| | on:click={() => { |
| | if (disabled) return; |
| |
|
| | 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" |
| | {disabled} |
| | > |
| | <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> |
| |
|
| | |
| | </button> |
| |
|