40 lines
2.1 KiB
Svelte
40 lines
2.1 KiB
Svelte
|
|
<script lang="ts">
|
||
|
|
import { cn } from '$shared/shadcn/utils/shadcn-utils.js';
|
||
|
|
import type { WithoutChildrenOrChild } from '$shared/shadcn/utils/shadcn-utils.js';
|
||
|
|
import type { ComponentProps } from 'svelte';
|
||
|
|
import { Drawer as DrawerPrimitive } from 'vaul-svelte';
|
||
|
|
import DrawerOverlay from './drawer-overlay.svelte';
|
||
|
|
import DrawerPortal from './drawer-portal.svelte';
|
||
|
|
|
||
|
|
let {
|
||
|
|
ref = $bindable(null),
|
||
|
|
class: className,
|
||
|
|
portalProps,
|
||
|
|
children,
|
||
|
|
...restProps
|
||
|
|
}: DrawerPrimitive.ContentProps & {
|
||
|
|
portalProps?: WithoutChildrenOrChild<ComponentProps<typeof DrawerPortal>>;
|
||
|
|
} = $props();
|
||
|
|
</script>
|
||
|
|
|
||
|
|
<DrawerPortal {...portalProps}>
|
||
|
|
<DrawerOverlay />
|
||
|
|
<DrawerPrimitive.Content
|
||
|
|
bind:ref
|
||
|
|
data-slot="drawer-content"
|
||
|
|
class={cn(
|
||
|
|
'group/drawer-content bg-background fixed z-50 flex h-auto flex-col',
|
||
|
|
'data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b',
|
||
|
|
'data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t',
|
||
|
|
'data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=right]:sm:max-w-sm',
|
||
|
|
'data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=left]:sm:max-w-sm',
|
||
|
|
className,
|
||
|
|
)}
|
||
|
|
{...restProps}
|
||
|
|
>
|
||
|
|
<div class="bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block">
|
||
|
|
</div>
|
||
|
|
{@render children?.()}
|
||
|
|
</DrawerPrimitive.Content>
|
||
|
|
</DrawerPortal>
|