openhorse 0.1.5

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 (587) hide show
  1. package/README.md +460 -0
  2. package/bin/openhorse +56 -0
  3. package/dist/agents/coder.d.ts +12 -0
  4. package/dist/agents/coder.d.ts.map +1 -0
  5. package/dist/agents/coder.js +48 -0
  6. package/dist/agents/coder.js.map +1 -0
  7. package/dist/agents/leader.d.ts +12 -0
  8. package/dist/agents/leader.d.ts.map +1 -0
  9. package/dist/agents/leader.js +49 -0
  10. package/dist/agents/leader.js.map +1 -0
  11. package/dist/agents/router.d.ts +59 -0
  12. package/dist/agents/router.d.ts.map +1 -0
  13. package/dist/agents/router.js +193 -0
  14. package/dist/agents/router.js.map +1 -0
  15. package/dist/cli-ink.d.ts +7 -0
  16. package/dist/cli-ink.d.ts.map +1 -0
  17. package/dist/cli-ink.js +135 -0
  18. package/dist/cli-ink.js.map +1 -0
  19. package/dist/cli.d.ts +7 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +638 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/commands/index.d.ts +12 -0
  24. package/dist/commands/index.d.ts.map +1 -0
  25. package/dist/commands/index.js +1095 -0
  26. package/dist/commands/index.js.map +1 -0
  27. package/dist/commands/parser.d.ts +26 -0
  28. package/dist/commands/parser.d.ts.map +1 -0
  29. package/dist/commands/parser.js +61 -0
  30. package/dist/commands/parser.js.map +1 -0
  31. package/dist/commands/types.d.ts +61 -0
  32. package/dist/commands/types.d.ts.map +1 -0
  33. package/dist/commands/types.js +32 -0
  34. package/dist/commands/types.js.map +1 -0
  35. package/dist/core/agent.d.ts +66 -0
  36. package/dist/core/agent.d.ts.map +1 -0
  37. package/dist/core/agent.js +55 -0
  38. package/dist/core/agent.js.map +1 -0
  39. package/dist/core/brain.d.ts +41 -0
  40. package/dist/core/brain.d.ts.map +1 -0
  41. package/dist/core/brain.js +92 -0
  42. package/dist/core/brain.js.map +1 -0
  43. package/dist/core/cost-tracker.d.ts +107 -0
  44. package/dist/core/cost-tracker.d.ts.map +1 -0
  45. package/dist/core/cost-tracker.js +199 -0
  46. package/dist/core/cost-tracker.js.map +1 -0
  47. package/dist/core/strategy-tracker.d.ts +61 -0
  48. package/dist/core/strategy-tracker.d.ts.map +1 -0
  49. package/dist/core/strategy-tracker.js +124 -0
  50. package/dist/core/strategy-tracker.js.map +1 -0
  51. package/dist/framework/index.d.ts +20 -0
  52. package/dist/framework/index.d.ts.map +1 -0
  53. package/dist/framework/index.js +29 -0
  54. package/dist/framework/index.js.map +1 -0
  55. package/dist/framework/prompt.d.ts +40 -0
  56. package/dist/framework/prompt.d.ts.map +1 -0
  57. package/dist/framework/prompt.js +112 -0
  58. package/dist/framework/prompt.js.map +1 -0
  59. package/dist/framework/query.d.ts +86 -0
  60. package/dist/framework/query.d.ts.map +1 -0
  61. package/dist/framework/query.js +177 -0
  62. package/dist/framework/query.js.map +1 -0
  63. package/dist/framework/store.d.ts +64 -0
  64. package/dist/framework/store.d.ts.map +1 -0
  65. package/dist/framework/store.js +78 -0
  66. package/dist/framework/store.js.map +1 -0
  67. package/dist/framework/tool-state.d.ts +22 -0
  68. package/dist/framework/tool-state.d.ts.map +1 -0
  69. package/dist/framework/tool-state.js +40 -0
  70. package/dist/framework/tool-state.js.map +1 -0
  71. package/dist/framework/tool.d.ts +88 -0
  72. package/dist/framework/tool.d.ts.map +1 -0
  73. package/dist/framework/tool.js +60 -0
  74. package/dist/framework/tool.js.map +1 -0
  75. package/dist/harness/harness.d.ts +96 -0
  76. package/dist/harness/harness.d.ts.map +1 -0
  77. package/dist/harness/harness.js +224 -0
  78. package/dist/harness/harness.js.map +1 -0
  79. package/dist/harness/safety.d.ts +89 -0
  80. package/dist/harness/safety.d.ts.map +1 -0
  81. package/dist/harness/safety.js +178 -0
  82. package/dist/harness/safety.js.map +1 -0
  83. package/dist/index.d.ts +30 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +57 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/init.d.ts +178 -0
  88. package/dist/init.d.ts.map +1 -0
  89. package/dist/init.js +473 -0
  90. package/dist/init.js.map +1 -0
  91. package/dist/ink/bidi.d.ts +16 -0
  92. package/dist/ink/bidi.d.ts.map +1 -0
  93. package/dist/ink/bidi.js +124 -0
  94. package/dist/ink/bidi.js.map +1 -0
  95. package/dist/ink/clearTerminal.d.ts +14 -0
  96. package/dist/ink/clearTerminal.d.ts.map +1 -0
  97. package/dist/ink/clearTerminal.js +63 -0
  98. package/dist/ink/clearTerminal.js.map +1 -0
  99. package/dist/ink/colorize.d.ts +17 -0
  100. package/dist/ink/colorize.d.ts.map +1 -0
  101. package/dist/ink/colorize.js +208 -0
  102. package/dist/ink/colorize.js.map +1 -0
  103. package/dist/ink/components/App.d.ts +73 -0
  104. package/dist/ink/components/App.d.ts.map +1 -0
  105. package/dist/ink/components/App.js +646 -0
  106. package/dist/ink/components/App.js.map +1 -0
  107. package/dist/ink/components/AppContext.d.ts +12 -0
  108. package/dist/ink/components/AppContext.d.ts.map +1 -0
  109. package/dist/ink/components/AppContext.js +14 -0
  110. package/dist/ink/components/AppContext.js.map +1 -0
  111. package/dist/ink/components/Box.d.ts +44 -0
  112. package/dist/ink/components/Box.d.ts.map +1 -0
  113. package/dist/ink/components/Box.js +191 -0
  114. package/dist/ink/components/Box.js.map +1 -0
  115. package/dist/ink/components/ClockContext.d.ts +9 -0
  116. package/dist/ink/components/ClockContext.d.ts.map +1 -0
  117. package/dist/ink/components/ClockContext.js +146 -0
  118. package/dist/ink/components/ClockContext.js.map +1 -0
  119. package/dist/ink/components/CursorDeclarationContext.d.ts +23 -0
  120. package/dist/ink/components/CursorDeclarationContext.d.ts.map +1 -0
  121. package/dist/ink/components/CursorDeclarationContext.js +6 -0
  122. package/dist/ink/components/CursorDeclarationContext.js.map +1 -0
  123. package/dist/ink/components/ErrorOverview.d.ts +6 -0
  124. package/dist/ink/components/ErrorOverview.d.ts.map +1 -0
  125. package/dist/ink/components/ErrorOverview.js +27 -0
  126. package/dist/ink/components/ErrorOverview.js.map +1 -0
  127. package/dist/ink/components/Newline.d.ts +13 -0
  128. package/dist/ink/components/Newline.d.ts.map +1 -0
  129. package/dist/ink/components/Newline.js +36 -0
  130. package/dist/ink/components/Newline.js.map +1 -0
  131. package/dist/ink/components/NoSelect.d.ts +20 -0
  132. package/dist/ink/components/NoSelect.d.ts.map +1 -0
  133. package/dist/ink/components/NoSelect.js +63 -0
  134. package/dist/ink/components/NoSelect.js.map +1 -0
  135. package/dist/ink/components/RawAnsi.d.ts +17 -0
  136. package/dist/ink/components/RawAnsi.d.ts.map +1 -0
  137. package/dist/ink/components/RawAnsi.js +52 -0
  138. package/dist/ink/components/RawAnsi.js.map +1 -0
  139. package/dist/ink/components/Spacer.d.ts +6 -0
  140. package/dist/ink/components/Spacer.d.ts.map +1 -0
  141. package/dist/ink/components/Spacer.js +26 -0
  142. package/dist/ink/components/Spacer.js.map +1 -0
  143. package/dist/ink/components/StdinContext.d.ts +28 -0
  144. package/dist/ink/components/StdinContext.d.ts.map +1 -0
  145. package/dist/ink/components/StdinContext.js +19 -0
  146. package/dist/ink/components/StdinContext.js.map +1 -0
  147. package/dist/ink/components/TerminalFocusContext.d.ts +10 -0
  148. package/dist/ink/components/TerminalFocusContext.d.ts.map +1 -0
  149. package/dist/ink/components/TerminalFocusContext.js +81 -0
  150. package/dist/ink/components/TerminalFocusContext.js.map +1 -0
  151. package/dist/ink/components/TerminalSizeContext.d.ts +6 -0
  152. package/dist/ink/components/TerminalSizeContext.d.ts.map +1 -0
  153. package/dist/ink/components/TerminalSizeContext.js +6 -0
  154. package/dist/ink/components/TerminalSizeContext.js.map +1 -0
  155. package/dist/ink/components/Text.d.ts +56 -0
  156. package/dist/ink/components/Text.d.ts.map +1 -0
  157. package/dist/ink/components/Text.js +201 -0
  158. package/dist/ink/components/Text.js.map +1 -0
  159. package/dist/ink/constants.d.ts +2 -0
  160. package/dist/ink/constants.d.ts.map +1 -0
  161. package/dist/ink/constants.js +6 -0
  162. package/dist/ink/constants.js.map +1 -0
  163. package/dist/ink/devtools.d.ts +3 -0
  164. package/dist/ink/devtools.d.ts.map +1 -0
  165. package/dist/ink/devtools.js +5 -0
  166. package/dist/ink/devtools.js.map +1 -0
  167. package/dist/ink/dom.d.ts +77 -0
  168. package/dist/ink/dom.d.ts.map +1 -0
  169. package/dist/ink/dom.js +322 -0
  170. package/dist/ink/dom.js.map +1 -0
  171. package/dist/ink/events/click-event.d.ts +32 -0
  172. package/dist/ink/events/click-event.d.ts.map +1 -0
  173. package/dist/ink/events/click-event.js +30 -0
  174. package/dist/ink/events/click-event.js.map +1 -0
  175. package/dist/ink/events/dispatcher.d.ts +41 -0
  176. package/dist/ink/events/dispatcher.d.ts.map +1 -0
  177. package/dist/ink/events/dispatcher.js +181 -0
  178. package/dist/ink/events/dispatcher.js.map +1 -0
  179. package/dist/ink/events/emitter.d.ts +6 -0
  180. package/dist/ink/events/emitter.d.ts.map +1 -0
  181. package/dist/ink/events/emitter.js +36 -0
  182. package/dist/ink/events/emitter.js.map +1 -0
  183. package/dist/ink/events/event-handlers.d.ts +47 -0
  184. package/dist/ink/events/event-handlers.d.ts.map +1 -0
  185. package/dist/ink/events/event-handlers.js +34 -0
  186. package/dist/ink/events/event-handlers.js.map +1 -0
  187. package/dist/ink/events/event.d.ts +6 -0
  188. package/dist/ink/events/event.d.ts.map +1 -0
  189. package/dist/ink/events/event.js +16 -0
  190. package/dist/ink/events/event.js.map +1 -0
  191. package/dist/ink/events/focus-event.d.ts +14 -0
  192. package/dist/ink/events/focus-event.d.ts.map +1 -0
  193. package/dist/ink/events/focus-event.js +20 -0
  194. package/dist/ink/events/focus-event.js.map +1 -0
  195. package/dist/ink/events/input-event.d.ts +31 -0
  196. package/dist/ink/events/input-event.d.ts.map +1 -0
  197. package/dist/ink/events/input-event.js +163 -0
  198. package/dist/ink/events/input-event.js.map +1 -0
  199. package/dist/ink/events/keyboard-event.d.ts +20 -0
  200. package/dist/ink/events/keyboard-event.d.ts.map +1 -0
  201. package/dist/ink/events/keyboard-event.js +44 -0
  202. package/dist/ink/events/keyboard-event.js.map +1 -0
  203. package/dist/ink/events/terminal-event.d.ts +55 -0
  204. package/dist/ink/events/terminal-event.d.ts.map +1 -0
  205. package/dist/ink/events/terminal-event.js +79 -0
  206. package/dist/ink/events/terminal-event.js.map +1 -0
  207. package/dist/ink/events/terminal-focus-event.d.ts +14 -0
  208. package/dist/ink/events/terminal-focus-event.d.ts.map +1 -0
  209. package/dist/ink/events/terminal-focus-event.js +19 -0
  210. package/dist/ink/events/terminal-focus-event.js.map +1 -0
  211. package/dist/ink/focus.d.ts +44 -0
  212. package/dist/ink/focus.d.ts.map +1 -0
  213. package/dist/ink/focus.js +164 -0
  214. package/dist/ink/focus.js.map +1 -0
  215. package/dist/ink/frame.d.ts +95 -0
  216. package/dist/ink/frame.d.ts.map +1 -0
  217. package/dist/ink/frame.js +35 -0
  218. package/dist/ink/frame.js.map +1 -0
  219. package/dist/ink/get-max-width.d.ts +18 -0
  220. package/dist/ink/get-max-width.d.ts.map +1 -0
  221. package/dist/ink/get-max-width.js +26 -0
  222. package/dist/ink/get-max-width.js.map +1 -0
  223. package/dist/ink/hit-test.d.ts +34 -0
  224. package/dist/ink/hit-test.d.ts.map +1 -0
  225. package/dist/ink/hit-test.js +119 -0
  226. package/dist/ink/hit-test.js.map +1 -0
  227. package/dist/ink/hooks/use-animation-frame.d.ts +27 -0
  228. package/dist/ink/hooks/use-animation-frame.d.ts.map +1 -0
  229. package/dist/ink/hooks/use-animation-frame.js +52 -0
  230. package/dist/ink/hooks/use-animation-frame.js.map +1 -0
  231. package/dist/ink/hooks/use-app.d.ts +6 -0
  232. package/dist/ink/hooks/use-app.d.ts.map +1 -0
  233. package/dist/ink/hooks/use-app.js +13 -0
  234. package/dist/ink/hooks/use-app.js.map +1 -0
  235. package/dist/ink/hooks/use-declared-cursor.d.ts +27 -0
  236. package/dist/ink/hooks/use-declared-cursor.d.ts.map +1 -0
  237. package/dist/ink/hooks/use-declared-cursor.js +67 -0
  238. package/dist/ink/hooks/use-declared-cursor.js.map +1 -0
  239. package/dist/ink/hooks/use-input.d.ts +38 -0
  240. package/dist/ink/hooks/use-input.d.ts.map +1 -0
  241. package/dist/ink/hooks/use-input.js +86 -0
  242. package/dist/ink/hooks/use-input.js.map +1 -0
  243. package/dist/ink/hooks/use-interval.d.ts +19 -0
  244. package/dist/ink/hooks/use-interval.d.ts.map +1 -0
  245. package/dist/ink/hooks/use-interval.js +59 -0
  246. package/dist/ink/hooks/use-interval.js.map +1 -0
  247. package/dist/ink/hooks/use-search-highlight.d.ts +31 -0
  248. package/dist/ink/hooks/use-search-highlight.d.ts.map +1 -0
  249. package/dist/ink/hooks/use-search-highlight.js +39 -0
  250. package/dist/ink/hooks/use-search-highlight.js.map +1 -0
  251. package/dist/ink/hooks/use-selection.d.ts +40 -0
  252. package/dist/ink/hooks/use-selection.d.ts.map +1 -0
  253. package/dist/ink/hooks/use-selection.js +68 -0
  254. package/dist/ink/hooks/use-selection.js.map +1 -0
  255. package/dist/ink/hooks/use-stdin.d.ts +6 -0
  256. package/dist/ink/hooks/use-stdin.d.ts.map +1 -0
  257. package/dist/ink/hooks/use-stdin.js +13 -0
  258. package/dist/ink/hooks/use-stdin.js.map +1 -0
  259. package/dist/ink/hooks/use-tab-status.d.ts +14 -0
  260. package/dist/ink/hooks/use-tab-status.d.ts.map +1 -0
  261. package/dist/ink/hooks/use-tab-status.js +61 -0
  262. package/dist/ink/hooks/use-tab-status.js.map +1 -0
  263. package/dist/ink/hooks/use-terminal-focus.d.ts +11 -0
  264. package/dist/ink/hooks/use-terminal-focus.d.ts.map +1 -0
  265. package/dist/ink/hooks/use-terminal-focus.js +22 -0
  266. package/dist/ink/hooks/use-terminal-focus.js.map +1 -0
  267. package/dist/ink/hooks/use-terminal-title.d.ts +13 -0
  268. package/dist/ink/hooks/use-terminal-title.d.ts.map +1 -0
  269. package/dist/ink/hooks/use-terminal-title.js +36 -0
  270. package/dist/ink/hooks/use-terminal-title.js.map +1 -0
  271. package/dist/ink/hooks/use-terminal-viewport.d.ts +30 -0
  272. package/dist/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
  273. package/dist/ink/hooks/use-terminal-viewport.js +81 -0
  274. package/dist/ink/hooks/use-terminal-viewport.js.map +1 -0
  275. package/dist/ink/index.d.ts +54 -0
  276. package/dist/ink/index.d.ts.map +1 -0
  277. package/dist/ink/index.js +111 -0
  278. package/dist/ink/index.js.map +1 -0
  279. package/dist/ink/ink.d.ts +371 -0
  280. package/dist/ink/ink.d.ts.map +1 -0
  281. package/dist/ink/ink.js +1686 -0
  282. package/dist/ink/ink.js.map +1 -0
  283. package/dist/ink/instances.d.ts +4 -0
  284. package/dist/ink/instances.d.ts.map +1 -0
  285. package/dist/ink/instances.js +10 -0
  286. package/dist/ink/instances.js.map +1 -0
  287. package/dist/ink/line-width-cache.d.ts +2 -0
  288. package/dist/ink/line-width-cache.d.ts.map +1 -0
  289. package/dist/ink/line-width-cache.js +23 -0
  290. package/dist/ink/line-width-cache.js.map +1 -0
  291. package/dist/ink/log-update.d.ts +18 -0
  292. package/dist/ink/log-update.d.ts.map +1 -0
  293. package/dist/ink/log-update.js +637 -0
  294. package/dist/ink/log-update.js.map +1 -0
  295. package/dist/ink/measure-element.d.ts +17 -0
  296. package/dist/ink/measure-element.d.ts.map +1 -0
  297. package/dist/ink/measure-element.js +11 -0
  298. package/dist/ink/measure-element.js.map +1 -0
  299. package/dist/ink/measure-text.d.ts +7 -0
  300. package/dist/ink/measure-text.d.ts.map +1 -0
  301. package/dist/ink/measure-text.js +38 -0
  302. package/dist/ink/measure-text.js.map +1 -0
  303. package/dist/ink/node-cache.d.ts +21 -0
  304. package/dist/ink/node-cache.d.ts.map +1 -0
  305. package/dist/ink/node-cache.js +36 -0
  306. package/dist/ink/node-cache.js.map +1 -0
  307. package/dist/ink/optimizer.d.ts +16 -0
  308. package/dist/ink/optimizer.d.ts.map +1 -0
  309. package/dist/ink/optimizer.js +85 -0
  310. package/dist/ink/optimizer.js.map +1 -0
  311. package/dist/ink/output.d.ts +120 -0
  312. package/dist/ink/output.d.ts.map +1 -0
  313. package/dist/ink/output.js +559 -0
  314. package/dist/ink/output.js.map +1 -0
  315. package/dist/ink/parse-keypress.d.ts +112 -0
  316. package/dist/ink/parse-keypress.d.ts.map +1 -0
  317. package/dist/ink/parse-keypress.js +719 -0
  318. package/dist/ink/parse-keypress.js.map +1 -0
  319. package/dist/ink/parse-keypress.test.d.ts +2 -0
  320. package/dist/ink/parse-keypress.test.d.ts.map +1 -0
  321. package/dist/ink/parse-keypress.test.js +37 -0
  322. package/dist/ink/parse-keypress.test.js.map +1 -0
  323. package/dist/ink/reconciler.d.ts +12 -0
  324. package/dist/ink/reconciler.d.ts.map +1 -0
  325. package/dist/ink/reconciler.js +456 -0
  326. package/dist/ink/reconciler.js.map +1 -0
  327. package/dist/ink/render-border.d.ts +25 -0
  328. package/dist/ink/render-border.d.ts.map +1 -0
  329. package/dist/ink/render-border.js +141 -0
  330. package/dist/ink/render-border.js.map +1 -0
  331. package/dist/ink/render-node-to-output.d.ts +46 -0
  332. package/dist/ink/render-node-to-output.d.ts.map +1 -0
  333. package/dist/ink/render-node-to-output.js +1257 -0
  334. package/dist/ink/render-node-to-output.js.map +1 -0
  335. package/dist/ink/render-to-screen.d.ts +47 -0
  336. package/dist/ink/render-to-screen.d.ts.map +1 -0
  337. package/dist/ink/render-to-screen.js +213 -0
  338. package/dist/ink/render-to-screen.js.map +1 -0
  339. package/dist/ink/renderer.d.ts +15 -0
  340. package/dist/ink/renderer.d.ts.map +1 -0
  341. package/dist/ink/renderer.js +169 -0
  342. package/dist/ink/renderer.js.map +1 -0
  343. package/dist/ink/root.d.ts +75 -0
  344. package/dist/ink/root.d.ts.map +1 -0
  345. package/dist/ink/root.js +89 -0
  346. package/dist/ink/root.js.map +1 -0
  347. package/dist/ink/screen.d.ts +270 -0
  348. package/dist/ink/screen.d.ts.map +1 -0
  349. package/dist/ink/screen.js +1194 -0
  350. package/dist/ink/screen.js.map +1 -0
  351. package/dist/ink/searchHighlight.d.ts +21 -0
  352. package/dist/ink/searchHighlight.d.ts.map +1 -0
  353. package/dist/ink/searchHighlight.js +82 -0
  354. package/dist/ink/searchHighlight.js.map +1 -0
  355. package/dist/ink/selection.d.ts +230 -0
  356. package/dist/ink/selection.d.ts.map +1 -0
  357. package/dist/ink/selection.js +814 -0
  358. package/dist/ink/selection.js.map +1 -0
  359. package/dist/ink/squash-text-nodes.d.ts +23 -0
  360. package/dist/ink/squash-text-nodes.d.ts.map +1 -0
  361. package/dist/ink/squash-text-nodes.js +60 -0
  362. package/dist/ink/squash-text-nodes.js.map +1 -0
  363. package/dist/ink/stringWidth.d.ts +2 -0
  364. package/dist/ink/stringWidth.d.ts.map +1 -0
  365. package/dist/ink/stringWidth.js +207 -0
  366. package/dist/ink/stringWidth.js.map +1 -0
  367. package/dist/ink/styles.d.ts +307 -0
  368. package/dist/ink/styles.d.ts.map +1 -0
  369. package/dist/ink/styles.js +302 -0
  370. package/dist/ink/styles.js.map +1 -0
  371. package/dist/ink/supports-hyperlinks.d.ts +14 -0
  372. package/dist/ink/supports-hyperlinks.d.ts.map +1 -0
  373. package/dist/ink/supports-hyperlinks.js +48 -0
  374. package/dist/ink/supports-hyperlinks.js.map +1 -0
  375. package/dist/ink/tabstops.d.ts +2 -0
  376. package/dist/ink/tabstops.d.ts.map +1 -0
  377. package/dist/ink/tabstops.js +43 -0
  378. package/dist/ink/tabstops.js.map +1 -0
  379. package/dist/ink/terminal-focus-state.d.ts +7 -0
  380. package/dist/ink/terminal-focus-state.d.ts.map +1 -0
  381. package/dist/ink/terminal-focus-state.js +43 -0
  382. package/dist/ink/terminal-focus-state.js.map +1 -0
  383. package/dist/ink/terminal-querier.d.ts +130 -0
  384. package/dist/ink/terminal-querier.d.ts.map +1 -0
  385. package/dist/ink/terminal-querier.js +184 -0
  386. package/dist/ink/terminal-querier.js.map +1 -0
  387. package/dist/ink/terminal.d.ts +56 -0
  388. package/dist/ink/terminal.d.ts.map +1 -0
  389. package/dist/ink/terminal.js +249 -0
  390. package/dist/ink/terminal.js.map +1 -0
  391. package/dist/ink/termio/csi.d.ts +166 -0
  392. package/dist/ink/termio/csi.d.ts.map +1 -0
  393. package/dist/ink/termio/csi.js +285 -0
  394. package/dist/ink/termio/csi.js.map +1 -0
  395. package/dist/ink/termio/dec.d.ts +38 -0
  396. package/dist/ink/termio/dec.d.ts.map +1 -0
  397. package/dist/ink/termio/dec.js +59 -0
  398. package/dist/ink/termio/dec.js.map +1 -0
  399. package/dist/ink/termio.d.ts +25 -0
  400. package/dist/ink/termio.d.ts.map +1 -0
  401. package/dist/ink/termio.js +32 -0
  402. package/dist/ink/termio.js.map +1 -0
  403. package/dist/ink/useTerminalNotification.d.ts +27 -0
  404. package/dist/ink/useTerminalNotification.d.ts.map +1 -0
  405. package/dist/ink/useTerminalNotification.js +62 -0
  406. package/dist/ink/useTerminalNotification.js.map +1 -0
  407. package/dist/ink/warn.d.ts +2 -0
  408. package/dist/ink/warn.d.ts.map +1 -0
  409. package/dist/ink/warn.js +14 -0
  410. package/dist/ink/warn.js.map +1 -0
  411. package/dist/ink/widest-line.d.ts +2 -0
  412. package/dist/ink/widest-line.d.ts.map +1 -0
  413. package/dist/ink/widest-line.js +18 -0
  414. package/dist/ink/widest-line.js.map +1 -0
  415. package/dist/ink/wrap-text.d.ts +3 -0
  416. package/dist/ink/wrap-text.d.ts.map +1 -0
  417. package/dist/ink/wrap-text.js +61 -0
  418. package/dist/ink/wrap-text.js.map +1 -0
  419. package/dist/ink/wrapAnsi.d.ts +8 -0
  420. package/dist/ink/wrapAnsi.d.ts.map +1 -0
  421. package/dist/ink/wrapAnsi.js +13 -0
  422. package/dist/ink/wrapAnsi.js.map +1 -0
  423. package/dist/memory/embeddings.d.ts +33 -0
  424. package/dist/memory/embeddings.d.ts.map +1 -0
  425. package/dist/memory/embeddings.js +123 -0
  426. package/dist/memory/embeddings.js.map +1 -0
  427. package/dist/memory/index.d.ts +14 -0
  428. package/dist/memory/index.d.ts.map +1 -0
  429. package/dist/memory/index.js +31 -0
  430. package/dist/memory/index.js.map +1 -0
  431. package/dist/memory/prompts.d.ts +12 -0
  432. package/dist/memory/prompts.d.ts.map +1 -0
  433. package/dist/memory/prompts.js +117 -0
  434. package/dist/memory/prompts.js.map +1 -0
  435. package/dist/memory/semantic-search.d.ts +45 -0
  436. package/dist/memory/semantic-search.d.ts.map +1 -0
  437. package/dist/memory/semantic-search.js +112 -0
  438. package/dist/memory/semantic-search.js.map +1 -0
  439. package/dist/memory/storage.d.ts +79 -0
  440. package/dist/memory/storage.d.ts.map +1 -0
  441. package/dist/memory/storage.js +285 -0
  442. package/dist/memory/storage.js.map +1 -0
  443. package/dist/memory/store.d.ts +103 -0
  444. package/dist/memory/store.d.ts.map +1 -0
  445. package/dist/memory/store.js +226 -0
  446. package/dist/memory/store.js.map +1 -0
  447. package/dist/memory/types.d.ts +40 -0
  448. package/dist/memory/types.d.ts.map +1 -0
  449. package/dist/memory/types.js +71 -0
  450. package/dist/memory/types.js.map +1 -0
  451. package/dist/memory/validation.d.ts +28 -0
  452. package/dist/memory/validation.d.ts.map +1 -0
  453. package/dist/memory/validation.js +147 -0
  454. package/dist/memory/validation.js.map +1 -0
  455. package/dist/memory/vector-store.d.ts +49 -0
  456. package/dist/memory/vector-store.d.ts.map +1 -0
  457. package/dist/memory/vector-store.js +259 -0
  458. package/dist/memory/vector-store.js.map +1 -0
  459. package/dist/screens/REPL.d.ts +21 -0
  460. package/dist/screens/REPL.d.ts.map +1 -0
  461. package/dist/screens/REPL.js +139 -0
  462. package/dist/screens/REPL.js.map +1 -0
  463. package/dist/services/agent-runner.d.ts +68 -0
  464. package/dist/services/agent-runner.d.ts.map +1 -0
  465. package/dist/services/agent-runner.js +186 -0
  466. package/dist/services/agent-runner.js.map +1 -0
  467. package/dist/services/atomic-write.d.ts +12 -0
  468. package/dist/services/atomic-write.d.ts.map +1 -0
  469. package/dist/services/atomic-write.js +27 -0
  470. package/dist/services/atomic-write.js.map +1 -0
  471. package/dist/services/config-dir.d.ts +55 -0
  472. package/dist/services/config-dir.d.ts.map +1 -0
  473. package/dist/services/config-dir.js +136 -0
  474. package/dist/services/config-dir.js.map +1 -0
  475. package/dist/services/config.d.ts +54 -0
  476. package/dist/services/config.d.ts.map +1 -0
  477. package/dist/services/config.js +98 -0
  478. package/dist/services/config.js.map +1 -0
  479. package/dist/services/file-glob.d.ts +26 -0
  480. package/dist/services/file-glob.d.ts.map +1 -0
  481. package/dist/services/file-glob.js +134 -0
  482. package/dist/services/file-glob.js.map +1 -0
  483. package/dist/services/global-config.d.ts +109 -0
  484. package/dist/services/global-config.d.ts.map +1 -0
  485. package/dist/services/global-config.js +211 -0
  486. package/dist/services/global-config.js.map +1 -0
  487. package/dist/services/llm.d.ts +139 -0
  488. package/dist/services/llm.d.ts.map +1 -0
  489. package/dist/services/llm.js +376 -0
  490. package/dist/services/llm.js.map +1 -0
  491. package/dist/services/memory.d.ts +39 -0
  492. package/dist/services/memory.d.ts.map +1 -0
  493. package/dist/services/memory.js +88 -0
  494. package/dist/services/memory.js.map +1 -0
  495. package/dist/services/session-storage.d.ts +136 -0
  496. package/dist/services/session-storage.d.ts.map +1 -0
  497. package/dist/services/session-storage.js +304 -0
  498. package/dist/services/session-storage.js.map +1 -0
  499. package/dist/services/task-manager.d.ts +154 -0
  500. package/dist/services/task-manager.d.ts.map +1 -0
  501. package/dist/services/task-manager.js +288 -0
  502. package/dist/services/task-manager.js.map +1 -0
  503. package/dist/services/yaml-config.d.ts +57 -0
  504. package/dist/services/yaml-config.d.ts.map +1 -0
  505. package/dist/services/yaml-config.js +176 -0
  506. package/dist/services/yaml-config.js.map +1 -0
  507. package/dist/skills/discovery.d.ts +22 -0
  508. package/dist/skills/discovery.d.ts.map +1 -0
  509. package/dist/skills/discovery.js +75 -0
  510. package/dist/skills/discovery.js.map +1 -0
  511. package/dist/skills/index.d.ts +10 -0
  512. package/dist/skills/index.d.ts.map +1 -0
  513. package/dist/skills/index.js +26 -0
  514. package/dist/skills/index.js.map +1 -0
  515. package/dist/skills/loader.d.ts +48 -0
  516. package/dist/skills/loader.d.ts.map +1 -0
  517. package/dist/skills/loader.js +231 -0
  518. package/dist/skills/loader.js.map +1 -0
  519. package/dist/skills/registry.d.ts +37 -0
  520. package/dist/skills/registry.d.ts.map +1 -0
  521. package/dist/skills/registry.js +134 -0
  522. package/dist/skills/registry.js.map +1 -0
  523. package/dist/skills/types.d.ts +89 -0
  524. package/dist/skills/types.d.ts.map +1 -0
  525. package/dist/skills/types.js +24 -0
  526. package/dist/skills/types.js.map +1 -0
  527. package/dist/tools/bash_security.d.ts +64 -0
  528. package/dist/tools/bash_security.d.ts.map +1 -0
  529. package/dist/tools/bash_security.js +291 -0
  530. package/dist/tools/bash_security.js.map +1 -0
  531. package/dist/tools/index.d.ts +23 -0
  532. package/dist/tools/index.d.ts.map +1 -0
  533. package/dist/tools/index.js +965 -0
  534. package/dist/tools/index.js.map +1 -0
  535. package/dist/tools/mcp.d.ts +72 -0
  536. package/dist/tools/mcp.d.ts.map +1 -0
  537. package/dist/tools/mcp.js +422 -0
  538. package/dist/tools/mcp.js.map +1 -0
  539. package/dist/tools/plan.d.ts +18 -0
  540. package/dist/tools/plan.d.ts.map +1 -0
  541. package/dist/tools/plan.js +75 -0
  542. package/dist/tools/plan.js.map +1 -0
  543. package/dist/tools/todo.d.ts +18 -0
  544. package/dist/tools/todo.d.ts.map +1 -0
  545. package/dist/tools/todo.js +153 -0
  546. package/dist/tools/todo.js.map +1 -0
  547. package/dist/tools/web.d.ts +13 -0
  548. package/dist/tools/web.d.ts.map +1 -0
  549. package/dist/tools/web.js +377 -0
  550. package/dist/tools/web.js.map +1 -0
  551. package/dist/ui/box.d.ts +56 -0
  552. package/dist/ui/box.d.ts.map +1 -0
  553. package/dist/ui/box.js +241 -0
  554. package/dist/ui/box.js.map +1 -0
  555. package/dist/ui/command-panel.d.ts +55 -0
  556. package/dist/ui/command-panel.d.ts.map +1 -0
  557. package/dist/ui/command-panel.js +212 -0
  558. package/dist/ui/command-panel.js.map +1 -0
  559. package/dist/ui/file-completion.d.ts +62 -0
  560. package/dist/ui/file-completion.d.ts.map +1 -0
  561. package/dist/ui/file-completion.js +209 -0
  562. package/dist/ui/file-completion.js.map +1 -0
  563. package/dist/ui/markdown.d.ts +12 -0
  564. package/dist/ui/markdown.d.ts.map +1 -0
  565. package/dist/ui/markdown.js +215 -0
  566. package/dist/ui/markdown.js.map +1 -0
  567. package/dist/ui/multiline-input.d.ts +47 -0
  568. package/dist/ui/multiline-input.d.ts.map +1 -0
  569. package/dist/ui/multiline-input.js +94 -0
  570. package/dist/ui/multiline-input.js.map +1 -0
  571. package/dist/ui/status-bar.d.ts +33 -0
  572. package/dist/ui/status-bar.d.ts.map +1 -0
  573. package/dist/ui/status-bar.js +96 -0
  574. package/dist/ui/status-bar.js.map +1 -0
  575. package/dist/ui/stream-markdown.d.ts +35 -0
  576. package/dist/ui/stream-markdown.d.ts.map +1 -0
  577. package/dist/ui/stream-markdown.js +138 -0
  578. package/dist/ui/stream-markdown.js.map +1 -0
  579. package/dist/ui/suggestions.d.ts +35 -0
  580. package/dist/ui/suggestions.d.ts.map +1 -0
  581. package/dist/ui/suggestions.js +118 -0
  582. package/dist/ui/suggestions.js.map +1 -0
  583. package/dist/ui/tool-preview.d.ts +34 -0
  584. package/dist/ui/tool-preview.d.ts.map +1 -0
  585. package/dist/ui/tool-preview.js +128 -0
  586. package/dist/ui/tool-preview.js.map +1 -0
  587. package/package.json +93 -0
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dispatcher = void 0;
4
+ const constants_js_1 = require("react-reconciler/constants.js");
5
+ const log_js_1 = require("../../utils/log.js");
6
+ const event_handlers_js_1 = require("./event-handlers.js");
7
+ // --
8
+ const NO_EVENT_PRIORITY = 0;
9
+ function getHandler(node, eventType, capture) {
10
+ const handlers = node._eventHandlers;
11
+ if (!handlers)
12
+ return undefined;
13
+ const mapping = event_handlers_js_1.HANDLER_FOR_EVENT[eventType];
14
+ if (!mapping)
15
+ return undefined;
16
+ const propName = capture ? mapping.capture : mapping.bubble;
17
+ if (!propName)
18
+ return undefined;
19
+ return handlers[propName];
20
+ }
21
+ /**
22
+ * Collect all listeners for an event in dispatch order.
23
+ *
24
+ * Uses react-dom's two-phase accumulation pattern:
25
+ * - Walk from target to root
26
+ * - Capture handlers are prepended (unshift) → root-first
27
+ * - Bubble handlers are appended (push) → target-first
28
+ *
29
+ * Result: [root-cap, ..., parent-cap, target-cap, target-bub, parent-bub, ..., root-bub]
30
+ */
31
+ function collectListeners(target, event) {
32
+ const listeners = [];
33
+ let node = target;
34
+ while (node) {
35
+ const isTarget = node === target;
36
+ const captureHandler = getHandler(node, event.type, true);
37
+ const bubbleHandler = getHandler(node, event.type, false);
38
+ if (captureHandler) {
39
+ listeners.unshift({
40
+ node,
41
+ handler: captureHandler,
42
+ phase: isTarget ? 'at_target' : 'capturing',
43
+ });
44
+ }
45
+ if (bubbleHandler && (event.bubbles || isTarget)) {
46
+ listeners.push({
47
+ node,
48
+ handler: bubbleHandler,
49
+ phase: isTarget ? 'at_target' : 'bubbling',
50
+ });
51
+ }
52
+ node = node.parentNode;
53
+ }
54
+ return listeners;
55
+ }
56
+ /**
57
+ * Execute collected listeners with propagation control.
58
+ *
59
+ * Before each handler, calls event._prepareForTarget(node) so event
60
+ * subclasses can do per-node setup.
61
+ */
62
+ function processDispatchQueue(listeners, event) {
63
+ let previousNode;
64
+ for (const { node, handler, phase } of listeners) {
65
+ if (event._isImmediatePropagationStopped()) {
66
+ break;
67
+ }
68
+ if (event._isPropagationStopped() && node !== previousNode) {
69
+ break;
70
+ }
71
+ event._setEventPhase(phase);
72
+ event._setCurrentTarget(node);
73
+ event._prepareForTarget(node);
74
+ try {
75
+ handler(event);
76
+ }
77
+ catch (error) {
78
+ (0, log_js_1.logError)(error);
79
+ }
80
+ previousNode = node;
81
+ }
82
+ }
83
+ // --
84
+ /**
85
+ * Map terminal event types to React scheduling priorities.
86
+ * Mirrors react-dom's getEventPriority() switch.
87
+ */
88
+ function getEventPriority(eventType) {
89
+ switch (eventType) {
90
+ case 'keydown':
91
+ case 'keyup':
92
+ case 'click':
93
+ case 'focus':
94
+ case 'blur':
95
+ case 'paste':
96
+ return constants_js_1.DiscreteEventPriority;
97
+ case 'resize':
98
+ case 'scroll':
99
+ case 'mousemove':
100
+ return constants_js_1.ContinuousEventPriority;
101
+ default:
102
+ return constants_js_1.DefaultEventPriority;
103
+ }
104
+ }
105
+ /**
106
+ * Owns event dispatch state and the capture/bubble dispatch loop.
107
+ *
108
+ * The reconciler host config reads currentEvent and currentUpdatePriority
109
+ * to implement resolveUpdatePriority, resolveEventType, and
110
+ * resolveEventTimeStamp — mirroring how react-dom's host config reads
111
+ * ReactDOMSharedInternals and window.event.
112
+ *
113
+ * discreteUpdates is injected after construction (by InkReconciler)
114
+ * to break the import cycle.
115
+ */
116
+ class Dispatcher {
117
+ constructor() {
118
+ this.currentEvent = null;
119
+ this.currentUpdatePriority = NO_EVENT_PRIORITY;
120
+ this.discreteUpdates = null;
121
+ }
122
+ /**
123
+ * Infer event priority from the currently-dispatching event.
124
+ * Called by the reconciler host config's resolveUpdatePriority
125
+ * when no explicit priority has been set.
126
+ */
127
+ resolveEventPriority() {
128
+ if (this.currentUpdatePriority !== NO_EVENT_PRIORITY) {
129
+ return this.currentUpdatePriority;
130
+ }
131
+ if (this.currentEvent) {
132
+ return getEventPriority(this.currentEvent.type);
133
+ }
134
+ return constants_js_1.DefaultEventPriority;
135
+ }
136
+ /**
137
+ * Dispatch an event through capture and bubble phases.
138
+ * Returns true if preventDefault() was NOT called.
139
+ */
140
+ dispatch(target, event) {
141
+ const previousEvent = this.currentEvent;
142
+ this.currentEvent = event;
143
+ try {
144
+ event._setTarget(target);
145
+ const listeners = collectListeners(target, event);
146
+ processDispatchQueue(listeners, event);
147
+ event._setEventPhase('none');
148
+ event._setCurrentTarget(null);
149
+ return !event.defaultPrevented;
150
+ }
151
+ finally {
152
+ this.currentEvent = previousEvent;
153
+ }
154
+ }
155
+ /**
156
+ * Dispatch with discrete (sync) priority.
157
+ * For user-initiated events: keyboard, click, focus, paste.
158
+ */
159
+ dispatchDiscrete(target, event) {
160
+ if (!this.discreteUpdates) {
161
+ return this.dispatch(target, event);
162
+ }
163
+ return this.discreteUpdates((t, e) => this.dispatch(t, e), target, event, undefined, undefined);
164
+ }
165
+ /**
166
+ * Dispatch with continuous priority.
167
+ * For high-frequency events: resize, scroll, mouse move.
168
+ */
169
+ dispatchContinuous(target, event) {
170
+ const previousPriority = this.currentUpdatePriority;
171
+ try {
172
+ this.currentUpdatePriority = constants_js_1.ContinuousEventPriority;
173
+ return this.dispatch(target, event);
174
+ }
175
+ finally {
176
+ this.currentUpdatePriority = previousPriority;
177
+ }
178
+ }
179
+ }
180
+ exports.Dispatcher = Dispatcher;
181
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../src/ink/events/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { EventEmitter as NodeEventEmitter } from 'events';
2
+ export declare class EventEmitter extends NodeEventEmitter {
3
+ constructor();
4
+ emit(type: string | symbol, ...args: unknown[]): boolean;
5
+ }
6
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../../src/ink/events/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAKzD,qBAAa,YAAa,SAAQ,gBAAgB;;IASvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;CAwBlE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventEmitter = void 0;
4
+ const events_1 = require("events");
5
+ const event_js_1 = require("./event.js");
6
+ // Similar to node's builtin EventEmitter, but is also aware of our `Event`
7
+ // class, and so `emit` respects `stopImmediatePropagation()`.
8
+ class EventEmitter extends events_1.EventEmitter {
9
+ constructor() {
10
+ super();
11
+ // Disable the default maxListeners warning. In React, many components
12
+ // can legitimately listen to the same event (e.g., useInput hooks).
13
+ // The default limit of 10 causes spurious warnings.
14
+ this.setMaxListeners(0);
15
+ }
16
+ emit(type, ...args) {
17
+ // Delegate to node for `error`, since it's not treated like a normal event
18
+ if (type === 'error') {
19
+ return super.emit(type, ...args);
20
+ }
21
+ const listeners = this.rawListeners(type);
22
+ if (listeners.length === 0) {
23
+ return false;
24
+ }
25
+ const ccEvent = args[0] instanceof event_js_1.Event ? args[0] : null;
26
+ for (const listener of listeners) {
27
+ listener.apply(this, args);
28
+ if (ccEvent?.didStopImmediatePropagation()) {
29
+ break;
30
+ }
31
+ }
32
+ return true;
33
+ }
34
+ }
35
+ exports.EventEmitter = EventEmitter;
36
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../src/ink/events/emitter.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AACzD,yCAAkC;AAElC,2EAA2E;AAC3E,8DAA8D;AAC9D,MAAa,YAAa,SAAQ,qBAAgB;IAChD;QACE,KAAK,EAAE,CAAA;QACP,sEAAsE;QACtE,oEAAoE;QACpE,oDAAoD;QACpD,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC;IAEQ,IAAI,CAAC,IAAqB,EAAE,GAAG,IAAe;QACrD,2EAA2E;QAC3E,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAA;QAClC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAEzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,gBAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEzD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAE1B,IAAI,OAAO,EAAE,2BAA2B,EAAE,EAAE,CAAC;gBAC3C,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAjCD,oCAiCC"}
@@ -0,0 +1,47 @@
1
+ import type { ClickEvent } from './click-event.js';
2
+ import type { FocusEvent } from './focus-event.js';
3
+ import type { KeyboardEvent } from './keyboard-event.js';
4
+ import type { PasteEvent } from './paste-event.js';
5
+ import type { ResizeEvent } from './resize-event.js';
6
+ type KeyboardEventHandler = (event: KeyboardEvent) => void;
7
+ type FocusEventHandler = (event: FocusEvent) => void;
8
+ type PasteEventHandler = (event: PasteEvent) => void;
9
+ type ResizeEventHandler = (event: ResizeEvent) => void;
10
+ type ClickEventHandler = (event: ClickEvent) => void;
11
+ type HoverEventHandler = () => void;
12
+ /**
13
+ * Props for event handlers on Box and other host components.
14
+ *
15
+ * Follows the React/DOM naming convention:
16
+ * - onEventName: handler for bubble phase
17
+ * - onEventNameCapture: handler for capture phase
18
+ */
19
+ export type EventHandlerProps = {
20
+ onKeyDown?: KeyboardEventHandler;
21
+ onKeyDownCapture?: KeyboardEventHandler;
22
+ onFocus?: FocusEventHandler;
23
+ onFocusCapture?: FocusEventHandler;
24
+ onBlur?: FocusEventHandler;
25
+ onBlurCapture?: FocusEventHandler;
26
+ onPaste?: PasteEventHandler;
27
+ onPasteCapture?: PasteEventHandler;
28
+ onResize?: ResizeEventHandler;
29
+ onClick?: ClickEventHandler;
30
+ onMouseEnter?: HoverEventHandler;
31
+ onMouseLeave?: HoverEventHandler;
32
+ };
33
+ /**
34
+ * Reverse lookup: event type string → handler prop names.
35
+ * Used by the dispatcher for O(1) handler lookup per node.
36
+ */
37
+ export declare const HANDLER_FOR_EVENT: Record<string, {
38
+ bubble?: keyof EventHandlerProps;
39
+ capture?: keyof EventHandlerProps;
40
+ }>;
41
+ /**
42
+ * Set of all event handler prop names, for the reconciler to detect
43
+ * event props and store them in _eventHandlers instead of attributes.
44
+ */
45
+ export declare const EVENT_HANDLER_PROPS: Set<string>;
46
+ export {};
47
+ //# sourceMappingURL=event-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handlers.d.ts","sourceRoot":"","sources":["../../../src/ink/events/event-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,KAAK,oBAAoB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;AAC1D,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;AACpD,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;AACpD,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;AACtD,KAAK,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;AACpD,KAAK,iBAAiB,GAAG,MAAM,IAAI,CAAA;AAEnC;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,gBAAgB,CAAC,EAAE,oBAAoB,CAAA;IAEvC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAEjC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAElC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAE7B,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,MAAM,EACN;IAAE,MAAM,CAAC,EAAE,MAAM,iBAAiB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,iBAAiB,CAAA;CAAE,CAQxE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,aAa9B,CAAA"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EVENT_HANDLER_PROPS = exports.HANDLER_FOR_EVENT = void 0;
4
+ /**
5
+ * Reverse lookup: event type string → handler prop names.
6
+ * Used by the dispatcher for O(1) handler lookup per node.
7
+ */
8
+ exports.HANDLER_FOR_EVENT = {
9
+ keydown: { bubble: 'onKeyDown', capture: 'onKeyDownCapture' },
10
+ focus: { bubble: 'onFocus', capture: 'onFocusCapture' },
11
+ blur: { bubble: 'onBlur', capture: 'onBlurCapture' },
12
+ paste: { bubble: 'onPaste', capture: 'onPasteCapture' },
13
+ resize: { bubble: 'onResize' },
14
+ click: { bubble: 'onClick' },
15
+ };
16
+ /**
17
+ * Set of all event handler prop names, for the reconciler to detect
18
+ * event props and store them in _eventHandlers instead of attributes.
19
+ */
20
+ exports.EVENT_HANDLER_PROPS = new Set([
21
+ 'onKeyDown',
22
+ 'onKeyDownCapture',
23
+ 'onFocus',
24
+ 'onFocusCapture',
25
+ 'onBlur',
26
+ 'onBlurCapture',
27
+ 'onPaste',
28
+ 'onPasteCapture',
29
+ 'onResize',
30
+ 'onClick',
31
+ 'onMouseEnter',
32
+ 'onMouseLeave',
33
+ ]);
34
+ //# sourceMappingURL=event-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-handlers.js","sourceRoot":"","sources":["../../../src/ink/events/event-handlers.ts"],"names":[],"mappings":";;;AAuCA;;;GAGG;AACU,QAAA,iBAAiB,GAG1B;IACF,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC7D,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACvD,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE;IACpD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;IACvD,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;IAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;CAC7B,CAAA;AAED;;;GAGG;AACU,QAAA,mBAAmB,GAAG,IAAI,GAAG,CAAS;IACjD,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,gBAAgB;IAChB,QAAQ;IACR,eAAe;IACf,SAAS;IACT,gBAAgB;IAChB,UAAU;IACV,SAAS;IACT,cAAc;IACd,cAAc;CACf,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare class Event {
2
+ private _didStopImmediatePropagation;
3
+ didStopImmediatePropagation(): boolean;
4
+ stopImmediatePropagation(): void;
5
+ }
6
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/event.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,OAAO,CAAC,4BAA4B,CAAQ;IAE5C,2BAA2B,IAAI,OAAO;IAItC,wBAAwB,IAAI,IAAI;CAGjC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Event = void 0;
4
+ class Event {
5
+ constructor() {
6
+ this._didStopImmediatePropagation = false;
7
+ }
8
+ didStopImmediatePropagation() {
9
+ return this._didStopImmediatePropagation;
10
+ }
11
+ stopImmediatePropagation() {
12
+ this._didStopImmediatePropagation = true;
13
+ }
14
+ }
15
+ exports.Event = Event;
16
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/ink/events/event.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAAlB;QACU,iCAA4B,GAAG,KAAK,CAAA;IAS9C,CAAC;IAPC,2BAA2B;QACzB,OAAO,IAAI,CAAC,4BAA4B,CAAA;IAC1C,CAAC;IAED,wBAAwB;QACtB,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAA;IAC1C,CAAC;CACF;AAVD,sBAUC"}
@@ -0,0 +1,14 @@
1
+ import { type EventTarget, TerminalEvent } from './terminal-event.js';
2
+ /**
3
+ * Focus event for component focus changes.
4
+ *
5
+ * Dispatched when focus moves between elements. 'focus' fires on the
6
+ * newly focused element, 'blur' fires on the previously focused one.
7
+ * Both bubble, matching react-dom's use of focusin/focusout semantics
8
+ * so parent components can observe descendant focus changes.
9
+ */
10
+ export declare class FocusEvent extends TerminalEvent {
11
+ readonly relatedTarget: EventTarget | null;
12
+ constructor(type: 'focus' | 'blur', relatedTarget?: EventTarget | null);
13
+ }
14
+ //# sourceMappingURL=focus-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/focus-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAErE;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,aAAa;IAC3C,QAAQ,CAAC,aAAa,EAAE,WAAW,GAAG,IAAI,CAAA;gBAGxC,IAAI,EAAE,OAAO,GAAG,MAAM,EACtB,aAAa,GAAE,WAAW,GAAG,IAAW;CAK3C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FocusEvent = void 0;
4
+ const terminal_event_js_1 = require("./terminal-event.js");
5
+ /**
6
+ * Focus event for component focus changes.
7
+ *
8
+ * Dispatched when focus moves between elements. 'focus' fires on the
9
+ * newly focused element, 'blur' fires on the previously focused one.
10
+ * Both bubble, matching react-dom's use of focusin/focusout semantics
11
+ * so parent components can observe descendant focus changes.
12
+ */
13
+ class FocusEvent extends terminal_event_js_1.TerminalEvent {
14
+ constructor(type, relatedTarget = null) {
15
+ super(type, { bubbles: true, cancelable: false });
16
+ this.relatedTarget = relatedTarget;
17
+ }
18
+ }
19
+ exports.FocusEvent = FocusEvent;
20
+ //# sourceMappingURL=focus-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-event.js","sourceRoot":"","sources":["../../../src/ink/events/focus-event.ts"],"names":[],"mappings":";;;AAAA,2DAAqE;AAErE;;;;;;;GAOG;AACH,MAAa,UAAW,SAAQ,iCAAa;IAG3C,YACE,IAAsB,EACtB,gBAAoC,IAAI;QAExC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;CACF;AAVD,gCAUC"}
@@ -0,0 +1,31 @@
1
+ import { type ParsedKey } from '../parse-keypress.js';
2
+ import { Event } from './event.js';
3
+ export type Key = {
4
+ upArrow: boolean;
5
+ downArrow: boolean;
6
+ leftArrow: boolean;
7
+ rightArrow: boolean;
8
+ pageDown: boolean;
9
+ pageUp: boolean;
10
+ wheelUp: boolean;
11
+ wheelDown: boolean;
12
+ home: boolean;
13
+ end: boolean;
14
+ return: boolean;
15
+ escape: boolean;
16
+ ctrl: boolean;
17
+ shift: boolean;
18
+ fn: boolean;
19
+ tab: boolean;
20
+ backspace: boolean;
21
+ delete: boolean;
22
+ meta: boolean;
23
+ super: boolean;
24
+ };
25
+ export declare class InputEvent extends Event {
26
+ readonly keypress: ParsedKey;
27
+ readonly key: Key;
28
+ readonly input: string;
29
+ constructor(keypress: ParsedKey);
30
+ }
31
+ //# sourceMappingURL=input-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/input-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,EAAE,EAAE,OAAO,CAAA;IACX,GAAG,EAAE,OAAO,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAuKD,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;gBAEV,QAAQ,EAAE,SAAS;CAQhC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputEvent = void 0;
4
+ const parse_keypress_js_1 = require("../parse-keypress.js");
5
+ const event_js_1 = require("./event.js");
6
+ function parseKey(keypress) {
7
+ const key = {
8
+ upArrow: keypress.name === 'up',
9
+ downArrow: keypress.name === 'down',
10
+ leftArrow: keypress.name === 'left',
11
+ rightArrow: keypress.name === 'right',
12
+ pageDown: keypress.name === 'pagedown',
13
+ pageUp: keypress.name === 'pageup',
14
+ wheelUp: keypress.name === 'wheelup',
15
+ wheelDown: keypress.name === 'wheeldown',
16
+ home: keypress.name === 'home',
17
+ end: keypress.name === 'end',
18
+ return: keypress.name === 'return',
19
+ escape: keypress.name === 'escape',
20
+ fn: keypress.fn,
21
+ ctrl: keypress.ctrl,
22
+ shift: keypress.shift,
23
+ tab: keypress.name === 'tab',
24
+ backspace: keypress.name === 'backspace',
25
+ delete: keypress.name === 'delete',
26
+ // `parseKeypress` parses \u001B\u001B[A (meta + up arrow) as meta = false
27
+ // but with option = true, so we need to take this into account here
28
+ // to avoid breaking changes in Ink.
29
+ // TODO(vadimdemedes): consider removing this in the next major version.
30
+ meta: keypress.meta || keypress.name === 'escape' || keypress.option,
31
+ // Super (Cmd on macOS / Win key) — only arrives via kitty keyboard
32
+ // protocol CSI u sequences. Distinct from meta (Alt/Option) so
33
+ // bindings like cmd+c can be expressed separately from opt+c.
34
+ super: keypress.super,
35
+ };
36
+ let input = keypress.ctrl ? keypress.name : keypress.sequence;
37
+ // Handle undefined input case
38
+ if (input === undefined) {
39
+ input = '';
40
+ }
41
+ // When ctrl is set, keypress.name for space is the literal word "space".
42
+ // Convert to actual space character for consistency with the CSI u branch
43
+ // (which maps 'space' → ' '). Without this, ctrl+space leaks the literal
44
+ // word "space" into text input.
45
+ if (keypress.ctrl && input === 'space') {
46
+ input = ' ';
47
+ }
48
+ // Suppress unrecognized escape sequences that were parsed as function keys
49
+ // (matched by FN_KEY_RE) but have no name in the keyName map.
50
+ // Examples: ESC[25~ (F13/Right Alt on Windows), ESC[26~ (F14), etc.
51
+ // Without this, the ESC prefix is stripped below and the remainder (e.g.,
52
+ // "[25~") leaks into the input as literal text.
53
+ if (keypress.code && !keypress.name) {
54
+ input = '';
55
+ }
56
+ // Suppress ESC-less SGR mouse fragments. When a heavy React commit blocks
57
+ // the event loop past App's 50ms NORMAL_TIMEOUT flush, a CSI split across
58
+ // stdin chunks gets its buffered ESC flushed as a lone Escape key, and the
59
+ // continuation arrives as a text token with name='' — which falls through
60
+ // all of parseKeypress's ESC-anchored regexes and the nonAlphanumericKeys
61
+ // clear below (name is falsy). The fragment then leaks into the prompt as
62
+ // literal `[<64;74;16M`. This is the same defensive sink as the F13 guard
63
+ // above; the underlying tokenizer-flush race is upstream of this layer.
64
+ if (!keypress.name && /^\[<\d+;\d+;\d+[Mm]/.test(input)) {
65
+ input = '';
66
+ }
67
+ // Strip meta if it's still remaining after `parseKeypress`
68
+ // TODO(vadimdemedes): remove this in the next major version.
69
+ if (input.startsWith('\u001B')) {
70
+ input = input.slice(1);
71
+ }
72
+ // Track whether we've already processed this as a special sequence
73
+ // that converted input to the key name (CSI u or application keypad mode).
74
+ // For these, we don't want to clear input with nonAlphanumericKeys check.
75
+ let processedAsSpecialSequence = false;
76
+ // Handle CSI u sequences (Kitty keyboard protocol): after stripping ESC,
77
+ // we're left with "[codepoint;modifieru" (e.g., "[98;3u" for Alt+b).
78
+ // Use the parsed key name instead for input handling. Require a digit
79
+ // after [ — real CSI u is always [<digits>…u, and a bare startsWith('[')
80
+ // false-matches X10 mouse at row 85 (Cy = 85+32 = 'u'), leaking the
81
+ // literal text "mouse" into the prompt via processedAsSpecialSequence.
82
+ if (/^\[\d/.test(input) && input.endsWith('u')) {
83
+ if (!keypress.name) {
84
+ // Unmapped Kitty functional key (Caps Lock 57358, F13–F35, KP nav,
85
+ // bare modifiers, etc.) — keycodeToName() returned undefined. Swallow
86
+ // so the raw "[57358u" doesn't leak into the prompt. See #38781.
87
+ input = '';
88
+ }
89
+ else {
90
+ // 'space' → ' '; 'escape' → '' (key.escape carries it;
91
+ // processedAsSpecialSequence bypasses the nonAlphanumericKeys
92
+ // clear below, so we must handle it explicitly here);
93
+ // otherwise use key name.
94
+ input =
95
+ keypress.name === 'space'
96
+ ? ' '
97
+ : keypress.name === 'escape'
98
+ ? ''
99
+ : keypress.name;
100
+ }
101
+ processedAsSpecialSequence = true;
102
+ }
103
+ // Handle xterm modifyOtherKeys sequences: after stripping ESC, we're left
104
+ // with "[27;modifier;keycode~" (e.g., "[27;3;98~" for Alt+b). Same
105
+ // extraction as CSI u — without this, printable-char keycodes (single-letter
106
+ // names) skip the nonAlphanumericKeys clear and leak "[27;..." as input.
107
+ if (input.startsWith('[27;') && input.endsWith('~')) {
108
+ if (!keypress.name) {
109
+ // Unmapped modifyOtherKeys keycode — swallow for consistency with
110
+ // the CSI u handler above. Practically untriggerable today (xterm
111
+ // modifyOtherKeys only sends ASCII keycodes, all mapped), but
112
+ // guards against future terminal behavior.
113
+ input = '';
114
+ }
115
+ else {
116
+ input =
117
+ keypress.name === 'space'
118
+ ? ' '
119
+ : keypress.name === 'escape'
120
+ ? ''
121
+ : keypress.name;
122
+ }
123
+ processedAsSpecialSequence = true;
124
+ }
125
+ // Handle application keypad mode sequences: after stripping ESC,
126
+ // we're left with "O<letter>" (e.g., "Op" for numpad 0, "Oy" for numpad 9).
127
+ // Use the parsed key name (the digit character) for input handling.
128
+ if (input.startsWith('O') &&
129
+ input.length === 2 &&
130
+ keypress.name &&
131
+ keypress.name.length === 1) {
132
+ input = keypress.name;
133
+ processedAsSpecialSequence = true;
134
+ }
135
+ // Clear input for non-alphanumeric keys (arrows, function keys, etc.)
136
+ // Skip this for CSI u and application keypad mode sequences since
137
+ // those were already converted to their proper input characters.
138
+ if (!processedAsSpecialSequence &&
139
+ keypress.name &&
140
+ parse_keypress_js_1.nonAlphanumericKeys.includes(keypress.name)) {
141
+ input = '';
142
+ }
143
+ // Set shift=true for uppercase letters (A-Z)
144
+ // Must check it's actually a letter, not just any char unchanged by toUpperCase
145
+ if (input.length === 1 &&
146
+ typeof input[0] === 'string' &&
147
+ input[0] >= 'A' &&
148
+ input[0] <= 'Z') {
149
+ key.shift = true;
150
+ }
151
+ return [key, input];
152
+ }
153
+ class InputEvent extends event_js_1.Event {
154
+ constructor(keypress) {
155
+ super();
156
+ const [key, input] = parseKey(keypress);
157
+ this.keypress = keypress;
158
+ this.key = key;
159
+ this.input = input;
160
+ }
161
+ }
162
+ exports.InputEvent = InputEvent;
163
+ //# sourceMappingURL=input-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-event.js","sourceRoot":"","sources":["../../../src/ink/events/input-event.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ParsedKey } from '../parse-keypress.js';
2
+ import { TerminalEvent } from './terminal-event.js';
3
+ /**
4
+ * Keyboard event dispatched through the DOM tree via capture/bubble.
5
+ *
6
+ * Follows browser KeyboardEvent semantics: `key` is the literal character
7
+ * for printable keys ('a', '3', ' ', '/') and a multi-char name for
8
+ * special keys ('down', 'return', 'escape', 'f1'). The idiomatic
9
+ * printable-char check is `e.key.length === 1`.
10
+ */
11
+ export declare class KeyboardEvent extends TerminalEvent {
12
+ readonly key: string;
13
+ readonly ctrl: boolean;
14
+ readonly shift: boolean;
15
+ readonly meta: boolean;
16
+ readonly superKey: boolean;
17
+ readonly fn: boolean;
18
+ constructor(parsedKey: ParsedKey);
19
+ }
20
+ //# sourceMappingURL=keyboard-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-event.d.ts","sourceRoot":"","sources":["../../../src/ink/events/keyboard-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;gBAER,SAAS,EAAE,SAAS;CAUjC"}