FolderMenu.svelte 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. import Download from '$lib/components/icons/Download.svelte';
  12. let show = false;
  13. </script>
  14. <Dropdown
  15. bind:show
  16. on:change={(e) => {
  17. if (e.detail === false) {
  18. dispatch('close');
  19. }
  20. }}
  21. >
  22. <Tooltip content={$i18n.t('More')}>
  23. <slot />
  24. </Tooltip>
  25. <div slot="content">
  26. <DropdownMenu.Content
  27. 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"
  28. sideOffset={-2}
  29. side="bottom"
  30. align="start"
  31. transition={flyAndScale}
  32. >
  33. <DropdownMenu.Item
  34. 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"
  35. on:click={() => {
  36. dispatch('rename');
  37. }}
  38. >
  39. <Pencil strokeWidth="2" />
  40. <div class="flex items-center">{$i18n.t('Rename')}</div>
  41. </DropdownMenu.Item>
  42. <DropdownMenu.Item
  43. 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"
  44. on:click={() => {
  45. dispatch('export');
  46. }}
  47. >
  48. <Download strokeWidth="2" />
  49. <div class="flex items-center">{$i18n.t('Export')}</div>
  50. </DropdownMenu.Item>
  51. <DropdownMenu.Item
  52. 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"
  53. on:click={() => {
  54. dispatch('delete');
  55. }}
  56. >
  57. <GarbageBin strokeWidth="2" />
  58. <div class="flex items-center">{$i18n.t('Delete')}</div>
  59. </DropdownMenu.Item>
  60. </DropdownMenu.Content>
  61. </div>
  62. </Dropdown>