Switch.svelte 770 B

12345678910111213141516171819202122
  1. <script lang="ts">
  2. import { createEventDispatcher, tick } from 'svelte';
  3. import { Switch } from 'bits-ui';
  4. export let state = true;
  5. const dispatch = createEventDispatcher();
  6. </script>
  7. <Switch.Root
  8. bind:checked={state}
  9. onCheckedChange={async (e) => {
  10. await tick();
  11. dispatch('change', e);
  12. }}
  13. class="flex h-5 min-h-5 w-9 shrink-0 cursor-pointer items-center rounded-full px-[3px] transition {state
  14. ? ' bg-emerald-600'
  15. : 'bg-gray-200 dark:bg-transparent'} outline outline-1 outline-gray-100 dark:outline-gray-800"
  16. >
  17. <Switch.Thumb
  18. class="pointer-events-none block size-4 shrink-0 rounded-full bg-white transition-transform data-[state=checked]:translate-x-3.5 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:shadow-mini "
  19. />
  20. </Switch.Root>