// @vitest-environment jsdom import { act, forwardRef, useImperativeHandle, type ForwardedRef } from "react"; import { flushSync } from "react-dom"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { ThemeProvider } from "@/context/ThemeContext"; import { MemoryRouter } from "@/lib/router"; import { TaskChatProtocolCard } from "./TaskChatProtocolCard"; import type { TaskChatProtocolItem, TaskChatProviderActivityFamily, TaskChatRuntimeRequestDecision, } from "./task-chat-model"; import type { IssueWorkProduct } from "@paperclipai/shared"; import { IssueGalleryContext } from "@/context/IssueGalleryContext"; import { RichWorkProductCard } from "./RichWorkProductCard"; import { stateChipFor } from "./RichWorkProductCard"; function workProduct(overrides: Partial = {}): IssueWorkProduct { return { id: "work-product-1", companyId: "company-1", projectId: null, issueId: "issue-1", executionWorkspaceId: null, runtimeServiceId: null, type: "pull_request", provider: "github", externalId: "42", title: "Ship rich work-product cards", url: "https://github.com/paperclipai/paperclip/pull/42", status: "merged", reviewState: "none", isPrimary: true, healthStatus: "healthy", summary: null, metadata: null, createdByRunId: null, createdAt: new Date("2026-09-02T00:00:00.000Z"), updatedAt: new Date("2026-09-02T00:00:00.000Z"), ...overrides, }; } vi.mock("@/components/MarkdownEditor", () => ({ MarkdownEditor: forwardRef(function MockMarkdownEditor( { value, onChange, placeholder, imageUploadHandler, }: { value: string; onChange: (value: string) => void; placeholder?: string; imageUploadHandler?: (file: File) => Promise; }, ref: ForwardedRef, ) { useImperativeHandle(ref, () => ({ insertMarkdown: (markdown: string) => onChange(`${value}${markdown}`), focus: () => {}, })); return (