{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "activity-feed",
  "title": "Activity Feed",
  "description": "Primitives for composing activity and timeline feeds.",
  "dependencies": ["class-variance-authority"],
  "files": [
    {
      "path": "registry/components/dashboardblocks/activity-feed.tsx",
      "content": "import { type VariantProps, cva } from 'class-variance-authority'\nimport { type ReactNode } from 'react'\n\nimport { cn } from '@/lib/utils'\n\nconst itemVariants = cva('flex items-start gap-4', {\n  variants: {\n    align: {\n      center: 'items-center',\n      start: 'items-start',\n    },\n    size: {\n      default: 'gap-4',\n      sm: 'gap-3',\n    },\n  },\n  defaultVariants: {\n    align: 'start',\n    size: 'default',\n  },\n})\n\nconst contentVariants = cva('flex-1 text-sm', {\n  variants: {\n    layout: {\n      inline: 'space-y-0',\n      stacked: 'space-y-1',\n    },\n  },\n  defaultVariants: {\n    layout: 'stacked',\n  },\n})\n\nconst indicatorVariants = cva('inline-flex items-center justify-center rounded-full', {\n  variants: {\n    status: {\n      error: '',\n      info: '',\n      progress: '',\n      success: '',\n    },\n    variant: {\n      dot: 'size-2',\n      ring: 'size-5 p-1.5',\n    },\n  },\n  compoundVariants: [\n    {\n      status: 'success',\n      variant: 'dot',\n      class: 'bg-green-600',\n    },\n    {\n      status: 'progress',\n      variant: 'dot',\n      class: 'bg-blue-600',\n    },\n    {\n      status: 'error',\n      variant: 'dot',\n      class: 'bg-red-600',\n    },\n    {\n      status: 'info',\n      variant: 'dot',\n      class: 'bg-purple-600',\n    },\n    {\n      status: 'success',\n      variant: 'ring',\n      class: 'bg-green-200 text-green-600',\n    },\n    {\n      status: 'progress',\n      variant: 'ring',\n      class: 'bg-blue-200 text-blue-600',\n    },\n    {\n      status: 'error',\n      variant: 'ring',\n      class: 'bg-red-200 text-red-600',\n    },\n    {\n      status: 'info',\n      variant: 'ring',\n      class: 'bg-purple-200 text-purple-600',\n    },\n  ],\n  defaultVariants: {\n    status: 'info',\n    variant: 'dot',\n  },\n})\n\nconst timelinePositions = {\n  center: 'left-20.5',\n  start: 'left-5',\n} as const\n\ntype ActivityFeedItemProps = {\n  align?: VariantProps<typeof itemVariants>['align']\n  children: ReactNode\n  className?: string\n  size?: VariantProps<typeof itemVariants>['size']\n}\n\ntype ActivityFeedContentProps = {\n  children: ReactNode\n  className?: string\n  layout?: VariantProps<typeof contentVariants>['layout']\n}\n\ninterface ActivityFeedIndicatorProps extends VariantProps<typeof indicatorVariants> {\n  className?: string\n}\n\ntype ActivityFeedTimelineProps = {\n  children: ReactNode\n  className?: string\n  lineClassName?: string\n  linePosition?: keyof typeof timelinePositions\n}\n\nfunction ActivityFeedItem({\n  align = 'start',\n  children,\n  className = '',\n  size = 'default',\n}: ActivityFeedItemProps) {\n  return (\n    <div className={cn('relative', itemVariants({ align, size }), className)}>\n      {children}\n    </div>\n  )\n}\n\nfunction ActivityFeedContent({\n  children,\n  className = '',\n  layout = 'stacked',\n}: ActivityFeedContentProps) {\n  return <div className={cn(contentVariants({ layout }), className)}>{children}</div>\n}\n\nfunction ActivityFeedIndicator({\n  className = '',\n  status = 'info',\n  variant = 'dot',\n}: ActivityFeedIndicatorProps) {\n  if (variant === 'ring') {\n    return (\n      <span className={cn(indicatorVariants({ status, variant }), className)}>\n        <span className='size-2 rounded-full bg-current' />\n      </span>\n    )\n  }\n\n  return <span className={cn(indicatorVariants({ status, variant }), className)} />\n}\n\nfunction ActivityFeedTimeline({\n  children,\n  className = '',\n  lineClassName = '',\n  linePosition = 'start',\n}: ActivityFeedTimelineProps) {\n  return (\n    <div className={cn('relative space-y-6', className)}>\n      <div\n        aria-hidden='true'\n        className={cn(\n          'absolute inset-y-0 w-px bg-border',\n          timelinePositions[linePosition],\n          lineClassName,\n        )}\n      />\n      {children}\n    </div>\n  )\n}\n\nexport {\n  ActivityFeedContent,\n  ActivityFeedIndicator,\n  ActivityFeedItem,\n  ActivityFeedTimeline,\n}\n",
      "type": "registry:component"
    }
  ],
  "type": "registry:component"
}
