Skip to content
36 linesCodeBlameRaw
1import { Popover as Primitive } from "radix-ui";
2import type { ComponentProps } from "react";
3
4import { cn } from "../../lib/cn";
5
6// shadcn/ui's popover, styled with g1t's tokens.
7
8export const Popover = Primitive.Root;
9export const PopoverTrigger = Primitive.Trigger;
10export const PopoverAnchor = Primitive.Anchor;
11export const PopoverClose = Primitive.Close;
12
13export function PopoverContent({
14 className,
15 align = "center",
16 sideOffset = 6,
17 collisionPadding = 8,
18 ...props
19}: ComponentProps<typeof Primitive.Content>) {
20 return (
21 <Primitive.Portal>
22 <Primitive.Content
23 align={align}
24 sideOffset={sideOffset}
25 // Kept inside a phone's edges.
26 collisionPadding={collisionPadding}
27 className={cn(
28 "z-50 w-72 max-w-[calc(100vw-2rem)] rounded-lg border border-line-strong bg-raised p-4 text-sm text-fg shadow-xl shadow-black/40 outline-none",
29 "origin-(--radix-popover-content-transform-origin) data-[state=open]:animate-pop-in data-[state=closed]:animate-pop-out motion-reduce:animate-none",
30 className,
31 )}
32 {...props}
33 />
34 </Primitive.Portal>
35 );
36}