diff --git a/packages/ui/src/Molecules/Dialog/Dialog.stories.tsx b/packages/ui/src/Molecules/Dialog/Dialog.stories.tsx
new file mode 100644
index 000000000..1e442949c
--- /dev/null
+++ b/packages/ui/src/Molecules/Dialog/Dialog.stories.tsx
@@ -0,0 +1,37 @@
+import { Button } from "../../Atoms/Button/Button";
+import { Dialog, DialogContent, DialogFooter } from "./Dialog";
+import type { Meta, StoryObj } from "@storybook/react";
+
+export default {
+ title: "Atoms/Dialog",
+ component: Dialog,
+ argTypes: {},
+} satisfies Meta
;
+
+type Story = StoryObj;
+
+export const Default: Story = {
+ render: (args) => {
+ return (
+
+ );
+ },
+};
diff --git a/packages/ui/src/Molecules/Dialog/Dialog.tsx b/packages/ui/src/Molecules/Dialog/Dialog.tsx
new file mode 100644
index 000000000..908605996
--- /dev/null
+++ b/packages/ui/src/Molecules/Dialog/Dialog.tsx
@@ -0,0 +1,72 @@
+import {
+ Root,
+ Trigger,
+ Portal,
+ Overlay,
+ Content,
+ Title,
+ Close,
+} from "@radix-ui/react-dialog";
+import { IconCrossLargeX } from "../../Atoms/Icons";
+import type { ReactNode } from "react";
+import { Button } from "../../Atoms/Button/Button";
+import { useTranslate } from "@probo/i18n";
+
+type Props = {
+ onClose: () => void;
+ trigger: ReactNode;
+ title: ReactNode;
+ children?: ReactNode;
+};
+
+export function Dialog({ onClose, trigger, title, children }: Props) {
+ return (
+
+ {trigger}
+
+
+
+
+
+
+ {title}
+
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
+
+export function DialogFooter({ children }: { children?: ReactNode }) {
+ const { __ } = useTranslate();
+ return (
+
+ );
+}
+
+export function DialogContent({ children }: { children: ReactNode }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts
index ecf9336e6..ec2f3e122 100644
--- a/packages/ui/src/index.ts
+++ b/packages/ui/src/index.ts
@@ -2,12 +2,18 @@
export { Layout } from "./Layouts/Layout";
export { AuthLayout } from "./Layouts/AuthLayout";
export { ErrorLayout } from "./Layouts/ErrorLayout";
+export {
+ CenteredLayout,
+ CenteredLayoutSkeleton,
+} from "./Layouts/CenteredLayout";
// Atoms
export * from "./Atoms/Icons";
export { Logo } from "./Atoms/Logo/Logo";
export { SidebarItem } from "./Atoms/Sidebar/SidebarItem";
export { Button } from "./Atoms/Button/Button";
+export { Card } from "./Atoms/Card/Card";
+export { Breadcrumb } from "./Atoms/Breadcrumb/Breadcrumb";
export {
Dropdown,
DropdownSeparator,
@@ -22,6 +28,8 @@ export {
UserDropdownItem,
} from "./Molecules/UserDropdown/UserDropdown";
export { PageHeader } from "./Molecules/PageHeader/PageHeader";
+export { Skeleton } from "./Atoms/Skeleton/Skeleton";
+export { Dialog, DialogContent, DialogFooter } from "./Molecules/Dialog/Dialog";
// Hooks
-export { useToast } from "./Atoms/Toasts/Toasts";
+export { useToast, Toasts } from "./Atoms/Toasts/Toasts";
diff --git a/packages/ui/src/theme.css b/packages/ui/src/theme.css
index ed52f748b..7a88ab6d2 100644
--- a/packages/ui/src/theme.css
+++ b/packages/ui/src/theme.css
@@ -10,6 +10,7 @@
/* Text colors */
--color-txt-primary: #141e12;
--color-invert: #fcfdfc;
+ --color-txt-invert: var(--color-invert);
--color-txt-secondary: #6b716a;
--color-txt-tertiary: #818780;
--color-txt-quaternary: #d8dcd8;
@@ -162,5 +163,3 @@
0px 2px 4px 0px rgba(0, 0, 0, 0.08),
0px 2px 12px 0px rgba(0, 0, 0, 0.06);
}
-
-@import "tw-animate-css";
diff --git a/relay.config.json b/relay.config.json
new file mode 100644
index 000000000..dced57dd9
--- /dev/null
+++ b/relay.config.json
@@ -0,0 +1,6 @@
+{
+ "src": "./apps/console2/src",
+ "schema": "./pkg/server/api/console/v1/schema.graphql",
+ "language": "typescript",
+ "eagerEsModules": true
+}