'use client'; import * as PopoverPrimitive from '@radix-ui/react-popover'; import { cva } from 'class-variance-authority'; import * as React from 'react'; import { cn, defineStyleAnatomy } from '../core/styling'; /* ------------------------------------------------------------------------------------------------- * Anatomy * -----------------------------------------------------------------------------------------------*/ export const PopoverAnatomy = defineStyleAnatomy({ root: cva([ 'UI-Popover__root', 'z-50 w-72 rounded-[--radius] border bg-[--background] p-4 text-base shadow-sm outline-none', 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0', 'data-[state=open]:fade-in-50 data-[state=closed]:zoom-out-100 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', ]), }); /* ------------------------------------------------------------------------------------------------- * Popover * -----------------------------------------------------------------------------------------------*/ export type PopoverProps = React.ComponentPropsWithoutRef< typeof PopoverPrimitive.Root > & Omit< React.ComponentPropsWithoutRef, 'asChild' > & { /** * The trigger element that opens the popover */ trigger: React.ReactElement; /** * Additional props for the trigger element */ triggerProps?: React.ComponentPropsWithoutRef< typeof PopoverPrimitive.Trigger >; }; export const Popover = React.forwardRef( (props, ref) => { const { trigger, triggerProps, // Root defaultOpen, open, onOpenChange, modal = true, // Content className, align = 'center', sideOffset = 8, ...contentProps } = props; return ( {trigger} e.preventDefault()} {...contentProps} /> ); } ); Popover.displayName = 'Popover';