@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,178 @@
1
+ import type { Theme } from '../types/index.ts'
2
+
3
+ /**
4
+ * High contrast theme for accessibility.
5
+ * Uses pure black/white with saturated colors for maximum visibility.
6
+ */
7
+ export const highContrastTheme: Theme = {
8
+ name: 'high-contrast',
9
+
10
+ logLevels: {
11
+ verbose: {
12
+ border: '#FFFFFF',
13
+ background: '#1A1A1A',
14
+ text: '#FFFFFF',
15
+ },
16
+ debug: {
17
+ border: '#A855F7', // Purple-500
18
+ background: '#1A1A1A',
19
+ text: '#E9D5FF', // Purple-200
20
+ },
21
+ log: {
22
+ border: '#3B82F6', // Blue-500
23
+ background: '#1A1A1A',
24
+ text: '#BFDBFE', // Blue-200
25
+ },
26
+ warn: {
27
+ border: '#FBBF24', // Amber-400
28
+ background: '#1A1A1A',
29
+ text: '#FEF08A', // Yellow-200
30
+ },
31
+ error: {
32
+ border: '#EF4444', // Red-500
33
+ background: '#1A1A1A',
34
+ text: '#FECACA', // Red-200
35
+ },
36
+ fatal: {
37
+ border: '#FF0000', // Pure red
38
+ background: '#330000',
39
+ text: '#FFFFFF',
40
+ },
41
+ },
42
+
43
+ sidebar: {
44
+ background: '#000000',
45
+ selectedBackground: '#333333',
46
+ hoverBackground: '#1A1A1A',
47
+ text: '#FFFFFF',
48
+ textDim: '#AAAAAA',
49
+ border: '#FFFFFF',
50
+ badge: '#FFFF00', // Yellow for high visibility
51
+ focusBorder: '#FFFF00',
52
+ },
53
+
54
+ header: {
55
+ background: '#000000',
56
+ text: '#FFFFFF',
57
+ border: '#FFFFFF',
58
+ },
59
+
60
+ statusIndicators: {
61
+ waiting: {
62
+ icon: '○',
63
+ color: '#AAAAAA',
64
+ },
65
+ pending: {
66
+ icon: '◐',
67
+ color: '#FBBF24', // Amber-400
68
+ },
69
+ success: {
70
+ icon: '✓',
71
+ color: '#22C55E', // Green-500
72
+ },
73
+ fail: {
74
+ icon: '✗',
75
+ color: '#EF4444', // Red-500
76
+ },
77
+ },
78
+
79
+ separator: {
80
+ line: '#FFFFFF',
81
+ text: '#AAAAAA',
82
+ },
83
+
84
+ progress: {
85
+ border: '#3B82F6',
86
+ background: '#1A1A1A',
87
+ barFilled: '#3B82F6',
88
+ barEmpty: '#333333',
89
+ text: '#FFFFFF',
90
+ textDim: '#AAAAAA',
91
+ complete: '#22C55E',
92
+ completeBackground: '#1A1A1A',
93
+ failed: '#EF4444',
94
+ failedBackground: '#1A1A1A',
95
+ },
96
+
97
+ group: {
98
+ border: '#FFFFFF',
99
+ background: '#1A1A1A',
100
+ headerText: '#FFFFFF',
101
+ icon: '#AAAAAA',
102
+ },
103
+
104
+ table: {
105
+ border: '#FFFFFF',
106
+ background: '#1A1A1A',
107
+ headerText: '#FFFFFF',
108
+ cellText: '#FFFFFF',
109
+ title: '#FFFFFF',
110
+ separator: '#666666',
111
+ },
112
+
113
+ file: {
114
+ border: '#FFFFFF',
115
+ background: '#1A1A1A',
116
+ headerText: '#FFFFFF',
117
+ headerBackground: '#333333',
118
+ },
119
+
120
+ prompt: {
121
+ question: '#FFFFFF',
122
+ optionText: '#FFFFFF',
123
+ optionTextDim: '#AAAAAA',
124
+ optionSelected: '#FFFF00', // Yellow for high visibility
125
+ optionSelectedBackground: '#333333',
126
+ confirmButton: '#22C55E',
127
+ cancelButton: '#EF4444',
128
+ buttonBackground: '#333333',
129
+ buttonSelectedBackground: '#1A1A1A',
130
+ inputBorder: '#FFFF00',
131
+ inputBackground: '#1A1A1A',
132
+ inputText: '#FFFFFF',
133
+ inputPlaceholder: '#666666',
134
+ inputCursor: '#FFFF00',
135
+ border: '#FFFFFF',
136
+ focusBorder: '#FFFF00',
137
+ },
138
+
139
+ errorHighlight: {
140
+ background: '#330000',
141
+ border: '#FF0000',
142
+ gutterBackground: '#660000',
143
+ },
144
+
145
+ filter: {
146
+ background: '#1A1A1A',
147
+ border: '#FFFF00',
148
+ text: '#FFFFFF',
149
+ textDim: '#AAAAAA',
150
+ inputBackground: '#000000',
151
+ inputText: '#FFFFFF',
152
+ inputPlaceholder: '#666666',
153
+ cursor: '#FFFF00',
154
+ activeLevel: '#FFFF00',
155
+ inactiveLevel: '#666666',
156
+ },
157
+
158
+ help: {
159
+ background: '#000000',
160
+ border: '#FFFFFF',
161
+ title: '#FFFFFF',
162
+ category: '#FFFF00',
163
+ key: '#00FFFF', // Cyan for contrast
164
+ description: '#FFFFFF',
165
+ hint: '#AAAAAA',
166
+ },
167
+
168
+ colors: {
169
+ primary: '#3B82F6',
170
+ secondary: '#A855F7',
171
+ success: '#22C55E',
172
+ warning: '#FBBF24',
173
+ error: '#EF4444',
174
+ muted: '#AAAAAA',
175
+ background: '#000000',
176
+ foreground: '#FFFFFF',
177
+ },
178
+ }
@@ -0,0 +1,4 @@
1
+ export * from './dark.ts'
2
+ export * from './light.ts'
3
+ export * from './high-contrast.ts'
4
+ export * from './utils.ts'
@@ -0,0 +1,172 @@
1
+ import type { Theme } from '../types/index.ts'
2
+
3
+ /**
4
+ * Light theme for terminals with light backgrounds.
5
+ */
6
+ export const lightTheme: Theme = {
7
+ name: 'light',
8
+
9
+ logLevels: {
10
+ verbose: {
11
+ border: '#9CA3AF', // Gray-400
12
+ background: '#F3F4F6', // Gray-100
13
+ },
14
+ debug: {
15
+ border: '#7C3AED', // Violet-600
16
+ background: '#EDE9FE', // Violet-100
17
+ },
18
+ log: {
19
+ border: '#2563EB', // Blue-600
20
+ background: '#DBEAFE', // Blue-100
21
+ },
22
+ warn: {
23
+ border: '#D97706', // Amber-600
24
+ background: '#FEF3C7', // Amber-100
25
+ },
26
+ error: {
27
+ border: '#DC2626', // Red-600
28
+ background: '#FEE2E2', // Red-100
29
+ },
30
+ fatal: {
31
+ border: '#991B1B', // Red-800
32
+ background: '#FECACA', // Red-200
33
+ text: '#7F1D1D', // Red-900
34
+ },
35
+ },
36
+
37
+ sidebar: {
38
+ background: '#F9FAFB', // Gray-50
39
+ selectedBackground: '#E5E7EB', // Gray-200
40
+ hoverBackground: '#F3F4F6', // Gray-100
41
+ text: '#1F2937', // Gray-800
42
+ textDim: '#6B7280', // Gray-500
43
+ border: '#D1D5DB', // Gray-300
44
+ badge: '#2563EB', // Blue-600
45
+ focusBorder: '#2563EB', // Blue-600
46
+ },
47
+
48
+ header: {
49
+ background: '#F9FAFB', // Gray-50
50
+ text: '#111827', // Gray-900
51
+ border: '#D1D5DB', // Gray-300
52
+ },
53
+
54
+ statusIndicators: {
55
+ waiting: {
56
+ icon: '○',
57
+ color: '#9CA3AF', // Gray-400
58
+ },
59
+ pending: {
60
+ icon: '◐',
61
+ color: '#D97706', // Amber-600
62
+ },
63
+ success: {
64
+ icon: '✓',
65
+ color: '#16A34A', // Green-600
66
+ },
67
+ fail: {
68
+ icon: '✗',
69
+ color: '#DC2626', // Red-600
70
+ },
71
+ },
72
+
73
+ separator: {
74
+ line: '#D1D5DB', // Gray-300
75
+ text: '#6B7280', // Gray-500
76
+ },
77
+
78
+ progress: {
79
+ border: '#2563EB', // Blue-600
80
+ background: '#DBEAFE', // Blue-100
81
+ barFilled: '#2563EB', // Blue-600
82
+ barEmpty: '#E5E7EB', // Gray-200
83
+ text: '#1F2937', // Gray-800
84
+ textDim: '#6B7280', // Gray-500
85
+ complete: '#16A34A', // Green-600
86
+ completeBackground: '#DCFCE7', // Green-100
87
+ failed: '#DC2626', // Red-600
88
+ failedBackground: '#FEE2E2', // Red-100
89
+ },
90
+
91
+ group: {
92
+ border: '#9CA3AF', // Gray-400
93
+ background: '#F3F4F6', // Gray-100
94
+ headerText: '#1F2937', // Gray-800
95
+ icon: '#6B7280', // Gray-500
96
+ },
97
+
98
+ table: {
99
+ border: '#2563EB', // Blue-600
100
+ background: '#DBEAFE', // Blue-100
101
+ headerText: '#111827', // Gray-900
102
+ cellText: '#1F2937', // Gray-800
103
+ title: '#111827', // Gray-900
104
+ separator: '#93C5FD', // Blue-300
105
+ },
106
+
107
+ file: {
108
+ border: '#2563EB', // Blue-600
109
+ background: '#DBEAFE', // Blue-100
110
+ headerText: '#111827', // Gray-900
111
+ headerBackground: '#BFDBFE', // Blue-200
112
+ },
113
+
114
+ prompt: {
115
+ question: '#111827', // Gray-900
116
+ optionText: '#1F2937', // Gray-800
117
+ optionTextDim: '#6B7280', // Gray-500
118
+ optionSelected: '#2563EB', // Blue-600
119
+ optionSelectedBackground: '#DBEAFE', // Blue-100
120
+ confirmButton: '#16A34A', // Green-600
121
+ cancelButton: '#DC2626', // Red-600
122
+ buttonBackground: '#E5E7EB', // Gray-200
123
+ buttonSelectedBackground: '#D1D5DB', // Gray-300
124
+ inputBorder: '#2563EB', // Blue-600
125
+ inputBackground: '#FFFFFF', // White
126
+ inputText: '#111827', // Gray-900
127
+ inputPlaceholder: '#9CA3AF', // Gray-400
128
+ inputCursor: '#2563EB', // Blue-600
129
+ border: '#D1D5DB', // Gray-300
130
+ focusBorder: '#2563EB', // Blue-600
131
+ },
132
+
133
+ errorHighlight: {
134
+ background: '#FEE2E2', // Red-100
135
+ border: '#DC2626', // Red-600
136
+ gutterBackground: '#FECACA', // Red-200
137
+ },
138
+
139
+ filter: {
140
+ background: '#F3F4F6', // Gray-100
141
+ border: '#2563EB', // Blue-600
142
+ text: '#1F2937', // Gray-800
143
+ textDim: '#6B7280', // Gray-500
144
+ inputBackground: '#FFFFFF', // White
145
+ inputText: '#111827', // Gray-900
146
+ inputPlaceholder: '#9CA3AF', // Gray-400
147
+ cursor: '#2563EB', // Blue-600
148
+ activeLevel: '#2563EB', // Blue-600
149
+ inactiveLevel: '#D1D5DB', // Gray-300
150
+ },
151
+
152
+ help: {
153
+ background: '#FFFFFF', // White
154
+ border: '#2563EB', // Blue-600
155
+ title: '#111827', // Gray-900
156
+ category: '#2563EB', // Blue-600
157
+ key: '#D97706', // Amber-600
158
+ description: '#1F2937', // Gray-800
159
+ hint: '#6B7280', // Gray-500
160
+ },
161
+
162
+ colors: {
163
+ primary: '#2563EB', // Blue-600
164
+ secondary: '#7C3AED', // Violet-600
165
+ success: '#16A34A', // Green-600
166
+ warning: '#D97706', // Amber-600
167
+ error: '#DC2626', // Red-600
168
+ muted: '#6B7280', // Gray-500
169
+ background: '#FFFFFF', // White
170
+ foreground: '#111827', // Gray-900
171
+ },
172
+ }
@@ -0,0 +1,83 @@
1
+ import type { PartialTheme, Theme, ThemePreset } from '../types/index.ts'
2
+
3
+ import { darkTheme } from './dark.ts'
4
+ import { highContrastTheme } from './high-contrast.ts'
5
+ import { lightTheme } from './light.ts'
6
+
7
+ /**
8
+ * Deep merge two objects, with source taking precedence.
9
+ */
10
+ function deepMerge<T extends object>(target: T, source: Partial<T>): T {
11
+ const result = { ...target }
12
+
13
+ for (const key in source) {
14
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
15
+ const sourceValue = source[key]
16
+ const targetValue = target[key]
17
+
18
+ if (
19
+ sourceValue !== undefined &&
20
+ typeof sourceValue === 'object' &&
21
+ sourceValue !== null &&
22
+ !Array.isArray(sourceValue) &&
23
+ typeof targetValue === 'object' &&
24
+ targetValue !== null &&
25
+ !Array.isArray(targetValue)
26
+ ) {
27
+ ;(result as Record<string, unknown>)[key] = deepMerge(
28
+ targetValue as object,
29
+ sourceValue as object,
30
+ )
31
+ } else if (sourceValue !== undefined) {
32
+ ;(result as Record<string, unknown>)[key] = sourceValue
33
+ }
34
+ }
35
+ }
36
+
37
+ return result
38
+ }
39
+
40
+ /**
41
+ * Get a theme by preset name.
42
+ */
43
+ export function getThemePreset(preset: ThemePreset): Theme {
44
+ switch (preset) {
45
+ case 'dark':
46
+ return darkTheme
47
+ case 'light':
48
+ return lightTheme
49
+ case 'high-contrast':
50
+ return highContrastTheme
51
+ default:
52
+ return darkTheme
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Merge a base theme with partial overrides.
58
+ */
59
+ export function mergeThemes(base: Theme, overrides: PartialTheme): Theme {
60
+ return deepMerge(base, overrides as Partial<Theme>)
61
+ }
62
+
63
+ /**
64
+ * Create a custom theme by extending the dark theme with overrides.
65
+ */
66
+ export function createTheme(overrides: PartialTheme): Theme {
67
+ return mergeThemes(darkTheme, overrides)
68
+ }
69
+
70
+ /**
71
+ * Create a custom theme by extending a specific base theme.
72
+ */
73
+ export function createThemeFrom(base: Theme | ThemePreset, overrides: PartialTheme): Theme {
74
+ const baseTheme = typeof base === 'string' ? getThemePreset(base) : base
75
+ return mergeThemes(baseTheme, overrides)
76
+ }
77
+
78
+ /**
79
+ * Resolve a theme value which can be a Theme object or a preset name.
80
+ */
81
+ export function resolveTheme(theme: Theme | ThemePreset): Theme {
82
+ return typeof theme === 'string' ? getThemePreset(theme) : theme
83
+ }
@@ -0,0 +1,3 @@
1
+ export * from './screen.ts'
2
+ export * from './logger.ts'
3
+ export * from './prompt.ts'
@@ -0,0 +1,10 @@
1
+ import { InjectionToken } from '@navios/core'
2
+
3
+ import { LoggerOptionsSchema } from '../schemas/index.ts'
4
+
5
+ import type { ScreenLoggerInstance } from '../services/index.ts'
6
+
7
+ export const ScreenLogger = InjectionToken.create<ScreenLoggerInstance, typeof LoggerOptionsSchema>(
8
+ 'ScreenLoggerInstance',
9
+ LoggerOptionsSchema,
10
+ )
@@ -0,0 +1,10 @@
1
+ import { InjectionToken } from '@navios/core'
2
+
3
+ import { PromptOptionsSchema } from '../schemas/index.ts'
4
+
5
+ import type { PromptInstance } from '../services/index.ts'
6
+
7
+ export const Prompt = InjectionToken.create<PromptInstance, typeof PromptOptionsSchema>(
8
+ 'Prompt',
9
+ PromptOptionsSchema,
10
+ )
@@ -0,0 +1,10 @@
1
+ import { InjectionToken } from '@navios/core'
2
+
3
+ import { ScreenOptionsSchema } from '../schemas/index.ts'
4
+
5
+ import type { ScreenInstance } from '../services/index.ts'
6
+
7
+ export const Screen = InjectionToken.create<ScreenInstance, typeof ScreenOptionsSchema>(
8
+ 'ScreenOptions',
9
+ ScreenOptionsSchema,
10
+ )
@@ -0,0 +1,60 @@
1
+ import type { RGBA } from '@opentui/core'
2
+
3
+ // ============================================
4
+ // FileLog Component Types
5
+ // ============================================
6
+
7
+ export type FileLogMode = 'full' | 'diff' | 'partial'
8
+
9
+ export interface FileLogBaseProps {
10
+ /** File path or name to display in header */
11
+ filePath: string
12
+
13
+ /** Override auto-detected filetype for syntax highlighting */
14
+ filetype?: string
15
+
16
+ /** Show line numbers */
17
+ showLineNumbers?: boolean
18
+
19
+ /** Show header with file path */
20
+ showHeader?: boolean
21
+
22
+ /** Custom header background color */
23
+ headerBackgroundColor?: string | RGBA
24
+ }
25
+
26
+ export interface FileLogFullProps extends FileLogBaseProps {
27
+ mode: 'full'
28
+
29
+ /** The complete file content */
30
+ content: string
31
+ }
32
+
33
+ export interface FileLogDiffProps extends FileLogBaseProps {
34
+ mode: 'diff'
35
+
36
+ /** Unified diff string */
37
+ diff: string
38
+
39
+ /** Diff view mode */
40
+ view?: 'unified' | 'split'
41
+ }
42
+
43
+ export interface FileLogPartialProps extends FileLogBaseProps {
44
+ mode: 'partial'
45
+
46
+ /** File content (full or partial) */
47
+ content: string
48
+
49
+ /** Starting line number of the content (1-indexed) */
50
+ startLine: number
51
+
52
+ /** Lines to highlight as errors */
53
+ errorLines?: number[]
54
+
55
+ /** Error highlighting colors */
56
+ errorLineBackground?: string | RGBA
57
+ errorLineBorderColor?: string | RGBA
58
+ }
59
+
60
+ export type FileLogProps = FileLogFullProps | FileLogDiffProps | FileLogPartialProps
@@ -0,0 +1,51 @@
1
+ // ============================================
2
+ // Filter Types
3
+ // ============================================
4
+
5
+ import type { LogLevel } from '@navios/core'
6
+
7
+ /**
8
+ * Filter state for log filtering.
9
+ */
10
+ export interface FilterState {
11
+ /** Which log levels are enabled (shown) */
12
+ enabledLevels: Set<LogLevel>
13
+
14
+ /** Text search query */
15
+ searchQuery: string
16
+
17
+ /** Whether the filter bar is visible */
18
+ isVisible: boolean
19
+
20
+ /** Which filter field is focused */
21
+ focusedField: 'search' | 'levels'
22
+ }
23
+
24
+ /**
25
+ * All log levels in order.
26
+ */
27
+ export const ALL_LOG_LEVELS: LogLevel[] = ['verbose', 'debug', 'log', 'warn', 'error', 'fatal']
28
+
29
+ /**
30
+ * Create a default filter state.
31
+ */
32
+ export function createDefaultFilterState(): FilterState {
33
+ return {
34
+ enabledLevels: new Set(ALL_LOG_LEVELS),
35
+ searchQuery: '',
36
+ isVisible: false,
37
+ focusedField: 'search',
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Check if any filtering is active.
43
+ */
44
+ export function hasActiveFilter(filter: FilterState): boolean {
45
+ return filter.searchQuery !== '' || filter.enabledLevels.size < ALL_LOG_LEVELS.length
46
+ }
47
+
48
+ /**
49
+ * Level counts for display.
50
+ */
51
+ export type LevelCounts = Record<LogLevel, number>
@@ -0,0 +1,22 @@
1
+ export * from './log.types.ts'
2
+
3
+ // File types
4
+ export * from './file.types.ts'
5
+
6
+ // Screen types
7
+ export * from './screen.types.ts'
8
+
9
+ // Message types
10
+ export * from './message.types.ts'
11
+
12
+ // Prompt types
13
+ export * from './prompt.types.ts'
14
+
15
+ // Theme types
16
+ export * from './theme.types.ts'
17
+
18
+ // Keyboard types
19
+ export * from './keyboard.types.ts'
20
+
21
+ // Filter types
22
+ export * from './filter.types.ts'