85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
'use client';
|
|
|
|
import type * as React from 'react';
|
|
import { Popover as PopoverPrimitive } from 'radix-ui';
|
|
|
|
import { cn } from '@gib/ui';
|
|
|
|
const Popover = ({
|
|
...props
|
|
}: React.ComponentProps<typeof PopoverPrimitive.Root>) => (
|
|
<PopoverPrimitive.Root data-slot='popover' {...props} />
|
|
);
|
|
|
|
const PopoverTrigger = ({
|
|
...props
|
|
}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) => (
|
|
<PopoverPrimitive.Trigger data-slot='popover-trigger' {...props} />
|
|
);
|
|
|
|
const PopoverContent = ({
|
|
className,
|
|
align = 'center',
|
|
sideOffset = 4,
|
|
...props
|
|
}: React.ComponentProps<typeof PopoverPrimitive.Content>) => (
|
|
<PopoverPrimitive.Portal>
|
|
<PopoverPrimitive.Content
|
|
data-slot='popover-content'
|
|
align={align}
|
|
sideOffset={sideOffset}
|
|
className={cn(
|
|
'bg-popover text-popover-foreground 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 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',
|
|
className,
|
|
)}
|
|
{...props}
|
|
/>
|
|
</PopoverPrimitive.Portal>
|
|
);
|
|
|
|
const PopoverAnchor = ({
|
|
...props
|
|
}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) => (
|
|
<PopoverPrimitive.Anchor data-slot='popover-anchor' {...props} />
|
|
);
|
|
|
|
const PopoverHeader = ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<'div'>) => (
|
|
<div
|
|
data-slot='popover-header'
|
|
className={cn('flex flex-col gap-1 text-sm', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
|
|
const PopoverTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => (
|
|
<div
|
|
data-slot='popover-title'
|
|
className={cn('font-medium', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
|
|
const PopoverDescription = ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<'p'>) => (
|
|
<p
|
|
data-slot='popover-description'
|
|
className={cn('text-muted-foreground', className)}
|
|
{...props}
|
|
/>
|
|
);
|
|
|
|
export {
|
|
Popover,
|
|
PopoverTrigger,
|
|
PopoverContent,
|
|
PopoverAnchor,
|
|
PopoverHeader,
|
|
PopoverTitle,
|
|
PopoverDescription,
|
|
};
|