A popup that appears when a link is hovered, showing a preview for sighted users.
Preview Card
Installation
npx shadcn@latest add @caprice/preview-cardpnpm dlx shadcn@latest add @caprice/preview-cardyarn dlx shadcn@latest add @caprice/preview-cardbunx shadcn@latest add @caprice/preview-cardnpm install @caprice-ui/reactpnpm add @caprice-ui/reactyarn add @caprice-ui/reactbun add @caprice-ui/reactInstall the following dependencies:
npm install @base-ui/react lucide-reactpnpm add @base-ui/react lucide-reactyarn add @base-ui/react lucide-reactbun add @base-ui/react lucide-reactAdd a cn helper
import { defineConfig, getSchema, type VariantProps } from 'cva';
import { twMerge } from 'tailwind-merge';
export const { cva, cx: cn } = defineConfig({
hooks: {
onComplete: (className: string) => twMerge(className),
},
});
export type { VariantProps };
export { getSchema };
Copy and paste the following code into your project.
import { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card';
import type * as React from 'react';
/**
* Groups all parts of the preview card.
* Doesn't render its own HTML element.
*
* Documentation: [Caprice UI Preview Card](https://caprice-ui.com/docs/components/preview-card)
*
* API Reference: [Base UI Preview Card](https://base-ui.com/react/components/preview-card#root)
*/
export namespace Root {
export type State = PreviewCardPrimitive.Root.State;
export type Actions = PreviewCardPrimitive.Root.Actions;
export type Props = React.ComponentProps<typeof PreviewCardPrimitive.Root>;
export type ChangeEventDetails = PreviewCardPrimitive.Root.ChangeEventDetails;
export type ChangeEventReason = PreviewCardPrimitive.Root.ChangeEventReason;
}
export function Root({ ...props }: Root.Props) {
return <PreviewCardPrimitive.Root data-slot="preview-card" {...props} />;
}
/**
* A link that opens the preview card.
* Renders an `<a>` element.
*
* Documentation: [Caprice UI Preview Card](https://caprice-ui.com/docs/components/preview-card)
*
* API Reference: [Base UI Preview Card](https://base-ui.com/react/components/preview-card#trigger)
*/
export namespace Trigger {
export type State = PreviewCardPrimitive.Trigger.State;
export type Props = React.ComponentProps<typeof PreviewCardPrimitive.Trigger>;
}
export function Trigger({ ...props }: Trigger.Props) {
return <PreviewCardPrimitive.Trigger data-slot="preview-card-trigger" {...props} />;
}
/**
* Positions the popup against the trigger.
* Renders a `<div>` element.
*
* Documentation: [Caprice UI Preview Card](https://caprice-ui.com/docs/components/preview-card)
*
* API Reference: [Base UI Preview Card](https://base-ui.com/react/components/preview-card#positioner)
*/
export namespace Content {
export type State = PreviewCardPrimitive.Positioner.State;
export type Props = React.ComponentProps<typeof PreviewCardPrimitive.Positioner>;
}
export function Content({ className, children, ...props }: Content.Props) {
return (
<PreviewCardPrimitive.Portal data-slot="preview-card-portal">
<PreviewCardPrimitive.Backdrop data-slot="preview-card-backdrop" />
<PreviewCardPrimitive.Positioner className={className} {...props}>
<PreviewCardPrimitive.Popup data-slot="preview-card-popup">
<PreviewCardPrimitive.Arrow data-slot="preview-card-arrow" />
{children}
</PreviewCardPrimitive.Popup>
</PreviewCardPrimitive.Positioner>
</PreviewCardPrimitive.Portal>
);
}
Update the import paths to match your project setup.
Usage
import * as PreviewCard from "@/components/caprice-ui/preview-card"import * as PreviewCard from "@caprice-ui/react/preview-card"Examples
API Reference
Last updated on