VideoInputMenu.svelte 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. export let onClose: Function = () => {};
  9. export let devices: any;
  10. let show = false;
  11. </script>
  12. <Dropdown
  13. bind:show
  14. on:change={(e) => {
  15. if (e.detail === false) {
  16. onClose();
  17. }
  18. }}
  19. >
  20. <slot />
  21. <div slot="content">
  22. <DropdownMenu.Content
  23. class="w-full max-w-[180px] rounded-lg px-1 py-1.5 border border-gray-300/30 dark:border-gray-700/50 z-9999 bg-white dark:bg-gray-900 dark:text-white shadow-xs"
  24. sideOffset={6}
  25. side="top"
  26. align="start"
  27. transition={flyAndScale}
  28. >
  29. {#each devices as device}
  30. <DropdownMenu.Item
  31. class="flex gap-2 items-center px-3 py-2 text-sm cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded-md"
  32. on:click={() => {
  33. dispatch('change', device.deviceId);
  34. }}
  35. >
  36. <div class="flex items-center">
  37. <div class=" line-clamp-1">
  38. {device?.label ?? 'Camera'}
  39. </div>
  40. </div>
  41. </DropdownMenu.Item>
  42. {/each}
  43. </DropdownMenu.Content>
  44. </div>
  45. </Dropdown>