@navios/commander-tui 1.2.0 → 1.4.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 +52 -0
- package/README.md +42 -1
- package/{src/__tests__/mocks/scm-mock.ts → dist/base/src/__tests__/mocks/scm-mock.d.ts} +3 -1
- package/dist/base/src/__tests__/mocks/scm-mock.d.ts.map +1 -0
- package/dist/base/src/__tests__/setup.d.ts +2 -0
- package/dist/base/src/__tests__/setup.d.ts.map +1 -0
- package/dist/base/src/__tests__/utils/factories.d.ts +67 -0
- package/dist/base/src/__tests__/utils/factories.d.ts.map +1 -0
- package/dist/base/src/__tests__/utils/render-utils.d.ts +21 -0
- package/dist/base/src/__tests__/utils/render-utils.d.ts.map +1 -0
- package/dist/base/src/__tests__/utils/test-container.d.ts +20 -0
- package/dist/base/src/__tests__/utils/test-container.d.ts.map +1 -0
- package/dist/base/src/adapters/index.d.ts +2 -0
- package/dist/base/src/adapters/index.d.ts.map +1 -0
- package/dist/base/src/adapters/interface.d.ts +52 -0
- package/dist/base/src/adapters/interface.d.ts.map +1 -0
- package/dist/base/src/components/index.d.ts +2 -0
- package/dist/base/src/components/index.d.ts.map +1 -0
- package/dist/base/src/context/index.d.ts +2 -0
- package/dist/base/src/context/index.d.ts.map +1 -0
- package/dist/base/src/factories/index.d.ts +3 -0
- package/dist/base/src/factories/index.d.ts.map +1 -0
- package/dist/base/src/factories/isomorphic-logger.factory.d.ts +8 -0
- package/dist/base/src/factories/isomorphic-logger.factory.d.ts.map +1 -0
- package/dist/base/src/factories/screen.factory.d.ts +8 -0
- package/dist/base/src/factories/screen.factory.d.ts.map +1 -0
- package/dist/base/src/filter/filter_engine.d.ts +19 -0
- package/dist/base/src/filter/filter_engine.d.ts.map +1 -0
- package/dist/base/src/filter/index.d.ts +2 -0
- package/dist/base/src/filter/index.d.ts.map +1 -0
- package/dist/base/src/hooks/index.d.ts +2 -0
- package/dist/base/src/hooks/index.d.ts.map +1 -0
- package/dist/base/src/index.d.ts +16 -0
- package/dist/base/src/index.d.ts.map +1 -0
- package/dist/base/src/interfaces/index.d.ts +2 -0
- package/dist/base/src/interfaces/index.d.ts.map +1 -0
- package/dist/base/src/interfaces/isomorphic-logger.d.ts +9 -0
- package/dist/base/src/interfaces/isomorphic-logger.d.ts.map +1 -0
- package/dist/base/src/keyboard/create_bindings.d.ts +26 -0
- package/dist/base/src/keyboard/create_bindings.d.ts.map +1 -0
- package/dist/base/src/keyboard/index.d.ts +3 -0
- package/dist/base/src/keyboard/index.d.ts.map +1 -0
- package/dist/base/src/keyboard/keyboard_manager.d.ts +63 -0
- package/dist/base/src/keyboard/keyboard_manager.d.ts.map +1 -0
- package/dist/base/src/overrides/console.logger.override.d.ts +3 -0
- package/dist/base/src/overrides/console.logger.override.d.ts.map +1 -0
- package/dist/base/src/overrides/index.d.ts +3 -0
- package/dist/base/src/overrides/index.d.ts.map +1 -0
- package/dist/base/src/overrides/missing-adapter.override.d.ts +16 -0
- package/dist/base/src/overrides/missing-adapter.override.d.ts.map +1 -0
- package/dist/base/src/schemas/index.d.ts +4 -0
- package/dist/base/src/schemas/index.d.ts.map +1 -0
- package/dist/base/src/schemas/logger-options.d.ts +21 -0
- package/dist/base/src/schemas/logger-options.d.ts.map +1 -0
- package/dist/base/src/schemas/prompt-options.d.ts +12 -0
- package/dist/base/src/schemas/prompt-options.d.ts.map +1 -0
- package/dist/base/src/schemas/screen-options.d.ts +10 -0
- package/dist/base/src/schemas/screen-options.d.ts.map +1 -0
- package/dist/base/src/services/index.d.ts +6 -0
- package/dist/base/src/services/index.d.ts.map +1 -0
- package/dist/base/src/services/logger.d.ts +52 -0
- package/dist/base/src/services/logger.d.ts.map +1 -0
- package/dist/base/src/services/prompt.d.ts +31 -0
- package/dist/base/src/services/prompt.d.ts.map +1 -0
- package/dist/base/src/services/readline_prompt.d.ts +27 -0
- package/dist/base/src/services/readline_prompt.d.ts.map +1 -0
- package/dist/base/src/services/screen.d.ts +167 -0
- package/dist/base/src/services/screen.d.ts.map +1 -0
- package/dist/base/src/services/screen_manager.d.ts +180 -0
- package/dist/base/src/services/screen_manager.d.ts.map +1 -0
- package/dist/base/src/themes/dark.d.ts +7 -0
- package/dist/base/src/themes/dark.d.ts.map +1 -0
- package/dist/base/src/themes/high-contrast.d.ts +7 -0
- package/dist/base/src/themes/high-contrast.d.ts.map +1 -0
- package/dist/base/src/themes/index.d.ts +5 -0
- package/dist/base/src/themes/index.d.ts.map +1 -0
- package/dist/base/src/themes/light.d.ts +6 -0
- package/dist/base/src/themes/light.d.ts.map +1 -0
- package/dist/base/src/themes/utils.d.ts +22 -0
- package/dist/base/src/themes/utils.d.ts.map +1 -0
- package/dist/base/src/tokens/adapter.d.ts +9 -0
- package/dist/base/src/tokens/adapter.d.ts.map +1 -0
- package/dist/base/src/tokens/index.d.ts +6 -0
- package/dist/base/src/tokens/index.d.ts.map +1 -0
- package/dist/base/src/tokens/logger.d.ts +44 -0
- package/dist/base/src/tokens/logger.d.ts.map +1 -0
- package/dist/base/src/tokens/prompt.d.ts +12 -0
- package/dist/base/src/tokens/prompt.d.ts.map +1 -0
- package/dist/base/src/tokens/screen-manager.d.ts +8 -0
- package/dist/base/src/tokens/screen-manager.d.ts.map +1 -0
- package/dist/base/src/tokens/screen.d.ts +10 -0
- package/dist/base/src/tokens/screen.d.ts.map +1 -0
- package/dist/base/src/types/events.types.d.ts +40 -0
- package/dist/base/src/types/events.types.d.ts.map +1 -0
- package/dist/base/src/types/file.types.d.ts +40 -0
- package/dist/base/src/types/file.types.d.ts.map +1 -0
- package/dist/base/src/types/filter.types.d.ts +31 -0
- package/dist/base/src/types/filter.types.d.ts.map +1 -0
- package/dist/base/src/types/index.d.ts +10 -0
- package/dist/base/src/types/index.d.ts.map +1 -0
- package/dist/base/src/types/keyboard.types.d.ts +83 -0
- package/dist/base/src/types/keyboard.types.d.ts.map +1 -0
- package/dist/base/src/types/log.types.d.ts +39 -0
- package/dist/base/src/types/log.types.d.ts.map +1 -0
- package/dist/base/src/types/message.types.d.ts +82 -0
- package/dist/base/src/types/message.types.d.ts.map +1 -0
- package/dist/base/src/types/prompt.types.d.ts +85 -0
- package/dist/base/src/types/prompt.types.d.ts.map +1 -0
- package/dist/base/src/types/screen.types.d.ts +107 -0
- package/dist/base/src/types/screen.types.d.ts.map +1 -0
- package/dist/base/src/types/theme.types.d.ts +217 -0
- package/dist/base/src/types/theme.types.d.ts.map +1 -0
- package/dist/base/src/utils/colors/file-colors.d.ts +10 -0
- package/dist/base/src/utils/colors/file-colors.d.ts.map +1 -0
- package/dist/base/src/utils/colors/helpers.d.ts +10 -0
- package/dist/base/src/utils/colors/helpers.d.ts.map +1 -0
- package/dist/base/src/utils/colors/index.d.ts +8 -0
- package/dist/base/src/utils/colors/index.d.ts.map +1 -0
- package/dist/base/src/utils/colors/log-colors.d.ts +19 -0
- package/dist/base/src/utils/colors/log-colors.d.ts.map +1 -0
- package/dist/base/src/utils/colors/progress-colors.d.ts +25 -0
- package/dist/base/src/utils/colors/progress-colors.d.ts.map +1 -0
- package/dist/base/src/utils/colors/prompt-colors.d.ts +22 -0
- package/dist/base/src/utils/colors/prompt-colors.d.ts.map +1 -0
- package/dist/base/src/utils/colors/sidebar-colors.d.ts +50 -0
- package/dist/base/src/utils/colors/sidebar-colors.d.ts.map +1 -0
- package/dist/base/src/utils/colors/table-colors.d.ts +12 -0
- package/dist/base/src/utils/colors/table-colors.d.ts.map +1 -0
- package/dist/base/src/utils/filetype.d.ts +19 -0
- package/dist/base/src/utils/filetype.d.ts.map +1 -0
- package/dist/base/src/utils/format.d.ts +9 -0
- package/dist/base/src/utils/format.d.ts.map +1 -0
- package/dist/base/src/utils/index.d.ts +7 -0
- package/dist/base/src/utils/index.d.ts.map +1 -0
- package/dist/base/src/utils/prompt.d.ts +7 -0
- package/dist/base/src/utils/prompt.d.ts.map +1 -0
- package/dist/base/src/utils/runtime.d.ts +10 -0
- package/dist/base/src/utils/runtime.d.ts.map +1 -0
- package/dist/base/src/utils/stdout-printer.d.ts +11 -0
- package/dist/base/src/utils/stdout-printer.d.ts.map +1 -0
- package/dist/base/tsconfig.base.tsbuildinfo +1 -0
- package/dist/base/tsconfig.tsbuildinfo +1 -0
- package/dist/ink/src/adapters/ink/components/file/file_log.d.ts +28 -0
- package/dist/ink/src/adapters/ink/components/file/file_log.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/file/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/file/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts +7 -0
- package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/filter/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/filter/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/help/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/help/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/index.d.ts +9 -0
- package/dist/ink/src/adapters/ink/components/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/log/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/log/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/log/log_message.d.ts +15 -0
- package/dist/ink/src/adapters/ink/components/log/log_message.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/prompt/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/prompt/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts +14 -0
- package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/index.d.ts +7 -0
- package/dist/ink/src/adapters/ink/components/screen/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts +14 -0
- package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts +6 -0
- package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts +8 -0
- package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts +4 -0
- package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts +11 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts +9 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts +2 -0
- package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/context/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/context/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/context/logger_context.d.ts +33 -0
- package/dist/ink/src/adapters/ink/context/logger_context.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/hooks/index.d.ts +2 -0
- package/dist/ink/src/adapters/ink/hooks/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts +7 -0
- package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts.map +1 -0
- package/dist/ink/src/adapters/ink/index.d.ts +18 -0
- package/dist/ink/src/adapters/ink/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/react-shared/hooks/index.d.ts +4 -0
- package/dist/ink/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
- package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
- package/dist/ink/src/adapters/react-shared/index.d.ts +2 -0
- package/dist/ink/src/adapters/react-shared/index.d.ts.map +1 -0
- package/dist/ink/tsconfig.ink.tsbuildinfo +1 -0
- package/dist/react/src/adapters/react/components/file/file_log.d.ts +35 -0
- package/dist/react/src/adapters/react/components/file/file_log.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/file/index.d.ts +2 -0
- package/dist/react/src/adapters/react/components/file/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/filter/filter_bar.d.ts +7 -0
- package/dist/react/src/adapters/react/components/filter/filter_bar.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/filter/index.d.ts +2 -0
- package/dist/react/src/adapters/react/components/filter/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/help/help_overlay.d.ts +6 -0
- package/dist/react/src/adapters/react/components/help/help_overlay.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/help/index.d.ts +2 -0
- package/dist/react/src/adapters/react/components/help/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/log/index.d.ts +2 -0
- package/dist/react/src/adapters/react/components/log/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/log/log_message.d.ts +28 -0
- package/dist/react/src/adapters/react/components/log/log_message.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/prompt/index.d.ts +3 -0
- package/dist/react/src/adapters/react/components/prompt/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/prompt/prompt_renderer.d.ts +6 -0
- package/dist/react/src/adapters/react/components/prompt/prompt_renderer.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/group_renderer.d.ts +14 -0
- package/dist/react/src/adapters/react/components/screen/group_renderer.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/index.d.ts +7 -0
- package/dist/react/src/adapters/react/components/screen/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/loading_message.d.ts +6 -0
- package/dist/react/src/adapters/react/components/screen/loading_message.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/message_renderer.d.ts +6 -0
- package/dist/react/src/adapters/react/components/screen/message_renderer.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/progress_message.d.ts +6 -0
- package/dist/react/src/adapters/react/components/screen/progress_message.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/screen_bridge.d.ts +14 -0
- package/dist/react/src/adapters/react/components/screen/screen_bridge.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen/table_message.d.ts +6 -0
- package/dist/react/src/adapters/react/components/screen/table_message.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/screen_manager_bridge.d.ts +8 -0
- package/dist/react/src/adapters/react/components/screen_manager_bridge.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/sidebar/index.d.ts +4 -0
- package/dist/react/src/adapters/react/components/sidebar/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar.d.ts +11 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar_item.d.ts +9 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar_item.d.ts.map +1 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar_separator.d.ts +2 -0
- package/dist/react/src/adapters/react/components/sidebar/sidebar_separator.d.ts.map +1 -0
- package/dist/react/src/adapters/react/context/index.d.ts +2 -0
- package/dist/react/src/adapters/react/context/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/context/logger_context.d.ts +53 -0
- package/dist/react/src/adapters/react/context/logger_context.d.ts.map +1 -0
- package/dist/react/src/adapters/react/hooks/index.d.ts +2 -0
- package/dist/react/src/adapters/react/hooks/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react/hooks/use_theme.d.ts +7 -0
- package/dist/react/src/adapters/react/hooks/use_theme.d.ts.map +1 -0
- package/dist/react/src/adapters/react/index.d.ts +13 -0
- package/dist/react/src/adapters/react/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react-shared/hooks/index.d.ts +4 -0
- package/dist/react/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
- package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
- package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
- package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
- package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
- package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
- package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
- package/dist/react/src/adapters/react-shared/index.d.ts +2 -0
- package/dist/react/src/adapters/react-shared/index.d.ts.map +1 -0
- package/dist/react/tsconfig.react.tsbuildinfo +1 -0
- package/dist/solid/src/adapters/solid/components/file/file_log.d.ts +35 -0
- package/dist/solid/src/adapters/solid/components/file/file_log.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/file/index.d.ts +2 -0
- package/dist/solid/src/adapters/solid/components/file/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/filter/filter_bar.d.ts +7 -0
- package/dist/solid/src/adapters/solid/components/filter/filter_bar.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/filter/index.d.ts +2 -0
- package/dist/solid/src/adapters/solid/components/filter/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/help/help_overlay.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/help/help_overlay.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/help/index.d.ts +2 -0
- package/dist/solid/src/adapters/solid/components/help/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/log/index.d.ts +2 -0
- package/dist/solid/src/adapters/solid/components/log/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/log/log_message.d.ts +31 -0
- package/dist/solid/src/adapters/solid/components/log/log_message.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/prompt/index.d.ts +3 -0
- package/dist/solid/src/adapters/solid/components/prompt/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/prompt/prompt_renderer.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/prompt/prompt_renderer.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/group_renderer.d.ts +14 -0
- package/dist/solid/src/adapters/solid/components/screen/group_renderer.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/index.d.ts +7 -0
- package/dist/solid/src/adapters/solid/components/screen/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/loading_message.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/screen/loading_message.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/message_renderer.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/screen/message_renderer.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/progress_message.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/screen/progress_message.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/screen_bridge.d.ts +14 -0
- package/dist/solid/src/adapters/solid/components/screen/screen_bridge.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen/table_message.d.ts +6 -0
- package/dist/solid/src/adapters/solid/components/screen/table_message.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/screen_manager_bridge.d.ts +8 -0
- package/dist/solid/src/adapters/solid/components/screen_manager_bridge.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/sidebar/index.d.ts +4 -0
- package/dist/solid/src/adapters/solid/components/sidebar/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar.d.ts +11 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar_item.d.ts +9 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar_item.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar_separator.d.ts +2 -0
- package/dist/solid/src/adapters/solid/components/sidebar/sidebar_separator.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/context/index.d.ts +3 -0
- package/dist/solid/src/adapters/solid/context/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/context/logger_context.d.ts +52 -0
- package/dist/solid/src/adapters/solid/context/logger_context.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/hooks/index.d.ts +2 -0
- package/dist/solid/src/adapters/solid/hooks/index.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/hooks/use_theme.d.ts +7 -0
- package/dist/solid/src/adapters/solid/hooks/use_theme.d.ts.map +1 -0
- package/dist/solid/src/adapters/solid/index.d.ts +13 -0
- package/dist/solid/src/adapters/solid/index.d.ts.map +1 -0
- package/dist/solid/tsconfig.solid.tsbuildinfo +1 -0
- package/dist/tsconfig.base.tsbuildinfo +1 -0
- package/dist/tsconfig.react.tsbuildinfo +1 -0
- package/dist/tsconfig.solid.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/lib/index.cjs +3882 -1584
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +488 -513
- package/lib/index.d.cts.map +1 -1
- package/lib/index.d.mts +488 -513
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +3810 -1539
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -7
- package/project.json +2 -2
- package/src/__tests__/services/logger.spec.ts +32 -0
- package/src/__tests__/services/screen.spec.ts +106 -95
- package/src/__tests__/utils/factories.ts +2 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/interface.ts +58 -0
- package/src/components/index.ts +3 -15
- package/src/context/index.ts +3 -1
- package/src/factories/isomorphic-logger.factory.ts +1 -2
- package/src/factories/screen.factory.ts +2 -2
- package/src/hooks/index.ts +3 -1
- package/src/index.ts +5 -0
- package/src/keyboard/create_bindings.ts +2 -2
- package/src/overrides/index.ts +1 -0
- package/src/overrides/missing-adapter.override.ts +30 -0
- package/src/services/index.ts +2 -1
- package/src/services/logger.ts +7 -1
- package/src/services/readline_prompt.ts +194 -0
- package/src/services/screen.ts +109 -57
- package/src/services/screen_manager.ts +613 -0
- package/src/tokens/adapter.ts +10 -0
- package/src/tokens/index.ts +2 -0
- package/src/tokens/screen-manager.ts +9 -0
- package/src/types/events.types.ts +84 -0
- package/src/types/index.ts +3 -0
- package/src/types/screen.types.ts +34 -0
- package/src/utils/colors/helpers.ts +0 -25
- package/src/utils/index.ts +6 -0
- package/src/utils/prompt.ts +18 -0
- package/src/utils/runtime.ts +14 -0
- package/src/utils/stdout-printer.ts +16 -5
- package/tsconfig.base.json +15 -0
- package/tsconfig.json +1 -12
- package/tsdown.config.mts +2 -6
- package/vitest.config.mts +20 -0
- package/lib/screen_manager_bridge-Bk1i53h5.mjs +0 -3
- package/lib/screen_manager_bridge-BwPVr0bX.mjs +0 -3048
- package/lib/screen_manager_bridge-BwPVr0bX.mjs.map +0 -1
- package/lib/screen_manager_bridge-CWxLO0CK.cjs +0 -3371
- package/lib/screen_manager_bridge-CWxLO0CK.cjs.map +0 -1
- package/lib/screen_manager_bridge-DXc57iXW.cjs +0 -3
- package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +0 -4849
- package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +0 -3003
- package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +0 -6926
- package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +0 -3785
- package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +0 -6787
- package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +0 -6043
- package/src/__tests__/components/filter_bar.spec.tsx +0 -190
- package/src/__tests__/components/loading_message.spec.tsx +0 -110
- package/src/__tests__/components/log_message.spec.tsx +0 -166
- package/src/__tests__/components/progress_message.spec.tsx +0 -147
- package/src/__tests__/components/prompt_renderer.spec.tsx +0 -274
- package/src/__tests__/components/sidebar.spec.tsx +0 -322
- package/src/__tests__/utils/render-utils.tsx +0 -39
- package/src/components/file/file_log.tsx +0 -241
- package/src/components/file/index.ts +0 -1
- package/src/components/filter/filter_bar.tsx +0 -79
- package/src/components/filter/index.ts +0 -1
- package/src/components/help/help_overlay.tsx +0 -100
- package/src/components/help/index.ts +0 -1
- package/src/components/log/index.ts +0 -1
- package/src/components/log/log_message.tsx +0 -102
- package/src/components/prompt/index.ts +0 -2
- package/src/components/prompt/prompt_renderer.tsx +0 -346
- package/src/components/screen/group_renderer.tsx +0 -64
- package/src/components/screen/index.ts +0 -6
- package/src/components/screen/loading_message.tsx +0 -44
- package/src/components/screen/message_renderer.tsx +0 -108
- package/src/components/screen/progress_message.tsx +0 -60
- package/src/components/screen/screen_bridge.tsx +0 -149
- package/src/components/screen/table_message.tsx +0 -57
- package/src/components/screen_manager_bridge.tsx +0 -245
- package/src/components/sidebar/index.ts +0 -3
- package/src/components/sidebar/sidebar.tsx +0 -102
- package/src/components/sidebar/sidebar_item.tsx +0 -50
- package/src/components/sidebar/sidebar_separator.tsx +0 -13
- package/src/context/logger_context.tsx +0 -109
- package/src/hooks/use_theme.ts +0 -12
- package/src/services/screen_manager.tsx +0 -394
package/src/services/logger.ts
CHANGED
|
@@ -42,6 +42,7 @@ export class ScreenLoggerInstance implements LoggerService {
|
|
|
42
42
|
typeof options.screen === 'string'
|
|
43
43
|
? {
|
|
44
44
|
name: options.screen,
|
|
45
|
+
static: true,
|
|
45
46
|
}
|
|
46
47
|
: options.screen,
|
|
47
48
|
)
|
|
@@ -51,7 +52,12 @@ export class ScreenLoggerInstance implements LoggerService {
|
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
private isLevelEnabled(level: LogLevel): boolean {
|
|
54
|
-
|
|
55
|
+
// Check local logger levels first
|
|
56
|
+
if (!this.enabledLevels.has(level)) {
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
// Then check global levels via ScreenManager
|
|
60
|
+
return this.screen.isLogLevelEnabled(level)
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
// ============================================
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import * as readline from 'node:readline'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
ChoicePromptData,
|
|
5
|
+
ConfirmPromptData,
|
|
6
|
+
InputPromptData,
|
|
7
|
+
MultiChoicePromptData,
|
|
8
|
+
PromptData,
|
|
9
|
+
} from '../types/index.ts'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Readline-based prompt service for stdout mode.
|
|
13
|
+
* Provides basic interactive prompts when TUI adapter is not available.
|
|
14
|
+
*/
|
|
15
|
+
export class ReadlinePromptService {
|
|
16
|
+
private rl: readline.Interface | null = null
|
|
17
|
+
private promptQueue: Array<{
|
|
18
|
+
prompt: PromptData
|
|
19
|
+
resolve: (value: string | boolean | string[]) => void
|
|
20
|
+
}> = []
|
|
21
|
+
private isProcessing = false
|
|
22
|
+
|
|
23
|
+
private ensureInterface(): readline.Interface {
|
|
24
|
+
if (!this.rl) {
|
|
25
|
+
this.rl = readline.createInterface({
|
|
26
|
+
input: process.stdin,
|
|
27
|
+
output: process.stdout,
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
return this.rl
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Handle a prompt interactively via readline.
|
|
35
|
+
* Prompts are queued and processed sequentially.
|
|
36
|
+
*/
|
|
37
|
+
async handlePrompt(prompt: PromptData): Promise<string | boolean | string[]> {
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
this.promptQueue.push({ prompt, resolve })
|
|
40
|
+
this.processQueue()
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private async processQueue(): Promise<void> {
|
|
45
|
+
if (this.isProcessing || this.promptQueue.length === 0) return
|
|
46
|
+
|
|
47
|
+
this.isProcessing = true
|
|
48
|
+
|
|
49
|
+
while (this.promptQueue.length > 0) {
|
|
50
|
+
const { prompt, resolve } = this.promptQueue.shift()!
|
|
51
|
+
const result = await this.processPrompt(prompt)
|
|
52
|
+
resolve(result)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
this.isProcessing = false
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private async processPrompt(prompt: PromptData): Promise<string | boolean | string[]> {
|
|
59
|
+
switch (prompt.type) {
|
|
60
|
+
case 'choice':
|
|
61
|
+
return this.handleChoice(prompt)
|
|
62
|
+
case 'confirm':
|
|
63
|
+
return this.handleConfirm(prompt)
|
|
64
|
+
case 'input':
|
|
65
|
+
return this.handleInput(prompt)
|
|
66
|
+
case 'multiChoice':
|
|
67
|
+
return this.handleMultiChoice(prompt)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private async handleChoice(prompt: ChoicePromptData): Promise<string> {
|
|
72
|
+
const rl = this.ensureInterface()
|
|
73
|
+
|
|
74
|
+
// Display question and choices
|
|
75
|
+
console.log(`\n${prompt.question}`)
|
|
76
|
+
prompt.choices.forEach((choice, index) => {
|
|
77
|
+
const isDefault = choice.value === prompt.defaultChoice
|
|
78
|
+
const marker = isDefault ? '*' : ' '
|
|
79
|
+
const inputHint = choice.input ? ' (allows custom input)' : ''
|
|
80
|
+
console.log(` ${marker} ${index + 1}. ${choice.label}${inputHint}`)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
return new Promise((resolve) => {
|
|
84
|
+
rl.question('Enter number (or press Enter for default): ', (answer) => {
|
|
85
|
+
const trimmed = answer.trim()
|
|
86
|
+
if (!trimmed) {
|
|
87
|
+
resolve(prompt.defaultChoice)
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const num = parseInt(trimmed, 10)
|
|
92
|
+
if (num >= 1 && num <= prompt.choices.length) {
|
|
93
|
+
const choice = prompt.choices[num - 1]
|
|
94
|
+
if (choice.input) {
|
|
95
|
+
// If choice allows input, ask for it
|
|
96
|
+
rl.question(`Enter value for "${choice.label}": `, (inputValue) => {
|
|
97
|
+
resolve(inputValue.trim() || choice.value)
|
|
98
|
+
})
|
|
99
|
+
} else {
|
|
100
|
+
resolve(choice.value)
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
resolve(prompt.defaultChoice)
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private async handleConfirm(prompt: ConfirmPromptData): Promise<boolean> {
|
|
110
|
+
const rl = this.ensureInterface()
|
|
111
|
+
const defaultText = prompt.defaultValue ? 'Y/n' : 'y/N'
|
|
112
|
+
|
|
113
|
+
return new Promise((resolve) => {
|
|
114
|
+
rl.question(`${prompt.question} [${defaultText}]: `, (answer) => {
|
|
115
|
+
const trimmed = answer.trim().toLowerCase()
|
|
116
|
+
if (!trimmed) {
|
|
117
|
+
resolve(prompt.defaultValue)
|
|
118
|
+
return
|
|
119
|
+
}
|
|
120
|
+
resolve(trimmed === 'y' || trimmed === 'yes')
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private async handleInput(prompt: InputPromptData): Promise<string> {
|
|
126
|
+
const rl = this.ensureInterface()
|
|
127
|
+
const defaultHint = prompt.defaultValue ? ` (default: ${prompt.defaultValue})` : ''
|
|
128
|
+
const placeholderHint = prompt.placeholder ? ` [${prompt.placeholder}]` : ''
|
|
129
|
+
|
|
130
|
+
return new Promise((resolve) => {
|
|
131
|
+
rl.question(`${prompt.question}${placeholderHint}${defaultHint}: `, (answer) => {
|
|
132
|
+
resolve(answer.trim() || prompt.defaultValue)
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private async handleMultiChoice(prompt: MultiChoicePromptData): Promise<string[]> {
|
|
138
|
+
const rl = this.ensureInterface()
|
|
139
|
+
|
|
140
|
+
// Display question and choices
|
|
141
|
+
console.log(`\n${prompt.question}`)
|
|
142
|
+
console.log(`(Select ${prompt.minSelect}-${prompt.maxSelect} options, enter comma-separated numbers)`)
|
|
143
|
+
prompt.choices.forEach((choice, index) => {
|
|
144
|
+
const selected = prompt.selectedIndices.has(index) ? '[x]' : '[ ]'
|
|
145
|
+
console.log(` ${selected} ${index + 1}. ${choice.label}`)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
return new Promise((resolve) => {
|
|
149
|
+
rl.question('Enter numbers (e.g., 1,3,5): ', (answer) => {
|
|
150
|
+
const trimmed = answer.trim()
|
|
151
|
+
if (!trimmed) {
|
|
152
|
+
// Return default selections
|
|
153
|
+
resolve(
|
|
154
|
+
prompt.choices.filter((_, i) => prompt.selectedIndices.has(i)).map((c) => c.value),
|
|
155
|
+
)
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const indices = trimmed
|
|
160
|
+
.split(',')
|
|
161
|
+
.map((s) => parseInt(s.trim(), 10) - 1)
|
|
162
|
+
.filter((n) => n >= 0 && n < prompt.choices.length)
|
|
163
|
+
|
|
164
|
+
// Validate selection count
|
|
165
|
+
if (indices.length < prompt.minSelect) {
|
|
166
|
+
console.log(`Minimum ${prompt.minSelect} selections required. Using defaults.`)
|
|
167
|
+
resolve(
|
|
168
|
+
prompt.choices.filter((_, i) => prompt.selectedIndices.has(i)).map((c) => c.value),
|
|
169
|
+
)
|
|
170
|
+
return
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (indices.length > prompt.maxSelect) {
|
|
174
|
+
console.log(`Maximum ${prompt.maxSelect} selections allowed. Taking first ${prompt.maxSelect}.`)
|
|
175
|
+
indices.splice(prompt.maxSelect)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
resolve(indices.map((i) => prompt.choices[i].value))
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Cleanup readline interface
|
|
185
|
+
*/
|
|
186
|
+
destroy(): void {
|
|
187
|
+
if (this.rl) {
|
|
188
|
+
this.rl.close()
|
|
189
|
+
this.rl = null
|
|
190
|
+
}
|
|
191
|
+
this.promptQueue = []
|
|
192
|
+
this.isProcessing = false
|
|
193
|
+
}
|
|
194
|
+
}
|
package/src/services/screen.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events'
|
|
2
|
+
|
|
3
|
+
import type { LogLevel } from '@navios/core'
|
|
4
|
+
|
|
5
|
+
import { getPromptDefaultValue, printSingleMessage } from '../utils/index.ts'
|
|
6
|
+
|
|
1
7
|
import type { ScreenOptions } from '../schemas/index.ts'
|
|
8
|
+
import { RenderMode } from '../types/index.ts'
|
|
2
9
|
import type {
|
|
3
10
|
ChoicePromptData,
|
|
4
11
|
ConfirmPromptData,
|
|
@@ -8,10 +15,11 @@ import type {
|
|
|
8
15
|
MultiChoicePromptData,
|
|
9
16
|
ProgressMessageData,
|
|
10
17
|
PromptData,
|
|
18
|
+
ScreenEventMap,
|
|
11
19
|
ScreenStatus,
|
|
12
20
|
} from '../types/index.ts'
|
|
13
21
|
|
|
14
|
-
import type {
|
|
22
|
+
import type { ScreenManagerInstance } from './screen_manager.ts'
|
|
15
23
|
|
|
16
24
|
interface PendingPrompt {
|
|
17
25
|
data: PromptData
|
|
@@ -19,7 +27,7 @@ interface PendingPrompt {
|
|
|
19
27
|
timeoutId?: ReturnType<typeof setTimeout>
|
|
20
28
|
}
|
|
21
29
|
|
|
22
|
-
export class ScreenInstance {
|
|
30
|
+
export class ScreenInstance extends EventEmitter<ScreenEventMap> {
|
|
23
31
|
private id: string
|
|
24
32
|
private name: string
|
|
25
33
|
private icon?: string
|
|
@@ -27,8 +35,7 @@ export class ScreenInstance {
|
|
|
27
35
|
private status: ScreenStatus = 'waiting'
|
|
28
36
|
private hidden: boolean = false
|
|
29
37
|
private messages: MessageData[] = []
|
|
30
|
-
private manager:
|
|
31
|
-
private changeListeners: Set<() => void> = new Set()
|
|
38
|
+
private manager: ScreenManagerInstance | null = null
|
|
32
39
|
private printFn: ((messages: MessageData[], name: string, isError: boolean) => void) | null = null
|
|
33
40
|
private hasPrinted: boolean = false
|
|
34
41
|
private version: number = 0
|
|
@@ -38,6 +45,7 @@ export class ScreenInstance {
|
|
|
38
45
|
private activePrompt: PendingPrompt | null = null
|
|
39
46
|
|
|
40
47
|
constructor(id: string, options: ScreenOptions) {
|
|
48
|
+
super()
|
|
41
49
|
this.id = id
|
|
42
50
|
this.name = options.name
|
|
43
51
|
this.icon = options.icon
|
|
@@ -59,7 +67,7 @@ export class ScreenInstance {
|
|
|
59
67
|
/**
|
|
60
68
|
* Internal: Set the manager reference
|
|
61
69
|
*/
|
|
62
|
-
_setManager(manager:
|
|
70
|
+
_setManager(manager: ScreenManagerInstance): void {
|
|
63
71
|
this.manager = manager
|
|
64
72
|
}
|
|
65
73
|
|
|
@@ -88,7 +96,7 @@ export class ScreenInstance {
|
|
|
88
96
|
|
|
89
97
|
setBadgeCount(count: number): this {
|
|
90
98
|
this.badgeCount = count
|
|
91
|
-
this.
|
|
99
|
+
this.emit('badge:changed', count)
|
|
92
100
|
return this
|
|
93
101
|
}
|
|
94
102
|
|
|
@@ -99,7 +107,7 @@ export class ScreenInstance {
|
|
|
99
107
|
setHidden(hidden: boolean): this {
|
|
100
108
|
this.hidden = hidden
|
|
101
109
|
this.manager?.onScreenVisibilityChanged(this)
|
|
102
|
-
this.
|
|
110
|
+
this.emit('visibility:changed', hidden)
|
|
103
111
|
return this
|
|
104
112
|
}
|
|
105
113
|
|
|
@@ -116,7 +124,18 @@ export class ScreenInstance {
|
|
|
116
124
|
}
|
|
117
125
|
|
|
118
126
|
/**
|
|
119
|
-
*
|
|
127
|
+
* Check if a log level is enabled globally via the ScreenManager.
|
|
128
|
+
* Returns true if no manager is set or if the level is allowed.
|
|
129
|
+
*/
|
|
130
|
+
isLogLevelEnabled(level: LogLevel): boolean {
|
|
131
|
+
if (!this.manager) {
|
|
132
|
+
return true
|
|
133
|
+
}
|
|
134
|
+
return this.manager.isLogLevelEnabled(level)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Set screen status. When success/fail and not in TUI mode, prints to stdout/stderr
|
|
120
139
|
*/
|
|
121
140
|
setStatus(status: ScreenStatus): this {
|
|
122
141
|
const wasComplete = this.status === 'success' || this.status === 'fail'
|
|
@@ -124,14 +143,15 @@ export class ScreenInstance {
|
|
|
124
143
|
|
|
125
144
|
// When transitioning to complete state
|
|
126
145
|
if (!wasComplete && (status === 'success' || status === 'fail')) {
|
|
127
|
-
// Only print if
|
|
128
|
-
|
|
146
|
+
// Only print immediately if NOT in TUI mode
|
|
147
|
+
// In TUI mode, printing happens on unbind()
|
|
148
|
+
if (!this.manager?.hasTuiRenderer()) {
|
|
129
149
|
this.printToConsole()
|
|
130
150
|
}
|
|
131
151
|
this.manager?.onScreenCompleted(this)
|
|
132
152
|
}
|
|
133
153
|
|
|
134
|
-
this.
|
|
154
|
+
this.emit('status:changed', status)
|
|
135
155
|
return this
|
|
136
156
|
}
|
|
137
157
|
|
|
@@ -143,10 +163,20 @@ export class ScreenInstance {
|
|
|
143
163
|
}
|
|
144
164
|
|
|
145
165
|
/**
|
|
146
|
-
* Check if this screen has been printed to console
|
|
166
|
+
* Check if this screen has been printed to console.
|
|
167
|
+
* Static screens in non-TUI modes are considered printed as they print incrementally.
|
|
147
168
|
*/
|
|
148
169
|
hasPrintedToConsole(): boolean {
|
|
149
|
-
return
|
|
170
|
+
// If already fully printed, return true
|
|
171
|
+
if (this.hasPrinted) return true
|
|
172
|
+
|
|
173
|
+
// Static screens in non-TUI modes print incrementally, so they're considered "printed"
|
|
174
|
+
// as their messages are output immediately when added
|
|
175
|
+
if (this.status === 'static' && !this.manager?.hasTuiRenderer()) {
|
|
176
|
+
return true
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return false
|
|
150
180
|
}
|
|
151
181
|
|
|
152
182
|
/**
|
|
@@ -171,7 +201,13 @@ export class ScreenInstance {
|
|
|
171
201
|
addMessage(message: MessageData): void {
|
|
172
202
|
this.messages.push(message)
|
|
173
203
|
this.incrementVersion()
|
|
174
|
-
|
|
204
|
+
|
|
205
|
+
// In non-TUI modes, static screens print messages immediately
|
|
206
|
+
if (this.status === 'static' && !this.manager?.hasTuiRenderer()) {
|
|
207
|
+
this.printSingleMessageToConsole(message)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
this.emit('message:added', message.id)
|
|
175
211
|
}
|
|
176
212
|
|
|
177
213
|
/**
|
|
@@ -180,12 +216,23 @@ export class ScreenInstance {
|
|
|
180
216
|
updateMessage(id: string, updates: Partial<LoadingMessageData>): void {
|
|
181
217
|
const index = this.messages.findIndex((m) => m.id === id)
|
|
182
218
|
if (index !== -1) {
|
|
219
|
+
const oldMessage = this.messages[index] as LoadingMessageData
|
|
183
220
|
this.messages[index] = {
|
|
184
221
|
...this.messages[index],
|
|
185
222
|
...updates,
|
|
186
223
|
} as MessageData
|
|
187
224
|
this.incrementVersion()
|
|
188
|
-
|
|
225
|
+
|
|
226
|
+
// In non-TUI modes for static screens, print when loading completes
|
|
227
|
+
if (this.status === 'static' && !this.manager?.hasTuiRenderer()) {
|
|
228
|
+
const newMessage = this.messages[index] as LoadingMessageData
|
|
229
|
+
// Only print when transitioning from 'loading' to 'success'/'fail'
|
|
230
|
+
if (newMessage.status !== 'loading' && oldMessage.status === 'loading') {
|
|
231
|
+
this.printSingleMessageToConsole(newMessage)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
this.emit('message:updated', id)
|
|
189
236
|
}
|
|
190
237
|
}
|
|
191
238
|
|
|
@@ -195,12 +242,26 @@ export class ScreenInstance {
|
|
|
195
242
|
updateProgressMessage(id: string, updates: Partial<ProgressMessageData>): void {
|
|
196
243
|
const index = this.messages.findIndex((m) => m.id === id)
|
|
197
244
|
if (index !== -1) {
|
|
245
|
+
const oldMessage = this.messages[index] as ProgressMessageData
|
|
198
246
|
this.messages[index] = {
|
|
199
247
|
...this.messages[index],
|
|
200
248
|
...updates,
|
|
201
249
|
} as MessageData
|
|
202
250
|
this.incrementVersion()
|
|
203
|
-
|
|
251
|
+
|
|
252
|
+
// In non-TUI modes for static screens, print when progress completes
|
|
253
|
+
if (this.status === 'static' && !this.manager?.hasTuiRenderer()) {
|
|
254
|
+
const newMessage = this.messages[index] as ProgressMessageData
|
|
255
|
+
if (
|
|
256
|
+
(newMessage.status === 'complete' || newMessage.status === 'failed') &&
|
|
257
|
+
oldMessage.status !== 'complete' &&
|
|
258
|
+
oldMessage.status !== 'failed'
|
|
259
|
+
) {
|
|
260
|
+
this.printSingleMessageToConsole(newMessage)
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
this.emit('message:updated', id)
|
|
204
265
|
}
|
|
205
266
|
}
|
|
206
267
|
|
|
@@ -210,7 +271,7 @@ export class ScreenInstance {
|
|
|
210
271
|
clear(): this {
|
|
211
272
|
this.messages = []
|
|
212
273
|
this.incrementVersion()
|
|
213
|
-
this.
|
|
274
|
+
this.emit('messages:cleared')
|
|
214
275
|
return this
|
|
215
276
|
}
|
|
216
277
|
|
|
@@ -224,14 +285,23 @@ export class ScreenInstance {
|
|
|
224
285
|
*/
|
|
225
286
|
_addPrompt(prompt: PromptData): Promise<string | boolean | string[]> {
|
|
226
287
|
return new Promise((resolve) => {
|
|
227
|
-
const
|
|
288
|
+
const mode = this.manager?.getRenderMode() ?? RenderMode.UNBOUND
|
|
228
289
|
|
|
229
|
-
//
|
|
230
|
-
if (
|
|
290
|
+
// UNBOUND mode: return defaults immediately (no interaction possible)
|
|
291
|
+
if (mode === RenderMode.UNBOUND) {
|
|
231
292
|
this.resolvePromptWithDefault(prompt, resolve)
|
|
232
293
|
return
|
|
233
294
|
}
|
|
234
295
|
|
|
296
|
+
// STDOUT modes (STDOUT_INTERACTIVE, STDOUT_FALLBACK): use readline for interactive prompts
|
|
297
|
+
if (mode === RenderMode.STDOUT_INTERACTIVE || mode === RenderMode.STDOUT_FALLBACK) {
|
|
298
|
+
this.manager?.handleReadlinePrompt(prompt).then(resolve)
|
|
299
|
+
return
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// TUI_ACTIVE mode: use TUI prompt queue system
|
|
303
|
+
const pending: PendingPrompt = { data: prompt, resolve }
|
|
304
|
+
|
|
235
305
|
// Set up timeout if specified
|
|
236
306
|
if (prompt.timeout && prompt.timeoutStarted) {
|
|
237
307
|
pending.timeoutId = setTimeout(() => {
|
|
@@ -240,7 +310,7 @@ export class ScreenInstance {
|
|
|
240
310
|
this.activePrompt = null
|
|
241
311
|
this.activateNextPrompt()
|
|
242
312
|
this.incrementVersion()
|
|
243
|
-
this.
|
|
313
|
+
this.emit('prompt:resolved')
|
|
244
314
|
} else {
|
|
245
315
|
// Remove from queue if not yet active
|
|
246
316
|
const idx = this.promptQueue.indexOf(pending)
|
|
@@ -270,20 +340,7 @@ export class ScreenInstance {
|
|
|
270
340
|
prompt: PromptData,
|
|
271
341
|
resolve: (value: string | boolean | string[]) => void,
|
|
272
342
|
): void {
|
|
273
|
-
|
|
274
|
-
case 'choice':
|
|
275
|
-
resolve(prompt.defaultChoice)
|
|
276
|
-
break
|
|
277
|
-
case 'confirm':
|
|
278
|
-
resolve(prompt.defaultValue)
|
|
279
|
-
break
|
|
280
|
-
case 'input':
|
|
281
|
-
resolve(prompt.defaultValue)
|
|
282
|
-
break
|
|
283
|
-
case 'multiChoice':
|
|
284
|
-
resolve(prompt.choices.filter((_, i) => prompt.selectedIndices.has(i)).map((c) => c.value))
|
|
285
|
-
break
|
|
286
|
-
}
|
|
343
|
+
resolve(getPromptDefaultValue(prompt))
|
|
287
344
|
}
|
|
288
345
|
|
|
289
346
|
/**
|
|
@@ -316,7 +373,7 @@ export class ScreenInstance {
|
|
|
316
373
|
} else if (prompt.type === 'confirm') {
|
|
317
374
|
;(prompt as ConfirmPromptData).selectedValue = index === 0
|
|
318
375
|
}
|
|
319
|
-
this.
|
|
376
|
+
this.emit('prompt:updated')
|
|
320
377
|
}
|
|
321
378
|
|
|
322
379
|
/**
|
|
@@ -359,7 +416,7 @@ export class ScreenInstance {
|
|
|
359
416
|
const prompt = this.activePrompt.data
|
|
360
417
|
if (prompt.type === 'confirm') {
|
|
361
418
|
;(prompt as ConfirmPromptData).selectedValue = true
|
|
362
|
-
this.
|
|
419
|
+
this.emit('prompt:updated')
|
|
363
420
|
}
|
|
364
421
|
}
|
|
365
422
|
|
|
@@ -368,7 +425,7 @@ export class ScreenInstance {
|
|
|
368
425
|
const prompt = this.activePrompt.data
|
|
369
426
|
if (prompt.type === 'confirm') {
|
|
370
427
|
;(prompt as ConfirmPromptData).selectedValue = false
|
|
371
|
-
this.
|
|
428
|
+
this.emit('prompt:updated')
|
|
372
429
|
}
|
|
373
430
|
}
|
|
374
431
|
|
|
@@ -385,7 +442,7 @@ export class ScreenInstance {
|
|
|
385
442
|
} else if (p.selectedIndices.size < p.maxSelect) {
|
|
386
443
|
p.selectedIndices.add(p.focusedIndex)
|
|
387
444
|
}
|
|
388
|
-
this.
|
|
445
|
+
this.emit('prompt:updated')
|
|
389
446
|
}
|
|
390
447
|
}
|
|
391
448
|
|
|
@@ -401,7 +458,7 @@ export class ScreenInstance {
|
|
|
401
458
|
const choice = prompt.choices[prompt.selectedIndex]
|
|
402
459
|
if (choice?.input) {
|
|
403
460
|
;(prompt as ChoicePromptData).inputMode = true
|
|
404
|
-
this.
|
|
461
|
+
this.emit('prompt:updated')
|
|
405
462
|
return true
|
|
406
463
|
}
|
|
407
464
|
} else if (prompt.type === 'input') {
|
|
@@ -420,7 +477,7 @@ export class ScreenInstance {
|
|
|
420
477
|
const prompt = this.activePrompt.data
|
|
421
478
|
if (prompt.type === 'choice' && prompt.inputMode) {
|
|
422
479
|
;(prompt as ChoicePromptData).inputMode = false
|
|
423
|
-
this.
|
|
480
|
+
this.emit('prompt:updated')
|
|
424
481
|
}
|
|
425
482
|
// Input prompts cannot exit input mode
|
|
426
483
|
}
|
|
@@ -449,10 +506,10 @@ export class ScreenInstance {
|
|
|
449
506
|
const prompt = this.activePrompt.data
|
|
450
507
|
if (prompt.type === 'choice' && prompt.inputMode) {
|
|
451
508
|
;(prompt as ChoicePromptData).inputValue = value
|
|
452
|
-
this.
|
|
509
|
+
this.emit('prompt:updated')
|
|
453
510
|
} else if (prompt.type === 'input') {
|
|
454
511
|
;(prompt as InputPromptData).value = value
|
|
455
|
-
this.
|
|
512
|
+
this.emit('prompt:updated')
|
|
456
513
|
}
|
|
457
514
|
}
|
|
458
515
|
|
|
@@ -465,10 +522,10 @@ export class ScreenInstance {
|
|
|
465
522
|
const prompt = this.activePrompt.data
|
|
466
523
|
if (prompt.type === 'choice' && prompt.inputMode) {
|
|
467
524
|
;(prompt as ChoicePromptData).inputValue += char
|
|
468
|
-
this.
|
|
525
|
+
this.emit('prompt:updated')
|
|
469
526
|
} else if (prompt.type === 'input') {
|
|
470
527
|
;(prompt as InputPromptData).value += char
|
|
471
|
-
this.
|
|
528
|
+
this.emit('prompt:updated')
|
|
472
529
|
}
|
|
473
530
|
}
|
|
474
531
|
|
|
@@ -481,10 +538,10 @@ export class ScreenInstance {
|
|
|
481
538
|
const prompt = this.activePrompt.data
|
|
482
539
|
if (prompt.type === 'choice' && prompt.inputMode) {
|
|
483
540
|
;(prompt as ChoicePromptData).inputValue = prompt.inputValue.slice(0, -1)
|
|
484
|
-
this.
|
|
541
|
+
this.emit('prompt:updated')
|
|
485
542
|
} else if (prompt.type === 'input') {
|
|
486
543
|
;(prompt as InputPromptData).value = prompt.value.slice(0, -1)
|
|
487
|
-
this.
|
|
544
|
+
this.emit('prompt:updated')
|
|
488
545
|
}
|
|
489
546
|
}
|
|
490
547
|
|
|
@@ -550,7 +607,7 @@ export class ScreenInstance {
|
|
|
550
607
|
this.activePrompt = null
|
|
551
608
|
this.activateNextPrompt()
|
|
552
609
|
this.incrementVersion()
|
|
553
|
-
this.
|
|
610
|
+
this.emit('prompt:resolved')
|
|
554
611
|
}
|
|
555
612
|
|
|
556
613
|
/**
|
|
@@ -562,20 +619,15 @@ export class ScreenInstance {
|
|
|
562
619
|
// Notify manager to focus this screen
|
|
563
620
|
this.manager?.onScreenPromptActivated(this)
|
|
564
621
|
this.incrementVersion()
|
|
565
|
-
this.
|
|
622
|
+
this.emit('prompt:activated')
|
|
566
623
|
}
|
|
567
624
|
}
|
|
568
625
|
|
|
569
626
|
/**
|
|
570
|
-
*
|
|
627
|
+
* Print a single message immediately to stdout (for static screens in stdout mode)
|
|
571
628
|
*/
|
|
572
|
-
|
|
573
|
-
this.
|
|
574
|
-
return () => this.changeListeners.delete(listener)
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
private notifyChange(): void {
|
|
578
|
-
this.changeListeners.forEach((listener) => listener())
|
|
629
|
+
private printSingleMessageToConsole(message: MessageData): void {
|
|
630
|
+
printSingleMessage(message, this.name, false)
|
|
579
631
|
}
|
|
580
632
|
|
|
581
633
|
/**
|