@navios/commander-tui 1.2.0 → 1.3.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 (362) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +42 -1
  3. package/dist/base/src/adapters/index.d.ts +2 -0
  4. package/dist/base/src/adapters/index.d.ts.map +1 -0
  5. package/dist/base/src/adapters/interface.d.ts +45 -0
  6. package/dist/base/src/adapters/interface.d.ts.map +1 -0
  7. package/dist/base/src/components/index.d.ts +2 -0
  8. package/dist/base/src/components/index.d.ts.map +1 -0
  9. package/dist/base/src/context/index.d.ts +2 -0
  10. package/dist/base/src/context/index.d.ts.map +1 -0
  11. package/dist/base/src/factories/index.d.ts +3 -0
  12. package/dist/base/src/factories/index.d.ts.map +1 -0
  13. package/dist/base/src/factories/isomorphic-logger.factory.d.ts +8 -0
  14. package/dist/base/src/factories/isomorphic-logger.factory.d.ts.map +1 -0
  15. package/dist/base/src/factories/screen.factory.d.ts +8 -0
  16. package/dist/base/src/factories/screen.factory.d.ts.map +1 -0
  17. package/dist/base/src/filter/filter_engine.d.ts +19 -0
  18. package/dist/base/src/filter/filter_engine.d.ts.map +1 -0
  19. package/dist/base/src/filter/index.d.ts +2 -0
  20. package/dist/base/src/filter/index.d.ts.map +1 -0
  21. package/dist/base/src/hooks/index.d.ts +2 -0
  22. package/dist/base/src/hooks/index.d.ts.map +1 -0
  23. package/dist/base/src/index.d.ts +16 -0
  24. package/dist/base/src/index.d.ts.map +1 -0
  25. package/dist/base/src/interfaces/index.d.ts +2 -0
  26. package/dist/base/src/interfaces/index.d.ts.map +1 -0
  27. package/dist/base/src/interfaces/isomorphic-logger.d.ts +9 -0
  28. package/dist/base/src/interfaces/isomorphic-logger.d.ts.map +1 -0
  29. package/dist/base/src/keyboard/create_bindings.d.ts +26 -0
  30. package/dist/base/src/keyboard/create_bindings.d.ts.map +1 -0
  31. package/dist/base/src/keyboard/index.d.ts +3 -0
  32. package/dist/base/src/keyboard/index.d.ts.map +1 -0
  33. package/dist/base/src/keyboard/keyboard_manager.d.ts +63 -0
  34. package/dist/base/src/keyboard/keyboard_manager.d.ts.map +1 -0
  35. package/dist/base/src/overrides/console.logger.override.d.ts +3 -0
  36. package/dist/base/src/overrides/console.logger.override.d.ts.map +1 -0
  37. package/dist/base/src/overrides/index.d.ts +3 -0
  38. package/dist/base/src/overrides/index.d.ts.map +1 -0
  39. package/dist/base/src/overrides/missing-adapter.override.d.ts +6 -0
  40. package/dist/base/src/overrides/missing-adapter.override.d.ts.map +1 -0
  41. package/dist/base/src/schemas/index.d.ts +4 -0
  42. package/dist/base/src/schemas/index.d.ts.map +1 -0
  43. package/dist/base/src/schemas/logger-options.d.ts +21 -0
  44. package/dist/base/src/schemas/logger-options.d.ts.map +1 -0
  45. package/dist/base/src/schemas/prompt-options.d.ts +12 -0
  46. package/dist/base/src/schemas/prompt-options.d.ts.map +1 -0
  47. package/dist/base/src/schemas/screen-options.d.ts +10 -0
  48. package/dist/base/src/schemas/screen-options.d.ts.map +1 -0
  49. package/dist/base/src/services/index.d.ts +5 -0
  50. package/dist/base/src/services/index.d.ts.map +1 -0
  51. package/dist/base/src/services/logger.d.ts +52 -0
  52. package/dist/base/src/services/logger.d.ts.map +1 -0
  53. package/dist/base/src/services/prompt.d.ts +31 -0
  54. package/dist/base/src/services/prompt.d.ts.map +1 -0
  55. package/dist/base/src/services/screen.d.ts +161 -0
  56. package/dist/base/src/services/screen.d.ts.map +1 -0
  57. package/dist/base/src/services/screen_manager.d.ts +130 -0
  58. package/dist/base/src/services/screen_manager.d.ts.map +1 -0
  59. package/dist/base/src/themes/dark.d.ts +7 -0
  60. package/dist/base/src/themes/dark.d.ts.map +1 -0
  61. package/dist/base/src/themes/high-contrast.d.ts +7 -0
  62. package/dist/base/src/themes/high-contrast.d.ts.map +1 -0
  63. package/dist/base/src/themes/index.d.ts +5 -0
  64. package/dist/base/src/themes/index.d.ts.map +1 -0
  65. package/dist/base/src/themes/light.d.ts +6 -0
  66. package/dist/base/src/themes/light.d.ts.map +1 -0
  67. package/dist/base/src/themes/utils.d.ts +22 -0
  68. package/dist/base/src/themes/utils.d.ts.map +1 -0
  69. package/dist/base/src/tokens/adapter.d.ts +9 -0
  70. package/dist/base/src/tokens/adapter.d.ts.map +1 -0
  71. package/dist/base/src/tokens/index.d.ts +6 -0
  72. package/dist/base/src/tokens/index.d.ts.map +1 -0
  73. package/dist/base/src/tokens/logger.d.ts +44 -0
  74. package/dist/base/src/tokens/logger.d.ts.map +1 -0
  75. package/dist/base/src/tokens/prompt.d.ts +12 -0
  76. package/dist/base/src/tokens/prompt.d.ts.map +1 -0
  77. package/dist/base/src/tokens/screen-manager.d.ts +8 -0
  78. package/dist/base/src/tokens/screen-manager.d.ts.map +1 -0
  79. package/dist/base/src/tokens/screen.d.ts +10 -0
  80. package/dist/base/src/tokens/screen.d.ts.map +1 -0
  81. package/dist/base/src/types/file.types.d.ts +40 -0
  82. package/dist/base/src/types/file.types.d.ts.map +1 -0
  83. package/dist/base/src/types/filter.types.d.ts +31 -0
  84. package/dist/base/src/types/filter.types.d.ts.map +1 -0
  85. package/dist/base/src/types/index.d.ts +9 -0
  86. package/dist/base/src/types/index.d.ts.map +1 -0
  87. package/dist/base/src/types/keyboard.types.d.ts +83 -0
  88. package/dist/base/src/types/keyboard.types.d.ts.map +1 -0
  89. package/dist/base/src/types/log.types.d.ts +39 -0
  90. package/dist/base/src/types/log.types.d.ts.map +1 -0
  91. package/dist/base/src/types/message.types.d.ts +82 -0
  92. package/dist/base/src/types/message.types.d.ts.map +1 -0
  93. package/dist/base/src/types/prompt.types.d.ts +85 -0
  94. package/dist/base/src/types/prompt.types.d.ts.map +1 -0
  95. package/dist/base/src/types/screen.types.d.ts +79 -0
  96. package/dist/base/src/types/screen.types.d.ts.map +1 -0
  97. package/dist/base/src/types/theme.types.d.ts +217 -0
  98. package/dist/base/src/types/theme.types.d.ts.map +1 -0
  99. package/dist/base/src/utils/colors/file-colors.d.ts +10 -0
  100. package/dist/base/src/utils/colors/file-colors.d.ts.map +1 -0
  101. package/dist/base/src/utils/colors/helpers.d.ts +26 -0
  102. package/dist/base/src/utils/colors/helpers.d.ts.map +1 -0
  103. package/dist/base/src/utils/colors/index.d.ts +8 -0
  104. package/dist/base/src/utils/colors/index.d.ts.map +1 -0
  105. package/dist/base/src/utils/colors/log-colors.d.ts +19 -0
  106. package/dist/base/src/utils/colors/log-colors.d.ts.map +1 -0
  107. package/dist/base/src/utils/colors/progress-colors.d.ts +25 -0
  108. package/dist/base/src/utils/colors/progress-colors.d.ts.map +1 -0
  109. package/dist/base/src/utils/colors/prompt-colors.d.ts +22 -0
  110. package/dist/base/src/utils/colors/prompt-colors.d.ts.map +1 -0
  111. package/dist/base/src/utils/colors/sidebar-colors.d.ts +50 -0
  112. package/dist/base/src/utils/colors/sidebar-colors.d.ts.map +1 -0
  113. package/dist/base/src/utils/colors/table-colors.d.ts +12 -0
  114. package/dist/base/src/utils/colors/table-colors.d.ts.map +1 -0
  115. package/dist/base/src/utils/filetype.d.ts +19 -0
  116. package/dist/base/src/utils/filetype.d.ts.map +1 -0
  117. package/dist/base/src/utils/format.d.ts +9 -0
  118. package/dist/base/src/utils/format.d.ts.map +1 -0
  119. package/dist/base/src/utils/index.d.ts +5 -0
  120. package/dist/base/src/utils/index.d.ts.map +1 -0
  121. package/dist/base/src/utils/stdout-printer.d.ts +6 -0
  122. package/dist/base/src/utils/stdout-printer.d.ts.map +1 -0
  123. package/dist/base/tsconfig.base.tsbuildinfo +1 -0
  124. package/dist/react/src/adapters/react/components/file/file_log.d.ts +35 -0
  125. package/dist/react/src/adapters/react/components/file/file_log.d.ts.map +1 -0
  126. package/dist/react/src/adapters/react/components/file/index.d.ts +2 -0
  127. package/dist/react/src/adapters/react/components/file/index.d.ts.map +1 -0
  128. package/dist/react/src/adapters/react/components/filter/filter_bar.d.ts +7 -0
  129. package/dist/react/src/adapters/react/components/filter/filter_bar.d.ts.map +1 -0
  130. package/dist/react/src/adapters/react/components/filter/index.d.ts +2 -0
  131. package/dist/react/src/adapters/react/components/filter/index.d.ts.map +1 -0
  132. package/dist/react/src/adapters/react/components/help/help_overlay.d.ts +6 -0
  133. package/dist/react/src/adapters/react/components/help/help_overlay.d.ts.map +1 -0
  134. package/dist/react/src/adapters/react/components/help/index.d.ts +2 -0
  135. package/dist/react/src/adapters/react/components/help/index.d.ts.map +1 -0
  136. package/dist/react/src/adapters/react/components/log/index.d.ts +2 -0
  137. package/dist/react/src/adapters/react/components/log/index.d.ts.map +1 -0
  138. package/dist/react/src/adapters/react/components/log/log_message.d.ts +28 -0
  139. package/dist/react/src/adapters/react/components/log/log_message.d.ts.map +1 -0
  140. package/dist/react/src/adapters/react/components/prompt/index.d.ts +3 -0
  141. package/dist/react/src/adapters/react/components/prompt/index.d.ts.map +1 -0
  142. package/dist/react/src/adapters/react/components/prompt/prompt_renderer.d.ts +6 -0
  143. package/dist/react/src/adapters/react/components/prompt/prompt_renderer.d.ts.map +1 -0
  144. package/dist/react/src/adapters/react/components/screen/group_renderer.d.ts +14 -0
  145. package/dist/react/src/adapters/react/components/screen/group_renderer.d.ts.map +1 -0
  146. package/dist/react/src/adapters/react/components/screen/index.d.ts +7 -0
  147. package/dist/react/src/adapters/react/components/screen/index.d.ts.map +1 -0
  148. package/dist/react/src/adapters/react/components/screen/loading_message.d.ts +6 -0
  149. package/dist/react/src/adapters/react/components/screen/loading_message.d.ts.map +1 -0
  150. package/dist/react/src/adapters/react/components/screen/message_renderer.d.ts +6 -0
  151. package/dist/react/src/adapters/react/components/screen/message_renderer.d.ts.map +1 -0
  152. package/dist/react/src/adapters/react/components/screen/progress_message.d.ts +6 -0
  153. package/dist/react/src/adapters/react/components/screen/progress_message.d.ts.map +1 -0
  154. package/dist/react/src/adapters/react/components/screen/screen_bridge.d.ts +14 -0
  155. package/dist/react/src/adapters/react/components/screen/screen_bridge.d.ts.map +1 -0
  156. package/dist/react/src/adapters/react/components/screen/table_message.d.ts +6 -0
  157. package/dist/react/src/adapters/react/components/screen/table_message.d.ts.map +1 -0
  158. package/dist/react/src/adapters/react/components/screen_manager_bridge.d.ts +8 -0
  159. package/dist/react/src/adapters/react/components/screen_manager_bridge.d.ts.map +1 -0
  160. package/dist/react/src/adapters/react/components/sidebar/index.d.ts +4 -0
  161. package/dist/react/src/adapters/react/components/sidebar/index.d.ts.map +1 -0
  162. package/dist/react/src/adapters/react/components/sidebar/sidebar.d.ts +11 -0
  163. package/dist/react/src/adapters/react/components/sidebar/sidebar.d.ts.map +1 -0
  164. package/dist/react/src/adapters/react/components/sidebar/sidebar_item.d.ts +9 -0
  165. package/dist/react/src/adapters/react/components/sidebar/sidebar_item.d.ts.map +1 -0
  166. package/dist/react/src/adapters/react/components/sidebar/sidebar_separator.d.ts +2 -0
  167. package/dist/react/src/adapters/react/components/sidebar/sidebar_separator.d.ts.map +1 -0
  168. package/dist/react/src/adapters/react/context/index.d.ts +2 -0
  169. package/dist/react/src/adapters/react/context/index.d.ts.map +1 -0
  170. package/dist/react/src/adapters/react/context/logger_context.d.ts +53 -0
  171. package/dist/react/src/adapters/react/context/logger_context.d.ts.map +1 -0
  172. package/dist/react/src/adapters/react/hooks/index.d.ts +2 -0
  173. package/dist/react/src/adapters/react/hooks/index.d.ts.map +1 -0
  174. package/dist/react/src/adapters/react/hooks/use_theme.d.ts +7 -0
  175. package/dist/react/src/adapters/react/hooks/use_theme.d.ts.map +1 -0
  176. package/dist/react/src/adapters/react/index.d.ts +13 -0
  177. package/dist/react/src/adapters/react/index.d.ts.map +1 -0
  178. package/dist/react/tsconfig.react.tsbuildinfo +1 -0
  179. package/dist/solid/src/adapters/solid/components/file/file_log.d.ts +35 -0
  180. package/dist/solid/src/adapters/solid/components/file/file_log.d.ts.map +1 -0
  181. package/dist/solid/src/adapters/solid/components/file/index.d.ts +2 -0
  182. package/dist/solid/src/adapters/solid/components/file/index.d.ts.map +1 -0
  183. package/dist/solid/src/adapters/solid/components/filter/filter_bar.d.ts +7 -0
  184. package/dist/solid/src/adapters/solid/components/filter/filter_bar.d.ts.map +1 -0
  185. package/dist/solid/src/adapters/solid/components/filter/index.d.ts +2 -0
  186. package/dist/solid/src/adapters/solid/components/filter/index.d.ts.map +1 -0
  187. package/dist/solid/src/adapters/solid/components/help/help_overlay.d.ts +6 -0
  188. package/dist/solid/src/adapters/solid/components/help/help_overlay.d.ts.map +1 -0
  189. package/dist/solid/src/adapters/solid/components/help/index.d.ts +2 -0
  190. package/dist/solid/src/adapters/solid/components/help/index.d.ts.map +1 -0
  191. package/dist/solid/src/adapters/solid/components/log/index.d.ts +2 -0
  192. package/dist/solid/src/adapters/solid/components/log/index.d.ts.map +1 -0
  193. package/dist/solid/src/adapters/solid/components/log/log_message.d.ts +31 -0
  194. package/dist/solid/src/adapters/solid/components/log/log_message.d.ts.map +1 -0
  195. package/dist/solid/src/adapters/solid/components/prompt/index.d.ts +3 -0
  196. package/dist/solid/src/adapters/solid/components/prompt/index.d.ts.map +1 -0
  197. package/dist/solid/src/adapters/solid/components/prompt/prompt_renderer.d.ts +6 -0
  198. package/dist/solid/src/adapters/solid/components/prompt/prompt_renderer.d.ts.map +1 -0
  199. package/dist/solid/src/adapters/solid/components/screen/group_renderer.d.ts +14 -0
  200. package/dist/solid/src/adapters/solid/components/screen/group_renderer.d.ts.map +1 -0
  201. package/dist/solid/src/adapters/solid/components/screen/index.d.ts +7 -0
  202. package/dist/solid/src/adapters/solid/components/screen/index.d.ts.map +1 -0
  203. package/dist/solid/src/adapters/solid/components/screen/loading_message.d.ts +6 -0
  204. package/dist/solid/src/adapters/solid/components/screen/loading_message.d.ts.map +1 -0
  205. package/dist/solid/src/adapters/solid/components/screen/message_renderer.d.ts +6 -0
  206. package/dist/solid/src/adapters/solid/components/screen/message_renderer.d.ts.map +1 -0
  207. package/dist/solid/src/adapters/solid/components/screen/progress_message.d.ts +6 -0
  208. package/dist/solid/src/adapters/solid/components/screen/progress_message.d.ts.map +1 -0
  209. package/dist/solid/src/adapters/solid/components/screen/screen_bridge.d.ts +14 -0
  210. package/dist/solid/src/adapters/solid/components/screen/screen_bridge.d.ts.map +1 -0
  211. package/dist/solid/src/adapters/solid/components/screen/table_message.d.ts +6 -0
  212. package/dist/solid/src/adapters/solid/components/screen/table_message.d.ts.map +1 -0
  213. package/dist/solid/src/adapters/solid/components/screen_manager_bridge.d.ts +8 -0
  214. package/dist/solid/src/adapters/solid/components/screen_manager_bridge.d.ts.map +1 -0
  215. package/dist/solid/src/adapters/solid/components/sidebar/index.d.ts +4 -0
  216. package/dist/solid/src/adapters/solid/components/sidebar/index.d.ts.map +1 -0
  217. package/dist/solid/src/adapters/solid/components/sidebar/sidebar.d.ts +11 -0
  218. package/dist/solid/src/adapters/solid/components/sidebar/sidebar.d.ts.map +1 -0
  219. package/dist/solid/src/adapters/solid/components/sidebar/sidebar_item.d.ts +9 -0
  220. package/dist/solid/src/adapters/solid/components/sidebar/sidebar_item.d.ts.map +1 -0
  221. package/dist/solid/src/adapters/solid/components/sidebar/sidebar_separator.d.ts +2 -0
  222. package/dist/solid/src/adapters/solid/components/sidebar/sidebar_separator.d.ts.map +1 -0
  223. package/dist/solid/src/adapters/solid/context/index.d.ts +3 -0
  224. package/dist/solid/src/adapters/solid/context/index.d.ts.map +1 -0
  225. package/dist/solid/src/adapters/solid/context/logger_context.d.ts +52 -0
  226. package/dist/solid/src/adapters/solid/context/logger_context.d.ts.map +1 -0
  227. package/dist/solid/src/adapters/solid/hooks/index.d.ts +2 -0
  228. package/dist/solid/src/adapters/solid/hooks/index.d.ts.map +1 -0
  229. package/dist/solid/src/adapters/solid/hooks/use_theme.d.ts +7 -0
  230. package/dist/solid/src/adapters/solid/hooks/use_theme.d.ts.map +1 -0
  231. package/dist/solid/src/adapters/solid/index.d.ts +13 -0
  232. package/dist/solid/src/adapters/solid/index.d.ts.map +1 -0
  233. package/dist/solid/tsconfig.solid.tsbuildinfo +1 -0
  234. package/dist/tsconfig.base.tsbuildinfo +1 -0
  235. package/dist/tsconfig.react.tsbuildinfo +1 -0
  236. package/dist/tsconfig.solid.tsbuildinfo +1 -0
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/lib/adapters/react/index.cjs +1768 -0
  239. package/lib/adapters/react/index.cjs.map +1 -0
  240. package/lib/adapters/react/index.d.cts +80 -0
  241. package/lib/adapters/react/index.d.mts +80 -0
  242. package/lib/adapters/react/index.mjs +1760 -0
  243. package/lib/adapters/react/index.mjs.map +1 -0
  244. package/lib/adapters/solid/index.cjs +3855 -0
  245. package/lib/adapters/solid/index.cjs.map +1 -0
  246. package/lib/adapters/solid/index.d.cts +74 -0
  247. package/lib/adapters/solid/index.d.mts +74 -0
  248. package/lib/adapters/solid/index.mjs +3847 -0
  249. package/lib/adapters/solid/index.mjs.map +1 -0
  250. package/lib/filter_engine-DXqu9Vaq.cjs +1836 -0
  251. package/lib/filter_engine-DXqu9Vaq.cjs.map +1 -0
  252. package/lib/filter_engine-DmqhEhpA.mjs +1609 -0
  253. package/lib/filter_engine-DmqhEhpA.mjs.map +1 -0
  254. package/lib/index.cjs +1424 -1125
  255. package/lib/index.cjs.map +1 -1
  256. package/lib/index.d.cts +263 -1152
  257. package/lib/index.d.mts +263 -1152
  258. package/lib/index.mjs +1378 -1070
  259. package/lib/index.mjs.map +1 -1
  260. package/lib/interface-CTHQ08aY.d.mts +699 -0
  261. package/lib/interface-DQEIz9Mb.d.cts +699 -0
  262. package/package.json +25 -1
  263. package/project.json +2 -2
  264. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +0 -2556
  265. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +0 -1589
  266. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +0 -3681
  267. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +0 -2002
  268. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +0 -3584
  269. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +0 -3186
  270. package/src/__tests__/components/filter_bar.spec.tsx +1 -1
  271. package/src/__tests__/components/loading_message.spec.tsx +1 -1
  272. package/src/__tests__/components/log_message.spec.tsx +1 -1
  273. package/src/__tests__/components/progress_message.spec.tsx +1 -1
  274. package/src/__tests__/components/prompt_renderer.spec.tsx +1 -1
  275. package/src/__tests__/components/sidebar.spec.tsx +1 -1
  276. package/src/__tests__/utils/render-utils.tsx +1 -1
  277. package/src/adapters/index.ts +2 -0
  278. package/src/adapters/interface.ts +50 -0
  279. package/src/{components → adapters/react/components}/file/file_log.tsx +2 -2
  280. package/src/{components → adapters/react/components}/filter/filter_bar.tsx +2 -2
  281. package/src/{components → adapters/react/components}/help/help_overlay.tsx +2 -2
  282. package/src/{components → adapters/react/components}/log/log_message.tsx +2 -2
  283. package/src/{components → adapters/react/components}/prompt/prompt_renderer.tsx +1 -1
  284. package/src/{components → adapters/react/components}/screen/group_renderer.tsx +1 -1
  285. package/src/{components → adapters/react/components}/screen/loading_message.tsx +2 -3
  286. package/src/{components → adapters/react/components}/screen/message_renderer.tsx +1 -1
  287. package/src/{components → adapters/react/components}/screen/progress_message.tsx +1 -1
  288. package/src/{components → adapters/react/components}/screen/screen_bridge.tsx +2 -2
  289. package/src/{components → adapters/react/components}/screen/table_message.tsx +2 -2
  290. package/src/{components → adapters/react/components}/screen_manager_bridge.tsx +5 -5
  291. package/src/{components → adapters/react/components}/sidebar/sidebar.tsx +1 -1
  292. package/src/{components → adapters/react/components}/sidebar/sidebar_item.tsx +1 -1
  293. package/src/adapters/react/context/index.ts +1 -0
  294. package/src/{context → adapters/react/context}/logger_context.tsx +2 -2
  295. package/src/adapters/react/hooks/index.ts +1 -0
  296. package/src/{hooks → adapters/react/hooks}/use_theme.ts +1 -1
  297. package/src/adapters/react/index.ts +39 -0
  298. package/src/adapters/solid/components/file/file_log.tsx +221 -0
  299. package/src/adapters/solid/components/file/index.ts +1 -0
  300. package/src/adapters/solid/components/filter/filter_bar.tsx +84 -0
  301. package/src/adapters/solid/components/filter/index.ts +1 -0
  302. package/src/adapters/solid/components/help/help_overlay.tsx +106 -0
  303. package/src/adapters/solid/components/help/index.ts +1 -0
  304. package/src/adapters/solid/components/log/index.ts +1 -0
  305. package/src/adapters/solid/components/log/log_message.tsx +92 -0
  306. package/src/adapters/solid/components/prompt/index.ts +2 -0
  307. package/src/adapters/solid/components/prompt/prompt_renderer.tsx +350 -0
  308. package/src/adapters/solid/components/screen/group_renderer.tsx +61 -0
  309. package/src/adapters/solid/components/screen/index.ts +6 -0
  310. package/src/adapters/solid/components/screen/loading_message.tsx +39 -0
  311. package/src/adapters/solid/components/screen/message_renderer.tsx +122 -0
  312. package/src/adapters/solid/components/screen/progress_message.tsx +61 -0
  313. package/src/adapters/solid/components/screen/screen_bridge.tsx +155 -0
  314. package/src/adapters/solid/components/screen/table_message.tsx +58 -0
  315. package/src/adapters/solid/components/screen_manager_bridge.tsx +243 -0
  316. package/src/adapters/solid/components/sidebar/index.ts +3 -0
  317. package/src/adapters/solid/components/sidebar/sidebar.tsx +108 -0
  318. package/src/adapters/solid/components/sidebar/sidebar_item.tsx +55 -0
  319. package/src/adapters/solid/components/sidebar/sidebar_separator.tsx +13 -0
  320. package/src/adapters/solid/context/index.ts +2 -0
  321. package/src/adapters/solid/context/logger_context.tsx +95 -0
  322. package/src/adapters/solid/hooks/index.ts +1 -0
  323. package/src/adapters/solid/hooks/use_theme.ts +12 -0
  324. package/src/adapters/solid/index.tsx +43 -0
  325. package/src/adapters/solid/jsx.d.ts +98 -0
  326. package/src/components/index.ts +3 -15
  327. package/src/context/index.ts +3 -1
  328. package/src/factories/isomorphic-logger.factory.ts +1 -2
  329. package/src/factories/screen.factory.ts +2 -2
  330. package/src/hooks/index.ts +3 -1
  331. package/src/index.ts +5 -0
  332. package/src/keyboard/create_bindings.ts +2 -2
  333. package/src/overrides/index.ts +1 -0
  334. package/src/overrides/missing-adapter.override.ts +20 -0
  335. package/src/services/index.ts +1 -1
  336. package/src/services/screen.ts +3 -3
  337. package/src/services/{screen_manager.tsx → screen_manager.ts} +21 -10
  338. package/src/tokens/adapter.ts +10 -0
  339. package/src/tokens/index.ts +2 -0
  340. package/src/tokens/screen-manager.ts +9 -0
  341. package/tsconfig.base.json +31 -0
  342. package/tsconfig.json +6 -12
  343. package/tsconfig.react.json +16 -0
  344. package/tsconfig.solid.json +16 -0
  345. package/tsdown.config.mts +69 -16
  346. package/vitest.config.mts +20 -0
  347. package/lib/index.d.cts.map +0 -1
  348. package/lib/index.d.mts.map +0 -1
  349. package/lib/screen_manager_bridge-Bk1i53h5.mjs +0 -3
  350. package/lib/screen_manager_bridge-BwPVr0bX.mjs +0 -3048
  351. package/lib/screen_manager_bridge-BwPVr0bX.mjs.map +0 -1
  352. package/lib/screen_manager_bridge-CWxLO0CK.cjs +0 -3371
  353. package/lib/screen_manager_bridge-CWxLO0CK.cjs.map +0 -1
  354. package/lib/screen_manager_bridge-DXc57iXW.cjs +0 -3
  355. /package/src/{components → adapters/react/components}/file/index.ts +0 -0
  356. /package/src/{components → adapters/react/components}/filter/index.ts +0 -0
  357. /package/src/{components → adapters/react/components}/help/index.ts +0 -0
  358. /package/src/{components → adapters/react/components}/log/index.ts +0 -0
  359. /package/src/{components → adapters/react/components}/prompt/index.ts +0 -0
  360. /package/src/{components → adapters/react/components}/screen/index.ts +0 -0
  361. /package/src/{components → adapters/react/components}/sidebar/index.ts +0 -0
  362. /package/src/{components → adapters/react/components}/sidebar/sidebar_separator.tsx +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter_engine-DXqu9Vaq.cjs","names":["ALL_LOG_LEVELS","createDefaultFilterState","enabledLevels","Set","searchQuery","isVisible","focusedField","hasActiveFilter","filter","size","length","DEFAULT_LOG_LEVEL_COLORS","verbose","border","background","debug","log","warn","error","fatal","text","VARIANT_COLORS","success","trace","ERROR_HIGHLIGHT_COLORS","gutterBackground","SIDEBAR_COLORS","background","undefined","selectedBackground","hoverBackground","text","textDim","border","badge","focusBorder","HEADER_COLORS","STATUS_INDICATORS","waiting","icon","color","pending","success","fail","SEPARATOR_COLORS","line","PROGRESS_COLORS","border","background","barFilled","barEmpty","text","textDim","complete","completeBackground","failed","failedBackground","GROUP_COLORS","headerText","icon","TABLE_COLORS","border","background","headerText","cellText","title","separator","FILE_COLORS","border","background","headerText","headerBackground","PROMPT_COLORS","question","optionText","optionTextDim","optionSelected","optionSelectedBackground","confirmButton","cancelButton","buttonBackground","buttonSelectedBackground","inputBorder","inputBackground","inputText","inputPlaceholder","inputCursor","border","focusBorder","RGBA","DEFAULT_LOG_LEVEL_COLORS","createTintedColor","color","alpha","rgba","fromHex","fromValues","r","g","b","createBorderColor","getLogLevelColors","level","customColors","defaultColors","custom","border","background","text","COMMON_FILETYPES","ts","tsx","js","jsx","json","md","py","rs","go","java","c","cpp","h","hpp","css","html","yaml","yml","sh","bash","zsh","toml","xml","sql","rb","php","swift","kt","scala","hs","elm","vue","svelte","resolveFiletype","filePath","lastDot","lastIndexOf","undefined","ext","slice","toLowerCase","getFileName","lastSlash","Math","max","DEFAULT_LOG_LEVEL_COLORS","GROUP_COLORS","PROGRESS_COLORS","TABLE_COLORS","VARIANT_COLORS","RESET","BOLD","DIM","hexToAnsi","hex","isForeground","cleanHex","replace","slice","test","r","parseInt","g","b","code","getLogLevelAnsiColor","level","variant","colors","border","formatLevel","color","displayName","label","toUpperCase","padEnd","formatTimestamp","date","toLocaleTimeString","printMessage","message","stream","type","logMessage","timestamp","write","content","header","filePath","coloredDiff","diff","split","map","line","startsWith","join","errorLineSet","Set","errorLines","startLine","lines","numberedLines","index","lineNum","numStr","String","padStart","isError","has","loadingMessage","status","resolvedContent","levelStr","prefix","progressMessage","current","total","percentage","Math","round","barWidth","filledWidth","emptyWidth","progressColor","barFilled","emptyColor","barEmpty","filledBar","repeat","emptyBar","statusIcon","statusColor","complete","failed","displayLabel","progressBar","percentStr","groupMessage","collapsed","isEnd","groupColor","iconColor","icon","tableMessage","headers","rows","title","tableColor","headerColor","headerText","cellColor","cellText","colWidths","h","i","maxRowWidth","reduce","max","row","length","separator","w","topBorder","bottomBorder","headerRow","rowStr","_","printMessagesToStdout","messages","screenName","process","stderr","stdout","formatObject","obj","depth","currentDepth","Array","isArray","constructorName","name","String","undefined","Date","toISOString","Error","message","indent","repeat","childIndent","length","items","map","item","join","entries","Object","pairs","key","value","captureTrace","offset","err","stack","lines","split","begin","findIndex","line","includes","slice","InjectionToken","Adapter","create","darkTheme","name","logLevels","verbose","border","background","debug","log","warn","error","fatal","text","sidebar","undefined","selectedBackground","hoverBackground","textDim","badge","focusBorder","header","statusIndicators","waiting","icon","color","pending","success","fail","static","separator","line","progress","barFilled","barEmpty","complete","completeBackground","failed","failedBackground","group","headerText","table","cellText","title","file","headerBackground","prompt","question","optionText","optionTextDim","optionSelected","optionSelectedBackground","confirmButton","cancelButton","buttonBackground","buttonSelectedBackground","inputBorder","inputBackground","inputText","inputPlaceholder","inputCursor","errorHighlight","gutterBackground","filter","cursor","activeLevel","inactiveLevel","help","category","key","description","hint","colors","primary","secondary","warning","muted","foreground","lightTheme","name","logLevels","verbose","border","background","debug","log","warn","error","fatal","text","sidebar","selectedBackground","hoverBackground","textDim","badge","focusBorder","header","statusIndicators","waiting","icon","color","pending","success","fail","static","separator","line","progress","barFilled","barEmpty","complete","completeBackground","failed","failedBackground","group","headerText","table","cellText","title","file","headerBackground","prompt","question","optionText","optionTextDim","optionSelected","optionSelectedBackground","confirmButton","cancelButton","buttonBackground","buttonSelectedBackground","inputBorder","inputBackground","inputText","inputPlaceholder","inputCursor","errorHighlight","gutterBackground","filter","cursor","activeLevel","inactiveLevel","help","category","key","description","hint","colors","primary","secondary","warning","muted","foreground","highContrastTheme","name","logLevels","verbose","border","background","text","debug","log","warn","error","fatal","sidebar","selectedBackground","hoverBackground","textDim","badge","focusBorder","header","statusIndicators","waiting","icon","color","pending","success","fail","static","separator","line","progress","barFilled","barEmpty","complete","completeBackground","failed","failedBackground","group","headerText","table","cellText","title","file","headerBackground","prompt","question","optionText","optionTextDim","optionSelected","optionSelectedBackground","confirmButton","cancelButton","buttonBackground","buttonSelectedBackground","inputBorder","inputBackground","inputText","inputPlaceholder","inputCursor","errorHighlight","gutterBackground","filter","cursor","activeLevel","inactiveLevel","help","category","key","description","hint","colors","primary","secondary","warning","muted","foreground","darkTheme","highContrastTheme","lightTheme","deepMerge","target","source","result","key","Object","prototype","hasOwnProperty","call","sourceValue","targetValue","undefined","Array","isArray","getThemePreset","preset","mergeThemes","base","overrides","createTheme","createThemeFrom","baseTheme","resolveTheme","theme","KeyboardManager","bindings","disabled","Set","config","sortBindings","addBindings","push","removeBinding","key","filter","b","keys","Array","isArray","includes","disableKey","add","enableKey","delete","handleKey","context","binding","findMatchingBinding","result","handler","getBindingsForHelp","description","getBindingsByCategory","grouped","general","navigation","screen","prompt","category","keyMatches","conditionMatches","when","isDisabled","name","sequence","ctrlMatches","ctrl","metaMatches","meta","shiftMatches","shift","condition","hasPrompt","undefined","inInputMode","focusArea","isFilterActive","isHelpVisible","hasSidebar","some","k","has","sort","a","priority","formatKeyBinding","parts","keyDisplay","map","join","createDefaultBindings","handlers","manager","getActiveScreen","toggleHelp","toggleFilter","closeFilter","bindings","push","key","handler","screen","isPromptInInputMode","promptExitInputMode","description","category","when","hasPrompt","inInputMode","priority","promptSubmit","promptDeleteLastChar","prompt","getActivePrompt","type","promptNavigateUp","promptNavigateDown","promptNavigateLeft","promptNavigateRight","promptToggleSelection","entered","promptEnterInputMode","canSubmitPrompt","isFilterActive","isHelpVisible","filterCycleField","filterDeleteChar","i","String","filterToggleLevel","unbind","_","ctx","hasSidebar","toggleFocus","navigateUp","focusArea","navigateDown","selectCurrent","screens","getScreens","length","setActiveScreen","setSelectedIndex","clear","handlePrintableInput","context","sequence","ctrl","meta","charCode","charCodeAt","filterAppendChar","promptAppendInput","ALL_LOG_LEVELS","FilterEngine","filterMessages","messages","filter","searchQuery","enabledLevels","size","length","msg","type","messageMatchesSearch","logMsg","has","level","query","lowerQuery","toLowerCase","content","includes","label","filePath","diff","resolvedContent","title","headers","some","h","rows","row","cell","countByLevel","counts","debug","log","verbose","error","fatal","warn"],"sources":["../src/types/filter.types.ts","../src/utils/colors/log-colors.ts","../src/utils/colors/sidebar-colors.ts","../src/utils/colors/progress-colors.ts","../src/utils/colors/table-colors.ts","../src/utils/colors/file-colors.ts","../src/utils/colors/prompt-colors.ts","../src/utils/colors/helpers.ts","../src/utils/filetype.ts","../src/utils/stdout-printer.ts","../src/utils/format.ts","../src/tokens/adapter.ts","../src/themes/dark.ts","../src/themes/light.ts","../src/themes/high-contrast.ts","../src/themes/utils.ts","../src/keyboard/keyboard_manager.ts","../src/keyboard/create_bindings.ts","../src/filter/filter_engine.ts"],"sourcesContent":["// ============================================\n// Filter Types\n// ============================================\n\nimport type { LogLevel } from '@navios/core'\n\n/**\n * Filter state for log filtering.\n */\nexport interface FilterState {\n /** Which log levels are enabled (shown) */\n enabledLevels: Set<LogLevel>\n\n /** Text search query */\n searchQuery: string\n\n /** Whether the filter bar is visible */\n isVisible: boolean\n\n /** Which filter field is focused */\n focusedField: 'search' | 'levels'\n}\n\n/**\n * All log levels in order.\n */\nexport const ALL_LOG_LEVELS: LogLevel[] = ['verbose', 'debug', 'log', 'warn', 'error', 'fatal']\n\n/**\n * Create a default filter state.\n */\nexport function createDefaultFilterState(): FilterState {\n return {\n enabledLevels: new Set(ALL_LOG_LEVELS),\n searchQuery: '',\n isVisible: false,\n focusedField: 'search',\n }\n}\n\n/**\n * Check if any filtering is active.\n */\nexport function hasActiveFilter(filter: FilterState): boolean {\n return filter.searchQuery !== '' || filter.enabledLevels.size < ALL_LOG_LEVELS.length\n}\n\n/**\n * Level counts for display.\n */\nexport type LevelCounts = Record<LogLevel, number>\n","import type { LogLevelColorMap, LogLevelColors, LogMessageVariant } from '../../types/index.ts'\n\n/**\n * Default color scheme for all log levels.\n * Each level has a prominent border color and a subtle background tint.\n */\nexport const DEFAULT_LOG_LEVEL_COLORS: LogLevelColorMap = {\n verbose: {\n border: '#6B7280', // Gray-500\n background: '#6B728015', // Gray with 8% opacity\n },\n debug: {\n border: '#8B5CF6', // Violet-500\n background: '#8B5CF615', // Violet with 8% opacity\n },\n log: {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n },\n warn: {\n border: '#F59E0B', // Amber-500\n background: '#F59E0B15', // Amber with 8% opacity\n },\n error: {\n border: '#EF4444', // Red-500\n background: '#EF444415', // Red with 8% opacity\n },\n fatal: {\n border: '#DC2626', // Red-600\n background: '#DC262625', // Red with 15% opacity (more prominent)\n text: '#FCA5A5', // Light red text for contrast\n },\n}\n\n/**\n * Colors for semantic variants (override level colors when variant is set).\n */\nexport const VARIANT_COLORS: Record<LogMessageVariant, LogLevelColors> = {\n success: {\n border: '#22C55E', // Green-500\n background: '#22C55E15', // Green with 8% opacity\n },\n trace: {\n border: '#6B7280', // Gray-500\n background: '#6B728015', // Gray with 8% opacity\n },\n}\n\n/**\n * Error highlighting colors.\n */\nexport const ERROR_HIGHLIGHT_COLORS = {\n background: '#EF444425', // Red with 15% opacity\n border: '#EF4444', // Red-500\n gutterBackground: '#EF444440', // Red with 25% opacity for line number gutter\n}\n","/**\n * Sidebar colors.\n */\nexport const SIDEBAR_COLORS = {\n background: undefined, // Transparent - blend with terminal\n selectedBackground: '#1F293780', // Gray-800 with 50% opacity\n hoverBackground: '#374151', // Gray-700\n text: '#E5E7EB', // Gray-200\n textDim: '#6B7280', // Gray-500\n border: '#374151', // Gray-700\n badge: '#3B82F6', // Blue-500\n focusBorder: '#3B82F6', // Blue-500\n}\n\n/**\n * Screen header colors.\n */\nexport const HEADER_COLORS = {\n background: undefined, // Transparent - blend with terminal\n text: '#F9FAFB', // Gray-50\n border: '#374151', // Gray-700\n}\n\n/**\n * Screen status indicator colors and icons.\n */\nexport const STATUS_INDICATORS = {\n waiting: {\n icon: '○', // Empty circle\n color: '#6B7280', // Gray-500\n },\n pending: {\n icon: '◐', // Half circle (spinner-like)\n color: '#F59E0B', // Amber-500\n },\n success: {\n icon: '✓', // Checkmark\n color: '#22C55E', // Green-500\n },\n fail: {\n icon: '✗', // X mark\n color: '#EF4444', // Red-500\n },\n} as const\n\n/**\n * Separator colors for sidebar sections.\n */\nexport const SEPARATOR_COLORS = {\n line: '#374151', // Gray-700\n text: '#6B7280', // Gray-500\n}\n","/**\n * Progress bar colors.\n */\nexport const PROGRESS_COLORS = {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n barFilled: '#3B82F6', // Blue-500\n barEmpty: '#374151', // Gray-700\n text: '#E5E7EB', // Gray-200\n textDim: '#9CA3AF', // Gray-400\n complete: '#22C55E', // Green-500\n completeBackground: '#22C55E15',\n failed: '#EF4444', // Red-500\n failedBackground: '#EF444415',\n}\n\n/**\n * Group colors for collapsible log groups.\n */\nexport const GROUP_COLORS = {\n border: '#6B7280', // Gray-500\n background: '#6B728010', // Gray with 6% opacity\n headerText: '#E5E7EB', // Gray-200\n icon: '#9CA3AF', // Gray-400\n}\n","/**\n * Table colors (uses info/blue scheme).\n */\nexport const TABLE_COLORS = {\n border: '#3B82F6', // Blue-500 (same as info)\n background: '#3B82F615', // Blue with 8% opacity\n headerText: '#F9FAFB', // Gray-50\n cellText: '#E5E7EB', // Gray-200\n title: '#F9FAFB', // Gray-50\n separator: '#3B82F650', // Blue with 30% opacity\n}\n","/**\n * File display colors (uses info/blue scheme).\n */\nexport const FILE_COLORS = {\n border: '#3B82F6', // Blue-500 (same as info)\n background: '#3B82F615', // Blue with 8% opacity\n headerText: '#F9FAFB', // Gray-50\n headerBackground: '#3B82F625', // Blue with 15% opacity\n}\n","/**\n * Prompt colors for interactive prompts.\n */\nexport const PROMPT_COLORS = {\n // Question text\n question: '#F9FAFB', // Gray-50\n\n // Choice options\n optionText: '#E5E7EB', // Gray-200\n optionTextDim: '#9CA3AF', // Gray-400\n optionSelected: '#3B82F6', // Blue-500\n optionSelectedBackground: '#1E3A5F', // Dark blue\n\n // Confirm buttons\n confirmButton: '#22C55E', // Green-500\n cancelButton: '#EF4444', // Red-500\n buttonBackground: '#374151', // Gray-700\n buttonSelectedBackground: '#1F2937', // Gray-800\n\n // Input field\n inputBorder: '#3B82F6', // Blue-500\n inputBackground: '#1F2937', // Gray-800\n inputText: '#F9FAFB', // Gray-50\n inputPlaceholder: '#6B7280', // Gray-500\n inputCursor: '#3B82F6', // Blue-500\n\n // General\n border: '#374151', // Gray-700\n focusBorder: '#3B82F6', // Blue-500\n}\n","import { RGBA } from '@opentui/core'\n\nimport type { LogLevel } from '@navios/core'\n\nimport type { LogLevelColorMap, LogLevelColors } from '../../types/index.ts'\n\nimport { DEFAULT_LOG_LEVEL_COLORS } from './log-colors.ts'\n\n/**\n * Creates a tinted (subtle) version of a color by setting alpha.\n *\n * @param color - The base color (hex string or RGBA)\n * @param alpha - Target alpha value (0-1), default 0.08 for subtle tinting\n * @returns New RGBA with adjusted alpha\n */\nexport function createTintedColor(color: string | RGBA, alpha: number = 0.08): RGBA {\n const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color\n return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)\n}\n\n/**\n * Creates a more prominent version of a color for borders.\n *\n * @param color - The base color\n * @param alpha - Target alpha, default 1.0 for solid borders\n */\nexport function createBorderColor(color: string | RGBA, alpha: number = 1.0): RGBA {\n const rgba = typeof color === 'string' ? RGBA.fromHex(color) : color\n return RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha)\n}\n\n/**\n * Gets colors for a specific log level.\n *\n * @param level - The log level\n * @param customColors - Optional custom color map\n */\nexport function getLogLevelColors(\n level: LogLevel,\n customColors?: Partial<LogLevelColorMap>,\n): LogLevelColors {\n const defaultColors = DEFAULT_LOG_LEVEL_COLORS[level]\n const custom = customColors?.[level]\n\n return {\n border: custom?.border ?? defaultColors.border,\n background: custom?.background ?? defaultColors.background,\n text: custom?.text ?? defaultColors.text,\n }\n}\n","/**\n * Common file extension to filetype mapping for syntax highlighting.\n */\nexport const COMMON_FILETYPES: Record<string, string> = {\n ts: 'typescript',\n tsx: 'tsx',\n js: 'javascript',\n jsx: 'javascript',\n json: 'json',\n md: 'markdown',\n py: 'python',\n rs: 'rust',\n go: 'go',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n css: 'css',\n html: 'html',\n yaml: 'yaml',\n yml: 'yaml',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n toml: 'toml',\n xml: 'xml',\n sql: 'sql',\n rb: 'ruby',\n php: 'php',\n swift: 'swift',\n kt: 'kotlin',\n scala: 'scala',\n hs: 'haskell',\n elm: 'elm',\n vue: 'vue',\n svelte: 'svelte',\n}\n\n/**\n * Resolves filetype from file path for syntax highlighting.\n *\n * @param filePath - Full file path or just filename\n * @returns Filetype string for tree-sitter, or undefined\n */\nexport function resolveFiletype(filePath: string): string | undefined {\n // Extract extension from path\n const lastDot = filePath.lastIndexOf('.')\n if (lastDot === -1) return undefined\n\n const ext = filePath.slice(lastDot + 1).toLowerCase()\n return COMMON_FILETYPES[ext]\n}\n\n/**\n * Gets the filename from a full path.\n *\n * @param filePath - Full file path\n * @returns Just the filename\n */\nexport function getFileName(filePath: string): string {\n const lastSlash = Math.max(filePath.lastIndexOf('/'), filePath.lastIndexOf('\\\\'))\n return lastSlash === -1 ? filePath : filePath.slice(lastSlash + 1)\n}\n","import type {\n GroupMessageData,\n LoadingMessageData,\n LogMessageData,\n LogMessageVariant,\n MessageData,\n ProgressMessageData,\n TableMessageData,\n} from '../types/index.ts'\nimport type { LogLevel } from '@navios/core'\n\nimport { DEFAULT_LOG_LEVEL_COLORS, GROUP_COLORS, PROGRESS_COLORS, TABLE_COLORS, VARIANT_COLORS } from './colors/index.ts'\n\n// ANSI escape codes\nconst RESET = '\\x1b[0m'\nconst BOLD = '\\x1b[1m'\nconst DIM = '\\x1b[2m'\n\n// Convert hex color to ANSI 24-bit color\nfunction hexToAnsi(hex: string, isForeground = true): string {\n // Remove # if present and take first 6 chars\n const cleanHex = hex.replace('#', '').slice(0, 6)\n\n // Validate hex format\n if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) {\n return '' // Return empty string for invalid colors (no styling)\n }\n\n const r = parseInt(cleanHex.slice(0, 2), 16)\n const g = parseInt(cleanHex.slice(2, 4), 16)\n const b = parseInt(cleanHex.slice(4, 6), 16)\n\n const code = isForeground ? 38 : 48\n return `\\x1b[${code};2;${r};${g};${b}m`\n}\n\n// Get ANSI color for log level or variant\nfunction getLogLevelAnsiColor(level: LogLevel, variant?: LogMessageVariant): string {\n const colors = variant ? VARIANT_COLORS[variant] : DEFAULT_LOG_LEVEL_COLORS[level]\n return hexToAnsi(colors.border, true)\n}\n\n// Format a log level label\nfunction formatLevel(level: LogLevel, variant?: LogMessageVariant): string {\n const color = getLogLevelAnsiColor(level, variant)\n // Use variant name if present, otherwise use level name\n const displayName = variant ?? level\n const label = displayName.toUpperCase().padEnd(7)\n return `${color}${BOLD}[${label}]${RESET}`\n}\n\n// Format timestamp\nfunction formatTimestamp(date: Date): string {\n return `${DIM}${date.toLocaleTimeString()}${RESET}`\n}\n\n// Print a single message\nfunction printMessage(message: MessageData, stream: NodeJS.WriteStream): void {\n switch (message.type) {\n case 'log': {\n const logMessage = message as LogMessageData\n const timestamp = formatTimestamp(message.timestamp)\n const level = formatLevel(logMessage.level, logMessage.variant)\n const label = logMessage.label ? ` ${DIM}[${logMessage.label}]${RESET}` : ''\n stream.write(`${timestamp} ${level}${label} ${logMessage.content}\\n`)\n break\n }\n\n case 'file': {\n const header = `${DIM}─── ${message.filePath} ───${RESET}`\n stream.write(`${header}\\n${message.content}\\n`)\n break\n }\n\n case 'diff': {\n const header = `${DIM}─── ${message.filePath} (diff) ───${RESET}`\n // Color diff lines\n const coloredDiff = message.diff\n .split('\\n')\n .map((line) => {\n if (line.startsWith('+') && !line.startsWith('+++')) {\n return `\\x1b[32m${line}${RESET}` // Green for additions\n } else if (line.startsWith('-') && !line.startsWith('---')) {\n return `\\x1b[31m${line}${RESET}` // Red for deletions\n } else if (line.startsWith('@@')) {\n return `\\x1b[36m${line}${RESET}` // Cyan for hunk headers\n }\n return line\n })\n .join('\\n')\n stream.write(`${header}\\n${coloredDiff}\\n`)\n break\n }\n\n case 'fileError': {\n const header = `${DIM}─── ${message.filePath} ───${RESET}`\n const errorLineSet = new Set(message.errorLines)\n const startLine = message.startLine ?? 1\n\n const lines = message.content.split('\\n')\n const numberedLines = lines.map((line, index) => {\n const lineNum = startLine + index\n const numStr = String(lineNum).padStart(4)\n const isError = errorLineSet.has(lineNum)\n\n if (isError) {\n return `\\x1b[31m${numStr} │ ${line}${RESET}`\n }\n return `${DIM}${numStr}${RESET} │ ${line}`\n })\n\n stream.write(`${header}\\n${numberedLines.join('\\n')}\\n`)\n break\n }\n\n case 'loading': {\n const loadingMessage = message as LoadingMessageData\n const status = loadingMessage.status\n const content = loadingMessage.resolvedContent ?? loadingMessage.content\n\n let level: LogLevel = 'log'\n let variant: LogMessageVariant | undefined\n if (status === 'success') {\n level = 'log'\n variant = 'success'\n } else if (status === 'fail') {\n level = 'error'\n }\n\n const timestamp = formatTimestamp(message.timestamp)\n const levelStr = formatLevel(level, variant)\n const prefix = status === 'loading' ? '... ' : ''\n stream.write(`${timestamp} ${levelStr} ${prefix}${content}\\n`)\n break\n }\n\n case 'progress': {\n const progressMessage = message as ProgressMessageData\n const { label, current, total, status, resolvedContent } = progressMessage\n const percentage = total > 0 ? Math.round((current / total) * 100) : 0\n const barWidth = 20\n const filledWidth = Math.round((percentage / 100) * barWidth)\n const emptyWidth = barWidth - filledWidth\n\n const progressColor = hexToAnsi(PROGRESS_COLORS.barFilled)\n const emptyColor = hexToAnsi(PROGRESS_COLORS.barEmpty)\n const filledBar = '█'.repeat(filledWidth)\n const emptyBar = '░'.repeat(emptyWidth)\n\n let statusIcon = ''\n let statusColor = ''\n if (status === 'complete') {\n statusIcon = '✓'\n statusColor = hexToAnsi(PROGRESS_COLORS.complete)\n } else if (status === 'failed') {\n statusIcon = '✗'\n statusColor = hexToAnsi(PROGRESS_COLORS.failed)\n }\n\n const displayLabel = resolvedContent ?? label\n const progressBar = `${progressColor}${filledBar}${RESET}${emptyColor}${emptyBar}${RESET}`\n const percentStr = `${String(percentage).padStart(3)}%`\n\n if (statusIcon) {\n stream.write(`${statusColor}${statusIcon}${RESET} ${displayLabel} [${progressBar}] ${percentStr}\\n`)\n } else {\n stream.write(` ${displayLabel} [${progressBar}] ${percentStr} (${current}/${total})\\n`)\n }\n break\n }\n\n case 'group': {\n const groupMessage = message as GroupMessageData\n const { label, collapsed, isEnd } = groupMessage\n const groupColor = hexToAnsi(GROUP_COLORS.border)\n const iconColor = hexToAnsi(GROUP_COLORS.icon)\n\n if (isEnd) {\n stream.write(`${groupColor}└─${RESET} ${DIM}end ${label}${RESET}\\n`)\n } else {\n const icon = collapsed ? '▶' : '▼'\n stream.write(`${groupColor}┌─${RESET} ${iconColor}${icon}${RESET} ${BOLD}${label}${RESET}\\n`)\n }\n break\n }\n\n case 'table': {\n const tableMessage = message as TableMessageData\n const { headers, rows, title } = tableMessage\n\n const tableColor = hexToAnsi(TABLE_COLORS.border)\n const headerColor = hexToAnsi(TABLE_COLORS.headerText)\n const cellColor = hexToAnsi(TABLE_COLORS.cellText)\n\n // Calculate column widths\n const colWidths = headers.map((h, i) => {\n const maxRowWidth = rows.reduce((max, row) => Math.max(max, (row[i] ?? '').length), 0)\n return Math.max(h.length, maxRowWidth)\n })\n\n // Build separator line\n const separator = `${tableColor}├${colWidths.map((w) => '─'.repeat(w + 2)).join('┼')}┤${RESET}`\n const topBorder = `${tableColor}┌${colWidths.map((w) => '─'.repeat(w + 2)).join('┬')}┐${RESET}`\n const bottomBorder = `${tableColor}└${colWidths.map((w) => '─'.repeat(w + 2)).join('┴')}┘${RESET}`\n\n // Print title if present\n if (title) {\n stream.write(`${BOLD}${title}${RESET}\\n`)\n }\n\n // Print top border\n stream.write(`${topBorder}\\n`)\n\n // Print headers\n const headerRow = headers.map((h, i) => ` ${h.padEnd(colWidths[i])} `).join(`${tableColor}│${RESET}`)\n stream.write(`${tableColor}│${RESET}${headerColor}${headerRow}${RESET}${tableColor}│${RESET}\\n`)\n\n // Print separator\n stream.write(`${separator}\\n`)\n\n // Print rows\n for (const row of rows) {\n const rowStr = headers.map((_, i) => ` ${(row[i] ?? '').padEnd(colWidths[i])} `).join(`${tableColor}│${RESET}`)\n stream.write(`${tableColor}│${RESET}${cellColor}${rowStr}${RESET}${tableColor}│${RESET}\\n`)\n }\n\n // Print bottom border\n stream.write(`${bottomBorder}\\n`)\n break\n }\n }\n}\n\n/**\n * Print all messages to stdout (or stderr if isError)\n */\nexport function printMessagesToStdout(\n messages: MessageData[],\n screenName: string,\n isError: boolean = false,\n): void {\n const stream = isError ? process.stderr : process.stdout\n\n // Print screen header\n const headerColor = isError ? '\\x1b[31m' : '\\x1b[32m'\n const status = isError ? 'FAILED' : 'COMPLETED'\n stream.write(`\\n${headerColor}${BOLD}═══ ${screenName} [${status}] ═══${RESET}\\n\\n`)\n\n // Print each message\n for (const message of messages) {\n printMessage(message, stream)\n }\n\n stream.write('\\n')\n}\n","/**\n * Format an object for display with configurable depth\n */\nexport function formatObject(obj: unknown, depth: number = 2, currentDepth: number = 0): string {\n if (currentDepth >= depth) {\n if (Array.isArray(obj)) return '[Array]'\n if (typeof obj === 'object' && obj !== null) {\n const constructorName = obj.constructor?.name ?? 'Object'\n return `[${constructorName}]`\n }\n return String(obj)\n }\n\n if (obj === null) return 'null'\n if (obj === undefined) return 'undefined'\n if (typeof obj === 'string') return `\"${obj}\"`\n if (typeof obj === 'number' || typeof obj === 'boolean') return String(obj)\n if (typeof obj === 'function') return '[Function]'\n if (obj instanceof Date) return obj.toISOString()\n if (obj instanceof Error) return `${obj.name}: ${obj.message}`\n\n const indent = ' '.repeat(currentDepth)\n const childIndent = ' '.repeat(currentDepth + 1)\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) return '[]'\n const items = obj.map((item) => formatObject(item, depth, currentDepth + 1))\n return `[\\n${childIndent}${items.join(`,\\n${childIndent}`)}\\n${indent}]`\n }\n\n if (typeof obj === 'object') {\n const entries = Object.entries(obj)\n if (entries.length === 0) return '{}'\n const pairs = entries.map(\n ([key, value]) => `${key}: ${formatObject(value, depth, currentDepth + 1)}`,\n )\n return `{\\n${childIndent}${pairs.join(`,\\n${childIndent}`)}\\n${indent}}`\n }\n\n return String(obj)\n}\n\n/**\n * Capture a stack trace, filtering out internal frames\n */\nexport function captureTrace(offset: number = 0): string {\n const err = new Error()\n const stack = err.stack ?? ''\n const lines = stack.split('\\n')\n const begin = lines.findIndex((line) => line.includes('captureTrace'))\n // Skip the first 4 lines: Error, captureTrace, trace method, and the log method\n return lines.slice(begin !== -1 ? begin + 1 + offset : 4).join('\\n')\n}\n","import { InjectionToken } from '@navios/core'\n\nimport type { AdapterInterface } from '../adapters/interface.ts'\n\n/**\n * Injection token for the TUI rendering adapter.\n * Import the specific adapter (e.g., '@navios/commander-tui/adapters/react')\n * to register an implementation.\n */\nexport const Adapter = InjectionToken.create<AdapterInterface>('Adapter')\n","import type { Theme } from '../types/index.ts'\n\n/**\n * Default dark theme.\n * Migrated from the scattered color files in utils/colors/.\n */\nexport const darkTheme: Theme = {\n name: 'dark',\n\n logLevels: {\n verbose: {\n border: '#6B7280', // Gray-500\n background: '#6B728015', // Gray with 8% opacity\n },\n debug: {\n border: '#8B5CF6', // Violet-500\n background: '#8B5CF615', // Violet with 8% opacity\n },\n log: {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n },\n warn: {\n border: '#F59E0B', // Amber-500\n background: '#F59E0B15', // Amber with 8% opacity\n },\n error: {\n border: '#EF4444', // Red-500\n background: '#EF444415', // Red with 8% opacity\n },\n fatal: {\n border: '#DC2626', // Red-600\n background: '#DC262625', // Red with 15% opacity\n text: '#FCA5A5', // Light red text\n },\n },\n\n sidebar: {\n background: undefined,\n selectedBackground: '#1F293780', // Gray-800 with 50% opacity\n hoverBackground: '#374151', // Gray-700\n text: '#E5E7EB', // Gray-200\n textDim: '#6B7280', // Gray-500\n border: '#374151', // Gray-700\n badge: '#3B82F6', // Blue-500\n focusBorder: '#3B82F6', // Blue-500\n },\n\n header: {\n background: undefined,\n text: '#F9FAFB', // Gray-50\n border: '#374151', // Gray-700\n },\n\n statusIndicators: {\n waiting: {\n icon: '○',\n color: '#6B7280', // Gray-500\n },\n pending: {\n icon: '◐',\n color: '#F59E0B', // Amber-500\n },\n success: {\n icon: '✓',\n color: '#22C55E', // Green-500\n },\n fail: {\n icon: '✗',\n color: '#EF4444', // Red-500\n },\n static: {\n icon: '●',\n color: '#3B82F6', // Blue-500\n },\n },\n\n separator: {\n line: '#374151', // Gray-700\n text: '#6B7280', // Gray-500\n },\n\n progress: {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n barFilled: '#3B82F6', // Blue-500\n barEmpty: '#374151', // Gray-700\n text: '#E5E7EB', // Gray-200\n textDim: '#9CA3AF', // Gray-400\n complete: '#22C55E', // Green-500\n completeBackground: '#22C55E15',\n failed: '#EF4444', // Red-500\n failedBackground: '#EF444415',\n },\n\n group: {\n border: '#6B7280', // Gray-500\n background: '#6B728010', // Gray with 6% opacity\n headerText: '#E5E7EB', // Gray-200\n icon: '#9CA3AF', // Gray-400\n },\n\n table: {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n headerText: '#F9FAFB', // Gray-50\n cellText: '#E5E7EB', // Gray-200\n title: '#F9FAFB', // Gray-50\n separator: '#3B82F650', // Blue with 30% opacity\n },\n\n file: {\n border: '#3B82F6', // Blue-500\n background: '#3B82F615', // Blue with 8% opacity\n headerText: '#F9FAFB', // Gray-50\n headerBackground: '#3B82F625', // Blue with 15% opacity\n },\n\n prompt: {\n question: '#F9FAFB', // Gray-50\n optionText: '#E5E7EB', // Gray-200\n optionTextDim: '#9CA3AF', // Gray-400\n optionSelected: '#3B82F6', // Blue-500\n optionSelectedBackground: '#1E3A5F', // Dark blue\n confirmButton: '#22C55E', // Green-500\n cancelButton: '#EF4444', // Red-500\n buttonBackground: '#374151', // Gray-700\n buttonSelectedBackground: '#1F2937', // Gray-800\n inputBorder: '#3B82F6', // Blue-500\n inputBackground: '#1F2937', // Gray-800\n inputText: '#F9FAFB', // Gray-50\n inputPlaceholder: '#6B7280', // Gray-500\n inputCursor: '#3B82F6', // Blue-500\n border: '#374151', // Gray-700\n focusBorder: '#3B82F6', // Blue-500\n },\n\n errorHighlight: {\n background: '#EF444425', // Red with 15% opacity\n border: '#EF4444', // Red-500\n gutterBackground: '#EF444440', // Red with 25% opacity\n },\n\n filter: {\n background: '#1F293780', // Gray-800 with 50% opacity\n border: '#3B82F6', // Blue-500\n text: '#E5E7EB', // Gray-200\n textDim: '#6B7280', // Gray-500\n inputBackground: '#1F2937', // Gray-800\n inputText: '#F9FAFB', // Gray-50\n inputPlaceholder: '#6B7280', // Gray-500\n cursor: '#3B82F6', // Blue-500\n activeLevel: '#3B82F6', // Blue-500\n inactiveLevel: '#4B5563', // Gray-600\n },\n\n help: {\n background: '#1F2937', // Gray-800\n border: '#3B82F6', // Blue-500\n title: '#F9FAFB', // Gray-50\n category: '#3B82F6', // Blue-500\n key: '#F59E0B', // Amber-500\n description: '#E5E7EB', // Gray-200\n hint: '#6B7280', // Gray-500\n },\n\n colors: {\n primary: '#3B82F6', // Blue-500\n secondary: '#8B5CF6', // Violet-500\n success: '#22C55E', // Green-500\n warning: '#F59E0B', // Amber-500\n error: '#EF4444', // Red-500\n muted: '#6B7280', // Gray-500\n background: '#111827', // Gray-900\n foreground: '#F9FAFB', // Gray-50\n },\n}\n","import type { Theme } from '../types/index.ts'\n\n/**\n * Light theme for terminals with light backgrounds.\n */\nexport const lightTheme: Theme = {\n name: 'light',\n\n logLevels: {\n verbose: {\n border: '#9CA3AF', // Gray-400\n background: '#F3F4F6', // Gray-100\n },\n debug: {\n border: '#7C3AED', // Violet-600\n background: '#EDE9FE', // Violet-100\n },\n log: {\n border: '#2563EB', // Blue-600\n background: '#DBEAFE', // Blue-100\n },\n warn: {\n border: '#D97706', // Amber-600\n background: '#FEF3C7', // Amber-100\n },\n error: {\n border: '#DC2626', // Red-600\n background: '#FEE2E2', // Red-100\n },\n fatal: {\n border: '#991B1B', // Red-800\n background: '#FECACA', // Red-200\n text: '#7F1D1D', // Red-900\n },\n },\n\n sidebar: {\n background: '#F9FAFB', // Gray-50\n selectedBackground: '#E5E7EB', // Gray-200\n hoverBackground: '#F3F4F6', // Gray-100\n text: '#1F2937', // Gray-800\n textDim: '#6B7280', // Gray-500\n border: '#D1D5DB', // Gray-300\n badge: '#2563EB', // Blue-600\n focusBorder: '#2563EB', // Blue-600\n },\n\n header: {\n background: '#F9FAFB', // Gray-50\n text: '#111827', // Gray-900\n border: '#D1D5DB', // Gray-300\n },\n\n statusIndicators: {\n waiting: {\n icon: '○',\n color: '#9CA3AF', // Gray-400\n },\n pending: {\n icon: '◐',\n color: '#D97706', // Amber-600\n },\n success: {\n icon: '✓',\n color: '#16A34A', // Green-600\n },\n fail: {\n icon: '✗',\n color: '#DC2626', // Red-600\n },\n static: {\n icon: '●',\n color: '#2563EB', // Blue-600\n },\n },\n\n separator: {\n line: '#D1D5DB', // Gray-300\n text: '#6B7280', // Gray-500\n },\n\n progress: {\n border: '#2563EB', // Blue-600\n background: '#DBEAFE', // Blue-100\n barFilled: '#2563EB', // Blue-600\n barEmpty: '#E5E7EB', // Gray-200\n text: '#1F2937', // Gray-800\n textDim: '#6B7280', // Gray-500\n complete: '#16A34A', // Green-600\n completeBackground: '#DCFCE7', // Green-100\n failed: '#DC2626', // Red-600\n failedBackground: '#FEE2E2', // Red-100\n },\n\n group: {\n border: '#9CA3AF', // Gray-400\n background: '#F3F4F6', // Gray-100\n headerText: '#1F2937', // Gray-800\n icon: '#6B7280', // Gray-500\n },\n\n table: {\n border: '#2563EB', // Blue-600\n background: '#DBEAFE', // Blue-100\n headerText: '#111827', // Gray-900\n cellText: '#1F2937', // Gray-800\n title: '#111827', // Gray-900\n separator: '#93C5FD', // Blue-300\n },\n\n file: {\n border: '#2563EB', // Blue-600\n background: '#DBEAFE', // Blue-100\n headerText: '#111827', // Gray-900\n headerBackground: '#BFDBFE', // Blue-200\n },\n\n prompt: {\n question: '#111827', // Gray-900\n optionText: '#1F2937', // Gray-800\n optionTextDim: '#6B7280', // Gray-500\n optionSelected: '#2563EB', // Blue-600\n optionSelectedBackground: '#DBEAFE', // Blue-100\n confirmButton: '#16A34A', // Green-600\n cancelButton: '#DC2626', // Red-600\n buttonBackground: '#E5E7EB', // Gray-200\n buttonSelectedBackground: '#D1D5DB', // Gray-300\n inputBorder: '#2563EB', // Blue-600\n inputBackground: '#FFFFFF', // White\n inputText: '#111827', // Gray-900\n inputPlaceholder: '#9CA3AF', // Gray-400\n inputCursor: '#2563EB', // Blue-600\n border: '#D1D5DB', // Gray-300\n focusBorder: '#2563EB', // Blue-600\n },\n\n errorHighlight: {\n background: '#FEE2E2', // Red-100\n border: '#DC2626', // Red-600\n gutterBackground: '#FECACA', // Red-200\n },\n\n filter: {\n background: '#F3F4F6', // Gray-100\n border: '#2563EB', // Blue-600\n text: '#1F2937', // Gray-800\n textDim: '#6B7280', // Gray-500\n inputBackground: '#FFFFFF', // White\n inputText: '#111827', // Gray-900\n inputPlaceholder: '#9CA3AF', // Gray-400\n cursor: '#2563EB', // Blue-600\n activeLevel: '#2563EB', // Blue-600\n inactiveLevel: '#D1D5DB', // Gray-300\n },\n\n help: {\n background: '#FFFFFF', // White\n border: '#2563EB', // Blue-600\n title: '#111827', // Gray-900\n category: '#2563EB', // Blue-600\n key: '#D97706', // Amber-600\n description: '#1F2937', // Gray-800\n hint: '#6B7280', // Gray-500\n },\n\n colors: {\n primary: '#2563EB', // Blue-600\n secondary: '#7C3AED', // Violet-600\n success: '#16A34A', // Green-600\n warning: '#D97706', // Amber-600\n error: '#DC2626', // Red-600\n muted: '#6B7280', // Gray-500\n background: '#FFFFFF', // White\n foreground: '#111827', // Gray-900\n },\n}\n","import type { Theme } from '../types/index.ts'\n\n/**\n * High contrast theme for accessibility.\n * Uses pure black/white with saturated colors for maximum visibility.\n */\nexport const highContrastTheme: Theme = {\n name: 'high-contrast',\n\n logLevels: {\n verbose: {\n border: '#FFFFFF',\n background: '#1A1A1A',\n text: '#FFFFFF',\n },\n debug: {\n border: '#A855F7', // Purple-500\n background: '#1A1A1A',\n text: '#E9D5FF', // Purple-200\n },\n log: {\n border: '#3B82F6', // Blue-500\n background: '#1A1A1A',\n text: '#BFDBFE', // Blue-200\n },\n warn: {\n border: '#FBBF24', // Amber-400\n background: '#1A1A1A',\n text: '#FEF08A', // Yellow-200\n },\n error: {\n border: '#EF4444', // Red-500\n background: '#1A1A1A',\n text: '#FECACA', // Red-200\n },\n fatal: {\n border: '#FF0000', // Pure red\n background: '#330000',\n text: '#FFFFFF',\n },\n },\n\n sidebar: {\n background: '#000000',\n selectedBackground: '#333333',\n hoverBackground: '#1A1A1A',\n text: '#FFFFFF',\n textDim: '#AAAAAA',\n border: '#FFFFFF',\n badge: '#FFFF00', // Yellow for high visibility\n focusBorder: '#FFFF00',\n },\n\n header: {\n background: '#000000',\n text: '#FFFFFF',\n border: '#FFFFFF',\n },\n\n statusIndicators: {\n waiting: {\n icon: '○',\n color: '#AAAAAA',\n },\n pending: {\n icon: '◐',\n color: '#FBBF24', // Amber-400\n },\n success: {\n icon: '✓',\n color: '#22C55E', // Green-500\n },\n fail: {\n icon: '✗',\n color: '#EF4444', // Red-500\n },\n static: {\n icon: '●',\n color: '#00FFFF', // Cyan for high visibility\n },\n },\n\n separator: {\n line: '#FFFFFF',\n text: '#AAAAAA',\n },\n\n progress: {\n border: '#3B82F6',\n background: '#1A1A1A',\n barFilled: '#3B82F6',\n barEmpty: '#333333',\n text: '#FFFFFF',\n textDim: '#AAAAAA',\n complete: '#22C55E',\n completeBackground: '#1A1A1A',\n failed: '#EF4444',\n failedBackground: '#1A1A1A',\n },\n\n group: {\n border: '#FFFFFF',\n background: '#1A1A1A',\n headerText: '#FFFFFF',\n icon: '#AAAAAA',\n },\n\n table: {\n border: '#FFFFFF',\n background: '#1A1A1A',\n headerText: '#FFFFFF',\n cellText: '#FFFFFF',\n title: '#FFFFFF',\n separator: '#666666',\n },\n\n file: {\n border: '#FFFFFF',\n background: '#1A1A1A',\n headerText: '#FFFFFF',\n headerBackground: '#333333',\n },\n\n prompt: {\n question: '#FFFFFF',\n optionText: '#FFFFFF',\n optionTextDim: '#AAAAAA',\n optionSelected: '#FFFF00', // Yellow for high visibility\n optionSelectedBackground: '#333333',\n confirmButton: '#22C55E',\n cancelButton: '#EF4444',\n buttonBackground: '#333333',\n buttonSelectedBackground: '#1A1A1A',\n inputBorder: '#FFFF00',\n inputBackground: '#1A1A1A',\n inputText: '#FFFFFF',\n inputPlaceholder: '#666666',\n inputCursor: '#FFFF00',\n border: '#FFFFFF',\n focusBorder: '#FFFF00',\n },\n\n errorHighlight: {\n background: '#330000',\n border: '#FF0000',\n gutterBackground: '#660000',\n },\n\n filter: {\n background: '#1A1A1A',\n border: '#FFFF00',\n text: '#FFFFFF',\n textDim: '#AAAAAA',\n inputBackground: '#000000',\n inputText: '#FFFFFF',\n inputPlaceholder: '#666666',\n cursor: '#FFFF00',\n activeLevel: '#FFFF00',\n inactiveLevel: '#666666',\n },\n\n help: {\n background: '#000000',\n border: '#FFFFFF',\n title: '#FFFFFF',\n category: '#FFFF00',\n key: '#00FFFF', // Cyan for contrast\n description: '#FFFFFF',\n hint: '#AAAAAA',\n },\n\n colors: {\n primary: '#3B82F6',\n secondary: '#A855F7',\n success: '#22C55E',\n warning: '#FBBF24',\n error: '#EF4444',\n muted: '#AAAAAA',\n background: '#000000',\n foreground: '#FFFFFF',\n },\n}\n","import type { PartialTheme, Theme, ThemePreset } from '../types/index.ts'\n\nimport { darkTheme } from './dark.ts'\nimport { highContrastTheme } from './high-contrast.ts'\nimport { lightTheme } from './light.ts'\n\n/**\n * Deep merge two objects, with source taking precedence.\n */\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target }\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const sourceValue = source[key]\n const targetValue = target[key]\n\n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n ;(result as Record<string, unknown>)[key] = deepMerge(\n targetValue as object,\n sourceValue as object,\n )\n } else if (sourceValue !== undefined) {\n ;(result as Record<string, unknown>)[key] = sourceValue\n }\n }\n }\n\n return result\n}\n\n/**\n * Get a theme by preset name.\n */\nexport function getThemePreset(preset: ThemePreset): Theme {\n switch (preset) {\n case 'dark':\n return darkTheme\n case 'light':\n return lightTheme\n case 'high-contrast':\n return highContrastTheme\n default:\n return darkTheme\n }\n}\n\n/**\n * Merge a base theme with partial overrides.\n */\nexport function mergeThemes(base: Theme, overrides: PartialTheme): Theme {\n return deepMerge(base, overrides as Partial<Theme>)\n}\n\n/**\n * Create a custom theme by extending the dark theme with overrides.\n */\nexport function createTheme(overrides: PartialTheme): Theme {\n return mergeThemes(darkTheme, overrides)\n}\n\n/**\n * Create a custom theme by extending a specific base theme.\n */\nexport function createThemeFrom(base: Theme | ThemePreset, overrides: PartialTheme): Theme {\n const baseTheme = typeof base === 'string' ? getThemePreset(base) : base\n return mergeThemes(baseTheme, overrides)\n}\n\n/**\n * Resolve a theme value which can be a Theme object or a preset name.\n */\nexport function resolveTheme(theme: Theme | ThemePreset): Theme {\n return typeof theme === 'string' ? getThemePreset(theme) : theme\n}\n","import type {\n KeyBinding,\n KeyBindingCategory,\n KeyBindingsConfig,\n KeyboardContext,\n KeyEvent,\n} from '../types/index.ts'\n\n/**\n * Manages keyboard bindings and dispatches key events to handlers.\n */\nexport class KeyboardManager {\n private bindings: KeyBinding[] = []\n private disabled: Set<string> = new Set()\n\n constructor(config?: KeyBindingsConfig) {\n if (config?.bindings) {\n this.bindings = [...config.bindings]\n }\n\n if (config?.disabled) {\n this.disabled = new Set(config.disabled)\n }\n\n // Sort bindings by priority (higher first)\n this.sortBindings()\n }\n\n /**\n * Add bindings to the manager.\n */\n addBindings(bindings: KeyBinding[]): void {\n this.bindings.push(...bindings)\n this.sortBindings()\n }\n\n /**\n * Remove a binding by key name.\n */\n removeBinding(key: string): void {\n this.bindings = this.bindings.filter((b) => {\n const keys = Array.isArray(b.key) ? b.key : [b.key]\n return !keys.includes(key)\n })\n }\n\n /**\n * Disable a key (prevents it from being matched).\n */\n disableKey(key: string): void {\n this.disabled.add(key)\n }\n\n /**\n * Enable a previously disabled key.\n */\n enableKey(key: string): void {\n this.disabled.delete(key)\n }\n\n /**\n * Handle a key event, dispatching to the appropriate handler.\n * Returns true if a handler consumed the event.\n */\n handleKey(key: KeyEvent, context: KeyboardContext): boolean {\n const binding = this.findMatchingBinding(key, context)\n if (binding) {\n const result = binding.handler(key, context)\n return result !== false\n }\n return false\n }\n\n /**\n * Get all bindings for display in help overlay.\n */\n getBindingsForHelp(): KeyBinding[] {\n return this.bindings.filter((b) => b.description)\n }\n\n /**\n * Get bindings grouped by category.\n */\n getBindingsByCategory(): Record<KeyBindingCategory, KeyBinding[]> {\n const grouped: Record<KeyBindingCategory, KeyBinding[]> = {\n general: [],\n navigation: [],\n screen: [],\n prompt: [],\n filter: [],\n }\n\n for (const binding of this.bindings) {\n if (binding.description) {\n grouped[binding.category].push(binding)\n }\n }\n\n return grouped\n }\n\n /**\n * Find a matching binding for the given key and context.\n */\n private findMatchingBinding(key: KeyEvent, context: KeyboardContext): KeyBinding | null {\n for (const binding of this.bindings) {\n if (\n this.keyMatches(key, binding) &&\n this.conditionMatches(binding.when, context) &&\n !this.isDisabled(binding)\n ) {\n return binding\n }\n }\n return null\n }\n\n /**\n * Check if a key event matches a binding's key specification.\n */\n private keyMatches(key: KeyEvent, binding: KeyBinding): boolean {\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key]\n\n // Check key name or sequence\n const keyMatches = keys.includes(key.name) || (key.sequence && keys.includes(key.sequence))\n\n if (!keyMatches) return false\n\n // Check modifiers\n const ctrlMatches = (binding.ctrl ?? false) === (key.ctrl ?? false)\n const metaMatches = (binding.meta ?? false) === (key.meta ?? false)\n const shiftMatches = (binding.shift ?? false) === (key.shift ?? false)\n\n return ctrlMatches && metaMatches && shiftMatches\n }\n\n /**\n * Check if context matches a binding's condition.\n */\n private conditionMatches(condition: KeyBinding['when'], context: KeyboardContext): boolean {\n if (!condition) return true\n\n if (condition.hasPrompt !== undefined && condition.hasPrompt !== context.hasPrompt) {\n return false\n }\n\n if (condition.inInputMode !== undefined && condition.inInputMode !== context.inInputMode) {\n return false\n }\n\n if (condition.focusArea !== undefined && condition.focusArea !== context.focusArea) {\n return false\n }\n\n if (\n condition.isFilterActive !== undefined &&\n condition.isFilterActive !== context.isFilterActive\n ) {\n return false\n }\n\n if (\n condition.isHelpVisible !== undefined &&\n condition.isHelpVisible !== context.isHelpVisible\n ) {\n return false\n }\n\n if (condition.hasSidebar !== undefined && condition.hasSidebar !== context.hasSidebar) {\n return false\n }\n\n return true\n }\n\n /**\n * Check if a binding is disabled.\n */\n private isDisabled(binding: KeyBinding): boolean {\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key]\n return keys.some((k) => this.disabled.has(k))\n }\n\n /**\n * Sort bindings by priority (higher first).\n */\n private sortBindings(): void {\n this.bindings.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0))\n }\n}\n\n/**\n * Format a key binding for display.\n */\nexport function formatKeyBinding(binding: KeyBinding): string {\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key]\n const parts: string[] = []\n\n if (binding.ctrl) parts.push('Ctrl')\n if (binding.meta) parts.push('Cmd')\n if (binding.shift) parts.push('Shift')\n\n // Format key names for display\n const keyDisplay = keys\n .map((k) => {\n switch (k) {\n case 'up':\n return '↑'\n case 'down':\n return '↓'\n case 'left':\n return '←'\n case 'right':\n return '→'\n case 'return':\n return 'Enter'\n case 'escape':\n return 'Esc'\n case 'space':\n return 'Space'\n case 'tab':\n return 'Tab'\n case '\\\\':\n return '\\\\'\n default:\n return k\n }\n })\n .join('/')\n\n parts.push(keyDisplay)\n return parts.join('+')\n}\n","import type { ScreenInstance, ScreenManagerInstance } from '../services/index.ts'\nimport type { KeyBinding, KeyboardContext, KeyEvent } from '../types/index.ts'\n\n/**\n * Interface for binding handlers that need manager/screen access.\n */\nexport interface BindingHandlers {\n manager: ScreenManagerInstance\n getActiveScreen: () => ScreenInstance | null\n toggleHelp: () => void\n toggleFilter: () => void\n closeFilter: () => void\n filterAppendChar: (char: string) => void\n filterDeleteChar: () => void\n filterToggleLevel: (index: number) => void\n filterCycleField: () => void\n}\n\n/**\n * Create the default keybindings with access to manager and screens.\n */\nexport function createDefaultBindings(handlers: BindingHandlers): KeyBinding[] {\n const { manager, getActiveScreen, toggleHelp, toggleFilter, closeFilter } = handlers\n\n const bindings: KeyBinding[] = []\n\n // ============================================\n // PROMPT INPUT MODE (highest priority)\n // ============================================\n\n // Escape to exit input mode\n bindings.push({\n key: 'escape',\n handler: () => {\n const screen = getActiveScreen()\n if (screen?.isPromptInInputMode()) {\n screen.promptExitInputMode()\n return true\n }\n },\n description: 'Exit input mode',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: true },\n priority: 100,\n })\n\n // Enter to submit in input mode\n bindings.push({\n key: 'return',\n handler: () => {\n const screen = getActiveScreen()\n if (screen?.isPromptInInputMode()) {\n screen.promptSubmit()\n return true\n }\n },\n description: 'Submit input',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: true },\n priority: 100,\n })\n\n // Backspace to delete in input mode\n bindings.push({\n key: 'backspace',\n handler: () => {\n const screen = getActiveScreen()\n if (screen?.isPromptInInputMode()) {\n screen.promptDeleteLastChar()\n return true\n }\n },\n description: 'Delete character',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: true },\n priority: 100,\n })\n\n // ============================================\n // PROMPT NAVIGATION (high priority)\n // ============================================\n\n // Choice prompt: up/down to navigate, enter to select\n bindings.push({\n key: ['up', 'k'],\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (prompt?.type === 'choice' || prompt?.type === 'multiChoice') {\n screen?.promptNavigateUp()\n return true\n }\n },\n description: 'Navigate up',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n bindings.push({\n key: ['down', 'j'],\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (prompt?.type === 'choice' || prompt?.type === 'multiChoice') {\n screen?.promptNavigateDown()\n return true\n }\n },\n description: 'Navigate down',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n // Confirm prompt: left/right to toggle\n bindings.push({\n key: ['left', 'h'],\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (prompt?.type === 'confirm') {\n screen?.promptNavigateLeft()\n return true\n }\n },\n description: 'Select confirm',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n bindings.push({\n key: ['right', 'l'],\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (prompt?.type === 'confirm') {\n screen?.promptNavigateRight()\n return true\n }\n },\n description: 'Select cancel',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n // Space to toggle in multiChoice\n bindings.push({\n key: 'space',\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (prompt?.type === 'multiChoice') {\n screen?.promptToggleSelection()\n return true\n }\n },\n description: 'Toggle selection',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n // Enter to submit prompt (or enter input mode for choice with input)\n bindings.push({\n key: 'return',\n handler: () => {\n const screen = getActiveScreen()\n const prompt = screen?.getActivePrompt()\n if (!prompt) return false\n\n if (prompt.type === 'choice') {\n const entered = screen?.promptEnterInputMode()\n if (!entered) {\n screen?.promptSubmit()\n }\n return true\n } else if (prompt.type === 'confirm') {\n screen?.promptSubmit()\n return true\n } else if (prompt.type === 'multiChoice') {\n if (screen?.canSubmitPrompt()) {\n screen.promptSubmit()\n }\n return true\n }\n },\n description: 'Submit selection',\n category: 'prompt',\n when: { hasPrompt: true, inInputMode: false },\n priority: 90,\n })\n\n // ============================================\n // HELP OVERLAY\n // ============================================\n\n bindings.push({\n key: '?',\n handler: () => {\n toggleHelp()\n return true\n },\n description: 'Toggle help',\n category: 'general',\n when: { hasPrompt: false, isFilterActive: false },\n priority: 50,\n })\n\n // Escape to close help\n bindings.push({\n key: 'escape',\n handler: () => {\n toggleHelp()\n return true\n },\n description: 'Close help',\n category: 'general',\n when: { isHelpVisible: true },\n priority: 80,\n })\n\n // ============================================\n // FILTER\n // ============================================\n\n bindings.push({\n key: '/',\n handler: () => {\n toggleFilter()\n return true\n },\n description: 'Toggle filter',\n category: 'filter',\n when: { hasPrompt: false, isHelpVisible: false },\n priority: 50,\n })\n\n // Escape to close filter\n bindings.push({\n key: 'escape',\n handler: () => {\n closeFilter()\n return true\n },\n description: 'Close filter',\n category: 'filter',\n when: { isFilterActive: true },\n priority: 70,\n })\n\n // Tab to cycle filter fields\n bindings.push({\n key: 'tab',\n handler: () => {\n handlers.filterCycleField()\n return true\n },\n description: 'Cycle filter fields',\n category: 'filter',\n when: { isFilterActive: true },\n priority: 70,\n })\n\n // Backspace in filter\n bindings.push({\n key: 'backspace',\n handler: () => {\n handlers.filterDeleteChar()\n return true\n },\n description: 'Delete character',\n category: 'filter',\n when: { isFilterActive: true },\n priority: 70,\n })\n\n // Number keys 1-7 to toggle log levels in filter\n for (let i = 1; i <= 7; i++) {\n bindings.push({\n key: String(i),\n handler: () => {\n handlers.filterToggleLevel(i - 1)\n return true\n },\n description: `Toggle level ${i}`,\n category: 'filter',\n when: { isFilterActive: true },\n priority: 70,\n })\n }\n\n // ============================================\n // GENERAL\n // ============================================\n\n bindings.push({\n key: 'q',\n handler: () => {\n manager.unbind()\n return true\n },\n description: 'Exit',\n category: 'general',\n when: { hasPrompt: false, isFilterActive: false, isHelpVisible: false },\n priority: 10,\n })\n\n // Tab to switch focus\n bindings.push({\n key: 'tab',\n handler: (_, ctx) => {\n if (ctx.hasSidebar) {\n manager.toggleFocus()\n return true\n }\n },\n description: 'Toggle focus',\n category: 'navigation',\n when: { hasPrompt: false, isFilterActive: false },\n priority: 20,\n })\n\n // Backslash to toggle focus (alternate)\n bindings.push({\n key: '\\\\',\n handler: (_, ctx) => {\n if (ctx.hasSidebar) {\n manager.toggleFocus()\n return true\n }\n },\n description: 'Toggle focus',\n category: 'navigation',\n when: { hasPrompt: false, isFilterActive: false },\n priority: 20,\n })\n\n // ============================================\n // SIDEBAR NAVIGATION\n // ============================================\n\n bindings.push({\n key: ['up', 'k'],\n handler: () => {\n manager.navigateUp()\n return true\n },\n description: 'Navigate up',\n category: 'navigation',\n when: { focusArea: 'sidebar', hasPrompt: false },\n priority: 30,\n })\n\n bindings.push({\n key: ['down', 'j'],\n handler: () => {\n manager.navigateDown()\n return true\n },\n description: 'Navigate down',\n category: 'navigation',\n when: { focusArea: 'sidebar', hasPrompt: false },\n priority: 30,\n })\n\n bindings.push({\n key: 'return',\n handler: () => {\n manager.selectCurrent()\n return true\n },\n description: 'Select screen',\n category: 'navigation',\n when: { focusArea: 'sidebar', hasPrompt: false },\n priority: 30,\n })\n\n // ============================================\n // SCREEN SHORTCUTS (1-9)\n // ============================================\n\n for (let i = 1; i <= 9; i++) {\n bindings.push({\n key: String(i),\n handler: () => {\n const screens = manager.getScreens()\n if (i <= screens.length) {\n manager.setActiveScreen(screens[i - 1]!)\n manager.setSelectedIndex(i - 1)\n return true\n }\n },\n description: `Jump to screen ${i}`,\n category: 'screen',\n when: { hasPrompt: false, isFilterActive: false },\n priority: 15,\n })\n }\n\n // ============================================\n // SCREEN ACTIONS\n // ============================================\n\n bindings.push({\n key: 'c',\n handler: () => {\n const screen = getActiveScreen()\n screen?.clear()\n return true\n },\n description: 'Clear screen',\n category: 'screen',\n when: { focusArea: 'content', hasPrompt: false, isFilterActive: false },\n priority: 15,\n })\n\n return bindings\n}\n\n/**\n * Handle printable character input for prompts and filter.\n * This should be called for any key not handled by bindings.\n */\nexport function handlePrintableInput(\n key: KeyEvent,\n context: KeyboardContext,\n handlers: BindingHandlers,\n): boolean {\n // Only handle single printable characters without modifiers\n if (!key.sequence || key.sequence.length !== 1 || key.ctrl || key.meta) {\n return false\n }\n\n const charCode = key.sequence.charCodeAt(0)\n // Printable ASCII (space to tilde)\n if (charCode < 32 || charCode > 126) {\n return false\n }\n\n // Handle filter input\n if (context.isFilterActive) {\n handlers.filterAppendChar(key.sequence)\n return true\n }\n\n // Handle prompt input mode\n if (context.hasPrompt && context.inInputMode) {\n const screen = handlers.getActiveScreen()\n screen?.promptAppendInput(key.sequence)\n return true\n }\n\n return false\n}\n","import { ALL_LOG_LEVELS } from '../types/index.ts'\n\nimport type { FilterState, LevelCounts, LogMessageData, MessageData } from '../types/index.ts'\n\n/**\n * Filter engine for filtering log messages.\n */\nexport class FilterEngine {\n /**\n * Apply filter to messages array.\n */\n static filterMessages(messages: MessageData[], filter: FilterState): MessageData[] {\n // If no filtering active, return original\n if (filter.searchQuery === '' && filter.enabledLevels.size === ALL_LOG_LEVELS.length) {\n return messages\n }\n\n return messages.filter((msg) => {\n // Always show non-log messages unless searching\n if (msg.type !== 'log') {\n // For search, check if any content matches\n if (filter.searchQuery) {\n return this.messageMatchesSearch(msg, filter.searchQuery)\n }\n // Group markers need special handling\n if (msg.type === 'group') {\n return true // Always show group markers\n }\n return true\n }\n\n // Log message filtering\n const logMsg = msg as LogMessageData\n\n // Check log level\n if (!filter.enabledLevels.has(logMsg.level)) {\n return false\n }\n\n // Check search query\n if (filter.searchQuery && !this.messageMatchesSearch(logMsg, filter.searchQuery)) {\n return false\n }\n\n return true\n })\n }\n\n /**\n * Check if a message matches the search query.\n */\n private static messageMatchesSearch(msg: MessageData, query: string): boolean {\n const lowerQuery = query.toLowerCase()\n\n switch (msg.type) {\n case 'log':\n return (\n msg.content.toLowerCase().includes(lowerQuery) ||\n (msg.label?.toLowerCase().includes(lowerQuery) ?? false)\n )\n case 'file':\n case 'fileError':\n return (\n msg.filePath.toLowerCase().includes(lowerQuery) ||\n msg.content.toLowerCase().includes(lowerQuery)\n )\n case 'diff':\n return (\n msg.filePath.toLowerCase().includes(lowerQuery) ||\n msg.diff.toLowerCase().includes(lowerQuery)\n )\n case 'loading':\n return (\n msg.content.toLowerCase().includes(lowerQuery) ||\n (msg.resolvedContent?.toLowerCase().includes(lowerQuery) ?? false)\n )\n case 'progress':\n return msg.label.toLowerCase().includes(lowerQuery)\n case 'group':\n return msg.label.toLowerCase().includes(lowerQuery)\n case 'table':\n return (\n (msg.title?.toLowerCase().includes(lowerQuery) ?? false) ||\n msg.headers.some((h) => h.toLowerCase().includes(lowerQuery)) ||\n msg.rows.some((row) => row.some((cell) => cell.toLowerCase().includes(lowerQuery)))\n )\n default:\n return false\n }\n }\n\n /**\n * Count messages by log level.\n */\n static countByLevel(messages: MessageData[]): LevelCounts {\n const counts: LevelCounts = {\n debug: 0,\n log: 0,\n verbose: 0,\n error: 0,\n fatal: 0,\n warn: 0,\n }\n\n for (const msg of messages) {\n if (msg.type === 'log') {\n counts[(msg as LogMessageData).level]++\n }\n }\n\n return counts\n }\n}\n"],"mappings":"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"}