@deepseek-harness-tui/dsh-tui 0.5.0

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 (638) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +235 -0
  3. package/bin/dsh-tui.js +95 -0
  4. package/cordis.patch.yml +218 -0
  5. package/cordis.yml +185 -0
  6. package/lib/invariant.js +28 -0
  7. package/lib/types/activityPrefs.d.ts +29 -0
  8. package/lib/types/activityPrefs.d.ts.map +1 -0
  9. package/lib/types/activityPrefs.js +60 -0
  10. package/lib/types/bootstrap/state.d.ts +13 -0
  11. package/lib/types/bootstrap/state.d.ts.map +1 -0
  12. package/lib/types/bootstrap/state.js +12 -0
  13. package/lib/types/cc/cliHighlight.d.ts +20 -0
  14. package/lib/types/cc/cliHighlight.d.ts.map +1 -0
  15. package/lib/types/cc/cliHighlight.js +53 -0
  16. package/lib/types/cc/figures.d.ts +59 -0
  17. package/lib/types/cc/figures.d.ts.map +1 -0
  18. package/lib/types/cc/figures.js +69 -0
  19. package/lib/types/cc/format.d.ts +26 -0
  20. package/lib/types/cc/format.d.ts.map +1 -0
  21. package/lib/types/cc/format.js +55 -0
  22. package/lib/types/cc/hash.d.ts +25 -0
  23. package/lib/types/cc/hash.d.ts.map +1 -0
  24. package/lib/types/cc/hash.js +41 -0
  25. package/lib/types/cc/hyperlink.d.ts +21 -0
  26. package/lib/types/cc/hyperlink.d.ts.map +1 -0
  27. package/lib/types/cc/hyperlink.js +31 -0
  28. package/lib/types/cc/markdown.d.ts +43 -0
  29. package/lib/types/cc/markdown.d.ts.map +1 -0
  30. package/lib/types/cc/markdown.js +345 -0
  31. package/lib/types/cc/spinnerVerbs.d.ts +3 -0
  32. package/lib/types/cc/spinnerVerbs.d.ts.map +1 -0
  33. package/lib/types/cc/spinnerVerbs.js +190 -0
  34. package/lib/types/cc/terminal.d.ts +15 -0
  35. package/lib/types/cc/terminal.d.ts.map +1 -0
  36. package/lib/types/cc/terminal.js +84 -0
  37. package/lib/types/channel.d.ts +672 -0
  38. package/lib/types/channel.d.ts.map +1 -0
  39. package/lib/types/channel.js +2427 -0
  40. package/lib/types/childStderr.d.ts +63 -0
  41. package/lib/types/childStderr.d.ts.map +1 -0
  42. package/lib/types/childStderr.js +161 -0
  43. package/lib/types/commands.d.ts +55 -0
  44. package/lib/types/commands.d.ts.map +1 -0
  45. package/lib/types/commands.js +101 -0
  46. package/lib/types/components/ActivityLine.d.ts +29 -0
  47. package/lib/types/components/ActivityLine.d.ts.map +1 -0
  48. package/lib/types/components/ActivityLine.js +47 -0
  49. package/lib/types/components/ActivityPicker.d.ts +13 -0
  50. package/lib/types/components/ActivityPicker.d.ts.map +1 -0
  51. package/lib/types/components/ActivityPicker.js +24 -0
  52. package/lib/types/components/CommandSuggestions.d.ts +14 -0
  53. package/lib/types/components/CommandSuggestions.d.ts.map +1 -0
  54. package/lib/types/components/CommandSuggestions.js +33 -0
  55. package/lib/types/components/FileSuggestions.d.ts +12 -0
  56. package/lib/types/components/FileSuggestions.d.ts.map +1 -0
  57. package/lib/types/components/FileSuggestions.js +26 -0
  58. package/lib/types/components/GoalTodoPanel.d.ts +13 -0
  59. package/lib/types/components/GoalTodoPanel.d.ts.map +1 -0
  60. package/lib/types/components/GoalTodoPanel.js +57 -0
  61. package/lib/types/components/HelpMenu.d.ts +12 -0
  62. package/lib/types/components/HelpMenu.d.ts.map +1 -0
  63. package/lib/types/components/HelpMenu.js +12 -0
  64. package/lib/types/components/HistorySearchDialog.d.ts +16 -0
  65. package/lib/types/components/HistorySearchDialog.d.ts.map +1 -0
  66. package/lib/types/components/HistorySearchDialog.js +31 -0
  67. package/lib/types/components/InterruptedByUser.d.ts +7 -0
  68. package/lib/types/components/InterruptedByUser.d.ts.map +1 -0
  69. package/lib/types/components/InterruptedByUser.js +9 -0
  70. package/lib/types/components/LoadedContextPanel.d.ts +20 -0
  71. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -0
  72. package/lib/types/components/LoadedContextPanel.js +30 -0
  73. package/lib/types/components/LogoV2.d.ts +23 -0
  74. package/lib/types/components/LogoV2.d.ts.map +1 -0
  75. package/lib/types/components/LogoV2.js +95 -0
  76. package/lib/types/components/Markdown.d.ts +24 -0
  77. package/lib/types/components/Markdown.d.ts.map +1 -0
  78. package/lib/types/components/Markdown.js +106 -0
  79. package/lib/types/components/MarkdownTable.d.ts +17 -0
  80. package/lib/types/components/MarkdownTable.d.ts.map +1 -0
  81. package/lib/types/components/MarkdownTable.js +272 -0
  82. package/lib/types/components/MessageList.d.ts +41 -0
  83. package/lib/types/components/MessageList.d.ts.map +1 -0
  84. package/lib/types/components/MessageList.js +303 -0
  85. package/lib/types/components/ModelPicker.d.ts +14 -0
  86. package/lib/types/components/ModelPicker.d.ts.map +1 -0
  87. package/lib/types/components/ModelPicker.js +15 -0
  88. package/lib/types/components/PresetPicker.d.ts +17 -0
  89. package/lib/types/components/PresetPicker.d.ts.map +1 -0
  90. package/lib/types/components/PresetPicker.js +25 -0
  91. package/lib/types/components/PromptInput.d.ts +67 -0
  92. package/lib/types/components/PromptInput.d.ts.map +1 -0
  93. package/lib/types/components/PromptInput.js +778 -0
  94. package/lib/types/components/ResumePicker.d.ts +15 -0
  95. package/lib/types/components/ResumePicker.d.ts.map +1 -0
  96. package/lib/types/components/ResumePicker.js +34 -0
  97. package/lib/types/components/RewindPicker.d.ts +14 -0
  98. package/lib/types/components/RewindPicker.d.ts.map +1 -0
  99. package/lib/types/components/RewindPicker.js +23 -0
  100. package/lib/types/components/SearchBox.d.ts +20 -0
  101. package/lib/types/components/SearchBox.d.ts.map +1 -0
  102. package/lib/types/components/SearchBox.js +33 -0
  103. package/lib/types/components/Select.d.ts +22 -0
  104. package/lib/types/components/Select.d.ts.map +1 -0
  105. package/lib/types/components/Select.js +19 -0
  106. package/lib/types/components/Spinner/GlimmerMessage.d.ts +19 -0
  107. package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -0
  108. package/lib/types/components/Spinner/GlimmerMessage.js +78 -0
  109. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +31 -0
  110. package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts.map +1 -0
  111. package/lib/types/components/Spinner/SpinnerAnimationRow.js +162 -0
  112. package/lib/types/components/Spinner/SpinnerGlyph.d.ts +16 -0
  113. package/lib/types/components/Spinner/SpinnerGlyph.d.ts.map +1 -0
  114. package/lib/types/components/Spinner/SpinnerGlyph.js +36 -0
  115. package/lib/types/components/Spinner/spinnerMode.d.ts +6 -0
  116. package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -0
  117. package/lib/types/components/Spinner/spinnerMode.js +1 -0
  118. package/lib/types/components/Spinner/spinnerUtils.d.ts +41 -0
  119. package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -0
  120. package/lib/types/components/Spinner/spinnerUtils.js +104 -0
  121. package/lib/types/components/Spinner/useStalledAnimation.d.ts +16 -0
  122. package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -0
  123. package/lib/types/components/Spinner/useStalledAnimation.js +71 -0
  124. package/lib/types/components/StreamingMarkdown.d.ts +12 -0
  125. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -0
  126. package/lib/types/components/StreamingMarkdown.js +39 -0
  127. package/lib/types/components/ThemePicker.d.ts +22 -0
  128. package/lib/types/components/ThemePicker.d.ts.map +1 -0
  129. package/lib/types/components/ThemePicker.js +51 -0
  130. package/lib/types/components/ThinkingToggle.d.ts +17 -0
  131. package/lib/types/components/ThinkingToggle.d.ts.map +1 -0
  132. package/lib/types/components/ThinkingToggle.js +30 -0
  133. package/lib/types/components/ToolUseLoader.d.ts +13 -0
  134. package/lib/types/components/ToolUseLoader.d.ts.map +1 -0
  135. package/lib/types/components/ToolUseLoader.js +17 -0
  136. package/lib/types/components/Whale.d.ts +22 -0
  137. package/lib/types/components/Whale.d.ts.map +1 -0
  138. package/lib/types/components/Whale.js +78 -0
  139. package/lib/types/components/WorkingSpinner.d.ts +26 -0
  140. package/lib/types/components/WorkingSpinner.d.ts.map +1 -0
  141. package/lib/types/components/WorkingSpinner.js +68 -0
  142. package/lib/types/components/activityFrames.d.ts +31 -0
  143. package/lib/types/components/activityFrames.d.ts.map +1 -0
  144. package/lib/types/components/activityFrames.js +83 -0
  145. package/lib/types/components/bigfont.d.ts +28 -0
  146. package/lib/types/components/bigfont.d.ts.map +1 -0
  147. package/lib/types/components/bigfont.js +91 -0
  148. package/lib/types/components/design-system/Byline.d.ts +14 -0
  149. package/lib/types/components/design-system/Byline.d.ts.map +1 -0
  150. package/lib/types/components/design-system/Byline.js +17 -0
  151. package/lib/types/components/design-system/Divider.d.ts +40 -0
  152. package/lib/types/components/design-system/Divider.d.ts.map +1 -0
  153. package/lib/types/components/design-system/Divider.js +24 -0
  154. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +19 -0
  155. package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +1 -0
  156. package/lib/types/components/design-system/KeyboardShortcutHint.js +14 -0
  157. package/lib/types/components/design-system/ListItem.d.ts +36 -0
  158. package/lib/types/components/design-system/ListItem.d.ts.map +1 -0
  159. package/lib/types/components/design-system/ListItem.js +48 -0
  160. package/lib/types/components/design-system/LoadingState.d.ts +19 -0
  161. package/lib/types/components/design-system/LoadingState.d.ts.map +1 -0
  162. package/lib/types/components/design-system/LoadingState.js +22 -0
  163. package/lib/types/components/design-system/Pane.d.ts +17 -0
  164. package/lib/types/components/design-system/Pane.d.ts.map +1 -0
  165. package/lib/types/components/design-system/Pane.js +15 -0
  166. package/lib/types/components/design-system/ProgressBar.d.ts +22 -0
  167. package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -0
  168. package/lib/types/components/design-system/ProgressBar.js +27 -0
  169. package/lib/types/components/design-system/StatusIcon.d.ts +15 -0
  170. package/lib/types/components/design-system/StatusIcon.d.ts.map +1 -0
  171. package/lib/types/components/design-system/StatusIcon.js +20 -0
  172. package/lib/types/components/design-system/ThemeProvider.d.ts +11 -0
  173. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -0
  174. package/lib/types/components/design-system/ThemeProvider.js +135 -0
  175. package/lib/types/components/design-system/ThemedBox.d.ts +37 -0
  176. package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -0
  177. package/lib/types/components/design-system/ThemedBox.js +26 -0
  178. package/lib/types/components/design-system/ThemedText.d.ts +56 -0
  179. package/lib/types/components/design-system/ThemedText.d.ts.map +1 -0
  180. package/lib/types/components/design-system/ThemedText.js +45 -0
  181. package/lib/types/components/messages/AssistantTextMessage.d.ts +18 -0
  182. package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -0
  183. package/lib/types/components/messages/AssistantTextMessage.js +15 -0
  184. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +23 -0
  185. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -0
  186. package/lib/types/components/messages/AssistantThinkingMessage.js +23 -0
  187. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +23 -0
  188. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -0
  189. package/lib/types/components/messages/AssistantToolUseMessage.js +220 -0
  190. package/lib/types/components/messages/MessageMetadata.d.ts +15 -0
  191. package/lib/types/components/messages/MessageMetadata.d.ts.map +1 -0
  192. package/lib/types/components/messages/MessageMetadata.js +20 -0
  193. package/lib/types/components/messages/UserPromptMessage.d.ts +19 -0
  194. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -0
  195. package/lib/types/components/messages/UserPromptMessage.js +15 -0
  196. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +39 -0
  197. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -0
  198. package/lib/types/components/questions/AskUserQuestionPanel.js +228 -0
  199. package/lib/types/components/shimmer.d.ts +35 -0
  200. package/lib/types/components/shimmer.d.ts.map +1 -0
  201. package/lib/types/components/shimmer.js +43 -0
  202. package/lib/types/components/whaleFrames.d.ts +25 -0
  203. package/lib/types/components/whaleFrames.d.ts.map +1 -0
  204. package/lib/types/components/whaleFrames.js +419 -0
  205. package/lib/types/customTheme.d.ts +104 -0
  206. package/lib/types/customTheme.d.ts.map +1 -0
  207. package/lib/types/customTheme.js +268 -0
  208. package/lib/types/effortPrefs.d.ts +22 -0
  209. package/lib/types/effortPrefs.d.ts.map +1 -0
  210. package/lib/types/effortPrefs.js +45 -0
  211. package/lib/types/history.d.ts +24 -0
  212. package/lib/types/history.d.ts.map +1 -0
  213. package/lib/types/history.js +75 -0
  214. package/lib/types/hooks/useBlink.d.ts +11 -0
  215. package/lib/types/hooks/useBlink.d.ts.map +1 -0
  216. package/lib/types/hooks/useBlink.js +20 -0
  217. package/lib/types/i18n.d.ts +926 -0
  218. package/lib/types/i18n.d.ts.map +1 -0
  219. package/lib/types/i18n.js +356 -0
  220. package/lib/types/index.d.ts +70 -0
  221. package/lib/types/index.d.ts.map +1 -0
  222. package/lib/types/index.js +31 -0
  223. package/lib/types/ink/Ansi.d.ts +11 -0
  224. package/lib/types/ink/Ansi.d.ts.map +1 -0
  225. package/lib/types/ink/Ansi.js +269 -0
  226. package/lib/types/ink/bidi.d.ts +18 -0
  227. package/lib/types/ink/bidi.d.ts.map +1 -0
  228. package/lib/types/ink/bidi.js +119 -0
  229. package/lib/types/ink/clearTerminal.d.ts +22 -0
  230. package/lib/types/ink/clearTerminal.d.ts.map +1 -0
  231. package/lib/types/ink/clearTerminal.js +72 -0
  232. package/lib/types/ink/colorize.d.ts +33 -0
  233. package/lib/types/ink/colorize.d.ts.map +1 -0
  234. package/lib/types/ink/colorize.js +213 -0
  235. package/lib/types/ink/components/AlternateScreen.d.ts +22 -0
  236. package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -0
  237. package/lib/types/ink/components/AlternateScreen.js +74 -0
  238. package/lib/types/ink/components/App.d.ts +73 -0
  239. package/lib/types/ink/components/App.d.ts.map +1 -0
  240. package/lib/types/ink/components/App.js +597 -0
  241. package/lib/types/ink/components/AppContext.d.ts +15 -0
  242. package/lib/types/ink/components/AppContext.d.ts.map +1 -0
  243. package/lib/types/ink/components/AppContext.js +11 -0
  244. package/lib/types/ink/components/Box.d.ts +49 -0
  245. package/lib/types/ink/components/Box.d.ts.map +1 -0
  246. package/lib/types/ink/components/Box.js +153 -0
  247. package/lib/types/ink/components/Button.d.ts +37 -0
  248. package/lib/types/ink/components/Button.d.ts.map +1 -0
  249. package/lib/types/ink/components/Button.js +166 -0
  250. package/lib/types/ink/components/ClockContext.d.ts +10 -0
  251. package/lib/types/ink/components/ClockContext.d.ts.map +1 -0
  252. package/lib/types/ink/components/ClockContext.js +108 -0
  253. package/lib/types/ink/components/CursorDeclarationContext.d.ts +30 -0
  254. package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -0
  255. package/lib/types/ink/components/CursorDeclarationContext.js +6 -0
  256. package/lib/types/ink/components/ErrorOverview.d.ts +7 -0
  257. package/lib/types/ink/components/ErrorOverview.d.ts.map +1 -0
  258. package/lib/types/ink/components/ErrorOverview.js +49 -0
  259. package/lib/types/ink/components/Link.d.ts +8 -0
  260. package/lib/types/ink/components/Link.d.ts.map +1 -0
  261. package/lib/types/ink/components/Link.js +33 -0
  262. package/lib/types/ink/components/Newline.d.ts +13 -0
  263. package/lib/types/ink/components/Newline.d.ts.map +1 -0
  264. package/lib/types/ink/components/Newline.js +29 -0
  265. package/lib/types/ink/components/NoSelect.d.ts +20 -0
  266. package/lib/types/ink/components/NoSelect.d.ts.map +1 -0
  267. package/lib/types/ink/components/NoSelect.js +56 -0
  268. package/lib/types/ink/components/RawAnsi.d.ts +17 -0
  269. package/lib/types/ink/components/RawAnsi.d.ts.map +1 -0
  270. package/lib/types/ink/components/RawAnsi.js +45 -0
  271. package/lib/types/ink/components/ScrollBox.d.ts +78 -0
  272. package/lib/types/ink/components/ScrollBox.d.ts.map +1 -0
  273. package/lib/types/ink/components/ScrollBox.js +174 -0
  274. package/lib/types/ink/components/Spacer.d.ts +6 -0
  275. package/lib/types/ink/components/Spacer.d.ts.map +1 -0
  276. package/lib/types/ink/components/Spacer.js +19 -0
  277. package/lib/types/ink/components/StdinContext.d.ts +32 -0
  278. package/lib/types/ink/components/StdinContext.d.ts.map +1 -0
  279. package/lib/types/ink/components/StdinContext.js +16 -0
  280. package/lib/types/ink/components/TerminalFocusContext.d.ts +11 -0
  281. package/lib/types/ink/components/TerminalFocusContext.d.ts.map +1 -0
  282. package/lib/types/ink/components/TerminalFocusContext.js +45 -0
  283. package/lib/types/ink/components/TerminalSizeContext.d.ts +6 -0
  284. package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -0
  285. package/lib/types/ink/components/TerminalSizeContext.js +3 -0
  286. package/lib/types/ink/components/Text.d.ts +56 -0
  287. package/lib/types/ink/components/Text.d.ts.map +1 -0
  288. package/lib/types/ink/components/Text.js +194 -0
  289. package/lib/types/ink/constants.d.ts +3 -0
  290. package/lib/types/ink/constants.d.ts.map +1 -0
  291. package/lib/types/ink/constants.js +2 -0
  292. package/lib/types/ink/cursor.d.ts +11 -0
  293. package/lib/types/ink/cursor.d.ts.map +1 -0
  294. package/lib/types/ink/cursor.js +1 -0
  295. package/lib/types/ink/devtools.d.ts +7 -0
  296. package/lib/types/ink/devtools.d.ts.map +1 -0
  297. package/lib/types/ink/devtools.js +1 -0
  298. package/lib/types/ink/dom.d.ts +178 -0
  299. package/lib/types/ink/dom.d.ts.map +1 -0
  300. package/lib/types/ink/dom.js +424 -0
  301. package/lib/types/ink/events/click-event.d.ts +32 -0
  302. package/lib/types/ink/events/click-event.d.ts.map +1 -0
  303. package/lib/types/ink/events/click-event.js +36 -0
  304. package/lib/types/ink/events/dispatcher.d.ts +63 -0
  305. package/lib/types/ink/events/dispatcher.d.ts.map +1 -0
  306. package/lib/types/ink/events/dispatcher.js +194 -0
  307. package/lib/types/ink/events/emitter.d.ts +20 -0
  308. package/lib/types/ink/events/emitter.d.ts.map +1 -0
  309. package/lib/types/ink/events/emitter.js +43 -0
  310. package/lib/types/ink/events/event-handlers.d.ts +47 -0
  311. package/lib/types/ink/events/event-handlers.d.ts.map +1 -0
  312. package/lib/types/ink/events/event-handlers.js +30 -0
  313. package/lib/types/ink/events/event.d.ts +19 -0
  314. package/lib/types/ink/events/event.d.ts.map +1 -0
  315. package/lib/types/ink/events/event.js +22 -0
  316. package/lib/types/ink/events/focus-event.d.ts +19 -0
  317. package/lib/types/ink/events/focus-event.d.ts.map +1 -0
  318. package/lib/types/ink/events/focus-event.js +21 -0
  319. package/lib/types/ink/events/input-event.d.ts +53 -0
  320. package/lib/types/ink/events/input-event.d.ts.map +1 -0
  321. package/lib/types/ink/events/input-event.js +180 -0
  322. package/lib/types/ink/events/keyboard-event.d.ts +40 -0
  323. package/lib/types/ink/events/keyboard-event.d.ts.map +1 -0
  324. package/lib/types/ink/events/keyboard-event.js +65 -0
  325. package/lib/types/ink/events/paste-event.d.ts +11 -0
  326. package/lib/types/ink/events/paste-event.d.ts.map +1 -0
  327. package/lib/types/ink/events/paste-event.js +13 -0
  328. package/lib/types/ink/events/resize-event.d.ts +13 -0
  329. package/lib/types/ink/events/resize-event.d.ts.map +1 -0
  330. package/lib/types/ink/events/resize-event.js +16 -0
  331. package/lib/types/ink/events/terminal-event.d.ts +112 -0
  332. package/lib/types/ink/events/terminal-event.d.ts.map +1 -0
  333. package/lib/types/ink/events/terminal-event.js +131 -0
  334. package/lib/types/ink/events/terminal-focus-event.d.ts +21 -0
  335. package/lib/types/ink/events/terminal-focus-event.d.ts.map +1 -0
  336. package/lib/types/ink/events/terminal-focus-event.js +18 -0
  337. package/lib/types/ink/focus.d.ts +74 -0
  338. package/lib/types/ink/focus.d.ts.map +1 -0
  339. package/lib/types/ink/focus.js +188 -0
  340. package/lib/types/ink/frame.d.ts +119 -0
  341. package/lib/types/ink/frame.d.ts.map +1 -0
  342. package/lib/types/ink/frame.js +43 -0
  343. package/lib/types/ink/get-max-width.d.ts +20 -0
  344. package/lib/types/ink/get-max-width.d.ts.map +1 -0
  345. package/lib/types/ink/get-max-width.js +25 -0
  346. package/lib/types/ink/hit-test.d.ts +47 -0
  347. package/lib/types/ink/hit-test.d.ts.map +1 -0
  348. package/lib/types/ink/hit-test.js +126 -0
  349. package/lib/types/ink/hooks/use-animation-frame.d.ts +27 -0
  350. package/lib/types/ink/hooks/use-animation-frame.d.ts.map +1 -0
  351. package/lib/types/ink/hooks/use-animation-frame.js +48 -0
  352. package/lib/types/ink/hooks/use-app.d.ts +8 -0
  353. package/lib/types/ink/hooks/use-app.d.ts.map +1 -0
  354. package/lib/types/ink/hooks/use-app.js +8 -0
  355. package/lib/types/ink/hooks/use-copy-on-select.d.ts +22 -0
  356. package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -0
  357. package/lib/types/ink/hooks/use-copy-on-select.js +40 -0
  358. package/lib/types/ink/hooks/use-declared-cursor.d.ts +31 -0
  359. package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -0
  360. package/lib/types/ink/hooks/use-declared-cursor.js +65 -0
  361. package/lib/types/ink/hooks/use-input.d.ts +41 -0
  362. package/lib/types/ink/hooks/use-input.d.ts.map +1 -0
  363. package/lib/types/ink/hooks/use-input.js +73 -0
  364. package/lib/types/ink/hooks/use-interval.d.ts +23 -0
  365. package/lib/types/ink/hooks/use-interval.d.ts.map +1 -0
  366. package/lib/types/ink/hooks/use-interval.js +58 -0
  367. package/lib/types/ink/hooks/use-search-highlight.d.ts +34 -0
  368. package/lib/types/ink/hooks/use-search-highlight.d.ts.map +1 -0
  369. package/lib/types/ink/hooks/use-search-highlight.js +35 -0
  370. package/lib/types/ink/hooks/use-selection.d.ts +44 -0
  371. package/lib/types/ink/hooks/use-selection.d.ts.map +1 -0
  372. package/lib/types/ink/hooks/use-selection.js +64 -0
  373. package/lib/types/ink/hooks/use-stdin.d.ts +8 -0
  374. package/lib/types/ink/hooks/use-stdin.d.ts.map +1 -0
  375. package/lib/types/ink/hooks/use-stdin.js +8 -0
  376. package/lib/types/ink/hooks/use-tab-status.d.ts +18 -0
  377. package/lib/types/ink/hooks/use-tab-status.d.ts.map +1 -0
  378. package/lib/types/ink/hooks/use-tab-status.js +58 -0
  379. package/lib/types/ink/hooks/use-terminal-focus.d.ts +11 -0
  380. package/lib/types/ink/hooks/use-terminal-focus.d.ts.map +1 -0
  381. package/lib/types/ink/hooks/use-terminal-focus.js +15 -0
  382. package/lib/types/ink/hooks/use-terminal-size.d.ts +6 -0
  383. package/lib/types/ink/hooks/use-terminal-size.d.ts.map +1 -0
  384. package/lib/types/ink/hooks/use-terminal-size.js +12 -0
  385. package/lib/types/ink/hooks/use-terminal-title.d.ts +14 -0
  386. package/lib/types/ink/hooks/use-terminal-title.d.ts.map +1 -0
  387. package/lib/types/ink/hooks/use-terminal-title.js +30 -0
  388. package/lib/types/ink/hooks/use-terminal-viewport.d.ts +32 -0
  389. package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
  390. package/lib/types/ink/hooks/use-terminal-viewport.js +79 -0
  391. package/lib/types/ink/ink.d.ts +370 -0
  392. package/lib/types/ink/ink.d.ts.map +1 -0
  393. package/lib/types/ink/ink.js +1665 -0
  394. package/lib/types/ink/instances.d.ts +10 -0
  395. package/lib/types/ink/instances.d.ts.map +1 -0
  396. package/lib/types/ink/instances.js +13 -0
  397. package/lib/types/ink/layout/engine.d.ts +7 -0
  398. package/lib/types/ink/layout/engine.d.ts.map +1 -0
  399. package/lib/types/ink/layout/engine.js +8 -0
  400. package/lib/types/ink/layout/geometry.d.ts +86 -0
  401. package/lib/types/ink/layout/geometry.d.ts.map +1 -0
  402. package/lib/types/ink/layout/geometry.js +95 -0
  403. package/lib/types/ink/layout/node.d.ts +151 -0
  404. package/lib/types/ink/layout/node.d.ts.map +1 -0
  405. package/lib/types/ink/layout/node.js +72 -0
  406. package/lib/types/ink/layout/yoga.d.ts +69 -0
  407. package/lib/types/ink/layout/yoga.d.ts.map +1 -0
  408. package/lib/types/ink/layout/yoga.js +249 -0
  409. package/lib/types/ink/line-width-cache.d.ts +9 -0
  410. package/lib/types/ink/line-width-cache.d.ts.map +1 -0
  411. package/lib/types/ink/line-width-cache.js +45 -0
  412. package/lib/types/ink/log-update.d.ts +57 -0
  413. package/lib/types/ink/log-update.d.ts.map +1 -0
  414. package/lib/types/ink/log-update.js +710 -0
  415. package/lib/types/ink/measure-element.d.ts +19 -0
  416. package/lib/types/ink/measure-element.d.ts.map +1 -0
  417. package/lib/types/ink/measure-element.js +10 -0
  418. package/lib/types/ink/measure-text.d.ts +13 -0
  419. package/lib/types/ink/measure-text.d.ts.map +1 -0
  420. package/lib/types/ink/measure-text.js +38 -0
  421. package/lib/types/ink/node-cache.d.ts +33 -0
  422. package/lib/types/ink/node-cache.d.ts.map +1 -0
  423. package/lib/types/ink/node-cache.js +42 -0
  424. package/lib/types/ink/optimizer.d.ts +18 -0
  425. package/lib/types/ink/optimizer.d.ts.map +1 -0
  426. package/lib/types/ink/optimizer.js +83 -0
  427. package/lib/types/ink/output.d.ts +200 -0
  428. package/lib/types/ink/output.d.ts.map +1 -0
  429. package/lib/types/ink/output.js +663 -0
  430. package/lib/types/ink/parse-keypress.d.ts +132 -0
  431. package/lib/types/ink/parse-keypress.d.ts.map +1 -0
  432. package/lib/types/ink/parse-keypress.js +707 -0
  433. package/lib/types/ink/reconciler.d.ts +43 -0
  434. package/lib/types/ink/reconciler.d.ts.map +1 -0
  435. package/lib/types/ink/reconciler.js +413 -0
  436. package/lib/types/ink/render-border.d.ts +36 -0
  437. package/lib/types/ink/render-border.d.ts.map +1 -0
  438. package/lib/types/ink/render-border.js +143 -0
  439. package/lib/types/ink/render-node-to-output.d.ts +93 -0
  440. package/lib/types/ink/render-node-to-output.d.ts.map +1 -0
  441. package/lib/types/ink/render-node-to-output.js +1290 -0
  442. package/lib/types/ink/render-to-screen.d.ts +65 -0
  443. package/lib/types/ink/render-to-screen.d.ts.map +1 -0
  444. package/lib/types/ink/render-to-screen.js +189 -0
  445. package/lib/types/ink/renderer.d.ts +24 -0
  446. package/lib/types/ink/renderer.d.ts.map +1 -0
  447. package/lib/types/ink/renderer.js +136 -0
  448. package/lib/types/ink/root.d.ts +91 -0
  449. package/lib/types/ink/root.d.ts.map +1 -0
  450. package/lib/types/ink/root.js +93 -0
  451. package/lib/types/ink/screen.d.ts +443 -0
  452. package/lib/types/ink/screen.d.ts.map +1 -0
  453. package/lib/types/ink/screen.js +1295 -0
  454. package/lib/types/ink/searchHighlight.d.ts +25 -0
  455. package/lib/types/ink/searchHighlight.d.ts.map +1 -0
  456. package/lib/types/ink/searchHighlight.js +82 -0
  457. package/lib/types/ink/selection.d.ts +323 -0
  458. package/lib/types/ink/selection.d.ts.map +1 -0
  459. package/lib/types/ink/selection.js +881 -0
  460. package/lib/types/ink/squash-text-nodes.d.ts +30 -0
  461. package/lib/types/ink/squash-text-nodes.d.ts.map +1 -0
  462. package/lib/types/ink/squash-text-nodes.js +63 -0
  463. package/lib/types/ink/stringWidth.d.ts +11 -0
  464. package/lib/types/ink/stringWidth.d.ts.map +1 -0
  465. package/lib/types/ink/stringWidth.js +209 -0
  466. package/lib/types/ink/styles.d.ts +324 -0
  467. package/lib/types/ink/styles.d.ts.map +1 -0
  468. package/lib/types/ink/styles.js +307 -0
  469. package/lib/types/ink/supports-hyperlinks.d.ts +20 -0
  470. package/lib/types/ink/supports-hyperlinks.d.ts.map +1 -0
  471. package/lib/types/ink/supports-hyperlinks.js +44 -0
  472. package/lib/types/ink/tabstops.d.ts +9 -0
  473. package/lib/types/ink/tabstops.d.ts.map +1 -0
  474. package/lib/types/ink/tabstops.js +46 -0
  475. package/lib/types/ink/terminal-focus-state.d.ts +35 -0
  476. package/lib/types/ink/terminal-focus-state.d.ts.map +1 -0
  477. package/lib/types/ink/terminal-focus-state.js +57 -0
  478. package/lib/types/ink/terminal-querier.d.ts +161 -0
  479. package/lib/types/ink/terminal-querier.d.ts.map +1 -0
  480. package/lib/types/ink/terminal-querier.js +204 -0
  481. package/lib/types/ink/terminal.d.ts +80 -0
  482. package/lib/types/ink/terminal.d.ts.map +1 -0
  483. package/lib/types/ink/terminal.js +268 -0
  484. package/lib/types/ink/termio/ansi.d.ts +75 -0
  485. package/lib/types/ink/termio/ansi.d.ts.map +1 -0
  486. package/lib/types/ink/termio/ansi.js +79 -0
  487. package/lib/types/ink/termio/csi.d.ts +253 -0
  488. package/lib/types/ink/termio/csi.d.ts.map +1 -0
  489. package/lib/types/ink/termio/csi.js +347 -0
  490. package/lib/types/ink/termio/dec.d.ts +61 -0
  491. package/lib/types/ink/termio/dec.d.ts.map +1 -0
  492. package/lib/types/ink/termio/dec.js +76 -0
  493. package/lib/types/ink/termio/esc.d.ts +15 -0
  494. package/lib/types/ink/termio/esc.d.ts.map +1 -0
  495. package/lib/types/ink/termio/esc.js +57 -0
  496. package/lib/types/ink/termio/osc.d.ts +208 -0
  497. package/lib/types/ink/termio/osc.d.ts.map +1 -0
  498. package/lib/types/ink/termio/osc.js +466 -0
  499. package/lib/types/ink/termio/parser.d.ts +46 -0
  500. package/lib/types/ink/termio/parser.d.ts.map +1 -0
  501. package/lib/types/ink/termio/parser.js +366 -0
  502. package/lib/types/ink/termio/sgr.d.ts +17 -0
  503. package/lib/types/ink/termio/sgr.d.ts.map +1 -0
  504. package/lib/types/ink/termio/sgr.js +300 -0
  505. package/lib/types/ink/termio/tokenize.d.ts +50 -0
  506. package/lib/types/ink/termio/tokenize.d.ts.map +1 -0
  507. package/lib/types/ink/termio/tokenize.js +266 -0
  508. package/lib/types/ink/termio/types.d.ts +211 -0
  509. package/lib/types/ink/termio/types.d.ts.map +1 -0
  510. package/lib/types/ink/termio/types.js +68 -0
  511. package/lib/types/ink/termio.d.ts +25 -0
  512. package/lib/types/ink/termio.d.ts.map +1 -0
  513. package/lib/types/ink/termio.js +24 -0
  514. package/lib/types/ink/truncateToWidth.d.ts +7 -0
  515. package/lib/types/ink/truncateToWidth.d.ts.map +1 -0
  516. package/lib/types/ink/truncateToWidth.js +18 -0
  517. package/lib/types/ink/useTerminalNotification.d.ts +45 -0
  518. package/lib/types/ink/useTerminalNotification.d.ts.map +1 -0
  519. package/lib/types/ink/useTerminalNotification.js +70 -0
  520. package/lib/types/ink/warn.d.ts +7 -0
  521. package/lib/types/ink/warn.d.ts.map +1 -0
  522. package/lib/types/ink/warn.js +15 -0
  523. package/lib/types/ink/widest-line.d.ts +7 -0
  524. package/lib/types/ink/widest-line.d.ts.map +1 -0
  525. package/lib/types/ink/widest-line.js +19 -0
  526. package/lib/types/ink/wrap-text.d.ts +10 -0
  527. package/lib/types/ink/wrap-text.d.ts.map +1 -0
  528. package/lib/types/ink/wrap-text.js +61 -0
  529. package/lib/types/ink/wrapAnsi.d.ts +18 -0
  530. package/lib/types/ink/wrapAnsi.d.ts.map +1 -0
  531. package/lib/types/ink/wrapAnsi.js +16 -0
  532. package/lib/types/invariant.d.ts +20 -0
  533. package/lib/types/invariant.d.ts.map +1 -0
  534. package/lib/types/invariant.js +26 -0
  535. package/lib/types/modelPrefs.d.ts +37 -0
  536. package/lib/types/modelPrefs.d.ts.map +1 -0
  537. package/lib/types/modelPrefs.js +66 -0
  538. package/lib/types/modelRoute.d.ts +79 -0
  539. package/lib/types/modelRoute.d.ts.map +1 -0
  540. package/lib/types/modelRoute.js +96 -0
  541. package/lib/types/native-ts/yoga-layout/enums.d.ts +183 -0
  542. package/lib/types/native-ts/yoga-layout/enums.d.ts.map +1 -0
  543. package/lib/types/native-ts/yoga-layout/enums.js +150 -0
  544. package/lib/types/native-ts/yoga-layout/index.d.ts +788 -0
  545. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -0
  546. package/lib/types/native-ts/yoga-layout/index.js +2571 -0
  547. package/lib/types/packaged-skills.d.ts +10 -0
  548. package/lib/types/packaged-skills.d.ts.map +1 -0
  549. package/lib/types/packaged-skills.js +63 -0
  550. package/lib/types/plugin.d.ts +33 -0
  551. package/lib/types/plugin.d.ts.map +1 -0
  552. package/lib/types/plugin.js +454 -0
  553. package/lib/types/presetPrefs.d.ts +29 -0
  554. package/lib/types/presetPrefs.d.ts.map +1 -0
  555. package/lib/types/presetPrefs.js +61 -0
  556. package/lib/types/presets.d.ts +110 -0
  557. package/lib/types/presets.d.ts.map +1 -0
  558. package/lib/types/presets.js +114 -0
  559. package/lib/types/questions.d.ts +97 -0
  560. package/lib/types/questions.d.ts.map +1 -0
  561. package/lib/types/questions.js +201 -0
  562. package/lib/types/screens/Chat.d.ts +23 -0
  563. package/lib/types/screens/Chat.d.ts.map +1 -0
  564. package/lib/types/screens/Chat.js +1263 -0
  565. package/lib/types/screens/StatusLine.d.ts +16 -0
  566. package/lib/types/screens/StatusLine.d.ts.map +1 -0
  567. package/lib/types/screens/StatusLine.js +105 -0
  568. package/lib/types/screens/StatusMetrics.d.ts +87 -0
  569. package/lib/types/screens/StatusMetrics.d.ts.map +1 -0
  570. package/lib/types/screens/StatusMetrics.js +252 -0
  571. package/lib/types/sessionHistory.d.ts +32 -0
  572. package/lib/types/sessionHistory.d.ts.map +1 -0
  573. package/lib/types/sessionHistory.js +87 -0
  574. package/lib/types/theme.d.ts +115 -0
  575. package/lib/types/theme.d.ts.map +1 -0
  576. package/lib/types/theme.js +300 -0
  577. package/lib/types/themePrefs.d.ts +28 -0
  578. package/lib/types/themePrefs.d.ts.map +1 -0
  579. package/lib/types/themePrefs.js +59 -0
  580. package/lib/types/ui.d.ts +28 -0
  581. package/lib/types/ui.d.ts.map +1 -0
  582. package/lib/types/ui.js +25 -0
  583. package/lib/types/update.d.ts +76 -0
  584. package/lib/types/update.d.ts.map +1 -0
  585. package/lib/types/update.js +203 -0
  586. package/lib/types/utils/clipboard.d.ts +43 -0
  587. package/lib/types/utils/clipboard.d.ts.map +1 -0
  588. package/lib/types/utils/clipboard.js +82 -0
  589. package/lib/types/utils/debug.d.ts +8 -0
  590. package/lib/types/utils/debug.d.ts.map +1 -0
  591. package/lib/types/utils/debug.js +12 -0
  592. package/lib/types/utils/earlyInput.d.ts +7 -0
  593. package/lib/types/utils/earlyInput.d.ts.map +1 -0
  594. package/lib/types/utils/earlyInput.js +6 -0
  595. package/lib/types/utils/env.d.ts +10 -0
  596. package/lib/types/utils/env.d.ts.map +1 -0
  597. package/lib/types/utils/env.js +9 -0
  598. package/lib/types/utils/envUtils.d.ts +8 -0
  599. package/lib/types/utils/envUtils.d.ts.map +1 -0
  600. package/lib/types/utils/envUtils.js +13 -0
  601. package/lib/types/utils/execFileNoThrow.d.ts +34 -0
  602. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -0
  603. package/lib/types/utils/execFileNoThrow.js +31 -0
  604. package/lib/types/utils/fullscreen.d.ts +8 -0
  605. package/lib/types/utils/fullscreen.d.ts.map +1 -0
  606. package/lib/types/utils/fullscreen.js +10 -0
  607. package/lib/types/utils/intl.d.ts +7 -0
  608. package/lib/types/utils/intl.d.ts.map +1 -0
  609. package/lib/types/utils/intl.js +9 -0
  610. package/lib/types/utils/loaded-context.d.ts +20 -0
  611. package/lib/types/utils/loaded-context.d.ts.map +1 -0
  612. package/lib/types/utils/loaded-context.js +36 -0
  613. package/lib/types/utils/log.d.ts +7 -0
  614. package/lib/types/utils/log.d.ts.map +1 -0
  615. package/lib/types/utils/log.js +9 -0
  616. package/lib/types/utils/mentions.d.ts +30 -0
  617. package/lib/types/utils/mentions.d.ts.map +1 -0
  618. package/lib/types/utils/mentions.js +72 -0
  619. package/lib/types/utils/narration.d.ts +11 -0
  620. package/lib/types/utils/narration.d.ts.map +1 -0
  621. package/lib/types/utils/narration.js +16 -0
  622. package/lib/types/utils/semver.d.ts +9 -0
  623. package/lib/types/utils/semver.d.ts.map +1 -0
  624. package/lib/types/utils/semver.js +24 -0
  625. package/lib/types/utils/sliceAnsi.d.ts +12 -0
  626. package/lib/types/utils/sliceAnsi.d.ts.map +1 -0
  627. package/lib/types/utils/sliceAnsi.js +79 -0
  628. package/lib/types/working-activity.d.ts +19 -0
  629. package/lib/types/working-activity.d.ts.map +1 -0
  630. package/lib/types/working-activity.js +18 -0
  631. package/package.json +141 -0
  632. package/skills/audit/SKILL.md +24 -0
  633. package/skills/bug/SKILL.md +27 -0
  634. package/skills/pr-comments/SKILL.md +20 -0
  635. package/skills/practice/SKILL.md +22 -0
  636. package/skills/release-notes/SKILL.md +25 -0
  637. package/skills/review/SKILL.md +25 -0
  638. package/skills/vuln-check/SKILL.md +25 -0
@@ -0,0 +1,424 @@
1
+ import { createLayoutNode } from './layout/engine.js';
2
+ import { LayoutDisplay, LayoutMeasureMode } from './layout/node.js';
3
+ import measureText from './measure-text.js';
4
+ import { addPendingClear, nodeCache } from './node-cache.js';
5
+ import squashTextNodes from './squash-text-nodes.js';
6
+ import { expandTabs } from './tabstops.js';
7
+ import wrapText from './wrap-text.js';
8
+ /**
9
+ * Create an element node of the given kind, allocating its yoga layout node
10
+ * unless the kind renders without layout (`ink-virtual-text`, `ink-link`,
11
+ * `ink-progress`).
12
+ * @param nodeName - the element kind to create.
13
+ * @returns the new element node.
14
+ */
15
+ export const createNode = (nodeName) => {
16
+ const needsYogaNode = nodeName !== 'ink-virtual-text' &&
17
+ nodeName !== 'ink-link' &&
18
+ nodeName !== 'ink-progress';
19
+ const node = {
20
+ nodeName,
21
+ style: {},
22
+ attributes: {},
23
+ childNodes: [],
24
+ parentNode: undefined,
25
+ yogaNode: needsYogaNode ? createLayoutNode() : undefined,
26
+ dirty: false,
27
+ };
28
+ if (nodeName === 'ink-text') {
29
+ node.yogaNode?.setMeasureFunc(measureTextNode.bind(null, node));
30
+ }
31
+ else if (nodeName === 'ink-raw-ansi') {
32
+ node.yogaNode?.setMeasureFunc(measureRawAnsiNode.bind(null, node));
33
+ }
34
+ return node;
35
+ };
36
+ /**
37
+ * Append a child element to a parent, moving it from its current parent if
38
+ * any and keeping the yoga tree in sync.
39
+ * @param node - the parent element.
40
+ * @param childNode - the element to append.
41
+ */
42
+ export const appendChildNode = (node, childNode) => {
43
+ if (childNode.parentNode) {
44
+ removeChildNode(childNode.parentNode, childNode);
45
+ }
46
+ childNode.parentNode = node;
47
+ node.childNodes.push(childNode);
48
+ if (childNode.yogaNode) {
49
+ node.yogaNode?.insertChild(childNode.yogaNode, node.yogaNode.getChildCount());
50
+ }
51
+ markDirty(node);
52
+ };
53
+ /**
54
+ * Insert a child before an existing sibling, moving it from its current
55
+ * parent if any and keeping the yoga tree in sync. Nodes without a yoga
56
+ * node do not affect yoga indices.
57
+ * @param node - the parent element.
58
+ * @param newChildNode - the node to insert.
59
+ * @param beforeChildNode - the sibling the new node is inserted before;
60
+ * when absent from the parent, the new node is appended.
61
+ */
62
+ export const insertBeforeNode = (node, newChildNode, beforeChildNode) => {
63
+ if (newChildNode.parentNode) {
64
+ removeChildNode(newChildNode.parentNode, newChildNode);
65
+ }
66
+ newChildNode.parentNode = node;
67
+ const index = node.childNodes.indexOf(beforeChildNode);
68
+ if (index >= 0) {
69
+ // Calculate yoga index BEFORE modifying childNodes.
70
+ // We can't use DOM index directly because some children (like ink-progress,
71
+ // ink-link, ink-virtual-text) don't have yogaNodes, so DOM indices don't
72
+ // match yoga indices.
73
+ let yogaIndex = 0;
74
+ if (newChildNode.yogaNode && node.yogaNode) {
75
+ for (let i = 0; i < index; i++) {
76
+ if (node.childNodes[i]?.yogaNode) {
77
+ yogaIndex++;
78
+ }
79
+ }
80
+ }
81
+ node.childNodes.splice(index, 0, newChildNode);
82
+ if (newChildNode.yogaNode && node.yogaNode) {
83
+ node.yogaNode.insertChild(newChildNode.yogaNode, yogaIndex);
84
+ }
85
+ markDirty(node);
86
+ return;
87
+ }
88
+ node.childNodes.push(newChildNode);
89
+ if (newChildNode.yogaNode) {
90
+ node.yogaNode?.insertChild(newChildNode.yogaNode, node.yogaNode.getChildCount());
91
+ }
92
+ markDirty(node);
93
+ };
94
+ /**
95
+ * Remove a child node from a parent, clearing its yoga node, cached rects,
96
+ * and parent reference.
97
+ * @param node - the parent element.
98
+ * @param removeNode - the child node to remove.
99
+ */
100
+ export const removeChildNode = (node, removeNode) => {
101
+ if (removeNode.yogaNode) {
102
+ removeNode.parentNode?.yogaNode?.removeChild(removeNode.yogaNode);
103
+ }
104
+ // Collect cached rects from the removed subtree so they can be cleared
105
+ collectRemovedRects(node, removeNode);
106
+ removeNode.parentNode = undefined;
107
+ const index = node.childNodes.indexOf(removeNode);
108
+ if (index >= 0) {
109
+ node.childNodes.splice(index, 1);
110
+ }
111
+ markDirty(node);
112
+ };
113
+ function collectRemovedRects(parent, removed, underAbsolute = false) {
114
+ if (removed.nodeName === '#text')
115
+ return;
116
+ const elem = removed;
117
+ // If this node or any ancestor in the removed subtree was absolute,
118
+ // its painted pixels may overlap non-siblings — flag for global blit
119
+ // disable. Normal-flow removals only affect direct siblings, which
120
+ // hasRemovedChild already handles.
121
+ const isAbsolute = underAbsolute || elem.style.position === 'absolute';
122
+ const cached = nodeCache.get(elem);
123
+ if (cached) {
124
+ addPendingClear(parent, cached, isAbsolute);
125
+ nodeCache.delete(elem);
126
+ }
127
+ for (const child of elem.childNodes) {
128
+ collectRemovedRects(parent, child, isAbsolute);
129
+ }
130
+ }
131
+ /**
132
+ * Set an attribute on an element, skipping `children` and unchanged values
133
+ * so unrelated renders do not mark the node dirty.
134
+ * @param node - the element to update.
135
+ * @param key - the attribute name.
136
+ * @param value - the attribute value.
137
+ */
138
+ export const setAttribute = (node, key, value) => {
139
+ // Skip 'children' - React handles children via appendChild/removeChild,
140
+ // not attributes. React always passes a new children reference, so
141
+ // tracking it as an attribute would mark everything dirty every render.
142
+ if (key === 'children') {
143
+ return;
144
+ }
145
+ // Skip if unchanged
146
+ if (node.attributes[key] === value) {
147
+ return;
148
+ }
149
+ node.attributes[key] = value;
150
+ markDirty(node);
151
+ };
152
+ /**
153
+ * Replace an element's style, skipping the write when the new style is
154
+ * shallow-equal to the current one to avoid needless dirty marks.
155
+ * @param node - the node to update.
156
+ * @param style - the new style object.
157
+ */
158
+ export const setStyle = (node, style) => {
159
+ // Compare style properties to avoid marking dirty unnecessarily.
160
+ // React creates new style objects on every render even when unchanged.
161
+ if (stylesEqual(node.style, style)) {
162
+ return;
163
+ }
164
+ node.style = style;
165
+ markDirty(node);
166
+ };
167
+ /**
168
+ * Replace an element's text styles, skipping the write when the new styles
169
+ * are shallow-equal to the current ones to avoid needless dirty marks.
170
+ * @param node - the element to update.
171
+ * @param textStyles - the new text styles.
172
+ */
173
+ export const setTextStyles = (node, textStyles) => {
174
+ // Same dirty-check guard as setStyle: React (and buildTextStyles in Text.tsx)
175
+ // allocate a new textStyles object on every render even when values are
176
+ // unchanged, so compare by value to avoid markDirty -> yoga re-measurement
177
+ // on every Text re-render.
178
+ if (shallowEqual(node.textStyles, textStyles)) {
179
+ return;
180
+ }
181
+ node.textStyles = textStyles;
182
+ markDirty(node);
183
+ };
184
+ function stylesEqual(a, b) {
185
+ return shallowEqual(a, b);
186
+ }
187
+ function shallowEqual(a, b) {
188
+ // Fast path: same object reference (or both undefined)
189
+ if (a === b)
190
+ return true;
191
+ if (a === undefined || b === undefined)
192
+ return false;
193
+ // Get all keys from both objects
194
+ const aKeys = Object.keys(a);
195
+ const bKeys = Object.keys(b);
196
+ // Different number of properties
197
+ if (aKeys.length !== bKeys.length)
198
+ return false;
199
+ // Compare each property
200
+ for (const key of aKeys) {
201
+ if (a[key] !== b[key])
202
+ return false;
203
+ }
204
+ return true;
205
+ }
206
+ /**
207
+ * Create a text node holding the given string.
208
+ * @param text - the text content.
209
+ * @returns the new text node.
210
+ */
211
+ export const createTextNode = (text) => {
212
+ const node = {
213
+ nodeName: '#text',
214
+ nodeValue: text,
215
+ yogaNode: undefined,
216
+ parentNode: undefined,
217
+ style: {},
218
+ };
219
+ setTextNodeValue(node, text);
220
+ return node;
221
+ };
222
+ const measureWrapCache = new WeakMap();
223
+ const measureTextNode = function (node, width, widthMode) {
224
+ const rawText = node.nodeName === '#text' ? node.nodeValue : squashTextNodes(node);
225
+ // Expand tabs for measurement (worst case: 8 spaces each).
226
+ // Actual tab expansion happens in output.ts based on screen position.
227
+ const text = expandTabs(rawText);
228
+ const dimensions = measureText(text, width);
229
+ // Text fits into container, no need to wrap
230
+ if (dimensions.width <= width) {
231
+ return dimensions;
232
+ }
233
+ // This is happening when <Box> is shrinking child nodes and layout asks
234
+ // if we can fit this text node in a <1px space, so we just say "no"
235
+ if (dimensions.width >= 1 && width > 0 && width < 1) {
236
+ return dimensions;
237
+ }
238
+ // For text with embedded newlines (pre-wrapped content), avoid re-wrapping
239
+ // at measurement width when layout is asking for intrinsic size (Undefined mode).
240
+ // This prevents height inflation during min/max size checks.
241
+ //
242
+ // However, when layout provides an actual constraint (Exactly or AtMost mode),
243
+ // we must respect it and measure at that width. Otherwise, if the actual
244
+ // rendering width is smaller than the natural width, the text will wrap to
245
+ // more lines than layout expects, causing content to be truncated.
246
+ if (text.includes('\n') && widthMode === LayoutMeasureMode.Undefined) {
247
+ const effectiveWidth = Math.max(width, dimensions.width);
248
+ return measureText(text, effectiveWidth);
249
+ }
250
+ const textWrap = node.style.textWrap ?? 'wrap';
251
+ // Incremental path: same node, same width/wrap, text grew by append.
252
+ const cached = measureWrapCache.get(node);
253
+ if (cached !== undefined && cached.width === width && cached.wrap === textWrap) {
254
+ if (cached.text === text) {
255
+ // Same-frame repeat measure (yoga min/max probing) — free.
256
+ return cached.result;
257
+ }
258
+ if (text.startsWith(cached.text)) {
259
+ const tail = text.slice(cached.tailStart);
260
+ const tailWrapped = wrapText(tail, width, textWrap);
261
+ const tailDim = measureText(tailWrapped, width);
262
+ // Commit fully-terminated logical lines into the head so the tail
263
+ // stays bounded at one line of source text.
264
+ const lastNewline = tail.lastIndexOf('\n');
265
+ let { headHeight, tailStart } = cached;
266
+ let tailHeight = tailDim.height;
267
+ if (lastNewline > 0) {
268
+ const committed = wrapText(tail.slice(0, lastNewline + 1), width, textWrap);
269
+ headHeight += measureText(committed, width).height;
270
+ tailStart += lastNewline + 1;
271
+ tailHeight = measureText(wrapText(tail.slice(lastNewline + 1), width, textWrap), width).height;
272
+ }
273
+ const result = {
274
+ width: Math.max(cached.result.width, tailDim.width),
275
+ height: headHeight + tailHeight,
276
+ };
277
+ measureWrapCache.set(node, {
278
+ text,
279
+ width,
280
+ wrap: textWrap,
281
+ headHeight,
282
+ tailStart,
283
+ tailHeight,
284
+ result,
285
+ });
286
+ return result;
287
+ }
288
+ // Text replaced or shrunk (node reuse for a different message): fall
289
+ // through to the full path and overwrite the cache below.
290
+ }
291
+ const wrappedText = wrapText(text, width, textWrap);
292
+ const fullResult = measureText(wrappedText, width);
293
+ // Seed the incremental cache: commit everything before the last newline.
294
+ const lastNewline = text.lastIndexOf('\n');
295
+ const tailStart = lastNewline === -1 ? 0 : lastNewline + 1;
296
+ const headHeight = tailStart === 0
297
+ ? 0
298
+ : measureText(wrapText(text.slice(0, tailStart), width, textWrap), width).height;
299
+ measureWrapCache.set(node, {
300
+ text,
301
+ width,
302
+ wrap: textWrap,
303
+ headHeight,
304
+ tailStart,
305
+ tailHeight: fullResult.height - headHeight,
306
+ result: fullResult,
307
+ });
308
+ return fullResult;
309
+ };
310
+ // ink-raw-ansi nodes hold pre-rendered ANSI strings with known dimensions.
311
+ // No stringWidth, no wrapping, no tab expansion — the producer (e.g. ColorDiff)
312
+ // already wrapped to the target width and each line is exactly one terminal row.
313
+ const measureRawAnsiNode = function (node) {
314
+ return {
315
+ width: node.attributes['rawWidth'],
316
+ height: node.attributes['rawHeight'],
317
+ };
318
+ };
319
+ /**
320
+ * Mark a node and all its ancestors as dirty for re-rendering.
321
+ * Also marks yoga dirty for text remeasurement if this is a text node.
322
+ * @param node - the node whose dirty chain to mark; a no-op when undefined.
323
+ */
324
+ export const markDirty = (node) => {
325
+ let current = node;
326
+ let markedYoga = false;
327
+ while (current) {
328
+ if (current.nodeName !== '#text') {
329
+ ;
330
+ (current).dirty = true;
331
+ // Only mark yoga dirty on leaf nodes that have measure functions
332
+ if (!markedYoga &&
333
+ (current.nodeName === 'ink-text' ||
334
+ current.nodeName === 'ink-raw-ansi') &&
335
+ current.yogaNode) {
336
+ current.yogaNode.markDirty();
337
+ markedYoga = true;
338
+ }
339
+ }
340
+ current = current.parentNode;
341
+ }
342
+ };
343
+ /**
344
+ * Walk to the root and call its onRender (the throttled scheduleRender).
345
+ * Use for DOM-level mutations (scrollTop changes) that should trigger an
346
+ * Ink frame without going through React's reconciler. Pair with markDirty()
347
+ * so the renderer knows which subtree to re-evaluate.
348
+ * @param node - the node to walk up from; a no-op when undefined.
349
+ */
350
+ export const scheduleRenderFrom = (node) => {
351
+ let cur = node;
352
+ while (cur?.parentNode)
353
+ cur = cur.parentNode;
354
+ if (cur && cur.nodeName !== '#text')
355
+ (cur).onRender?.();
356
+ };
357
+ /**
358
+ * Replace a text node's value, skipping the write when unchanged and
359
+ * marking the node dirty otherwise.
360
+ * @param node - the text node to update.
361
+ * @param text - the new text value; non-strings are stringified.
362
+ */
363
+ export const setTextNodeValue = (node, text) => {
364
+ if (typeof text !== 'string') {
365
+ text = String(text);
366
+ }
367
+ // Skip if unchanged
368
+ if (node.nodeValue === text) {
369
+ return;
370
+ }
371
+ node.nodeValue = text;
372
+ markDirty(node);
373
+ };
374
+ function isDOMElement(node) {
375
+ return node.nodeName !== '#text';
376
+ }
377
+ /**
378
+ * Clear yogaNode references on a node and its whole subtree before freeing.
379
+ * freeRecursive() frees the node and ALL its children, so every reference
380
+ * must be cleared to prevent dangling pointers.
381
+ * @param node - the node whose subtree to clear.
382
+ */
383
+ export const clearYogaNodeReferences = (node) => {
384
+ if ('childNodes' in node) {
385
+ for (const child of node.childNodes) {
386
+ clearYogaNodeReferences(child);
387
+ }
388
+ }
389
+ node.yogaNode = undefined;
390
+ };
391
+ /**
392
+ * Find the React component stack responsible for content at screen row `y`.
393
+ *
394
+ * DFS the DOM tree accumulating yoga offsets. Returns the debugOwnerChain of
395
+ * the deepest node whose bounding box contains `y`. Called from ink.tsx when
396
+ * log-update triggers a full reset, to attribute the flicker to its source.
397
+ *
398
+ * Only useful when CLAUDE_CODE_DEBUG_REPAINTS is set (otherwise chains are
399
+ * undefined and this returns []).
400
+ * @param root - the ink-root element to search from.
401
+ * @param y - the screen row to locate.
402
+ * @returns the debugOwnerChain of the deepest node containing `y`, or an
403
+ * empty array when none is recorded.
404
+ */
405
+ export function findOwnerChainAtRow(root, y) {
406
+ let best = [];
407
+ walk(root, 0);
408
+ return best;
409
+ function walk(node, offsetY) {
410
+ const yoga = node.yogaNode;
411
+ if (!yoga || yoga.getDisplay() === LayoutDisplay.None)
412
+ return;
413
+ const top = offsetY + yoga.getComputedTop();
414
+ const height = yoga.getComputedHeight();
415
+ if (y < top || y >= top + height)
416
+ return;
417
+ if (node.debugOwnerChain)
418
+ best = node.debugOwnerChain;
419
+ for (const child of node.childNodes) {
420
+ if (isDOMElement(child))
421
+ walk(child, top);
422
+ }
423
+ }
424
+ }
@@ -0,0 +1,32 @@
1
+ import { Event } from './event.js';
2
+ /**
3
+ * Mouse click event. Fired on left-button release without drag, only when
4
+ * mouse tracking is enabled (i.e. inside <AlternateScreen>).
5
+ *
6
+ * Bubbles from the deepest hit node up through parentNode. Call
7
+ * stopImmediatePropagation() to prevent ancestors' onClick from firing.
8
+ */
9
+ export declare class ClickEvent extends Event {
10
+ /** 0-indexed screen column of the click */
11
+ readonly col: number;
12
+ /** 0-indexed screen row of the click */
13
+ readonly row: number;
14
+ /**
15
+ * Click column relative to the current handler's Box (col - box.x).
16
+ * Recomputed by dispatchClick before each handler fires, so an onClick
17
+ * on a container sees coords relative to that container, not to any
18
+ * child the click landed on.
19
+ */
20
+ localCol: number;
21
+ /** Click row relative to the current handler's Box (row - box.y). */
22
+ localRow: number;
23
+ /**
24
+ * True if the clicked cell has no visible content (unwritten in the
25
+ * screen buffer — both packed words are 0). Handlers can check this to
26
+ * ignore clicks on blank space to the right of text, so accidental
27
+ * clicks on empty terminal space don't toggle state.
28
+ */
29
+ readonly cellIsBlank: boolean;
30
+ constructor(col: number, row: number, cellIsBlank: boolean);
31
+ }
32
+ //# sourceMappingURL=click-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-event.d.ts","sourceRoot":"","sources":["../../../../src/ink/events/click-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,QAAQ,SAAI;IACZ,qEAAqE;IACrE,QAAQ,SAAI;IACZ;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;gBAEjB,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;CAM3D"}
@@ -0,0 +1,36 @@
1
+ import { Event } from './event.js';
2
+ /**
3
+ * Mouse click event. Fired on left-button release without drag, only when
4
+ * mouse tracking is enabled (i.e. inside <AlternateScreen>).
5
+ *
6
+ * Bubbles from the deepest hit node up through parentNode. Call
7
+ * stopImmediatePropagation() to prevent ancestors' onClick from firing.
8
+ */
9
+ export class ClickEvent extends Event {
10
+ /** 0-indexed screen column of the click */
11
+ col;
12
+ /** 0-indexed screen row of the click */
13
+ row;
14
+ /**
15
+ * Click column relative to the current handler's Box (col - box.x).
16
+ * Recomputed by dispatchClick before each handler fires, so an onClick
17
+ * on a container sees coords relative to that container, not to any
18
+ * child the click landed on.
19
+ */
20
+ localCol = 0;
21
+ /** Click row relative to the current handler's Box (row - box.y). */
22
+ localRow = 0;
23
+ /**
24
+ * True if the clicked cell has no visible content (unwritten in the
25
+ * screen buffer — both packed words are 0). Handlers can check this to
26
+ * ignore clicks on blank space to the right of text, so accidental
27
+ * clicks on empty terminal space don't toggle state.
28
+ */
29
+ cellIsBlank;
30
+ constructor(col, row, cellIsBlank) {
31
+ super();
32
+ this.col = col;
33
+ this.row = row;
34
+ this.cellIsBlank = cellIsBlank;
35
+ }
36
+ }
@@ -0,0 +1,63 @@
1
+ import type { EventTarget, TerminalEvent } from './terminal-event.js';
2
+ type DiscreteUpdates = <A, B>(fn: (a: A, b: B) => boolean, a: A, b: B, c: undefined, d: undefined) => boolean;
3
+ /**
4
+ * Owns event dispatch state and the capture/bubble dispatch loop.
5
+ *
6
+ * The reconciler host config reads currentEvent and currentUpdatePriority
7
+ * to implement resolveUpdatePriority, resolveEventType, and
8
+ * resolveEventTimeStamp — mirroring how react-dom's host config reads
9
+ * ReactDOMSharedInternals and window.event.
10
+ *
11
+ * discreteUpdates is injected after construction (by InkReconciler)
12
+ * to break the import cycle.
13
+ */
14
+ export declare class Dispatcher {
15
+ /**
16
+ * The terminal event currently being dispatched, or null between dispatches.
17
+ */
18
+ currentEvent: TerminalEvent | null;
19
+ /**
20
+ * The update priority currently applied to updates triggered by dispatch,
21
+ * or the default priority when none is set.
22
+ */
23
+ currentUpdatePriority: number;
24
+ /**
25
+ * The reconciler's `discreteUpdates` helper, injected after construction to
26
+ * break the import cycle, or null before injection.
27
+ */
28
+ discreteUpdates: DiscreteUpdates | null;
29
+ /**
30
+ * Infer event priority from the currently-dispatching event.
31
+ * Called by the reconciler host config's resolveUpdatePriority
32
+ * when no explicit priority has been set.
33
+ * @returns the current update priority, the dispatching event's mapped
34
+ * priority, or the default priority.
35
+ */
36
+ resolveEventPriority(): number;
37
+ /**
38
+ * Dispatch an event through capture and bubble phases.
39
+ * Returns true if preventDefault() was NOT called.
40
+ * @param target - the node the event is dispatched to.
41
+ * @param event - the event to dispatch.
42
+ * @returns true when `preventDefault()` was not called on the event.
43
+ */
44
+ dispatch(target: EventTarget, event: TerminalEvent): boolean;
45
+ /**
46
+ * Dispatch with discrete (sync) priority.
47
+ * For user-initiated events: keyboard, click, focus, paste.
48
+ * @param target - the node the event is dispatched to.
49
+ * @param event - the event to dispatch.
50
+ * @returns true when `preventDefault()` was not called on the event.
51
+ */
52
+ dispatchDiscrete(target: EventTarget, event: TerminalEvent): boolean;
53
+ /**
54
+ * Dispatch with continuous priority.
55
+ * For high-frequency events: resize, scroll, mouse move.
56
+ * @param target - the node the event is dispatched to.
57
+ * @param event - the event to dispatch.
58
+ * @returns true when `preventDefault()` was not called on the event.
59
+ */
60
+ dispatchContinuous(target: EventTarget, event: TerminalEvent): boolean;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/ink/events/dispatcher.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAqIrE,KAAK,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAC1B,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,EAC3B,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,SAAS,EACZ,CAAC,EAAE,SAAS,KACT,OAAO,CAAA;AAEZ;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,YAAY,EAAE,aAAa,GAAG,IAAI,CAAO;IAEzC;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAiC;IAE9D;;;OAGG;IACH,eAAe,EAAE,eAAe,GAAG,IAAI,CAAO;IAE9C;;;;;;OAMG;IACH,oBAAoB,IAAI,MAAM;IAU9B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO;IAkB5D;;;;;;OAMG;IACH,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO;IAapE;;;;;;OAMG;IACH,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO;CASvE"}