@navios/commander-tui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +275 -0
- package/coverage/__tests__/utils/factories.ts.html +1147 -0
- package/coverage/__tests__/utils/index.html +131 -0
- package/coverage/__tests__/utils/render-utils.tsx.html +202 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +959 -0
- package/coverage/components/filter/filter_bar.tsx.html +322 -0
- package/coverage/components/filter/index.html +116 -0
- package/coverage/components/log/index.html +131 -0
- package/coverage/components/log/index.ts.html +88 -0
- package/coverage/components/log/log_message.tsx.html +391 -0
- package/coverage/components/prompt/index.html +116 -0
- package/coverage/components/prompt/prompt_renderer.tsx.html +1123 -0
- package/coverage/components/screen/index.html +131 -0
- package/coverage/components/screen/loading_message.tsx.html +217 -0
- package/coverage/components/screen/progress_message.tsx.html +265 -0
- package/coverage/components/sidebar/index.html +146 -0
- package/coverage/components/sidebar/sidebar.tsx.html +391 -0
- package/coverage/components/sidebar/sidebar_item.tsx.html +235 -0
- package/coverage/components/sidebar/sidebar_separator.tsx.html +124 -0
- package/coverage/context/index.html +131 -0
- package/coverage/context/index.ts.html +88 -0
- package/coverage/context/logger_context.tsx.html +412 -0
- package/coverage/coverage-final.json +55 -0
- package/coverage/favicon.png +0 -0
- package/coverage/filter/filter_engine.ts.html +424 -0
- package/coverage/filter/index.html +116 -0
- package/coverage/hooks/index.html +131 -0
- package/coverage/hooks/index.ts.html +88 -0
- package/coverage/hooks/use_theme.ts.html +121 -0
- package/coverage/index.html +356 -0
- package/coverage/keyboard/index.html +116 -0
- package/coverage/keyboard/keyboard_manager.ts.html +784 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/schemas/index.html +161 -0
- package/coverage/schemas/index.ts.html +94 -0
- package/coverage/schemas/logger-options.ts.html +124 -0
- package/coverage/schemas/prompt-options.ts.html +112 -0
- package/coverage/schemas/screen-options.ts.html +127 -0
- package/coverage/services/index.html +146 -0
- package/coverage/services/logger.ts.html +1192 -0
- package/coverage/services/prompt.ts.html +568 -0
- package/coverage/services/screen.ts.html +1804 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/themes/dark.ts.html +604 -0
- package/coverage/themes/high-contrast.ts.html +619 -0
- package/coverage/themes/index.html +176 -0
- package/coverage/themes/index.ts.html +97 -0
- package/coverage/themes/light.ts.html +601 -0
- package/coverage/themes/utils.ts.html +334 -0
- package/coverage/tokens/index.html +161 -0
- package/coverage/tokens/index.ts.html +94 -0
- package/coverage/tokens/logger.ts.html +115 -0
- package/coverage/tokens/prompt.ts.html +115 -0
- package/coverage/tokens/screen.ts.html +115 -0
- package/coverage/types/file.types.ts.html +265 -0
- package/coverage/types/filter.types.ts.html +238 -0
- package/coverage/types/index.html +236 -0
- package/coverage/types/index.ts.html +151 -0
- package/coverage/types/keyboard.types.ts.html +364 -0
- package/coverage/types/log.types.ts.html +268 -0
- package/coverage/types/message.types.ts.html +445 -0
- package/coverage/types/prompt.types.ts.html +403 -0
- package/coverage/types/screen.types.ts.html +451 -0
- package/coverage/types/theme.types.ts.html +841 -0
- package/coverage/utils/colors/file-colors.ts.html +112 -0
- package/coverage/utils/colors/helpers.ts.html +235 -0
- package/coverage/utils/colors/index.html +221 -0
- package/coverage/utils/colors/index.ts.html +145 -0
- package/coverage/utils/colors/log-colors.ts.html +253 -0
- package/coverage/utils/colors/progress-colors.ts.html +160 -0
- package/coverage/utils/colors/prompt-colors.ts.html +175 -0
- package/coverage/utils/colors/sidebar-colors.ts.html +241 -0
- package/coverage/utils/colors/table-colors.ts.html +118 -0
- package/coverage/utils/filetype.ts.html +277 -0
- package/coverage/utils/format.ts.html +241 -0
- package/coverage/utils/index.html +161 -0
- package/coverage/utils/index.ts.html +118 -0
- package/coverage/utils/stdout-printer.ts.html +523 -0
- package/dist/src/components/file/file_log.d.ts +35 -0
- package/dist/src/components/file/file_log.d.ts.map +1 -0
- package/dist/src/components/file/index.d.ts +2 -0
- package/dist/src/components/file/index.d.ts.map +1 -0
- package/dist/src/components/filter/filter_bar.d.ts +10 -0
- package/dist/src/components/filter/filter_bar.d.ts.map +1 -0
- package/dist/src/components/filter/index.d.ts +2 -0
- package/dist/src/components/filter/index.d.ts.map +1 -0
- package/dist/src/components/help/help_overlay.d.ts +10 -0
- package/dist/src/components/help/help_overlay.d.ts.map +1 -0
- package/dist/src/components/help/index.d.ts +2 -0
- package/dist/src/components/help/index.d.ts.map +1 -0
- package/dist/src/components/index.d.ts +27 -0
- package/dist/src/components/index.d.ts.map +1 -0
- package/dist/src/components/log/debug_log.d.ts +3 -0
- package/dist/src/components/log/debug_log.d.ts.map +1 -0
- package/dist/src/components/log/error_log.d.ts +3 -0
- package/dist/src/components/log/error_log.d.ts.map +1 -0
- package/dist/src/components/log/fatal_log.d.ts +3 -0
- package/dist/src/components/log/fatal_log.d.ts.map +1 -0
- package/dist/src/components/log/index.d.ts +9 -0
- package/dist/src/components/log/index.d.ts.map +1 -0
- package/dist/src/components/log/info_log.d.ts +3 -0
- package/dist/src/components/log/info_log.d.ts.map +1 -0
- package/dist/src/components/log/log_message.d.ts +33 -0
- package/dist/src/components/log/log_message.d.ts.map +1 -0
- package/dist/src/components/log/success_log.d.ts +3 -0
- package/dist/src/components/log/success_log.d.ts.map +1 -0
- package/dist/src/components/log/trace_log.d.ts +3 -0
- package/dist/src/components/log/trace_log.d.ts.map +1 -0
- package/dist/src/components/log/warning_log.d.ts +3 -0
- package/dist/src/components/log/warning_log.d.ts.map +1 -0
- package/dist/src/components/prompt/index.d.ts +3 -0
- package/dist/src/components/prompt/index.d.ts.map +1 -0
- package/dist/src/components/prompt/prompt_renderer.d.ts +6 -0
- package/dist/src/components/prompt/prompt_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/group_renderer.d.ts +19 -0
- package/dist/src/components/screen/group_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/index.d.ts +13 -0
- package/dist/src/components/screen/index.d.ts.map +1 -0
- package/dist/src/components/screen/loading_message.d.ts +6 -0
- package/dist/src/components/screen/loading_message.d.ts.map +1 -0
- package/dist/src/components/screen/message_renderer.d.ts +8 -0
- package/dist/src/components/screen/message_renderer.d.ts.map +1 -0
- package/dist/src/components/screen/progress_message.d.ts +8 -0
- package/dist/src/components/screen/progress_message.d.ts.map +1 -0
- package/dist/src/components/screen/screen_bridge.d.ts +20 -0
- package/dist/src/components/screen/screen_bridge.d.ts.map +1 -0
- package/dist/src/components/screen/table_message.d.ts +6 -0
- package/dist/src/components/screen/table_message.d.ts.map +1 -0
- package/dist/src/components/screen_manager_bridge.d.ts +11 -0
- package/dist/src/components/screen_manager_bridge.d.ts.map +1 -0
- package/dist/src/components/sidebar/index.d.ts +6 -0
- package/dist/src/components/sidebar/index.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar.d.ts +18 -0
- package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar_item.d.ts +14 -0
- package/dist/src/components/sidebar/sidebar_item.d.ts.map +1 -0
- package/dist/src/components/sidebar/sidebar_separator.d.ts +2 -0
- package/dist/src/components/sidebar/sidebar_separator.d.ts.map +1 -0
- package/dist/src/context/logger_context.d.ts +60 -0
- package/dist/src/context/logger_context.d.ts.map +1 -0
- package/dist/src/filter/filter_engine.d.ts +20 -0
- package/dist/src/filter/filter_engine.d.ts.map +1 -0
- package/dist/src/filter/index.d.ts +4 -0
- package/dist/src/filter/index.d.ts.map +1 -0
- package/dist/src/hooks/index.d.ts +2 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/use_theme.d.ts +7 -0
- package/dist/src/hooks/use_theme.d.ts.map +1 -0
- package/dist/src/index.d.ts +88 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keyboard/create_bindings.d.ts +31 -0
- package/dist/src/keyboard/create_bindings.d.ts.map +1 -0
- package/dist/src/keyboard/index.d.ts +12 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/keyboard_manager.d.ts +69 -0
- package/dist/src/keyboard/keyboard_manager.d.ts.map +1 -0
- package/dist/src/services/index.d.ts +5 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/logger.d.ts +61 -0
- package/dist/src/services/logger.d.ts.map +1 -0
- package/dist/src/services/prompt.d.ts +37 -0
- package/dist/src/services/prompt.d.ts.map +1 -0
- package/dist/src/services/screen.d.ts +165 -0
- package/dist/src/services/screen.d.ts.map +1 -0
- package/dist/src/services/screen_manager.d.ts +124 -0
- package/dist/src/services/screen_manager.d.ts.map +1 -0
- package/dist/src/themes/dark.d.ts +7 -0
- package/dist/src/themes/dark.d.ts.map +1 -0
- package/dist/src/themes/high-contrast.d.ts +7 -0
- package/dist/src/themes/high-contrast.d.ts.map +1 -0
- package/dist/src/themes/index.d.ts +18 -0
- package/dist/src/themes/index.d.ts.map +1 -0
- package/dist/src/themes/light.d.ts +6 -0
- package/dist/src/themes/light.d.ts.map +1 -0
- package/dist/src/themes/utils.d.ts +22 -0
- package/dist/src/themes/utils.d.ts.map +1 -0
- package/dist/src/types/file.types.d.ts +40 -0
- package/dist/src/types/file.types.d.ts.map +1 -0
- package/dist/src/types/filter.types.d.ts +31 -0
- package/dist/src/types/filter.types.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +81 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/keyboard.types.d.ts +83 -0
- package/dist/src/types/keyboard.types.d.ts.map +1 -0
- package/dist/src/types/log.types.d.ts +32 -0
- package/dist/src/types/log.types.d.ts.map +1 -0
- package/dist/src/types/message.types.d.ts +91 -0
- package/dist/src/types/message.types.d.ts.map +1 -0
- package/dist/src/types/prompt.types.d.ts +89 -0
- package/dist/src/types/prompt.types.d.ts.map +1 -0
- package/dist/src/types/screen.types.d.ts +85 -0
- package/dist/src/types/screen.types.d.ts.map +1 -0
- package/dist/src/types/theme.types.d.ts +216 -0
- package/dist/src/types/theme.types.d.ts.map +1 -0
- package/dist/src/utils/colors/file-colors.d.ts +10 -0
- package/dist/src/utils/colors/file-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/helpers.d.ts +29 -0
- package/dist/src/utils/colors/helpers.d.ts.map +1 -0
- package/dist/src/utils/colors/index.d.ts +13 -0
- package/dist/src/utils/colors/index.d.ts.map +1 -0
- package/dist/src/utils/colors/log-colors.d.ts +15 -0
- package/dist/src/utils/colors/log-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/progress-colors.d.ts +25 -0
- package/dist/src/utils/colors/progress-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/prompt-colors.d.ts +22 -0
- package/dist/src/utils/colors/prompt-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/sidebar-colors.d.ts +50 -0
- package/dist/src/utils/colors/sidebar-colors.d.ts.map +1 -0
- package/dist/src/utils/colors/table-colors.d.ts +12 -0
- package/dist/src/utils/colors/table-colors.d.ts.map +1 -0
- package/dist/src/utils/filetype.d.ts +19 -0
- package/dist/src/utils/filetype.d.ts.map +1 -0
- package/dist/src/utils/format.d.ts +9 -0
- package/dist/src/utils/format.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +20 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/stdout-printer.d.ts +10 -0
- package/dist/src/utils/stdout-printer.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/tsdown.config.d.mts +5 -0
- package/dist/tsdown.config.d.mts.map +1 -0
- package/dist/vitest.config.d.mts +3 -0
- package/dist/vitest.config.d.mts.map +1 -0
- package/lib/index.cjs +6349 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.cts +1720 -0
- package/lib/index.d.cts.map +1 -0
- package/lib/index.d.mts +1720 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +6264 -0
- package/lib/index.mjs.map +1 -0
- package/lib/screen_manager_bridge-BpDgVu3e.cjs +3357 -0
- package/lib/screen_manager_bridge-BpDgVu3e.cjs.map +1 -0
- package/lib/screen_manager_bridge-CkV7637i.cjs +3 -0
- package/lib/screen_manager_bridge-DN2J6_k1.mjs +3 -0
- package/lib/screen_manager_bridge-Dfg4QUrl.mjs +3034 -0
- package/lib/screen_manager_bridge-Dfg4QUrl.mjs.map +1 -0
- package/package.json +43 -0
- package/project.json +60 -0
- package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +2245 -0
- package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +1382 -0
- package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +3169 -0
- package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +1743 -0
- package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +3135 -0
- package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +2617 -0
- package/src/__tests__/components/filter_bar.spec.tsx +190 -0
- package/src/__tests__/components/loading_message.spec.tsx +110 -0
- package/src/__tests__/components/log_message.spec.tsx +166 -0
- package/src/__tests__/components/progress_message.spec.tsx +147 -0
- package/src/__tests__/components/prompt_renderer.spec.tsx +274 -0
- package/src/__tests__/components/sidebar.spec.tsx +305 -0
- package/src/__tests__/filter/filter_engine.spec.ts +325 -0
- package/src/__tests__/keyboard/keyboard_manager.spec.ts +557 -0
- package/src/__tests__/mocks/scm-mock.ts +5 -0
- package/src/__tests__/services/logger.spec.ts +630 -0
- package/src/__tests__/services/prompt.spec.ts +411 -0
- package/src/__tests__/services/screen.spec.ts +721 -0
- package/src/__tests__/setup.ts +43 -0
- package/src/__tests__/utils/factories.ts +354 -0
- package/src/__tests__/utils/filetype.spec.ts +195 -0
- package/src/__tests__/utils/format.spec.ts +178 -0
- package/src/__tests__/utils/render-utils.tsx +39 -0
- package/src/__tests__/utils/test-container.ts +48 -0
- package/src/components/file/file_log.tsx +241 -0
- package/src/components/file/index.ts +1 -0
- package/src/components/filter/filter_bar.tsx +79 -0
- package/src/components/filter/index.ts +1 -0
- package/src/components/help/help_overlay.tsx +100 -0
- package/src/components/help/index.ts +1 -0
- package/src/components/index.ts +15 -0
- package/src/components/log/index.ts +1 -0
- package/src/components/log/log_message.tsx +102 -0
- package/src/components/prompt/index.ts +2 -0
- package/src/components/prompt/prompt_renderer.tsx +346 -0
- package/src/components/screen/group_renderer.tsx +64 -0
- package/src/components/screen/index.ts +6 -0
- package/src/components/screen/loading_message.tsx +44 -0
- package/src/components/screen/message_renderer.tsx +108 -0
- package/src/components/screen/progress_message.tsx +60 -0
- package/src/components/screen/screen_bridge.tsx +149 -0
- package/src/components/screen/table_message.tsx +57 -0
- package/src/components/screen_manager_bridge.tsx +245 -0
- package/src/components/sidebar/index.ts +3 -0
- package/src/components/sidebar/sidebar.tsx +102 -0
- package/src/components/sidebar/sidebar_item.tsx +50 -0
- package/src/components/sidebar/sidebar_separator.tsx +13 -0
- package/src/context/index.ts +1 -0
- package/src/context/logger_context.tsx +109 -0
- package/src/factories/index.ts +1 -0
- package/src/factories/screen.factory.ts +22 -0
- package/src/filter/filter_engine.ts +113 -0
- package/src/filter/index.ts +1 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use_theme.ts +12 -0
- package/src/index.ts +64 -0
- package/src/keyboard/create_bindings.ts +457 -0
- package/src/keyboard/index.ts +2 -0
- package/src/keyboard/keyboard_manager.ts +233 -0
- package/src/overrides/console.logger.override.ts +61 -0
- package/src/overrides/index.ts +1 -0
- package/src/schemas/index.ts +3 -0
- package/src/schemas/logger-options.ts +13 -0
- package/src/schemas/prompt-options.ts +9 -0
- package/src/schemas/screen-options.ts +14 -0
- package/src/services/index.ts +4 -0
- package/src/services/logger.ts +369 -0
- package/src/services/prompt.ts +169 -0
- package/src/services/screen.ts +590 -0
- package/src/services/screen_manager.tsx +390 -0
- package/src/themes/dark.ts +173 -0
- package/src/themes/high-contrast.ts +178 -0
- package/src/themes/index.ts +4 -0
- package/src/themes/light.ts +172 -0
- package/src/themes/utils.ts +83 -0
- package/src/tokens/index.ts +3 -0
- package/src/tokens/logger.ts +10 -0
- package/src/tokens/prompt.ts +10 -0
- package/src/tokens/screen.ts +10 -0
- package/src/types/file.types.ts +60 -0
- package/src/types/filter.types.ts +51 -0
- package/src/types/index.ts +22 -0
- package/src/types/keyboard.types.ts +93 -0
- package/src/types/log.types.ts +61 -0
- package/src/types/message.types.ts +120 -0
- package/src/types/prompt.types.ts +106 -0
- package/src/types/screen.types.ts +124 -0
- package/src/types/theme.types.ts +252 -0
- package/src/utils/colors/file-colors.ts +9 -0
- package/src/utils/colors/helpers.ts +50 -0
- package/src/utils/colors/index.ts +20 -0
- package/src/utils/colors/log-colors.ts +56 -0
- package/src/utils/colors/progress-colors.ts +25 -0
- package/src/utils/colors/prompt-colors.ts +30 -0
- package/src/utils/colors/sidebar-colors.ts +52 -0
- package/src/utils/colors/table-colors.ts +11 -0
- package/src/utils/filetype.ts +64 -0
- package/src/utils/format.ts +52 -0
- package/src/utils/index.ts +11 -0
- package/src/utils/stdout-printer.ts +255 -0
- package/tsconfig.json +14 -0
- package/tsdown.config.mts +34 -0
- package/vitest.config.mts +10 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2025-01-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **ScreenManager** - Terminal UI lifecycle management with theme support
|
|
13
|
+
- **ScreenLogger** - Rich logging with multiple levels (log, debug, warn, error, success, trace, fatal)
|
|
14
|
+
- **Prompt** - Interactive prompts (confirm, choice, multi-choice, input) with timeout support
|
|
15
|
+
- **Loading indicators** - Spinner-based loading with manual and promise-based resolution
|
|
16
|
+
- **Progress bars** - Visual progress tracking with completion/failure states
|
|
17
|
+
- **Tables** - Formatted table output with headers and borders
|
|
18
|
+
- **Log groups** - Collapsible log grouping for organized output
|
|
19
|
+
- **File display** - Syntax-highlighted file content and diff views
|
|
20
|
+
- **Multi-screen support** - Sidebar navigation between multiple screens
|
|
21
|
+
- **Theming** - Built-in dark, light, and high-contrast themes
|
|
22
|
+
- **Keyboard navigation** - Configurable keyboard bindings for UI interaction
|
|
23
|
+
- **Filter engine** - Log filtering by level, content, and context
|
|
24
|
+
- **Stdout printing** - Fallback printing when TUI is not available
|
|
25
|
+
- **Dependency injection** - Seamless integration with `@navios/core` container
|
package/README.md
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# @navios/commander-tui
|
|
2
|
+
|
|
3
|
+
A powerful terminal user interface (TUI) library for building beautiful CLI applications with React. Built on top of [@opentui/react](https://github.com/nicepkg/opentui), it provides a high-level API for logging, prompts, progress indicators, and multi-screen management.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Rich Logging** - Multiple log levels (log, debug, warn, error, success, trace, fatal) with contextual labels
|
|
8
|
+
- **Interactive Prompts** - Confirm, choice, multi-choice, and text input prompts
|
|
9
|
+
- **Progress Indicators** - Loading spinners and progress bars with manual or promise-based resolution
|
|
10
|
+
- **Multi-Screen Support** - Manage multiple screens with a sidebar navigation
|
|
11
|
+
- **Tables & Groups** - Display tabular data and collapsible log groups
|
|
12
|
+
- **File Display** - Syntax-highlighted file content and diff views
|
|
13
|
+
- **Theming** - Built-in dark, light, and high-contrast themes
|
|
14
|
+
- **Dependency Injection** - Seamless integration with `@navios/core` container
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @navios/commander-tui @navios/core
|
|
20
|
+
# or
|
|
21
|
+
yarn add @navios/commander-tui @navios/core
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { ScreenLogger, ScreenManager } from '@navios/commander-tui'
|
|
28
|
+
import { Container } from '@navios/core'
|
|
29
|
+
|
|
30
|
+
async function main() {
|
|
31
|
+
const container = new Container()
|
|
32
|
+
|
|
33
|
+
// Initialize the screen manager
|
|
34
|
+
const screenManager = await container.get(ScreenManager)
|
|
35
|
+
await screenManager.bind({ theme: 'dark' })
|
|
36
|
+
|
|
37
|
+
// Get a logger instance
|
|
38
|
+
const logger = await container.get(ScreenLogger, {
|
|
39
|
+
screen: { name: 'Main' },
|
|
40
|
+
context: 'App',
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
// Log messages
|
|
44
|
+
logger.log('Application started')
|
|
45
|
+
logger.debug('Debug information')
|
|
46
|
+
logger.warn('Warning message')
|
|
47
|
+
logger.error('Error occurred')
|
|
48
|
+
logger.success('Operation completed!')
|
|
49
|
+
|
|
50
|
+
// Cleanup when done
|
|
51
|
+
screenManager.unbind()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
main()
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## API Reference
|
|
58
|
+
|
|
59
|
+
### ScreenManager
|
|
60
|
+
|
|
61
|
+
The main entry point for managing the TUI display.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
const screenManager = await container.get(ScreenManager)
|
|
65
|
+
|
|
66
|
+
// Bind to the terminal with options
|
|
67
|
+
await screenManager.bind({
|
|
68
|
+
theme: 'dark', // 'dark' | 'light' | 'high-contrast'
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
// Get a screen by name
|
|
72
|
+
const screen = screenManager.getScreenByName('Build')
|
|
73
|
+
screen?.setStatus('success') // 'success' | 'error' | 'warning'
|
|
74
|
+
|
|
75
|
+
// Unbind when done
|
|
76
|
+
screenManager.unbind()
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### ScreenLogger
|
|
80
|
+
|
|
81
|
+
A logger service that writes messages to a specific screen.
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const logger = await container.get(ScreenLogger, {
|
|
85
|
+
screen: { name: 'Build', icon: '🔨' },
|
|
86
|
+
context: 'Build', // Optional context label
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
// Log levels
|
|
90
|
+
logger.log('Info message')
|
|
91
|
+
logger.debug('Debug message')
|
|
92
|
+
logger.warn('Warning message')
|
|
93
|
+
logger.error('Error message')
|
|
94
|
+
logger.success('Success message')
|
|
95
|
+
logger.trace('Trace with stack')
|
|
96
|
+
logger.fatal('Fatal error')
|
|
97
|
+
|
|
98
|
+
// All methods are chainable
|
|
99
|
+
logger.log('Step 1').log('Step 2').success('Done!')
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### Loading Indicators
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
// Manual loading control
|
|
106
|
+
const loading = logger.loading('Loading configuration...')
|
|
107
|
+
// ... do work ...
|
|
108
|
+
loading.success('Configuration loaded!')
|
|
109
|
+
// or
|
|
110
|
+
loading.fail('Failed to load configuration')
|
|
111
|
+
|
|
112
|
+
// Promise-based (sonner-style)
|
|
113
|
+
const result = await logger.promise(fetchData(), {
|
|
114
|
+
loading: 'Fetching data...',
|
|
115
|
+
success: 'Data fetched!',
|
|
116
|
+
error: 'Failed to fetch data',
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
// With dynamic messages
|
|
120
|
+
await logger.promise(fetchData(), {
|
|
121
|
+
loading: 'Fetching data...',
|
|
122
|
+
success: (data) => `Fetched ${data.length} items`,
|
|
123
|
+
error: (err) => `Error: ${err.message}`,
|
|
124
|
+
})
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### Progress Bars
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const progress = logger.progress('Processing files', { total: 100 })
|
|
131
|
+
|
|
132
|
+
for (let i = 0; i <= 100; i += 10) {
|
|
133
|
+
progress.update(i, `Processing (${i}%)`)
|
|
134
|
+
await delay(100)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
progress.complete('All files processed!')
|
|
138
|
+
// or
|
|
139
|
+
progress.fail('Processing failed')
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### Tables
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
logger.table(
|
|
146
|
+
[
|
|
147
|
+
{ name: 'Alice', age: 30, role: 'Developer' },
|
|
148
|
+
{ name: 'Bob', age: 25, role: 'Designer' },
|
|
149
|
+
],
|
|
150
|
+
{ title: 'Team Members' }
|
|
151
|
+
)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### Log Groups
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
logger.group('Database Connection')
|
|
158
|
+
logger.log('Connecting...')
|
|
159
|
+
logger.debug('Host: localhost:5432')
|
|
160
|
+
logger.success('Connected!')
|
|
161
|
+
logger.groupEnd()
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### File Display
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Display file content with syntax highlighting
|
|
168
|
+
logger.file('/src/app.ts', fileContent)
|
|
169
|
+
|
|
170
|
+
// Display diff
|
|
171
|
+
logger.diff('/src/app.ts', diffContent, 'unified') // or 'split'
|
|
172
|
+
|
|
173
|
+
// Display file with error lines highlighted
|
|
174
|
+
logger.fileError('/src/app.ts', fileContent, [5, 10, 15], 1)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Prompt
|
|
178
|
+
|
|
179
|
+
Interactive prompts for user input.
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
const prompt = await container.get(Prompt, {
|
|
183
|
+
screen: 'Main',
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
// Confirm prompt
|
|
187
|
+
const confirmed = await prompt.confirm({
|
|
188
|
+
question: 'Continue?',
|
|
189
|
+
confirmText: 'Yes',
|
|
190
|
+
cancelText: 'No',
|
|
191
|
+
defaultValue: true,
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
// Single choice
|
|
195
|
+
const choice = await prompt.choice({
|
|
196
|
+
question: 'Select a framework:',
|
|
197
|
+
choices: [
|
|
198
|
+
{ label: 'React', value: 'react' },
|
|
199
|
+
{ label: 'Vue', value: 'vue' },
|
|
200
|
+
{ label: 'Other', value: 'other', input: true }, // Allows custom input
|
|
201
|
+
],
|
|
202
|
+
defaultChoice: 'react',
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
// Text input
|
|
206
|
+
const name = await prompt.input({
|
|
207
|
+
question: 'Project name?',
|
|
208
|
+
placeholder: 'my-project',
|
|
209
|
+
defaultValue: 'untitled',
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
// Multi-select
|
|
213
|
+
const features = await prompt.multiChoice({
|
|
214
|
+
question: 'Select features:',
|
|
215
|
+
choices: [
|
|
216
|
+
{ label: 'TypeScript', value: 'typescript' },
|
|
217
|
+
{ label: 'ESLint', value: 'eslint' },
|
|
218
|
+
{ label: 'Prettier', value: 'prettier' },
|
|
219
|
+
],
|
|
220
|
+
defaultChoices: ['typescript'],
|
|
221
|
+
minSelect: 1,
|
|
222
|
+
maxSelect: 3,
|
|
223
|
+
})
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
All prompts support an optional `timeout` parameter for auto-resolution:
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const confirmed = await prompt.confirm({
|
|
230
|
+
question: 'Continue?',
|
|
231
|
+
timeout: 5000, // Auto-resolve with default after 5 seconds
|
|
232
|
+
})
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Multi-Screen Example
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
const container = new Container()
|
|
239
|
+
|
|
240
|
+
const screenManager = await container.get(ScreenManager)
|
|
241
|
+
await screenManager.bind({ theme: 'dark' })
|
|
242
|
+
|
|
243
|
+
// Create loggers for different screens
|
|
244
|
+
const buildLogger = await container.get(ScreenLogger, {
|
|
245
|
+
screen: { name: 'Build', icon: '🔨' },
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
const testLogger = await container.get(ScreenLogger, {
|
|
249
|
+
screen: { name: 'Tests', icon: '🧪' },
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
// Each logger writes to its own screen
|
|
253
|
+
buildLogger.log('Building project...')
|
|
254
|
+
testLogger.log('Running tests...')
|
|
255
|
+
|
|
256
|
+
// Update screen status indicators
|
|
257
|
+
const buildScreen = screenManager.getScreenByName('Build')
|
|
258
|
+
buildScreen?.setStatus('success')
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## Themes
|
|
262
|
+
|
|
263
|
+
Three built-in themes are available:
|
|
264
|
+
|
|
265
|
+
- `dark` - Dark background with light text (default)
|
|
266
|
+
- `light` - Light background with dark text
|
|
267
|
+
- `high-contrast` - High contrast for accessibility
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
await screenManager.bind({ theme: 'high-contrast' })
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## License
|
|
274
|
+
|
|
275
|
+
MIT
|