Skip to content

Commit 669c43a

Browse files
feat: add popover component (#99)
1 parent 08a7e84 commit 669c43a

File tree

7 files changed

+162
-0
lines changed

7 files changed

+162
-0
lines changed

.changeset/curly-yaks-return.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@zenml-io/react-component-library": minor
3+
---
4+
5+
add popover component

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@radix-ui/react-dialog": "^1.0.5",
6161
"@radix-ui/react-dropdown-menu": "^2.0.6",
6262
"@radix-ui/react-hover-card": "^1.1.1",
63+
"@radix-ui/react-popover": "^1.1.6",
6364
"@radix-ui/react-progress": "^1.0.3",
6465
"@radix-ui/react-radio-group": "^1.2.0",
6566
"@radix-ui/react-scroll-area": "^1.1.0",

pnpm-lock.yaml

+92
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Meta } from "@storybook/react";
2+
import React from "react";
3+
import { Popover, PopoverContent, PopoverTrigger } from "./index";
4+
import { Button } from "../Button";
5+
import { StoryObj } from "@storybook/react";
6+
7+
const meta = {
8+
title: "Elements/Popover",
9+
component: Popover,
10+
argTypes: {},
11+
parameters: {
12+
layout: "centered"
13+
},
14+
15+
tags: ["autodocs"]
16+
} satisfies Meta<typeof Popover>;
17+
18+
export default meta;
19+
20+
type Story = StoryObj<typeof meta>;
21+
22+
export const DefaultVariant: Story = {
23+
name: "Default",
24+
render: () => (
25+
<Popover>
26+
<PopoverTrigger asChild>
27+
<Button>Open Popover</Button>
28+
</PopoverTrigger>
29+
<PopoverContent className="w-[250px]">
30+
<div>Popover Content</div>
31+
</PopoverContent>
32+
</Popover>
33+
)
34+
};

src/components/Popover/Popover.tsx

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import * as PopoverPrimitive from "@radix-ui/react-popover";
2+
import * as React from "react";
3+
import { cn } from "../../utilities";
4+
5+
const Popover = PopoverPrimitive.Root;
6+
7+
const PopoverTrigger = PopoverPrimitive.Trigger;
8+
9+
const PopoverContent = React.forwardRef<
10+
React.ElementRef<typeof PopoverPrimitive.Content>,
11+
React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
12+
>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
13+
<PopoverPrimitive.Portal>
14+
<PopoverPrimitive.Content
15+
ref={ref}
16+
align={align}
17+
sideOffset={sideOffset}
18+
className={cn(
19+
"z-50 rounded-md border border-theme-border-minimal bg-theme-surface-primary p-2 shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
20+
className
21+
)}
22+
{...props}
23+
/>
24+
</PopoverPrimitive.Portal>
25+
));
26+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
27+
28+
export { Popover, PopoverContent, PopoverTrigger };

src/components/Popover/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./Popover";

src/components/client.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ export * from "./ScrollArea";
1818
export * from "./HoverCard";
1919
export * from "./RadioGroup";
2020
export * from "./Command";
21+
export * from "./Popover";

0 commit comments

Comments
 (0)