{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "primitives-base-preview-card",
  "title": "Base Preview Card",
  "description": "A popup that appears when a link is hovered, showing a preview for sighted users.",
  "dependencies": [
    "motion",
    "@base-ui-components/react"
  ],
  "registryDependencies": [
    "@odysseyui/lib-get-strict-context",
    "@odysseyui/hooks-use-controlled-state"
  ],
  "files": [
    {
      "path": "registry/primitives/base/preview-card/index.tsx",
      "content": "'use client';\n\nimport * as React from 'react';\nimport { PreviewCard as PreviewCardPrimitive } from '@base-ui-components/react/preview-card';\nimport { AnimatePresence, motion, type HTMLMotionProps } from 'motion/react';\n\nimport { getStrictContext } from '@/lib/get-strict-context';\nimport { useControlledState } from '@/hooks/use-controlled-state';\n\ntype PreviewCardContextType = {\n  isOpen: boolean;\n  setIsOpen: PreviewCardProps['onOpenChange'];\n};\n\nconst [PreviewCardProvider, usePreviewCard] =\n  getStrictContext<PreviewCardContextType>('PreviewCardContext');\n\ntype PreviewCardProps = React.ComponentProps<typeof PreviewCardPrimitive.Root>;\n\nfunction PreviewCard(props: PreviewCardProps) {\n  const [isOpen, setIsOpen] = useControlledState({\n    value: props?.open,\n    defaultValue: props?.defaultOpen,\n    onChange: props?.onOpenChange,\n  });\n\n  return (\n    <PreviewCardProvider value={{ isOpen, setIsOpen }}>\n      <PreviewCardPrimitive.Root\n        data-slot=\"preview-card\"\n        {...props}\n        onOpenChange={setIsOpen}\n      />\n    </PreviewCardProvider>\n  );\n}\n\ntype PreviewCardTriggerProps = React.ComponentProps<\n  typeof PreviewCardPrimitive.Trigger\n>;\n\nfunction PreviewCardTrigger(props: PreviewCardTriggerProps) {\n  return (\n    <PreviewCardPrimitive.Trigger data-slot=\"preview-card-trigger\" {...props} />\n  );\n}\n\ntype PreviewCardPortalProps = Omit<\n  React.ComponentProps<typeof PreviewCardPrimitive.Portal>,\n  'keepMounted'\n>;\n\nfunction PreviewCardPortal(props: PreviewCardPortalProps) {\n  const { isOpen } = usePreviewCard();\n\n  return (\n    <AnimatePresence>\n      {isOpen && (\n        <PreviewCardPrimitive.Portal\n          keepMounted\n          data-slot=\"preview-card-portal\"\n          {...props}\n        />\n      )}\n    </AnimatePresence>\n  );\n}\n\ntype PreviewCardPositionerProps = React.ComponentProps<\n  typeof PreviewCardPrimitive.Positioner\n>;\n\nfunction PreviewCardPositioner(props: PreviewCardPositionerProps) {\n  return (\n    <PreviewCardPrimitive.Positioner\n      data-slot=\"preview-card-positioner\"\n      {...props}\n    />\n  );\n}\n\ntype PreviewCardPopupProps = Omit<\n  React.ComponentProps<typeof PreviewCardPrimitive.Popup>,\n  'render'\n> &\n  HTMLMotionProps<'div'>;\n\nfunction PreviewCardPopup({\n  transition = { type: 'spring', stiffness: 300, damping: 25 },\n  ...props\n}: PreviewCardPopupProps) {\n  return (\n    <PreviewCardPrimitive.Popup\n      render={\n        <motion.div\n          key=\"preview-card-popup\"\n          data-slot=\"preview-card-popup\"\n          initial={{ opacity: 0, scale: 0.5 }}\n          animate={{ opacity: 1, scale: 1 }}\n          exit={{ opacity: 0, scale: 0.5 }}\n          transition={transition}\n          {...props}\n        />\n      }\n    />\n  );\n}\n\ntype PreviewCardBackdropProps = React.ComponentProps<\n  typeof PreviewCardPrimitive.Backdrop\n>;\n\nfunction PreviewCardBackdrop(props: PreviewCardBackdropProps) {\n  return (\n    <PreviewCardPrimitive.Backdrop\n      data-slot=\"preview-card-backdrop\"\n      {...props}\n    />\n  );\n}\n\ntype PreviewCardArrowProps = React.ComponentProps<\n  typeof PreviewCardPrimitive.Arrow\n>;\n\nfunction PreviewCardArrow(props: PreviewCardArrowProps) {\n  return (\n    <PreviewCardPrimitive.Arrow data-slot=\"preview-card-arrow\" {...props} />\n  );\n}\n\nexport {\n  PreviewCard,\n  PreviewCardTrigger,\n  PreviewCardPortal,\n  PreviewCardPositioner,\n  PreviewCardPopup,\n  PreviewCardBackdrop,\n  PreviewCardArrow,\n  usePreviewCard,\n  type PreviewCardProps,\n  type PreviewCardTriggerProps,\n  type PreviewCardPortalProps,\n  type PreviewCardPositionerProps,\n  type PreviewCardPopupProps,\n  type PreviewCardBackdropProps,\n  type PreviewCardArrowProps,\n  type PreviewCardContextType,\n};\n",
      "type": "registry:ui",
      "target": "components/odysseyui/primitives/base/preview-card.tsx"
    }
  ],
  "type": "registry:ui"
}