@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,252 @@
1
+ import type { LogLevel } from '@navios/core'
2
+
3
+ // ============================================
4
+ // Theme Type Definitions
5
+ // ============================================
6
+
7
+ /**
8
+ * Color scheme for a single log level.
9
+ */
10
+ export interface LogLevelTheme {
11
+ border: string
12
+ background: string
13
+ text?: string
14
+ }
15
+
16
+ /**
17
+ * Sidebar color scheme.
18
+ */
19
+ export interface SidebarTheme {
20
+ background?: string
21
+ selectedBackground: string
22
+ hoverBackground: string
23
+ text: string
24
+ textDim: string
25
+ border: string
26
+ badge: string
27
+ focusBorder: string
28
+ }
29
+
30
+ /**
31
+ * Screen header color scheme.
32
+ */
33
+ export interface HeaderTheme {
34
+ background?: string
35
+ text: string
36
+ border: string
37
+ }
38
+
39
+ /**
40
+ * Status indicator with icon and color.
41
+ */
42
+ export interface StatusIndicator {
43
+ icon: string
44
+ color: string
45
+ }
46
+
47
+ /**
48
+ * Status indicators for all screen states.
49
+ */
50
+ export interface StatusIndicatorsTheme {
51
+ waiting: StatusIndicator
52
+ pending: StatusIndicator
53
+ success: StatusIndicator
54
+ fail: StatusIndicator
55
+ }
56
+
57
+ /**
58
+ * Separator colors for sidebar sections.
59
+ */
60
+ export interface SeparatorTheme {
61
+ line: string
62
+ text: string
63
+ }
64
+
65
+ /**
66
+ * Progress bar and loading indicator colors.
67
+ */
68
+ export interface ProgressTheme {
69
+ border: string
70
+ background: string
71
+ barFilled: string
72
+ barEmpty: string
73
+ text: string
74
+ textDim: string
75
+ complete: string
76
+ completeBackground: string
77
+ failed: string
78
+ failedBackground: string
79
+ }
80
+
81
+ /**
82
+ * Collapsible group colors.
83
+ */
84
+ export interface GroupTheme {
85
+ border: string
86
+ background: string
87
+ headerText: string
88
+ icon: string
89
+ }
90
+
91
+ /**
92
+ * Table display colors.
93
+ */
94
+ export interface TableTheme {
95
+ border: string
96
+ background: string
97
+ headerText: string
98
+ cellText: string
99
+ title: string
100
+ separator: string
101
+ }
102
+
103
+ /**
104
+ * File display colors.
105
+ */
106
+ export interface FileTheme {
107
+ border: string
108
+ background: string
109
+ headerText: string
110
+ headerBackground: string
111
+ }
112
+
113
+ /**
114
+ * Interactive prompt colors.
115
+ */
116
+ export interface PromptTheme {
117
+ question: string
118
+ optionText: string
119
+ optionTextDim: string
120
+ optionSelected: string
121
+ optionSelectedBackground: string
122
+ confirmButton: string
123
+ cancelButton: string
124
+ buttonBackground: string
125
+ buttonSelectedBackground: string
126
+ inputBorder: string
127
+ inputBackground: string
128
+ inputText: string
129
+ inputPlaceholder: string
130
+ inputCursor: string
131
+ border: string
132
+ focusBorder: string
133
+ }
134
+
135
+ /**
136
+ * Error highlighting colors for file displays.
137
+ */
138
+ export interface ErrorHighlightTheme {
139
+ background: string
140
+ border: string
141
+ gutterBackground: string
142
+ }
143
+
144
+ /**
145
+ * Filter bar colors.
146
+ */
147
+ export interface FilterTheme {
148
+ background: string
149
+ border: string
150
+ text: string
151
+ textDim: string
152
+ inputBackground: string
153
+ inputText: string
154
+ inputPlaceholder: string
155
+ cursor: string
156
+ activeLevel: string
157
+ inactiveLevel: string
158
+ }
159
+
160
+ /**
161
+ * Help overlay colors.
162
+ */
163
+ export interface HelpTheme {
164
+ background: string
165
+ border: string
166
+ title: string
167
+ category: string
168
+ key: string
169
+ description: string
170
+ hint: string
171
+ }
172
+
173
+ /**
174
+ * General semantic colors.
175
+ */
176
+ export interface SemanticColors {
177
+ primary: string
178
+ secondary: string
179
+ success: string
180
+ warning: string
181
+ error: string
182
+ muted: string
183
+ background?: string
184
+ foreground: string
185
+ }
186
+
187
+ /**
188
+ * Complete theme definition.
189
+ */
190
+ export interface Theme {
191
+ /** Theme identifier */
192
+ name: string
193
+
194
+ /** Log level color schemes */
195
+ logLevels: Record<LogLevel, LogLevelTheme>
196
+
197
+ /** Sidebar colors */
198
+ sidebar: SidebarTheme
199
+
200
+ /** Screen header colors */
201
+ header: HeaderTheme
202
+
203
+ /** Status indicator colors and icons */
204
+ statusIndicators: StatusIndicatorsTheme
205
+
206
+ /** Separator colors */
207
+ separator: SeparatorTheme
208
+
209
+ /** Progress bar colors */
210
+ progress: ProgressTheme
211
+
212
+ /** Collapsible group colors */
213
+ group: GroupTheme
214
+
215
+ /** Table display colors */
216
+ table: TableTheme
217
+
218
+ /** File display colors */
219
+ file: FileTheme
220
+
221
+ /** Prompt colors */
222
+ prompt: PromptTheme
223
+
224
+ /** Error highlighting colors */
225
+ errorHighlight: ErrorHighlightTheme
226
+
227
+ /** Filter bar colors */
228
+ filter: FilterTheme
229
+
230
+ /** Help overlay colors */
231
+ help: HelpTheme
232
+
233
+ /** General semantic colors */
234
+ colors: SemanticColors
235
+ }
236
+
237
+ /**
238
+ * Theme preset names.
239
+ */
240
+ export type ThemePreset = 'dark' | 'light' | 'high-contrast'
241
+
242
+ /**
243
+ * Deep partial type for theme overrides.
244
+ */
245
+ export type DeepPartial<T> = {
246
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]
247
+ }
248
+
249
+ /**
250
+ * Partial theme for creating custom themes.
251
+ */
252
+ export type PartialTheme = DeepPartial<Theme>
@@ -0,0 +1,9 @@
1
+ /**
2
+ * File display colors (uses info/blue scheme).
3
+ */
4
+ export const FILE_COLORS = {
5
+ border: '#3B82F6', // Blue-500 (same as info)
6
+ background: '#3B82F615', // Blue with 8% opacity
7
+ headerText: '#F9FAFB', // Gray-50
8
+ headerBackground: '#3B82F625', // Blue with 15% opacity
9
+ }
@@ -0,0 +1,50 @@
1
+ import { RGBA } from '@opentui/core'
2
+
3
+ import type { LogLevel } from '@navios/core'
4
+
5
+ import type { LogLevelColorMap, LogLevelColors } from '../../types/index.ts'
6
+
7
+ import { DEFAULT_LOG_LEVEL_COLORS } from './log-colors.ts'
8
+
9
+ /**
10
+ * Creates a tinted (subtle) version of a color by setting alpha.
11
+ *
12
+ * @param color - The base color (hex string or RGBA)
13
+ * @param alpha - Target alpha value (0-1), default 0.08 for subtle tinting
14
+ * @returns New RGBA with adjusted alpha
15
+ */
16
+ export function createTintedColor(color: string | RGBA, alpha: number = 0.08): RGBA {
17
+ const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color
18
+ return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)
19
+ }
20
+
21
+ /**
22
+ * Creates a more prominent version of a color for borders.
23
+ *
24
+ * @param color - The base color
25
+ * @param alpha - Target alpha, default 1.0 for solid borders
26
+ */
27
+ export function createBorderColor(color: string | RGBA, alpha: number = 1.0): RGBA {
28
+ const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color
29
+ return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)
30
+ }
31
+
32
+ /**
33
+ * Gets colors for a specific log level.
34
+ *
35
+ * @param level - The log level
36
+ * @param customColors - Optional custom color map
37
+ */
38
+ export function getLogLevelColors(
39
+ level: LogLevel,
40
+ customColors?: Partial<LogLevelColorMap>,
41
+ ): LogLevelColors {
42
+ const defaultColors = DEFAULT_LOG_LEVEL_COLORS[level]
43
+ const custom = customColors?.[level]
44
+
45
+ return {
46
+ border: custom?.border ?? defaultColors.border,
47
+ background: custom?.background ?? defaultColors.background,
48
+ text: custom?.text ?? defaultColors.text,
49
+ }
50
+ }
@@ -0,0 +1,20 @@
1
+ // Log level colors
2
+ export * from './log-colors.ts'
3
+
4
+ // Sidebar and header colors
5
+ export * from './sidebar-colors.ts'
6
+
7
+ // Progress and group colors
8
+ export * from './progress-colors.ts'
9
+
10
+ // Table colors
11
+ export * from './table-colors.ts'
12
+
13
+ // File colors
14
+ export * from './file-colors.ts'
15
+
16
+ // Prompt colors
17
+ export * from './prompt-colors.ts'
18
+
19
+ // Helper functions
20
+ export * from './helpers.ts'
@@ -0,0 +1,56 @@
1
+ import type { LogLevelColorMap, LogLevelColors, LogMessageVariant } from '../../types/index.ts'
2
+
3
+ /**
4
+ * Default color scheme for all log levels.
5
+ * Each level has a prominent border color and a subtle background tint.
6
+ */
7
+ export const DEFAULT_LOG_LEVEL_COLORS: LogLevelColorMap = {
8
+ verbose: {
9
+ border: '#6B7280', // Gray-500
10
+ background: '#6B728015', // Gray with 8% opacity
11
+ },
12
+ debug: {
13
+ border: '#8B5CF6', // Violet-500
14
+ background: '#8B5CF615', // Violet with 8% opacity
15
+ },
16
+ log: {
17
+ border: '#3B82F6', // Blue-500
18
+ background: '#3B82F615', // Blue with 8% opacity
19
+ },
20
+ warn: {
21
+ border: '#F59E0B', // Amber-500
22
+ background: '#F59E0B15', // Amber with 8% opacity
23
+ },
24
+ error: {
25
+ border: '#EF4444', // Red-500
26
+ background: '#EF444415', // Red with 8% opacity
27
+ },
28
+ fatal: {
29
+ border: '#DC2626', // Red-600
30
+ background: '#DC262625', // Red with 15% opacity (more prominent)
31
+ text: '#FCA5A5', // Light red text for contrast
32
+ },
33
+ }
34
+
35
+ /**
36
+ * Colors for semantic variants (override level colors when variant is set).
37
+ */
38
+ export const VARIANT_COLORS: Record<LogMessageVariant, LogLevelColors> = {
39
+ success: {
40
+ border: '#22C55E', // Green-500
41
+ background: '#22C55E15', // Green with 8% opacity
42
+ },
43
+ trace: {
44
+ border: '#6B7280', // Gray-500
45
+ background: '#6B728015', // Gray with 8% opacity
46
+ },
47
+ }
48
+
49
+ /**
50
+ * Error highlighting colors.
51
+ */
52
+ export const ERROR_HIGHLIGHT_COLORS = {
53
+ background: '#EF444425', // Red with 15% opacity
54
+ border: '#EF4444', // Red-500
55
+ gutterBackground: '#EF444440', // Red with 25% opacity for line number gutter
56
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Progress bar colors.
3
+ */
4
+ export const PROGRESS_COLORS = {
5
+ border: '#3B82F6', // Blue-500
6
+ background: '#3B82F615', // Blue with 8% opacity
7
+ barFilled: '#3B82F6', // Blue-500
8
+ barEmpty: '#374151', // Gray-700
9
+ text: '#E5E7EB', // Gray-200
10
+ textDim: '#9CA3AF', // Gray-400
11
+ complete: '#22C55E', // Green-500
12
+ completeBackground: '#22C55E15',
13
+ failed: '#EF4444', // Red-500
14
+ failedBackground: '#EF444415',
15
+ }
16
+
17
+ /**
18
+ * Group colors for collapsible log groups.
19
+ */
20
+ export const GROUP_COLORS = {
21
+ border: '#6B7280', // Gray-500
22
+ background: '#6B728010', // Gray with 6% opacity
23
+ headerText: '#E5E7EB', // Gray-200
24
+ icon: '#9CA3AF', // Gray-400
25
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Prompt colors for interactive prompts.
3
+ */
4
+ export const PROMPT_COLORS = {
5
+ // Question text
6
+ question: '#F9FAFB', // Gray-50
7
+
8
+ // Choice options
9
+ optionText: '#E5E7EB', // Gray-200
10
+ optionTextDim: '#9CA3AF', // Gray-400
11
+ optionSelected: '#3B82F6', // Blue-500
12
+ optionSelectedBackground: '#1E3A5F', // Dark blue
13
+
14
+ // Confirm buttons
15
+ confirmButton: '#22C55E', // Green-500
16
+ cancelButton: '#EF4444', // Red-500
17
+ buttonBackground: '#374151', // Gray-700
18
+ buttonSelectedBackground: '#1F2937', // Gray-800
19
+
20
+ // Input field
21
+ inputBorder: '#3B82F6', // Blue-500
22
+ inputBackground: '#1F2937', // Gray-800
23
+ inputText: '#F9FAFB', // Gray-50
24
+ inputPlaceholder: '#6B7280', // Gray-500
25
+ inputCursor: '#3B82F6', // Blue-500
26
+
27
+ // General
28
+ border: '#374151', // Gray-700
29
+ focusBorder: '#3B82F6', // Blue-500
30
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Sidebar colors.
3
+ */
4
+ export const SIDEBAR_COLORS = {
5
+ background: undefined, // Transparent - blend with terminal
6
+ selectedBackground: '#1F293780', // Gray-800 with 50% opacity
7
+ hoverBackground: '#374151', // Gray-700
8
+ text: '#E5E7EB', // Gray-200
9
+ textDim: '#6B7280', // Gray-500
10
+ border: '#374151', // Gray-700
11
+ badge: '#3B82F6', // Blue-500
12
+ focusBorder: '#3B82F6', // Blue-500
13
+ }
14
+
15
+ /**
16
+ * Screen header colors.
17
+ */
18
+ export const HEADER_COLORS = {
19
+ background: undefined, // Transparent - blend with terminal
20
+ text: '#F9FAFB', // Gray-50
21
+ border: '#374151', // Gray-700
22
+ }
23
+
24
+ /**
25
+ * Screen status indicator colors and icons.
26
+ */
27
+ export const STATUS_INDICATORS = {
28
+ waiting: {
29
+ icon: '○', // Empty circle
30
+ color: '#6B7280', // Gray-500
31
+ },
32
+ pending: {
33
+ icon: '◐', // Half circle (spinner-like)
34
+ color: '#F59E0B', // Amber-500
35
+ },
36
+ success: {
37
+ icon: '✓', // Checkmark
38
+ color: '#22C55E', // Green-500
39
+ },
40
+ fail: {
41
+ icon: '✗', // X mark
42
+ color: '#EF4444', // Red-500
43
+ },
44
+ } as const
45
+
46
+ /**
47
+ * Separator colors for sidebar sections.
48
+ */
49
+ export const SEPARATOR_COLORS = {
50
+ line: '#374151', // Gray-700
51
+ text: '#6B7280', // Gray-500
52
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Table colors (uses info/blue scheme).
3
+ */
4
+ export const TABLE_COLORS = {
5
+ border: '#3B82F6', // Blue-500 (same as info)
6
+ background: '#3B82F615', // Blue with 8% opacity
7
+ headerText: '#F9FAFB', // Gray-50
8
+ cellText: '#E5E7EB', // Gray-200
9
+ title: '#F9FAFB', // Gray-50
10
+ separator: '#3B82F650', // Blue with 30% opacity
11
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Common file extension to filetype mapping for syntax highlighting.
3
+ */
4
+ export const COMMON_FILETYPES: Record<string, string> = {
5
+ ts: 'typescript',
6
+ tsx: 'tsx',
7
+ js: 'javascript',
8
+ jsx: 'javascript',
9
+ json: 'json',
10
+ md: 'markdown',
11
+ py: 'python',
12
+ rs: 'rust',
13
+ go: 'go',
14
+ java: 'java',
15
+ c: 'c',
16
+ cpp: 'cpp',
17
+ h: 'c',
18
+ hpp: 'cpp',
19
+ css: 'css',
20
+ html: 'html',
21
+ yaml: 'yaml',
22
+ yml: 'yaml',
23
+ sh: 'bash',
24
+ bash: 'bash',
25
+ zsh: 'bash',
26
+ toml: 'toml',
27
+ xml: 'xml',
28
+ sql: 'sql',
29
+ rb: 'ruby',
30
+ php: 'php',
31
+ swift: 'swift',
32
+ kt: 'kotlin',
33
+ scala: 'scala',
34
+ hs: 'haskell',
35
+ elm: 'elm',
36
+ vue: 'vue',
37
+ svelte: 'svelte',
38
+ }
39
+
40
+ /**
41
+ * Resolves filetype from file path for syntax highlighting.
42
+ *
43
+ * @param filePath - Full file path or just filename
44
+ * @returns Filetype string for tree-sitter, or undefined
45
+ */
46
+ export function resolveFiletype(filePath: string): string | undefined {
47
+ // Extract extension from path
48
+ const lastDot = filePath.lastIndexOf('.')
49
+ if (lastDot === -1) return undefined
50
+
51
+ const ext = filePath.slice(lastDot + 1).toLowerCase()
52
+ return COMMON_FILETYPES[ext]
53
+ }
54
+
55
+ /**
56
+ * Gets the filename from a full path.
57
+ *
58
+ * @param filePath - Full file path
59
+ * @returns Just the filename
60
+ */
61
+ export function getFileName(filePath: string): string {
62
+ const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\'))
63
+ return lastSlash === -1 ? filePath : filePath.slice(lastSlash + 1)
64
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Format an object for display with configurable depth
3
+ */
4
+ export function formatObject(obj: unknown, depth: number = 2, currentDepth: number = 0): string {
5
+ if (currentDepth >= depth) {
6
+ if (Array.isArray(obj)) return '[Array]'
7
+ if (typeof obj === 'object' && obj !== null) {
8
+ const constructorName = obj.constructor?.name ?? 'Object'
9
+ return `[${constructorName}]`
10
+ }
11
+ return String(obj)
12
+ }
13
+
14
+ if (obj === null) return 'null'
15
+ if (obj === undefined) return 'undefined'
16
+ if (typeof obj === 'string') return `"${obj}"`
17
+ if (typeof obj === 'number' || typeof obj === 'boolean') return String(obj)
18
+ if (typeof obj === 'function') return '[Function]'
19
+ if (obj instanceof Date) return obj.toISOString()
20
+ if (obj instanceof Error) return `${obj.name}: ${obj.message}`
21
+
22
+ const indent = ' '.repeat(currentDepth)
23
+ const childIndent = ' '.repeat(currentDepth + 1)
24
+
25
+ if (Array.isArray(obj)) {
26
+ if (obj.length === 0) return '[]'
27
+ const items = obj.map((item) => formatObject(item, depth, currentDepth + 1))
28
+ return `[\n${childIndent}${items.join(`,\n${childIndent}`)}\n${indent}]`
29
+ }
30
+
31
+ if (typeof obj === 'object') {
32
+ const entries = Object.entries(obj)
33
+ if (entries.length === 0) return '{}'
34
+ const pairs = entries.map(
35
+ ([key, value]) => `${key}: ${formatObject(value, depth, currentDepth + 1)}`,
36
+ )
37
+ return `{\n${childIndent}${pairs.join(`,\n${childIndent}`)}\n${indent}}`
38
+ }
39
+
40
+ return String(obj)
41
+ }
42
+
43
+ /**
44
+ * Capture a stack trace, filtering out internal frames
45
+ */
46
+ export function captureTrace(): string {
47
+ const err = new Error()
48
+ const stack = err.stack ?? ''
49
+ const lines = stack.split('\n')
50
+ // Skip the first 4 lines: Error, captureTrace, trace method, and the log method
51
+ return lines.slice(4).join('\n')
52
+ }
@@ -0,0 +1,11 @@
1
+ // Colors
2
+ export * from './colors/index.ts'
3
+
4
+ // File utilities
5
+ export * from './filetype.ts'
6
+
7
+ // Stdout printer
8
+ export * from './stdout-printer.ts'
9
+
10
+ // Format utilities
11
+ export * from './format.ts'