import { makeLivestreamStore } from "@streamplace/core"; import { act } from "react"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { ChatInput } from "./chat-input"; const { mockSend, mockText, mockUseSession, mockClearContent } = vi.hoisted( () => ({ mockSend: vi.fn(), mockText: { current: "" }, mockUseSession: vi.fn(), mockClearContent: vi.fn(), }), ); vi.mock("@/lib/session", () => ({ useSession: mockUseSession })); vi.mock("../../hooks/use-chat-send", () => ({ useChatSend: () => mockSend })); vi.mock("../../hooks/use-skin-tone", () => ({ skinToneIndex: () => 0, useSkinTone: () => [0, vi.fn()], })); vi.mock("../../lib/emoji-data", () => ({ getEmojiData: vi.fn(), getSkinNative: vi.fn(), searchEmojis: vi.fn(), useEmojiData: () => null, })); vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: (key: string) => key }), })); vi.mock("@tiptap/react", () => ({ EditorContent: () => (