From e65f0a23263b213c4aa64617cdfaef4deadfd650 Mon Sep 17 00:00:00 2001
From: malcodeman <26983729+malcodeman@users.noreply.github.com>
Date: Wed, 4 Feb 2026 23:23:20 +0100
Subject: [PATCH] feat: adds dialog size prop
---
src/hygge-ui/dialog.tsx | 51 ++++++++++++++++---
src/routes/docs.components.dialog.tsx | 73 ++++++++++++++++-----------
2 files changed, 87 insertions(+), 37 deletions(-)
diff --git a/src/hygge-ui/dialog.tsx b/src/hygge-ui/dialog.tsx
index 3987770..20195d5 100644
--- a/src/hygge-ui/dialog.tsx
+++ b/src/hygge-ui/dialog.tsx
@@ -1,10 +1,47 @@
import { Dialog as ArkDialog, Portal } from "@ark-ui/react";
+import { createContext, useContext } from "react";
+import { cva, type VariantProps } from "class-variance-authority";
import { LuX } from "react-icons/lu";
import { cn } from "./cn";
import { Button } from "./button";
-export function DialogRoot(props: ArkDialog.RootProps) {
- return ;
+const dialogContentVariants = cva(
+ "bg-bg-default relative w-full rounded-lg shadow-[0_0_0_1px_#E9E8E6] dark:shadow-[0_0_0_1px_#2a2a28]",
+ {
+ variants: {
+ size: {
+ xs: "max-w-sm",
+ sm: "max-w-md",
+ md: "max-w-md",
+ lg: "max-w-lg",
+ xl: "max-w-xl",
+ cover: "max-h-[calc(100dvh-2rem)] max-w-[calc(100vw-2rem)]",
+ full: "h-dvh w-screen max-w-screen rounded-none!",
+ },
+ },
+ defaultVariants: {
+ size: "md",
+ },
+ },
+);
+
+const DialogContext = createContext>(
+ {
+ size: "md",
+ },
+);
+
+type DialogRootProps = VariantProps &
+ ArkDialog.RootProps;
+
+export function DialogRoot(props: DialogRootProps) {
+ const { size, ...rest } = props;
+
+ return (
+
+
+
+ );
}
export function DialogTrigger(props: ArkDialog.TriggerProps) {
@@ -17,6 +54,7 @@ type DialogContentProps = {
export function DialogContent(props: DialogContentProps) {
const { showCloseTrigger = false, className, children, ...rest } = props;
+ const { size } = useContext(DialogContext);
return (
@@ -32,10 +70,7 @@ export function DialogContent(props: DialogContentProps) {
>
{children}
{showCloseTrigger ? (
@@ -43,7 +78,7 @@ export function DialogContent(props: DialogContentProps) {
asChild
className="absolute top-1 right-1 cursor-pointer"
>
-