FolderMenu.svelte 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <script lang="ts">
  2. import { DropdownMenu } from 'bits-ui';
  3. import { flyAndScale } from '$lib/utils/transitions';
  4. import { getContext, createEventDispatcher } from 'svelte';
  5. const i18n = getContext('i18n');
  6. const dispatch = createEventDispatcher();
  7. import Dropdown from '$lib/components/common/Dropdown.svelte';
  8. import GarbageBin from '$lib/components/icons/GarbageBin.svelte';
  9. import Pencil from '$lib/components/icons/Pencil.svelte';
  10. import Tooltip from '$lib/components/common/Tooltip.svelte';
  11. let show = false;
  12. </script>
  13. <Dropdown
  14. bind:show
  15. on:change={(e) => {
  16. if (e.detail === false) {
  17. dispatch('close');
  18. }
  19. }}
  20. >
  21. <Tooltip content={$i18n.t('More')}>
  22. <slot />
  23. </Tooltip>
  24. <div slot="content">
  25. <DropdownMenu.Content
  26. class="w-full max-w-[160px] rounded-lg px-1 py-1.5 z-50 bg-white dark:bg-gray-850 dark:text-white shadow-xl"
  27. sideOffset={-2}
  28. side="bottom"
  29. align="start"
  30. transition={flyAndScale}
  31. >
  32. <DropdownMenu.Item
  33. class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
  34. on:click={() => {
  35. dispatch('rename');
  36. }}
  37. >
  38. <Pencil strokeWidth="2" />
  39. <div class="flex items-center">{$i18n.t('Rename')}</div>
  40. </DropdownMenu.Item>
  41. <DropdownMenu.Item
  42. class="flex gap-2 items-center px-3 py-1.5 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
  43. on:click={() => {
  44. dispatch('delete');
  45. }}
  46. >
  47. <GarbageBin strokeWidth="2" />
  48. <div class="flex items-center">{$i18n.t('Delete')}</div>
  49. </DropdownMenu.Item>
  50. </DropdownMenu.Content>
  51. </div>
  52. </Dropdown>