@navios/commander-tui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +275 -0
  3. package/coverage/__tests__/utils/factories.ts.html +1147 -0
  4. package/coverage/__tests__/utils/index.html +131 -0
  5. package/coverage/__tests__/utils/render-utils.tsx.html +202 -0
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +959 -0
  9. package/coverage/components/filter/filter_bar.tsx.html +322 -0
  10. package/coverage/components/filter/index.html +116 -0
  11. package/coverage/components/log/index.html +131 -0
  12. package/coverage/components/log/index.ts.html +88 -0
  13. package/coverage/components/log/log_message.tsx.html +391 -0
  14. package/coverage/components/prompt/index.html +116 -0
  15. package/coverage/components/prompt/prompt_renderer.tsx.html +1123 -0
  16. package/coverage/components/screen/index.html +131 -0
  17. package/coverage/components/screen/loading_message.tsx.html +217 -0
  18. package/coverage/components/screen/progress_message.tsx.html +265 -0
  19. package/coverage/components/sidebar/index.html +146 -0
  20. package/coverage/components/sidebar/sidebar.tsx.html +391 -0
  21. package/coverage/components/sidebar/sidebar_item.tsx.html +235 -0
  22. package/coverage/components/sidebar/sidebar_separator.tsx.html +124 -0
  23. package/coverage/context/index.html +131 -0
  24. package/coverage/context/index.ts.html +88 -0
  25. package/coverage/context/logger_context.tsx.html +412 -0
  26. package/coverage/coverage-final.json +55 -0
  27. package/coverage/favicon.png +0 -0
  28. package/coverage/filter/filter_engine.ts.html +424 -0
  29. package/coverage/filter/index.html +116 -0
  30. package/coverage/hooks/index.html +131 -0
  31. package/coverage/hooks/index.ts.html +88 -0
  32. package/coverage/hooks/use_theme.ts.html +121 -0
  33. package/coverage/index.html +356 -0
  34. package/coverage/keyboard/index.html +116 -0
  35. package/coverage/keyboard/keyboard_manager.ts.html +784 -0
  36. package/coverage/prettify.css +1 -0
  37. package/coverage/prettify.js +2 -0
  38. package/coverage/schemas/index.html +161 -0
  39. package/coverage/schemas/index.ts.html +94 -0
  40. package/coverage/schemas/logger-options.ts.html +124 -0
  41. package/coverage/schemas/prompt-options.ts.html +112 -0
  42. package/coverage/schemas/screen-options.ts.html +127 -0
  43. package/coverage/services/index.html +146 -0
  44. package/coverage/services/logger.ts.html +1192 -0
  45. package/coverage/services/prompt.ts.html +568 -0
  46. package/coverage/services/screen.ts.html +1804 -0
  47. package/coverage/sort-arrow-sprite.png +0 -0
  48. package/coverage/sorter.js +210 -0
  49. package/coverage/themes/dark.ts.html +604 -0
  50. package/coverage/themes/high-contrast.ts.html +619 -0
  51. package/coverage/themes/index.html +176 -0
  52. package/coverage/themes/index.ts.html +97 -0
  53. package/coverage/themes/light.ts.html +601 -0
  54. package/coverage/themes/utils.ts.html +334 -0
  55. package/coverage/tokens/index.html +161 -0
  56. package/coverage/tokens/index.ts.html +94 -0
  57. package/coverage/tokens/logger.ts.html +115 -0
  58. package/coverage/tokens/prompt.ts.html +115 -0
  59. package/coverage/tokens/screen.ts.html +115 -0
  60. package/coverage/types/file.types.ts.html +265 -0
  61. package/coverage/types/filter.types.ts.html +238 -0
  62. package/coverage/types/index.html +236 -0
  63. package/coverage/types/index.ts.html +151 -0
  64. package/coverage/types/keyboard.types.ts.html +364 -0
  65. package/coverage/types/log.types.ts.html +268 -0
  66. package/coverage/types/message.types.ts.html +445 -0
  67. package/coverage/types/prompt.types.ts.html +403 -0
  68. package/coverage/types/screen.types.ts.html +451 -0
  69. package/coverage/types/theme.types.ts.html +841 -0
  70. package/coverage/utils/colors/file-colors.ts.html +112 -0
  71. package/coverage/utils/colors/helpers.ts.html +235 -0
  72. package/coverage/utils/colors/index.html +221 -0
  73. package/coverage/utils/colors/index.ts.html +145 -0
  74. package/coverage/utils/colors/log-colors.ts.html +253 -0
  75. package/coverage/utils/colors/progress-colors.ts.html +160 -0
  76. package/coverage/utils/colors/prompt-colors.ts.html +175 -0
  77. package/coverage/utils/colors/sidebar-colors.ts.html +241 -0
  78. package/coverage/utils/colors/table-colors.ts.html +118 -0
  79. package/coverage/utils/filetype.ts.html +277 -0
  80. package/coverage/utils/format.ts.html +241 -0
  81. package/coverage/utils/index.html +161 -0
  82. package/coverage/utils/index.ts.html +118 -0
  83. package/coverage/utils/stdout-printer.ts.html +523 -0
  84. package/dist/src/components/file/file_log.d.ts +35 -0
  85. package/dist/src/components/file/file_log.d.ts.map +1 -0
  86. package/dist/src/components/file/index.d.ts +2 -0
  87. package/dist/src/components/file/index.d.ts.map +1 -0
  88. package/dist/src/components/filter/filter_bar.d.ts +10 -0
  89. package/dist/src/components/filter/filter_bar.d.ts.map +1 -0
  90. package/dist/src/components/filter/index.d.ts +2 -0
  91. package/dist/src/components/filter/index.d.ts.map +1 -0
  92. package/dist/src/components/help/help_overlay.d.ts +10 -0
  93. package/dist/src/components/help/help_overlay.d.ts.map +1 -0
  94. package/dist/src/components/help/index.d.ts +2 -0
  95. package/dist/src/components/help/index.d.ts.map +1 -0
  96. package/dist/src/components/index.d.ts +27 -0
  97. package/dist/src/components/index.d.ts.map +1 -0
  98. package/dist/src/components/log/debug_log.d.ts +3 -0
  99. package/dist/src/components/log/debug_log.d.ts.map +1 -0
  100. package/dist/src/components/log/error_log.d.ts +3 -0
  101. package/dist/src/components/log/error_log.d.ts.map +1 -0
  102. package/dist/src/components/log/fatal_log.d.ts +3 -0
  103. package/dist/src/components/log/fatal_log.d.ts.map +1 -0
  104. package/dist/src/components/log/index.d.ts +9 -0
  105. package/dist/src/components/log/index.d.ts.map +1 -0
  106. package/dist/src/components/log/info_log.d.ts +3 -0
  107. package/dist/src/components/log/info_log.d.ts.map +1 -0
  108. package/dist/src/components/log/log_message.d.ts +33 -0
  109. package/dist/src/components/log/log_message.d.ts.map +1 -0
  110. package/dist/src/components/log/success_log.d.ts +3 -0
  111. package/dist/src/components/log/success_log.d.ts.map +1 -0
  112. package/dist/src/components/log/trace_log.d.ts +3 -0
  113. package/dist/src/components/log/trace_log.d.ts.map +1 -0
  114. package/dist/src/components/log/warning_log.d.ts +3 -0
  115. package/dist/src/components/log/warning_log.d.ts.map +1 -0
  116. package/dist/src/components/prompt/index.d.ts +3 -0
  117. package/dist/src/components/prompt/index.d.ts.map +1 -0
  118. package/dist/src/components/prompt/prompt_renderer.d.ts +6 -0
  119. package/dist/src/components/prompt/prompt_renderer.d.ts.map +1 -0
  120. package/dist/src/components/screen/group_renderer.d.ts +19 -0
  121. package/dist/src/components/screen/group_renderer.d.ts.map +1 -0
  122. package/dist/src/components/screen/index.d.ts +13 -0
  123. package/dist/src/components/screen/index.d.ts.map +1 -0
  124. package/dist/src/components/screen/loading_message.d.ts +6 -0
  125. package/dist/src/components/screen/loading_message.d.ts.map +1 -0
  126. package/dist/src/components/screen/message_renderer.d.ts +8 -0
  127. package/dist/src/components/screen/message_renderer.d.ts.map +1 -0
  128. package/dist/src/components/screen/progress_message.d.ts +8 -0
  129. package/dist/src/components/screen/progress_message.d.ts.map +1 -0
  130. package/dist/src/components/screen/screen_bridge.d.ts +20 -0
  131. package/dist/src/components/screen/screen_bridge.d.ts.map +1 -0
  132. package/dist/src/components/screen/table_message.d.ts +6 -0
  133. package/dist/src/components/screen/table_message.d.ts.map +1 -0
  134. package/dist/src/components/screen_manager_bridge.d.ts +11 -0
  135. package/dist/src/components/screen_manager_bridge.d.ts.map +1 -0
  136. package/dist/src/components/sidebar/index.d.ts +6 -0
  137. package/dist/src/components/sidebar/index.d.ts.map +1 -0
  138. package/dist/src/components/sidebar/sidebar.d.ts +18 -0
  139. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
  140. package/dist/src/components/sidebar/sidebar_item.d.ts +14 -0
  141. package/dist/src/components/sidebar/sidebar_item.d.ts.map +1 -0
  142. package/dist/src/components/sidebar/sidebar_separator.d.ts +2 -0
  143. package/dist/src/components/sidebar/sidebar_separator.d.ts.map +1 -0
  144. package/dist/src/context/logger_context.d.ts +60 -0
  145. package/dist/src/context/logger_context.d.ts.map +1 -0
  146. package/dist/src/filter/filter_engine.d.ts +20 -0
  147. package/dist/src/filter/filter_engine.d.ts.map +1 -0
  148. package/dist/src/filter/index.d.ts +4 -0
  149. package/dist/src/filter/index.d.ts.map +1 -0
  150. package/dist/src/hooks/index.d.ts +2 -0
  151. package/dist/src/hooks/index.d.ts.map +1 -0
  152. package/dist/src/hooks/use_theme.d.ts +7 -0
  153. package/dist/src/hooks/use_theme.d.ts.map +1 -0
  154. package/dist/src/index.d.ts +88 -0
  155. package/dist/src/index.d.ts.map +1 -0
  156. package/dist/src/keyboard/create_bindings.d.ts +31 -0
  157. package/dist/src/keyboard/create_bindings.d.ts.map +1 -0
  158. package/dist/src/keyboard/index.d.ts +12 -0
  159. package/dist/src/keyboard/index.d.ts.map +1 -0
  160. package/dist/src/keyboard/keyboard_manager.d.ts +69 -0
  161. package/dist/src/keyboard/keyboard_manager.d.ts.map +1 -0
  162. package/dist/src/services/index.d.ts +5 -0
  163. package/dist/src/services/index.d.ts.map +1 -0
  164. package/dist/src/services/logger.d.ts +61 -0
  165. package/dist/src/services/logger.d.ts.map +1 -0
  166. package/dist/src/services/prompt.d.ts +37 -0
  167. package/dist/src/services/prompt.d.ts.map +1 -0
  168. package/dist/src/services/screen.d.ts +165 -0
  169. package/dist/src/services/screen.d.ts.map +1 -0
  170. package/dist/src/services/screen_manager.d.ts +124 -0
  171. package/dist/src/services/screen_manager.d.ts.map +1 -0
  172. package/dist/src/themes/dark.d.ts +7 -0
  173. package/dist/src/themes/dark.d.ts.map +1 -0
  174. package/dist/src/themes/high-contrast.d.ts +7 -0
  175. package/dist/src/themes/high-contrast.d.ts.map +1 -0
  176. package/dist/src/themes/index.d.ts +18 -0
  177. package/dist/src/themes/index.d.ts.map +1 -0
  178. package/dist/src/themes/light.d.ts +6 -0
  179. package/dist/src/themes/light.d.ts.map +1 -0
  180. package/dist/src/themes/utils.d.ts +22 -0
  181. package/dist/src/themes/utils.d.ts.map +1 -0
  182. package/dist/src/types/file.types.d.ts +40 -0
  183. package/dist/src/types/file.types.d.ts.map +1 -0
  184. package/dist/src/types/filter.types.d.ts +31 -0
  185. package/dist/src/types/filter.types.d.ts.map +1 -0
  186. package/dist/src/types/index.d.ts +81 -0
  187. package/dist/src/types/index.d.ts.map +1 -0
  188. package/dist/src/types/keyboard.types.d.ts +83 -0
  189. package/dist/src/types/keyboard.types.d.ts.map +1 -0
  190. package/dist/src/types/log.types.d.ts +32 -0
  191. package/dist/src/types/log.types.d.ts.map +1 -0
  192. package/dist/src/types/message.types.d.ts +91 -0
  193. package/dist/src/types/message.types.d.ts.map +1 -0
  194. package/dist/src/types/prompt.types.d.ts +89 -0
  195. package/dist/src/types/prompt.types.d.ts.map +1 -0
  196. package/dist/src/types/screen.types.d.ts +85 -0
  197. package/dist/src/types/screen.types.d.ts.map +1 -0
  198. package/dist/src/types/theme.types.d.ts +216 -0
  199. package/dist/src/types/theme.types.d.ts.map +1 -0
  200. package/dist/src/utils/colors/file-colors.d.ts +10 -0
  201. package/dist/src/utils/colors/file-colors.d.ts.map +1 -0
  202. package/dist/src/utils/colors/helpers.d.ts +29 -0
  203. package/dist/src/utils/colors/helpers.d.ts.map +1 -0
  204. package/dist/src/utils/colors/index.d.ts +13 -0
  205. package/dist/src/utils/colors/index.d.ts.map +1 -0
  206. package/dist/src/utils/colors/log-colors.d.ts +15 -0
  207. package/dist/src/utils/colors/log-colors.d.ts.map +1 -0
  208. package/dist/src/utils/colors/progress-colors.d.ts +25 -0
  209. package/dist/src/utils/colors/progress-colors.d.ts.map +1 -0
  210. package/dist/src/utils/colors/prompt-colors.d.ts +22 -0
  211. package/dist/src/utils/colors/prompt-colors.d.ts.map +1 -0
  212. package/dist/src/utils/colors/sidebar-colors.d.ts +50 -0
  213. package/dist/src/utils/colors/sidebar-colors.d.ts.map +1 -0
  214. package/dist/src/utils/colors/table-colors.d.ts +12 -0
  215. package/dist/src/utils/colors/table-colors.d.ts.map +1 -0
  216. package/dist/src/utils/filetype.d.ts +19 -0
  217. package/dist/src/utils/filetype.d.ts.map +1 -0
  218. package/dist/src/utils/format.d.ts +9 -0
  219. package/dist/src/utils/format.d.ts.map +1 -0
  220. package/dist/src/utils/index.d.ts +20 -0
  221. package/dist/src/utils/index.d.ts.map +1 -0
  222. package/dist/src/utils/stdout-printer.d.ts +10 -0
  223. package/dist/src/utils/stdout-printer.d.ts.map +1 -0
  224. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  225. package/dist/tsconfig.tsbuildinfo +1 -0
  226. package/dist/tsdown.config.d.mts +5 -0
  227. package/dist/tsdown.config.d.mts.map +1 -0
  228. package/dist/vitest.config.d.mts +3 -0
  229. package/dist/vitest.config.d.mts.map +1 -0
  230. package/lib/index.cjs +6349 -0
  231. package/lib/index.cjs.map +1 -0
  232. package/lib/index.d.cts +1720 -0
  233. package/lib/index.d.cts.map +1 -0
  234. package/lib/index.d.mts +1720 -0
  235. package/lib/index.d.mts.map +1 -0
  236. package/lib/index.mjs +6264 -0
  237. package/lib/index.mjs.map +1 -0
  238. package/lib/screen_manager_bridge-BpDgVu3e.cjs +3357 -0
  239. package/lib/screen_manager_bridge-BpDgVu3e.cjs.map +1 -0
  240. package/lib/screen_manager_bridge-CkV7637i.cjs +3 -0
  241. package/lib/screen_manager_bridge-DN2J6_k1.mjs +3 -0
  242. package/lib/screen_manager_bridge-Dfg4QUrl.mjs +3034 -0
  243. package/lib/screen_manager_bridge-Dfg4QUrl.mjs.map +1 -0
  244. package/package.json +43 -0
  245. package/project.json +60 -0
  246. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +2245 -0
  247. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +1382 -0
  248. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +3169 -0
  249. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +1743 -0
  250. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +3135 -0
  251. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +2617 -0
  252. package/src/__tests__/components/filter_bar.spec.tsx +190 -0
  253. package/src/__tests__/components/loading_message.spec.tsx +110 -0
  254. package/src/__tests__/components/log_message.spec.tsx +166 -0
  255. package/src/__tests__/components/progress_message.spec.tsx +147 -0
  256. package/src/__tests__/components/prompt_renderer.spec.tsx +274 -0
  257. package/src/__tests__/components/sidebar.spec.tsx +305 -0
  258. package/src/__tests__/filter/filter_engine.spec.ts +325 -0
  259. package/src/__tests__/keyboard/keyboard_manager.spec.ts +557 -0
  260. package/src/__tests__/mocks/scm-mock.ts +5 -0
  261. package/src/__tests__/services/logger.spec.ts +630 -0
  262. package/src/__tests__/services/prompt.spec.ts +411 -0
  263. package/src/__tests__/services/screen.spec.ts +721 -0
  264. package/src/__tests__/setup.ts +43 -0
  265. package/src/__tests__/utils/factories.ts +354 -0
  266. package/src/__tests__/utils/filetype.spec.ts +195 -0
  267. package/src/__tests__/utils/format.spec.ts +178 -0
  268. package/src/__tests__/utils/render-utils.tsx +39 -0
  269. package/src/__tests__/utils/test-container.ts +48 -0
  270. package/src/components/file/file_log.tsx +241 -0
  271. package/src/components/file/index.ts +1 -0
  272. package/src/components/filter/filter_bar.tsx +79 -0
  273. package/src/components/filter/index.ts +1 -0
  274. package/src/components/help/help_overlay.tsx +100 -0
  275. package/src/components/help/index.ts +1 -0
  276. package/src/components/index.ts +15 -0
  277. package/src/components/log/index.ts +1 -0
  278. package/src/components/log/log_message.tsx +102 -0
  279. package/src/components/prompt/index.ts +2 -0
  280. package/src/components/prompt/prompt_renderer.tsx +346 -0
  281. package/src/components/screen/group_renderer.tsx +64 -0
  282. package/src/components/screen/index.ts +6 -0
  283. package/src/components/screen/loading_message.tsx +44 -0
  284. package/src/components/screen/message_renderer.tsx +108 -0
  285. package/src/components/screen/progress_message.tsx +60 -0
  286. package/src/components/screen/screen_bridge.tsx +149 -0
  287. package/src/components/screen/table_message.tsx +57 -0
  288. package/src/components/screen_manager_bridge.tsx +245 -0
  289. package/src/components/sidebar/index.ts +3 -0
  290. package/src/components/sidebar/sidebar.tsx +102 -0
  291. package/src/components/sidebar/sidebar_item.tsx +50 -0
  292. package/src/components/sidebar/sidebar_separator.tsx +13 -0
  293. package/src/context/index.ts +1 -0
  294. package/src/context/logger_context.tsx +109 -0
  295. package/src/factories/index.ts +1 -0
  296. package/src/factories/screen.factory.ts +22 -0
  297. package/src/filter/filter_engine.ts +113 -0
  298. package/src/filter/index.ts +1 -0
  299. package/src/hooks/index.ts +1 -0
  300. package/src/hooks/use_theme.ts +12 -0
  301. package/src/index.ts +64 -0
  302. package/src/keyboard/create_bindings.ts +457 -0
  303. package/src/keyboard/index.ts +2 -0
  304. package/src/keyboard/keyboard_manager.ts +233 -0
  305. package/src/overrides/console.logger.override.ts +61 -0
  306. package/src/overrides/index.ts +1 -0
  307. package/src/schemas/index.ts +3 -0
  308. package/src/schemas/logger-options.ts +13 -0
  309. package/src/schemas/prompt-options.ts +9 -0
  310. package/src/schemas/screen-options.ts +14 -0
  311. package/src/services/index.ts +4 -0
  312. package/src/services/logger.ts +369 -0
  313. package/src/services/prompt.ts +169 -0
  314. package/src/services/screen.ts +590 -0
  315. package/src/services/screen_manager.tsx +390 -0
  316. package/src/themes/dark.ts +173 -0
  317. package/src/themes/high-contrast.ts +178 -0
  318. package/src/themes/index.ts +4 -0
  319. package/src/themes/light.ts +172 -0
  320. package/src/themes/utils.ts +83 -0
  321. package/src/tokens/index.ts +3 -0
  322. package/src/tokens/logger.ts +10 -0
  323. package/src/tokens/prompt.ts +10 -0
  324. package/src/tokens/screen.ts +10 -0
  325. package/src/types/file.types.ts +60 -0
  326. package/src/types/filter.types.ts +51 -0
  327. package/src/types/index.ts +22 -0
  328. package/src/types/keyboard.types.ts +93 -0
  329. package/src/types/log.types.ts +61 -0
  330. package/src/types/message.types.ts +120 -0
  331. package/src/types/prompt.types.ts +106 -0
  332. package/src/types/screen.types.ts +124 -0
  333. package/src/types/theme.types.ts +252 -0
  334. package/src/utils/colors/file-colors.ts +9 -0
  335. package/src/utils/colors/helpers.ts +50 -0
  336. package/src/utils/colors/index.ts +20 -0
  337. package/src/utils/colors/log-colors.ts +56 -0
  338. package/src/utils/colors/progress-colors.ts +25 -0
  339. package/src/utils/colors/prompt-colors.ts +30 -0
  340. package/src/utils/colors/sidebar-colors.ts +52 -0
  341. package/src/utils/colors/table-colors.ts +11 -0
  342. package/src/utils/filetype.ts +64 -0
  343. package/src/utils/format.ts +52 -0
  344. package/src/utils/index.ts +11 -0
  345. package/src/utils/stdout-printer.ts +255 -0
  346. package/tsconfig.json +14 -0
  347. package/tsdown.config.mts +34 -0
  348. package/vitest.config.mts +10 -0
@@ -0,0 +1,93 @@
1
+ import type { FocusArea } from './screen.types.ts'
2
+
3
+ // ============================================
4
+ // Keyboard Event Types
5
+ // ============================================
6
+
7
+ /**
8
+ * Key event from the terminal.
9
+ */
10
+ export interface KeyEvent {
11
+ name: string
12
+ sequence?: string
13
+ ctrl?: boolean
14
+ meta?: boolean
15
+ shift?: boolean
16
+ }
17
+
18
+ /**
19
+ * Context available to keyboard handlers.
20
+ */
21
+ export interface KeyboardContext {
22
+ /** Has multiple screens (sidebar visible) */
23
+ hasSidebar: boolean
24
+ /** Currently focused area */
25
+ focusArea: FocusArea
26
+ /** Whether a prompt is active */
27
+ hasPrompt: boolean
28
+ /** Whether prompt is in text input mode */
29
+ inInputMode: boolean
30
+ /** Whether filter bar is visible */
31
+ isFilterActive: boolean
32
+ /** Whether help overlay is visible */
33
+ isHelpVisible: boolean
34
+ }
35
+
36
+ /**
37
+ * Handler function for a key binding.
38
+ * Return true to prevent further processing, false/void to continue.
39
+ */
40
+ export type KeyHandler = (key: KeyEvent, context: KeyboardContext) => boolean | void
41
+
42
+ /**
43
+ * Category for organizing bindings in help overlay.
44
+ */
45
+ export type KeyBindingCategory = 'general' | 'navigation' | 'screen' | 'prompt' | 'filter'
46
+
47
+ /**
48
+ * Condition for when a binding is active.
49
+ */
50
+ export interface KeyBindingCondition {
51
+ hasPrompt?: boolean
52
+ inInputMode?: boolean
53
+ focusArea?: FocusArea
54
+ isFilterActive?: boolean
55
+ isHelpVisible?: boolean
56
+ hasSidebar?: boolean
57
+ }
58
+
59
+ /**
60
+ * A single key binding definition.
61
+ */
62
+ export interface KeyBinding {
63
+ /** Key name(s) that trigger this binding */
64
+ key: string | string[]
65
+ /** Require Ctrl modifier */
66
+ ctrl?: boolean
67
+ /** Require Meta/Cmd modifier */
68
+ meta?: boolean
69
+ /** Require Shift modifier (for capital letters) */
70
+ shift?: boolean
71
+ /** Handler function */
72
+ handler: KeyHandler
73
+ /** Description for help overlay */
74
+ description: string
75
+ /** Category for grouping in help */
76
+ category: KeyBindingCategory
77
+ /** Condition when this binding is active */
78
+ when?: KeyBindingCondition
79
+ /** Priority (higher = checked first, default 0) */
80
+ priority?: number
81
+ }
82
+
83
+ /**
84
+ * Configuration for the keyboard manager.
85
+ */
86
+ export interface KeyBindingsConfig {
87
+ /** Custom bindings (added to defaults) */
88
+ bindings?: KeyBinding[]
89
+ /** Override specific default bindings by key */
90
+ overrides?: Record<string, Partial<KeyBinding>>
91
+ /** Disable specific keys */
92
+ disabled?: string[]
93
+ }
@@ -0,0 +1,61 @@
1
+ import type { LogLevel } from '@navios/core'
2
+ import type { RGBA } from '@opentui/core'
3
+ import type { ReactNode } from 'react'
4
+
5
+ import type { LogMessageVariant } from './message.types.ts'
6
+
7
+ // ============================================
8
+ // Log Level Types
9
+ // ============================================
10
+
11
+ export interface LogLevelColors {
12
+ border: string
13
+ background: string
14
+ text?: string
15
+ }
16
+
17
+ export type LogLevelColorMap = Record<LogLevel, LogLevelColors>
18
+
19
+ /**
20
+ * Color map for semantic variants (success, trace) that override level colors.
21
+ */
22
+ export type VariantColorMap = Record<LogMessageVariant, LogLevelColors>
23
+
24
+ // ============================================
25
+ // LogMessage Component Types
26
+ // ============================================
27
+
28
+ export interface LogMessageProps {
29
+ /** Log level determines the color scheme */
30
+ level: LogLevel
31
+
32
+ /** Optional semantic variant for styling (e.g., 'success' shows green even though level is 'log') */
33
+ variant?: LogMessageVariant
34
+
35
+ /** Message content - can be string or React nodes */
36
+ children: ReactNode
37
+
38
+ /** Optional timestamp to display */
39
+ timestamp?: Date | string
40
+
41
+ /** Optional label/prefix (e.g., "API", "Database") */
42
+ label?: string
43
+
44
+ /** Optional stack trace to display (for trace level) */
45
+ trace?: string
46
+
47
+ /** Optional custom border color (overrides level color) */
48
+ borderColor?: string | RGBA
49
+
50
+ /** Optional custom background color (overrides level color) */
51
+ backgroundColor?: string | RGBA
52
+
53
+ /** Border width style - 'thin' uses left border only, 'thick' uses left+top+bottom */
54
+ borderStyle?: 'thin' | 'thick'
55
+
56
+ /** Padding inside the message box */
57
+ padding?: number
58
+
59
+ /** Margin around the message */
60
+ margin?: number
61
+ }
@@ -0,0 +1,120 @@
1
+ import type { LogLevel } from '@navios/core'
2
+
3
+ // ============================================
4
+ // Internal Message Types
5
+ // ============================================
6
+
7
+ export type MessageType =
8
+ | 'log'
9
+ | 'file'
10
+ | 'diff'
11
+ | 'fileError'
12
+ | 'loading'
13
+ | 'progress'
14
+ | 'group'
15
+ | 'table'
16
+
17
+ export interface BaseMessage {
18
+ id: string
19
+ type: MessageType
20
+ timestamp: Date
21
+ }
22
+
23
+ /**
24
+ * Semantic variants for log messages that don't map directly to LogLevel.
25
+ * These affect styling but the underlying LogLevel is used for filtering.
26
+ */
27
+ export type LogMessageVariant = 'success' | 'trace'
28
+
29
+ export interface LogMessageData extends BaseMessage {
30
+ type: 'log'
31
+ level: LogLevel
32
+ /** Content is always a string - objects are formatted before storage */
33
+ content: string
34
+ label?: string
35
+ trace?: string
36
+ /** Optional semantic variant for styling (e.g., 'success' shows green even though level is 'log') */
37
+ variant?: LogMessageVariant
38
+ }
39
+
40
+ export interface FileMessageData extends BaseMessage {
41
+ type: 'file'
42
+ filePath: string
43
+ content: string
44
+ }
45
+
46
+ export interface DiffMessageData extends BaseMessage {
47
+ type: 'diff'
48
+ filePath: string
49
+ diff: string
50
+ view?: 'unified' | 'split'
51
+ }
52
+
53
+ export interface FileErrorMessageData extends BaseMessage {
54
+ type: 'fileError'
55
+ filePath: string
56
+ content: string
57
+ errorLines: number[]
58
+ startLine: number
59
+ }
60
+
61
+ export interface LoadingMessageData extends BaseMessage {
62
+ type: 'loading'
63
+ content: string
64
+ status: 'loading' | 'success' | 'fail'
65
+ resolvedContent?: string
66
+ }
67
+
68
+ export interface ProgressMessageData extends BaseMessage {
69
+ type: 'progress'
70
+ label: string
71
+ current: number
72
+ total: number
73
+ status: 'active' | 'complete' | 'failed'
74
+ resolvedContent?: string
75
+ }
76
+
77
+ export interface GroupMessageData extends BaseMessage {
78
+ type: 'group'
79
+ label: string
80
+ collapsed: boolean
81
+ isEnd: boolean
82
+ }
83
+
84
+ export interface TableMessageData extends BaseMessage {
85
+ type: 'table'
86
+ headers: string[]
87
+ rows: string[][]
88
+ title?: string
89
+ }
90
+
91
+ export type MessageData =
92
+ | LogMessageData
93
+ | FileMessageData
94
+ | DiffMessageData
95
+ | FileErrorMessageData
96
+ | LoadingMessageData
97
+ | ProgressMessageData
98
+ | GroupMessageData
99
+ | TableMessageData
100
+
101
+ // ============================================
102
+ // Logger Handle Types
103
+ // ============================================
104
+
105
+ export interface PromiseOptions<T> {
106
+ loading: string
107
+ success: string | ((data: T) => string)
108
+ error: string | ((error: Error) => string)
109
+ }
110
+
111
+ export interface LoadingHandle {
112
+ success: (message: string) => void
113
+ fail: (message: string) => void
114
+ }
115
+
116
+ export interface ProgressHandle {
117
+ update: (current: number, label?: string) => void
118
+ complete: (message?: string) => void
119
+ fail: (message?: string) => void
120
+ }
@@ -0,0 +1,106 @@
1
+ // ============================================
2
+ // Prompt Data Types
3
+ // ============================================
4
+
5
+ export interface ChoiceOption {
6
+ label: string
7
+ value: string
8
+ /** If true, this option allows text input */
9
+ input?: boolean
10
+ }
11
+
12
+ export interface BasePromptData {
13
+ id: string
14
+ timestamp: Date
15
+ resolved: boolean
16
+ /** Auto-resolve timeout in ms */
17
+ timeout?: number
18
+ /** Timestamp when timeout started */
19
+ timeoutStarted?: number
20
+ }
21
+
22
+ export interface ChoicePromptData extends BasePromptData {
23
+ type: 'choice'
24
+ question: string
25
+ choices: ChoiceOption[]
26
+ defaultChoice: string
27
+ selectedIndex: number
28
+ inputMode: boolean
29
+ inputValue: string
30
+ resolvedValue?: string
31
+ }
32
+
33
+ export interface ConfirmPromptData extends BasePromptData {
34
+ type: 'confirm'
35
+ question: string
36
+ confirmText: string
37
+ cancelText: string
38
+ defaultValue: boolean
39
+ selectedValue: boolean
40
+ resolvedValue?: boolean
41
+ }
42
+
43
+ export interface InputPromptData extends BasePromptData {
44
+ type: 'input'
45
+ question: string
46
+ placeholder: string
47
+ defaultValue: string
48
+ value: string
49
+ resolvedValue?: string
50
+ }
51
+
52
+ export interface MultiChoicePromptData extends BasePromptData {
53
+ type: 'multiChoice'
54
+ question: string
55
+ choices: ChoiceOption[]
56
+ selectedIndices: Set<number>
57
+ focusedIndex: number
58
+ minSelect: number
59
+ maxSelect: number
60
+ resolvedValues?: string[]
61
+ }
62
+
63
+ export type PromptData =
64
+ | ChoicePromptData
65
+ | ConfirmPromptData
66
+ | InputPromptData
67
+ | MultiChoicePromptData
68
+
69
+ // ============================================
70
+ // Prompt Options Types
71
+ // ============================================
72
+
73
+ export interface ChoiceOptions {
74
+ question: string
75
+ choices: ChoiceOption[]
76
+ defaultChoice?: string
77
+ /** Auto-resolve with default after timeout (ms) */
78
+ timeout?: number
79
+ }
80
+
81
+ export interface ConfirmOptions {
82
+ question: string
83
+ confirmText?: string
84
+ cancelText?: string
85
+ defaultValue?: boolean
86
+ /** Auto-resolve with default after timeout (ms) */
87
+ timeout?: number
88
+ }
89
+
90
+ export interface InputOptions {
91
+ question: string
92
+ placeholder?: string
93
+ defaultValue?: string
94
+ /** Auto-resolve with default after timeout (ms) */
95
+ timeout?: number
96
+ }
97
+
98
+ export interface MultiChoiceOptions {
99
+ question: string
100
+ choices: ChoiceOption[]
101
+ defaultChoices?: string[]
102
+ minSelect?: number
103
+ maxSelect?: number
104
+ /** Auto-resolve with default after timeout (ms) */
105
+ timeout?: number
106
+ }
@@ -0,0 +1,124 @@
1
+ import type { RGBA, SyntaxStyle, TreeSitterClient } from '@opentui/core'
2
+ import type { ReactNode } from 'react'
3
+
4
+ import type { LogLevelColorMap } from './log.types.ts'
5
+ import type { Theme, ThemePreset } from './theme.types.ts'
6
+
7
+ // ============================================
8
+ // Screen Component Types
9
+ // ============================================
10
+
11
+ export interface ScreenProps {
12
+ /** Screen title/name displayed in header */
13
+ name: string
14
+
15
+ /** Child log messages/file logs */
16
+ children: ReactNode
17
+
18
+ /** Enable auto-scroll to bottom on new content */
19
+ stickyScroll?: boolean
20
+
21
+ /** Show scroll position indicator */
22
+ showScrollIndicator?: boolean
23
+
24
+ /** Screen header background color */
25
+ headerBackgroundColor?: string | RGBA
26
+
27
+ /** Screen header text color */
28
+ headerTextColor?: string | RGBA
29
+
30
+ /** Whether this screen is currently focused */
31
+ focused?: boolean
32
+
33
+ /** Callback when screen is scrolled */
34
+ onScroll?: (scrollTop: number, scrollHeight: number) => void
35
+ }
36
+
37
+ // ============================================
38
+ // ScreenManager Component Types
39
+ // ============================================
40
+
41
+ export interface ScreenDefinition {
42
+ /** Unique screen identifier */
43
+ id: string
44
+
45
+ /** Display name for sidebar */
46
+ name: string
47
+
48
+ /** Optional icon/badge character */
49
+ icon?: string
50
+
51
+ /** Unread/notification count */
52
+ badgeCount?: number
53
+ }
54
+
55
+ export interface ScreenManagerProps {
56
+ /** Screen definitions for the sidebar */
57
+ screens: ScreenDefinition[]
58
+
59
+ /** Currently active screen ID */
60
+ activeScreenId: string
61
+
62
+ /** Callback when screen selection changes */
63
+ onScreenChange?: (screenId: string) => void
64
+
65
+ /** Screen content - should be conditionally rendered based on activeScreenId */
66
+ children: ReactNode
67
+
68
+ /** Force show/hide sidebar (overrides auto behavior) */
69
+ sidebarVisible?: boolean
70
+
71
+ /** Callback when sidebar visibility changes */
72
+ onSidebarVisibilityChange?: (visible: boolean) => void
73
+
74
+ /** Sidebar width (columns) */
75
+ sidebarWidth?: number
76
+
77
+ /** Sidebar position */
78
+ sidebarPosition?: 'left' | 'right'
79
+
80
+ /** Key to toggle sidebar visibility */
81
+ toggleSidebarKey?: string
82
+
83
+ /** Sidebar header title */
84
+ sidebarTitle?: string
85
+ }
86
+
87
+ export type FocusArea = 'sidebar' | 'content'
88
+
89
+ // ============================================
90
+ // Context Types
91
+ // ============================================
92
+
93
+ export interface LoggerContextValue {
94
+ /** Shared SyntaxStyle instance for code highlighting */
95
+ syntaxStyle?: SyntaxStyle
96
+
97
+ /** Shared TreeSitterClient for parsing */
98
+ treeSitterClient?: TreeSitterClient
99
+
100
+ /** Default colors for log levels (derived from theme for backwards compatibility) */
101
+ levelColors: LogLevelColorMap
102
+
103
+ /** Current theme */
104
+ theme: Theme
105
+ }
106
+
107
+ // ============================================
108
+ // Screen Service Types
109
+ // ============================================
110
+
111
+ export type ScreenStatus = 'waiting' | 'pending' | 'success' | 'fail'
112
+
113
+ export interface BindOptions {
114
+ exitOnCtrlC?: boolean
115
+ sidebarWidth?: number
116
+ sidebarPosition?: 'left' | 'right'
117
+ sidebarTitle?: string
118
+ /** Auto close after all screens complete successfully (delay in ms, default 5000) */
119
+ autoClose?: boolean | number
120
+ /** Theme to use for the TUI (theme object or preset name) */
121
+ theme?: Theme | ThemePreset
122
+ /** Enable mouse support (default: false) */
123
+ useMouse?: boolean
124
+ }