Skip to content

Commit d46fc3d

Browse files
committed
core menu component ✅
1 parent 60378be commit d46fc3d

File tree

8 files changed

+257
-2
lines changed

8 files changed

+257
-2
lines changed

app/(sink)/demo/components/page.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
Avatar,
77
Badge,
88
Button,
9+
Menu,
910
Tabs,
1011
TabsContent,
1112
TabsPanels,
@@ -99,6 +100,26 @@ export default function page() {
99100
</div>
100101
</Alert>
101102
</div>
103+
104+
<div>
105+
<Menu>
106+
<Menu.Trigger asChild>
107+
<Button>Menu</Button>
108+
</Menu.Trigger>
109+
{/* <Menu.Trigger asChild>
110+
<button className="IconButton" aria-label="Customise options">
111+
Click Me
112+
</button>
113+
</Menu.Trigger> */}
114+
<Menu.Content className="min-w-36">
115+
<Menu.Item>Menu Item 1</Menu.Item>
116+
<Menu.Item>Menu Item 2</Menu.Item>
117+
<Menu.Item>Menu Item 3</Menu.Item>
118+
</Menu.Content>
119+
</Menu>
120+
</div>
121+
122+
<div className="h-36"></div>
102123
</div>
103124
);
104125
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"@radix-ui/react-accordion": "^1.2.1",
1414
"@radix-ui/react-avatar": "^1.1.1",
1515
"@radix-ui/react-dialog": "^1.1.2",
16+
"@radix-ui/react-dropdown-menu": "^2.1.2",
1617
"@radix-ui/react-visually-hidden": "^1.1.0",
1718
"class-variance-authority": "^0.7.0",
1819
"clsx": "^2.1.1",

packages/ui/Buttons/Button.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { cn } from "@/lib/utils";
22
import { cva, VariantProps } from "class-variance-authority";
33
import React, { ButtonHTMLAttributes } from "react";
44

5-
const buttonVariants = cva("font-head transition-all", {
5+
const buttonVariants = cva("font-head transition-all outline-none", {
66
variants: {
77
variant: {
88
default:
@@ -39,6 +39,7 @@ export const Button = React.forwardRef<HTMLButtonElement, IButtonProps>(
3939
forwardedRef
4040
) => (
4141
<button
42+
ref={forwardedRef}
4243
className={cn(buttonVariants({ variant, size }), className)}
4344
{...props}
4445
>

packages/ui/Cards/Card.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { cn } from "@/lib/utils";
22
import { HTMLAttributes } from "react";
33
import { Text } from "../Text";
4-
import { Content } from "next/font/google";
54

65
interface ICardProps extends HTMLAttributes<HTMLDivElement> {
76
className?: string;

packages/ui/Menu/Menu.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use client";
2+
3+
import { cn } from "@/lib/utils";
4+
import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
5+
import React, { HTMLAttributes } from "react";
6+
7+
const Menu = DropdownMenu.Root;
8+
const Trigger = DropdownMenu.Trigger;
9+
10+
interface IMenuContent extends HTMLAttributes<HTMLDivElement> {
11+
children: React.ReactNode;
12+
}
13+
14+
const Content = ({ className, ...props }: IMenuContent) => (
15+
<DropdownMenu.Portal>
16+
<DropdownMenu.Content
17+
side="bottom"
18+
align="start"
19+
className={cn(
20+
"bg-white border-2 border-black shadow-md absolute top-2 min-w-20",
21+
className
22+
)}
23+
{...props}
24+
/>
25+
</DropdownMenu.Portal>
26+
);
27+
28+
const MenuItem = (props: any) => (
29+
<DropdownMenu.Item
30+
className="p-2 hover:bg-primary-300 outline-none cursor-pointer "
31+
{...props}
32+
/>
33+
);
34+
35+
const MenuComponent = Object.assign(Menu, {
36+
Trigger,
37+
Content,
38+
Item: MenuItem,
39+
});
40+
41+
export { MenuComponent as Menu };

packages/ui/Menu/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./Menu";

packages/ui/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export * from "./Avatars";
88
export * from "./Badges";
99
export * from "./Tabs";
1010
export * from "./Dialog";
11+
export * from "./Menu";

pnpm-lock.yaml

Lines changed: 190 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)