ChatControls.svelte 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <script lang="ts">
  2. import { slide } from 'svelte/transition';
  3. import Modal from '../common/Modal.svelte';
  4. import Controls from './Controls/Controls.svelte';
  5. import { onMount } from 'svelte';
  6. export let show = false;
  7. export let chatId = null;
  8. export let params = {};
  9. let largeScreen = false;
  10. onMount(() => {
  11. // listen to resize 1024px
  12. const mediaQuery = window.matchMedia('(min-width: 1024px)');
  13. const handleMediaQuery = (e) => {
  14. if (e.matches) {
  15. largeScreen = true;
  16. } else {
  17. largeScreen = false;
  18. }
  19. };
  20. mediaQuery.addEventListener('change', handleMediaQuery);
  21. handleMediaQuery(mediaQuery);
  22. return () => {
  23. mediaQuery.removeEventListener('change', handleMediaQuery);
  24. };
  25. });
  26. </script>
  27. {#if largeScreen}
  28. {#if show}
  29. <div class=" absolute bottom-0 right-0 z-20 h-full pointer-events-none">
  30. <div class="pr-4 pt-14 pb-8 w-[24rem] h-full" in:slide={{ duration: 200, axis: 'x' }}>
  31. <div
  32. class="w-full h-full px-5 py-4 bg-white dark:shadow-lg dark:bg-gray-850 border border-gray-50 dark:border-gray-800 rounded-xl z-50 pointer-events-auto overflow-y-auto scrollbar-hidden"
  33. >
  34. <Controls
  35. on:close={() => {
  36. show = false;
  37. }}
  38. bind:params
  39. />
  40. </div>
  41. </div>
  42. </div>
  43. {/if}
  44. {:else}
  45. <Modal bind:show>
  46. <div class=" px-6 py-4 h-full">
  47. <Controls
  48. on:close={() => {
  49. show = false;
  50. }}
  51. bind:params
  52. />
  53. </div>
  54. </Modal>
  55. {/if}