| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | <script lang="ts"> | 
					
						
							|  |  |  | 	import { onMount } from 'svelte'; | 
					
						
							| 
									
										
										
										
											2024-02-22 18:54:55 +08:00
										 |  |  | 	import { fade } from 'svelte/transition'; | 
					
						
							| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	export let show = true; | 
					
						
							| 
									
										
										
										
											2024-01-06 12:59:56 +08:00
										 |  |  | 	export let size = 'md'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | 	let mounted = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-06 12:59:56 +08:00
										 |  |  | 	const sizeToWidth = (size) => { | 
					
						
							| 
									
										
										
										
											2024-01-18 13:01:30 +08:00
										 |  |  | 		if (size === 'xs') { | 
					
						
							|  |  |  | 			return 'w-[16rem]'; | 
					
						
							|  |  |  | 		} else if (size === 'sm') { | 
					
						
							| 
									
										
										
										
											2024-01-06 12:59:56 +08:00
										 |  |  | 			return 'w-[30rem]'; | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2024-02-22 05:29:59 +08:00
										 |  |  | 			return 'w-[44rem]'; | 
					
						
							| 
									
										
										
										
											2024-01-06 12:59:56 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | 	onMount(() => { | 
					
						
							|  |  |  | 		mounted = true; | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$: if (mounted) { | 
					
						
							|  |  |  | 		if (show) { | 
					
						
							|  |  |  | 			document.body.style.overflow = 'hidden'; | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			document.body.style.overflow = 'unset'; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {#if show} | 
					
						
							|  |  |  | 	<!-- svelte-ignore a11y-click-events-have-key-events --> | 
					
						
							|  |  |  | 	<!-- svelte-ignore a11y-no-static-element-interactions --> | 
					
						
							|  |  |  | 	<div | 
					
						
							| 
									
										
										
										
											2024-02-22 22:20:48 +08:00
										 |  |  | 		class=" fixed top-0 right-0 left-0 bottom-0 bg-black/60 w-full min-h-screen h-screen flex justify-center z-50 overflow-hidden overscroll-contain" | 
					
						
							| 
									
										
										
										
											2024-02-23 16:32:43 +08:00
										 |  |  | 		transition:fade={{ duration: 50 }} | 
					
						
							| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | 	> | 
					
						
							|  |  |  | 		<div | 
					
						
							| 
									
										
										
										
											2024-02-22 22:20:48 +08:00
										 |  |  | 			class=" modal-content m-auto rounded-xl max-w-full {sizeToWidth( | 
					
						
							| 
									
										
										
										
											2024-01-06 12:59:56 +08:00
										 |  |  | 				size | 
					
						
							|  |  |  | 			)} mx-2 bg-gray-50 dark:bg-gray-900 shadow-3xl" | 
					
						
							| 
									
										
										
										
											2024-02-23 16:32:43 +08:00
										 |  |  | 			transition:fade={{ duration: 50 }} | 
					
						
							| 
									
										
										
										
											2023-10-09 06:38:42 +08:00
										 |  |  | 			on:click={(e) => { | 
					
						
							|  |  |  | 				e.stopPropagation(); | 
					
						
							|  |  |  | 			}} | 
					
						
							|  |  |  | 		> | 
					
						
							|  |  |  | 			<slot /> | 
					
						
							|  |  |  | 		</div> | 
					
						
							|  |  |  | 	</div> | 
					
						
							|  |  |  | {/if} | 
					
						
							| 
									
										
										
										
											2024-02-22 22:20:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  | 	.modal-content { | 
					
						
							|  |  |  | 		animation: scaleUp 0.1s ease-out forwards; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@keyframes scaleUp { | 
					
						
							|  |  |  | 		from { | 
					
						
							|  |  |  | 			transform: scale(0.9); | 
					
						
							|  |  |  | 			opacity: 0; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		to { | 
					
						
							|  |  |  | 			transform: scale(1); | 
					
						
							|  |  |  | 			opacity: 1; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | </style> |