| import type { ComponentProps } from 'react'; | |
| import { Handle, Position } from '@xyflow/react'; | |
| import { cn } from '@/lib/utils'; | |
| import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card'; | |
| export type NodeProps = ComponentProps<typeof Card> & { | |
| handles: { | |
| target: boolean; | |
| source: boolean; | |
| }; | |
| }; | |
| export const Node = ({ handles, className, ...props }: NodeProps) => ( | |
| <Card className={cn('node-container relative size-full h-auto w-sm gap-0 rounded-md p-0', className)} {...props}> | |
| {handles.target && <Handle position={Position.Left} type='target' />} | |
| {handles.source && <Handle position={Position.Right} type='source' />} | |
| {props.children} | |
| </Card> | |
| ); | |
| export type NodeHeaderProps = ComponentProps<typeof CardHeader>; | |
| export const NodeHeader = ({ className, ...props }: NodeHeaderProps) => ( | |
| <CardHeader className={cn('bg-secondary gap-0.5 rounded-t-md border-b p-3!', className)} {...props} /> | |
| ); | |
| export type NodeTitleProps = ComponentProps<typeof CardTitle>; | |
| export const NodeTitle = (props: NodeTitleProps) => <CardTitle {...props} />; | |
| export type NodeDescriptionProps = ComponentProps<typeof CardDescription>; | |
| export const NodeDescription = (props: NodeDescriptionProps) => <CardDescription {...props} />; | |
| export type NodeActionProps = ComponentProps<typeof CardAction>; | |
| export const NodeAction = (props: NodeActionProps) => <CardAction {...props} />; | |
| export type NodeContentProps = ComponentProps<typeof CardContent>; | |
| export const NodeContent = ({ className, ...props }: NodeContentProps) => <CardContent className={cn('p-3', className)} {...props} />; | |
| export type NodeFooterProps = ComponentProps<typeof CardFooter>; | |
| export const NodeFooter = ({ className, ...props }: NodeFooterProps) => ( | |
| <CardFooter className={cn('bg-secondary rounded-b-md border-t p-3!', className)} {...props} /> | |
| ); | |