From 13dc1ba9fc9bfd27fc9ee49ede9e7e3a6af52334 Mon Sep 17 00:00:00 2001 From: "[dyad]" Date: Wed, 21 Jan 2026 08:41:48 +0100 Subject: [PATCH] [dyad] Make headline sections collapsible - wrote 1 file(s) --- src/components/headline-tree.tsx | 39 ++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/components/headline-tree.tsx b/src/components/headline-tree.tsx index 53cc316..ac1acec 100644 --- a/src/components/headline-tree.tsx +++ b/src/components/headline-tree.tsx @@ -1,8 +1,11 @@ "use client"; +import { useState } from "react"; import { Badge } from "@/components/ui/badge"; import type { HeadlineNode } from "@/app/actions"; import { KeywordHighlighter } from "./keyword-highlighter"; +import { ChevronDown } from "lucide-react"; +import { cn } from "@/lib/utils"; interface HeadlineTreeProps { headlines: HeadlineNode[]; @@ -18,11 +21,19 @@ const HeadlineNodeDisplay = ({ level: number; keyword?: string | null; }) => { + const isCollapsible = + node.level === 2 && node.children && node.children.length > 0; + const [isCollapsed, setIsCollapsed] = useState(true); + return ( <>
isCollapsible && setIsCollapsed(!isCollapsed)} > {node.length}

+ {isCollapsible && ( + + )}
- {node.children?.map((child, index) => ( - - ))} + {node.children && + (!isCollapsible || !isCollapsed) && + node.children.map((child, index) => ( + + ))} ); };