import type { AppCommandController } from "../commands/command-controller.js"; import type { ConversationViewport } from "../rendering/conversation-viewport.js"; import type { EditorLayoutRenderer } from "../rendering/editor-layout-renderer.js"; import type { ImageContent, InputEditor } from "../../input-editor.js"; import type { ToastEntry, ToastVariant } from "../../ui.js"; import type { AppPopupActionController } from "../popup/popup-action-controller.js"; import type { AppPopupMenuController } from "../popup/popup-menu-controller.js"; import type { AppScrollController } from "./scroll-controller.js"; import type { Entry, ImageClickTarget, MouseEvent, MouseSelection, StatusAgentPauseTarget, StatusContextTarget, StatusCompactToolsTarget, StatusDraftQueueTarget, StatusInternalClipboardTarget, StatusModelTarget, StatusModelUsageTarget, StatusPromptEnhancerTarget, StatusQuickScrollTarget, StatusSessionTarget, StatusTerminalBellSoundTarget, TabLineMouseTarget, StatusThinkingExpandTarget, StatusThinkingTarget, StatusUserJumpTarget, StatusVoiceLanguageTarget, StatusVoiceMicTarget } from "../types.js"; import { type RenderedLink } from "./file-links.js"; import type { AgentSession } from "@earendil-works/pi-coding-agent"; type ClickFlash = { y: number; startColumn: number; endColumn: number; text: string; background?: string; }; export type InputFrameCopyRows = { inputStartRow: number; inputEndRow: number; inputSeparatorRow: number; inputBottomSeparatorRow?: number; }; export type AppMouseControllerHost = { terminalColumns(): number; terminalRows(): number; tabPanelRows(terminalRows: number): number; conversationViewport(): ConversationViewport; editorLayoutRenderer(): EditorLayoutRenderer; inputEditor(): InputEditor; resetRequestHistoryNavigation(): void; findEntry(entryId: string): Entry | undefined; touchEntry(entry: Entry): void; getTodoPanelExpanded(): boolean; setTodoPanelExpanded(expanded: boolean): void; getSubagentsPanelExpanded(): boolean; setSubagentsPanelExpanded(expanded: boolean): void; setStatus(status: string): void; runtimeSession(): AgentSession | undefined; cwd(): string | undefined; openFileLink?(link: RenderedLink): boolean; openImageContent?(image: ImageContent): boolean; enhancePrompt(): void | Promise; openNewTab(): void | Promise; toggleVoiceRecording(): void; toggleVoiceLanguage(): void; switchToTab(tabId: string): void; closeTab(tabId: string): void; toastEntry(toastId: number): ToastEntry | undefined; showToast(message: string, kind: "success" | "error" | "warning" | "info", options?: { durationMs?: number; variant?: ToastVariant; }): void; dismissToast(toastId: number): void; activateToastAction(toastId: number): boolean; refreshModelUsageStatus(): void | Promise; refreshUserMessageJumpMenuItems?(): Promise; queueInputFromStatus?(): void | Promise; pasteInternalClipboard?(): void; setInternalClipboardText?(text: string): void; scrollConversationQuick(direction: "up" | "down"): void | Promise; toggleAllThinkingExpanded?(): void; toggleSuperCompactTools?(): void; toggleTerminalBellSound?(): void; toggleAgentPause?(): void | Promise; copyTextToClipboard?(text: string): void | Promise; handleExtensionInputMouse(event: MouseEvent & { localRow: number; localColumn: number; width: number; }): boolean; render(): void; }; export declare class AppMouseController { private readonly host; private readonly popupMenus; private readonly popupActions; private readonly scrollController; private readonly commandController; readonly renderedTargets: Map; readonly renderedRowTexts: Map; readonly renderedLinks: Map; readonly renderedRowBackgrounds: Map; readonly renderedImageTargets: Map; statusModelTarget: StatusModelTarget | undefined; statusThinkingTarget: StatusThinkingTarget | undefined; statusContextTarget: StatusContextTarget | undefined; statusModelUsageTarget: StatusModelUsageTarget | undefined; statusUserJumpTarget: StatusUserJumpTarget | undefined; statusDraftQueueTarget: StatusDraftQueueTarget | undefined; statusInternalClipboardTarget: StatusInternalClipboardTarget | undefined; statusThinkingExpandTarget: StatusThinkingExpandTarget | undefined; statusCompactToolsTarget: StatusCompactToolsTarget | undefined; statusQuickScrollUpTarget: StatusQuickScrollTarget | undefined; statusQuickScrollDownTarget: StatusQuickScrollTarget | undefined; statusTerminalBellSoundTarget: StatusTerminalBellSoundTarget | undefined; statusSessionTarget: StatusSessionTarget | undefined; statusPromptEnhancerTarget: StatusPromptEnhancerTarget | undefined; statusAgentPauseTarget: StatusAgentPauseTarget | undefined; statusVoiceMicTarget: StatusVoiceMicTarget | undefined; statusVoiceLanguageTarget: StatusVoiceLanguageTarget | undefined; readonly tabLineTargets: TabLineMouseTarget[]; mouseSelection: MouseSelection | undefined; private inputScrollBarDragActive; private autoScrollTimer; private autoScrollDirection; private autoScrollDistance; private autoScrollAccumulator; private autoScrollLastTick; private autoScrollCursorX; private leftEdgeReleaseFallbackTimer; private clickFlash; private clickFlashTimer; private clickFlashDirty; private renderedConversationFrame; constructor(host: AppMouseControllerHost, popupMenus: AppPopupMenuController, popupActions: AppPopupActionController, scrollController: AppScrollController, commandController: AppCommandController); handleMouse(event: MouseEvent): void; private toolTargetContainsEvent; activeClickFlash(): ClickFlash | undefined; consumeClickFlashDirty(): boolean; private withClickFlash; private showClickFlashOnPress; private showClickFlashForEvent; private showClickFlash; private clickFlashForEvent; private clickFlashForRegion; private clickFlashRegionForEvent; private toolClickFlashRegionForEvent; private normalizedClickFlashRegion; private inputClickFlashRegionForEvent; private imageTargetAt; private fileLinkAt; private fileLinkTargetAt; private statusTargetAt; private handleImageClick; private handleFileLinkClick; private handleInputScrollBar; private finishInputScrollBarDrag; private handleInputWheel; private scrollInputToTrackRow; private inputGeometry; private tabLineTargetAt; private handleTabLineClick; private handleStatusModelClick; private handleStatusThinkingClick; private handleStatusContextClick; private handleStatusModelUsageClick; private handleStatusUserJumpClick; private handleInputBorderStatusClick; private openStatusUserJumpMenu; private handleStatusDraftQueueClick; private handleStatusInternalClipboardClick; private handleStatusThinkingExpandClick; private handleStatusCompactToolsClick; private handleStatusTerminalBellSoundClick; private handleStatusSessionClick; private handleStatusPromptEnhancerClick; private handleStatusAgentPauseClick; private handleStatusVoiceMicClick; private handleStatusVoiceLanguageClick; private handleStatusQuickScrollClick; private statusTargetContains; private handleInputClick; private handleExtensionInputClick; private openUserMessageMenu; private openQueueMessageMenu; private copyErrorToast; private handleMouseSelection; private finishMouseSelection; private updateLeftEdgeReleaseFallback; private cancelLeftEdgeReleaseFallback; syncConversationSelectionForRender(startLine: number, bodyHeight: number, topReservedRows: number, width: number): void; private updateSelectionCurrentFromMouse; private getSelectedText; private copyTextToClipboard; private getSelectedScreenText; private inputFrameCopyRows; private getSelectedConversationText; private conversationPointFromMouse; private conversationArea; private computeConversationFrame; private updateAutoScroll; private startAutoScroll; private stopAutoScroll; private tickAutoScroll; private updateConversationSelectionAtAutoScrollEdge; } export declare function screenSelectionLineText(row: number, text: string, startColumn: number, endColumn: number, inputFrame: InputFrameCopyRows | undefined): string | undefined; export {};