diff --git a/src/components/ContextMenu/index.tsx b/src/components/ContextMenu/index.tsx
index d1b7093..02b75f0 100644
--- a/src/components/ContextMenu/index.tsx
+++ b/src/components/ContextMenu/index.tsx
@@ -1,7 +1,71 @@
+import { useEffect, useRef, useState } from 'react';
import { Wrapper } from './styles';
+import { Text } from '..';
-const ContextMenu = () => {
- return ;
+type ContextMenuProps = {
+ className?: string;
+ items: Array<{ label: string; action: () => void }>;
+ component: string;
+};
+
+const ContextMenu = ({ items, component, className }: ContextMenuProps) => {
+ const [open, setOpen] = useState(false);
+ const ref = useRef(null);
+
+ useEffect(() => {
+ const openMenu = () => setOpen(true);
+ const handleClickOutside = (event: MouseEvent) => {
+ if (ref.current && !ref.current.contains(event.target as Node)) {
+ setOpen(false);
+ }
+ };
+
+ document.addEventListener('mousedown', handleClickOutside);
+ (document.querySelector(`#${component}`) as HTMLElement)?.addEventListener(
+ 'mouseenter',
+ openMenu
+ );
+
+ return () => {
+ document.removeEventListener('mousedown', handleClickOutside);
+ (document.querySelector(
+ `#${component}`
+ ) as HTMLElement)?.removeEventListener('mouseenter', openMenu);
+ };
+
+ // eslint-disable-next-line
+ }, [ref]);
+
+ return (
+
+ {open && (
+
+ {items.map(({ label, action }) => (
+ // eslint-disable-next-line
+ - {
+ setOpen(false);
+ action();
+ }}
+ key={label}
+ >
+ {label}
+
+ ))}
+
+ )}
+
+ );
};
export default ContextMenu;
diff --git a/src/components/ContextMenu/styles.ts b/src/components/ContextMenu/styles.ts
index 81d027f..429052d 100644
--- a/src/components/ContextMenu/styles.ts
+++ b/src/components/ContextMenu/styles.ts
@@ -1,3 +1,25 @@
-import styled, { css } from 'styled-components';
+import styled from 'styled-components';
-export const Wrapper = styled.div``;
+type WrapperProps = {
+ top: number;
+ left: number;
+};
+
+export const Wrapper = styled.div`
+ ul {
+ position: fixed;
+ top: ${({ top }) => top}px;
+ left: ${({ left }) => left}px;
+ background: #1f1b1b;
+ display: grid;
+ grid-template-columns: auto;
+ row-gap: 0.5rem;
+ color: ${({ theme }) => theme.colors.white.main};
+ border-radius: 3px;
+ padding: 5px 20px 5px 10px;
+
+ li {
+ cursor: pointer;
+ }
+ }
+`;