diff --git a/src/components/ui/sheet/index.ts b/src/components/ui/sheet/index.ts
new file mode 100644
index 0000000..ffa765d
--- /dev/null
+++ b/src/components/ui/sheet/index.ts
@@ -0,0 +1,36 @@
+import { Dialog as SheetPrimitive } from "bits-ui";
+import Trigger from "./sheet-trigger.svelte";
+import Close from "./sheet-close.svelte";
+import Overlay from "./sheet-overlay.svelte";
+import Content from "./sheet-content.svelte";
+import Header from "./sheet-header.svelte";
+import Footer from "./sheet-footer.svelte";
+import Title from "./sheet-title.svelte";
+import Description from "./sheet-description.svelte";
+
+const Root = SheetPrimitive.Root;
+const Portal = SheetPrimitive.Portal;
+
+export {
+ Root,
+ Close,
+ Trigger,
+ Portal,
+ Overlay,
+ Content,
+ Header,
+ Footer,
+ Title,
+ Description,
+ //
+ Root as Sheet,
+ Close as SheetClose,
+ Trigger as SheetTrigger,
+ Portal as SheetPortal,
+ Overlay as SheetOverlay,
+ Content as SheetContent,
+ Header as SheetHeader,
+ Footer as SheetFooter,
+ Title as SheetTitle,
+ Description as SheetDescription,
+};
diff --git a/src/components/ui/sheet/sheet-close.svelte b/src/components/ui/sheet/sheet-close.svelte
new file mode 100644
index 0000000..3edf368
--- /dev/null
+++ b/src/components/ui/sheet/sheet-close.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/src/components/ui/sheet/sheet-content.svelte b/src/components/ui/sheet/sheet-content.svelte
new file mode 100644
index 0000000..918a5c7
--- /dev/null
+++ b/src/components/ui/sheet/sheet-content.svelte
@@ -0,0 +1,45 @@
+
+
+
+
+
+ {@render children?.()}
+
+
+ Close
+
+
+
diff --git a/src/components/ui/sheet/sheet-description.svelte b/src/components/ui/sheet/sheet-description.svelte
new file mode 100644
index 0000000..92a785b
--- /dev/null
+++ b/src/components/ui/sheet/sheet-description.svelte
@@ -0,0 +1,17 @@
+
+
+
diff --git a/src/components/ui/sheet/sheet-footer.svelte b/src/components/ui/sheet/sheet-footer.svelte
new file mode 100644
index 0000000..294fb5e
--- /dev/null
+++ b/src/components/ui/sheet/sheet-footer.svelte
@@ -0,0 +1,21 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/components/ui/sheet/sheet-header.svelte b/src/components/ui/sheet/sheet-header.svelte
new file mode 100644
index 0000000..570da79
--- /dev/null
+++ b/src/components/ui/sheet/sheet-header.svelte
@@ -0,0 +1,21 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/components/ui/sheet/sheet-overlay.svelte b/src/components/ui/sheet/sheet-overlay.svelte
new file mode 100644
index 0000000..45faf9d
--- /dev/null
+++ b/src/components/ui/sheet/sheet-overlay.svelte
@@ -0,0 +1,20 @@
+
+
+
diff --git a/src/components/ui/sheet/sheet-title.svelte b/src/components/ui/sheet/sheet-title.svelte
new file mode 100644
index 0000000..174722e
--- /dev/null
+++ b/src/components/ui/sheet/sheet-title.svelte
@@ -0,0 +1,17 @@
+
+
+
diff --git a/src/components/ui/sheet/sheet-trigger.svelte b/src/components/ui/sheet/sheet-trigger.svelte
new file mode 100644
index 0000000..417d73f
--- /dev/null
+++ b/src/components/ui/sheet/sheet-trigger.svelte
@@ -0,0 +1,8 @@
+
+
+
diff --git a/src/components/ui/sheet/sheet.variants.ts b/src/components/ui/sheet/sheet.variants.ts
new file mode 100644
index 0000000..a09f5d8
--- /dev/null
+++ b/src/components/ui/sheet/sheet.variants.ts
@@ -0,0 +1,22 @@
+import { tv, type VariantProps } from "tailwind-variants";
+
+const sheetVariants = tv({
+ base: "bg-white dark:bg-neutral-900 border-neutral-200 dark:border-neutral-800 data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
+ variants: {
+ side: {
+ top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
+ bottom:
+ "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
+ left: "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
+ right:
+ "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
+ },
+ },
+ defaultVariants: {
+ side: "left",
+ },
+});
+
+type Side = VariantProps["side"];
+
+export { sheetVariants, type Side };