in apps/chat/src/components/Common/CollapsibleSection.tsx [27:93]
export default function CollapsibleSection({
name,
openByDefault = true,
isHighlighted = false,
children,
caretIconSize = 10,
caretIconHidden,
dataQa,
className,
showOnHoverOnly,
togglerClassName,
sectionTooltip,
additionalNode,
isExpanded,
onToggle,
}: CollapsibleSectionProps) {
const [isOpened, setIsOpened] = useState(openByDefault);
const expandState = isExpanded ?? isOpened;
const handleClick = useCallback(() => {
onToggle && onToggle(!expandState);
setIsOpened(!expandState);
}, [expandState, onToggle]);
return (
<div
className={classNames('flex w-full flex-col py-1 pl-2 pr-0.5', className)}
data-qa={dataQa?.concat('-container')}
>
<div className="flex items-center gap-1 py-1">
<div
onClick={handleClick}
className={classNames(
'flex cursor-pointer items-center gap-1 whitespace-pre py-1 text-xs',
isHighlighted
? 'text-accent-primary'
: '[&:not(:hover)]:text-secondary',
togglerClassName,
)}
data-qa="section-root"
aria-selected={isHighlighted}
>
<CaretIconComponent
isOpen={expandState}
size={caretIconSize}
hidden={caretIconHidden}
showOnHoverOnly={showOnHoverOnly}
/>
{name}
</div>
{sectionTooltip && (
<Tooltip
tooltip={sectionTooltip}
triggerClassName="flex shrink-0 text-secondary hover:text-accent-primary"
contentClassName="max-w-[220px]"
placement="top"
>
<IconHelp size={18} />
</Tooltip>
)}
{additionalNode}
</div>
{expandState && children}
</div>
);
}