diff --git a/package.json b/package.json index 48dbaac..43b9c74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kleros/ui-components-library", - "version": "3.0.1", + "version": "3.1.2", "description": "UI components library which implements the Kleros design system.", "source": "./src/lib/index.ts", "main": "./dist/esm/ui-components-library.js", diff --git a/src/lib/container/modal.tsx b/src/lib/container/modal.tsx index 7de2d21..45e9a02 100644 --- a/src/lib/container/modal.tsx +++ b/src/lib/container/modal.tsx @@ -2,23 +2,50 @@ import React from "react"; import { cn } from "../../utils"; import { Modal as AriaModal, + Dialog, + ModalOverlay, + type DialogProps, type ModalOverlayProps, } from "react-aria-components"; +interface ModalProps + extends Omit, + React.RefAttributes { + /** classname that applies to the modal overlay. */ + modalOverlayClassname?: ModalOverlayProps["className"]; + children?: DialogProps["children"]; +} + +/** A modal is an overlay element which blocks interaction with elements outside it. */ function Modal({ className, + modalOverlayClassname, + children, ...props -}: ModalOverlayProps & React.RefAttributes) { +}: Readonly) { return ( - - {props.children} - + + + {children} + + + ); } export default Modal; diff --git a/src/lib/index.ts b/src/lib/index.ts index d0f51ac..d5533d7 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -6,6 +6,7 @@ export { default as Button } from "./button"; export { default as Card } from "./container/card"; export { default as Box } from "./container/box"; +export { default as Modal } from "./container/modal"; export { default as DisplayLarge } from "./display/large"; export { default as DisplayIcon } from "./display/icon"; diff --git a/src/stories/modal.stories.tsx b/src/stories/modal.stories.tsx index 3276502..e8e733e 100644 --- a/src/stories/modal.stories.tsx +++ b/src/stories/modal.stories.tsx @@ -1,13 +1,22 @@ import type { Meta, StoryObj } from "@storybook/react"; - +import React, { useState } from "react"; import { IPreviewArgs } from "./utils"; -import ModalComponent from "../lib/container/box"; +import ModalComponent from "../lib/container/modal"; +import { Button } from "../lib"; const meta = { component: ModalComponent, title: "Containers/Modal", tags: ["autodocs"], + argTypes: { + isOpen: { + control: "boolean", + }, + isDismissable: { + control: "boolean", + }, + }, } satisfies Meta; export default meta; @@ -19,5 +28,21 @@ export const Modal: Story = { themeUI: "dark", backgroundUI: "light", className: "w-[500px]", + isDismissable: true, + }, + render: function Render(args) { + const [isOpen, setOpen] = useState(false); + return ( +
+
+ ); }, }; diff --git a/src/styles/theme.css b/src/styles/theme.css index edab58a..e155a06 100644 --- a/src/styles/theme.css +++ b/src/styles/theme.css @@ -34,7 +34,7 @@ --klerosUIComponentsBaseRadius: 3px; } - :root[class="dark"] { + :root.dark { --klerosUIComponentsName: dark; --klerosUIComponentsPrimaryPurple: #7e1bd4; --klerosUIComponentsSecondaryPurple: #b45fff;