Dropdown.svelte 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <script lang="ts">
  2. import { DropdownMenu } from 'bits-ui';
  3. import { createEventDispatcher } from 'svelte';
  4. import { flyAndScale } from '$lib/utils/transitions';
  5. export let show = false;
  6. export let side = 'bottom';
  7. export let align = 'start';
  8. const dispatch = createEventDispatcher();
  9. </script>
  10. <DropdownMenu.Root
  11. bind:open={show}
  12. closeFocus={false}
  13. onOpenChange={(state) => {
  14. dispatch('change', state);
  15. }}
  16. typeahead={false}
  17. >
  18. <DropdownMenu.Trigger>
  19. <slot />
  20. </DropdownMenu.Trigger>
  21. <slot name="content">
  22. <DropdownMenu.Content
  23. class="w-full max-w-[130px] rounded-lg px-1 py-1.5 border border-gray-900 z-50 bg-gray-850 text-white"
  24. sideOffset={8}
  25. {side}
  26. {align}
  27. transition={flyAndScale}
  28. >
  29. <DropdownMenu.Item class="flex items-center px-3 py-2 text-sm font-medium">
  30. <div class="flex items-center">Profile</div>
  31. </DropdownMenu.Item>
  32. <DropdownMenu.Item class="flex items-center px-3 py-2 text-sm font-medium">
  33. <div class="flex items-center">Profile</div>
  34. </DropdownMenu.Item>
  35. <DropdownMenu.Item class="flex items-center px-3 py-2 text-sm font-medium">
  36. <div class="flex items-center">Profile</div>
  37. </DropdownMenu.Item>
  38. </DropdownMenu.Content>
  39. </slot>
  40. </DropdownMenu.Root>