blob: 12f90ecbf86f97ae943e0545c06be2b4508c1456 [file] [log] [blame]
Earl Lee2e463fb2025-04-17 11:22:22 -07001import { TimelineMessage } from "../types";
2
3/**
4 * Adds collapsible functionality to long content elements.
5 * This creates a toggle button that allows users to expand/collapse long text content.
6 *
7 * @param message - The timeline message containing the content
8 * @param textEl - The DOM element containing the text content
9 * @param containerEl - The container element for the text and copy button
10 * @param contentEl - The outer content element that will contain everything
11 */
12export function addCollapsibleFunctionality(
13 message: TimelineMessage,
14 textEl: HTMLElement,
15 containerEl: HTMLElement,
16 contentEl: HTMLElement
17): void {
18 // Don't collapse end_of_turn messages (final output) regardless of length
19 if (message.content.length > 1000 && !message.end_of_turn) {
20 textEl.classList.add("collapsed");
21
22 const toggleButton = document.createElement("button");
23 toggleButton.className = "collapsible";
24 toggleButton.textContent = "Show more...";
25 toggleButton.addEventListener("click", () => {
26 textEl.classList.toggle("collapsed");
27 toggleButton.textContent = textEl.classList.contains("collapsed")
28 ? "Show more..."
29 : "Show less";
30 });
31
32 contentEl.appendChild(containerEl);
33 contentEl.appendChild(toggleButton);
34 } else {
35 contentEl.appendChild(containerEl);
36 }
37}