{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "hover-card", "type": "registry:ui", "title": "Hover Card", "description": "Hover Card from @pitsi-ui/native for native projects.", "dependencies": [ "tailwind-variants@^3.2.2" ], "registryDependencies": [], "files": [ { "path": "registry/native-ui/src/components/hover-card/hover-card.tsx", "content": "import { createContext, forwardRef, type ReactNode, useContext, useMemo, useState } from \"react\";\nimport { Pressable, type PressableProps, View, type ViewProps } from \"react-native\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nexport const hoverCardVariants = tv({\n slots: {\n content: \"min-w-56 gap-2 rounded-2xl border border-border bg-background p-4 shadow-sm\",\n root: \"relative gap-2\",\n trigger: \"self-start\",\n },\n});\n\nexport type HoverCardVariants = VariantProps;\n\ntype HoverCardContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n slots: ReturnType;\n};\n\nconst HoverCardContext = createContext(undefined);\n\nfunction useHoverCardContext() {\n const context = useContext(HoverCardContext);\n\n if (!context) {\n throw new Error(\"HoverCard compound components must be rendered inside HoverCard.Root.\");\n }\n\n return context;\n}\n\nexport interface HoverCardRootProps extends Omit {\n children?: ReactNode;\n className?: string;\n closeDelay?: number;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n openDelay?: number;\n}\n\nconst HoverCardRoot = forwardRef(\n (\n {\n children,\n className,\n closeDelay: _closeDelay,\n defaultOpen = false,\n onOpenChange,\n open,\n openDelay: _openDelay,\n ...props\n },\n ref,\n ) => {\n const slots = useMemo(() => hoverCardVariants(), []);\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const currentOpen = open ?? internalOpen;\n\n const setOpen = (nextOpen: boolean) => {\n if (open === undefined) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n };\n\n return (\n \n \n {children}\n \n \n );\n },\n);\n\nHoverCardRoot.displayName = \"PitsiUINative.HoverCardRoot\";\n\nexport interface HoverCardTriggerProps extends Omit {\n children?: ReactNode;\n className?: string;\n}\n\nconst HoverCardTrigger = forwardRef(\n ({ children, className, onBlur, onFocus, onPress, ...props }, ref) => {\n const { open, setOpen, slots } = useHoverCardContext();\n\n return (\n {\n onBlur?.(event);\n setOpen(false);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n setOpen(true);\n }}\n onPress={(event) => {\n onPress?.(event);\n setOpen(!open);\n }}\n {...props}\n >\n {children}\n \n );\n },\n);\n\nHoverCardTrigger.displayName = \"PitsiUINative.HoverCardTrigger\";\n\nexport interface HoverCardContentProps extends ViewProps {\n children?: ReactNode;\n className?: string;\n offset?: number;\n placement?: \"bottom\" | \"left\" | \"right\" | \"top\";\n}\n\nconst HoverCardContent = forwardRef(\n ({ children, className, offset: _offset, placement: _placement, ...props }, ref) => {\n const { open, slots } = useHoverCardContext();\n\n if (!open) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n },\n);\n\nHoverCardContent.displayName = \"PitsiUINative.HoverCardContent\";\n\nexport { HoverCardContent, HoverCardRoot, HoverCardTrigger };\n", "type": "registry:ui", "target": "@components/pitsi-ui/native-ui/src/components/hover-card/hover-card.tsx" }, { "path": "registry/native-ui/src/components/hover-card/index.ts", "content": "import type { ComponentProps } from \"react\";\n\nimport { HoverCardContent, HoverCardRoot, HoverCardTrigger } from \"./hover-card\";\n\nexport const HoverCard = Object.assign(HoverCardRoot, {\n Content: HoverCardContent,\n Root: HoverCardRoot,\n Trigger: HoverCardTrigger,\n});\n\nexport type HoverCard = {\n ContentProps: ComponentProps;\n Props: ComponentProps;\n RootProps: ComponentProps;\n TriggerProps: ComponentProps;\n};\n\nexport type {\n HoverCardContentProps,\n HoverCardRootProps,\n HoverCardRootProps as HoverCardProps,\n HoverCardTriggerProps,\n HoverCardVariants,\n} from \"./hover-card\";\n\nexport { HoverCardContent, HoverCardRoot, HoverCardTrigger, hoverCardVariants } from \"./hover-card\";\n", "type": "registry:ui", "target": "@components/pitsi-ui/native-ui/src/components/hover-card/index.ts" } ], "categories": [ "native", "react-native", "ui" ], "meta": { "package": "@pitsi-ui/native", "packageSlug": "native-ui", "platform": "native" } }