@navios/commander-tui 1.3.0 → 1.5.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 (240) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/{src/__tests__/mocks/scm-mock.ts → dist/base/src/__tests__/mocks/scm-mock.d.ts} +3 -1
  3. package/dist/base/src/__tests__/mocks/scm-mock.d.ts.map +1 -0
  4. package/dist/base/src/__tests__/setup.d.ts +2 -0
  5. package/dist/base/src/__tests__/setup.d.ts.map +1 -0
  6. package/dist/base/src/__tests__/utils/factories.d.ts +67 -0
  7. package/dist/base/src/__tests__/utils/factories.d.ts.map +1 -0
  8. package/dist/base/src/__tests__/utils/render-utils.d.ts +21 -0
  9. package/dist/base/src/__tests__/utils/render-utils.d.ts.map +1 -0
  10. package/dist/base/src/__tests__/utils/test-container.d.ts +20 -0
  11. package/dist/base/src/__tests__/utils/test-container.d.ts.map +1 -0
  12. package/dist/base/src/adapters/interface.d.ts +9 -2
  13. package/dist/base/src/adapters/interface.d.ts.map +1 -1
  14. package/dist/base/src/overrides/missing-adapter.override.d.ts +10 -0
  15. package/dist/base/src/overrides/missing-adapter.override.d.ts.map +1 -1
  16. package/dist/base/src/services/index.d.ts +1 -0
  17. package/dist/base/src/services/index.d.ts.map +1 -1
  18. package/dist/base/src/services/logger.d.ts.map +1 -1
  19. package/dist/base/src/services/readline_prompt.d.ts +27 -0
  20. package/dist/base/src/services/readline_prompt.d.ts.map +1 -0
  21. package/dist/base/src/services/screen.d.ts +14 -8
  22. package/dist/base/src/services/screen.d.ts.map +1 -1
  23. package/dist/base/src/services/screen_manager.d.ts +62 -12
  24. package/dist/base/src/services/screen_manager.d.ts.map +1 -1
  25. package/dist/base/src/tokens/logger.d.ts +2 -2
  26. package/dist/base/src/types/events.types.d.ts +40 -0
  27. package/dist/base/src/types/events.types.d.ts.map +1 -0
  28. package/dist/base/src/types/index.d.ts +1 -0
  29. package/dist/base/src/types/index.d.ts.map +1 -1
  30. package/dist/base/src/types/screen.types.d.ts +28 -0
  31. package/dist/base/src/types/screen.types.d.ts.map +1 -1
  32. package/dist/base/src/utils/colors/helpers.d.ts +0 -16
  33. package/dist/base/src/utils/colors/helpers.d.ts.map +1 -1
  34. package/dist/base/src/utils/index.d.ts +2 -0
  35. package/dist/base/src/utils/index.d.ts.map +1 -1
  36. package/dist/base/src/utils/prompt.d.ts +7 -0
  37. package/dist/base/src/utils/prompt.d.ts.map +1 -0
  38. package/dist/base/src/utils/runtime.d.ts +10 -0
  39. package/dist/base/src/utils/runtime.d.ts.map +1 -0
  40. package/dist/base/src/utils/stdout-printer.d.ts +5 -0
  41. package/dist/base/src/utils/stdout-printer.d.ts.map +1 -1
  42. package/dist/base/tsconfig.base.tsbuildinfo +1 -1
  43. package/dist/base/tsconfig.tsbuildinfo +1 -0
  44. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts +28 -0
  45. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts.map +1 -0
  46. package/dist/ink/src/adapters/ink/components/file/index.d.ts +2 -0
  47. package/dist/ink/src/adapters/ink/components/file/index.d.ts.map +1 -0
  48. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts +7 -0
  49. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts.map +1 -0
  50. package/dist/ink/src/adapters/ink/components/filter/index.d.ts +2 -0
  51. package/dist/ink/src/adapters/ink/components/filter/index.d.ts.map +1 -0
  52. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts +6 -0
  53. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts.map +1 -0
  54. package/dist/ink/src/adapters/ink/components/help/index.d.ts +2 -0
  55. package/dist/ink/src/adapters/ink/components/help/index.d.ts.map +1 -0
  56. package/dist/ink/src/adapters/ink/components/index.d.ts +9 -0
  57. package/dist/ink/src/adapters/ink/components/index.d.ts.map +1 -0
  58. package/dist/ink/src/adapters/ink/components/log/index.d.ts +2 -0
  59. package/dist/ink/src/adapters/ink/components/log/index.d.ts.map +1 -0
  60. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts +15 -0
  61. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts.map +1 -0
  62. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts +2 -0
  63. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts.map +1 -0
  64. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts +6 -0
  65. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts.map +1 -0
  66. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts +14 -0
  67. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts.map +1 -0
  68. package/dist/ink/src/adapters/ink/components/screen/index.d.ts +7 -0
  69. package/dist/ink/src/adapters/ink/components/screen/index.d.ts.map +1 -0
  70. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts +6 -0
  71. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts.map +1 -0
  72. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts +6 -0
  73. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts.map +1 -0
  74. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts +6 -0
  75. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts.map +1 -0
  76. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts +14 -0
  77. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts.map +1 -0
  78. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts +6 -0
  79. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts.map +1 -0
  80. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts +8 -0
  81. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts.map +1 -0
  82. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts +4 -0
  83. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts.map +1 -0
  84. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts +11 -0
  85. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts.map +1 -0
  86. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts +9 -0
  87. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts.map +1 -0
  88. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts +2 -0
  89. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts.map +1 -0
  90. package/dist/ink/src/adapters/ink/context/index.d.ts +2 -0
  91. package/dist/ink/src/adapters/ink/context/index.d.ts.map +1 -0
  92. package/dist/ink/src/adapters/ink/context/logger_context.d.ts +33 -0
  93. package/dist/ink/src/adapters/ink/context/logger_context.d.ts.map +1 -0
  94. package/dist/ink/src/adapters/ink/hooks/index.d.ts +2 -0
  95. package/dist/ink/src/adapters/ink/hooks/index.d.ts.map +1 -0
  96. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts +7 -0
  97. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts.map +1 -0
  98. package/dist/ink/src/adapters/ink/index.d.ts +18 -0
  99. package/dist/ink/src/adapters/ink/index.d.ts.map +1 -0
  100. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts +4 -0
  101. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  102. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  103. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  104. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  105. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  106. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  107. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  108. package/dist/ink/src/adapters/react-shared/index.d.ts +2 -0
  109. package/dist/ink/src/adapters/react-shared/index.d.ts.map +1 -0
  110. package/dist/ink/tsconfig.ink.tsbuildinfo +1 -0
  111. package/dist/react/src/adapters/react-shared/hooks/index.d.ts +4 -0
  112. package/dist/react/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  113. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  114. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  115. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  116. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  117. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  118. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  119. package/dist/react/src/adapters/react-shared/index.d.ts +2 -0
  120. package/dist/react/src/adapters/react-shared/index.d.ts.map +1 -0
  121. package/dist/react/tsconfig.react.tsbuildinfo +1 -1
  122. package/dist/solid/tsconfig.solid.tsbuildinfo +1 -1
  123. package/lib/index.cjs +2180 -181
  124. package/lib/index.cjs.map +1 -1
  125. package/lib/index.d.cts +3199 -277
  126. package/lib/index.d.cts.map +1 -0
  127. package/lib/index.d.mts +3199 -277
  128. package/lib/index.d.mts.map +1 -0
  129. package/lib/index.mjs +2101 -138
  130. package/lib/index.mjs.map +1 -1
  131. package/package.json +1 -31
  132. package/src/__tests__/services/logger.spec.ts +32 -0
  133. package/src/__tests__/services/screen.spec.ts +114 -101
  134. package/src/__tests__/utils/factories.ts +2 -0
  135. package/src/adapters/interface.ts +10 -2
  136. package/src/overrides/missing-adapter.override.ts +16 -6
  137. package/src/services/index.ts +1 -0
  138. package/src/services/logger.ts +7 -1
  139. package/src/services/readline_prompt.ts +194 -0
  140. package/src/services/screen.ts +108 -57
  141. package/src/services/screen_manager.ts +287 -74
  142. package/src/types/events.types.ts +84 -0
  143. package/src/types/index.ts +3 -0
  144. package/src/types/screen.types.ts +34 -0
  145. package/src/utils/colors/helpers.ts +0 -25
  146. package/src/utils/index.ts +6 -0
  147. package/src/utils/prompt.ts +18 -0
  148. package/src/utils/runtime.ts +14 -0
  149. package/src/utils/stdout-printer.ts +16 -5
  150. package/tsconfig.base.json +1 -17
  151. package/tsconfig.json +1 -6
  152. package/tsdown.config.mts +13 -70
  153. package/lib/adapters/react/index.cjs +0 -1768
  154. package/lib/adapters/react/index.cjs.map +0 -1
  155. package/lib/adapters/react/index.d.cts +0 -80
  156. package/lib/adapters/react/index.d.mts +0 -80
  157. package/lib/adapters/react/index.mjs +0 -1760
  158. package/lib/adapters/react/index.mjs.map +0 -1
  159. package/lib/adapters/solid/index.cjs +0 -3855
  160. package/lib/adapters/solid/index.cjs.map +0 -1
  161. package/lib/adapters/solid/index.d.cts +0 -74
  162. package/lib/adapters/solid/index.d.mts +0 -74
  163. package/lib/adapters/solid/index.mjs +0 -3847
  164. package/lib/adapters/solid/index.mjs.map +0 -1
  165. package/lib/filter_engine-DXqu9Vaq.cjs +0 -1836
  166. package/lib/filter_engine-DXqu9Vaq.cjs.map +0 -1
  167. package/lib/filter_engine-DmqhEhpA.mjs +0 -1609
  168. package/lib/filter_engine-DmqhEhpA.mjs.map +0 -1
  169. package/lib/interface-CTHQ08aY.d.mts +0 -699
  170. package/lib/interface-DQEIz9Mb.d.cts +0 -699
  171. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +0 -2293
  172. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +0 -1414
  173. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +0 -3245
  174. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +0 -1783
  175. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +0 -3203
  176. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +0 -2857
  177. package/src/__tests__/components/filter_bar.spec.tsx +0 -190
  178. package/src/__tests__/components/loading_message.spec.tsx +0 -110
  179. package/src/__tests__/components/log_message.spec.tsx +0 -166
  180. package/src/__tests__/components/progress_message.spec.tsx +0 -147
  181. package/src/__tests__/components/prompt_renderer.spec.tsx +0 -274
  182. package/src/__tests__/components/sidebar.spec.tsx +0 -322
  183. package/src/__tests__/utils/render-utils.tsx +0 -39
  184. package/src/adapters/react/components/file/file_log.tsx +0 -241
  185. package/src/adapters/react/components/file/index.ts +0 -1
  186. package/src/adapters/react/components/filter/filter_bar.tsx +0 -79
  187. package/src/adapters/react/components/filter/index.ts +0 -1
  188. package/src/adapters/react/components/help/help_overlay.tsx +0 -100
  189. package/src/adapters/react/components/help/index.ts +0 -1
  190. package/src/adapters/react/components/log/index.ts +0 -1
  191. package/src/adapters/react/components/log/log_message.tsx +0 -102
  192. package/src/adapters/react/components/prompt/index.ts +0 -2
  193. package/src/adapters/react/components/prompt/prompt_renderer.tsx +0 -346
  194. package/src/adapters/react/components/screen/group_renderer.tsx +0 -64
  195. package/src/adapters/react/components/screen/index.ts +0 -6
  196. package/src/adapters/react/components/screen/loading_message.tsx +0 -43
  197. package/src/adapters/react/components/screen/message_renderer.tsx +0 -108
  198. package/src/adapters/react/components/screen/progress_message.tsx +0 -60
  199. package/src/adapters/react/components/screen/screen_bridge.tsx +0 -149
  200. package/src/adapters/react/components/screen/table_message.tsx +0 -57
  201. package/src/adapters/react/components/screen_manager_bridge.tsx +0 -245
  202. package/src/adapters/react/components/sidebar/index.ts +0 -3
  203. package/src/adapters/react/components/sidebar/sidebar.tsx +0 -102
  204. package/src/adapters/react/components/sidebar/sidebar_item.tsx +0 -50
  205. package/src/adapters/react/components/sidebar/sidebar_separator.tsx +0 -13
  206. package/src/adapters/react/context/index.ts +0 -1
  207. package/src/adapters/react/context/logger_context.tsx +0 -109
  208. package/src/adapters/react/hooks/index.ts +0 -1
  209. package/src/adapters/react/hooks/use_theme.ts +0 -12
  210. package/src/adapters/react/index.ts +0 -39
  211. package/src/adapters/solid/components/file/file_log.tsx +0 -221
  212. package/src/adapters/solid/components/file/index.ts +0 -1
  213. package/src/adapters/solid/components/filter/filter_bar.tsx +0 -84
  214. package/src/adapters/solid/components/filter/index.ts +0 -1
  215. package/src/adapters/solid/components/help/help_overlay.tsx +0 -106
  216. package/src/adapters/solid/components/help/index.ts +0 -1
  217. package/src/adapters/solid/components/log/index.ts +0 -1
  218. package/src/adapters/solid/components/log/log_message.tsx +0 -92
  219. package/src/adapters/solid/components/prompt/index.ts +0 -2
  220. package/src/adapters/solid/components/prompt/prompt_renderer.tsx +0 -350
  221. package/src/adapters/solid/components/screen/group_renderer.tsx +0 -61
  222. package/src/adapters/solid/components/screen/index.ts +0 -6
  223. package/src/adapters/solid/components/screen/loading_message.tsx +0 -39
  224. package/src/adapters/solid/components/screen/message_renderer.tsx +0 -122
  225. package/src/adapters/solid/components/screen/progress_message.tsx +0 -61
  226. package/src/adapters/solid/components/screen/screen_bridge.tsx +0 -155
  227. package/src/adapters/solid/components/screen/table_message.tsx +0 -58
  228. package/src/adapters/solid/components/screen_manager_bridge.tsx +0 -243
  229. package/src/adapters/solid/components/sidebar/index.ts +0 -3
  230. package/src/adapters/solid/components/sidebar/sidebar.tsx +0 -108
  231. package/src/adapters/solid/components/sidebar/sidebar_item.tsx +0 -55
  232. package/src/adapters/solid/components/sidebar/sidebar_separator.tsx +0 -13
  233. package/src/adapters/solid/context/index.ts +0 -2
  234. package/src/adapters/solid/context/logger_context.tsx +0 -95
  235. package/src/adapters/solid/hooks/index.ts +0 -1
  236. package/src/adapters/solid/hooks/use_theme.ts +0 -12
  237. package/src/adapters/solid/index.tsx +0 -43
  238. package/src/adapters/solid/jsx.d.ts +0 -98
  239. package/tsconfig.react.json +0 -16
  240. package/tsconfig.solid.json +0 -16
@@ -1,1836 +0,0 @@
1
- let _opentui_core = require("@opentui/core");
2
- let _navios_core = require("@navios/core");
3
-
4
- //#region src/types/filter.types.ts
5
- /**
6
- * All log levels in order.
7
- */ const ALL_LOG_LEVELS = [
8
- "verbose",
9
- "debug",
10
- "log",
11
- "warn",
12
- "error",
13
- "fatal"
14
- ];
15
- /**
16
- * Create a default filter state.
17
- */ function createDefaultFilterState() {
18
- return {
19
- enabledLevels: new Set(ALL_LOG_LEVELS),
20
- searchQuery: "",
21
- isVisible: false,
22
- focusedField: "search"
23
- };
24
- }
25
- /**
26
- * Check if any filtering is active.
27
- */ function hasActiveFilter(filter) {
28
- return filter.searchQuery !== "" || filter.enabledLevels.size < ALL_LOG_LEVELS.length;
29
- }
30
-
31
- //#endregion
32
- //#region src/utils/colors/log-colors.ts
33
- /**
34
- * Default color scheme for all log levels.
35
- * Each level has a prominent border color and a subtle background tint.
36
- */ const DEFAULT_LOG_LEVEL_COLORS = {
37
- verbose: {
38
- border: "#6B7280",
39
- background: "#6B728015"
40
- },
41
- debug: {
42
- border: "#8B5CF6",
43
- background: "#8B5CF615"
44
- },
45
- log: {
46
- border: "#3B82F6",
47
- background: "#3B82F615"
48
- },
49
- warn: {
50
- border: "#F59E0B",
51
- background: "#F59E0B15"
52
- },
53
- error: {
54
- border: "#EF4444",
55
- background: "#EF444415"
56
- },
57
- fatal: {
58
- border: "#DC2626",
59
- background: "#DC262625",
60
- text: "#FCA5A5"
61
- }
62
- };
63
- /**
64
- * Colors for semantic variants (override level colors when variant is set).
65
- */ const VARIANT_COLORS = {
66
- success: {
67
- border: "#22C55E",
68
- background: "#22C55E15"
69
- },
70
- trace: {
71
- border: "#6B7280",
72
- background: "#6B728015"
73
- }
74
- };
75
- /**
76
- * Error highlighting colors.
77
- */ const ERROR_HIGHLIGHT_COLORS = {
78
- background: "#EF444425",
79
- border: "#EF4444",
80
- gutterBackground: "#EF444440"
81
- };
82
-
83
- //#endregion
84
- //#region src/utils/colors/sidebar-colors.ts
85
- /**
86
- * Sidebar colors.
87
- */ const SIDEBAR_COLORS = {
88
- background: void 0,
89
- selectedBackground: "#1F293780",
90
- hoverBackground: "#374151",
91
- text: "#E5E7EB",
92
- textDim: "#6B7280",
93
- border: "#374151",
94
- badge: "#3B82F6",
95
- focusBorder: "#3B82F6"
96
- };
97
- /**
98
- * Screen header colors.
99
- */ const HEADER_COLORS = {
100
- background: void 0,
101
- text: "#F9FAFB",
102
- border: "#374151"
103
- };
104
- /**
105
- * Screen status indicator colors and icons.
106
- */ const STATUS_INDICATORS = {
107
- waiting: {
108
- icon: "○",
109
- color: "#6B7280"
110
- },
111
- pending: {
112
- icon: "◐",
113
- color: "#F59E0B"
114
- },
115
- success: {
116
- icon: "✓",
117
- color: "#22C55E"
118
- },
119
- fail: {
120
- icon: "✗",
121
- color: "#EF4444"
122
- }
123
- };
124
- /**
125
- * Separator colors for sidebar sections.
126
- */ const SEPARATOR_COLORS = {
127
- line: "#374151",
128
- text: "#6B7280"
129
- };
130
-
131
- //#endregion
132
- //#region src/utils/colors/progress-colors.ts
133
- /**
134
- * Progress bar colors.
135
- */ const PROGRESS_COLORS = {
136
- border: "#3B82F6",
137
- background: "#3B82F615",
138
- barFilled: "#3B82F6",
139
- barEmpty: "#374151",
140
- text: "#E5E7EB",
141
- textDim: "#9CA3AF",
142
- complete: "#22C55E",
143
- completeBackground: "#22C55E15",
144
- failed: "#EF4444",
145
- failedBackground: "#EF444415"
146
- };
147
- /**
148
- * Group colors for collapsible log groups.
149
- */ const GROUP_COLORS = {
150
- border: "#6B7280",
151
- background: "#6B728010",
152
- headerText: "#E5E7EB",
153
- icon: "#9CA3AF"
154
- };
155
-
156
- //#endregion
157
- //#region src/utils/colors/table-colors.ts
158
- /**
159
- * Table colors (uses info/blue scheme).
160
- */ const TABLE_COLORS = {
161
- border: "#3B82F6",
162
- background: "#3B82F615",
163
- headerText: "#F9FAFB",
164
- cellText: "#E5E7EB",
165
- title: "#F9FAFB",
166
- separator: "#3B82F650"
167
- };
168
-
169
- //#endregion
170
- //#region src/utils/colors/file-colors.ts
171
- /**
172
- * File display colors (uses info/blue scheme).
173
- */ const FILE_COLORS = {
174
- border: "#3B82F6",
175
- background: "#3B82F615",
176
- headerText: "#F9FAFB",
177
- headerBackground: "#3B82F625"
178
- };
179
-
180
- //#endregion
181
- //#region src/utils/colors/prompt-colors.ts
182
- /**
183
- * Prompt colors for interactive prompts.
184
- */ const PROMPT_COLORS = {
185
- question: "#F9FAFB",
186
- optionText: "#E5E7EB",
187
- optionTextDim: "#9CA3AF",
188
- optionSelected: "#3B82F6",
189
- optionSelectedBackground: "#1E3A5F",
190
- confirmButton: "#22C55E",
191
- cancelButton: "#EF4444",
192
- buttonBackground: "#374151",
193
- buttonSelectedBackground: "#1F2937",
194
- inputBorder: "#3B82F6",
195
- inputBackground: "#1F2937",
196
- inputText: "#F9FAFB",
197
- inputPlaceholder: "#6B7280",
198
- inputCursor: "#3B82F6",
199
- border: "#374151",
200
- focusBorder: "#3B82F6"
201
- };
202
-
203
- //#endregion
204
- //#region src/utils/colors/helpers.ts
205
- /**
206
- * Creates a tinted (subtle) version of a color by setting alpha.
207
- *
208
- * @param color - The base color (hex string or RGBA)
209
- * @param alpha - Target alpha value (0-1), default 0.08 for subtle tinting
210
- * @returns New RGBA with adjusted alpha
211
- */ function createTintedColor(color, alpha = .08) {
212
- const rgba = typeof color === "string" ? _opentui_core.RGBA.fromHex(color) : color;
213
- return _opentui_core.RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha);
214
- }
215
- /**
216
- * Creates a more prominent version of a color for borders.
217
- *
218
- * @param color - The base color
219
- * @param alpha - Target alpha, default 1.0 for solid borders
220
- */ function createBorderColor(color, alpha = 1) {
221
- const rgba = typeof color === "string" ? _opentui_core.RGBA.fromHex(color) : color;
222
- return _opentui_core.RGBA.fromValues(rgba.r, rgba.g, rgba.b, alpha);
223
- }
224
- /**
225
- * Gets colors for a specific log level.
226
- *
227
- * @param level - The log level
228
- * @param customColors - Optional custom color map
229
- */ function getLogLevelColors(level, customColors) {
230
- const defaultColors = DEFAULT_LOG_LEVEL_COLORS[level];
231
- const custom = customColors?.[level];
232
- return {
233
- border: custom?.border ?? defaultColors.border,
234
- background: custom?.background ?? defaultColors.background,
235
- text: custom?.text ?? defaultColors.text
236
- };
237
- }
238
-
239
- //#endregion
240
- //#region src/utils/filetype.ts
241
- /**
242
- * Common file extension to filetype mapping for syntax highlighting.
243
- */ const COMMON_FILETYPES = {
244
- ts: "typescript",
245
- tsx: "tsx",
246
- js: "javascript",
247
- jsx: "javascript",
248
- json: "json",
249
- md: "markdown",
250
- py: "python",
251
- rs: "rust",
252
- go: "go",
253
- java: "java",
254
- c: "c",
255
- cpp: "cpp",
256
- h: "c",
257
- hpp: "cpp",
258
- css: "css",
259
- html: "html",
260
- yaml: "yaml",
261
- yml: "yaml",
262
- sh: "bash",
263
- bash: "bash",
264
- zsh: "bash",
265
- toml: "toml",
266
- xml: "xml",
267
- sql: "sql",
268
- rb: "ruby",
269
- php: "php",
270
- swift: "swift",
271
- kt: "kotlin",
272
- scala: "scala",
273
- hs: "haskell",
274
- elm: "elm",
275
- vue: "vue",
276
- svelte: "svelte"
277
- };
278
- /**
279
- * Resolves filetype from file path for syntax highlighting.
280
- *
281
- * @param filePath - Full file path or just filename
282
- * @returns Filetype string for tree-sitter, or undefined
283
- */ function resolveFiletype(filePath) {
284
- const lastDot = filePath.lastIndexOf(".");
285
- if (lastDot === -1) return void 0;
286
- return COMMON_FILETYPES[filePath.slice(lastDot + 1).toLowerCase()];
287
- }
288
- /**
289
- * Gets the filename from a full path.
290
- *
291
- * @param filePath - Full file path
292
- * @returns Just the filename
293
- */ function getFileName(filePath) {
294
- const lastSlash = Math.max(filePath.lastIndexOf("/"), filePath.lastIndexOf("\\"));
295
- return lastSlash === -1 ? filePath : filePath.slice(lastSlash + 1);
296
- }
297
-
298
- //#endregion
299
- //#region src/utils/stdout-printer.ts
300
- const RESET = "\x1B[0m";
301
- const BOLD = "\x1B[1m";
302
- const DIM = "\x1B[2m";
303
- function hexToAnsi(hex, isForeground = true) {
304
- const cleanHex = hex.replace("#", "").slice(0, 6);
305
- if (!/^[0-9A-Fa-f]{6}$/.test(cleanHex)) return "";
306
- const r = parseInt(cleanHex.slice(0, 2), 16);
307
- const g = parseInt(cleanHex.slice(2, 4), 16);
308
- const b = parseInt(cleanHex.slice(4, 6), 16);
309
- return `\x1b[${isForeground ? 38 : 48};2;${r};${g};${b}m`;
310
- }
311
- function getLogLevelAnsiColor(level, variant) {
312
- return hexToAnsi((variant ? VARIANT_COLORS[variant] : DEFAULT_LOG_LEVEL_COLORS[level]).border, true);
313
- }
314
- function formatLevel(level, variant) {
315
- return `${getLogLevelAnsiColor(level, variant)}${BOLD}[${(variant ?? level).toUpperCase().padEnd(7)}]${RESET}`;
316
- }
317
- function formatTimestamp(date) {
318
- return `${DIM}${date.toLocaleTimeString()}${RESET}`;
319
- }
320
- function printMessage(message, stream) {
321
- switch (message.type) {
322
- case "log": {
323
- const logMessage = message;
324
- const timestamp = formatTimestamp(message.timestamp);
325
- const level = formatLevel(logMessage.level, logMessage.variant);
326
- const label = logMessage.label ? ` ${DIM}[${logMessage.label}]${RESET}` : "";
327
- stream.write(`${timestamp} ${level}${label} ${logMessage.content}\n`);
328
- break;
329
- }
330
- case "file": {
331
- const header = `${DIM}─── ${message.filePath} ───${RESET}`;
332
- stream.write(`${header}\n${message.content}\n`);
333
- break;
334
- }
335
- case "diff": {
336
- const header = `${DIM}─── ${message.filePath} (diff) ───${RESET}`;
337
- const coloredDiff = message.diff.split("\n").map((line) => {
338
- if (line.startsWith("+") && !line.startsWith("+++")) return `\x1b[32m${line}${RESET}`;
339
- else if (line.startsWith("-") && !line.startsWith("---")) return `\x1b[31m${line}${RESET}`;
340
- else if (line.startsWith("@@")) return `\x1b[36m${line}${RESET}`;
341
- return line;
342
- }).join("\n");
343
- stream.write(`${header}\n${coloredDiff}\n`);
344
- break;
345
- }
346
- case "fileError": {
347
- const header = `${DIM}─── ${message.filePath} ───${RESET}`;
348
- const errorLineSet = new Set(message.errorLines);
349
- const startLine = message.startLine ?? 1;
350
- const numberedLines = message.content.split("\n").map((line, index) => {
351
- const lineNum = startLine + index;
352
- const numStr = String(lineNum).padStart(4);
353
- if (errorLineSet.has(lineNum)) return `\x1b[31m${numStr} │ ${line}${RESET}`;
354
- return `${DIM}${numStr}${RESET} │ ${line}`;
355
- });
356
- stream.write(`${header}\n${numberedLines.join("\n")}\n`);
357
- break;
358
- }
359
- case "loading": {
360
- const loadingMessage = message;
361
- const status = loadingMessage.status;
362
- const content = loadingMessage.resolvedContent ?? loadingMessage.content;
363
- let level = "log";
364
- let variant;
365
- if (status === "success") {
366
- level = "log";
367
- variant = "success";
368
- } else if (status === "fail") level = "error";
369
- const timestamp = formatTimestamp(message.timestamp);
370
- const levelStr = formatLevel(level, variant);
371
- const prefix = status === "loading" ? "... " : "";
372
- stream.write(`${timestamp} ${levelStr} ${prefix}${content}\n`);
373
- break;
374
- }
375
- case "progress": {
376
- const { label, current, total, status, resolvedContent } = message;
377
- const percentage = total > 0 ? Math.round(current / total * 100) : 0;
378
- const barWidth = 20;
379
- const filledWidth = Math.round(percentage / 100 * barWidth);
380
- const emptyWidth = barWidth - filledWidth;
381
- const progressColor = hexToAnsi(PROGRESS_COLORS.barFilled);
382
- const emptyColor = hexToAnsi(PROGRESS_COLORS.barEmpty);
383
- const filledBar = "█".repeat(filledWidth);
384
- const emptyBar = "░".repeat(emptyWidth);
385
- let statusIcon = "";
386
- let statusColor = "";
387
- if (status === "complete") {
388
- statusIcon = "✓";
389
- statusColor = hexToAnsi(PROGRESS_COLORS.complete);
390
- } else if (status === "failed") {
391
- statusIcon = "✗";
392
- statusColor = hexToAnsi(PROGRESS_COLORS.failed);
393
- }
394
- const displayLabel = resolvedContent ?? label;
395
- const progressBar = `${progressColor}${filledBar}${RESET}${emptyColor}${emptyBar}${RESET}`;
396
- const percentStr = `${String(percentage).padStart(3)}%`;
397
- if (statusIcon) stream.write(`${statusColor}${statusIcon}${RESET} ${displayLabel} [${progressBar}] ${percentStr}\n`);
398
- else stream.write(` ${displayLabel} [${progressBar}] ${percentStr} (${current}/${total})\n`);
399
- break;
400
- }
401
- case "group": {
402
- const { label, collapsed, isEnd } = message;
403
- const groupColor = hexToAnsi(GROUP_COLORS.border);
404
- const iconColor = hexToAnsi(GROUP_COLORS.icon);
405
- if (isEnd) stream.write(`${groupColor}└─${RESET} ${DIM}end ${label}${RESET}\n`);
406
- else {
407
- const icon = collapsed ? "▶" : "▼";
408
- stream.write(`${groupColor}┌─${RESET} ${iconColor}${icon}${RESET} ${BOLD}${label}${RESET}\n`);
409
- }
410
- break;
411
- }
412
- case "table": {
413
- const { headers, rows, title } = message;
414
- const tableColor = hexToAnsi(TABLE_COLORS.border);
415
- const headerColor = hexToAnsi(TABLE_COLORS.headerText);
416
- const cellColor = hexToAnsi(TABLE_COLORS.cellText);
417
- const colWidths = headers.map((h, i) => {
418
- const maxRowWidth = rows.reduce((max, row) => Math.max(max, (row[i] ?? "").length), 0);
419
- return Math.max(h.length, maxRowWidth);
420
- });
421
- const separator = `${tableColor}├${colWidths.map((w) => "─".repeat(w + 2)).join("┼")}┤${RESET}`;
422
- const topBorder = `${tableColor}┌${colWidths.map((w) => "─".repeat(w + 2)).join("┬")}┐${RESET}`;
423
- const bottomBorder = `${tableColor}└${colWidths.map((w) => "─".repeat(w + 2)).join("┴")}┘${RESET}`;
424
- if (title) stream.write(`${BOLD}${title}${RESET}\n`);
425
- stream.write(`${topBorder}\n`);
426
- const headerRow = headers.map((h, i) => ` ${h.padEnd(colWidths[i])} `).join(`${tableColor}│${RESET}`);
427
- stream.write(`${tableColor}│${RESET}${headerColor}${headerRow}${RESET}${tableColor}│${RESET}\n`);
428
- stream.write(`${separator}\n`);
429
- for (const row of rows) {
430
- const rowStr = headers.map((_, i) => ` ${(row[i] ?? "").padEnd(colWidths[i])} `).join(`${tableColor}│${RESET}`);
431
- stream.write(`${tableColor}│${RESET}${cellColor}${rowStr}${RESET}${tableColor}│${RESET}\n`);
432
- }
433
- stream.write(`${bottomBorder}\n`);
434
- break;
435
- }
436
- }
437
- }
438
- /**
439
- * Print all messages to stdout (or stderr if isError)
440
- */ function printMessagesToStdout(messages, screenName, isError = false) {
441
- const stream = isError ? process.stderr : process.stdout;
442
- const headerColor = isError ? "\x1B[31m" : "\x1B[32m";
443
- const status = isError ? "FAILED" : "COMPLETED";
444
- stream.write(`\n${headerColor}${BOLD}═══ ${screenName} [${status}] ═══${RESET}\n\n`);
445
- for (const message of messages) printMessage(message, stream);
446
- stream.write("\n");
447
- }
448
-
449
- //#endregion
450
- //#region src/utils/format.ts
451
- /**
452
- * Format an object for display with configurable depth
453
- */ function formatObject(obj, depth = 2, currentDepth = 0) {
454
- if (currentDepth >= depth) {
455
- if (Array.isArray(obj)) return "[Array]";
456
- if (typeof obj === "object" && obj !== null) return `[${obj.constructor?.name ?? "Object"}]`;
457
- return String(obj);
458
- }
459
- if (obj === null) return "null";
460
- if (obj === void 0) return "undefined";
461
- if (typeof obj === "string") return `"${obj}"`;
462
- if (typeof obj === "number" || typeof obj === "boolean") return String(obj);
463
- if (typeof obj === "function") return "[Function]";
464
- if (obj instanceof Date) return obj.toISOString();
465
- if (obj instanceof Error) return `${obj.name}: ${obj.message}`;
466
- const indent = " ".repeat(currentDepth);
467
- const childIndent = " ".repeat(currentDepth + 1);
468
- if (Array.isArray(obj)) {
469
- if (obj.length === 0) return "[]";
470
- return `[\n${childIndent}${obj.map((item) => formatObject(item, depth, currentDepth + 1)).join(`,\n${childIndent}`)}\n${indent}]`;
471
- }
472
- if (typeof obj === "object") {
473
- const entries = Object.entries(obj);
474
- if (entries.length === 0) return "{}";
475
- return `{\n${childIndent}${entries.map(([key, value]) => `${key}: ${formatObject(value, depth, currentDepth + 1)}`).join(`,\n${childIndent}`)}\n${indent}}`;
476
- }
477
- return String(obj);
478
- }
479
- /**
480
- * Capture a stack trace, filtering out internal frames
481
- */ function captureTrace(offset = 0) {
482
- const lines = ((/* @__PURE__ */ new Error()).stack ?? "").split("\n");
483
- const begin = lines.findIndex((line) => line.includes("captureTrace"));
484
- return lines.slice(begin !== -1 ? begin + 1 + offset : 4).join("\n");
485
- }
486
-
487
- //#endregion
488
- //#region src/tokens/adapter.ts
489
- /**
490
- * Injection token for the TUI rendering adapter.
491
- * Import the specific adapter (e.g., '@navios/commander-tui/adapters/react')
492
- * to register an implementation.
493
- */ const Adapter = _navios_core.InjectionToken.create("Adapter");
494
-
495
- //#endregion
496
- //#region src/themes/dark.ts
497
- /**
498
- * Default dark theme.
499
- * Migrated from the scattered color files in utils/colors/.
500
- */ const darkTheme = {
501
- name: "dark",
502
- logLevels: {
503
- verbose: {
504
- border: "#6B7280",
505
- background: "#6B728015"
506
- },
507
- debug: {
508
- border: "#8B5CF6",
509
- background: "#8B5CF615"
510
- },
511
- log: {
512
- border: "#3B82F6",
513
- background: "#3B82F615"
514
- },
515
- warn: {
516
- border: "#F59E0B",
517
- background: "#F59E0B15"
518
- },
519
- error: {
520
- border: "#EF4444",
521
- background: "#EF444415"
522
- },
523
- fatal: {
524
- border: "#DC2626",
525
- background: "#DC262625",
526
- text: "#FCA5A5"
527
- }
528
- },
529
- sidebar: {
530
- background: void 0,
531
- selectedBackground: "#1F293780",
532
- hoverBackground: "#374151",
533
- text: "#E5E7EB",
534
- textDim: "#6B7280",
535
- border: "#374151",
536
- badge: "#3B82F6",
537
- focusBorder: "#3B82F6"
538
- },
539
- header: {
540
- background: void 0,
541
- text: "#F9FAFB",
542
- border: "#374151"
543
- },
544
- statusIndicators: {
545
- waiting: {
546
- icon: "○",
547
- color: "#6B7280"
548
- },
549
- pending: {
550
- icon: "◐",
551
- color: "#F59E0B"
552
- },
553
- success: {
554
- icon: "✓",
555
- color: "#22C55E"
556
- },
557
- fail: {
558
- icon: "✗",
559
- color: "#EF4444"
560
- },
561
- static: {
562
- icon: "●",
563
- color: "#3B82F6"
564
- }
565
- },
566
- separator: {
567
- line: "#374151",
568
- text: "#6B7280"
569
- },
570
- progress: {
571
- border: "#3B82F6",
572
- background: "#3B82F615",
573
- barFilled: "#3B82F6",
574
- barEmpty: "#374151",
575
- text: "#E5E7EB",
576
- textDim: "#9CA3AF",
577
- complete: "#22C55E",
578
- completeBackground: "#22C55E15",
579
- failed: "#EF4444",
580
- failedBackground: "#EF444415"
581
- },
582
- group: {
583
- border: "#6B7280",
584
- background: "#6B728010",
585
- headerText: "#E5E7EB",
586
- icon: "#9CA3AF"
587
- },
588
- table: {
589
- border: "#3B82F6",
590
- background: "#3B82F615",
591
- headerText: "#F9FAFB",
592
- cellText: "#E5E7EB",
593
- title: "#F9FAFB",
594
- separator: "#3B82F650"
595
- },
596
- file: {
597
- border: "#3B82F6",
598
- background: "#3B82F615",
599
- headerText: "#F9FAFB",
600
- headerBackground: "#3B82F625"
601
- },
602
- prompt: {
603
- question: "#F9FAFB",
604
- optionText: "#E5E7EB",
605
- optionTextDim: "#9CA3AF",
606
- optionSelected: "#3B82F6",
607
- optionSelectedBackground: "#1E3A5F",
608
- confirmButton: "#22C55E",
609
- cancelButton: "#EF4444",
610
- buttonBackground: "#374151",
611
- buttonSelectedBackground: "#1F2937",
612
- inputBorder: "#3B82F6",
613
- inputBackground: "#1F2937",
614
- inputText: "#F9FAFB",
615
- inputPlaceholder: "#6B7280",
616
- inputCursor: "#3B82F6",
617
- border: "#374151",
618
- focusBorder: "#3B82F6"
619
- },
620
- errorHighlight: {
621
- background: "#EF444425",
622
- border: "#EF4444",
623
- gutterBackground: "#EF444440"
624
- },
625
- filter: {
626
- background: "#1F293780",
627
- border: "#3B82F6",
628
- text: "#E5E7EB",
629
- textDim: "#6B7280",
630
- inputBackground: "#1F2937",
631
- inputText: "#F9FAFB",
632
- inputPlaceholder: "#6B7280",
633
- cursor: "#3B82F6",
634
- activeLevel: "#3B82F6",
635
- inactiveLevel: "#4B5563"
636
- },
637
- help: {
638
- background: "#1F2937",
639
- border: "#3B82F6",
640
- title: "#F9FAFB",
641
- category: "#3B82F6",
642
- key: "#F59E0B",
643
- description: "#E5E7EB",
644
- hint: "#6B7280"
645
- },
646
- colors: {
647
- primary: "#3B82F6",
648
- secondary: "#8B5CF6",
649
- success: "#22C55E",
650
- warning: "#F59E0B",
651
- error: "#EF4444",
652
- muted: "#6B7280",
653
- background: "#111827",
654
- foreground: "#F9FAFB"
655
- }
656
- };
657
-
658
- //#endregion
659
- //#region src/themes/light.ts
660
- /**
661
- * Light theme for terminals with light backgrounds.
662
- */ const lightTheme = {
663
- name: "light",
664
- logLevels: {
665
- verbose: {
666
- border: "#9CA3AF",
667
- background: "#F3F4F6"
668
- },
669
- debug: {
670
- border: "#7C3AED",
671
- background: "#EDE9FE"
672
- },
673
- log: {
674
- border: "#2563EB",
675
- background: "#DBEAFE"
676
- },
677
- warn: {
678
- border: "#D97706",
679
- background: "#FEF3C7"
680
- },
681
- error: {
682
- border: "#DC2626",
683
- background: "#FEE2E2"
684
- },
685
- fatal: {
686
- border: "#991B1B",
687
- background: "#FECACA",
688
- text: "#7F1D1D"
689
- }
690
- },
691
- sidebar: {
692
- background: "#F9FAFB",
693
- selectedBackground: "#E5E7EB",
694
- hoverBackground: "#F3F4F6",
695
- text: "#1F2937",
696
- textDim: "#6B7280",
697
- border: "#D1D5DB",
698
- badge: "#2563EB",
699
- focusBorder: "#2563EB"
700
- },
701
- header: {
702
- background: "#F9FAFB",
703
- text: "#111827",
704
- border: "#D1D5DB"
705
- },
706
- statusIndicators: {
707
- waiting: {
708
- icon: "○",
709
- color: "#9CA3AF"
710
- },
711
- pending: {
712
- icon: "◐",
713
- color: "#D97706"
714
- },
715
- success: {
716
- icon: "✓",
717
- color: "#16A34A"
718
- },
719
- fail: {
720
- icon: "✗",
721
- color: "#DC2626"
722
- },
723
- static: {
724
- icon: "●",
725
- color: "#2563EB"
726
- }
727
- },
728
- separator: {
729
- line: "#D1D5DB",
730
- text: "#6B7280"
731
- },
732
- progress: {
733
- border: "#2563EB",
734
- background: "#DBEAFE",
735
- barFilled: "#2563EB",
736
- barEmpty: "#E5E7EB",
737
- text: "#1F2937",
738
- textDim: "#6B7280",
739
- complete: "#16A34A",
740
- completeBackground: "#DCFCE7",
741
- failed: "#DC2626",
742
- failedBackground: "#FEE2E2"
743
- },
744
- group: {
745
- border: "#9CA3AF",
746
- background: "#F3F4F6",
747
- headerText: "#1F2937",
748
- icon: "#6B7280"
749
- },
750
- table: {
751
- border: "#2563EB",
752
- background: "#DBEAFE",
753
- headerText: "#111827",
754
- cellText: "#1F2937",
755
- title: "#111827",
756
- separator: "#93C5FD"
757
- },
758
- file: {
759
- border: "#2563EB",
760
- background: "#DBEAFE",
761
- headerText: "#111827",
762
- headerBackground: "#BFDBFE"
763
- },
764
- prompt: {
765
- question: "#111827",
766
- optionText: "#1F2937",
767
- optionTextDim: "#6B7280",
768
- optionSelected: "#2563EB",
769
- optionSelectedBackground: "#DBEAFE",
770
- confirmButton: "#16A34A",
771
- cancelButton: "#DC2626",
772
- buttonBackground: "#E5E7EB",
773
- buttonSelectedBackground: "#D1D5DB",
774
- inputBorder: "#2563EB",
775
- inputBackground: "#FFFFFF",
776
- inputText: "#111827",
777
- inputPlaceholder: "#9CA3AF",
778
- inputCursor: "#2563EB",
779
- border: "#D1D5DB",
780
- focusBorder: "#2563EB"
781
- },
782
- errorHighlight: {
783
- background: "#FEE2E2",
784
- border: "#DC2626",
785
- gutterBackground: "#FECACA"
786
- },
787
- filter: {
788
- background: "#F3F4F6",
789
- border: "#2563EB",
790
- text: "#1F2937",
791
- textDim: "#6B7280",
792
- inputBackground: "#FFFFFF",
793
- inputText: "#111827",
794
- inputPlaceholder: "#9CA3AF",
795
- cursor: "#2563EB",
796
- activeLevel: "#2563EB",
797
- inactiveLevel: "#D1D5DB"
798
- },
799
- help: {
800
- background: "#FFFFFF",
801
- border: "#2563EB",
802
- title: "#111827",
803
- category: "#2563EB",
804
- key: "#D97706",
805
- description: "#1F2937",
806
- hint: "#6B7280"
807
- },
808
- colors: {
809
- primary: "#2563EB",
810
- secondary: "#7C3AED",
811
- success: "#16A34A",
812
- warning: "#D97706",
813
- error: "#DC2626",
814
- muted: "#6B7280",
815
- background: "#FFFFFF",
816
- foreground: "#111827"
817
- }
818
- };
819
-
820
- //#endregion
821
- //#region src/themes/high-contrast.ts
822
- /**
823
- * High contrast theme for accessibility.
824
- * Uses pure black/white with saturated colors for maximum visibility.
825
- */ const highContrastTheme = {
826
- name: "high-contrast",
827
- logLevels: {
828
- verbose: {
829
- border: "#FFFFFF",
830
- background: "#1A1A1A",
831
- text: "#FFFFFF"
832
- },
833
- debug: {
834
- border: "#A855F7",
835
- background: "#1A1A1A",
836
- text: "#E9D5FF"
837
- },
838
- log: {
839
- border: "#3B82F6",
840
- background: "#1A1A1A",
841
- text: "#BFDBFE"
842
- },
843
- warn: {
844
- border: "#FBBF24",
845
- background: "#1A1A1A",
846
- text: "#FEF08A"
847
- },
848
- error: {
849
- border: "#EF4444",
850
- background: "#1A1A1A",
851
- text: "#FECACA"
852
- },
853
- fatal: {
854
- border: "#FF0000",
855
- background: "#330000",
856
- text: "#FFFFFF"
857
- }
858
- },
859
- sidebar: {
860
- background: "#000000",
861
- selectedBackground: "#333333",
862
- hoverBackground: "#1A1A1A",
863
- text: "#FFFFFF",
864
- textDim: "#AAAAAA",
865
- border: "#FFFFFF",
866
- badge: "#FFFF00",
867
- focusBorder: "#FFFF00"
868
- },
869
- header: {
870
- background: "#000000",
871
- text: "#FFFFFF",
872
- border: "#FFFFFF"
873
- },
874
- statusIndicators: {
875
- waiting: {
876
- icon: "○",
877
- color: "#AAAAAA"
878
- },
879
- pending: {
880
- icon: "◐",
881
- color: "#FBBF24"
882
- },
883
- success: {
884
- icon: "✓",
885
- color: "#22C55E"
886
- },
887
- fail: {
888
- icon: "✗",
889
- color: "#EF4444"
890
- },
891
- static: {
892
- icon: "●",
893
- color: "#00FFFF"
894
- }
895
- },
896
- separator: {
897
- line: "#FFFFFF",
898
- text: "#AAAAAA"
899
- },
900
- progress: {
901
- border: "#3B82F6",
902
- background: "#1A1A1A",
903
- barFilled: "#3B82F6",
904
- barEmpty: "#333333",
905
- text: "#FFFFFF",
906
- textDim: "#AAAAAA",
907
- complete: "#22C55E",
908
- completeBackground: "#1A1A1A",
909
- failed: "#EF4444",
910
- failedBackground: "#1A1A1A"
911
- },
912
- group: {
913
- border: "#FFFFFF",
914
- background: "#1A1A1A",
915
- headerText: "#FFFFFF",
916
- icon: "#AAAAAA"
917
- },
918
- table: {
919
- border: "#FFFFFF",
920
- background: "#1A1A1A",
921
- headerText: "#FFFFFF",
922
- cellText: "#FFFFFF",
923
- title: "#FFFFFF",
924
- separator: "#666666"
925
- },
926
- file: {
927
- border: "#FFFFFF",
928
- background: "#1A1A1A",
929
- headerText: "#FFFFFF",
930
- headerBackground: "#333333"
931
- },
932
- prompt: {
933
- question: "#FFFFFF",
934
- optionText: "#FFFFFF",
935
- optionTextDim: "#AAAAAA",
936
- optionSelected: "#FFFF00",
937
- optionSelectedBackground: "#333333",
938
- confirmButton: "#22C55E",
939
- cancelButton: "#EF4444",
940
- buttonBackground: "#333333",
941
- buttonSelectedBackground: "#1A1A1A",
942
- inputBorder: "#FFFF00",
943
- inputBackground: "#1A1A1A",
944
- inputText: "#FFFFFF",
945
- inputPlaceholder: "#666666",
946
- inputCursor: "#FFFF00",
947
- border: "#FFFFFF",
948
- focusBorder: "#FFFF00"
949
- },
950
- errorHighlight: {
951
- background: "#330000",
952
- border: "#FF0000",
953
- gutterBackground: "#660000"
954
- },
955
- filter: {
956
- background: "#1A1A1A",
957
- border: "#FFFF00",
958
- text: "#FFFFFF",
959
- textDim: "#AAAAAA",
960
- inputBackground: "#000000",
961
- inputText: "#FFFFFF",
962
- inputPlaceholder: "#666666",
963
- cursor: "#FFFF00",
964
- activeLevel: "#FFFF00",
965
- inactiveLevel: "#666666"
966
- },
967
- help: {
968
- background: "#000000",
969
- border: "#FFFFFF",
970
- title: "#FFFFFF",
971
- category: "#FFFF00",
972
- key: "#00FFFF",
973
- description: "#FFFFFF",
974
- hint: "#AAAAAA"
975
- },
976
- colors: {
977
- primary: "#3B82F6",
978
- secondary: "#A855F7",
979
- success: "#22C55E",
980
- warning: "#FBBF24",
981
- error: "#EF4444",
982
- muted: "#AAAAAA",
983
- background: "#000000",
984
- foreground: "#FFFFFF"
985
- }
986
- };
987
-
988
- //#endregion
989
- //#region src/themes/utils.ts
990
- /**
991
- * Deep merge two objects, with source taking precedence.
992
- */ function deepMerge(target, source) {
993
- const result = { ...target };
994
- for (const key in source) if (Object.prototype.hasOwnProperty.call(source, key)) {
995
- const sourceValue = source[key];
996
- const targetValue = target[key];
997
- if (sourceValue !== void 0 && typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && typeof targetValue === "object" && targetValue !== null && !Array.isArray(targetValue)) result[key] = deepMerge(targetValue, sourceValue);
998
- else if (sourceValue !== void 0) result[key] = sourceValue;
999
- }
1000
- return result;
1001
- }
1002
- /**
1003
- * Get a theme by preset name.
1004
- */ function getThemePreset(preset) {
1005
- switch (preset) {
1006
- case "dark": return darkTheme;
1007
- case "light": return lightTheme;
1008
- case "high-contrast": return highContrastTheme;
1009
- default: return darkTheme;
1010
- }
1011
- }
1012
- /**
1013
- * Merge a base theme with partial overrides.
1014
- */ function mergeThemes(base, overrides) {
1015
- return deepMerge(base, overrides);
1016
- }
1017
- /**
1018
- * Create a custom theme by extending the dark theme with overrides.
1019
- */ function createTheme(overrides) {
1020
- return mergeThemes(darkTheme, overrides);
1021
- }
1022
- /**
1023
- * Create a custom theme by extending a specific base theme.
1024
- */ function createThemeFrom(base, overrides) {
1025
- return mergeThemes(typeof base === "string" ? getThemePreset(base) : base, overrides);
1026
- }
1027
- /**
1028
- * Resolve a theme value which can be a Theme object or a preset name.
1029
- */ function resolveTheme(theme) {
1030
- return typeof theme === "string" ? getThemePreset(theme) : theme;
1031
- }
1032
-
1033
- //#endregion
1034
- //#region src/keyboard/keyboard_manager.ts
1035
- /**
1036
- * Manages keyboard bindings and dispatches key events to handlers.
1037
- */ var KeyboardManager = class {
1038
- bindings = [];
1039
- disabled = /* @__PURE__ */ new Set();
1040
- constructor(config) {
1041
- if (config?.bindings) this.bindings = [...config.bindings];
1042
- if (config?.disabled) this.disabled = new Set(config.disabled);
1043
- this.sortBindings();
1044
- }
1045
- /**
1046
- * Add bindings to the manager.
1047
- */ addBindings(bindings) {
1048
- this.bindings.push(...bindings);
1049
- this.sortBindings();
1050
- }
1051
- /**
1052
- * Remove a binding by key name.
1053
- */ removeBinding(key) {
1054
- this.bindings = this.bindings.filter((b) => {
1055
- return !(Array.isArray(b.key) ? b.key : [b.key]).includes(key);
1056
- });
1057
- }
1058
- /**
1059
- * Disable a key (prevents it from being matched).
1060
- */ disableKey(key) {
1061
- this.disabled.add(key);
1062
- }
1063
- /**
1064
- * Enable a previously disabled key.
1065
- */ enableKey(key) {
1066
- this.disabled.delete(key);
1067
- }
1068
- /**
1069
- * Handle a key event, dispatching to the appropriate handler.
1070
- * Returns true if a handler consumed the event.
1071
- */ handleKey(key, context) {
1072
- const binding = this.findMatchingBinding(key, context);
1073
- if (binding) return binding.handler(key, context) !== false;
1074
- return false;
1075
- }
1076
- /**
1077
- * Get all bindings for display in help overlay.
1078
- */ getBindingsForHelp() {
1079
- return this.bindings.filter((b) => b.description);
1080
- }
1081
- /**
1082
- * Get bindings grouped by category.
1083
- */ getBindingsByCategory() {
1084
- const grouped = {
1085
- general: [],
1086
- navigation: [],
1087
- screen: [],
1088
- prompt: [],
1089
- filter: []
1090
- };
1091
- for (const binding of this.bindings) if (binding.description) grouped[binding.category].push(binding);
1092
- return grouped;
1093
- }
1094
- /**
1095
- * Find a matching binding for the given key and context.
1096
- */ findMatchingBinding(key, context) {
1097
- for (const binding of this.bindings) if (this.keyMatches(key, binding) && this.conditionMatches(binding.when, context) && !this.isDisabled(binding)) return binding;
1098
- return null;
1099
- }
1100
- /**
1101
- * Check if a key event matches a binding's key specification.
1102
- */ keyMatches(key, binding) {
1103
- const keys = Array.isArray(binding.key) ? binding.key : [binding.key];
1104
- if (!(keys.includes(key.name) || key.sequence && keys.includes(key.sequence))) return false;
1105
- const ctrlMatches = (binding.ctrl ?? false) === (key.ctrl ?? false);
1106
- const metaMatches = (binding.meta ?? false) === (key.meta ?? false);
1107
- const shiftMatches = (binding.shift ?? false) === (key.shift ?? false);
1108
- return ctrlMatches && metaMatches && shiftMatches;
1109
- }
1110
- /**
1111
- * Check if context matches a binding's condition.
1112
- */ conditionMatches(condition, context) {
1113
- if (!condition) return true;
1114
- if (condition.hasPrompt !== void 0 && condition.hasPrompt !== context.hasPrompt) return false;
1115
- if (condition.inInputMode !== void 0 && condition.inInputMode !== context.inInputMode) return false;
1116
- if (condition.focusArea !== void 0 && condition.focusArea !== context.focusArea) return false;
1117
- if (condition.isFilterActive !== void 0 && condition.isFilterActive !== context.isFilterActive) return false;
1118
- if (condition.isHelpVisible !== void 0 && condition.isHelpVisible !== context.isHelpVisible) return false;
1119
- if (condition.hasSidebar !== void 0 && condition.hasSidebar !== context.hasSidebar) return false;
1120
- return true;
1121
- }
1122
- /**
1123
- * Check if a binding is disabled.
1124
- */ isDisabled(binding) {
1125
- return (Array.isArray(binding.key) ? binding.key : [binding.key]).some((k) => this.disabled.has(k));
1126
- }
1127
- /**
1128
- * Sort bindings by priority (higher first).
1129
- */ sortBindings() {
1130
- this.bindings.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
1131
- }
1132
- };
1133
- /**
1134
- * Format a key binding for display.
1135
- */ function formatKeyBinding(binding) {
1136
- const keys = Array.isArray(binding.key) ? binding.key : [binding.key];
1137
- const parts = [];
1138
- if (binding.ctrl) parts.push("Ctrl");
1139
- if (binding.meta) parts.push("Cmd");
1140
- if (binding.shift) parts.push("Shift");
1141
- const keyDisplay = keys.map((k) => {
1142
- switch (k) {
1143
- case "up": return "↑";
1144
- case "down": return "↓";
1145
- case "left": return "←";
1146
- case "right": return "→";
1147
- case "return": return "Enter";
1148
- case "escape": return "Esc";
1149
- case "space": return "Space";
1150
- case "tab": return "Tab";
1151
- case "\\": return "\\";
1152
- default: return k;
1153
- }
1154
- }).join("/");
1155
- parts.push(keyDisplay);
1156
- return parts.join("+");
1157
- }
1158
-
1159
- //#endregion
1160
- //#region src/keyboard/create_bindings.ts
1161
- /**
1162
- * Create the default keybindings with access to manager and screens.
1163
- */ function createDefaultBindings(handlers) {
1164
- const { manager, getActiveScreen, toggleHelp, toggleFilter, closeFilter } = handlers;
1165
- const bindings = [];
1166
- bindings.push({
1167
- key: "escape",
1168
- handler: () => {
1169
- const screen = getActiveScreen();
1170
- if (screen?.isPromptInInputMode()) {
1171
- screen.promptExitInputMode();
1172
- return true;
1173
- }
1174
- },
1175
- description: "Exit input mode",
1176
- category: "prompt",
1177
- when: {
1178
- hasPrompt: true,
1179
- inInputMode: true
1180
- },
1181
- priority: 100
1182
- });
1183
- bindings.push({
1184
- key: "return",
1185
- handler: () => {
1186
- const screen = getActiveScreen();
1187
- if (screen?.isPromptInInputMode()) {
1188
- screen.promptSubmit();
1189
- return true;
1190
- }
1191
- },
1192
- description: "Submit input",
1193
- category: "prompt",
1194
- when: {
1195
- hasPrompt: true,
1196
- inInputMode: true
1197
- },
1198
- priority: 100
1199
- });
1200
- bindings.push({
1201
- key: "backspace",
1202
- handler: () => {
1203
- const screen = getActiveScreen();
1204
- if (screen?.isPromptInInputMode()) {
1205
- screen.promptDeleteLastChar();
1206
- return true;
1207
- }
1208
- },
1209
- description: "Delete character",
1210
- category: "prompt",
1211
- when: {
1212
- hasPrompt: true,
1213
- inInputMode: true
1214
- },
1215
- priority: 100
1216
- });
1217
- bindings.push({
1218
- key: ["up", "k"],
1219
- handler: () => {
1220
- const screen = getActiveScreen();
1221
- const prompt = screen?.getActivePrompt();
1222
- if (prompt?.type === "choice" || prompt?.type === "multiChoice") {
1223
- screen?.promptNavigateUp();
1224
- return true;
1225
- }
1226
- },
1227
- description: "Navigate up",
1228
- category: "prompt",
1229
- when: {
1230
- hasPrompt: true,
1231
- inInputMode: false
1232
- },
1233
- priority: 90
1234
- });
1235
- bindings.push({
1236
- key: ["down", "j"],
1237
- handler: () => {
1238
- const screen = getActiveScreen();
1239
- const prompt = screen?.getActivePrompt();
1240
- if (prompt?.type === "choice" || prompt?.type === "multiChoice") {
1241
- screen?.promptNavigateDown();
1242
- return true;
1243
- }
1244
- },
1245
- description: "Navigate down",
1246
- category: "prompt",
1247
- when: {
1248
- hasPrompt: true,
1249
- inInputMode: false
1250
- },
1251
- priority: 90
1252
- });
1253
- bindings.push({
1254
- key: ["left", "h"],
1255
- handler: () => {
1256
- const screen = getActiveScreen();
1257
- if ((screen?.getActivePrompt())?.type === "confirm") {
1258
- screen?.promptNavigateLeft();
1259
- return true;
1260
- }
1261
- },
1262
- description: "Select confirm",
1263
- category: "prompt",
1264
- when: {
1265
- hasPrompt: true,
1266
- inInputMode: false
1267
- },
1268
- priority: 90
1269
- });
1270
- bindings.push({
1271
- key: ["right", "l"],
1272
- handler: () => {
1273
- const screen = getActiveScreen();
1274
- if ((screen?.getActivePrompt())?.type === "confirm") {
1275
- screen?.promptNavigateRight();
1276
- return true;
1277
- }
1278
- },
1279
- description: "Select cancel",
1280
- category: "prompt",
1281
- when: {
1282
- hasPrompt: true,
1283
- inInputMode: false
1284
- },
1285
- priority: 90
1286
- });
1287
- bindings.push({
1288
- key: "space",
1289
- handler: () => {
1290
- const screen = getActiveScreen();
1291
- if ((screen?.getActivePrompt())?.type === "multiChoice") {
1292
- screen?.promptToggleSelection();
1293
- return true;
1294
- }
1295
- },
1296
- description: "Toggle selection",
1297
- category: "prompt",
1298
- when: {
1299
- hasPrompt: true,
1300
- inInputMode: false
1301
- },
1302
- priority: 90
1303
- });
1304
- bindings.push({
1305
- key: "return",
1306
- handler: () => {
1307
- const screen = getActiveScreen();
1308
- const prompt = screen?.getActivePrompt();
1309
- if (!prompt) return false;
1310
- if (prompt.type === "choice") {
1311
- if (!screen?.promptEnterInputMode()) screen?.promptSubmit();
1312
- return true;
1313
- } else if (prompt.type === "confirm") {
1314
- screen?.promptSubmit();
1315
- return true;
1316
- } else if (prompt.type === "multiChoice") {
1317
- if (screen?.canSubmitPrompt()) screen.promptSubmit();
1318
- return true;
1319
- }
1320
- },
1321
- description: "Submit selection",
1322
- category: "prompt",
1323
- when: {
1324
- hasPrompt: true,
1325
- inInputMode: false
1326
- },
1327
- priority: 90
1328
- });
1329
- bindings.push({
1330
- key: "?",
1331
- handler: () => {
1332
- toggleHelp();
1333
- return true;
1334
- },
1335
- description: "Toggle help",
1336
- category: "general",
1337
- when: {
1338
- hasPrompt: false,
1339
- isFilterActive: false
1340
- },
1341
- priority: 50
1342
- });
1343
- bindings.push({
1344
- key: "escape",
1345
- handler: () => {
1346
- toggleHelp();
1347
- return true;
1348
- },
1349
- description: "Close help",
1350
- category: "general",
1351
- when: { isHelpVisible: true },
1352
- priority: 80
1353
- });
1354
- bindings.push({
1355
- key: "/",
1356
- handler: () => {
1357
- toggleFilter();
1358
- return true;
1359
- },
1360
- description: "Toggle filter",
1361
- category: "filter",
1362
- when: {
1363
- hasPrompt: false,
1364
- isHelpVisible: false
1365
- },
1366
- priority: 50
1367
- });
1368
- bindings.push({
1369
- key: "escape",
1370
- handler: () => {
1371
- closeFilter();
1372
- return true;
1373
- },
1374
- description: "Close filter",
1375
- category: "filter",
1376
- when: { isFilterActive: true },
1377
- priority: 70
1378
- });
1379
- bindings.push({
1380
- key: "tab",
1381
- handler: () => {
1382
- handlers.filterCycleField();
1383
- return true;
1384
- },
1385
- description: "Cycle filter fields",
1386
- category: "filter",
1387
- when: { isFilterActive: true },
1388
- priority: 70
1389
- });
1390
- bindings.push({
1391
- key: "backspace",
1392
- handler: () => {
1393
- handlers.filterDeleteChar();
1394
- return true;
1395
- },
1396
- description: "Delete character",
1397
- category: "filter",
1398
- when: { isFilterActive: true },
1399
- priority: 70
1400
- });
1401
- for (let i = 1; i <= 7; i++) bindings.push({
1402
- key: String(i),
1403
- handler: () => {
1404
- handlers.filterToggleLevel(i - 1);
1405
- return true;
1406
- },
1407
- description: `Toggle level ${i}`,
1408
- category: "filter",
1409
- when: { isFilterActive: true },
1410
- priority: 70
1411
- });
1412
- bindings.push({
1413
- key: "q",
1414
- handler: () => {
1415
- manager.unbind();
1416
- return true;
1417
- },
1418
- description: "Exit",
1419
- category: "general",
1420
- when: {
1421
- hasPrompt: false,
1422
- isFilterActive: false,
1423
- isHelpVisible: false
1424
- },
1425
- priority: 10
1426
- });
1427
- bindings.push({
1428
- key: "tab",
1429
- handler: (_, ctx) => {
1430
- if (ctx.hasSidebar) {
1431
- manager.toggleFocus();
1432
- return true;
1433
- }
1434
- },
1435
- description: "Toggle focus",
1436
- category: "navigation",
1437
- when: {
1438
- hasPrompt: false,
1439
- isFilterActive: false
1440
- },
1441
- priority: 20
1442
- });
1443
- bindings.push({
1444
- key: "\\",
1445
- handler: (_, ctx) => {
1446
- if (ctx.hasSidebar) {
1447
- manager.toggleFocus();
1448
- return true;
1449
- }
1450
- },
1451
- description: "Toggle focus",
1452
- category: "navigation",
1453
- when: {
1454
- hasPrompt: false,
1455
- isFilterActive: false
1456
- },
1457
- priority: 20
1458
- });
1459
- bindings.push({
1460
- key: ["up", "k"],
1461
- handler: () => {
1462
- manager.navigateUp();
1463
- return true;
1464
- },
1465
- description: "Navigate up",
1466
- category: "navigation",
1467
- when: {
1468
- focusArea: "sidebar",
1469
- hasPrompt: false
1470
- },
1471
- priority: 30
1472
- });
1473
- bindings.push({
1474
- key: ["down", "j"],
1475
- handler: () => {
1476
- manager.navigateDown();
1477
- return true;
1478
- },
1479
- description: "Navigate down",
1480
- category: "navigation",
1481
- when: {
1482
- focusArea: "sidebar",
1483
- hasPrompt: false
1484
- },
1485
- priority: 30
1486
- });
1487
- bindings.push({
1488
- key: "return",
1489
- handler: () => {
1490
- manager.selectCurrent();
1491
- return true;
1492
- },
1493
- description: "Select screen",
1494
- category: "navigation",
1495
- when: {
1496
- focusArea: "sidebar",
1497
- hasPrompt: false
1498
- },
1499
- priority: 30
1500
- });
1501
- for (let i = 1; i <= 9; i++) bindings.push({
1502
- key: String(i),
1503
- handler: () => {
1504
- const screens = manager.getScreens();
1505
- if (i <= screens.length) {
1506
- manager.setActiveScreen(screens[i - 1]);
1507
- manager.setSelectedIndex(i - 1);
1508
- return true;
1509
- }
1510
- },
1511
- description: `Jump to screen ${i}`,
1512
- category: "screen",
1513
- when: {
1514
- hasPrompt: false,
1515
- isFilterActive: false
1516
- },
1517
- priority: 15
1518
- });
1519
- bindings.push({
1520
- key: "c",
1521
- handler: () => {
1522
- getActiveScreen()?.clear();
1523
- return true;
1524
- },
1525
- description: "Clear screen",
1526
- category: "screen",
1527
- when: {
1528
- focusArea: "content",
1529
- hasPrompt: false,
1530
- isFilterActive: false
1531
- },
1532
- priority: 15
1533
- });
1534
- return bindings;
1535
- }
1536
- /**
1537
- * Handle printable character input for prompts and filter.
1538
- * This should be called for any key not handled by bindings.
1539
- */ function handlePrintableInput(key, context, handlers) {
1540
- if (!key.sequence || key.sequence.length !== 1 || key.ctrl || key.meta) return false;
1541
- const charCode = key.sequence.charCodeAt(0);
1542
- if (charCode < 32 || charCode > 126) return false;
1543
- if (context.isFilterActive) {
1544
- handlers.filterAppendChar(key.sequence);
1545
- return true;
1546
- }
1547
- if (context.hasPrompt && context.inInputMode) {
1548
- handlers.getActiveScreen()?.promptAppendInput(key.sequence);
1549
- return true;
1550
- }
1551
- return false;
1552
- }
1553
-
1554
- //#endregion
1555
- //#region src/filter/filter_engine.ts
1556
- /**
1557
- * Filter engine for filtering log messages.
1558
- */ var FilterEngine = class {
1559
- /**
1560
- * Apply filter to messages array.
1561
- */ static filterMessages(messages, filter) {
1562
- if (filter.searchQuery === "" && filter.enabledLevels.size === ALL_LOG_LEVELS.length) return messages;
1563
- return messages.filter((msg) => {
1564
- if (msg.type !== "log") {
1565
- if (filter.searchQuery) return this.messageMatchesSearch(msg, filter.searchQuery);
1566
- if (msg.type === "group") return true;
1567
- return true;
1568
- }
1569
- const logMsg = msg;
1570
- if (!filter.enabledLevels.has(logMsg.level)) return false;
1571
- if (filter.searchQuery && !this.messageMatchesSearch(logMsg, filter.searchQuery)) return false;
1572
- return true;
1573
- });
1574
- }
1575
- /**
1576
- * Check if a message matches the search query.
1577
- */ static messageMatchesSearch(msg, query) {
1578
- const lowerQuery = query.toLowerCase();
1579
- switch (msg.type) {
1580
- case "log": return msg.content.toLowerCase().includes(lowerQuery) || (msg.label?.toLowerCase().includes(lowerQuery) ?? false);
1581
- case "file":
1582
- case "fileError": return msg.filePath.toLowerCase().includes(lowerQuery) || msg.content.toLowerCase().includes(lowerQuery);
1583
- case "diff": return msg.filePath.toLowerCase().includes(lowerQuery) || msg.diff.toLowerCase().includes(lowerQuery);
1584
- case "loading": return msg.content.toLowerCase().includes(lowerQuery) || (msg.resolvedContent?.toLowerCase().includes(lowerQuery) ?? false);
1585
- case "progress": return msg.label.toLowerCase().includes(lowerQuery);
1586
- case "group": return msg.label.toLowerCase().includes(lowerQuery);
1587
- case "table": return (msg.title?.toLowerCase().includes(lowerQuery) ?? false) || msg.headers.some((h) => h.toLowerCase().includes(lowerQuery)) || msg.rows.some((row) => row.some((cell) => cell.toLowerCase().includes(lowerQuery)));
1588
- default: return false;
1589
- }
1590
- }
1591
- /**
1592
- * Count messages by log level.
1593
- */ static countByLevel(messages) {
1594
- const counts = {
1595
- debug: 0,
1596
- log: 0,
1597
- verbose: 0,
1598
- error: 0,
1599
- fatal: 0,
1600
- warn: 0
1601
- };
1602
- for (const msg of messages) if (msg.type === "log") counts[msg.level]++;
1603
- return counts;
1604
- }
1605
- };
1606
-
1607
- //#endregion
1608
- Object.defineProperty(exports, 'ALL_LOG_LEVELS', {
1609
- enumerable: true,
1610
- get: function () {
1611
- return ALL_LOG_LEVELS;
1612
- }
1613
- });
1614
- Object.defineProperty(exports, 'Adapter', {
1615
- enumerable: true,
1616
- get: function () {
1617
- return Adapter;
1618
- }
1619
- });
1620
- Object.defineProperty(exports, 'COMMON_FILETYPES', {
1621
- enumerable: true,
1622
- get: function () {
1623
- return COMMON_FILETYPES;
1624
- }
1625
- });
1626
- Object.defineProperty(exports, 'DEFAULT_LOG_LEVEL_COLORS', {
1627
- enumerable: true,
1628
- get: function () {
1629
- return DEFAULT_LOG_LEVEL_COLORS;
1630
- }
1631
- });
1632
- Object.defineProperty(exports, 'ERROR_HIGHLIGHT_COLORS', {
1633
- enumerable: true,
1634
- get: function () {
1635
- return ERROR_HIGHLIGHT_COLORS;
1636
- }
1637
- });
1638
- Object.defineProperty(exports, 'FILE_COLORS', {
1639
- enumerable: true,
1640
- get: function () {
1641
- return FILE_COLORS;
1642
- }
1643
- });
1644
- Object.defineProperty(exports, 'FilterEngine', {
1645
- enumerable: true,
1646
- get: function () {
1647
- return FilterEngine;
1648
- }
1649
- });
1650
- Object.defineProperty(exports, 'GROUP_COLORS', {
1651
- enumerable: true,
1652
- get: function () {
1653
- return GROUP_COLORS;
1654
- }
1655
- });
1656
- Object.defineProperty(exports, 'HEADER_COLORS', {
1657
- enumerable: true,
1658
- get: function () {
1659
- return HEADER_COLORS;
1660
- }
1661
- });
1662
- Object.defineProperty(exports, 'KeyboardManager', {
1663
- enumerable: true,
1664
- get: function () {
1665
- return KeyboardManager;
1666
- }
1667
- });
1668
- Object.defineProperty(exports, 'PROGRESS_COLORS', {
1669
- enumerable: true,
1670
- get: function () {
1671
- return PROGRESS_COLORS;
1672
- }
1673
- });
1674
- Object.defineProperty(exports, 'PROMPT_COLORS', {
1675
- enumerable: true,
1676
- get: function () {
1677
- return PROMPT_COLORS;
1678
- }
1679
- });
1680
- Object.defineProperty(exports, 'SEPARATOR_COLORS', {
1681
- enumerable: true,
1682
- get: function () {
1683
- return SEPARATOR_COLORS;
1684
- }
1685
- });
1686
- Object.defineProperty(exports, 'SIDEBAR_COLORS', {
1687
- enumerable: true,
1688
- get: function () {
1689
- return SIDEBAR_COLORS;
1690
- }
1691
- });
1692
- Object.defineProperty(exports, 'STATUS_INDICATORS', {
1693
- enumerable: true,
1694
- get: function () {
1695
- return STATUS_INDICATORS;
1696
- }
1697
- });
1698
- Object.defineProperty(exports, 'TABLE_COLORS', {
1699
- enumerable: true,
1700
- get: function () {
1701
- return TABLE_COLORS;
1702
- }
1703
- });
1704
- Object.defineProperty(exports, 'VARIANT_COLORS', {
1705
- enumerable: true,
1706
- get: function () {
1707
- return VARIANT_COLORS;
1708
- }
1709
- });
1710
- Object.defineProperty(exports, 'captureTrace', {
1711
- enumerable: true,
1712
- get: function () {
1713
- return captureTrace;
1714
- }
1715
- });
1716
- Object.defineProperty(exports, 'createBorderColor', {
1717
- enumerable: true,
1718
- get: function () {
1719
- return createBorderColor;
1720
- }
1721
- });
1722
- Object.defineProperty(exports, 'createDefaultBindings', {
1723
- enumerable: true,
1724
- get: function () {
1725
- return createDefaultBindings;
1726
- }
1727
- });
1728
- Object.defineProperty(exports, 'createDefaultFilterState', {
1729
- enumerable: true,
1730
- get: function () {
1731
- return createDefaultFilterState;
1732
- }
1733
- });
1734
- Object.defineProperty(exports, 'createTheme', {
1735
- enumerable: true,
1736
- get: function () {
1737
- return createTheme;
1738
- }
1739
- });
1740
- Object.defineProperty(exports, 'createThemeFrom', {
1741
- enumerable: true,
1742
- get: function () {
1743
- return createThemeFrom;
1744
- }
1745
- });
1746
- Object.defineProperty(exports, 'createTintedColor', {
1747
- enumerable: true,
1748
- get: function () {
1749
- return createTintedColor;
1750
- }
1751
- });
1752
- Object.defineProperty(exports, 'darkTheme', {
1753
- enumerable: true,
1754
- get: function () {
1755
- return darkTheme;
1756
- }
1757
- });
1758
- Object.defineProperty(exports, 'formatKeyBinding', {
1759
- enumerable: true,
1760
- get: function () {
1761
- return formatKeyBinding;
1762
- }
1763
- });
1764
- Object.defineProperty(exports, 'formatObject', {
1765
- enumerable: true,
1766
- get: function () {
1767
- return formatObject;
1768
- }
1769
- });
1770
- Object.defineProperty(exports, 'getFileName', {
1771
- enumerable: true,
1772
- get: function () {
1773
- return getFileName;
1774
- }
1775
- });
1776
- Object.defineProperty(exports, 'getLogLevelColors', {
1777
- enumerable: true,
1778
- get: function () {
1779
- return getLogLevelColors;
1780
- }
1781
- });
1782
- Object.defineProperty(exports, 'getThemePreset', {
1783
- enumerable: true,
1784
- get: function () {
1785
- return getThemePreset;
1786
- }
1787
- });
1788
- Object.defineProperty(exports, 'handlePrintableInput', {
1789
- enumerable: true,
1790
- get: function () {
1791
- return handlePrintableInput;
1792
- }
1793
- });
1794
- Object.defineProperty(exports, 'hasActiveFilter', {
1795
- enumerable: true,
1796
- get: function () {
1797
- return hasActiveFilter;
1798
- }
1799
- });
1800
- Object.defineProperty(exports, 'highContrastTheme', {
1801
- enumerable: true,
1802
- get: function () {
1803
- return highContrastTheme;
1804
- }
1805
- });
1806
- Object.defineProperty(exports, 'lightTheme', {
1807
- enumerable: true,
1808
- get: function () {
1809
- return lightTheme;
1810
- }
1811
- });
1812
- Object.defineProperty(exports, 'mergeThemes', {
1813
- enumerable: true,
1814
- get: function () {
1815
- return mergeThemes;
1816
- }
1817
- });
1818
- Object.defineProperty(exports, 'printMessagesToStdout', {
1819
- enumerable: true,
1820
- get: function () {
1821
- return printMessagesToStdout;
1822
- }
1823
- });
1824
- Object.defineProperty(exports, 'resolveFiletype', {
1825
- enumerable: true,
1826
- get: function () {
1827
- return resolveFiletype;
1828
- }
1829
- });
1830
- Object.defineProperty(exports, 'resolveTheme', {
1831
- enumerable: true,
1832
- get: function () {
1833
- return resolveTheme;
1834
- }
1835
- });
1836
- //# sourceMappingURL=filter_engine-DXqu9Vaq.cjs.map