@dst0/p-tui 0.4.40 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/dist/autocomplete.d.ts.map +1 -1
  2. package/dist/autocomplete.js.map +1 -1
  3. package/dist/components/box.d.ts +3 -1
  4. package/dist/components/box.d.ts.map +1 -1
  5. package/dist/components/box.js +19 -10
  6. package/dist/components/box.js.map +1 -1
  7. package/dist/components/cancellable-loader.d.ts.map +1 -1
  8. package/dist/components/cancellable-loader.js.map +1 -1
  9. package/dist/components/editor/constants.d.ts +9 -0
  10. package/dist/components/editor/constants.d.ts.map +1 -0
  11. package/dist/components/editor/constants.js +12 -0
  12. package/dist/components/editor/constants.js.map +1 -0
  13. package/dist/components/editor/editor-methods/autocomplete-matching.d.ts +29 -0
  14. package/dist/components/editor/editor-methods/autocomplete-matching.d.ts.map +1 -0
  15. package/dist/components/editor/editor-methods/autocomplete-matching.js +104 -0
  16. package/dist/components/editor/editor-methods/autocomplete-matching.js.map +1 -0
  17. package/dist/components/editor/editor-methods/autocomplete-request.d.ts +14 -0
  18. package/dist/components/editor/editor-methods/autocomplete-request.d.ts.map +1 -0
  19. package/dist/components/editor/editor-methods/autocomplete-request.js +72 -0
  20. package/dist/components/editor/editor-methods/autocomplete-request.js.map +1 -0
  21. package/dist/components/editor/editor-methods/backspace-cursor.d.ts +9 -0
  22. package/dist/components/editor/editor-methods/backspace-cursor.d.ts.map +1 -0
  23. package/dist/components/editor/editor-methods/backspace-cursor.js +122 -0
  24. package/dist/components/editor/editor-methods/backspace-cursor.js.map +1 -0
  25. package/dist/components/editor/editor-methods/configuration.d.ts +17 -0
  26. package/dist/components/editor/editor-methods/configuration.d.ts.map +1 -0
  27. package/dist/components/editor/editor-methods/configuration.js +107 -0
  28. package/dist/components/editor/editor-methods/configuration.js.map +1 -0
  29. package/dist/components/editor/editor-methods/cursor-movement.d.ts +7 -0
  30. package/dist/components/editor/editor-methods/cursor-movement.d.ts.map +1 -0
  31. package/dist/components/editor/editor-methods/cursor-movement.js +112 -0
  32. package/dist/components/editor/editor-methods/cursor-movement.js.map +1 -0
  33. package/dist/components/editor/editor-methods/input-handling.d.ts +3 -0
  34. package/dist/components/editor/editor-methods/input-handling.d.ts.map +1 -0
  35. package/dist/components/editor/editor-methods/input-handling.js +257 -0
  36. package/dist/components/editor/editor-methods/input-handling.js.map +1 -0
  37. package/dist/components/editor/editor-methods/paste-submit.d.ts +7 -0
  38. package/dist/components/editor/editor-methods/paste-submit.d.ts.map +1 -0
  39. package/dist/components/editor/editor-methods/paste-submit.js +105 -0
  40. package/dist/components/editor/editor-methods/paste-submit.js.map +1 -0
  41. package/dist/components/editor/editor-methods/render.d.ts +3 -0
  42. package/dist/components/editor/editor-methods/render.d.ts.map +1 -0
  43. package/dist/components/editor/editor-methods/render.js +114 -0
  44. package/dist/components/editor/editor-methods/render.js.map +1 -0
  45. package/dist/components/editor/editor-methods/text-insertion.d.ts +4 -0
  46. package/dist/components/editor/editor-methods/text-insertion.d.ts.map +1 -0
  47. package/dist/components/editor/editor-methods/text-insertion.js +91 -0
  48. package/dist/components/editor/editor-methods/text-insertion.js.map +1 -0
  49. package/dist/components/editor/editor-methods/text-layout.d.ts +15 -0
  50. package/dist/components/editor/editor-methods/text-layout.d.ts.map +1 -0
  51. package/dist/components/editor/editor-methods/text-layout.js +129 -0
  52. package/dist/components/editor/editor-methods/text-layout.js.map +1 -0
  53. package/dist/components/editor/editor-methods/vertical-movement.d.ts +8 -0
  54. package/dist/components/editor/editor-methods/vertical-movement.d.ts.map +1 -0
  55. package/dist/components/editor/editor-methods/vertical-movement.js +123 -0
  56. package/dist/components/editor/editor-methods/vertical-movement.js.map +1 -0
  57. package/dist/components/editor/editor-methods/word-operations.d.ts +19 -0
  58. package/dist/components/editor/editor-methods/word-operations.d.ts.map +1 -0
  59. package/dist/components/editor/editor-methods/word-operations.js +122 -0
  60. package/dist/components/editor/editor-methods/word-operations.js.map +1 -0
  61. package/dist/components/editor/editor-methods/yank-undo.d.ts +11 -0
  62. package/dist/components/editor/editor-methods/yank-undo.d.ts.map +1 -0
  63. package/dist/components/editor/editor-methods/yank-undo.js +132 -0
  64. package/dist/components/editor/editor-methods/yank-undo.js.map +1 -0
  65. package/dist/components/editor/editor.d.ts +67 -0
  66. package/dist/components/editor/editor.d.ts.map +1 -0
  67. package/dist/components/editor/editor.js +93 -0
  68. package/dist/components/editor/editor.js.map +1 -0
  69. package/dist/components/editor/helpers.d.ts +3 -0
  70. package/dist/components/editor/helpers.d.ts.map +1 -0
  71. package/dist/components/editor/helpers.js +3 -0
  72. package/dist/components/editor/helpers.js.map +1 -0
  73. package/dist/components/editor/index.d.ts +4 -0
  74. package/dist/components/editor/index.d.ts.map +1 -0
  75. package/dist/components/editor/index.js +3 -0
  76. package/dist/components/editor/index.js.map +1 -0
  77. package/dist/components/editor/paste-marker.d.ts +5 -0
  78. package/dist/components/editor/paste-marker.d.ts.map +1 -0
  79. package/dist/components/editor/paste-marker.js +134 -0
  80. package/dist/components/editor/paste-marker.js.map +1 -0
  81. package/dist/components/editor/trigger-patterns.d.ts +4 -0
  82. package/dist/components/editor/trigger-patterns.d.ts.map +1 -0
  83. package/dist/components/editor/trigger-patterns.js +11 -0
  84. package/dist/components/editor/trigger-patterns.js.map +1 -0
  85. package/dist/components/editor/types.d.ts +25 -0
  86. package/dist/components/editor/types.d.ts.map +1 -0
  87. package/dist/components/editor/types.js +2 -0
  88. package/dist/components/editor/types.js.map +1 -0
  89. package/dist/components/editor.d.ts +1 -253
  90. package/dist/components/editor.d.ts.map +1 -1
  91. package/dist/components/editor.js +1 -1915
  92. package/dist/components/editor.js.map +1 -1
  93. package/dist/components/image.d.ts.map +1 -1
  94. package/dist/components/image.js.map +1 -1
  95. package/dist/components/input/constants.d.ts +2 -0
  96. package/dist/components/input/constants.d.ts.map +1 -0
  97. package/dist/components/input/constants.js +3 -0
  98. package/dist/components/input/constants.js.map +1 -0
  99. package/dist/components/input/index.d.ts +2 -0
  100. package/dist/components/input/index.d.ts.map +1 -0
  101. package/dist/components/input/index.js +2 -0
  102. package/dist/components/input/index.js.map +1 -0
  103. package/dist/components/input/input-methods/input-handling.d.ts +3 -0
  104. package/dist/components/input/input-methods/input-handling.d.ts.map +1 -0
  105. package/dist/components/input/input-methods/input-handling.js +145 -0
  106. package/dist/components/input/input-methods/input-handling.js.map +1 -0
  107. package/dist/components/input/input-methods/render.d.ts +3 -0
  108. package/dist/components/input/input-methods/render.d.ts.map +1 -0
  109. package/dist/components/input/input-methods/render.js +62 -0
  110. package/dist/components/input/input-methods/render.js.map +1 -0
  111. package/dist/components/input/input-methods/text-editing.d.ts +17 -0
  112. package/dist/components/input/input-methods/text-editing.d.ts.map +1 -0
  113. package/dist/components/input/input-methods/text-editing.js +145 -0
  114. package/dist/components/input/input-methods/text-editing.js.map +1 -0
  115. package/dist/components/input/input-methods/value-access.d.ts +4 -0
  116. package/dist/components/input/input-methods/value-access.d.ts.map +1 -0
  117. package/dist/components/input/input-methods/value-access.js +20 -0
  118. package/dist/components/input/input-methods/value-access.js.map +1 -0
  119. package/dist/components/input/input.d.ts +37 -0
  120. package/dist/components/input/input.d.ts.map +1 -0
  121. package/dist/components/input/input.js +77 -0
  122. package/dist/components/input/input.js.map +1 -0
  123. package/dist/components/input/types.d.ts +5 -0
  124. package/dist/components/input/types.d.ts.map +1 -0
  125. package/dist/components/input/types.js +2 -0
  126. package/dist/components/input/types.js.map +1 -0
  127. package/dist/components/input.d.ts +1 -36
  128. package/dist/components/input.d.ts.map +1 -1
  129. package/dist/components/input.js +1 -377
  130. package/dist/components/input.js.map +1 -1
  131. package/dist/components/loader.d.ts.map +1 -1
  132. package/dist/components/loader.js.map +1 -1
  133. package/dist/components/markdown/constants.d.ts +4 -0
  134. package/dist/components/markdown/constants.d.ts.map +1 -0
  135. package/dist/components/markdown/constants.js +8 -0
  136. package/dist/components/markdown/constants.js.map +1 -0
  137. package/dist/components/markdown/index.d.ts +3 -0
  138. package/dist/components/markdown/index.d.ts.map +1 -0
  139. package/dist/components/markdown/index.js +2 -0
  140. package/dist/components/markdown/index.js.map +1 -0
  141. package/dist/components/markdown/markdown-methods/inline-rendering.d.ts +7 -0
  142. package/dist/components/markdown/markdown-methods/inline-rendering.d.ts.map +1 -0
  143. package/dist/components/markdown/markdown-methods/inline-rendering.js +95 -0
  144. package/dist/components/markdown/markdown-methods/inline-rendering.js.map +1 -0
  145. package/dist/components/markdown/markdown-methods/list-table-helpers.d.ts +7 -0
  146. package/dist/components/markdown/markdown-methods/list-table-helpers.d.ts.map +1 -0
  147. package/dist/components/markdown/markdown-methods/list-table-helpers.js +61 -0
  148. package/dist/components/markdown/markdown-methods/list-table-helpers.js.map +1 -0
  149. package/dist/components/markdown/markdown-methods/table-rendering.d.ts +5 -0
  150. package/dist/components/markdown/markdown-methods/table-rendering.d.ts.map +1 -0
  151. package/dist/components/markdown/markdown-methods/table-rendering.js +146 -0
  152. package/dist/components/markdown/markdown-methods/table-rendering.js.map +1 -0
  153. package/dist/components/markdown/markdown-methods/text-rendering.d.ts +6 -0
  154. package/dist/components/markdown/markdown-methods/text-rendering.d.ts.map +1 -0
  155. package/dist/components/markdown/markdown-methods/text-rendering.js +115 -0
  156. package/dist/components/markdown/markdown-methods/text-rendering.js.map +1 -0
  157. package/dist/components/markdown/markdown-methods/theming.d.ts +6 -0
  158. package/dist/components/markdown/markdown-methods/theming.d.ts.map +1 -0
  159. package/dist/components/markdown/markdown-methods/theming.js +41 -0
  160. package/dist/components/markdown/markdown-methods/theming.js.map +1 -0
  161. package/dist/components/markdown/markdown-methods/token-rendering.d.ts +5 -0
  162. package/dist/components/markdown/markdown-methods/token-rendering.d.ts.map +1 -0
  163. package/dist/components/markdown/markdown-methods/token-rendering.js +142 -0
  164. package/dist/components/markdown/markdown-methods/token-rendering.js.map +1 -0
  165. package/dist/components/markdown/markdown.d.ts +32 -0
  166. package/dist/components/markdown/markdown.d.ts.map +1 -0
  167. package/dist/components/markdown/markdown.js +72 -0
  168. package/dist/components/markdown/markdown.js.map +1 -0
  169. package/dist/components/markdown/strictstrikethroughtokenizer.d.ts +6 -0
  170. package/dist/components/markdown/strictstrikethroughtokenizer.d.ts.map +1 -0
  171. package/dist/components/markdown/strictstrikethroughtokenizer.js +18 -0
  172. package/dist/components/markdown/strictstrikethroughtokenizer.js.map +1 -0
  173. package/dist/components/markdown/types.d.ts +42 -0
  174. package/dist/components/markdown/types.d.ts.map +1 -0
  175. package/dist/components/markdown/types.js +2 -0
  176. package/dist/components/markdown/types.js.map +1 -0
  177. package/dist/components/markdown.d.ts +1 -96
  178. package/dist/components/markdown.d.ts.map +1 -1
  179. package/dist/components/markdown.js +1 -653
  180. package/dist/components/markdown.js.map +1 -1
  181. package/dist/components/select-list.d.ts.map +1 -1
  182. package/dist/components/select-list.js +8 -3
  183. package/dist/components/select-list.js.map +1 -1
  184. package/dist/components/settings-list.d.ts.map +1 -1
  185. package/dist/components/settings-list.js +2 -6
  186. package/dist/components/settings-list.js.map +1 -1
  187. package/dist/components/spacer.d.ts.map +1 -1
  188. package/dist/components/spacer.js.map +1 -1
  189. package/dist/components/text.d.ts.map +1 -1
  190. package/dist/components/text.js +2 -2
  191. package/dist/components/text.js.map +1 -1
  192. package/dist/components/truncated-text.d.ts.map +1 -1
  193. package/dist/components/truncated-text.js.map +1 -1
  194. package/dist/editor-component.d.ts.map +1 -1
  195. package/dist/editor-component.js.map +1 -1
  196. package/dist/fuzzy.d.ts.map +1 -1
  197. package/dist/fuzzy.js.map +1 -1
  198. package/dist/index.d.ts +1 -1
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +1 -1
  201. package/dist/index.js.map +1 -1
  202. package/dist/keybindings.d.ts.map +1 -1
  203. package/dist/keybindings.js.map +1 -1
  204. package/dist/keys.d.ts.map +1 -1
  205. package/dist/keys.js +145 -14
  206. package/dist/keys.js.map +1 -1
  207. package/dist/kill-ring.d.ts.map +1 -1
  208. package/dist/kill-ring.js.map +1 -1
  209. package/dist/native-modifiers.d.ts +9 -0
  210. package/dist/native-modifiers.d.ts.map +1 -1
  211. package/dist/native-modifiers.js +5 -0
  212. package/dist/native-modifiers.js.map +1 -1
  213. package/dist/stdin-buffer.d.ts +3 -0
  214. package/dist/stdin-buffer.d.ts.map +1 -1
  215. package/dist/stdin-buffer.js +24 -21
  216. package/dist/stdin-buffer.js.map +1 -1
  217. package/dist/terminal/constants.d.ts +9 -0
  218. package/dist/terminal/constants.d.ts.map +1 -0
  219. package/dist/terminal/constants.js +10 -0
  220. package/dist/terminal/constants.js.map +1 -0
  221. package/dist/terminal/helpers.d.ts +6 -0
  222. package/dist/terminal/helpers.d.ts.map +1 -0
  223. package/dist/terminal/helpers.js +23 -0
  224. package/dist/terminal/helpers.js.map +1 -0
  225. package/dist/terminal/index.d.ts +4 -0
  226. package/dist/terminal/index.d.ts.map +1 -0
  227. package/dist/terminal/index.js +3 -0
  228. package/dist/terminal/index.js.map +1 -0
  229. package/dist/terminal/processterminal-methods/cursor-screen.d.ts +11 -0
  230. package/dist/terminal/processterminal-methods/cursor-screen.d.ts.map +1 -0
  231. package/dist/terminal/processterminal-methods/cursor-screen.js +50 -0
  232. package/dist/terminal/processterminal-methods/cursor-screen.js.map +1 -0
  233. package/dist/terminal/processterminal-methods/keyboard-protocol.d.ts +14 -0
  234. package/dist/terminal/processterminal-methods/keyboard-protocol.d.ts.map +1 -0
  235. package/dist/terminal/processterminal-methods/keyboard-protocol.js +147 -0
  236. package/dist/terminal/processterminal-methods/keyboard-protocol.js.map +1 -0
  237. package/dist/terminal/processterminal-methods/terminal-io.d.ts +9 -0
  238. package/dist/terminal/processterminal-methods/terminal-io.d.ts.map +1 -0
  239. package/dist/terminal/processterminal-methods/terminal-io.js +153 -0
  240. package/dist/terminal/processterminal-methods/terminal-io.js.map +1 -0
  241. package/dist/terminal/processterminal.d.ts +49 -0
  242. package/dist/terminal/processterminal.d.ts.map +1 -0
  243. package/dist/terminal/processterminal.js +129 -0
  244. package/dist/terminal/processterminal.js.map +1 -0
  245. package/dist/terminal/types.d.ts +31 -0
  246. package/dist/terminal/types.d.ts.map +1 -0
  247. package/dist/terminal/types.js +2 -0
  248. package/dist/terminal/types.js.map +1 -0
  249. package/dist/terminal-colors.d.ts +2 -0
  250. package/dist/terminal-colors.d.ts.map +1 -1
  251. package/dist/terminal-colors.js +17 -5
  252. package/dist/terminal-colors.js.map +1 -1
  253. package/dist/terminal-image.d.ts.map +1 -1
  254. package/dist/terminal-image.js.map +1 -1
  255. package/dist/terminal.d.ts +1 -109
  256. package/dist/terminal.d.ts.map +1 -1
  257. package/dist/terminal.js +1 -432
  258. package/dist/terminal.js.map +1 -1
  259. package/dist/tui/constants.d.ts +3 -0
  260. package/dist/tui/constants.d.ts.map +1 -0
  261. package/dist/tui/constants.js +3 -0
  262. package/dist/tui/constants.js.map +1 -0
  263. package/dist/tui/container.d.ts +10 -0
  264. package/dist/tui/container.d.ts.map +1 -0
  265. package/dist/tui/container.js +31 -0
  266. package/dist/tui/container.js.map +1 -0
  267. package/dist/tui/helpers.d.ts +8 -0
  268. package/dist/tui/helpers.d.ts.map +1 -0
  269. package/dist/tui/helpers.js +53 -0
  270. package/dist/tui/helpers.js.map +1 -0
  271. package/dist/tui/index.d.ts +6 -0
  272. package/dist/tui/index.d.ts.map +1 -0
  273. package/dist/tui/index.js +5 -0
  274. package/dist/tui/index.js.map +1 -0
  275. package/dist/tui/tui-methods/configuration.d.ts +20 -0
  276. package/dist/tui/tui-methods/configuration.d.ts.map +1 -0
  277. package/dist/tui/tui-methods/configuration.js +131 -0
  278. package/dist/tui/tui-methods/configuration.js.map +1 -0
  279. package/dist/tui/tui-methods/cursor-background.d.ts +10 -0
  280. package/dist/tui/tui-methods/cursor-background.d.ts.map +1 -0
  281. package/dist/tui/tui-methods/cursor-background.js +52 -0
  282. package/dist/tui/tui-methods/cursor-background.js.map +1 -0
  283. package/dist/tui/tui-methods/incremental-render.d.ts +17 -0
  284. package/dist/tui/tui-methods/incremental-render.d.ts.map +1 -0
  285. package/dist/tui/tui-methods/incremental-render.js +259 -0
  286. package/dist/tui/tui-methods/incremental-render.js.map +1 -0
  287. package/dist/tui/tui-methods/input-handling.d.ts +5 -0
  288. package/dist/tui/tui-methods/input-handling.d.ts.map +1 -0
  289. package/dist/tui/tui-methods/input-handling.js +111 -0
  290. package/dist/tui/tui-methods/input-handling.js.map +1 -0
  291. package/dist/tui/tui-methods/line-compositing.d.ts +7 -0
  292. package/dist/tui/tui-methods/line-compositing.d.ts.map +1 -0
  293. package/dist/tui/tui-methods/line-compositing.js +61 -0
  294. package/dist/tui/tui-methods/line-compositing.js.map +1 -0
  295. package/dist/tui/tui-methods/overlay-compositing.d.ts +12 -0
  296. package/dist/tui/tui-methods/overlay-compositing.d.ts.map +1 -0
  297. package/dist/tui/tui-methods/overlay-compositing.js +123 -0
  298. package/dist/tui/tui-methods/overlay-compositing.js.map +1 -0
  299. package/dist/tui/tui-methods/overlay-layout.d.ts +11 -0
  300. package/dist/tui/tui-methods/overlay-layout.d.ts.map +1 -0
  301. package/dist/tui/tui-methods/overlay-layout.js +124 -0
  302. package/dist/tui/tui-methods/overlay-layout.js.map +1 -0
  303. package/dist/tui/tui-methods/overlay-management.d.ts +11 -0
  304. package/dist/tui/tui-methods/overlay-management.d.ts.map +1 -0
  305. package/dist/tui/tui-methods/overlay-management.js +152 -0
  306. package/dist/tui/tui-methods/overlay-management.js.map +1 -0
  307. package/dist/tui/tui-methods/render-pipeline.d.ts +3 -0
  308. package/dist/tui/tui-methods/render-pipeline.d.ts.map +1 -0
  309. package/dist/tui/tui-methods/render-pipeline.js +176 -0
  310. package/dist/tui/tui-methods/render-pipeline.js.map +1 -0
  311. package/dist/tui/tui-methods/render-width-error.d.ts +3 -0
  312. package/dist/tui/tui-methods/render-width-error.d.ts.map +1 -0
  313. package/dist/tui/tui-methods/render-width-error.js +28 -0
  314. package/dist/tui/tui-methods/render-width-error.js.map +1 -0
  315. package/dist/tui/tui-methods/terminal-control.d.ts +8 -0
  316. package/dist/tui/tui-methods/terminal-control.d.ts.map +1 -0
  317. package/dist/tui/tui-methods/terminal-control.js +101 -0
  318. package/dist/tui/tui-methods/terminal-control.js.map +1 -0
  319. package/dist/tui/tui.d.ts +59 -0
  320. package/dist/tui/tui.d.ts.map +1 -0
  321. package/dist/tui/tui.js +78 -0
  322. package/dist/tui/tui.js.map +1 -0
  323. package/dist/tui/types.d.ts +124 -0
  324. package/dist/tui/types.d.ts.map +1 -0
  325. package/dist/tui/types.js +2 -0
  326. package/dist/tui/types.js.map +1 -0
  327. package/dist/tui.d.ts +1 -254
  328. package/dist/tui.d.ts.map +1 -1
  329. package/dist/tui.js +1 -1344
  330. package/dist/tui.js.map +1 -1
  331. package/dist/undo-stack.d.ts.map +1 -1
  332. package/dist/undo-stack.js.map +1 -1
  333. package/dist/utils/ansi-wrapping.d.ts +5 -0
  334. package/dist/utils/ansi-wrapping.d.ts.map +1 -0
  335. package/dist/utils/ansi-wrapping.js +52 -0
  336. package/dist/utils/ansi-wrapping.js.map +1 -0
  337. package/dist/utils/ansicodetracker.d.ts +27 -0
  338. package/dist/utils/ansicodetracker.d.ts.map +1 -0
  339. package/dist/utils/ansicodetracker.js +222 -0
  340. package/dist/utils/ansicodetracker.js.map +1 -0
  341. package/dist/utils/column-slicing.d.ts +12 -0
  342. package/dist/utils/column-slicing.d.ts.map +1 -0
  343. package/dist/utils/column-slicing.js +111 -0
  344. package/dist/utils/column-slicing.js.map +1 -0
  345. package/dist/utils/column-truncation.d.ts +2 -0
  346. package/dist/utils/column-truncation.d.ts.map +1 -0
  347. package/dist/utils/column-truncation.js +129 -0
  348. package/dist/utils/column-truncation.js.map +1 -0
  349. package/dist/utils/constants.d.ts +12 -0
  350. package/dist/utils/constants.d.ts.map +1 -0
  351. package/dist/utils/constants.js +12 -0
  352. package/dist/utils/constants.js.map +1 -0
  353. package/dist/utils/index.d.ts +8 -0
  354. package/dist/utils/index.d.ts.map +1 -0
  355. package/dist/utils/index.js +8 -0
  356. package/dist/utils/index.js.map +1 -0
  357. package/dist/utils/install-delegated-methods.d.ts +5 -0
  358. package/dist/utils/install-delegated-methods.d.ts.map +1 -0
  359. package/dist/utils/install-delegated-methods.js +27 -0
  360. package/dist/utils/install-delegated-methods.js.map +1 -0
  361. package/dist/utils/segmentation.d.ts +10 -0
  362. package/dist/utils/segmentation.d.ts.map +1 -0
  363. package/dist/utils/segmentation.js +111 -0
  364. package/dist/utils/segmentation.js.map +1 -0
  365. package/dist/utils/terminal-output.d.ts +10 -0
  366. package/dist/utils/terminal-output.d.ts.map +1 -0
  367. package/dist/utils/terminal-output.js +122 -0
  368. package/dist/utils/terminal-output.js.map +1 -0
  369. package/dist/utils/types.d.ts +7 -0
  370. package/dist/utils/types.d.ts.map +1 -0
  371. package/dist/utils/types.js +2 -0
  372. package/dist/utils/types.js.map +1 -0
  373. package/dist/utils/width-truncation.d.ts +6 -0
  374. package/dist/utils/width-truncation.d.ts.map +1 -0
  375. package/dist/utils/width-truncation.js +121 -0
  376. package/dist/utils/width-truncation.js.map +1 -0
  377. package/dist/utils/word-wrapping.d.ts +4 -0
  378. package/dist/utils/word-wrapping.d.ts.map +1 -0
  379. package/dist/utils/word-wrapping.js +139 -0
  380. package/dist/utils/word-wrapping.js.map +1 -0
  381. package/dist/utils.d.ts +1 -84
  382. package/dist/utils.d.ts.map +1 -1
  383. package/dist/utils.js +1 -1059
  384. package/dist/utils.js.map +1 -1
  385. package/dist/word-navigation.d.ts.map +1 -1
  386. package/dist/word-navigation.js.map +1 -1
  387. package/package.json +2 -1
@@ -0,0 +1,101 @@
1
+ import { performance } from "node:perf_hooks";
2
+ import { formatOsc11BackgroundColor, formatOsc111ResetBackgroundColor } from "../../terminal-colors.js";
3
+ import { getCapabilities } from "../../terminal-image.js";
4
+ import { TUI } from "../tui.js";
5
+ export function do_queryCellSize(self) {
6
+ // Only query if terminal supports images (cell size is only used for image rendering)
7
+ if (!getCapabilities().images) {
8
+ return;
9
+ }
10
+ // Query terminal for cell size in pixels: CSI 16 t
11
+ // Response format: CSI 6 ; height ; width t
12
+ self.terminal.write("\x1b[16t");
13
+ }
14
+ export function do_setTerminalBackgroundColor(self, colorHex) {
15
+ if (self.currentBackgroundColorHex === colorHex)
16
+ return;
17
+ self.currentBackgroundColorHex = colorHex;
18
+ if (colorHex) {
19
+ self.terminal.write(formatOsc11BackgroundColor(colorHex));
20
+ }
21
+ else {
22
+ self.terminal.write(formatOsc111ResetBackgroundColor());
23
+ }
24
+ }
25
+ export function do_resetTerminalBackgroundColor(self) {
26
+ if (self.currentBackgroundColorHex !== undefined) {
27
+ self.currentBackgroundColorHex = undefined;
28
+ self.terminal.write(formatOsc111ResetBackgroundColor());
29
+ }
30
+ }
31
+ export function do_stop(self) {
32
+ self.stopped = true;
33
+ if (self.renderTimer) {
34
+ clearTimeout(self.renderTimer);
35
+ self.renderTimer = undefined;
36
+ }
37
+ self.resetTerminalBackgroundColor();
38
+ // Move cursor to the end of the content to prevent overwriting/artifacts on exit
39
+ if (self.previousLines.length > 0) {
40
+ const targetRow = self.previousLines.length; // Line after the last content
41
+ const lineDiff = targetRow - self.hardwareCursorRow;
42
+ if (lineDiff > 0) {
43
+ self.terminal.write(`\x1b[${lineDiff}B`);
44
+ }
45
+ else if (lineDiff < 0) {
46
+ self.terminal.write(`\x1b[${-lineDiff}A`);
47
+ }
48
+ self.terminal.write("\r\n");
49
+ }
50
+ self.terminal.showCursor();
51
+ self.terminal.stop();
52
+ }
53
+ export function do_requestRender(self, force = false) {
54
+ if (force) {
55
+ self.previousLines = [];
56
+ self.previousWidth = -1; // -1 triggers widthChanged, forcing a full clear
57
+ self.previousHeight = -1; // -1 triggers heightChanged, forcing a full clear
58
+ self.cursorRow = 0;
59
+ self.hardwareCursorRow = 0;
60
+ self.maxLinesRendered = 0;
61
+ self.previousViewportTop = 0;
62
+ if (self.renderTimer) {
63
+ clearTimeout(self.renderTimer);
64
+ self.renderTimer = undefined;
65
+ }
66
+ self.renderRequested = true;
67
+ process.nextTick(() => {
68
+ if (self.stopped || !self.renderRequested) {
69
+ return;
70
+ }
71
+ self.renderRequested = false;
72
+ self.lastRenderAt = performance.now();
73
+ self.doRender();
74
+ });
75
+ return;
76
+ }
77
+ if (self.renderRequested)
78
+ return;
79
+ self.renderRequested = true;
80
+ process.nextTick(() => self.scheduleRender());
81
+ }
82
+ export function do_scheduleRender(self) {
83
+ if (self.stopped || self.renderTimer || !self.renderRequested) {
84
+ return;
85
+ }
86
+ const elapsed = performance.now() - self.lastRenderAt;
87
+ const delay = Math.max(0, TUI.MIN_RENDER_INTERVAL_MS - elapsed);
88
+ self.renderTimer = setTimeout(() => {
89
+ self.renderTimer = undefined;
90
+ if (self.stopped || !self.renderRequested) {
91
+ return;
92
+ }
93
+ self.renderRequested = false;
94
+ self.lastRenderAt = performance.now();
95
+ self.doRender();
96
+ if (self.renderRequested) {
97
+ self.scheduleRender();
98
+ }
99
+ }, delay);
100
+ }
101
+ //# sourceMappingURL=terminal-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-control.js","sourceRoot":"","sources":["../../../src/tui/tui-methods/terminal-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,UAAU,gBAAgB,CAAC,IAAS,EAAQ;IAChD,sFAAsF;IACtF,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,mDAAmD;IACnD,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAAA,CACjC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAS,EAAE,QAAiB,EAAQ;IAChF,IAAI,IAAI,CAAC,yBAAyB,KAAK,QAAQ;QAAE,OAAO;IACxD,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC;IAC1D,CAAC;AAAA,CACF;AAED,MAAM,UAAU,+BAA+B,CAAC,IAAS,EAAQ;IAC/D,IAAI,IAAI,CAAC,yBAAyB,KAAK,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC;IAC1D,CAAC;AAAA,CACF;AAED,MAAM,UAAU,OAAO,CAAC,IAAS,EAAQ;IACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,4BAA4B,EAAE,CAAC;IACpC,iFAAiF;IACjF,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,8BAA8B;QAC3E,MAAM,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACpD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,QAAQ,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAAA,CACtB;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAS,EAAE,KAAK,GAAG,KAAK,EAAQ;IAC/D,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,iDAAiD;QAC1E,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,kDAAkD;QAC5E,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAAA,CACjB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,eAAe;QAAE,OAAO;IACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAAA,CAC/C;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAS,EAAQ;IACjD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IAAA,CACF,EAAE,KAAK,CAAC,CAAC;AAAA,CACX","sourcesContent":["import { performance } from \"node:perf_hooks\";\nimport { formatOsc11BackgroundColor, formatOsc111ResetBackgroundColor } from \"../../terminal-colors.ts\";\nimport { getCapabilities } from \"../../terminal-image.ts\";\nimport { TUI } from \"../tui.ts\";\n\nexport function do_queryCellSize(self: TUI): void {\n // Only query if terminal supports images (cell size is only used for image rendering)\n if (!getCapabilities().images) {\n return;\n }\n // Query terminal for cell size in pixels: CSI 16 t\n // Response format: CSI 6 ; height ; width t\n self.terminal.write(\"\\x1b[16t\");\n}\n\nexport function do_setTerminalBackgroundColor(self: TUI, colorHex?: string): void {\n if (self.currentBackgroundColorHex === colorHex) return;\n self.currentBackgroundColorHex = colorHex;\n if (colorHex) {\n self.terminal.write(formatOsc11BackgroundColor(colorHex));\n } else {\n self.terminal.write(formatOsc111ResetBackgroundColor());\n }\n}\n\nexport function do_resetTerminalBackgroundColor(self: TUI): void {\n if (self.currentBackgroundColorHex !== undefined) {\n self.currentBackgroundColorHex = undefined;\n self.terminal.write(formatOsc111ResetBackgroundColor());\n }\n}\n\nexport function do_stop(self: TUI): void {\n self.stopped = true;\n if (self.renderTimer) {\n clearTimeout(self.renderTimer);\n self.renderTimer = undefined;\n }\n self.resetTerminalBackgroundColor();\n // Move cursor to the end of the content to prevent overwriting/artifacts on exit\n if (self.previousLines.length > 0) {\n const targetRow = self.previousLines.length; // Line after the last content\n const lineDiff = targetRow - self.hardwareCursorRow;\n if (lineDiff > 0) {\n self.terminal.write(`\\x1b[${lineDiff}B`);\n } else if (lineDiff < 0) {\n self.terminal.write(`\\x1b[${-lineDiff}A`);\n }\n self.terminal.write(\"\\r\\n\");\n }\n\n self.terminal.showCursor();\n self.terminal.stop();\n}\n\nexport function do_requestRender(self: TUI, force = false): void {\n if (force) {\n self.previousLines = [];\n self.previousWidth = -1; // -1 triggers widthChanged, forcing a full clear\n self.previousHeight = -1; // -1 triggers heightChanged, forcing a full clear\n self.cursorRow = 0;\n self.hardwareCursorRow = 0;\n self.maxLinesRendered = 0;\n self.previousViewportTop = 0;\n if (self.renderTimer) {\n clearTimeout(self.renderTimer);\n self.renderTimer = undefined;\n }\n self.renderRequested = true;\n process.nextTick(() => {\n if (self.stopped || !self.renderRequested) {\n return;\n }\n self.renderRequested = false;\n self.lastRenderAt = performance.now();\n self.doRender();\n });\n return;\n }\n if (self.renderRequested) return;\n self.renderRequested = true;\n process.nextTick(() => self.scheduleRender());\n}\n\nexport function do_scheduleRender(self: TUI): void {\n if (self.stopped || self.renderTimer || !self.renderRequested) {\n return;\n }\n const elapsed = performance.now() - self.lastRenderAt;\n const delay = Math.max(0, TUI.MIN_RENDER_INTERVAL_MS - elapsed);\n self.renderTimer = setTimeout(() => {\n self.renderTimer = undefined;\n if (self.stopped || !self.renderRequested) {\n return;\n }\n self.renderRequested = false;\n self.lastRenderAt = performance.now();\n self.doRender();\n if (self.renderRequested) {\n self.scheduleRender();\n }\n }, delay);\n}\n"]}
@@ -0,0 +1,59 @@
1
+ import type { Terminal } from "../terminal.ts";
2
+ import type { RgbColor } from "../terminal-colors.ts";
3
+ import { type DelegatedMethods } from "../utils/install-delegated-methods.ts";
4
+ import { Container } from "./container.ts";
5
+ import * as configurationDelegates from "./tui-methods/configuration.ts";
6
+ import * as cursorBackgroundDelegates from "./tui-methods/cursor-background.ts";
7
+ import * as inputHandlingDelegates from "./tui-methods/input-handling.ts";
8
+ import * as lineCompositingDelegates from "./tui-methods/line-compositing.ts";
9
+ import * as overlayCompositingDelegates from "./tui-methods/overlay-compositing.ts";
10
+ import * as overlayLayoutDelegates from "./tui-methods/overlay-layout.ts";
11
+ import * as overlayManagementDelegates from "./tui-methods/overlay-management.ts";
12
+ import * as renderPipelineDelegates from "./tui-methods/render-pipeline.ts";
13
+ import * as terminalControlDelegates from "./tui-methods/terminal-control.ts";
14
+ import type { Component, InputListener, OverlayFocusRestorePolicy, OverlayFocusRestoreState, OverlayStackEntry, PendingOsc11BackgroundQuery } from "./types.ts";
15
+ export declare class TUI extends Container {
16
+ terminal: Terminal;
17
+ previousLines: string[];
18
+ previousKittyImageIds: Set<number>;
19
+ previousWidth: number;
20
+ previousHeight: number;
21
+ focusedComponent: Component | null;
22
+ inputListeners: Set<InputListener>;
23
+ onDebug?: () => void;
24
+ renderRequested: boolean;
25
+ renderTimer: NodeJS.Timeout | undefined;
26
+ lastRenderAt: number;
27
+ static readonly MIN_RENDER_INTERVAL_MS = 16;
28
+ cursorRow: number;
29
+ hardwareCursorRow: number;
30
+ showHardwareCursor: boolean;
31
+ clearOnShrink: boolean;
32
+ maxLinesRendered: number;
33
+ previousViewportTop: number;
34
+ fullRedrawCount: number;
35
+ stopped: boolean;
36
+ pendingOsc11BackgroundReplies: number;
37
+ pendingOsc11BackgroundQueries: PendingOsc11BackgroundQuery[];
38
+ focusOrderCounter: number;
39
+ overlayStack: OverlayStackEntry[];
40
+ previousOverlayCount: number;
41
+ overlayFocusRestore: OverlayFocusRestoreState;
42
+ constructor(terminal: Terminal, showHardwareCursor?: boolean);
43
+ get fullRedraws(): number;
44
+ currentBackgroundColorHex: string | undefined;
45
+ static readonly SEGMENT_RESET = "\u001B[0m\u001B]8;;\u0007";
46
+ invalidate(): void;
47
+ setFocusInternal({ component, overlayFocusRestore }: {
48
+ component: Component | null;
49
+ overlayFocusRestore: OverlayFocusRestorePolicy;
50
+ }): void;
51
+ queryTerminalBackgroundColor({ timeoutMs }: {
52
+ timeoutMs: number;
53
+ }): Promise<RgbColor | undefined>;
54
+ }
55
+ type TUIMethods = Omit<DelegatedMethods<TUI, typeof configurationDelegates & typeof cursorBackgroundDelegates & typeof inputHandlingDelegates & typeof lineCompositingDelegates & typeof overlayCompositingDelegates & typeof overlayLayoutDelegates & typeof overlayManagementDelegates & typeof renderPipelineDelegates & typeof terminalControlDelegates>, "queryTerminalBackgroundColor" | "setFocusInternal">;
56
+ export interface TUI extends TUIMethods {
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/tui/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,uCAAuC,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,sBAAsB,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,yBAAyB,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,sBAAsB,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,wBAAwB,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,2BAA2B,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,sBAAsB,MAAM,iCAAiC,CAAC;AAC1E,OAAO,KAAK,0BAA0B,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,uBAAuB,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,wBAAwB,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAGpB,qBAAa,GAAI,SAAQ,SAAS;IACzB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,aAAa,EAAE,MAAM,EAAE,CAAM;IAE7B,qBAAqB,cAAqB;IAE1C,aAAa,SAAK;IAElB,cAAc,SAAK;IAEnB,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAQ;IAE1C,cAAc,qBAA4B;IAE1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,eAAe,UAAS;IAExB,WAAW,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAExC,YAAY,SAAK;IAExB,gBAAuB,sBAAsB,MAAM;IAE5C,SAAS,SAAK;IAEd,iBAAiB,SAAK;IAEtB,kBAAkB,UAA0C;IAE5D,aAAa,UAA0C;IAEvD,gBAAgB,SAAK;IAErB,mBAAmB,SAAK;IAExB,eAAe,SAAK;IAEpB,OAAO,UAAS;IAEhB,6BAA6B,SAAK;IAElC,6BAA6B,EAAE,2BAA2B,EAAE,CAAM;IAElE,iBAAiB,SAAK;IAEtB,YAAY,EAAE,iBAAiB,EAAE,CAAM;IAEvC,oBAAoB,SAAK;IAEzB,mBAAmB,EAAE,wBAAwB,CAA0B;IAE9E,YAAY,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAM3D;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAEM,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAa;IAEjE,gBAAuB,aAAa,+BAAyB;IAEpD,UAAU,IAAI,IAAI,CAG1B;IAED,gBAAgB,CAAC,EACf,SAAS,EACT,mBAAmB,EACpB,EAAE;QACD,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;QAC5B,mBAAmB,EAAE,yBAAyB,CAAC;KAChD,GAAG,IAAI,CAKP;IAED,4BAA4B,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAEhG;CACF;AAED,KAAK,UAAU,GAAG,IAAI,CACpB,gBAAgB,CACd,GAAG,EACH,OAAO,sBAAsB,GAC3B,OAAO,yBAAyB,GAChC,OAAO,sBAAsB,GAC7B,OAAO,wBAAwB,GAC/B,OAAO,2BAA2B,GAClC,OAAO,sBAAsB,GAC7B,OAAO,0BAA0B,GACjC,OAAO,uBAAuB,GAC9B,OAAO,wBAAwB,CAClC,EACD,8BAA8B,GAAG,kBAAkB,CACpD,CAAC;AAEF,MAAM,WAAW,GAAI,SAAQ,UAAU;CAAG","sourcesContent":["import type { Terminal } from \"../terminal.ts\";\nimport type { RgbColor } from \"../terminal-colors.ts\";\nimport { type DelegatedMethods, installDelegatedMethods } from \"../utils/install-delegated-methods.ts\";\nimport { Container } from \"./container.ts\";\nimport * as configurationDelegates from \"./tui-methods/configuration.ts\";\nimport * as cursorBackgroundDelegates from \"./tui-methods/cursor-background.ts\";\nimport * as inputHandlingDelegates from \"./tui-methods/input-handling.ts\";\nimport * as lineCompositingDelegates from \"./tui-methods/line-compositing.ts\";\nimport * as overlayCompositingDelegates from \"./tui-methods/overlay-compositing.ts\";\nimport * as overlayLayoutDelegates from \"./tui-methods/overlay-layout.ts\";\nimport * as overlayManagementDelegates from \"./tui-methods/overlay-management.ts\";\nimport * as renderPipelineDelegates from \"./tui-methods/render-pipeline.ts\";\nimport * as terminalControlDelegates from \"./tui-methods/terminal-control.ts\";\nimport type {\n Component,\n InputListener,\n OverlayFocusRestorePolicy,\n OverlayFocusRestoreState,\n OverlayStackEntry,\n PendingOsc11BackgroundQuery,\n} from \"./types.ts\";\n\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: The installer below synchronously defines every delegated method.\nexport class TUI extends Container {\n public terminal: Terminal;\n\n public previousLines: string[] = [];\n\n public previousKittyImageIds = new Set<number>();\n\n public previousWidth = 0;\n\n public previousHeight = 0;\n\n public focusedComponent: Component | null = null;\n\n public inputListeners = new Set<InputListener>();\n\n public onDebug?: () => void;\n\n public renderRequested = false;\n\n public renderTimer: NodeJS.Timeout | undefined;\n\n public lastRenderAt = 0;\n\n public static readonly MIN_RENDER_INTERVAL_MS = 16;\n\n public cursorRow = 0;\n\n public hardwareCursorRow = 0;\n\n public showHardwareCursor = process.env.PI_HARDWARE_CURSOR === \"1\";\n\n public clearOnShrink = process.env.PI_CLEAR_ON_SHRINK === \"1\";\n\n public maxLinesRendered = 0;\n\n public previousViewportTop = 0;\n\n public fullRedrawCount = 0;\n\n public stopped = false;\n\n public pendingOsc11BackgroundReplies = 0;\n\n public pendingOsc11BackgroundQueries: PendingOsc11BackgroundQuery[] = [];\n\n public focusOrderCounter = 0;\n\n public overlayStack: OverlayStackEntry[] = [];\n\n public previousOverlayCount = 0;\n\n public overlayFocusRestore: OverlayFocusRestoreState = { status: \"inactive\" };\n\n constructor(terminal: Terminal, showHardwareCursor?: boolean) {\n super();\n this.terminal = terminal;\n if (showHardwareCursor !== undefined) {\n this.showHardwareCursor = showHardwareCursor;\n }\n }\n\n get fullRedraws(): number {\n return this.fullRedrawCount;\n }\n\n public currentBackgroundColorHex: string | undefined = undefined;\n\n public static readonly SEGMENT_RESET = \"\\x1b[0m\\x1b]8;;\\x07\";\n\n override invalidate(): void {\n super.invalidate();\n for (const overlay of this.overlayStack) overlay.component.invalidate?.();\n }\n\n setFocusInternal({\n component,\n overlayFocusRestore,\n }: {\n component: Component | null;\n overlayFocusRestore: OverlayFocusRestorePolicy;\n }): void {\n configurationDelegates.do_setFocusInternal(this, {\n component,\n overlayFocusRestore,\n });\n }\n\n queryTerminalBackgroundColor({ timeoutMs }: { timeoutMs: number }): Promise<RgbColor | undefined> {\n return cursorBackgroundDelegates.do_queryTerminalBackgroundColor(this, { timeoutMs });\n }\n}\n\ntype TUIMethods = Omit<\n DelegatedMethods<\n TUI,\n typeof configurationDelegates &\n typeof cursorBackgroundDelegates &\n typeof inputHandlingDelegates &\n typeof lineCompositingDelegates &\n typeof overlayCompositingDelegates &\n typeof overlayLayoutDelegates &\n typeof overlayManagementDelegates &\n typeof renderPipelineDelegates &\n typeof terminalControlDelegates\n >,\n \"queryTerminalBackgroundColor\" | \"setFocusInternal\"\n>;\n\nexport interface TUI extends TUIMethods {}\n\ninstallDelegatedMethods(TUI.prototype, [\n configurationDelegates,\n cursorBackgroundDelegates,\n inputHandlingDelegates,\n lineCompositingDelegates,\n overlayCompositingDelegates,\n overlayLayoutDelegates,\n overlayManagementDelegates,\n renderPipelineDelegates,\n terminalControlDelegates,\n]);\n"]}
@@ -0,0 +1,78 @@
1
+ import { installDelegatedMethods } from "../utils/install-delegated-methods.js";
2
+ import { Container } from "./container.js";
3
+ import * as configurationDelegates from "./tui-methods/configuration.js";
4
+ import * as cursorBackgroundDelegates from "./tui-methods/cursor-background.js";
5
+ import * as inputHandlingDelegates from "./tui-methods/input-handling.js";
6
+ import * as lineCompositingDelegates from "./tui-methods/line-compositing.js";
7
+ import * as overlayCompositingDelegates from "./tui-methods/overlay-compositing.js";
8
+ import * as overlayLayoutDelegates from "./tui-methods/overlay-layout.js";
9
+ import * as overlayManagementDelegates from "./tui-methods/overlay-management.js";
10
+ import * as renderPipelineDelegates from "./tui-methods/render-pipeline.js";
11
+ import * as terminalControlDelegates from "./tui-methods/terminal-control.js";
12
+ // biome-ignore lint/suspicious/noUnsafeDeclarationMerging: The installer below synchronously defines every delegated method.
13
+ export class TUI extends Container {
14
+ terminal;
15
+ previousLines = [];
16
+ previousKittyImageIds = new Set();
17
+ previousWidth = 0;
18
+ previousHeight = 0;
19
+ focusedComponent = null;
20
+ inputListeners = new Set();
21
+ onDebug;
22
+ renderRequested = false;
23
+ renderTimer;
24
+ lastRenderAt = 0;
25
+ static MIN_RENDER_INTERVAL_MS = 16;
26
+ cursorRow = 0;
27
+ hardwareCursorRow = 0;
28
+ showHardwareCursor = process.env.PI_HARDWARE_CURSOR === "1";
29
+ clearOnShrink = process.env.PI_CLEAR_ON_SHRINK === "1";
30
+ maxLinesRendered = 0;
31
+ previousViewportTop = 0;
32
+ fullRedrawCount = 0;
33
+ stopped = false;
34
+ pendingOsc11BackgroundReplies = 0;
35
+ pendingOsc11BackgroundQueries = [];
36
+ focusOrderCounter = 0;
37
+ overlayStack = [];
38
+ previousOverlayCount = 0;
39
+ overlayFocusRestore = { status: "inactive" };
40
+ constructor(terminal, showHardwareCursor) {
41
+ super();
42
+ this.terminal = terminal;
43
+ if (showHardwareCursor !== undefined) {
44
+ this.showHardwareCursor = showHardwareCursor;
45
+ }
46
+ }
47
+ get fullRedraws() {
48
+ return this.fullRedrawCount;
49
+ }
50
+ currentBackgroundColorHex = undefined;
51
+ static SEGMENT_RESET = "\x1b[0m\x1b]8;;\x07";
52
+ invalidate() {
53
+ super.invalidate();
54
+ for (const overlay of this.overlayStack)
55
+ overlay.component.invalidate?.();
56
+ }
57
+ setFocusInternal({ component, overlayFocusRestore, }) {
58
+ configurationDelegates.do_setFocusInternal(this, {
59
+ component,
60
+ overlayFocusRestore,
61
+ });
62
+ }
63
+ queryTerminalBackgroundColor({ timeoutMs }) {
64
+ return cursorBackgroundDelegates.do_queryTerminalBackgroundColor(this, { timeoutMs });
65
+ }
66
+ }
67
+ installDelegatedMethods(TUI.prototype, [
68
+ configurationDelegates,
69
+ cursorBackgroundDelegates,
70
+ inputHandlingDelegates,
71
+ lineCompositingDelegates,
72
+ overlayCompositingDelegates,
73
+ overlayLayoutDelegates,
74
+ overlayManagementDelegates,
75
+ renderPipelineDelegates,
76
+ terminalControlDelegates,
77
+ ]);
78
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/tui/tui.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Terminal } from \"../terminal.ts\";\nimport type { RgbColor } from \"../terminal-colors.ts\";\nimport { type DelegatedMethods, installDelegatedMethods } from \"../utils/install-delegated-methods.ts\";\nimport { Container } from \"./container.ts\";\nimport * as configurationDelegates from \"./tui-methods/configuration.ts\";\nimport * as cursorBackgroundDelegates from \"./tui-methods/cursor-background.ts\";\nimport * as inputHandlingDelegates from \"./tui-methods/input-handling.ts\";\nimport * as lineCompositingDelegates from \"./tui-methods/line-compositing.ts\";\nimport * as overlayCompositingDelegates from \"./tui-methods/overlay-compositing.ts\";\nimport * as overlayLayoutDelegates from \"./tui-methods/overlay-layout.ts\";\nimport * as overlayManagementDelegates from \"./tui-methods/overlay-management.ts\";\nimport * as renderPipelineDelegates from \"./tui-methods/render-pipeline.ts\";\nimport * as terminalControlDelegates from \"./tui-methods/terminal-control.ts\";\nimport type {\n Component,\n InputListener,\n OverlayFocusRestorePolicy,\n OverlayFocusRestoreState,\n OverlayStackEntry,\n PendingOsc11BackgroundQuery,\n} from \"./types.ts\";\n\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: The installer below synchronously defines every delegated method.\nexport class TUI extends Container {\n public terminal: Terminal;\n\n public previousLines: string[] = [];\n\n public previousKittyImageIds = new Set<number>();\n\n public previousWidth = 0;\n\n public previousHeight = 0;\n\n public focusedComponent: Component | null = null;\n\n public inputListeners = new Set<InputListener>();\n\n public onDebug?: () => void;\n\n public renderRequested = false;\n\n public renderTimer: NodeJS.Timeout | undefined;\n\n public lastRenderAt = 0;\n\n public static readonly MIN_RENDER_INTERVAL_MS = 16;\n\n public cursorRow = 0;\n\n public hardwareCursorRow = 0;\n\n public showHardwareCursor = process.env.PI_HARDWARE_CURSOR === \"1\";\n\n public clearOnShrink = process.env.PI_CLEAR_ON_SHRINK === \"1\";\n\n public maxLinesRendered = 0;\n\n public previousViewportTop = 0;\n\n public fullRedrawCount = 0;\n\n public stopped = false;\n\n public pendingOsc11BackgroundReplies = 0;\n\n public pendingOsc11BackgroundQueries: PendingOsc11BackgroundQuery[] = [];\n\n public focusOrderCounter = 0;\n\n public overlayStack: OverlayStackEntry[] = [];\n\n public previousOverlayCount = 0;\n\n public overlayFocusRestore: OverlayFocusRestoreState = { status: \"inactive\" };\n\n constructor(terminal: Terminal, showHardwareCursor?: boolean) {\n super();\n this.terminal = terminal;\n if (showHardwareCursor !== undefined) {\n this.showHardwareCursor = showHardwareCursor;\n }\n }\n\n get fullRedraws(): number {\n return this.fullRedrawCount;\n }\n\n public currentBackgroundColorHex: string | undefined = undefined;\n\n public static readonly SEGMENT_RESET = \"\\x1b[0m\\x1b]8;;\\x07\";\n\n override invalidate(): void {\n super.invalidate();\n for (const overlay of this.overlayStack) overlay.component.invalidate?.();\n }\n\n setFocusInternal({\n component,\n overlayFocusRestore,\n }: {\n component: Component | null;\n overlayFocusRestore: OverlayFocusRestorePolicy;\n }): void {\n configurationDelegates.do_setFocusInternal(this, {\n component,\n overlayFocusRestore,\n });\n }\n\n queryTerminalBackgroundColor({ timeoutMs }: { timeoutMs: number }): Promise<RgbColor | undefined> {\n return cursorBackgroundDelegates.do_queryTerminalBackgroundColor(this, { timeoutMs });\n }\n}\n\ntype TUIMethods = Omit<\n DelegatedMethods<\n TUI,\n typeof configurationDelegates &\n typeof cursorBackgroundDelegates &\n typeof inputHandlingDelegates &\n typeof lineCompositingDelegates &\n typeof overlayCompositingDelegates &\n typeof overlayLayoutDelegates &\n typeof overlayManagementDelegates &\n typeof renderPipelineDelegates &\n typeof terminalControlDelegates\n >,\n \"queryTerminalBackgroundColor\" | \"setFocusInternal\"\n>;\n\nexport interface TUI extends TUIMethods {}\n\ninstallDelegatedMethods(TUI.prototype, [\n configurationDelegates,\n cursorBackgroundDelegates,\n inputHandlingDelegates,\n lineCompositingDelegates,\n overlayCompositingDelegates,\n overlayLayoutDelegates,\n overlayManagementDelegates,\n renderPipelineDelegates,\n terminalControlDelegates,\n]);\n"]}
@@ -0,0 +1,124 @@
1
+ import type { RgbColor } from "../terminal-colors.ts";
2
+ export interface KittyImageHeader {
3
+ ids: number[];
4
+ rows: number;
5
+ }
6
+ export interface Component {
7
+ /**
8
+ * Render the component to lines for the given viewport width
9
+ * @param width - Current viewport width
10
+ * @returns Array of strings, each representing a line
11
+ */
12
+ render(width: number): string[];
13
+ /**
14
+ * Optional handler for keyboard input when component has focus
15
+ */
16
+ handleInput?(data: string): void;
17
+ /**
18
+ * If true, component receives key release events (Kitty protocol).
19
+ * Default is false - release events are filtered out.
20
+ */
21
+ wantsKeyRelease?: boolean;
22
+ /**
23
+ * Invalidate any cached rendering state.
24
+ * Called when theme changes or when component needs to re-render from scratch.
25
+ */
26
+ invalidate(): void;
27
+ }
28
+ export type InputListenerResult = {
29
+ consume?: boolean;
30
+ data?: string;
31
+ } | undefined;
32
+ export type InputListener = (data: string) => InputListenerResult;
33
+ export type PendingOsc11BackgroundQuery = {
34
+ settled: boolean;
35
+ resolve: ((rgb: RgbColor | undefined) => void) | undefined;
36
+ timer: NodeJS.Timeout | undefined;
37
+ };
38
+ export interface Focusable {
39
+ /** Set by TUI when focus changes. Component should emit CURSOR_MARKER when true. */
40
+ focused: boolean;
41
+ }
42
+ export type OverlayAnchor = "center" | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-center" | "bottom-center" | "left-center" | "right-center";
43
+ export interface OverlayMargin {
44
+ top?: number;
45
+ right?: number;
46
+ bottom?: number;
47
+ left?: number;
48
+ }
49
+ export type SizeValue = number | `${number}%`;
50
+ export interface OverlayOptions {
51
+ /** Width in columns, or percentage of terminal width (e.g., "50%") */
52
+ width?: SizeValue;
53
+ /** Minimum width in columns */
54
+ minWidth?: number;
55
+ /** Maximum height in rows, or percentage of terminal height (e.g., "50%") */
56
+ maxHeight?: SizeValue;
57
+ /** Anchor point for positioning (default: 'center') */
58
+ anchor?: OverlayAnchor;
59
+ /** Horizontal offset from anchor position (positive = right) */
60
+ offsetX?: number;
61
+ /** Vertical offset from anchor position (positive = down) */
62
+ offsetY?: number;
63
+ /** Row position: absolute number, or percentage (e.g., "25%" = 25% from top) */
64
+ row?: SizeValue;
65
+ /** Column position: absolute number, or percentage (e.g., "50%" = centered horizontally) */
66
+ col?: SizeValue;
67
+ /** Margin from terminal edges. Number applies to all sides. */
68
+ margin?: OverlayMargin | number;
69
+ /**
70
+ * Control overlay visibility based on terminal dimensions.
71
+ * If provided, overlay is only rendered when this returns true.
72
+ * Called each render cycle with current terminal dimensions.
73
+ */
74
+ visible?: (termWidth: number, termHeight: number) => boolean;
75
+ /** If true, don't capture keyboard focus when shown */
76
+ nonCapturing?: boolean;
77
+ }
78
+ export interface OverlayUnfocusOptions {
79
+ /** Explicit target to focus after releasing this overlay. */
80
+ target: Component | null;
81
+ }
82
+ export interface OverlayHandle {
83
+ /** Permanently remove the overlay (cannot be shown again) */
84
+ hide(): void;
85
+ /** Temporarily hide or show the overlay */
86
+ setHidden(hidden: boolean): void;
87
+ /** Check if overlay is temporarily hidden */
88
+ isHidden(): boolean;
89
+ /** Focus this overlay and bring it to the visual front */
90
+ focus(): void;
91
+ /** Release focus to the next visible capturing overlay or previous target, or to an explicit target when provided */
92
+ unfocus(options?: OverlayUnfocusOptions): void;
93
+ /** Check if this overlay currently has focus */
94
+ isFocused(): boolean;
95
+ }
96
+ export type OverlayStackEntry = {
97
+ component: Component;
98
+ options?: OverlayOptions;
99
+ preFocus: Component | null;
100
+ hidden: boolean;
101
+ focusOrder: number;
102
+ };
103
+ export type OverlayBlockedFocusResume = {
104
+ status: "restore-overlay";
105
+ } | {
106
+ status: "focus-target";
107
+ target: Component | null;
108
+ };
109
+ export type EligibleOverlayFocusRestoreState = {
110
+ status: "eligible";
111
+ overlay: OverlayStackEntry;
112
+ };
113
+ export type BlockedOverlayFocusRestoreState = {
114
+ status: "blocked";
115
+ overlay: OverlayStackEntry;
116
+ blockedBy: Component;
117
+ resume: OverlayBlockedFocusResume;
118
+ };
119
+ export type ActiveOverlayFocusRestoreState = EligibleOverlayFocusRestoreState | BlockedOverlayFocusRestoreState;
120
+ export type OverlayFocusRestoreState = {
121
+ status: "inactive";
122
+ } | ActiveOverlayFocusRestoreState;
123
+ export type OverlayFocusRestorePolicy = "clear" | "preserve";
124
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RgbColor } from \"../terminal-colors.ts\";\n\nexport interface KittyImageHeader {\n ids: number[];\n rows: number;\n}\n\nexport interface Component {\n /**\n * Render the component to lines for the given viewport width\n * @param width - Current viewport width\n * @returns Array of strings, each representing a line\n */\n render(width: number): string[];\n\n /**\n * Optional handler for keyboard input when component has focus\n */\n handleInput?(data: string): void;\n\n /**\n * If true, component receives key release events (Kitty protocol).\n * Default is false - release events are filtered out.\n */\n wantsKeyRelease?: boolean;\n\n /**\n * Invalidate any cached rendering state.\n * Called when theme changes or when component needs to re-render from scratch.\n */\n invalidate(): void;\n}\n\nexport type InputListenerResult = { consume?: boolean; data?: string } | undefined;\n\nexport type InputListener = (data: string) => InputListenerResult;\n\nexport type PendingOsc11BackgroundQuery = {\n settled: boolean;\n resolve: ((rgb: RgbColor | undefined) => void) | undefined;\n timer: NodeJS.Timeout | undefined;\n};\n\nexport interface Focusable {\n /** Set by TUI when focus changes. Component should emit CURSOR_MARKER when true. */\n focused: boolean;\n}\n\nexport type OverlayAnchor =\n | \"center\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"top-center\"\n | \"bottom-center\"\n | \"left-center\"\n | \"right-center\";\n\nexport interface OverlayMargin {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport type SizeValue = number | `${number}%`;\n\nexport interface OverlayOptions {\n // === Sizing ===\n /** Width in columns, or percentage of terminal width (e.g., \"50%\") */\n width?: SizeValue;\n /** Minimum width in columns */\n minWidth?: number;\n /** Maximum height in rows, or percentage of terminal height (e.g., \"50%\") */\n maxHeight?: SizeValue;\n\n // === Positioning - anchor-based ===\n /** Anchor point for positioning (default: 'center') */\n anchor?: OverlayAnchor;\n /** Horizontal offset from anchor position (positive = right) */\n offsetX?: number;\n /** Vertical offset from anchor position (positive = down) */\n offsetY?: number;\n\n // === Positioning - percentage or absolute ===\n /** Row position: absolute number, or percentage (e.g., \"25%\" = 25% from top) */\n row?: SizeValue;\n /** Column position: absolute number, or percentage (e.g., \"50%\" = centered horizontally) */\n col?: SizeValue;\n\n // === Margin from terminal edges ===\n /** Margin from terminal edges. Number applies to all sides. */\n margin?: OverlayMargin | number;\n\n // === Visibility ===\n /**\n * Control overlay visibility based on terminal dimensions.\n * If provided, overlay is only rendered when this returns true.\n * Called each render cycle with current terminal dimensions.\n */\n visible?: (termWidth: number, termHeight: number) => boolean;\n /** If true, don't capture keyboard focus when shown */\n nonCapturing?: boolean;\n}\n\nexport interface OverlayUnfocusOptions {\n /** Explicit target to focus after releasing this overlay. */\n target: Component | null;\n}\n\nexport interface OverlayHandle {\n /** Permanently remove the overlay (cannot be shown again) */\n hide(): void;\n /** Temporarily hide or show the overlay */\n setHidden(hidden: boolean): void;\n /** Check if overlay is temporarily hidden */\n isHidden(): boolean;\n /** Focus this overlay and bring it to the visual front */\n focus(): void;\n /** Release focus to the next visible capturing overlay or previous target, or to an explicit target when provided */\n unfocus(options?: OverlayUnfocusOptions): void;\n /** Check if this overlay currently has focus */\n isFocused(): boolean;\n}\n\nexport type OverlayStackEntry = {\n component: Component;\n options?: OverlayOptions;\n preFocus: Component | null;\n hidden: boolean;\n focusOrder: number;\n};\n\nexport type OverlayBlockedFocusResume =\n | { status: \"restore-overlay\" }\n | { status: \"focus-target\"; target: Component | null };\n\nexport type EligibleOverlayFocusRestoreState = { status: \"eligible\"; overlay: OverlayStackEntry };\n\nexport type BlockedOverlayFocusRestoreState = {\n status: \"blocked\";\n overlay: OverlayStackEntry;\n blockedBy: Component;\n resume: OverlayBlockedFocusResume;\n};\n\nexport type ActiveOverlayFocusRestoreState = EligibleOverlayFocusRestoreState | BlockedOverlayFocusRestoreState;\n\nexport type OverlayFocusRestoreState = { status: \"inactive\" } | ActiveOverlayFocusRestoreState;\n\nexport type OverlayFocusRestorePolicy = \"clear\" | \"preserve\";\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { RgbColor } from \"../terminal-colors.ts\";\n\nexport interface KittyImageHeader {\n ids: number[];\n rows: number;\n}\n\nexport interface Component {\n /**\n * Render the component to lines for the given viewport width\n * @param width - Current viewport width\n * @returns Array of strings, each representing a line\n */\n render(width: number): string[];\n\n /**\n * Optional handler for keyboard input when component has focus\n */\n handleInput?(data: string): void;\n\n /**\n * If true, component receives key release events (Kitty protocol).\n * Default is false - release events are filtered out.\n */\n wantsKeyRelease?: boolean;\n\n /**\n * Invalidate any cached rendering state.\n * Called when theme changes or when component needs to re-render from scratch.\n */\n invalidate(): void;\n}\n\nexport type InputListenerResult = { consume?: boolean; data?: string } | undefined;\n\nexport type InputListener = (data: string) => InputListenerResult;\n\nexport type PendingOsc11BackgroundQuery = {\n settled: boolean;\n resolve: ((rgb: RgbColor | undefined) => void) | undefined;\n timer: NodeJS.Timeout | undefined;\n};\n\nexport interface Focusable {\n /** Set by TUI when focus changes. Component should emit CURSOR_MARKER when true. */\n focused: boolean;\n}\n\nexport type OverlayAnchor =\n | \"center\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"top-center\"\n | \"bottom-center\"\n | \"left-center\"\n | \"right-center\";\n\nexport interface OverlayMargin {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n}\n\nexport type SizeValue = number | `${number}%`;\n\nexport interface OverlayOptions {\n // === Sizing ===\n /** Width in columns, or percentage of terminal width (e.g., \"50%\") */\n width?: SizeValue;\n /** Minimum width in columns */\n minWidth?: number;\n /** Maximum height in rows, or percentage of terminal height (e.g., \"50%\") */\n maxHeight?: SizeValue;\n\n // === Positioning - anchor-based ===\n /** Anchor point for positioning (default: 'center') */\n anchor?: OverlayAnchor;\n /** Horizontal offset from anchor position (positive = right) */\n offsetX?: number;\n /** Vertical offset from anchor position (positive = down) */\n offsetY?: number;\n\n // === Positioning - percentage or absolute ===\n /** Row position: absolute number, or percentage (e.g., \"25%\" = 25% from top) */\n row?: SizeValue;\n /** Column position: absolute number, or percentage (e.g., \"50%\" = centered horizontally) */\n col?: SizeValue;\n\n // === Margin from terminal edges ===\n /** Margin from terminal edges. Number applies to all sides. */\n margin?: OverlayMargin | number;\n\n // === Visibility ===\n /**\n * Control overlay visibility based on terminal dimensions.\n * If provided, overlay is only rendered when this returns true.\n * Called each render cycle with current terminal dimensions.\n */\n visible?: (termWidth: number, termHeight: number) => boolean;\n /** If true, don't capture keyboard focus when shown */\n nonCapturing?: boolean;\n}\n\nexport interface OverlayUnfocusOptions {\n /** Explicit target to focus after releasing this overlay. */\n target: Component | null;\n}\n\nexport interface OverlayHandle {\n /** Permanently remove the overlay (cannot be shown again) */\n hide(): void;\n /** Temporarily hide or show the overlay */\n setHidden(hidden: boolean): void;\n /** Check if overlay is temporarily hidden */\n isHidden(): boolean;\n /** Focus this overlay and bring it to the visual front */\n focus(): void;\n /** Release focus to the next visible capturing overlay or previous target, or to an explicit target when provided */\n unfocus(options?: OverlayUnfocusOptions): void;\n /** Check if this overlay currently has focus */\n isFocused(): boolean;\n}\n\nexport type OverlayStackEntry = {\n component: Component;\n options?: OverlayOptions;\n preFocus: Component | null;\n hidden: boolean;\n focusOrder: number;\n};\n\nexport type OverlayBlockedFocusResume =\n | { status: \"restore-overlay\" }\n | { status: \"focus-target\"; target: Component | null };\n\nexport type EligibleOverlayFocusRestoreState = { status: \"eligible\"; overlay: OverlayStackEntry };\n\nexport type BlockedOverlayFocusRestoreState = {\n status: \"blocked\";\n overlay: OverlayStackEntry;\n blockedBy: Component;\n resume: OverlayBlockedFocusResume;\n};\n\nexport type ActiveOverlayFocusRestoreState = EligibleOverlayFocusRestoreState | BlockedOverlayFocusRestoreState;\n\nexport type OverlayFocusRestoreState = { status: \"inactive\" } | ActiveOverlayFocusRestoreState;\n\nexport type OverlayFocusRestorePolicy = \"clear\" | \"preserve\";\n"]}