Modal.svelte 917 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <script lang="ts">
  2. import { onMount } from 'svelte';
  3. import { fade, blur } from 'svelte/transition';
  4. export let show = true;
  5. let mounted = false;
  6. onMount(() => {
  7. mounted = true;
  8. });
  9. $: if (mounted) {
  10. if (show) {
  11. document.body.style.overflow = 'hidden';
  12. } else {
  13. document.body.style.overflow = 'unset';
  14. }
  15. }
  16. </script>
  17. {#if show}
  18. <!-- svelte-ignore a11y-click-events-have-key-events -->
  19. <!-- svelte-ignore a11y-no-static-element-interactions -->
  20. <div
  21. class="fixed top-0 right-0 left-0 bottom-0 bg-stone-900/50 w-full min-h-screen h-screen flex justify-center z-50 overflow-hidden overscroll-contain"
  22. on:click={() => {
  23. show = false;
  24. }}
  25. >
  26. <div
  27. class="m-auto rounded-xl max-w-full w-[40rem] mx-2 bg-gray-50 dark:bg-gray-900 shadow-3xl"
  28. transition:fade={{ delay: 100, duration: 200 }}
  29. on:click={(e) => {
  30. e.stopPropagation();
  31. }}
  32. >
  33. <slot />
  34. </div>
  35. </div>
  36. {/if}