e7738de6d2
CI / Deep Native Runtime Cases (1/6) (push) Has been skipped
CI / Native Preflight (push) Failing after 1s
CI / Native Runtime Cases (1/2) (push) Failing after 0s
CI / Native Runtime Cases (2/2) (push) Failing after 1s
CI / Native Metadata Reports (push) Failing after 0s
CI / Native Direct Backend Artifacts (push) Failing after 0s
CI / Native Sanitizer Smoke (push) Failing after 1s
CI / Command Contract Snapshots (push) Failing after 1s
CI / Deep Conformance Suite (push) Has been skipped
CI / Graph Build Perf (push) Failing after 1s
CI / Deep Native Preflight (push) Has been skipped
CI / Deep Native Runtime Cases (2/6) (push) Has been skipped
CI / Deep Native Runtime Cases (3/6) (push) Has been skipped
CI / Conformance Suite (push) Failing after 1s
CI / Workspace Checks (push) Failing after 0s
CI / Deep Native Runtime Cases (5/6) (push) Has been skipped
CI / Deep Native Runtime Cases (6/6) (push) Has been skipped
CI / Deep Native Runtime Cases (4/6) (push) Has been skipped
CI / Deep Graph Build Perf (push) Has been skipped
88 lines
3.2 KiB
TypeScript
88 lines
3.2 KiB
TypeScript
"use client";
|
|
|
|
import type { ComponentProps, ReactNode } from "react";
|
|
import { Dialog as SheetPrimitive } from "radix-ui";
|
|
import { cn } from "@/lib/utils";
|
|
|
|
function Sheet(props: ComponentProps<typeof SheetPrimitive.Root>) {
|
|
return <SheetPrimitive.Root data-slot="sheet" {...props} />;
|
|
}
|
|
|
|
function SheetPortal(props: ComponentProps<typeof SheetPrimitive.Portal>) {
|
|
return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} />;
|
|
}
|
|
|
|
function SheetOverlay({ className, ...props }: ComponentProps<typeof SheetPrimitive.Overlay>) {
|
|
return (
|
|
<SheetPrimitive.Overlay
|
|
data-slot="sheet-overlay"
|
|
className={cn(
|
|
"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
className,
|
|
)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
type SheetContentProps = ComponentProps<typeof SheetPrimitive.Content> & {
|
|
children?: ReactNode;
|
|
side?: "left" | "right";
|
|
showCloseButton?: boolean;
|
|
overlayClassName?: string;
|
|
};
|
|
|
|
function SheetContent({
|
|
className,
|
|
children,
|
|
side = "right",
|
|
showCloseButton = true,
|
|
overlayClassName,
|
|
...props
|
|
}: SheetContentProps) {
|
|
return (
|
|
<SheetPortal>
|
|
<SheetOverlay className={overlayClassName} />
|
|
<SheetPrimitive.Content
|
|
data-slot="sheet-content"
|
|
className={cn(
|
|
"fixed z-50 flex flex-col gap-4 bg-white shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 dark:bg-neutral-950",
|
|
side === "right" &&
|
|
"inset-y-0 right-0 h-full w-3/4 border-l border-neutral-200 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right dark:border-neutral-800 sm:max-w-sm",
|
|
side === "left" &&
|
|
"inset-y-0 left-0 h-full w-3/4 border-r border-neutral-200 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left dark:border-neutral-800 sm:max-w-sm",
|
|
className,
|
|
)}
|
|
{...props}
|
|
>
|
|
{children}
|
|
{showCloseButton && (
|
|
<SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none">
|
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
|
|
<line x1="18" y1="6" x2="6" y2="18" />
|
|
<line x1="6" y1="6" x2="18" y2="18" />
|
|
</svg>
|
|
<span className="sr-only">Close</span>
|
|
</SheetPrimitive.Close>
|
|
)}
|
|
</SheetPrimitive.Content>
|
|
</SheetPortal>
|
|
);
|
|
}
|
|
|
|
function SheetTitle({ className, ...props }: ComponentProps<typeof SheetPrimitive.Title>) {
|
|
return (
|
|
<SheetPrimitive.Title
|
|
data-slot="sheet-title"
|
|
className={cn("font-semibold text-neutral-900 dark:text-neutral-100", className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function SheetTrigger({ className, ...props }: ComponentProps<typeof SheetPrimitive.Trigger>) {
|
|
return <SheetPrimitive.Trigger data-slot="sheet-trigger" className={cn(className)} {...props} />;
|
|
}
|
|
|
|
export { Sheet, SheetTrigger, SheetContent, SheetTitle };
|