"use client" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible" import { cn } from "@/lib/utils" import { Brain, ChevronDown, Circle, Loader2, Search, Sparkles, Lightbulb, CheckCircle2 } from "lucide-react" import React from "react" export type ChainOfThoughtItemProps = React.ComponentProps<"div"> export const ChainOfThoughtItem = ({ children, className, ...props }: ChainOfThoughtItemProps) => (
{children}
) export type ChainOfThoughtTriggerProps = React.ComponentProps< typeof CollapsibleTrigger > & { leftIcon?: React.ReactNode swapIconOnHover?: boolean } export const ChainOfThoughtTrigger = ({ children, className, leftIcon, swapIconOnHover = true, ...props }: ChainOfThoughtTriggerProps) => (
{leftIcon ? ( {leftIcon} {swapIconOnHover && ( )} ) : ( )} {children}
{!leftIcon && ( )}
) export type ChainOfThoughtContentProps = React.ComponentProps< typeof CollapsibleContent > export const ChainOfThoughtContent = ({ children, className, ...props }: ChainOfThoughtContentProps) => { return (
{children}
) } export type ChainOfThoughtProps = { children: React.ReactNode className?: string } export function ChainOfThought({ children, className }: ChainOfThoughtProps) { const childrenArray = React.Children.toArray(children) return (
{childrenArray.map((child, index) => ( {React.isValidElement(child) && React.cloneElement( child as React.ReactElement, { isLast: index === childrenArray.length - 1, } )} ))}
) } export type ChainOfThoughtStepProps = { children: React.ReactNode className?: string isLast?: boolean } export const ChainOfThoughtStep = ({ children, className, isLast = false, ...props }: ChainOfThoughtStepProps & React.ComponentProps) => { return ( {children}
) }