Spaces:
Running
Running
| <script lang="ts"> | |
| import { Dialog as DialogPrimitive } from 'bits-ui'; | |
| import DialogPortal from './dialog-portal.svelte'; | |
| import type { Snippet } from 'svelte'; | |
| import * as Dialog from './index.js'; | |
| import { cn, type WithoutChildrenOrChild } from '$lib/utils.js'; | |
| import type { ComponentProps } from 'svelte'; | |
| import { Button } from '$lib/components/ui/button/index.js'; | |
| import XIcon from 'phosphor-svelte/lib/X'; | |
| let { | |
| ref = $bindable(null), | |
| class: className, | |
| portalProps, | |
| children, | |
| showCloseButton = true, | |
| ...restProps | |
| }: WithoutChildrenOrChild<DialogPrimitive.ContentProps> & { | |
| portalProps?: WithoutChildrenOrChild<ComponentProps<typeof DialogPortal>>; | |
| children: Snippet; | |
| showCloseButton?: boolean; | |
| } = $props(); | |
| </script> | |
| <DialogPortal {...portalProps}> | |
| <Dialog.Overlay /> | |
| <DialogPrimitive.Content | |
| bind:ref | |
| data-slot="dialog-content" | |
| class={cn( | |
| 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none', | |
| className | |
| )} | |
| {...restProps} | |
| > | |
| {@render children?.()} | |
| {#if showCloseButton} | |
| <DialogPrimitive.Close data-slot="dialog-close"> | |
| {#snippet child({ props })} | |
| <Button variant="ghost" class="absolute top-2 right-2" size="icon-sm" {...props}> | |
| <XIcon /> | |
| <span class="sr-only">Close</span> | |
| </Button> | |
| {/snippet} | |
| </DialogPrimitive.Close> | |
| {/if} | |
| </DialogPrimitive.Content> | |
| </DialogPortal> | |