Dropdown.svelte 1.2 KB

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