@code-yeongyu/senpi-tui 2026.9.29 → 2026.10.1-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +38 -0
  2. package/dist/autocomplete.d.ts +5 -0
  3. package/dist/autocomplete.js +38 -14
  4. package/dist/colors.d.ts +73 -0
  5. package/dist/colors.js +273 -0
  6. package/dist/components/box.js +5 -3
  7. package/dist/components/editor.d.ts +4 -1
  8. package/dist/components/editor.js +23 -8
  9. package/dist/components/latex.js +5 -0
  10. package/dist/editor-component.d.ts +7 -2
  11. package/dist/fuzzy.js +23 -22
  12. package/dist/index.d.ts +6 -3
  13. package/dist/index.js +5 -2
  14. package/dist/native-platform.d.ts +2 -0
  15. package/dist/oklab.d.ts +43 -0
  16. package/dist/oklab.js +210 -0
  17. package/dist/slash-command-autocomplete.js +3 -0
  18. package/dist/terminal-capabilities.js +1 -1
  19. package/dist/terminal-colors.d.ts +19 -2
  20. package/dist/terminal-colors.js +12 -7
  21. package/dist/terminal-image.d.ts +3 -1
  22. package/dist/terminal-image.js +33 -9
  23. package/dist/terminal.d.ts +3 -0
  24. package/dist/terminal.js +15 -8
  25. package/dist/tui-alt-screen.d.ts +12 -7
  26. package/dist/tui-alt-screen.js +37 -17
  27. package/dist/tui.d.ts +18 -17
  28. package/dist/tui.js +79 -62
  29. package/dist/utils.d.ts +3 -0
  30. package/dist/utils.js +108 -60
  31. package/dist/wheel-scroll.d.ts +23 -0
  32. package/dist/wheel-scroll.js +70 -0
  33. package/native/clipboard.h +40 -2
  34. package/native/darwin/README.md +1 -1
  35. package/native/darwin/prebuilds/darwin-arm64/darwin-platform.node +0 -0
  36. package/native/darwin/prebuilds/darwin-x64/darwin-platform.node +0 -0
  37. package/native/darwin/src/darwin-platform.m +39 -0
  38. package/native/napi.h +2 -0
  39. package/package.json +3 -2
  40. package/dist/alt-screen-search.d.ts.map +0 -1
  41. package/dist/alt-screen-search.js.map +0 -1
  42. package/dist/autocomplete.d.ts.map +0 -1
  43. package/dist/autocomplete.js.map +0 -1
  44. package/dist/components/alt-screen-flash.d.ts.map +0 -1
  45. package/dist/components/alt-screen-flash.js.map +0 -1
  46. package/dist/components/box.d.ts.map +0 -1
  47. package/dist/components/box.js.map +0 -1
  48. package/dist/components/cancellable-loader.d.ts.map +0 -1
  49. package/dist/components/cancellable-loader.js.map +0 -1
  50. package/dist/components/editor-line-render.d.ts.map +0 -1
  51. package/dist/components/editor-line-render.js.map +0 -1
  52. package/dist/components/editor.d.ts.map +0 -1
  53. package/dist/components/editor.js.map +0 -1
  54. package/dist/components/h-stack.d.ts.map +0 -1
  55. package/dist/components/h-stack.js.map +0 -1
  56. package/dist/components/image.d.ts.map +0 -1
  57. package/dist/components/image.js.map +0 -1
  58. package/dist/components/input.d.ts.map +0 -1
  59. package/dist/components/input.js.map +0 -1
  60. package/dist/components/latex.d.ts.map +0 -1
  61. package/dist/components/latex.js.map +0 -1
  62. package/dist/components/loader.d.ts.map +0 -1
  63. package/dist/components/loader.js.map +0 -1
  64. package/dist/components/markdown.d.ts.map +0 -1
  65. package/dist/components/markdown.js.map +0 -1
  66. package/dist/components/mouse-region.d.ts.map +0 -1
  67. package/dist/components/mouse-region.js.map +0 -1
  68. package/dist/components/scroll-view.d.ts.map +0 -1
  69. package/dist/components/scroll-view.js.map +0 -1
  70. package/dist/components/select-list.d.ts.map +0 -1
  71. package/dist/components/select-list.js.map +0 -1
  72. package/dist/components/settings-list.d.ts.map +0 -1
  73. package/dist/components/settings-list.js.map +0 -1
  74. package/dist/components/spacer.d.ts.map +0 -1
  75. package/dist/components/spacer.js.map +0 -1
  76. package/dist/components/stack.d.ts.map +0 -1
  77. package/dist/components/stack.js.map +0 -1
  78. package/dist/components/text.d.ts.map +0 -1
  79. package/dist/components/text.js.map +0 -1
  80. package/dist/components/truncated-text.d.ts.map +0 -1
  81. package/dist/components/truncated-text.js.map +0 -1
  82. package/dist/components/v-stack.d.ts.map +0 -1
  83. package/dist/components/v-stack.js.map +0 -1
  84. package/dist/dollar-invocation-autocomplete.d.ts.map +0 -1
  85. package/dist/dollar-invocation-autocomplete.js.map +0 -1
  86. package/dist/editor-component.d.ts.map +0 -1
  87. package/dist/editor-component.js.map +0 -1
  88. package/dist/fuzzy.d.ts.map +0 -1
  89. package/dist/fuzzy.js.map +0 -1
  90. package/dist/image-markers.d.ts.map +0 -1
  91. package/dist/image-markers.js.map +0 -1
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/index.js.map +0 -1
  94. package/dist/keybindings.d.ts.map +0 -1
  95. package/dist/keybindings.js.map +0 -1
  96. package/dist/keys.d.ts.map +0 -1
  97. package/dist/keys.js.map +0 -1
  98. package/dist/kill-ring.d.ts.map +0 -1
  99. package/dist/kill-ring.js.map +0 -1
  100. package/dist/layout-node.d.ts.map +0 -1
  101. package/dist/layout-node.js.map +0 -1
  102. package/dist/layout.d.ts.map +0 -1
  103. package/dist/layout.js.map +0 -1
  104. package/dist/mouse-input.d.ts.map +0 -1
  105. package/dist/mouse-input.js.map +0 -1
  106. package/dist/mux.d.ts.map +0 -1
  107. package/dist/mux.js.map +0 -1
  108. package/dist/native-modifiers.d.ts.map +0 -1
  109. package/dist/native-modifiers.js.map +0 -1
  110. package/dist/native-module-path.d.ts.map +0 -1
  111. package/dist/native-module-path.js.map +0 -1
  112. package/dist/native-platform.d.ts.map +0 -1
  113. package/dist/native-platform.js.map +0 -1
  114. package/dist/paste-markers.d.ts.map +0 -1
  115. package/dist/paste-markers.js.map +0 -1
  116. package/dist/slash-command-autocomplete.d.ts.map +0 -1
  117. package/dist/slash-command-autocomplete.js.map +0 -1
  118. package/dist/stderr-observer.d.ts.map +0 -1
  119. package/dist/stderr-observer.js.map +0 -1
  120. package/dist/stdin-buffer.d.ts.map +0 -1
  121. package/dist/stdin-buffer.js.map +0 -1
  122. package/dist/terminal-capabilities.d.ts.map +0 -1
  123. package/dist/terminal-capabilities.js.map +0 -1
  124. package/dist/terminal-colors.d.ts.map +0 -1
  125. package/dist/terminal-colors.js.map +0 -1
  126. package/dist/terminal-image.d.ts.map +0 -1
  127. package/dist/terminal-image.js.map +0 -1
  128. package/dist/terminal-text.d.ts.map +0 -1
  129. package/dist/terminal-text.js.map +0 -1
  130. package/dist/terminal.d.ts.map +0 -1
  131. package/dist/terminal.js.map +0 -1
  132. package/dist/tmux-cursor-query.d.ts.map +0 -1
  133. package/dist/tmux-cursor-query.js.map +0 -1
  134. package/dist/tmux-focus.d.ts.map +0 -1
  135. package/dist/tmux-focus.js.map +0 -1
  136. package/dist/tmux-image-capability.d.ts.map +0 -1
  137. package/dist/tmux-image-capability.js.map +0 -1
  138. package/dist/tmux-image-probe.d.ts.map +0 -1
  139. package/dist/tmux-image-probe.js.map +0 -1
  140. package/dist/tui-alt-screen.d.ts.map +0 -1
  141. package/dist/tui-alt-screen.js.map +0 -1
  142. package/dist/tui-main-screen.d.ts.map +0 -1
  143. package/dist/tui-main-screen.js.map +0 -1
  144. package/dist/tui.d.ts.map +0 -1
  145. package/dist/tui.js.map +0 -1
  146. package/dist/undo-stack.d.ts.map +0 -1
  147. package/dist/undo-stack.js.map +0 -1
  148. package/dist/utils.d.ts.map +0 -1
  149. package/dist/utils.js.map +0 -1
  150. package/dist/word-navigation.d.ts.map +0 -1
  151. package/dist/word-navigation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { setKittyProtocolActive } from \"./keys.ts\";\nimport { isMultiplexerSession } from \"./mux.ts\";\nimport { isNativeModifierPressed } from \"./native-modifiers.ts\";\nimport { getNativePlatformHelper } from \"./native-platform.ts\";\nimport { observeProcessStderrWrites } from \"./stderr-observer.ts\";\nimport { StdinBuffer } from \"./stdin-buffer.ts\";\nimport { queryTmuxCursorPosition } from \"./tmux-cursor-query.ts\";\nimport type { TmuxExecFile } from \"./tmux-image-probe.ts\";\n\nconst TERMINAL_PROGRESS_KEEPALIVE_MS = 1000;\nconst TERMINAL_PROGRESS_ACTIVE_SEQUENCE = \"\\x1b]9;4;3\\x07\";\nconst TERMINAL_PROGRESS_CLEAR_SEQUENCE = \"\\x1b]9;4;0\\x07\";\nconst NATIVE_SHIFT_ENTER_SEQUENCE = \"\\x1b[13;2u\";\nconst DESIRED_KITTY_KEYBOARD_PROTOCOL_FLAGS = 7;\nconst DEAD_TERMINAL_ERROR_CODES = new Set([\"EIO\", \"EPIPE\", \"ENOTCONN\"]);\n// Bun's macOS tty shim can report synchronous ioctl EIO as raw positive errno 5 without a string code.\nconst EIO_ERRNO = 5;\n// Bun's tty shim can also drop both properties and leave the errno only in the message text\n// (`new Error(\"setRawMode failed with errno: 5\")` - no `code`, no `errno`), so the numeric\n// fallback has to read the message. Restricted to errno values that are stable across darwin\n// and linux: EIO (5) and EPIPE (32). ENOTCONN is deliberately excluded because its number\n// differs per platform (57 on darwin, 107 on linux) and a wrong guess would swallow a live error.\nconst EPIPE_ERRNO = 32;\nconst DEAD_TERMINAL_ERRNOS = new Set([EIO_ERRNO, EPIPE_ERRNO]);\nconst ERRNO_IN_MESSAGE_PATTERN = /errno:\\s*(\\d+)/;\nconst KEYBOARD_PROTOCOL_RESPONSE_FRAGMENT_TIMEOUT_MS = 150;\nconst KITTY_KEYBOARD_PROTOCOL_QUERY = `\\x1b[>${DESIRED_KITTY_KEYBOARD_PROTOCOL_FLAGS}u\\x1b[?u\\x1b[c`;\n\nexport interface CursorPosition {\n\trow: number;\n\tcolumn: number;\n\tpage?: number;\n}\nexport function parseCursorPositionResponse(sequence: string): CursorPosition | undefined {\n\tconst match = /^\\x1b\\[\\?(\\d+);(\\d+)(?:;(\\d+))?R$/.exec(sequence);\n\treturn match\n\t\t? {\n\t\t\t\trow: Number(match[1]),\n\t\t\t\tcolumn: Number(match[2]),\n\t\t\t\t...(match[3] === undefined ? {} : { page: Number(match[3]) }),\n\t\t\t}\n\t\t: undefined;\n}\n\nexport type KeyboardProtocolNegotiationSequence =\n\t| { type: \"kitty-flags\"; flags: number }\n\t| { type: \"device-attributes\" }\n\t| ({ type: \"cursor-position\" } & CursorPosition);\n\nexport function parseKeyboardProtocolNegotiationSequence(\n\tsequence: string,\n): KeyboardProtocolNegotiationSequence | undefined {\n\tconst cursorPosition = parseCursorPositionResponse(sequence);\n\tif (cursorPosition) return { type: \"cursor-position\", ...cursorPosition };\n\tconst kittyFlags = sequence.match(/^\\x1b\\[\\?(\\d+)u$/);\n\tif (kittyFlags) {\n\t\treturn { type: \"kitty-flags\", flags: Number.parseInt(kittyFlags[1]!, 10) };\n\t}\n\tif (/^\\x1b\\[\\?[\\d;]*c$/.test(sequence)) {\n\t\treturn { type: \"device-attributes\" };\n\t}\n\treturn undefined;\n}\n\nfunction isKeyboardProtocolNegotiationSequencePrefix(sequence: string): boolean {\n\treturn sequence === \"\\x1b[\" || /^\\x1b\\[\\?[\\d;]*$/.test(sequence);\n}\n\nexport function isAppleTerminalSession(): boolean {\n\treturn process.platform === \"darwin\" && process.env.TERM_PROGRAM === \"Apple_Terminal\";\n}\n\n/**\n * Refresh terminal dimensions on POSIX platforms by sending SIGWINCH to this process.\n * Best-effort: some environments (restricted seccomp or LSM policies) return EACCES\n * for `kill(2)`; in that case the dimensions refresh is skipped rather than crashing.\n */\nexport function refreshTerminalDimensions(): void {\n\tif (process.platform === \"win32\" || process.pid <= 0) return;\n\ttry {\n\t\tprocess.kill(process.pid, \"SIGWINCH\");\n\t} catch {\n\t\t// Signal delivery not permitted in this environment; ignore.\n\t}\n}\n\nexport function normalizeNativeShiftEnterInput(\n\tdata: string,\n\tshouldDetectNativeShiftEnter: boolean,\n\tisShiftPressed: boolean,\n): string {\n\tif (shouldDetectNativeShiftEnter && data === \"\\r\" && isShiftPressed) return NATIVE_SHIFT_ENTER_SEQUENCE;\n\treturn data;\n}\n\nexport function normalizeAppleTerminalInput(data: string, isAppleTerminal: boolean, isShiftPressed: boolean): string {\n\treturn normalizeNativeShiftEnterInput(data, isAppleTerminal, isShiftPressed);\n}\n\nexport function normalizeWarpWslShiftEnterInput(\n\tdata: string,\n\tenv: NodeJS.ProcessEnv = process.env,\n\tplatform: NodeJS.Platform = process.platform,\n\tsocketExists: (socketPath: string) => boolean = (socketPath) => {\n\t\ttry {\n\t\t\treturn fs.statSync(socketPath).isSocket();\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t},\n): string {\n\tif (data !== \"\\n\" || platform !== \"linux\") return data;\n\tif (isMultiplexerSession(env) || env.SSH_CONNECTION?.trim() || env.SSH_CLIENT?.trim() || env.SSH_TTY?.trim()) {\n\t\treturn data;\n\t}\n\tconst isWarp = Boolean(env.WARP_SESSION_ID?.trim() || env.WARP_TERMINAL_SESSION_UUID?.trim());\n\tconst interopPath = env.WSL_INTEROP?.trim();\n\tconst isWsl =\n\t\tisWarp && interopPath !== undefined && /^\\/run\\/WSL\\/\\d+_interop$/.test(interopPath) && socketExists(interopPath);\n\treturn isWarp && isWsl ? NATIVE_SHIFT_ENTER_SEQUENCE : data;\n}\n\nexport function keyboardEnhancementEnabled(): boolean {\n\tconst value = process.env.PI_TUI_KEYBOARD_PROTOCOL;\n\tif (value === undefined) return true;\n\treturn ![\"0\", \"false\", \"no\", \"off\"].includes(value.toLowerCase());\n}\n\nfunction isDeadTerminalError(error: unknown): boolean {\n\tif (!(error instanceof Error)) return false;\n\tif (\"code\" in error && typeof error.code === \"string\") return DEAD_TERMINAL_ERROR_CODES.has(error.code);\n\tif (\"errno\" in error && error.errno === EIO_ERRNO) return true;\n\tconst messageErrno = ERRNO_IN_MESSAGE_PATTERN.exec(error.message);\n\tif (!messageErrno) return false;\n\treturn DEAD_TERMINAL_ERRNOS.has(Number.parseInt(messageErrno[1]!, 10));\n}\n\nconst STDIN_ERROR_HANDLER_GRACE_MS = 250;\nconst stdinErrorSubscribers = new Set<(err: Error) => void>();\n\nexport function __stdinErrorSubscriberCountForTests(): number {\n\treturn stdinErrorSubscribers.size;\n}\nexport function __stdinErrorDispatcherInstalledForTests(): boolean {\n\treturn process.stdin.listeners(\"error\").includes(dispatchStdinError);\n}\n\n/**\n * A vanished or re-backgrounded controlling terminal fails the next stdin\n * read with EIO; that is the only stdin error this module owns. Node reports\n * it as code \"EIO\" (errno -5), Bun's macOS tty shim as a bare positive\n * errno 5 — both shapes classify. Any other stdin failure (EBADF, EPIPE, an\n * unexpected platform error) keeps its default EventEmitter propagation so it\n * stays observable instead of being downgraded to a silently ignored error.\n */\nfunction isTerminalDetachStdinError(err: Error): boolean {\n\tif ((err as NodeJS.ErrnoException).code === \"EIO\") return true;\n\tconst errno = (err as NodeJS.ErrnoException).errno;\n\treturn errno === EIO_ERRNO || errno === -EIO_ERRNO;\n}\n\nconst dispatchStdinError = (err: Error): void => {\n\tif (!isTerminalDetachStdinError(err)) {\n\t\t// Our listener must not be the reason a non-EIO error stops propagating.\n\t\t// When no other \"error\" listener exists, EventEmitter would have thrown;\n\t\t// rethrowing from inside emit() reproduces that exact contract.\n\t\tconst hasOtherListener = process.stdin.listeners(\"error\").some((listener) => listener !== dispatchStdinError);\n\t\tif (!hasOtherListener) throw err;\n\t\treturn;\n\t}\n\tfor (const subscriber of stdinErrorSubscribers) subscriber(err);\n};\n\nfunction subscribeToStdinErrors(subscriber: (err: Error) => void): void {\n\tif (stdinErrorSubscribers.size === 0) process.stdin.on(\"error\", dispatchStdinError);\n\tstdinErrorSubscribers.add(subscriber);\n}\n\nfunction unsubscribeFromStdinErrors(subscriber: (err: Error) => void): void {\n\tstdinErrorSubscribers.delete(subscriber);\n\tif (stdinErrorSubscribers.size === 0) process.stdin.removeListener(\"error\", dispatchStdinError);\n}\n\n/**\n * Minimal terminal interface for TUI\n */\nexport interface Terminal {\n\t// Start the terminal with input and resize handlers\n\tstart(onInput: (data: string) => void, onResize: () => void): void;\n\n\t// Stop the terminal and restore state\n\tstop(): void;\n\n\t/**\n\t * Drain stdin before exiting to prevent Kitty key release events from\n\t * leaking to the parent shell over slow SSH connections.\n\t * @param maxMs - Maximum time to drain (default: 1000ms)\n\t * @param idleMs - Exit early if no input arrives within this time (default: 50ms)\n\t */\n\tdrainInput(maxMs?: number, idleMs?: number): Promise<void>;\n\n\t/** Optional for virtual/custom terminals that cannot answer private DECXCPR. */\n\tqueryCursorPosition?(): Promise<CursorPosition | undefined>;\n\t/** Observe external writes without changing their output policy. */\n\tobserveExternalWrites?(listener: () => void): () => void;\n\n\t// Write output to terminal\n\twrite(data: string): void;\n\n\t// Get terminal dimensions\n\tget columns(): number;\n\tget rows(): number;\n\n\t// Whether Kitty keyboard protocol is active\n\tget kittyProtocolActive(): boolean;\n\n\t// Cursor positioning (relative to current position)\n\tmoveBy(lines: number): void; // Move cursor up (negative) or down (positive) by N lines\n\n\t// Cursor visibility\n\thideCursor(): void; // Hide the cursor\n\tshowCursor(): void; // Show the cursor\n\n\t// Clear operations\n\tclearLine(): void; // Clear current line\n\tclearFromCursor(): void; // Clear from cursor to end of screen\n\tclearScreen(): void; // Clear entire screen and move cursor to (0,0)\n\n\t// Title operations\n\tsetTitle(title: string): void; // Set terminal window title\n\n\t// Progress indicator (OSC 9;4)\n\tsetProgress(active: boolean): void;\n}\n\nexport interface ProcessTerminalOptions {\n\t/** Injectable out-of-band tmux cursor source. */\n\ttmuxExecFile?: TmuxExecFile;\n\t/**\n\t * When set, stdout writes not issued by this terminal are hidden from the\n\t * screen while the terminal is started and forwarded to this handler\n\t * instead. External writes (console.log, libraries) would otherwise\n\t * interleave with frames and desynchronize differential rendering.\n\t */\n\tonExternalStdoutWrite?: (text: string) => void;\n\t/** Observe actual stderr delivery when a host redirects diagnostics before they reach the terminal. */\n\tobserveExternalStderrWrites?: (listener: () => void) => () => void;\n}\n\nconst DEFAULT_ESCAPE_TIMEOUT_MS = 10;\nconst DEFAULT_SSH_ESCAPE_TIMEOUT_MS = 100;\n\n/**\n * Resolve how long to wait for the rest of an escape sequence before\n * dispatching a lone ESC as the Escape key. Legacy Alt+key input is ESC plus\n * another byte, so high-latency transports need a longer reassembly window.\n */\nexport function resolveEscapeTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n\tconst configured = Number(env.PI_TUI_ESC_TIMEOUT);\n\tif (Number.isFinite(configured) && configured > 0) {\n\t\treturn configured;\n\t}\n\tif (env.SSH_CONNECTION || env.SSH_TTY) {\n\t\treturn DEFAULT_SSH_ESCAPE_TIMEOUT_MS;\n\t}\n\treturn DEFAULT_ESCAPE_TIMEOUT_MS;\n}\n\n/**\n * Real terminal using process.stdin/stdout\n */\nexport class ProcessTerminal implements Terminal {\n\tprivate wasRaw = false;\n\tprivate readonly tmuxExecFile?: TmuxExecFile;\n\tprivate onExternalStdoutWrite?: (text: string) => void;\n\tprivate originalStdoutWrite?: typeof process.stdout.write;\n\tprivate rawStdoutWrite?: (data: string) => void;\n\tprivate readonly observeExternalStderrWrites: (listener: () => void) => () => void;\n\tprivate stopExternalStderrObservation?: () => void;\n\tprivate readonly externalWriteObservers = new Set<() => void>();\n\tprivate keyboardNegotiationSettled = false;\n\tprivate cursorQueryTimedOut = false;\n\tprivate cursorQuery?: {\n\t\tpromise: Promise<CursorPosition | undefined>;\n\t\tresolve: (position: CursorPosition | undefined) => void;\n\t\ttimer: ReturnType<typeof setTimeout>;\n\t\tissued: boolean;\n\t\ttmuxPane?: string;\n\t\tdeadline: number;\n\t};\n\tprivate forwardingExternalWrite = false;\n\tprivate inputHandler?: (data: string) => void;\n\tprivate resizeHandler?: () => void;\n\tprivate _kittyProtocolActive = false;\n\tprivate _modifyOtherKeysActive = false;\n\tprivate keyboardProtocolPushed = false;\n\tprivate keyboardProtocolNegotiationBuffer = \"\";\n\tprivate discardingPrivateResponse = false;\n\tprivate keyboardProtocolBufferFlushTimer?: ReturnType<typeof setTimeout>;\n\tprivate stdinBuffer?: StdinBuffer;\n\tprivate stdinDataHandler?: (data: string | Buffer) => void;\n\tprivate stdinErrorHandler?: (err: Error) => void;\n\tprivate stdinErrorHandlerCleanupTimer?: ReturnType<typeof setTimeout>;\n\tprivate progressInterval?: ReturnType<typeof setInterval>;\n\tprivate writeLogPath = (() => {\n\t\tconst env = process.env.PI_TUI_WRITE_LOG || \"\";\n\t\tif (!env) return \"\";\n\t\ttry {\n\t\t\tif (fs.statSync(env).isDirectory()) {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst ts = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, \"0\")}-${String(now.getDate()).padStart(2, \"0\")}_${String(now.getHours()).padStart(2, \"0\")}-${String(now.getMinutes()).padStart(2, \"0\")}-${String(now.getSeconds()).padStart(2, \"0\")}`;\n\t\t\t\treturn path.join(env, `tui-${ts}-${process.pid}.log`);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Not an existing directory - use as-is (file path)\n\t\t}\n\t\treturn env;\n\t})();\n\n\tconstructor(options?: ProcessTerminalOptions) {\n\t\tthis.onExternalStdoutWrite = options?.onExternalStdoutWrite;\n\t\tthis.observeExternalStderrWrites = options?.observeExternalStderrWrites ?? observeProcessStderrWrites;\n\t\tthis.tmuxExecFile = options?.tmuxExecFile;\n\t}\n\n\tget kittyProtocolActive(): boolean {\n\t\treturn this._kittyProtocolActive;\n\t}\n\n\tqueryCursorPosition(): Promise<CursorPosition | undefined> {\n\t\tif (this.cursorQuery) return this.cursorQuery.promise;\n\t\tif (!this.inputHandler || this.cursorQueryTimedOut) return Promise.resolve(undefined);\n\t\tlet resolve!: (position: CursorPosition | undefined) => void;\n\t\tconst promise = new Promise<CursorPosition | undefined>((settle) => {\n\t\t\tresolve = settle;\n\t\t});\n\t\tconst timer = setTimeout(() => {\n\t\t\t// CPR has no request id: after a timeout a late reply cannot safely be\n\t\t\t// associated with a newer query. Stay fail-closed until the next start.\n\t\t\tthis.cursorQueryTimedOut = true;\n\t\t\tthis.settleCursorQuery(undefined);\n\t\t}, 750);\n\t\tthis.cursorQuery = {\n\t\t\tpromise,\n\t\t\tresolve,\n\t\t\ttimer,\n\t\t\tissued: false,\n\t\t\ttmuxPane: process.env.TMUX_PANE,\n\t\t\tdeadline: Date.now() + 750,\n\t\t};\n\t\tthis.issueCursorQuery();\n\t\treturn promise;\n\t}\n\n\tprivate issueCursorQuery(): void {\n\t\tif (!this.keyboardNegotiationSettled || !this.cursorQuery || this.cursorQuery.issued) return;\n\t\tthis.cursorQuery.issued = true;\n\t\tthis.rawWrite(\"\\x1b[?6n\");\n\t\tconst pending = this.cursorQuery;\n\t\tif (pending?.tmuxPane !== undefined) {\n\t\t\tvoid queryTmuxCursorPosition(pending.tmuxPane, pending.deadline, this.tmuxExecFile).then((position) => {\n\t\t\t\tif (this.cursorQuery !== pending) return;\n\t\t\t\tif (Date.now() >= pending.deadline) this.cursorQueryTimedOut = true;\n\t\t\t\tthis.settleCursorQuery(this.cursorQueryTimedOut ? undefined : position);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate settleCursorQuery(position: CursorPosition | undefined): void {\n\t\tconst pending = this.cursorQuery;\n\t\tif (!pending) return;\n\t\tthis.cursorQuery = undefined;\n\t\tclearTimeout(pending.timer);\n\t\tpending.resolve(position);\n\t}\n\n\tobserveExternalWrites(listener: () => void): () => void {\n\t\tthis.externalWriteObservers.add(listener);\n\t\tif (this.inputHandler) {\n\t\t\tthis.installExternalStdoutGuard();\n\t\t\tthis.installExternalStderrObserver();\n\t\t}\n\t\treturn () => {\n\t\t\tthis.externalWriteObservers.delete(listener);\n\t\t};\n\t}\n\n\tprivate noteExternalWrite(): void {\n\t\tfor (const listener of this.externalWriteObservers) listener();\n\t}\n\n\tprivate installExternalStderrObserver(): void {\n\t\tif (this.stopExternalStderrObservation || this.externalWriteObservers.size === 0) return;\n\t\tthis.stopExternalStderrObservation = this.observeExternalStderrWrites(() => this.noteExternalWrite());\n\t}\n\n\tprivate rawWrite(data: string): void {\n\t\tif (this.rawStdoutWrite) {\n\t\t\tthis.rawStdoutWrite(data);\n\t\t\treturn;\n\t\t}\n\t\tprocess.stdout.write(data);\n\t}\n\n\tprivate installExternalStdoutGuard(): void {\n\t\tconst handler = this.onExternalStdoutWrite;\n\t\tif ((!handler && this.externalWriteObservers.size === 0) || this.originalStdoutWrite) {\n\t\t\treturn;\n\t\t}\n\t\tthis.originalStdoutWrite = process.stdout.write;\n\t\tconst rawWrite = process.stdout.write.bind(process.stdout);\n\t\tthis.rawStdoutWrite = rawWrite;\n\n\t\tprocess.stdout.write = ((\n\t\t\tchunk: string | Uint8Array,\n\t\t\tencodingOrCallback?: BufferEncoding | ((error?: Error | null) => void),\n\t\t\tcallback?: (error?: Error | null) => void,\n\t\t): boolean => {\n\t\t\tconst cb = typeof encodingOrCallback === \"function\" ? encodingOrCallback : callback;\n\t\t\tconst encoding = typeof encodingOrCallback === \"string\" ? encodingOrCallback : undefined;\n\t\t\tconst text = typeof chunk === \"string\" ? chunk : Buffer.from(chunk).toString(encoding);\n\t\t\tif (!handler || this.forwardingExternalWrite) {\n\t\t\t\tthis.noteExternalWrite();\n\t\t\t\trawWrite(text);\n\t\t\t\tcb?.(null);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis.forwardingExternalWrite = true;\n\t\t\ttry {\n\t\t\t\thandler(text);\n\t\t\t} catch {\n\t\t\t\tthis.noteExternalWrite();\n\t\t\t\trawWrite(text);\n\t\t\t} finally {\n\t\t\t\tthis.forwardingExternalWrite = false;\n\t\t\t}\n\t\t\tcb?.(null);\n\t\t\treturn true;\n\t\t}) as typeof process.stdout.write;\n\t}\n\n\tprivate removeExternalStdoutGuard(): void {\n\t\tif (!this.originalStdoutWrite) {\n\t\t\treturn;\n\t\t}\n\t\tprocess.stdout.write = this.originalStdoutWrite;\n\t\tthis.originalStdoutWrite = undefined;\n\t\tthis.rawStdoutWrite = undefined;\n\t}\n\n\tget modifyOtherKeysActive(): boolean {\n\t\treturn this._modifyOtherKeysActive;\n\t}\n\n\tstart(onInput: (data: string) => void, onResize: () => void): void {\n\t\tthis.installExternalStdoutGuard();\n\t\tthis.installExternalStderrObserver();\n\t\tthis.keyboardNegotiationSettled = !keyboardEnhancementEnabled();\n\t\tthis.cursorQueryTimedOut = false;\n\t\tthis.discardingPrivateResponse = false;\n\t\tthis.inputHandler = onInput;\n\t\tthis.resizeHandler = onResize;\n\n\t\t// Save previous state and enable raw mode\n\t\tthis.wasRaw = process.stdin.isRaw || false;\n\t\tif (process.stdin.setRawMode) {\n\t\t\tprocess.stdin.setRawMode(true);\n\t\t}\n\t\tprocess.stdin.resume();\n\n\t\t// stdin carries the same hazard as stdout: when the controlling PTY\n\t\t// disappears (launcher killed, tmux pane closed, SSH dropped) or this\n\t\t// pgrp loses the tty foreground, the next read fails with EIO.\n\t\t// `process.stdin` is an EventEmitter, so an unobserved \"error\" event is\n\t\t// rethrown as an uncaught exception that kills the whole agent process.\n\t\tif (this.stdinErrorHandlerCleanupTimer) {\n\t\t\tclearTimeout(this.stdinErrorHandlerCleanupTimer);\n\t\t\tthis.stdinErrorHandlerCleanupTimer = undefined;\n\t\t}\n\t\tif (!this.stdinErrorHandler) {\n\t\t\t// Swallow only: the stream stays resumable, so if this pgrp regains\n\t\t\t// the tty foreground the session keeps accepting input.\n\t\t\tthis.stdinErrorHandler = () => {};\n\t\t\tsubscribeToStdinErrors(this.stdinErrorHandler);\n\t\t}\n\n\t\t// Enable bracketed paste mode - terminal will wrap pastes in \\x1b[200~ ... \\x1b[201~\n\t\tthis.rawWrite(\"\\x1b[?2004h\");\n\n\t\t// Set up resize handler immediately\n\t\tprocess.stdout.on(\"resize\", this.resizeHandler);\n\n\t\t// Refresh terminal dimensions - they may be stale after suspend/resume\n\t\t// (SIGWINCH is lost while process is stopped). Unix only, best-effort.\n\t\trefreshTerminalDimensions();\n\n\t\t// On Windows, enable ENABLE_VIRTUAL_TERMINAL_INPUT so the console sends\n\t\t// VT escape sequences (e.g. \\x1b[Z for Shift+Tab) instead of raw console\n\t\t// events that lose modifier information. Must run AFTER setRawMode(true)\n\t\t// since that resets console mode flags.\n\t\tthis.enableWindowsVTInput();\n\n\t\t// Query Kitty keyboard protocol and fall back to modifyOtherKeys when DA confirms no Kitty response.\n\t\t// See: https://sw.kovidgoyal.net/kitty/keyboard-protocol/\n\t\tthis.queryAndEnableKittyProtocol();\n\t}\n\n\t/**\n\t * Set up StdinBuffer to split batched input into individual sequences.\n\t * This ensures components receive single events, making matchesKey/isKeyRelease work correctly.\n\t *\n\t * Also watches for Kitty protocol response and enables it when detected.\n\t * This is done here (after stdinBuffer parsing) rather than on raw stdin\n\t * to handle the case where the response arrives split across multiple events.\n\t */\n\tprivate setupStdinBuffer(): void {\n\t\tthis.stdinBuffer = new StdinBuffer({ escapeTimeout: resolveEscapeTimeoutMs() });\n\n\t\t// Forward individual sequences to the input handler\n\t\tthis.stdinBuffer.on(\"data\", (sequence) => {\n\t\t\tif (this.discardingPrivateResponse) {\n\t\t\t\tif (sequence.startsWith(\"\\x1b\")) this.discardingPrivateResponse = false;\n\t\t\t\telse {\n\t\t\t\t\tif (/[\\x40-\\x7e]/.test(sequence)) this.discardingPrivateResponse = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst negotiationSequence = this.readKeyboardProtocolNegotiationSequence(sequence);\n\t\t\tif (negotiationSequence === \"pending\") {\n\t\t\t\tthis.scheduleKeyboardProtocolNegotiationBufferFlush();\n\t\t\t\treturn; // Wait briefly for the rest of a split Kitty response.\n\t\t\t}\n\t\t\tif (this.handleKeyboardProtocolNegotiationSequence(negotiationSequence)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.forwardInputSequence(sequence);\n\t\t});\n\n\t\t// Re-wrap paste content with bracketed paste markers for existing editor handling\n\t\tthis.stdinBuffer.on(\"paste\", (content) => {\n\t\t\tif (this.inputHandler) {\n\t\t\t\tthis.inputHandler(`\\x1b[200~${content}\\x1b[201~`);\n\t\t\t}\n\t\t});\n\n\t\t// Handler that pipes stdin data through the buffer\n\t\tthis.stdinDataHandler = (data: string | Buffer) => {\n\t\t\tthis.stdinBuffer!.process(data);\n\t\t};\n\t}\n\n\t/**\n\t * Query terminal for Kitty keyboard protocol support and enable it if available.\n\t *\n\t * Kitty's progressive enhancement detection requires requesting the desired\n\t * flags before querying them. The trailing DA query is a sentinel supported by\n\t * terminals that do not know Kitty keyboard protocol; receiving DA before a\n\t * Kitty response enables modifyOtherKeys fallback without a startup timeout.\n\t *\n\t * The requested flags are:\n\t * - 1 = disambiguate escape codes\n\t * - 2 = report event types (press/repeat/release)\n\t * - 4 = report alternate keys (shifted key, base layout key)\n\t */\n\tprivate queryAndEnableKittyProtocol(): void {\n\t\tthis.setupStdinBuffer();\n\t\tprocess.stdin.on(\"data\", this.stdinDataHandler!);\n\t\tif (!keyboardEnhancementEnabled()) {\n\t\t\treturn;\n\t\t}\n\t\tif (process.env.TMUX !== undefined || process.env.TMUX_PANE !== undefined) {\n\t\t\tthis.enableModifyOtherKeys();\n\t\t}\n\t\tthis.keyboardProtocolPushed = true;\n\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\t\tthis.rawWrite(KITTY_KEYBOARD_PROTOCOL_QUERY);\n\t}\n\n\tprivate handleKeyboardProtocolNegotiationSequence(\n\t\tnegotiationSequence: KeyboardProtocolNegotiationSequence | undefined,\n\t): boolean {\n\t\tif (!negotiationSequence) return false;\n\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\t\tif (negotiationSequence.type === \"cursor-position\") {\n\t\t\tif (this.cursorQuery?.issued && this.cursorQuery.tmuxPane === undefined) {\n\t\t\t\tconst { type: _type, ...position } = negotiationSequence;\n\t\t\t\tthis.settleCursorQuery(position);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tthis.keyboardNegotiationSettled = true;\n\t\tthis.issueCursorQuery();\n\t\tif (negotiationSequence.type === \"kitty-flags\") {\n\t\t\tif (negotiationSequence.flags !== 0) {\n\t\t\t\tthis.disableModifyOtherKeys();\n\t\t\t\tif (!this._kittyProtocolActive) {\n\t\t\t\t\tthis._kittyProtocolActive = true;\n\t\t\t\t\tsetKittyProtocolActive(true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.enableModifyOtherKeys();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!this._kittyProtocolActive) {\n\t\t\tthis.enableModifyOtherKeys();\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate readKeyboardProtocolNegotiationSequence(\n\t\tsequence: string,\n\t): KeyboardProtocolNegotiationSequence | \"pending\" | undefined {\n\t\tif (this.keyboardProtocolNegotiationBuffer) {\n\t\t\tconst bufferedSequence = this.keyboardProtocolNegotiationBuffer + sequence;\n\t\t\tconst negotiationSequence = parseKeyboardProtocolNegotiationSequence(bufferedSequence);\n\t\t\tif (negotiationSequence) {\n\t\t\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\t\t\t\treturn negotiationSequence;\n\t\t\t}\n\t\t\tif (isKeyboardProtocolNegotiationSequencePrefix(bufferedSequence)) {\n\t\t\t\tthis.setKeyboardProtocolNegotiationBuffer(bufferedSequence);\n\t\t\t\treturn \"pending\";\n\t\t\t}\n\t\t\tthis.flushKeyboardProtocolNegotiationBufferAsInput();\n\t\t}\n\n\t\tconst negotiationSequence = parseKeyboardProtocolNegotiationSequence(sequence);\n\t\tif (negotiationSequence) return negotiationSequence;\n\t\tif (isKeyboardProtocolNegotiationSequencePrefix(sequence)) {\n\t\t\tthis.setKeyboardProtocolNegotiationBuffer(sequence);\n\t\t\treturn \"pending\";\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate setKeyboardProtocolNegotiationBuffer(sequence: string): void {\n\t\tthis.clearKeyboardProtocolNegotiationBufferFlushTimer();\n\t\tthis.keyboardProtocolNegotiationBuffer = sequence;\n\t}\n\n\tprivate clearKeyboardProtocolNegotiationBuffer(): void {\n\t\tthis.clearKeyboardProtocolNegotiationBufferFlushTimer();\n\t\tthis.keyboardProtocolNegotiationBuffer = \"\";\n\t}\n\n\tprivate flushKeyboardProtocolNegotiationBufferAsInput(discardTail = false): void {\n\t\tif (!this.keyboardProtocolNegotiationBuffer) return;\n\t\tconst sequence = this.keyboardProtocolNegotiationBuffer;\n\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\t\tif (/^\\x1b\\[\\?[\\d;]*$/.test(sequence)) {\n\t\t\tthis.discardingPrivateResponse = discardTail;\n\t\t\treturn;\n\t\t}\n\t\tthis.forwardInputSequence(sequence);\n\t}\n\n\tprivate scheduleKeyboardProtocolNegotiationBufferFlush(): void {\n\t\tif (!this.keyboardProtocolNegotiationBuffer || this.keyboardProtocolBufferFlushTimer) return;\n\t\tthis.keyboardProtocolBufferFlushTimer = setTimeout(() => {\n\t\t\tthis.keyboardProtocolBufferFlushTimer = undefined;\n\t\t\tthis.flushKeyboardProtocolNegotiationBufferAsInput(true);\n\t\t}, KEYBOARD_PROTOCOL_RESPONSE_FRAGMENT_TIMEOUT_MS);\n\t}\n\n\tprivate clearKeyboardProtocolNegotiationBufferFlushTimer(): void {\n\t\tif (!this.keyboardProtocolBufferFlushTimer) return;\n\t\tclearTimeout(this.keyboardProtocolBufferFlushTimer);\n\t\tthis.keyboardProtocolBufferFlushTimer = undefined;\n\t}\n\n\tprivate forwardInputSequence(sequence: string): void {\n\t\tif (!this.inputHandler) return;\n\t\tconst shouldDetectNativeShiftEnter =\n\t\t\tsequence === \"\\r\" && (isAppleTerminalSession() || process.platform === \"win32\");\n\t\tconst input = normalizeNativeShiftEnterInput(\n\t\t\tsequence,\n\t\t\tshouldDetectNativeShiftEnter,\n\t\t\tshouldDetectNativeShiftEnter && isNativeModifierPressed(\"shift\"),\n\t\t);\n\t\tthis.inputHandler(input);\n\t}\n\n\tprivate enableModifyOtherKeys(): void {\n\t\tif (this._kittyProtocolActive || this._modifyOtherKeysActive) return;\n\t\tthis.rawWrite(\"\\x1b[>4;2m\");\n\t\tthis._modifyOtherKeysActive = true;\n\t}\n\n\tprivate disableModifyOtherKeys(): void {\n\t\tif (!this._modifyOtherKeysActive) return;\n\t\tthis.rawWrite(\"\\x1b[>4;0m\");\n\t\tthis._modifyOtherKeysActive = false;\n\t}\n\n\t/**\n\t * On Windows, add ENABLE_VIRTUAL_TERMINAL_INPUT (0x0200) to the stdin\n\t * console handle so the terminal sends VT sequences for modified keys\n\t * (e.g. \\x1b[Z for Shift+Tab). Without this, libuv's ReadConsoleInputW\n\t * discards modifier state and Shift+Tab arrives as plain \\t.\n\t */\n\tprivate enableWindowsVTInput(): void {\n\t\tif (process.platform !== \"win32\") return;\n\t\ttry {\n\t\t\tgetNativePlatformHelper()?.enableVirtualTerminalInput?.();\n\t\t} catch {\n\t\t\t// Native helper not available — Shift+Tab won't be distinguishable from Tab.\n\t\t}\n\t}\n\n\tasync drainInput(maxMs = 1000, idleMs = 50): Promise<void> {\n\t\tconst shouldDisableKittyProtocol = this.keyboardProtocolPushed || this._kittyProtocolActive;\n\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\t\tif (shouldDisableKittyProtocol) {\n\t\t\t// Disable Kitty keyboard protocol first so any late key releases\n\t\t\t// do not generate new Kitty escape sequences.\n\t\t\tthis.rawWrite(\"\\x1b[<u\");\n\t\t\tthis.keyboardProtocolPushed = false;\n\t\t\tthis._kittyProtocolActive = false;\n\t\t\tsetKittyProtocolActive(false);\n\t\t}\n\t\tthis.disableModifyOtherKeys();\n\n\t\tconst previousHandler = this.inputHandler;\n\t\tthis.inputHandler = undefined;\n\n\t\tlet lastDataTime = Date.now();\n\t\tconst onData = () => {\n\t\t\tlastDataTime = Date.now();\n\t\t};\n\n\t\tprocess.stdin.on(\"data\", onData);\n\t\tconst endTime = Date.now() + maxMs;\n\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst timeLeft = endTime - now;\n\t\t\t\tif (timeLeft <= 0) break;\n\t\t\t\tif (now - lastDataTime >= idleMs) break;\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, Math.min(idleMs, timeLeft)));\n\t\t\t}\n\t\t} finally {\n\t\t\tprocess.stdin.removeListener(\"data\", onData);\n\t\t\tthis.inputHandler = previousHandler;\n\t\t}\n\t}\n\n\tstop(): void {\n\t\tthis.settleCursorQuery(undefined);\n\t\tthis.stopExternalStderrObservation?.();\n\t\tthis.stopExternalStderrObservation = undefined;\n\t\tif (this.clearProgressInterval()) {\n\t\t\tthis.rawWrite(TERMINAL_PROGRESS_CLEAR_SEQUENCE);\n\t\t}\n\n\t\t// Disable bracketed paste mode\n\t\tthis.rawWrite(\"\\x1b[?2004l\");\n\n\t\tconst shouldDisableKittyProtocol = this.keyboardProtocolPushed || this._kittyProtocolActive;\n\t\tthis.clearKeyboardProtocolNegotiationBuffer();\n\n\t\t// Disable Kitty keyboard protocol if not already done by drainInput()\n\t\tif (shouldDisableKittyProtocol) {\n\t\t\tthis.rawWrite(\"\\x1b[<u\");\n\t\t\tthis.keyboardProtocolPushed = false;\n\t\t\tthis._kittyProtocolActive = false;\n\t\t\tsetKittyProtocolActive(false);\n\t\t}\n\t\tthis.disableModifyOtherKeys();\n\n\t\t// Clean up StdinBuffer\n\t\tif (this.stdinBuffer) {\n\t\t\tthis.stdinBuffer.destroy();\n\t\t\tthis.stdinBuffer = undefined;\n\t\t}\n\n\t\t// Remove event handlers\n\t\tif (this.stdinDataHandler) {\n\t\t\tprocess.stdin.removeListener(\"data\", this.stdinDataHandler);\n\t\t\tthis.stdinDataHandler = undefined;\n\t\t}\n\t\tthis.inputHandler = undefined;\n\t\tif (this.resizeHandler) {\n\t\t\tprocess.stdout.removeListener(\"resize\", this.resizeHandler);\n\t\t\tthis.resizeHandler = undefined;\n\t\t}\n\n\t\t// Pause stdin to prevent any buffered input (e.g., Ctrl+D) from being\n\t\t// re-interpreted after raw mode is disabled. This fixes a race condition\n\t\t// where Ctrl+D could close the parent shell over SSH.\n\t\tprocess.stdin.pause();\n\n\t\t// Restore raw mode state\n\t\tif (process.stdin.setRawMode) {\n\t\t\ttry {\n\t\t\t\tprocess.stdin.setRawMode(this.wasRaw);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isDeadTerminalError(error)) throw error;\n\t\t\t}\n\t\t}\n\n\t\tthis.removeExternalStdoutGuard();\n\n\t\tthis.scheduleStdinErrorHandlerCleanup();\n\t}\n\n\tprivate scheduleStdinErrorHandlerCleanup(): void {\n\t\tif (!this.stdinErrorHandler || this.stdinErrorHandlerCleanupTimer) return;\n\t\t// Keep the guard armed briefly past stop(): a late PTY failure racing\n\t\t// the exit path must not crash the process after the TUI tore down.\n\t\tconst handler = this.stdinErrorHandler;\n\t\tthis.stdinErrorHandlerCleanupTimer = setTimeout(() => {\n\t\t\tthis.stdinErrorHandlerCleanupTimer = undefined;\n\t\t\tif (this.stdinErrorHandler === handler) {\n\t\t\t\tthis.stdinErrorHandler = undefined;\n\t\t\t\tunsubscribeFromStdinErrors(handler);\n\t\t\t}\n\t\t}, STDIN_ERROR_HANDLER_GRACE_MS);\n\t\tthis.stdinErrorHandlerCleanupTimer.unref();\n\t}\n\n\twrite(data: string): void {\n\t\tthis.rawWrite(data);\n\t\tif (this.writeLogPath) {\n\t\t\ttry {\n\t\t\t\tfs.appendFileSync(this.writeLogPath, data, { encoding: \"utf8\" });\n\t\t\t} catch {\n\t\t\t\t// Ignore logging errors\n\t\t\t}\n\t\t}\n\t}\n\n\tget columns(): number {\n\t\treturn process.stdout.columns || Number(process.env.COLUMNS) || 80;\n\t}\n\n\tget rows(): number {\n\t\treturn process.stdout.rows || Number(process.env.LINES) || 24;\n\t}\n\n\tmoveBy(lines: number): void {\n\t\tif (lines > 0) {\n\t\t\t// Move down\n\t\t\tthis.rawWrite(`\\x1b[${lines}B`);\n\t\t} else if (lines < 0) {\n\t\t\t// Move up\n\t\t\tthis.rawWrite(`\\x1b[${-lines}A`);\n\t\t}\n\t\t// lines === 0: no movement\n\t}\n\n\thideCursor(): void {\n\t\tthis.rawWrite(\"\\x1b[?25l\");\n\t}\n\n\tshowCursor(): void {\n\t\tthis.rawWrite(\"\\x1b[?25h\");\n\t}\n\n\tclearLine(): void {\n\t\tthis.rawWrite(\"\\x1b[K\");\n\t}\n\n\tclearFromCursor(): void {\n\t\tthis.rawWrite(\"\\x1b[J\");\n\t}\n\n\tclearScreen(): void {\n\t\tthis.rawWrite(\"\\x1b[2J\\x1b[H\"); // Clear screen and move to home (1,1)\n\t}\n\n\tsetTitle(title: string): void {\n\t\t// OSC 0;title BEL - set terminal window title. Control characters are\n\t\t// stripped so a title cannot terminate the OSC early and leak the rest\n\t\t// onto the screen.\n\t\tconst sanitizedTitle = title.replace(/[\\u0000-\\u001f\\u007f-\\u009f]/g, \"\");\n\t\tthis.rawWrite(`\\x1b]0;${sanitizedTitle}\\x07`);\n\t}\n\n\tsetProgress(active: boolean): void {\n\t\tif (active) {\n\t\t\t// OSC 9;4;3 - indeterminate progress\n\t\t\tthis.rawWrite(TERMINAL_PROGRESS_ACTIVE_SEQUENCE);\n\t\t\tif (!this.progressInterval) {\n\t\t\t\tthis.progressInterval = setInterval(() => {\n\t\t\t\t\tthis.rawWrite(TERMINAL_PROGRESS_ACTIVE_SEQUENCE);\n\t\t\t\t}, TERMINAL_PROGRESS_KEEPALIVE_MS);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.clearProgressInterval();\n\t\t\t// OSC 9;4;0 - clear progress\n\t\t\tthis.rawWrite(TERMINAL_PROGRESS_CLEAR_SEQUENCE);\n\t\t}\n\t}\n\n\tprivate clearProgressInterval(): boolean {\n\t\tif (!this.progressInterval) return false;\n\t\tclearInterval(this.progressInterval);\n\t\tthis.progressInterval = undefined;\n\t\treturn true;\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-cursor-query.d.ts","sourceRoot":"","sources":["../src/tmux-cursor-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,iFAAiF;AACjF,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CA+BrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-cursor-query.js","sourceRoot":"","sources":["../src/tmux-cursor-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CACtC,IAAY,EACZ,QAAgB,EAChB,QAAuB;IAEvB,MAAM,IAAI,GAAG,GAA+B,EAAE;QAC7C,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,QAAQ;gBACtB,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;gBACxB,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE;oBAC3B,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,SAAS;oBAClB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;iBACnC,CAAC,CAAC;YACL,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACR,iFAAiF;YACjF,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,UAAU,CAAC,GAAG,EAAE;YACf,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3F,CAAC,EAAE,EAAE,CAAC,CAAC;IACR,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport type { CursorPosition } from \"./terminal.ts\";\nimport type { TmuxExecFile } from \"./tmux-image-probe.ts\";\n\n/** tmux swallows private DECXCPR. Sample its pane cursor out of band instead. */\nexport function queryTmuxCursorPosition(\n\tpane: string,\n\tdeadline: number,\n\texecFile?: TmuxExecFile,\n): Promise<CursorPosition | undefined> {\n\tconst read = (): CursorPosition | undefined => {\n\t\tconst remaining = deadline - Date.now();\n\t\tif (remaining <= 0) return undefined;\n\t\ttry {\n\t\t\tconst args = [\"display-message\", \"-p\", \"-t\", pane, \"#{cursor_y} #{cursor_x}\"];\n\t\t\tconst output = execFile\n\t\t\t\t? execFile(\"tmux\", args)\n\t\t\t\t: execFileSync(\"tmux\", args, {\n\t\t\t\t\t\tencoding: \"utf8\",\n\t\t\t\t\t\ttimeout: remaining,\n\t\t\t\t\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\t\t\t\t});\n\t\t\tconst match = /^(\\d+) (\\d+)$/.exec(output.trim());\n\t\t\tif (!match || Date.now() >= deadline) return undefined;\n\t\t\tconst row = Number(match[1]) + 1;\n\t\t\tconst column = Number(match[2]) + 1;\n\t\t\treturn Number.isSafeInteger(row) && Number.isSafeInteger(column) ? { row, column } : undefined;\n\t\t} catch {\n\t\t\t// Missing tmux, detached panes and command timeouts all leave placement unknown.\n\t\t\treturn undefined;\n\t\t}\n\t};\n\tconst first = read();\n\tif (!first || deadline - Date.now() <= 10) return Promise.resolve(undefined);\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(() => {\n\t\t\tconst second = read();\n\t\t\tresolve(second?.row === first.row && second.column === first.column ? second : undefined);\n\t\t}, 10);\n\t});\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-focus.d.ts","sourceRoot":"","sources":["../src/tmux-focus.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,kBAAgB,CAAC;AACpD,eAAO,MAAM,uBAAuB,kBAAgB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAUlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-focus.js","sourceRoot":"","sources":["../src/tmux-focus.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAOrD,MAAM,UAAU,qBAAqB,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClG,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE/C,OAAO;QACN,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACvC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;KAClD,CAAC;AACH,CAAC","sourcesContent":["export const ENABLE_FOCUS_REPORTING = \"\\x1b[?1004h\";\nexport const DISABLE_FOCUS_REPORTING = \"\\x1b[?1004l\";\n\nexport interface TmuxFocusEvent {\n\treadonly event: \"in\" | \"out\" | null;\n\treadonly data: string;\n}\n\nexport function consumeTmuxFocusEvent(data: string): TmuxFocusEvent {\n\tconst focusIn = data.indexOf(\"\\x1b[I\");\n\tconst focusOut = data.indexOf(\"\\x1b[O\");\n\tconst index = focusIn === -1 ? focusOut : focusOut === -1 ? focusIn : Math.min(focusIn, focusOut);\n\tif (index === -1) return { event: null, data };\n\n\treturn {\n\t\tevent: index === focusIn ? \"in\" : \"out\",\n\t\tdata: data.slice(0, index) + data.slice(index + 3),\n\t};\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-image-capability.d.ts","sourceRoot":"","sources":["../src/tmux-image-capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAEtE,MAAM,MAAM,uBAAuB,GAChC,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,QAAQ,GACR,QAAQ,GACR,gBAAgB,GAChB,yBAAyB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAC1B;IACA,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACpC,GACD;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAOzE,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,yBAAyB,CAEjG;AA8BD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAK1G;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,yBAAyB,GACjC,iBAAiB,CAcnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-image-capability.js","sourceRoot":"","sources":["../src/tmux-image-capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TmuxDetectedState, TmuxImageState } from \"./tmux-image-probe.ts\";\n\nexport type TmuxKittyTerminal = \"kitty\" | \"ghostty\" | \"warp\";\nexport type TmuxKittyPlacement = \"placeholder\" | \"direct\";\nexport type TmuxKittyTerminalOverride = TmuxKittyTerminal | undefined;\n\nexport type TmuxImageDisabledReason =\n\t| \"outside-tmux\"\n\t| \"probe-unavailable\"\n\t| \"unsupported-version\"\n\t| \"passthrough-off\"\n\t| \"focus-events-off\"\n\t| \"multiple-clients\"\n\t| \"nested\"\n\t| \"hidden\"\n\t| \"unknown-client\"\n\t| \"unsafe-direct-placement\";\n\nexport type TmuxImageDecision =\n\t| {\n\t\t\treadonly enabled: true;\n\t\t\treadonly placement: TmuxKittyPlacement;\n\t\t\treadonly terminal: TmuxKittyTerminal;\n\t }\n\t| { readonly enabled: false; readonly reason: TmuxImageDisabledReason };\n\ninterface TmuxKittyIdentity {\n\treadonly placement: TmuxKittyPlacement;\n\treadonly terminal: TmuxKittyTerminal;\n}\n\nexport function parseTmuxKittyTerminalOverride(raw: string | undefined): TmuxKittyTerminalOverride {\n\treturn raw === \"kitty\" || raw === \"ghostty\" || raw === \"warp\" ? raw : undefined;\n}\n\nfunction identityForTerminal(terminal: TmuxKittyTerminal): TmuxKittyIdentity {\n\treturn {\n\t\tterminal,\n\t\tplacement: terminal === \"warp\" ? \"direct\" : \"placeholder\",\n\t};\n}\n\nfunction identifyTmuxKittyClient(\n\tclientTermname: string,\n\toverride: TmuxKittyTerminalOverride,\n): TmuxKittyIdentity | null {\n\tif (override) return identityForTerminal(override);\n\tconst term = clientTermname.trim().toLowerCase();\n\tif (term.includes(\"kitty\")) return identityForTerminal(\"kitty\");\n\tif (term.includes(\"ghostty\")) return identityForTerminal(\"ghostty\");\n\tif (term.includes(\"warp\")) return identityForTerminal(\"warp\");\n\treturn null;\n}\n\nfunction topologyReason(state: TmuxDetectedState): TmuxImageDisabledReason | null {\n\tif (state.supportTier === \"unsupported\") return \"unsupported-version\";\n\tif (state.nested) return \"nested\";\n\tif (state.clientCount !== 1) return \"multiple-clients\";\n\tif (!state.focusEvents) return \"focus-events-off\";\n\tif (state.allowPassthrough === \"off\") return \"passthrough-off\";\n\treturn null;\n}\n\nexport function canTrackTmuxImageFocus(state: TmuxImageState, override: TmuxKittyTerminalOverride): boolean {\n\tif (state.kind !== \"tmux\" || topologyReason(state)) return false;\n\tconst identity = identifyTmuxKittyClient(state.clientTermname, override);\n\tif (!identity) return false;\n\treturn identity.placement !== \"direct\" || state.allowPassthrough === \"on\";\n}\n\nexport function decideTmuxImageCapability(\n\tstate: TmuxImageState,\n\toverride: TmuxKittyTerminalOverride,\n): TmuxImageDecision {\n\tif (state.kind === \"outside\") return { enabled: false, reason: \"outside-tmux\" };\n\tif (state.kind === \"unavailable\") return { enabled: false, reason: \"probe-unavailable\" };\n\n\tconst topology = topologyReason(state);\n\tif (topology) return { enabled: false, reason: topology };\n\tif (!state.visible) return { enabled: false, reason: \"hidden\" };\n\n\tconst identity = identifyTmuxKittyClient(state.clientTermname, override);\n\tif (!identity) return { enabled: false, reason: \"unknown-client\" };\n\tif (identity.placement === \"direct\" && state.allowPassthrough !== \"on\") {\n\t\treturn { enabled: false, reason: \"unsafe-direct-placement\" };\n\t}\n\treturn { enabled: true, placement: identity.placement, terminal: identity.terminal };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-image-probe.d.ts","sourceRoot":"","sources":["../src/tmux-image-probe.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;AAE7E,UAAU,aAAa;IACtB,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CACzC;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAAC;CACrD;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAEzF,eAAO,MAAM,iBAAiB,6LAC6J,CAAC;AA+B5L,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAOhE;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,GAAG,oBAAoB,CAM7G;AAuBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA6ClE;AAED,wBAAgB,mBAAmB,CAClC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,EAC/D,QAAQ,GAAE,YAA8B,GACtC,cAAc,CAkBhB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tmux-image-probe.js","sourceRoot":"","sources":["../src/tmux-image-probe.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFileSync } from \"node:child_process\";\n\ninterface CellDimensions {\n\twidthPx: number;\n\theightPx: number;\n}\n\nexport type TmuxSupportTier = \"unsupported\" | \"on-only\" | \"on-and-all\";\nexport type TmuxAllowPassthrough = \"off\" | \"on\" | \"all\";\n\nexport type TmuxExecFile = (file: string, args: readonly string[]) => string;\n\ninterface TmuxBaseState {\n\treadonly supportTier: TmuxSupportTier;\n\treadonly allowPassthrough: TmuxAllowPassthrough;\n\treadonly focusEvents: boolean;\n\treadonly paneActive: boolean;\n\treadonly windowActive: boolean;\n\treadonly visible: boolean;\n\treadonly clientCount: number;\n\treadonly clientTermname: string;\n\treadonly nested: boolean;\n\treadonly hyperlinks: boolean;\n\treadonly cellDimensions?: CellDimensions;\n}\n\nexport interface TmuxOutsideState extends TmuxBaseState {\n\treadonly kind: \"outside\";\n}\n\nexport interface TmuxUnavailableState extends TmuxBaseState {\n\treadonly kind: \"unavailable\";\n\treadonly reason: \"probe-failed\" | \"malformed-output\";\n}\n\nexport interface TmuxDetectedState extends TmuxBaseState {\n\treadonly kind: \"tmux\";\n\treadonly version: string;\n}\n\nexport type TmuxImageState = TmuxOutsideState | TmuxUnavailableState | TmuxDetectedState;\n\nexport const TMUX_IMAGE_FORMAT =\n\t\"#{version}|#{allow-passthrough}|#{focus-events}|#{pane_active}|#{window_active}|#{session_attached}|#{client_termname}|#{client_cell_width}|#{client_cell_height}|#{client_termfeatures}\";\n\nconst DISABLED_STATE = {\n\tsupportTier: \"unsupported\",\n\tallowPassthrough: \"off\",\n\tfocusEvents: false,\n\tpaneActive: false,\n\twindowActive: false,\n\tvisible: false,\n\tclientCount: 0,\n\tclientTermname: \"\",\n\tnested: false,\n\thyperlinks: false,\n} as const;\n\nfunction defaultExecFile(file: string, args: readonly string[]): string {\n\treturn execFileSync(file, [...args], {\n\t\tencoding: \"utf8\",\n\t\ttimeout: 250,\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t});\n}\n\nfunction parseTmuxVersion(version: string): readonly [major: number, minor: number] | null {\n\tconst match = /^(?:next-)?(\\d+)\\.(\\d+)/.exec(version.trim());\n\tif (!match) return null;\n\tconst major = Number.parseInt(match[1] ?? \"\", 10);\n\tconst minor = Number.parseInt(match[2] ?? \"\", 10);\n\treturn Number.isFinite(major) && Number.isFinite(minor) ? [major, minor] : null;\n}\n\nexport function tmuxSupportTier(version: string): TmuxSupportTier {\n\tconst parsed = parseTmuxVersion(version);\n\tif (!parsed) return \"unsupported\";\n\tconst [major, minor] = parsed;\n\tif (major > 3 || (major === 3 && minor >= 4)) return \"on-and-all\";\n\tif (major === 3 && minor === 3) return \"on-only\";\n\treturn \"unsupported\";\n}\n\nexport function normalizeTmuxAllowPassthrough(raw: string, supportTier: TmuxSupportTier): TmuxAllowPassthrough {\n\tif (supportTier === \"unsupported\") return \"off\";\n\tconst value = raw.trim().toLowerCase();\n\tif (value === \"1\" || value === \"on\") return \"on\";\n\tif (value === \"all\" && supportTier === \"on-and-all\") return \"all\";\n\treturn \"off\";\n}\n\nfunction parseBoolean(raw: string): boolean {\n\tconst value = raw.trim().toLowerCase();\n\treturn value === \"1\" || value === \"on\";\n}\n\nfunction parsePositiveInteger(raw: string): number | undefined {\n\tif (!/^\\d+$/.test(raw)) return undefined;\n\tconst value = Number.parseInt(raw, 10);\n\treturn value > 0 ? value : undefined;\n}\n\nfunction parseClientCount(raw: string): number {\n\tif (!/^\\d+$/.test(raw)) return 0;\n\treturn Number.parseInt(raw, 10);\n}\n\nfunction isNestedClient(clientTermname: string): boolean {\n\tconst term = clientTermname.trim().toLowerCase();\n\treturn term.startsWith(\"tmux\") || term.startsWith(\"screen\");\n}\n\nexport function parseTmuxImageState(output: string): TmuxImageState {\n\tconst fields = output.trim().split(\"|\");\n\tif (fields.length !== 10) {\n\t\treturn { kind: \"unavailable\", reason: \"malformed-output\", ...DISABLED_STATE };\n\t}\n\n\tconst [\n\t\tversion = \"\",\n\t\trawAllow = \"\",\n\t\trawFocusEvents = \"\",\n\t\trawPaneActive = \"\",\n\t\trawWindowActive = \"\",\n\t\trawClientCount = \"\",\n\t\trawClientTermname = \"\",\n\t\trawCellWidth = \"\",\n\t\trawCellHeight = \"\",\n\t\trawTermfeatures = \"\",\n\t] = fields;\n\tconst supportTier = tmuxSupportTier(version);\n\tconst clientCount = parseClientCount(rawClientCount);\n\tconst paneActive = parseBoolean(rawPaneActive);\n\tconst windowActive = parseBoolean(rawWindowActive);\n\tconst clientTermname = rawClientTermname.trim();\n\tconst widthPx = parsePositiveInteger(rawCellWidth);\n\tconst heightPx = parsePositiveInteger(rawCellHeight);\n\tconst cellDimensions = widthPx && heightPx ? { widthPx, heightPx } : undefined;\n\n\treturn {\n\t\tkind: \"tmux\",\n\t\tversion: version.trim(),\n\t\tsupportTier,\n\t\tallowPassthrough: normalizeTmuxAllowPassthrough(rawAllow, supportTier),\n\t\tfocusEvents: parseBoolean(rawFocusEvents),\n\t\tpaneActive,\n\t\twindowActive,\n\t\tvisible: paneActive && windowActive && clientCount === 1,\n\t\tclientCount,\n\t\tclientTermname,\n\t\tnested: isNestedClient(clientTermname),\n\t\thyperlinks: rawTermfeatures\n\t\t\t.split(\",\")\n\t\t\t.map((feature) => feature.trim())\n\t\t\t.includes(\"hyperlinks\"),\n\t\t...(cellDimensions ? { cellDimensions } : {}),\n\t};\n}\n\nexport function probeTmuxImageState(\n\tenv: Readonly<Record<string, string | undefined>> = process.env,\n\texecFile: TmuxExecFile = defaultExecFile,\n): TmuxImageState {\n\tconst term = env.TERM?.toLowerCase() ?? \"\";\n\tif (!env.TMUX && !term.startsWith(\"tmux\")) {\n\t\treturn { kind: \"outside\", ...DISABLED_STATE };\n\t}\n\n\tconst pane = env.TMUX_PANE;\n\tconst args = [\"display-message\", \"-p\"];\n\tif (pane && /^%\\d+$/.test(pane)) {\n\t\targs.push(\"-t\", pane);\n\t}\n\targs.push(TMUX_IMAGE_FORMAT);\n\n\ttry {\n\t\treturn parseTmuxImageState(execFile(\"tmux\", args));\n\t} catch {\n\t\treturn { kind: \"unavailable\", reason: \"probe-failed\", ...DISABLED_STATE };\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui-alt-screen.d.ts","sourceRoot":"","sources":["../src/tui-alt-screen.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui-alt-screen.js","sourceRoot":"","sources":["../src/tui-alt-screen.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tAltScreenSearchComponent,\n\tAltScreenSearchIndex,\n\ttype AltScreenSearchMatch,\n\tgetAltScreenSearchMatchKey,\n} from \"./alt-screen-search.ts\";\nimport { AltScreenFlashContainer } from \"./components/alt-screen-flash.ts\";\nimport { ScrollView } from \"./components/scroll-view.ts\";\nimport { getKeybindings } from \"./keybindings.ts\";\nimport { isKeyRelease } from \"./keys.ts\";\nimport {\n\tgetLayoutBoxesAt,\n\tgetScrollbarGeometry,\n\tgetScrollViewBox,\n\tgetScrollViewsAt,\n\ttype LayoutFrame,\n\trenderLayoutFrame,\n\ttype ScrollbarGeometry,\n} from \"./layout.ts\";\nimport { getLayoutNode } from \"./layout-node.ts\";\nimport { decodeMouseButton, isMouseSequence, parseSgrMouseEvent, parseWheelEvent } from \"./mouse-input.ts\";\nimport type { Terminal } from \"./terminal.ts\";\nimport {\n\tdeleteAllKittyImages,\n\tdeleteAllKittyPlacements,\n\tdeleteKittyImage,\n\tgetCapabilities,\n\tgetKittyImagePlacement,\n\ttype ImageProtocol,\n\tisImageLine,\n\tsetCapabilities,\n\ttype TerminalCapabilities,\n} from \"./terminal-image.ts\";\nimport {\n\ttype Component,\n\tContainer,\n\tCURSOR_MARKER,\n\tcompositeTuiLine,\n\tdispatchMouseEvent,\n\ttype OverlayHandle,\n\tretargetMouseEvent,\n\tTuiBase,\n\ttype TuiMouseButton,\n\ttype TuiMouseDispatchResult,\n\ttype TuiMouseDispatchTarget,\n\ttype TuiMouseEvent,\n\ttype TuiStopOptions,\n\tVIEWPORT_TUI,\n\ttype ViewportTUI,\n} from \"./tui.ts\";\nimport {\n\textractAnsiCode,\n\tgetGraphemeCellRange,\n\tgetOsc8LinkAtColumn,\n\tgetWordSegmenter,\n\tsliceByColumn,\n\tstripTerminalSequences,\n\ttruncateToWidth,\n\tvisibleWidth,\n} from \"./utils.ts\";\n\nconst ENTER_ALT_SCREEN = \"\\x1b[?1049h\";\nconst EXIT_ALT_SCREEN = \"\\x1b[?1049l\";\nconst DISABLE_AUTOWRAP = \"\\x1b[?7l\";\nconst ENABLE_AUTOWRAP = \"\\x1b[?7h\";\nconst ENABLE_BUTTON_MOTION_MOUSE = \"\\x1b[?1000h\\x1b[?1002h\\x1b[?1004h\\x1b[?1006h\";\nconst ENABLE_ALL_MOTION_MOUSE = \"\\x1b[?1000h\\x1b[?1002h\\x1b[?1003h\\x1b[?1004h\\x1b[?1006h\";\nconst DISABLE_MOUSE = \"\\x1b[?1006l\\x1b[?1004l\\x1b[?1003l\\x1b[?1002l\\x1b[?1000l\";\nconst FOCUS_IN = \"\\x1b[I\";\nconst FOCUS_OUT = \"\\x1b[O\";\nconst BEGIN_SYNCHRONIZED_OUTPUT = \"\\x1b[?2026h\";\nconst END_SYNCHRONIZED_OUTPUT = \"\\x1b[?2026l\";\nconst OSC133_ZONE_PREFIX = /^(?:\\x1b\\]133;[ABC](?:\\x07|\\x1b\\\\))+/;\nconst OSC133_PROMPT_START = /^\\x1b\\]133;A(?:\\x07|\\x1b\\\\)/;\nconst PAGE_SCROLL_OVERLAP = 4;\nconst ALT_WHEEL_SCROLL_MULTIPLIER = 5;\nconst MAX_CACHED_OFFSCREEN_KITTY_IMAGES = 16;\nconst MAX_CACHED_OFFSCREEN_KITTY_TRANSMISSION_BYTES = 32 * 1024 * 1024;\nconst MAX_CACHED_OFFSCREEN_KITTY_DECODED_BYTES = 64 * 1024 * 1024;\nconst DOUBLE_CLICK_INTERVAL_MS = 500;\n// Regular mode delegates double-click selection to the terminal emulator. Fullscreen owns mouse selection,\n// so mirror common terminal word-selection behavior by keeping paths and kebab-case tokens whole.\nconst TERMINAL_WORD_SELECTION_JOINERS = new Set([\"/\", \"-\"]);\nconst wordSegmenter = getWordSegmenter();\n\ninterface CachedKittyImage {\n\ttransmissionGeneration: number;\n\ttransmissionBytes: number;\n\testimatedDecodedBytes: number;\n}\n\ninterface SelectionPoint {\n\trow: number;\n\tcol: number;\n\tscrollView?: ScrollView;\n\t/** Whether this point lies between terminal cells rather than on a cell. */\n\tboundary?: boolean;\n}\n\ninterface SelectionRange {\n\tstart: SelectionPoint;\n\tend: SelectionPoint;\n}\n\ntype SelectionGranularity = \"character\" | \"word\" | \"line\";\n\ninterface ClickTarget {\n\ttimestamp: number;\n\tcount: number;\n\trow: number;\n\tscrollView?: ScrollView;\n\twordStart: number;\n\twordEnd: number;\n}\n\ninterface SgrMouseEvent {\n\tbutton: number;\n\tx: number;\n\ty: number;\n\trelease: boolean;\n}\n\ninterface WheelEvent {\n\tdirection: -1 | 1;\n\tx: number;\n\ty: number;\n\tbutton: number;\n}\n\ninterface ScrollbarDrag {\n\tscrollView: ScrollView;\n\tgrabOffset: number;\n}\n\ninterface ScrollbarTarget {\n\tscrollView: ScrollView;\n\tgeometry: ScrollbarGeometry;\n}\n\ninterface ScrollToEndIndicatorRect {\n\trow: number;\n\tcolumn: number;\n\twidth: number;\n}\n\ntype SearchSelectionMode = \"query\" | \"retain\" | \"next\" | \"previous\";\n\ninterface ActiveSearch {\n\tcomponent: AltScreenSearchComponent;\n\tindex: AltScreenSearchIndex;\n\toverlay?: OverlayHandle;\n\tquery: string;\n\tmatches: AltScreenSearchMatch[];\n\tselectedIndex: number;\n\tselectedKey?: string;\n\tanchorRow: number;\n\tselectionMode: SearchSelectionMode;\n}\n\ninterface SearchHighlightRange {\n\tstartCol: number;\n\tendCol: number;\n\tcurrent: boolean;\n}\n\nexport interface TuiAltScreenOptions {\n\t/** Number of logical lines moved for each mouse-wheel event. */\n\twheelScrollLines?: number;\n\t/** Capture mouse events for viewport scrolling and application-owned text selection. */\n\tmouse?: boolean;\n\t/** Style a non-current transcript search match. */\n\tsearchMatchStyle?: (text: string) => string;\n\t/** Style the current transcript search match. */\n\tsearchCurrentMatchStyle?: (text: string) => string;\n\t/** Style a transcript search navigation button. */\n\tsearchNavigationButtonStyle?: (text: string, hovered: boolean) => string;\n\t/**\n\t * Render a clickable jump-to-end label. It is centered on the last row of a follow-end\n\t * primary scroll view while that view is scrolled away from its end.\n\t */\n\tscrollToEndIndicator?: () => string;\n\t/** Open an OSC 8 hyperlink activated with a primary-button click. */\n\topenUrl?: (url: string) => void;\n\t/** Handle an unmodified secondary-button press for clipboard paste. Currently enabled on Windows only. */\n\tonRightClickPaste?: () => void;\n\t/** Automatically copy selected text to the clipboard on mouse release (default: true). */\n\tcopyOnSelect?: boolean;\n\t/**\n\t * Copy selected text to the system clipboard. Return `true` on success; the caller flashes\n\t * an error otherwise. When omitted, the selection is copied via an OSC 52 write.\n\t */\n\tcopySelection?: (text: string) => Promise<boolean>;\n}\n\n/** Alternate-screen TUI with a scrollable, application-owned viewport. */\nexport class TuiAltScreen extends TuiBase implements ViewportTUI {\n\treadonly mode = \"fullscreen\" as const;\n\treadonly [VIEWPORT_TUI] = true as const;\n\tprivate previousScreen: string[] = [];\n\tprivate lastDocument: string[] = [];\n\tprivate previousScreenWidth = 0;\n\tprivate previousScreenHeight = 0;\n\tprivate layoutRoot: Component | undefined;\n\tprivate currentLayout: LayoutFrame | undefined;\n\tprivate readonly implicitDocument: Component;\n\tprivate readonly implicitScrollView: ScrollView;\n\tprivate readonly flashes: AltScreenFlashContainer;\n\tprivate altScreenActive = false;\n\tprivate imageProtocol: ImageProtocol = null;\n\tprivate savedCapabilities?: TerminalCapabilities;\n\tprivate readonly uploadedKittyImages = new Map<number, CachedKittyImage>();\n\tprivate selectionAnchor?: SelectionPoint;\n\tprivate selectionFocus?: SelectionPoint;\n\tprivate selectionGranularity: SelectionGranularity = \"character\";\n\tprivate selectionInitialRange?: SelectionRange;\n\tprivate lastClick?: ClickTarget;\n\tprivate selectionDragPointer?: { x: number; y: number };\n\tprivate selectionAutoScrollDirection: -1 | 0 | 1 = 0;\n\tprivate selectionAutoScrollTimer?: NodeJS.Timeout;\n\tprivate selectionPressActive = false;\n\tprivate scrollbarDrag?: ScrollbarDrag;\n\tprivate scrollbarHover?: ScrollView;\n\tprivate scrollToEndIndicatorRect?: ScrollToEndIndicatorRect;\n\tprivate activeSearch?: ActiveSearch;\n\tprivate pressedUrl?: string;\n\tprivate selectionDragged = false;\n\tprivate mouseCapture?: TuiMouseDispatchTarget;\n\tprivate mousePressTarget?: TuiMouseDispatchTarget;\n\tprivate mousePressPoint?: { x: number; y: number };\n\tprivate mousePressMoved = false;\n\tprivate lastComponentClick?: {\n\t\ttimestamp: number;\n\t\tcount: number;\n\t\tcomponent: Component;\n\t\tx: number;\n\t\ty: number;\n\t};\n\tprivate readonly wheelScrollLines: number;\n\tprivate readonly mouseEnabled: boolean;\n\tprivate readonly searchMatchStyle: (text: string) => string;\n\tprivate readonly searchCurrentMatchStyle: (text: string) => string;\n\tprivate readonly searchNavigationButtonStyle: (text: string, hovered: boolean) => string;\n\tprivate readonly scrollToEndIndicator?: () => string;\n\tprivate readonly openUrl?: (url: string) => void;\n\tprivate readonly onRightClickPaste?: () => void;\n\tprivate copyOnSelect: boolean;\n\tprivate readonly copySelection?: (text: string) => Promise<boolean>;\n\n\tconstructor(\n\t\tterminal: Terminal,\n\t\tshowHardwareCursor?: boolean,\n\t\tlogDirectory?: string,\n\t\toptions: TuiAltScreenOptions = {},\n\t) {\n\t\tsuper(terminal, showHardwareCursor, logDirectory);\n\t\tthis.implicitDocument = {\n\t\t\trender: (width) => super.render(width),\n\t\t\thandleMouse: (event) => super.handleMouse(event),\n\t\t\tinvalidate: () => {\n\t\t\t\tfor (const child of this.children) child.invalidate();\n\t\t\t},\n\t\t};\n\t\tthis.implicitScrollView = new ScrollView(this.implicitDocument, { follow: \"end\", primary: true });\n\t\tthis.flashes = new AltScreenFlashContainer(() => this.requestRender());\n\t\tthis.wheelScrollLines = Math.max(1, Math.floor(options.wheelScrollLines ?? 1));\n\t\tthis.mouseEnabled = options.mouse ?? true;\n\t\tthis.searchMatchStyle = options.searchMatchStyle ?? ((text) => `\\x1b[4m${text}\\x1b[24m`);\n\t\tthis.searchCurrentMatchStyle = options.searchCurrentMatchStyle ?? ((text) => `\\x1b[1;7m${text}\\x1b[22;27m`);\n\t\tthis.searchNavigationButtonStyle = options.searchNavigationButtonStyle ?? ((text) => text);\n\t\tthis.scrollToEndIndicator = options.scrollToEndIndicator;\n\t\tthis.openUrl = options.openUrl;\n\t\tthis.onRightClickPaste = options.onRightClickPaste;\n\t\tthis.copyOnSelect = options.copyOnSelect ?? true;\n\t\tthis.copySelection = options.copySelection;\n\t\tthis.addInputListener((data) => this.handleViewportInput(data));\n\t}\n\n\tget viewportTop(): number {\n\t\treturn this.getPrimaryScrollView().scrollTop;\n\t}\n\n\tget isFollowingOutput(): boolean {\n\t\treturn this.getPrimaryScrollView().isFollowingEnd;\n\t}\n\n\tgetCopyOnSelect(): boolean {\n\t\treturn this.copyOnSelect;\n\t}\n\n\tsetCopyOnSelect(enabled: boolean): void {\n\t\tthis.copyOnSelect = enabled;\n\t}\n\n\t/** Whether the fullscreen viewport has a non-empty active text selection. */\n\thasActiveSelection(): boolean {\n\t\treturn this.getActiveSelectionText() !== undefined;\n\t}\n\n\t/** Copy the active fullscreen text selection, if any, using the configured selection clipboard path. */\n\tasync copyActiveSelectionToClipboard(): Promise<boolean> {\n\t\tconst text = this.getActiveSelectionText();\n\t\tif (!text) return false;\n\t\treturn this.copyTextToClipboard(text);\n\t}\n\n\tsetLayoutRoot(component: Component | undefined): void {\n\t\tif (this.layoutRoot === component) return;\n\t\tthis.layoutRoot = component;\n\t\tthis.currentLayout = undefined;\n\t\tthis.requestRender();\n\t}\n\n\toverride render(width: number): string[] {\n\t\treturn this.layoutRoot?.render(width) ?? super.render(width);\n\t}\n\n\tprotected override getMountedRoots(): readonly Component[] {\n\t\treturn this.layoutRoot ? [this.layoutRoot] : this.children;\n\t}\n\n\tprivate getPrimaryScrollView(): ScrollView {\n\t\treturn this.currentLayout?.primaryScrollView ?? this.implicitScrollView;\n\t}\n\n\tprotected override beforeTerminalStart(): void {\n\t\tthis.stopSelectionAutoScroll();\n\t\tthis.selectionPressActive = false;\n\t\tthis.stopScrollbarHover();\n\t\tthis.stopScrollbarDrag();\n\t\tthis.flashes.dispose();\n\t\tthis.altScreenActive = true;\n\t\tconst capabilities = getCapabilities();\n\t\tthis.imageProtocol = capabilities.images;\n\t\tthis.uploadedKittyImages.clear();\n\t\tif (capabilities.images === \"iterm2\") {\n\t\t\tthis.savedCapabilities = capabilities;\n\t\t\tsetCapabilities({ ...capabilities, images: null });\n\t\t\tthis.invalidate();\n\t\t}\n\t\tthis.lastDocument = [];\n\t\tthis.selectionAnchor = undefined;\n\t\tthis.selectionFocus = undefined;\n\t\tthis.selectionGranularity = \"character\";\n\t\tthis.selectionInitialRange = undefined;\n\t\tthis.lastClick = undefined;\n\t\tthis.pressedUrl = undefined;\n\t\tthis.selectionDragged = false;\n\t\tthis.clearComponentMouseGesture();\n\t\tthis.lastComponentClick = undefined;\n\t\tthis.resetRenderState();\n\t\tconst term = process.env.TERM?.toLowerCase() ?? \"\";\n\t\t// Multiplexers can lag when every pointer movement is forwarded. Button-motion\n\t\t// tracking preserves clicks, wheel events, selections, and scrollbar dragging.\n\t\tconst mouseSequence =\n\t\t\tprocess.env.TMUX !== undefined ||\n\t\t\tprocess.env.ZELLIJ !== undefined ||\n\t\t\tprocess.env.STY !== undefined ||\n\t\t\tterm.startsWith(\"tmux\") ||\n\t\t\tterm.startsWith(\"screen\")\n\t\t\t\t? ENABLE_BUTTON_MOTION_MOUSE\n\t\t\t\t: ENABLE_ALL_MOTION_MOUSE;\n\t\tthis.terminal.write(\n\t\t\t`${ENTER_ALT_SCREEN}${DISABLE_AUTOWRAP}${this.mouseEnabled ? mouseSequence : \"\"}\\x1b[2J\\x1b[H\\x1b[?25l`,\n\t\t);\n\t}\n\n\tprotected override beforeTerminalStop(_options: TuiStopOptions): void {\n\t\tthis.closeSearch();\n\t\tthis.stopSelectionAutoScroll();\n\t\tthis.selectionPressActive = false;\n\t\tthis.stopScrollbarHover();\n\t\tthis.stopScrollbarDrag();\n\t\tthis.clearComponentMouseGesture();\n\t\tthis.flashes.dispose();\n\t\tif (!this.altScreenActive) return;\n\t\tthis.terminal.write(\n\t\t\t`${BEGIN_SYNCHRONIZED_OUTPUT}${this.deleteAltScreenKittyImages()}${this.mouseEnabled ? DISABLE_MOUSE : \"\"}${ENABLE_AUTOWRAP}${END_SYNCHRONIZED_OUTPUT}`,\n\t\t);\n\t\tthis.uploadedKittyImages.clear();\n\t}\n\n\tprotected override afterTerminalStop(options: TuiStopOptions): void {\n\t\tif (!this.altScreenActive) return;\n\t\tthis.altScreenActive = false;\n\t\tif (options.preserveScreen) {\n\t\t\tthis.terminal.write(`${BEGIN_SYNCHRONIZED_OUTPUT}${EXIT_ALT_SCREEN}\\x1b[?25h${END_SYNCHRONIZED_OUTPUT}`);\n\t\t} else {\n\t\t\tconst width = Math.max(1, this.terminal.columns);\n\t\t\tconst documentLines = this.render(width).map((line) => line.replace(OSC133_ZONE_PREFIX, \"\"));\n\t\t\tthis.lastDocument = this.applyLineResets(documentLines.map((line) => line.replaceAll(CURSOR_MARKER, \"\"))).map(\n\t\t\t\t(line) => (isImageLine(line) || visibleWidth(line) <= width ? line : sliceByColumn(line, 0, width, true)),\n\t\t\t);\n\t\t\tlet buffer = `${BEGIN_SYNCHRONIZED_OUTPUT}${EXIT_ALT_SCREEN}${DISABLE_AUTOWRAP}`;\n\t\t\tfor (let row = 0; row < this.lastDocument.length; row++) {\n\t\t\t\tif (row > 0) buffer += \"\\r\\n\";\n\t\t\t\tbuffer += `\\r\\x1b[2K${this.lastDocument[row] ?? \"\"}`;\n\t\t\t}\n\t\t\tbuffer += `\\x1b[0m${ENABLE_AUTOWRAP}\\r\\n\\x1b[?25h${END_SYNCHRONIZED_OUTPUT}`;\n\t\t\tthis.terminal.write(buffer);\n\t\t}\n\t\tif (this.savedCapabilities) {\n\t\t\tsetCapabilities(this.savedCapabilities);\n\t\t\tthis.savedCapabilities = undefined;\n\t\t}\n\t}\n\n\tprivate deleteAltScreenKittyImages(): string {\n\t\treturn this.imageProtocol === \"kitty\" ? deleteAllKittyImages() : \"\";\n\t}\n\n\tprivate prepareKittyScreen(screen: string[]): { lines: string[]; evictedImageDeletion: string } {\n\t\tconst visibleImageIds = new Set<number>();\n\t\tconst lines = screen.map((line) => {\n\t\t\tconst placement = getKittyImagePlacement(line);\n\t\t\tif (!placement) return line;\n\t\t\tvisibleImageIds.add(placement.imageId);\n\n\t\t\tconst cachedImage = this.uploadedKittyImages.get(placement.imageId);\n\t\t\tconst nextCachedImage = {\n\t\t\t\ttransmissionGeneration: placement.transmissionGeneration,\n\t\t\t\ttransmissionBytes: placement.transmissionBytes,\n\t\t\t\testimatedDecodedBytes: placement.estimatedDecodedBytes,\n\t\t\t};\n\t\t\tif (cachedImage) this.uploadedKittyImages.delete(placement.imageId);\n\t\t\tthis.uploadedKittyImages.set(placement.imageId, nextCachedImage);\n\n\t\t\treturn cachedImage?.transmissionGeneration === placement.transmissionGeneration\n\t\t\t\t? placement.replacementLine\n\t\t\t\t: line;\n\t\t});\n\n\t\tlet cachedOffscreenImageCount = 0;\n\t\tlet cachedOffscreenTransmissionBytes = 0;\n\t\tlet cachedOffscreenDecodedBytes = 0;\n\t\tfor (const [imageId, cachedImage] of this.uploadedKittyImages) {\n\t\t\tif (visibleImageIds.has(imageId)) continue;\n\t\t\tcachedOffscreenImageCount += 1;\n\t\t\tcachedOffscreenTransmissionBytes += cachedImage.transmissionBytes;\n\t\t\tcachedOffscreenDecodedBytes += cachedImage.estimatedDecodedBytes;\n\t\t}\n\n\t\tlet evictedImageDeletion = \"\";\n\t\tfor (const [imageId, cachedImage] of this.uploadedKittyImages) {\n\t\t\tif (\n\t\t\t\tcachedOffscreenImageCount <= MAX_CACHED_OFFSCREEN_KITTY_IMAGES &&\n\t\t\t\tcachedOffscreenTransmissionBytes <= MAX_CACHED_OFFSCREEN_KITTY_TRANSMISSION_BYTES &&\n\t\t\t\tcachedOffscreenDecodedBytes <= MAX_CACHED_OFFSCREEN_KITTY_DECODED_BYTES\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (visibleImageIds.has(imageId)) continue;\n\t\t\tevictedImageDeletion += deleteKittyImage(imageId);\n\t\t\tthis.uploadedKittyImages.delete(imageId);\n\t\t\tcachedOffscreenImageCount -= 1;\n\t\t\tcachedOffscreenTransmissionBytes -= cachedImage.transmissionBytes;\n\t\t\tcachedOffscreenDecodedBytes -= cachedImage.estimatedDecodedBytes;\n\t\t}\n\t\treturn { lines, evictedImageDeletion };\n\t}\n\n\tprotected override resetRenderState(): void {\n\t\tthis.previousScreen = [];\n\t\tthis.previousScreenWidth = 0;\n\t\tthis.previousScreenHeight = 0;\n\t\tthis.currentLayout = undefined;\n\t}\n\n\tscrollBy(lines: number): void {\n\t\tthis.getPrimaryScrollView().scrollBy(lines);\n\t\tthis.requestRender();\n\t}\n\n\tscrollToTop(): void {\n\t\tthis.getPrimaryScrollView().scrollToStart();\n\t\tthis.requestRender();\n\t}\n\n\tscrollToBottom(): void {\n\t\tthis.getPrimaryScrollView().scrollToEnd();\n\t\tthis.requestRender();\n\t}\n\n\tprivate scrollToPrompt(direction: -1 | 1): void {\n\t\tif (!this.currentLayout) return;\n\t\tconst scrollView = this.getPrimaryScrollView();\n\t\tconst lines = getScrollViewBox(this.currentLayout, scrollView)?.scrollContentLines;\n\t\tif (!lines) return;\n\n\t\tfor (let row = scrollView.scrollTop + direction; row >= 0 && row < lines.length; row += direction) {\n\t\t\tif (!OSC133_PROMPT_START.test(lines[row] ?? \"\")) continue;\n\t\t\tscrollView.scrollTo(row);\n\t\t\tthis.requestRender();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate toggleSearch(): void {\n\t\tif (this.activeSearch) {\n\t\t\tthis.closeSearch();\n\t\t\treturn;\n\t\t}\n\t\tconst component = new AltScreenSearchComponent(\n\t\t\t(query) => this.updateSearchQuery(query),\n\t\t\tthis.searchNavigationButtonStyle,\n\t\t);\n\t\tconst search: ActiveSearch = {\n\t\t\tcomponent,\n\t\t\tindex: new AltScreenSearchIndex(),\n\t\t\tquery: \"\",\n\t\t\tmatches: [],\n\t\t\tselectedIndex: -1,\n\t\t\tanchorRow: this.getPrimaryScrollView().scrollTop,\n\t\t\tselectionMode: \"query\",\n\t\t};\n\t\tthis.activeSearch = search;\n\t\tsearch.overlay = this.showOverlay(component, {\n\t\t\tanchor: \"top-right\",\n\t\t\twidth: \"40%\",\n\t\t\tminWidth: 32,\n\t\t\tmargin: 1,\n\t\t});\n\t}\n\n\tprivate closeSearch(): void {\n\t\tconst search = this.activeSearch;\n\t\tif (!search) return;\n\t\tthis.activeSearch = undefined;\n\t\tsearch.overlay?.hide();\n\t\tthis.requestRender();\n\t}\n\n\tprivate updateSearchQuery(query: string): void {\n\t\tconst search = this.activeSearch;\n\t\tif (!search || query === search.query) return;\n\t\tconst selected = search.matches[search.selectedIndex];\n\t\tsearch.anchorRow = selected?.segments[0]?.row ?? this.getPrimaryScrollView().scrollTop;\n\t\tsearch.query = query;\n\t\tsearch.selectionMode = \"query\";\n\t\tsearch.component.setResult(-1, 0);\n\t\tthis.requestRender();\n\t}\n\n\tprivate navigateSearch(direction: -1 | 1): void {\n\t\tconst search = this.activeSearch;\n\t\tif (!search?.query) return;\n\t\tsearch.selectionMode = direction < 0 ? \"previous\" : \"next\";\n\t\tthis.requestRender();\n\t}\n\n\tprivate getSearchNavigationDirectionAt(x: number, y: number): -1 | 1 | undefined {\n\t\tconst search = this.activeSearch;\n\t\tconst bounds = search?.overlay?.getBounds();\n\t\tif (!search || !bounds) return undefined;\n\t\tif (x < bounds.col || x >= bounds.col + bounds.width || y < bounds.row || y >= bounds.row + bounds.height) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn search.component.getNavigationDirectionAt(y - bounds.row, x - bounds.col);\n\t}\n\n\tprivate handleSearchMouseEvent(event: SgrMouseEvent): boolean {\n\t\tconst search = this.activeSearch;\n\t\tif (!search) return false;\n\t\tconst direction = this.getSearchNavigationDirectionAt(event.x, event.y);\n\t\tif (search.component.setHoveredNavigationDirection(direction)) this.requestRender();\n\t\tif (direction === undefined || event.release || (event.button & 32) !== 0 || (event.button & 3) !== 0) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.navigateSearch(direction);\n\t\treturn true;\n\t}\n\n\tprivate refreshSearch(layout: LayoutFrame): boolean {\n\t\tconst search = this.activeSearch;\n\t\tif (!search) return false;\n\t\tconst scrollView = layout.primaryScrollView ?? this.implicitScrollView;\n\t\tconst box = getScrollViewBox(layout, scrollView);\n\t\tconst lines = box?.scrollContentLines;\n\t\tif (!lines || !search.query.trim()) {\n\t\t\tsearch.matches = [];\n\t\t\tsearch.selectedIndex = -1;\n\t\t\tsearch.selectedKey = undefined;\n\t\t\tsearch.selectionMode = \"retain\";\n\t\t\tsearch.component.setResult(-1, 0);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst shouldRevealSelection = search.selectionMode !== \"retain\";\n\t\tconst result = search.index.search(lines, search.query);\n\t\tconst matches = result.matches;\n\t\tsearch.matches = matches;\n\t\tif (!result.changed && search.selectionMode === \"retain\") return false;\n\n\t\tconst exactIndex = result.changed\n\t\t\t? search.selectedKey\n\t\t\t\t? matches.findIndex((match) => getAltScreenSearchMatchKey(match) === search.selectedKey)\n\t\t\t\t: -1\n\t\t\t: search.selectedIndex;\n\t\tlet selectedIndex = -1;\n\t\tif (matches.length > 0) {\n\t\t\tif (search.selectionMode === \"query\") {\n\t\t\t\tlet low = 0;\n\t\t\t\tlet high = matches.length;\n\t\t\t\twhile (low < high) {\n\t\t\t\t\tconst middle = low + Math.floor((high - low) / 2);\n\t\t\t\t\tif ((matches[middle]!.segments[0]?.row ?? 0) < search.anchorRow) low = middle + 1;\n\t\t\t\t\telse high = middle;\n\t\t\t\t}\n\t\t\t\tselectedIndex = low < matches.length ? low : 0;\n\t\t\t} else if (search.selectionMode === \"next\") {\n\t\t\t\tconst baseIndex = exactIndex >= 0 ? exactIndex : Math.min(search.selectedIndex, matches.length - 1);\n\t\t\t\tselectedIndex = baseIndex < 0 ? 0 : (baseIndex + 1) % matches.length;\n\t\t\t} else if (search.selectionMode === \"previous\") {\n\t\t\t\tconst baseIndex = exactIndex >= 0 ? exactIndex : Math.min(search.selectedIndex, matches.length - 1);\n\t\t\t\tselectedIndex = baseIndex < 0 ? matches.length - 1 : (baseIndex - 1 + matches.length) % matches.length;\n\t\t\t} else {\n\t\t\t\tselectedIndex =\n\t\t\t\t\texactIndex >= 0 ? exactIndex : Math.min(Math.max(0, search.selectedIndex), matches.length - 1);\n\t\t\t}\n\t\t}\n\n\t\tsearch.selectedIndex = selectedIndex;\n\t\tsearch.selectedKey = selectedIndex >= 0 ? getAltScreenSearchMatchKey(matches[selectedIndex]!) : undefined;\n\t\tsearch.selectionMode = \"retain\";\n\t\tsearch.component.setResult(selectedIndex, matches.length);\n\t\tif (!shouldRevealSelection) return false;\n\n\t\tconst selected = matches[selectedIndex];\n\t\tconst firstSegment = selected?.segments[0];\n\t\tconst lastSegment = selected?.segments[selected.segments.length - 1];\n\t\tif (!box || !firstSegment || !lastSegment || scrollView.viewportHeight <= 0) return false;\n\t\tconst before = scrollView.scrollTop;\n\t\tconst visibleBottom = before + scrollView.viewportHeight - 1;\n\t\tlet target = before;\n\t\tif (firstSegment.row < before || lastSegment.row > visibleBottom) {\n\t\t\ttarget = firstSegment.row - Math.floor(scrollView.viewportHeight / 3);\n\t\t}\n\t\tscrollView.scrollTo(target, { disableFollow: true });\n\t\treturn scrollView.scrollTop !== before;\n\t}\n\n\t/** Show a transient message in the alternate-screen flash stack. */\n\tflash(message: string, durationMs?: number): void {\n\t\tthis.flashes.flash(message, durationMs);\n\t}\n\n\tprivate shouldDeferViewportInputToOverlay(): boolean {\n\t\treturn this.isOverlayFocused() && this.activeSearch?.overlay?.isFocused() !== true;\n\t}\n\n\tprivate clearComponentMouseGesture(): void {\n\t\tthis.mouseCapture = undefined;\n\t\tthis.mousePressTarget = undefined;\n\t\tthis.mousePressPoint = undefined;\n\t\tthis.mousePressMoved = false;\n\t}\n\n\tprivate handleViewportInput(data: string): { consume?: boolean } | undefined {\n\t\tif (data === FOCUS_OUT) {\n\t\t\tconst hadActiveSelection = this.selectionPressActive;\n\t\t\tconst hadNonEmptyActiveSelection = hadActiveSelection && this.getSelectionBounds() !== undefined;\n\t\t\tthis.selectionPressActive = false;\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\tthis.stopScrollbarHover();\n\t\t\tif (this.activeSearch?.component.setHoveredNavigationDirection(undefined)) this.requestRender();\n\t\t\tthis.stopScrollbarDrag();\n\t\t\tthis.pressedUrl = undefined;\n\t\t\tthis.selectionDragged = false;\n\t\t\tthis.clearComponentMouseGesture();\n\t\t\tthis.lastComponentClick = undefined;\n\t\t\tif (hadActiveSelection) {\n\t\t\t\tthis.selectionAnchor = undefined;\n\t\t\t\tthis.selectionFocus = undefined;\n\t\t\t\tthis.selectionGranularity = \"character\";\n\t\t\t\tthis.selectionInitialRange = undefined;\n\t\t\t\tif (hadNonEmptyActiveSelection) this.requestRender();\n\t\t\t}\n\t\t\tthis.lastClick = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (data === FOCUS_IN) return { consume: true };\n\n\t\tconst wheelEvent = this.parseWheelEvent(data);\n\t\tif (wheelEvent) {\n\t\t\tconst event = this.createMouseEvent(\"wheel\", wheelEvent.button, wheelEvent.x, wheelEvent.y, {\n\t\t\t\twheelDelta: wheelEvent.direction * this.getWheelScrollLines(wheelEvent.button),\n\t\t\t});\n\t\t\tconst overlay = this.dispatchMouseToOverlay(event);\n\t\t\tconst result = overlay.result ?? (overlay.hit ? undefined : this.dispatchMouseToLayout(event));\n\t\t\tif (result) {\n\t\t\t\tif (this.applyMouseDispatchResult(event, result)) this.requestRender();\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tif (this.shouldDeferViewportInputToOverlay()) return undefined;\n\t\t\tthis.routeWheel(wheelEvent);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst mouseEvent = this.parseSgrMouseEvent(data);\n\t\tif (mouseEvent) {\n\t\t\tthis.handleMouseEvent(mouseEvent);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (this.isMouseSequence(data)) return { consume: true };\n\n\t\tconst keybindings = getKeybindings();\n\t\tconst isRelease = isKeyRelease(data);\n\t\tif (keybindings.matches(data, \"tui.altScreen.search\")) {\n\t\t\tif (!isRelease) this.toggleSearch();\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (this.activeSearch?.overlay?.isFocused()) {\n\t\t\tif (keybindings.matches(data, \"tui.altScreen.searchNext\")) {\n\t\t\t\tif (!isRelease) this.navigateSearch(1);\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tif (keybindings.matches(data, \"tui.altScreen.searchPrevious\")) {\n\t\t\t\tif (!isRelease) this.navigateSearch(-1);\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tif (keybindings.matches(data, \"tui.altScreen.searchClose\")) {\n\t\t\t\tif (!isRelease) this.closeSearch();\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t}\n\t\tif (this.shouldDeferViewportInputToOverlay()) return undefined;\n\t\tif (keybindings.matches(data, \"tui.altScreen.pageUp\")) {\n\t\t\tif (!isRelease) {\n\t\t\t\tthis.scrollBy(-Math.max(1, this.getPrimaryScrollView().viewportHeight - PAGE_SCROLL_OVERLAP));\n\t\t\t}\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.pageDown\")) {\n\t\t\tif (!isRelease) {\n\t\t\t\tthis.scrollBy(Math.max(1, this.getPrimaryScrollView().viewportHeight - PAGE_SCROLL_OVERLAP));\n\t\t\t}\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.halfPageUp\")) {\n\t\t\tif (!isRelease) this.scrollBy(-Math.max(1, Math.floor(this.getPrimaryScrollView().viewportHeight / 2)));\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.halfPageDown\")) {\n\t\t\tif (!isRelease) this.scrollBy(Math.max(1, Math.floor(this.getPrimaryScrollView().viewportHeight / 2)));\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.lineUp\")) {\n\t\t\tif (!isRelease) this.scrollBy(-1);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.lineDown\")) {\n\t\t\tif (!isRelease) this.scrollBy(1);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.previousPrompt\")) {\n\t\t\tif (!isRelease) this.scrollToPrompt(-1);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.nextPrompt\")) {\n\t\t\tif (!isRelease) this.scrollToPrompt(1);\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.top\")) {\n\t\t\tif (!isRelease) this.scrollToTop();\n\t\t\treturn { consume: true };\n\t\t}\n\t\tif (keybindings.matches(data, \"tui.altScreen.bottom\")) {\n\t\t\tif (!isRelease) this.scrollToBottom();\n\t\t\treturn { consume: true };\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate decodeMouseButton(button: number): TuiMouseButton {\n\t\treturn decodeMouseButton(button);\n\t}\n\n\tprivate createMouseEvent(\n\t\ttype: TuiMouseEvent[\"type\"],\n\t\tbutton: number,\n\t\tx: number,\n\t\ty: number,\n\t\textra: Partial<Pick<TuiMouseEvent, \"wheelDelta\" | \"clickCount\">> = {},\n\t): TuiMouseEvent {\n\t\treturn {\n\t\t\ttype,\n\t\t\tbutton: type === \"wheel\" ? \"none\" : this.decodeMouseButton(button),\n\t\t\tx,\n\t\t\ty,\n\t\t\tscreenX: x,\n\t\t\tscreenY: y,\n\t\t\twidth: Math.max(1, this.terminal.columns),\n\t\t\theight: Math.max(1, this.terminal.rows),\n\t\t\tshift: (button & 4) !== 0,\n\t\t\talt: (button & 8) !== 0,\n\t\t\tctrl: (button & 16) !== 0,\n\t\t\t...(extra.wheelDelta === undefined ? {} : { wheelDelta: extra.wheelDelta }),\n\t\t\t...(extra.clickCount === undefined ? {} : { clickCount: extra.clickCount }),\n\t\t};\n\t}\n\n\tprivate dispatchMouseToLayout(event: TuiMouseEvent): TuiMouseDispatchResult | undefined {\n\t\tif (!this.currentLayout) return undefined;\n\t\tconst visited = new Set<Component>();\n\t\tconst boxes = getLayoutBoxesAt(this.currentLayout, event.screenX, event.screenY);\n\t\tfor (const box of boxes) {\n\t\t\tif (visited.has(box.component)) continue;\n\t\t\tif (getLayoutNode(box.component) && box.component.handleMouse === Container.prototype.handleMouse) continue;\n\t\t\tvisited.add(box.component);\n\t\t\tconst result = dispatchMouseEvent(box.component, {\n\t\t\t\t...event,\n\t\t\t\tx: event.screenX - box.rect.x,\n\t\t\t\ty: event.screenY - box.rect.y,\n\t\t\t\twidth: box.rect.width,\n\t\t\t\theight: box.rect.height,\n\t\t\t});\n\t\t\tif (result) return result;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate applyMouseDispatchResult(event: TuiMouseEvent, result: TuiMouseDispatchResult, applyFocus = true): boolean {\n\t\tconst focusTarget =\n\t\t\tapplyFocus && result.focus\n\t\t\t\t? this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component)\n\t\t\t\t: null;\n\t\tconst focusChanged = focusTarget !== null && this.getFocusedComponent() !== focusTarget;\n\t\tif (focusTarget) this.setFocus(focusTarget);\n\t\tif (result.capture) this.mouseCapture = result.target;\n\t\treturn (\n\t\t\tresult.render ??\n\t\t\t(focusChanged ||\n\t\t\t\tevent.type === \"press\" ||\n\t\t\t\tevent.type === \"click\" ||\n\t\t\t\tevent.type === \"drag\" ||\n\t\t\t\tevent.type === \"wheel\")\n\t\t);\n\t}\n\n\tprivate dispatchMouseToTarget(\n\t\tevent: TuiMouseEvent,\n\t\ttarget: TuiMouseDispatchTarget,\n\t): TuiMouseDispatchResult | undefined {\n\t\treturn dispatchMouseEvent(target.component, retargetMouseEvent(event, target));\n\t}\n\n\tprivate getComponentClickCount(target: TuiMouseDispatchTarget, x: number, y: number): number {\n\t\tconst now = Date.now();\n\t\tconst previous = this.lastComponentClick;\n\t\tconst count =\n\t\t\tprevious &&\n\t\t\tnow - previous.timestamp <= DOUBLE_CLICK_INTERVAL_MS &&\n\t\t\tprevious.component === target.component &&\n\t\t\tprevious.x === x &&\n\t\t\tprevious.y === y\n\t\t\t\t? (previous.count % 3) + 1\n\t\t\t\t: 1;\n\t\tthis.lastComponentClick = { timestamp: now, count, component: target.component, x, y };\n\t\treturn count;\n\t}\n\n\tprivate clearTextSelection(): void {\n\t\tthis.stopSelectionAutoScroll();\n\t\tthis.selectionPressActive = false;\n\t\tthis.selectionAnchor = undefined;\n\t\tthis.selectionFocus = undefined;\n\t\tthis.selectionGranularity = \"character\";\n\t\tthis.selectionInitialRange = undefined;\n\t\tthis.pressedUrl = undefined;\n\t\tthis.selectionDragged = false;\n\t}\n\n\tprivate handleMouseEvent(raw: SgrMouseEvent): void {\n\t\tconst isMotion = (raw.button & 32) !== 0;\n\t\tconst type: TuiMouseEvent[\"type\"] = raw.release\n\t\t\t? \"release\"\n\t\t\t: isMotion\n\t\t\t\t? this.decodeMouseButton(raw.button) === \"none\"\n\t\t\t\t\t? \"move\"\n\t\t\t\t\t: \"drag\"\n\t\t\t\t: \"press\";\n\t\tconst event = this.createMouseEvent(type, raw.button, raw.x, raw.y);\n\n\t\tif (this.mouseCapture || this.mousePressTarget) {\n\t\t\tconst target = this.mouseCapture ?? this.mousePressTarget!;\n\t\t\tif (this.mousePressPoint && (raw.x !== this.mousePressPoint.x || raw.y !== this.mousePressPoint.y)) {\n\t\t\t\tthis.mousePressMoved = true;\n\t\t\t\tthis.lastComponentClick = undefined;\n\t\t\t}\n\t\t\tlet render = false;\n\t\t\tconst targetResult = this.dispatchMouseToTarget(event, target);\n\t\t\tif (targetResult) render = this.applyMouseDispatchResult(event, targetResult);\n\t\t\tif (raw.release) {\n\t\t\t\tif (!this.mousePressMoved && this.mousePressPoint?.x === raw.x && this.mousePressPoint.y === raw.y) {\n\t\t\t\t\tconst clickEvent = this.createMouseEvent(\"click\", raw.button, raw.x, raw.y, {\n\t\t\t\t\t\tclickCount: this.getComponentClickCount(target, raw.x, raw.y),\n\t\t\t\t\t});\n\t\t\t\t\t// A click handler that moves focus owns the outcome; only re-apply the click\n\t\t\t\t\t// target's focus when the handler left focus untouched.\n\t\t\t\t\tconst focusBeforeClick = this.getFocusedComponent();\n\t\t\t\t\tconst clickResult = this.dispatchMouseToTarget(clickEvent, target);\n\t\t\t\t\tif (clickResult) {\n\t\t\t\t\t\tconst keepHandlerFocus = this.getFocusedComponent() !== focusBeforeClick;\n\t\t\t\t\t\trender = this.applyMouseDispatchResult(clickEvent, clickResult, !keepHandlerFocus) || render;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.clearComponentMouseGesture();\n\t\t\t}\n\t\t\tif (render) this.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.handleSearchMouseEvent(raw)) return;\n\n\t\tconst overlay = this.dispatchMouseToOverlay(event);\n\t\tif (!overlay.hit) {\n\t\t\tif (this.handleScrollToEndIndicatorMouseEvent(raw)) return;\n\t\t\tconst scrollbarHandled = this.handleScrollbarMouseEvent(raw);\n\t\t\tif (!this.scrollbarDrag) this.updateScrollbarHover(raw.x, raw.y);\n\t\t\tif (scrollbarHandled) return;\n\t\t} else {\n\t\t\tthis.stopScrollbarHover();\n\t\t}\n\n\t\tconst result = overlay.result ?? (overlay.hit ? undefined : this.dispatchMouseToLayout(event));\n\t\tif (result) {\n\t\t\tconst render = this.applyMouseDispatchResult(event, result);\n\t\t\tif (type === \"press\") {\n\t\t\t\tthis.clearTextSelection();\n\t\t\t\tthis.mousePressTarget = result.target;\n\t\t\t\tthis.mousePressPoint = { x: raw.x, y: raw.y };\n\t\t\t\tthis.mousePressMoved = false;\n\t\t\t}\n\t\t\tif (render) this.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.handleRightClickPaste(raw)) return;\n\t\tthis.handleSelectionMouseEvent(raw);\n\t}\n\n\tprivate parseWheelEvent(data: string): WheelEvent | undefined {\n\t\treturn parseWheelEvent(data);\n\t}\n\n\tprivate getWheelScrollLines(button: number): number {\n\t\t// SGR mouse button codes use bit 3 (value 8) for the Alt modifier.\n\t\treturn (button & 8) !== 0 ? this.wheelScrollLines * ALT_WHEEL_SCROLL_MULTIPLIER : this.wheelScrollLines;\n\t}\n\n\tprivate routeWheel(event: WheelEvent): void {\n\t\tlet remaining = event.direction * this.getWheelScrollLines(event.button);\n\t\tconst seen = new Set<ScrollView>();\n\t\tfor (const scrollView of this.currentLayout ? getScrollViewsAt(this.currentLayout, event.x, event.y) : []) {\n\t\t\tseen.add(scrollView);\n\t\t\tremaining = scrollView.scrollBy(remaining);\n\t\t\tif (remaining === 0 || scrollView.overscroll === \"contain\") break;\n\t\t}\n\t\tconst primary = this.getPrimaryScrollView();\n\t\tif (remaining !== 0 && !seen.has(primary)) primary.scrollBy(remaining);\n\t\tthis.updateScrollbarHover(event.x, event.y);\n\t\tthis.requestRender();\n\t}\n\n\tprivate parseSgrMouseEvent(data: string): SgrMouseEvent | undefined {\n\t\treturn parseSgrMouseEvent(data);\n\t}\n\n\tprivate handleRightClickPaste(event: SgrMouseEvent): boolean {\n\t\tif (\n\t\t\t!this.onRightClickPaste ||\n\t\t\tprocess.platform !== \"win32\" ||\n\t\t\tprocess.env.TERM_PROGRAM?.toLowerCase() === \"vscode\" ||\n\t\t\tevent.release ||\n\t\t\tevent.button !== 2\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\tthis.onRightClickPaste();\n\t\t} catch {\n\t\t\t// Clipboard paste is best-effort.\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate handleScrollToEndIndicatorMouseEvent(event: SgrMouseEvent): boolean {\n\t\tconst rect = this.scrollToEndIndicatorRect;\n\t\tif (!rect || event.release || (event.button & 32) !== 0 || (event.button & 3) !== 0) return false;\n\t\tif (event.y !== rect.row || event.x < rect.column || event.x >= rect.column + rect.width) return false;\n\t\tthis.scrollToBottom();\n\t\treturn true;\n\t}\n\n\tprivate getScrollbarTargetAt(x: number, y: number, includeHiddenAuto = false): ScrollbarTarget | undefined {\n\t\tif (this.hasOverlay() || !this.currentLayout) return undefined;\n\t\tfor (const scrollView of getScrollViewsAt(this.currentLayout, x, y)) {\n\t\t\tconst box = getScrollViewBox(this.currentLayout, scrollView);\n\t\t\tconst geometry = box ? getScrollbarGeometry(box, includeHiddenAuto) : undefined;\n\t\t\tif (\n\t\t\t\tgeometry &&\n\t\t\t\tx === geometry.column &&\n\t\t\t\ty >= geometry.trackTop &&\n\t\t\t\ty < geometry.trackTop + geometry.trackHeight\n\t\t\t) {\n\t\t\t\treturn { scrollView, geometry };\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate setScrollbarHover(scrollView: ScrollView | undefined): void {\n\t\tif (scrollView === this.scrollbarHover) return;\n\t\tthis.scrollbarHover?.setScrollbarActive(false);\n\t\tthis.scrollbarHover = scrollView;\n\t\tthis.scrollbarHover?.setScrollbarActive(true);\n\t}\n\n\tprivate updateScrollbarHover(x: number, y: number): void {\n\t\tthis.setScrollbarHover(this.getScrollbarTargetAt(x, y, true)?.scrollView);\n\t}\n\n\tprivate stopScrollbarHover(): void {\n\t\tthis.setScrollbarHover(undefined);\n\t}\n\n\tprivate scrollScrollbarToPointer(\n\t\tscrollView: ScrollView,\n\t\tgeometry: ScrollbarGeometry,\n\t\tpointerY: number,\n\t\tgrabOffset: number,\n\t): void {\n\t\tconst maxThumbOffset = geometry.trackHeight - geometry.thumbHeight;\n\t\tconst thumbOffset = Math.max(0, Math.min(maxThumbOffset, pointerY - geometry.trackTop - grabOffset));\n\t\tconst scrollTop = maxThumbOffset === 0 ? 0 : Math.round((thumbOffset / maxThumbOffset) * geometry.maxScrollTop);\n\t\tscrollView.scrollTo(scrollTop);\n\t}\n\n\tprivate handleScrollbarMouseEvent(event: SgrMouseEvent): boolean {\n\t\tif (this.scrollbarDrag) {\n\t\t\tif (event.release) {\n\t\t\t\tthis.stopScrollbarDrag();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst box = this.currentLayout\n\t\t\t\t? getScrollViewBox(this.currentLayout, this.scrollbarDrag.scrollView)\n\t\t\t\t: undefined;\n\t\t\tconst geometry = box ? getScrollbarGeometry(box) : undefined;\n\t\t\tif (geometry) {\n\t\t\t\tthis.scrollScrollbarToPointer(\n\t\t\t\t\tthis.scrollbarDrag.scrollView,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tevent.y,\n\t\t\t\t\tthis.scrollbarDrag.grabOffset,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.release || (event.button & 32) !== 0 || (event.button & 3) !== 0) return false;\n\t\tconst target = this.getScrollbarTargetAt(event.x, event.y);\n\t\tif (!target) return false;\n\t\tthis.stopSelectionAutoScroll();\n\t\tthis.selectionPressActive = false;\n\t\tthis.selectionAnchor = undefined;\n\t\tthis.selectionFocus = undefined;\n\t\tthis.selectionGranularity = \"character\";\n\t\tthis.selectionInitialRange = undefined;\n\t\tthis.lastClick = undefined;\n\t\tthis.pressedUrl = undefined;\n\t\tthis.selectionDragged = false;\n\t\tthis.setScrollbarHover(target.scrollView);\n\t\tconst onThumb =\n\t\t\tevent.y >= target.geometry.thumbTop && event.y < target.geometry.thumbTop + target.geometry.thumbHeight;\n\t\tconst grabOffset = onThumb ? event.y - target.geometry.thumbTop : Math.floor(target.geometry.thumbHeight / 2);\n\t\tif (!onThumb) this.scrollScrollbarToPointer(target.scrollView, target.geometry, event.y, grabOffset);\n\t\tthis.scrollbarDrag = {\n\t\t\tscrollView: target.scrollView,\n\t\t\tgrabOffset,\n\t\t};\n\t\treturn true;\n\t}\n\n\tprivate stopScrollbarDrag(): void {\n\t\tthis.scrollbarDrag = undefined;\n\t}\n\n\tprivate getScrollSelectionPoint(scrollView: ScrollView, x: number, y: number): SelectionPoint | undefined {\n\t\tif (!this.currentLayout) return undefined;\n\t\tconst box = getScrollViewBox(this.currentLayout, scrollView);\n\t\tif (!box || box.rect.height <= 0 || box.clip.height <= 0) return undefined;\n\t\tconst visibleTop = Math.max(0, box.rect.y, box.clip.y);\n\t\tconst visibleBottom = Math.min(\n\t\t\tthis.terminal.rows - 1,\n\t\t\tbox.rect.y + box.rect.height - 1,\n\t\t\tbox.clip.y + box.clip.height - 1,\n\t\t);\n\t\tif (visibleBottom < visibleTop) return undefined;\n\t\tconst pointerRow = Math.max(visibleTop, Math.min(visibleBottom, y));\n\t\tconst maxContentRow = Math.max(0, (box.scrollContentLines?.length ?? 1) - 1);\n\t\treturn {\n\t\t\trow: Math.max(0, Math.min(maxContentRow, scrollView.scrollTop + pointerRow - box.rect.y)),\n\t\t\tcol: Math.max(0, Math.min(box.rect.width - 1, x - box.rect.x)),\n\t\t\tscrollView,\n\t\t};\n\t}\n\n\tprivate getSelectionPoint(event: SgrMouseEvent, scrollView?: ScrollView): SelectionPoint {\n\t\tif (scrollView) {\n\t\t\tconst point = this.getScrollSelectionPoint(scrollView, event.x, event.y);\n\t\t\tif (point) return point;\n\t\t}\n\t\treturn {\n\t\t\trow: Math.max(0, Math.min(this.terminal.rows - 1, event.y)),\n\t\t\tcol: Math.max(0, Math.min(this.terminal.columns - 1, event.x)),\n\t\t};\n\t}\n\n\tprivate getSelectionSourceLine(point: SelectionPoint): string {\n\t\tif (point.scrollView && this.currentLayout) {\n\t\t\tconst lines = getScrollViewBox(this.currentLayout, point.scrollView)?.scrollContentLines;\n\t\t\tif (lines) return lines[point.row] ?? \"\";\n\t\t}\n\t\treturn this.previousScreen[point.row] ?? \"\";\n\t}\n\n\tprivate getWordSelection(point: SelectionPoint): SelectionRange | undefined {\n\t\tconst line = stripTerminalSequences(this.getSelectionSourceLine(point));\n\t\tconst segments: Array<{ start: number; end: number; selectable: boolean; joiner: boolean }> = [];\n\t\tlet start = 0;\n\t\tfor (const segment of wordSegmenter.segment(line)) {\n\t\t\tconst end = start + visibleWidth(segment.segment);\n\t\t\tconst joiner = TERMINAL_WORD_SELECTION_JOINERS.has(segment.segment);\n\t\t\tsegments.push({ start, end, selectable: segment.isWordLike === true || joiner, joiner });\n\t\t\tstart = end;\n\t\t}\n\t\tconst clickedSegmentIndex = segments.findIndex(\n\t\t\t(segment) => point.col >= segment.start && point.col < segment.end,\n\t\t);\n\t\tif (clickedSegmentIndex < 0) return undefined;\n\n\t\tconst canJoin = (\n\t\t\tleft: { selectable: boolean; joiner: boolean },\n\t\t\tright: { selectable: boolean; joiner: boolean },\n\t\t): boolean => left.selectable && right.selectable && (left.joiner || right.joiner);\n\t\tlet selectionStart = segments[clickedSegmentIndex].start;\n\t\tlet selectionEnd = segments[clickedSegmentIndex].end;\n\t\tfor (let index = clickedSegmentIndex; index > 0 && canJoin(segments[index - 1], segments[index]); index--) {\n\t\t\tselectionStart = segments[index - 1].start;\n\t\t}\n\t\tfor (\n\t\t\tlet index = clickedSegmentIndex;\n\t\t\tindex < segments.length - 1 && canJoin(segments[index], segments[index + 1]);\n\t\t\tindex++\n\t\t) {\n\t\t\tselectionEnd = segments[index + 1].end;\n\t\t}\n\t\treturn {\n\t\t\tstart: { ...point, col: selectionStart },\n\t\t\tend: { ...point, col: selectionEnd, boundary: true },\n\t\t};\n\t}\n\n\tprivate getLineSelection(point: SelectionPoint): SelectionRange {\n\t\treturn {\n\t\t\tstart: { ...point, col: 0 },\n\t\t\tend: { ...point, col: visibleWidth(this.getSelectionSourceLine(point)), boundary: true },\n\t\t};\n\t}\n\n\tprivate updateSelectionFocus(point: SelectionPoint): void {\n\t\tif (this.selectionGranularity === \"character\" || !this.selectionInitialRange) {\n\t\t\tthis.selectionFocus = point;\n\t\t\treturn;\n\t\t}\n\t\tconst range = this.selectionGranularity === \"word\" ? this.getWordSelection(point) : this.getLineSelection(point);\n\t\tif (!range) return;\n\t\tconst initial = this.selectionInitialRange;\n\t\tconst targetBeforeInitial =\n\t\t\trange.start.row < initial.start.row ||\n\t\t\t(range.start.row === initial.start.row && range.start.col < initial.start.col);\n\t\tif (targetBeforeInitial) {\n\t\t\tthis.selectionAnchor = initial.end;\n\t\t\tthis.selectionFocus = range.start;\n\t\t} else {\n\t\t\tthis.selectionAnchor = initial.start;\n\t\t\tthis.selectionFocus = range.end;\n\t\t}\n\t}\n\n\tprivate getClickCount(point: SelectionPoint, word: SelectionRange | undefined): number {\n\t\tconst now = Date.now();\n\t\tconst previous = this.lastClick;\n\t\tconst count =\n\t\t\tword &&\n\t\t\tprevious &&\n\t\t\tnow - previous.timestamp <= DOUBLE_CLICK_INTERVAL_MS &&\n\t\t\tprevious.row === point.row &&\n\t\t\tprevious.scrollView === point.scrollView &&\n\t\t\tprevious.wordStart === word.start.col &&\n\t\t\tprevious.wordEnd === word.end.col\n\t\t\t\t? (previous.count % 3) + 1\n\t\t\t\t: 1;\n\t\tthis.lastClick = word\n\t\t\t? {\n\t\t\t\t\ttimestamp: now,\n\t\t\t\t\tcount,\n\t\t\t\t\trow: point.row,\n\t\t\t\t\tscrollView: point.scrollView,\n\t\t\t\t\twordStart: word.start.col,\n\t\t\t\t\twordEnd: word.end.col,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\treturn count;\n\t}\n\n\tprivate updateSelectionAutoScroll(event: SgrMouseEvent): void {\n\t\tconst scrollView = this.selectionAnchor?.scrollView;\n\t\tif (!scrollView || !this.currentLayout) {\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\treturn;\n\t\t}\n\t\tconst box = getScrollViewBox(this.currentLayout, scrollView);\n\t\tif (!box || box.rect.height <= 0 || box.clip.height <= 0) {\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\treturn;\n\t\t}\n\t\tconst visibleTop = Math.max(0, box.rect.y, box.clip.y);\n\t\tconst visibleBottom = Math.min(\n\t\t\tthis.terminal.rows - 1,\n\t\t\tbox.rect.y + box.rect.height - 1,\n\t\t\tbox.clip.y + box.clip.height - 1,\n\t\t);\n\t\tthis.selectionDragPointer = { x: event.x, y: event.y };\n\t\tthis.selectionAutoScrollDirection = event.y <= visibleTop ? -1 : event.y >= visibleBottom ? 1 : 0;\n\t\tif (this.selectionAutoScrollDirection === 0) {\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\treturn;\n\t\t}\n\t\tif (this.selectionAutoScrollTimer) return;\n\t\tthis.selectionAutoScrollTimer = setInterval(() => this.autoScrollSelection(), 50);\n\t\tthis.selectionAutoScrollTimer.unref();\n\t}\n\n\tprivate autoScrollSelection(): void {\n\t\tconst scrollView = this.selectionAnchor?.scrollView;\n\t\tconst pointer = this.selectionDragPointer;\n\t\tconst direction = this.selectionAutoScrollDirection;\n\t\tif (!scrollView || !pointer || direction === 0) {\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\treturn;\n\t\t}\n\t\tconst remaining = scrollView.scrollBy(direction);\n\t\tif (remaining === direction) {\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\treturn;\n\t\t}\n\t\tconst point = this.getScrollSelectionPoint(scrollView, pointer.x, pointer.y);\n\t\tif (point) this.updateSelectionFocus(point);\n\t\tthis.requestRender();\n\t}\n\n\tprivate stopSelectionAutoScroll(): void {\n\t\tif (this.selectionAutoScrollTimer) {\n\t\t\tclearInterval(this.selectionAutoScrollTimer);\n\t\t\tthis.selectionAutoScrollTimer = undefined;\n\t\t}\n\t\tthis.selectionAutoScrollDirection = 0;\n\t\tthis.selectionDragPointer = undefined;\n\t}\n\n\tprivate handleSelectionMouseEvent(event: SgrMouseEvent): void {\n\t\tconst button = event.button & 3;\n\t\tif (button !== 0 && !(event.release && button === 3)) return;\n\t\tconst anchorScrollView = this.selectionAnchor?.scrollView;\n\t\tconst point = this.getSelectionPoint(event, anchorScrollView);\n\t\tif (event.release) {\n\t\t\tif (!this.selectionPressActive) return;\n\t\t\tthis.selectionPressActive = false;\n\t\t\tthis.stopSelectionAutoScroll();\n\t\t\tif (!this.selectionAnchor) return;\n\t\t\tthis.updateSelectionFocus(point);\n\t\t\tconst isClick =\n\t\t\t\t!this.selectionDragged &&\n\t\t\t\tthis.selectionAnchor.scrollView === point.scrollView &&\n\t\t\t\tthis.selectionAnchor.row === point.row &&\n\t\t\t\tthis.selectionAnchor.col === point.col;\n\t\t\tconst clickedUrl = isClick ? this.pressedUrl : undefined;\n\t\t\tthis.pressedUrl = undefined;\n\t\t\tif (clickedUrl && this.openUrl) {\n\t\t\t\tthis.selectionAnchor = undefined;\n\t\t\t\tthis.selectionFocus = undefined;\n\t\t\t\ttry {\n\t\t\t\t\tthis.openUrl(clickedUrl);\n\t\t\t\t} catch {\n\t\t\t\t\t// URL activation is best-effort.\n\t\t\t\t}\n\t\t\t\tthis.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isClick) {\n\t\t\t\tconst clickEvent = this.createMouseEvent(\"click\", event.button, event.x, event.y, {\n\t\t\t\t\tclickCount: this.lastClick?.count ?? 1,\n\t\t\t\t});\n\t\t\t\tconst overlay = this.dispatchMouseToOverlay(clickEvent);\n\t\t\t\tconst result = overlay.result ?? (overlay.hit ? undefined : this.dispatchMouseToLayout(clickEvent));\n\t\t\t\tif (result) {\n\t\t\t\t\tconst render = this.applyMouseDispatchResult(clickEvent, result);\n\t\t\t\t\tthis.clearTextSelection();\n\t\t\t\t\tif (render) this.requestRender();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.copyOnSelect) void this.copySelectionToClipboard();\n\t\t\tthis.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tif ((event.button & 32) !== 0) {\n\t\t\tif (!this.selectionPressActive || !this.selectionAnchor) return;\n\t\t\tthis.selectionDragged = true;\n\t\t\tthis.lastClick = undefined;\n\t\t\tthis.pressedUrl = undefined;\n\t\t\tthis.updateSelectionFocus(point);\n\t\t\tthis.updateSelectionAutoScroll(event);\n\t\t\tthis.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.stopSelectionAutoScroll();\n\t\tthis.selectionPressActive = true;\n\t\tconst scrollView =\n\t\t\t!this.hasOverlay() && this.currentLayout\n\t\t\t\t? getScrollViewsAt(this.currentLayout, event.x, event.y)[0]\n\t\t\t\t: undefined;\n\t\tconst anchor = this.getSelectionPoint(event, scrollView);\n\t\tconst word = this.getWordSelection(anchor);\n\t\tconst clickCount = this.getClickCount(anchor, word);\n\t\tconst range = clickCount === 2 ? word : clickCount === 3 ? this.getLineSelection(anchor) : undefined;\n\t\tthis.selectionGranularity = range ? (clickCount === 2 ? \"word\" : \"line\") : \"character\";\n\t\tthis.selectionInitialRange = range;\n\t\tthis.selectionAnchor = range?.start ?? anchor;\n\t\tthis.selectionFocus = range?.end ?? anchor;\n\t\tthis.selectionDragged = false;\n\t\tthis.pressedUrl = range\n\t\t\t? undefined\n\t\t\t: getOsc8LinkAtColumn(\n\t\t\t\t\tthis.previousScreen[Math.max(0, Math.min(this.terminal.rows - 1, event.y))] ?? \"\",\n\t\t\t\t\tMath.max(0, Math.min(this.terminal.columns - 1, event.x)),\n\t\t\t\t);\n\t\tthis.requestRender();\n\t}\n\n\tprivate getSelectionBounds(): { start: SelectionPoint; end: SelectionPoint } | undefined {\n\t\tif (!this.selectionAnchor || !this.selectionFocus) return undefined;\n\t\tif (this.selectionAnchor.scrollView !== this.selectionFocus.scrollView) return undefined;\n\t\tconst anchorBeforeFocus =\n\t\t\tthis.selectionAnchor.row < this.selectionFocus.row ||\n\t\t\t(this.selectionAnchor.row === this.selectionFocus.row && this.selectionAnchor.col < this.selectionFocus.col);\n\t\tif (\n\t\t\tthis.selectionAnchor.row === this.selectionFocus.row &&\n\t\t\tthis.selectionAnchor.col === this.selectionFocus.col\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn anchorBeforeFocus\n\t\t\t? { start: this.selectionAnchor, end: this.selectionFocus }\n\t\t\t: { start: this.selectionFocus, end: this.selectionAnchor };\n\t}\n\n\tprivate getSelectionColumns(\n\t\tline: string,\n\t\trow: number,\n\t\tselection: { start: SelectionPoint; end: SelectionPoint },\n\t\tminColumn = 0,\n\t\tmaxColumn = visibleWidth(line),\n\t): { start: number; end: number } {\n\t\tconst lineWidth = visibleWidth(line);\n\t\tlet start = Math.max(0, minColumn);\n\t\tlet end = Math.min(lineWidth, maxColumn);\n\t\tif (row === selection.start.row) {\n\t\t\tstart = getGraphemeCellRange(line, selection.start.col)?.start ?? Math.min(selection.start.col, lineWidth);\n\t\t}\n\t\tif (row === selection.end.row) {\n\t\t\tend = selection.end.boundary\n\t\t\t\t? Math.min(selection.end.col, lineWidth)\n\t\t\t\t: (getGraphemeCellRange(line, selection.end.col)?.end ?? Math.min(selection.end.col + 1, lineWidth));\n\t\t}\n\t\treturn { start: Math.max(minColumn, start), end: Math.min(maxColumn, end) };\n\t}\n\n\tprivate getActiveSelectionText(): string | undefined {\n\t\tconst selection = this.getSelectionBounds();\n\t\tif (!selection) return undefined;\n\t\tlet sourceLines: readonly string[] = this.previousScreen;\n\t\tif (selection.start.scrollView) {\n\t\t\tif (!this.currentLayout) return undefined;\n\t\t\tconst box = getScrollViewBox(this.currentLayout, selection.start.scrollView);\n\t\t\tif (!box?.scrollContentLines) return undefined;\n\t\t\tsourceLines = box.scrollContentLines;\n\t\t}\n\t\tconst lines: string[] = [];\n\t\tfor (let row = selection.start.row; row <= selection.end.row; row++) {\n\t\t\tconst line = sourceLines[row] ?? \"\";\n\t\t\tconst columns = this.getSelectionColumns(line, row, selection);\n\t\t\tlines.push(\n\t\t\t\tstripTerminalSequences(\n\t\t\t\t\tsliceByColumn(line, columns.start, Math.max(0, columns.end - columns.start), true),\n\t\t\t\t).trimEnd(),\n\t\t\t);\n\t\t}\n\t\tconst text = lines.join(\"\\n\");\n\t\treturn text.length === 0 ? undefined : text;\n\t}\n\n\tprivate async copySelectionToClipboard(): Promise<boolean> {\n\t\tconst text = this.getActiveSelectionText();\n\t\tif (!text) return false;\n\t\treturn this.copyTextToClipboard(text);\n\t}\n\n\tprivate async copyTextToClipboard(text: string): Promise<boolean> {\n\t\t// Prefer an injected clipboard implementation (native clipboard + platform tools with a\n\t\t// verified success path) when the host app provides one. A bare OSC 52 write can show\n\t\t// \"Copied!\" while leaving the system clipboard untouched (e.g. macOS Terminal.app, tmux\n\t\t// without OSC 52 clipboard passthrough), so only report success when it actually copies.\n\t\tif (this.copySelection) {\n\t\t\tconst ok = await this.copySelection(text);\n\t\t\tthis.flash(ok ? \"Copied!\" : \"Copy failed\");\n\t\t\treturn ok;\n\t\t}\n\t\tthis.terminal.write(`\\x1b]52;c;${Buffer.from(text).toString(\"base64\")}\\x07`);\n\t\tthis.flash(\"Copied!\");\n\t\treturn true;\n\t}\n\n\tprivate applySearchTextHighlight(text: string, current: boolean): string {\n\t\tconst style = current ? this.searchCurrentMatchStyle : this.searchMatchStyle;\n\t\tlet result = \"\";\n\t\tlet plainStart = 0;\n\t\tlet index = 0;\n\t\twhile (index < text.length) {\n\t\t\tconst ansi = extractAnsiCode(text, index);\n\t\t\tif (!ansi) {\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (index > plainStart) result += style(text.slice(plainStart, index));\n\t\t\tresult += ansi.code;\n\t\t\tindex += ansi.length;\n\t\t\tplainStart = index;\n\t\t}\n\t\tif (plainStart < text.length) result += style(text.slice(plainStart));\n\t\treturn result;\n\t}\n\n\tprivate applySearchHighlights(screen: string[], layout: LayoutFrame): string[] {\n\t\tconst search = this.activeSearch;\n\t\tif (!search || search.selectedIndex < 0 || search.matches.length === 0) return screen;\n\t\tconst scrollView = layout.primaryScrollView ?? this.implicitScrollView;\n\t\tconst box = getScrollViewBox(layout, scrollView);\n\t\tif (!box) return screen;\n\n\t\tconst rangesByRow = new Map<number, SearchHighlightRange[]>();\n\t\tconst scrollbarColumn = getScrollbarGeometry(box)?.column;\n\t\tconst minRow = Math.max(0, box.rect.y, box.clip.y);\n\t\tconst maxRow = Math.min(screen.length, box.rect.y + box.rect.height, box.clip.y + box.clip.height);\n\t\tconst minColumn = Math.max(0, box.rect.x, box.clip.x);\n\t\tconst maxColumn = Math.min(\n\t\t\tthis.terminal.columns,\n\t\t\tbox.rect.x + box.rect.width,\n\t\t\tbox.clip.x + box.clip.width,\n\t\t\tscrollbarColumn ?? Number.POSITIVE_INFINITY,\n\t\t);\n\t\tconst minContentRow = scrollView.scrollTop + minRow - box.rect.y;\n\t\tconst maxContentRow = scrollView.scrollTop + maxRow - box.rect.y - 1;\n\t\tlet low = 0;\n\t\tlet high = search.matches.length;\n\t\twhile (low < high) {\n\t\t\tconst middle = low + Math.floor((high - low) / 2);\n\t\t\tconst match = search.matches[middle]!;\n\t\t\tconst lastRow = match.segments[match.segments.length - 1]?.row ?? -1;\n\t\t\tif (lastRow < minContentRow) low = middle + 1;\n\t\t\telse high = middle;\n\t\t}\n\t\tfor (let matchIndex = low; matchIndex < search.matches.length; matchIndex++) {\n\t\t\tconst match = search.matches[matchIndex]!;\n\t\t\tif ((match.segments[0]?.row ?? 0) > maxContentRow) break;\n\t\t\tfor (const segment of match.segments) {\n\t\t\t\tconst row = box.rect.y + segment.row - scrollView.scrollTop;\n\t\t\t\tif (row < minRow || row >= maxRow) continue;\n\t\t\t\tconst startCol = Math.max(minColumn, box.rect.x + segment.startCol);\n\t\t\t\tconst endCol = Math.min(maxColumn, box.rect.x + segment.endCol);\n\t\t\t\tif (endCol <= startCol) continue;\n\t\t\t\tconst ranges = rangesByRow.get(row) ?? [];\n\t\t\t\tranges.push({ startCol, endCol, current: matchIndex === search.selectedIndex });\n\t\t\t\trangesByRow.set(row, ranges);\n\t\t\t}\n\t\t}\n\n\t\tconst result = [...screen];\n\t\tfor (const [row, ranges] of rangesByRow) {\n\t\t\tlet line = result[row] ?? \"\";\n\t\t\tif (isImageLine(line)) continue;\n\t\t\tconst lineWidth = visibleWidth(line);\n\t\t\tfor (const range of ranges.sort((a, b) => b.startCol - a.startCol)) {\n\t\t\t\tconst startCol = Math.min(range.startCol, lineWidth);\n\t\t\t\tconst endCol = Math.min(range.endCol, lineWidth);\n\t\t\t\tif (endCol <= startCol) continue;\n\t\t\t\tconst before = sliceByColumn(line, 0, startCol, true);\n\t\t\t\tconst highlighted = sliceByColumn(line, startCol, endCol - startCol, true);\n\t\t\t\tconst after = sliceByColumn(line, endCol, Math.max(0, lineWidth - endCol), true);\n\t\t\t\tline = `${before}${this.applySearchTextHighlight(highlighted, range.current)}${after}`;\n\t\t\t}\n\t\t\tresult[row] = line;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate applySelectionHighlight(text: string): string {\n\t\tlet result = \"\\x1b[7m\";\n\t\tlet index = 0;\n\t\twhile (index < text.length) {\n\t\t\tconst ansi = extractAnsiCode(text, index);\n\t\t\tif (!ansi) {\n\t\t\t\tresult += text[index];\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tresult += ansi.code;\n\t\t\tif (ansi.code.endsWith(\"m\")) result += \"\\x1b[7m\";\n\t\t\tindex += ansi.length;\n\t\t}\n\t\treturn `${result}\\x1b[27m`;\n\t}\n\n\tprivate applySelection(screen: string[], layout = this.currentLayout): string[] {\n\t\tconst selection = this.getSelectionBounds();\n\t\tif (!selection) return screen;\n\t\tlet screenSelection = selection;\n\t\tlet minRow = 0;\n\t\tlet maxRow = screen.length - 1;\n\t\tlet minColumn = 0;\n\t\tlet maxColumn = this.terminal.columns;\n\t\tif (selection.start.scrollView) {\n\t\t\tif (!layout) return screen;\n\t\t\tconst box = getScrollViewBox(layout, selection.start.scrollView);\n\t\t\tif (!box) return screen;\n\t\t\tminRow = Math.max(0, box.rect.y, box.clip.y);\n\t\t\tmaxRow = Math.min(screen.length - 1, box.rect.y + box.rect.height - 1, box.clip.y + box.clip.height - 1);\n\t\t\tminColumn = Math.max(0, box.rect.x, box.clip.x);\n\t\t\tmaxColumn = Math.min(this.terminal.columns, box.rect.x + box.rect.width, box.clip.x + box.clip.width);\n\t\t\tscreenSelection = {\n\t\t\t\tstart: {\n\t\t\t\t\t...selection.start,\n\t\t\t\t\trow: box.rect.y + selection.start.row - selection.start.scrollView.scrollTop,\n\t\t\t\t\tcol: box.rect.x + selection.start.col,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\t...selection.end,\n\t\t\t\t\trow: box.rect.y + selection.end.row - selection.start.scrollView.scrollTop,\n\t\t\t\t\tcol: box.rect.x + selection.end.col,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn screen.map((line, row) => {\n\t\t\tif (\n\t\t\t\trow < minRow ||\n\t\t\t\trow > maxRow ||\n\t\t\t\trow < screenSelection.start.row ||\n\t\t\t\trow > screenSelection.end.row ||\n\t\t\t\tisImageLine(line)\n\t\t\t) {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t\tconst lineWidth = visibleWidth(line);\n\t\t\tconst columns = this.getSelectionColumns(line, row, screenSelection, minColumn, maxColumn);\n\t\t\tif (columns.end <= columns.start) return line;\n\t\t\tconst before = sliceByColumn(line, 0, columns.start, true);\n\t\t\tconst selected = sliceByColumn(line, columns.start, columns.end - columns.start, true);\n\t\t\tconst after = sliceByColumn(line, columns.end, Math.max(0, lineWidth - columns.end), true);\n\t\t\treturn `${before}${this.applySelectionHighlight(selected)}${after}`;\n\t\t});\n\t}\n\n\tprivate isMouseSequence(data: string): boolean {\n\t\treturn isMouseSequence(data);\n\t}\n\n\tprivate compositeScrollToEndIndicator(screen: string[], layout: LayoutFrame, width: number): string[] {\n\t\tthis.scrollToEndIndicatorRect = undefined;\n\t\tconst scrollView = layout.primaryScrollView ?? this.implicitScrollView;\n\t\tif (!this.scrollToEndIndicator || !scrollView.followEnd || scrollView.isFollowingEnd) return screen;\n\t\tconst box = getScrollViewBox(layout, scrollView);\n\t\tconst clip = box?.clip;\n\t\tif (!clip || clip.width <= 0 || clip.height <= 0) return screen;\n\t\tconst row = clip.y + clip.height - 1;\n\t\tif (row >= screen.length || isImageLine(screen[row] ?? \"\")) return screen;\n\t\tconst scrollbarColumn = box ? getScrollbarGeometry(box)?.column : undefined;\n\t\tconst availableWidth = Math.max(0, (scrollbarColumn ?? clip.x + clip.width) - clip.x);\n\t\tconst text = truncateToWidth(this.scrollToEndIndicator(), availableWidth, \"\");\n\t\tconst textWidth = visibleWidth(text);\n\t\tif (textWidth === 0) return screen;\n\t\tconst column = clip.x + Math.floor((availableWidth - textWidth) / 2);\n\t\tconst result = [...screen];\n\t\tresult[row] = compositeTuiLine(result[row] ?? \"\", text, column, textWidth, width);\n\t\tthis.scrollToEndIndicatorRect = { row, column, width: textWidth };\n\t\treturn result;\n\t}\n\n\tprivate compositeFlashes(screen: string[], width: number, height: number): string[] {\n\t\tconst flashLines = this.flashes.render(width).slice(-height);\n\t\tif (flashLines.length === 0) return screen;\n\t\tconst result = [...screen];\n\t\twhile (result.length < height) result.push(\"\");\n\t\tfor (let row = 0; row < flashLines.length; row++) {\n\t\t\tconst line = flashLines[row]!;\n\t\t\tconst flashWidth = visibleWidth(line);\n\t\t\tif (flashWidth === 0) continue;\n\t\t\tresult[row] = compositeTuiLine(result[row] ?? \"\", line, width - flashWidth, flashWidth, width);\n\t\t}\n\t\treturn result;\n\t}\n\n\tprotected override doRender(): void {\n\t\tif (this.stopped || !this.altScreenActive) return;\n\t\tconst width = Math.max(1, this.terminal.columns);\n\t\tconst height = Math.max(1, this.terminal.rows);\n\t\tconst root = this.layoutRoot ?? this.implicitScrollView;\n\t\tlet nextLayout = renderLayoutFrame(root, width, height, () => this.requestRender());\n\t\tif (this.refreshSearch(nextLayout)) {\n\t\t\tnextLayout = renderLayoutFrame(root, width, height, () => this.requestRender());\n\t\t}\n\t\tlet screen = nextLayout.lines.map((line) => line.replace(OSC133_ZONE_PREFIX, \"\"));\n\t\tscreen = this.applySearchHighlights(screen, nextLayout);\n\t\tscreen = this.compositeScrollToEndIndicator(screen, nextLayout, width);\n\t\tscreen = this.compositeOverlays(screen, width, height);\n\t\tif (screen.length > height) screen = screen.slice(screen.length - height);\n\t\tscreen = this.applySelection(screen, nextLayout);\n\t\tscreen = this.compositeFlashes(screen, width, height);\n\n\t\tconst cursorPos = this.extractCursorPosition(screen, height);\n\t\tscreen = this.applyLineResets(screen).map((line) => {\n\t\t\tif (isImageLine(line) || visibleWidth(line) <= width) return line;\n\t\t\treturn sliceByColumn(line, 0, width, true);\n\t\t});\n\n\t\tconst fullRedraw =\n\t\t\tthis.previousScreen.length === 0 || this.previousScreenWidth !== width || this.previousScreenHeight !== height;\n\t\tconst imagesNeedRedraw = screen.some(\n\t\t\t(line, row) =>\n\t\t\t\tline !== this.previousScreen[row] && (isImageLine(line) || isImageLine(this.previousScreen[row] ?? \"\")),\n\t\t);\n\t\tconst redrawImages = fullRedraw || imagesNeedRedraw;\n\t\tconst hadUploadedKittyImages = this.uploadedKittyImages.size > 0;\n\t\tconst preparedKittyScreen =\n\t\t\tredrawImages && this.imageProtocol === \"kitty\"\n\t\t\t\t? this.prepareKittyScreen(screen)\n\t\t\t\t: { lines: screen, evictedImageDeletion: \"\" };\n\n\t\tlet buffer = BEGIN_SYNCHRONIZED_OUTPUT;\n\t\tif (fullRedraw) {\n\t\t\tthis.fullRedrawCount += 1;\n\t\t\tconst clearImages =\n\t\t\t\tthis.imageProtocol === \"kitty\" && hadUploadedKittyImages\n\t\t\t\t\t? deleteAllKittyPlacements()\n\t\t\t\t\t: this.deleteAltScreenKittyImages();\n\t\t\tbuffer += `${clearImages}\\x1b[2J`;\n\t\t} else if (imagesNeedRedraw) {\n\t\t\tif (this.imageProtocol === \"iterm2\") buffer += \"\\x1b[2J\";\n\t\t\telse if (this.imageProtocol === \"kitty\") buffer += deleteAllKittyPlacements();\n\t\t}\n\t\tbuffer += preparedKittyScreen.evictedImageDeletion;\n\n\t\tfor (let row = 0; row < height; row++) {\n\t\t\tif (!fullRedraw && !imagesNeedRedraw && screen[row] === this.previousScreen[row]) continue;\n\t\t\tbuffer += `\\x1b[${row + 1};1H\\x1b[2K${preparedKittyScreen.lines[row] ?? \"\"}`;\n\t\t}\n\n\t\tif (cursorPos) {\n\t\t\tbuffer += `\\x1b[${cursorPos.row + 1};${Math.min(width, cursorPos.col) + 1}H`;\n\t\t\tbuffer += this.getShowHardwareCursor() ? \"\\x1b[?25h\" : \"\\x1b[?25l\";\n\t\t} else {\n\t\t\tbuffer += \"\\x1b[?25l\";\n\t\t}\n\t\tbuffer += END_SYNCHRONIZED_OUTPUT;\n\t\tthis.terminal.write(buffer);\n\n\t\tthis.previousScreen = screen;\n\t\tthis.previousScreenWidth = width;\n\t\tthis.previousScreenHeight = height;\n\t\tthis.currentLayout = nextLayout;\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui-main-screen.d.ts","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"AAQA,OAAO,EAKN,OAAO,EAIP,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACxC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,sFAAsF;AACtF,qBAAa,aAAc,SAAQ,OAAO;IACzC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,UAAU,CAAC,CAA4F;IAC/G,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,wBAAwB,CAAmB;IAEnD,YAAY,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,OAAO,CAAC,EAGzD;IAED,UAAmB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW5D;IAED,UAAmB,kBAAkB,IAAI,IAAI,CAK5C;IAED,UAAmB,QAAQ,IAAI,IAAI,CAoClC;IAED,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,gBAAgB;IA8DxB,kBAAkB,IAAI,wBAAwB,CAU7C;IAED,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CASxD;CACD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tui-main-screen.js","sourceRoot":"","sources":["../src/tui-main-screen.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAEN,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,GAIP,MAAM,UAAU,CAAC;AAYlB,sFAAsF;AACtF,MAAM,OAAO,aAAc,SAAQ,OAAO;IASzC,YAAY,GAAG,IAA2C;QACzD,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QATP,SAAI,GAAG,SAAkB,CAAC;QAC3B,oBAAe,GAAG,KAAK,CAAC;QACf,WAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAE9C,mBAAc,GAAG,CAAC,CAAC;QACnB,wBAAmB,GAAa,EAAE,CAAC;QACnC,6BAAwB,GAAgB,EAAE,CAAC;QAIlD,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEkB,kBAAkB,CAAC,OAAgB;QACrD,MAAM,SAAS,GACd,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7B,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;YAC3B,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,OAAO,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO;QAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;IAEkB,kBAAkB;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEkB,QAAQ;QAC1B,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACpC,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC;gBACvB,aAAa,EAAE,EAAE;gBACjB,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,CAAC;gBACjB,SAAS,EAAE,CAAC;gBACZ,iBAAiB,EAAE,CAAC;gBACpB,gBAAgB,EAAE,CAAC;gBACnB,mBAAmB,EAAE,CAAC;aACtB,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,SAAoB,EAAQ,EAAE;YAC5C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,SAAS,YAAY,SAAS;gBAAE,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ;oBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1F,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,IACC,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM;YAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAClF,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM;YAC1D,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,EACxF,CAAC;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC;QAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC7B,CAAC;IAEO,gBAAgB,CAAC,MAA0C;QAClE,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,OAAO;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3F,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEO,gBAAgB,CAAC,IAAY;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,MAAM,GACX,OAAO,CAAC,MAAM;gBACd,CAAC,OAAO,CAAC,GAAG;oBACX,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IAAI,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,GAAG;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,KAAK,EAAE,IAAI,CAAC,cAAc;oBAC1B,QAAQ,EAAE,IAAI,CAAC,cAAc;oBAC7B,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,CAAC,EAAE,GAAG,CAAC,CAAC;iBACR,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACtE,CAAC;;gBAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,IACC,CAAC,KAAK;gBACN,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc;gBACnC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc;gBACtC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;gBACjB,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAChB,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC1B,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAkB,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBAC5E,wFAAwF;gBACxF,mFAAmF;gBACnF,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACpD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxG,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,gBAAgB;oBAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACxF,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC;QACF,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,kBAAkB;QACjB,OAAO;YACN,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC7C,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,KAA+B;QACjD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACtD,CAAC;CACD","sourcesContent":["import {\n\tisMouseSequence,\n\tMOUSE_TRACKING,\n\tMouseClickSynthesizer,\n\tparseSgrMouseEvent,\n\ttoTuiMouseEvent,\n} from \"./mouse-input.ts\";\nimport { isImageLine } from \"./terminal-image.ts\";\nimport {\n\ttype Component,\n\tContainer,\n\tdispatchMouseEvent,\n\tretargetMouseEvent,\n\tTuiBase,\n\ttype TuiMouseDispatchResult,\n\ttype TuiMouseDispatchTarget,\n\ttype TuiMouseEvent,\n} from \"./tui.ts\";\n\nexport interface TuiMainScreenRenderState {\n\tpreviousLines: string[];\n\tpreviousWidth: number;\n\tpreviousHeight: number;\n\tcursorRow: number;\n\thardwareCursorRow: number;\n\tmaxLinesRendered: number;\n\tpreviousViewportTop: number;\n}\n\n/** TUI implementation that renders into the terminal's main screen and scrollback. */\nexport class TuiMainScreen extends TuiBase {\n\treadonly mode = \"regular\" as const;\n\tprivate trackingEnabled = false;\n\tprivate readonly clicks = new MouseClickSynthesizer();\n\tprivate mousePress?: { target: TuiMouseDispatchTarget; epoch: number; revision: number; x: number; y: number };\n\tprivate layoutRevision = 0;\n\tprivate committedMouseLines: string[] = [];\n\tprivate committedMouseComponents: Component[] = [];\n\n\tconstructor(...args: ConstructorParameters<typeof TuiBase>) {\n\t\tsuper(...args);\n\t\tthis.addInputListener((data) => this.handleMouseInput(data));\n\t}\n\n\tprotected override applyMouseTracking(enabled: boolean): void {\n\t\tconst supported =\n\t\t\tBoolean(process.stdout.isTTY) &&\n\t\t\t!process.env.TERMUX_VERSION &&\n\t\t\t(process.platform !== \"win32\" || Boolean(process.env.WT_SESSION));\n\t\tconst next = enabled && supported && !this.stopped;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t\tif (this.trackingEnabled === next) return;\n\t\tthis.trackingEnabled = next;\n\t\tthis.terminal.write(next ? MOUSE_TRACKING.inline : MOUSE_TRACKING.disable);\n\t}\n\n\tprotected override beforeTerminalStop(): void {\n\t\tthis.terminal.write(MOUSE_TRACKING.disable);\n\t\tthis.trackingEnabled = false;\n\t\tthis.clicks.cancel();\n\t\tthis.mousePress = undefined;\n\t}\n\n\tprotected override doRender(): void {\n\t\tif (this.stopped) return;\n\t\tif (this.mouseExternalWritePending) {\n\t\t\t// CPR locates the cursor, not an old frame displaced by arbitrary output.\n\t\t\t// Append a new working frame without erasing diagnostics or scrollback.\n\t\t\tthis.mouseExternalWritePending = false;\n\t\t\tthis.terminal.write(\"\\r\\n\");\n\t\t\tthis.restoreRenderState({\n\t\t\t\tpreviousLines: [],\n\t\t\t\tpreviousWidth: 0,\n\t\t\t\tpreviousHeight: 0,\n\t\t\t\tcursorRow: 0,\n\t\t\t\thardwareCursorRow: 0,\n\t\t\t\tmaxLinesRendered: 0,\n\t\t\t\tpreviousViewportTop: 0,\n\t\t\t});\n\t\t}\n\t\tsuper.doRender();\n\t\tthis.noteCommittedMouseFrame();\n\t\tconst components: Component[] = [];\n\t\tconst visit = (component: Component): void => {\n\t\t\tcomponents.push(component);\n\t\t\tif (component instanceof Container) for (const child of component.children) visit(child);\n\t\t};\n\t\tfor (const root of this.getMouseLayoutRoots()) visit(root);\n\t\tif (\n\t\t\tthis.previousLines.length !== this.committedMouseLines.length ||\n\t\t\tthis.previousLines.some((line, index) => line !== this.committedMouseLines[index]) ||\n\t\t\tcomponents.length !== this.committedMouseComponents.length ||\n\t\t\tcomponents.some((component, index) => component !== this.committedMouseComponents[index])\n\t\t) {\n\t\t\tthis.layoutRevision++;\n\t\t}\n\t\tthis.committedMouseLines = [...this.previousLines];\n\t\tthis.committedMouseComponents = components;\n\t\tthis.calibrateMouseAnchor();\n\t}\n\n\tprivate applyMouseResult(result: TuiMouseDispatchResult | undefined): void {\n\t\tif (!result?.focus) return;\n\t\tconst target = this.resolveMouseFocusTarget(result.focusTarget ?? result.target.component);\n\t\tif (target) this.setFocus(target);\n\t}\n\n\tprivate handleMouseInput(data: string): { consume: boolean } {\n\t\tif (!isMouseSequence(data)) return { consume: false };\n\t\tconst raw = parseSgrMouseEvent(data);\n\t\tif (!this.trackingEnabled || !raw || raw.button !== 0) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst frameLine = this.resolveFrameLine(raw.y + 1);\n\t\tif (frameLine === undefined || raw.x >= this.terminal.columns) {\n\t\t\tthis.clicks.cancel();\n\t\t\tthis.mousePress = undefined;\n\t\t\treturn { consume: true };\n\t\t}\n\t\tconst event = toTuiMouseEvent(raw.release ? \"release\" : \"press\", raw, this.terminal);\n\t\tif (!raw.release) {\n\t\t\tconst overlay = this.dispatchMouseToOverlay(event);\n\t\t\tconst result =\n\t\t\t\toverlay.result ??\n\t\t\t\t(overlay.hit\n\t\t\t\t\t? undefined\n\t\t\t\t\t: dispatchMouseEvent(this, { ...event, y: frameLine, height: this.previousLines.length }));\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (result) {\n\t\t\t\tthis.applyMouseResult(result);\n\t\t\t\tthis.mousePress = {\n\t\t\t\t\ttarget: result.target,\n\t\t\t\t\tepoch: this.placementEpoch,\n\t\t\t\t\trevision: this.layoutRevision,\n\t\t\t\t\tx: raw.x,\n\t\t\t\t\ty: raw.y,\n\t\t\t\t};\n\t\t\t\tthis.clicks.press(raw, result.target.component, this.placementEpoch);\n\t\t\t} else this.clicks.cancel();\n\t\t\tthis.requestRender();\n\t\t} else {\n\t\t\tconst press = this.mousePress;\n\t\t\tthis.mousePress = undefined;\n\t\t\tif (\n\t\t\t\t!press ||\n\t\t\t\tpress.epoch !== this.placementEpoch ||\n\t\t\t\tpress.revision !== this.layoutRevision ||\n\t\t\t\tpress.x !== raw.x ||\n\t\t\t\tpress.y !== raw.y\n\t\t\t) {\n\t\t\t\tthis.clicks.cancel();\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tconst count = this.clicks.release(raw, press.target.component, this.placementEpoch);\n\t\t\tif (count !== undefined) {\n\t\t\t\tconst click: TuiMouseEvent = { ...event, type: \"click\", clickCount: count };\n\t\t\t\t// A click handler that moves focus (an ask-user submit restoring the composer) owns the\n\t\t\t\t// outcome; re-applying the click target afterwards would steal focus back from it.\n\t\t\t\tconst focusBeforeClick = this.getFocusedComponent();\n\t\t\t\tconst clickResult = dispatchMouseEvent(press.target.component, retargetMouseEvent(click, press.target));\n\t\t\t\tif (this.getFocusedComponent() === focusBeforeClick) this.applyMouseResult(clickResult);\n\t\t\t\tthis.requestRender();\n\t\t\t}\n\t\t}\n\t\treturn { consume: true };\n\t}\n\n\tcaptureRenderState(): TuiMainScreenRenderState {\n\t\treturn {\n\t\t\tpreviousLines: [...this.previousLines],\n\t\t\tpreviousWidth: this.previousWidth,\n\t\t\tpreviousHeight: this.previousHeight,\n\t\t\tcursorRow: this.cursorRow,\n\t\t\thardwareCursorRow: this.hardwareCursorRow,\n\t\t\tmaxLinesRendered: this.maxLinesRendered,\n\t\t\tpreviousViewportTop: this.previousViewportTop,\n\t\t};\n\t}\n\n\trestoreRenderState(state: TuiMainScreenRenderState): void {\n\t\tthis.previousLines = state.previousLines.map((line) => (isImageLine(line) ? \"\" : line));\n\t\tthis.previousKittyImageIds = new Set();\n\t\tthis.previousWidth = state.previousWidth;\n\t\tthis.previousHeight = state.previousHeight;\n\t\tthis.cursorRow = state.cursorRow;\n\t\tthis.hardwareCursorRow = state.hardwareCursorRow;\n\t\tthis.maxLinesRendered = state.maxLinesRendered;\n\t\tthis.previousViewportTop = state.previousViewportTop;\n\t}\n}\n"]}