hover-card.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. 'use client';
  2. import * as React from 'react';
  3. import { HoverCard as HoverCardPrimitive } from 'radix-ui';
  4. import { cn } from '@/lib/utils';
  5. function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
  6. return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />;
  7. }
  8. function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
  9. return <HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />;
  10. }
  11. function HoverCardContent({
  12. className,
  13. align = 'center',
  14. sideOffset = 4,
  15. ...props
  16. }: React.ComponentProps<typeof HoverCardPrimitive.Content>) {
  17. return (
  18. <HoverCardPrimitive.Portal data-slot="hover-card-portal">
  19. <HoverCardPrimitive.Content
  20. data-slot="hover-card-content"
  21. align={align}
  22. sideOffset={sideOffset}
  23. className={cn(
  24. 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-4 text-sm shadow-md ring-1 duration-100 z-50 origin-(--radix-hover-card-content-transform-origin) outline-hidden',
  25. className,
  26. )}
  27. {...props}
  28. />
  29. </HoverCardPrimitive.Portal>
  30. );
  31. }
  32. export { HoverCard, HoverCardTrigger, HoverCardContent };