+ );
+};
+
+export default ConfirmationCard;
diff --git a/src/components/common/notification-menu.tsx b/src/components/common/notification-menu.tsx
new file mode 100644
index 0000000..7612db8
--- /dev/null
+++ b/src/components/common/notification-menu.tsx
@@ -0,0 +1,111 @@
+import { useState } from 'react';
+import { useLayer } from 'react-laag';
+import { motion, AnimatePresence } from 'framer-motion';
+import { Bell } from '@/components/icons/bell';
+import { Dot } from '@/components/icons/dot';
+import NotificationCard from '@/components/ui/notification-card';
+import { useTranslation } from 'react-i18next';
+
+type ItemType = {
+ source?: string;
+ text?: string | React.ReactNode;
+ time?: string;
+};
+
+interface MenuType {
+ data: object[];
+}
+
+const NotificationMenu: React.FC = ({ data }) => {
+ const { t } = useTranslation();
+ const [isOpen, setOpen] = useState(false);
+
+ // helper function to close the menu
+ function close() {
+ setOpen(false);
+ }
+
+ const { renderLayer, triggerProps, layerProps } = useLayer({
+ isOpen,
+ onOutsideClick: close, // close the menu when the user clicks outside
+ onDisappear: close, // close the menu when the menu gets scrolled out of sight
+ overflowContainer: false, // keep the menu positioned inside the container
+ // auto: true, // automatically find the best placement
+ placement: 'bottom-end', // we prefer to place the menu "top-end"
+ triggerOffset: 12, // keep some distance to the trigger
+ // containerOffset: 16, // give the menu some room to breath relative to the container
+ // arrowOffset: 16, // let the arrow have some room to breath also
+ });
+
+ // Again, we're using framer-motion for the transition effect
+ return (
+ <>
+
+
+ {renderLayer(
+
+ {isOpen && (
+
+