# Smartlog Interactive Console Features Plan

## Overview

This document outlines the plan for enhancing the console output capabilities of `@push.rocks/smartlog` by creating a comprehensive interactive console module. This involves renaming the current `ts_source_ora` module to `ts_source_interactive`, implementing our own spinner functionality (removing the ora dependency), and adding new features like progress bars and other interactive elements.

## Implementation Steps

### 1. Rename and Restructure

- Rename directory from `ts_source_ora` to `ts_source_interactive`
- Update all imports, exports, and references
- Update package.json exports to reflect new module name
- Maintain backward compatibility through proper export paths

### 2. Custom Spinner Implementation

- Create a native spinner implementation to replace ora dependency
- Implement spinner frames and animation timing
- Maintain API compatibility with current spinner methods:
  - `text(textArg)` - Set text and start spinner
  - `stop()` - Stop the spinner
  - `finishSuccess(textArg?)` - Mark as succeeded
  - `finishFail(textArg?)` - Mark as failed
  - `successAndNext(textArg)` - Success and start new spinner
  - `failAndNext(textArg)` - Fail and start new spinner
- Add spinner customization options (speed, frames, colors)

### 3. Progress Bar Implementation

- Create a progress bar component with the following features:
  - Configurable width and style
  - Percentage display
  - ETA calculation
  - Current/total value display
  - Custom formatting
  - Theming support
  - Methods for incrementing and updating

### 4. Additional Interactive Features

- Add indeterminate progress indicator
- Add multi-line status display
- Add table formatting for structured data
- Add interactive prompts/confirmations

### 5. Testing

- Update existing tests to work with new implementation
- Add tests for new progress bar functionality
- Add tests for additional interactive features
- Ensure consistent behavior across platforms

### 6. Documentation

- Update README with examples of new features
- Add API documentation for all new methods
- Include usage examples

## Implementation Details

### Progress Bar API

```typescript
// Creating a progress bar
const progressBar = new SmartlogProgressBar({
  total: 100,
  width: 40,
  complete: '=',
  incomplete: ' ',
  renderThrottle: 100, // ms
  clearOnComplete: false,
  showEta: true
});

// Updating a progress bar
progressBar.update(50); // Update to 50%
progressBar.increment(10); // Increment by 10
progressBar.complete(); // Mark as complete
```

### Spinner API (maintains compatibility)

```typescript
// Current API (to be maintained)
const spinner = new SmartlogSourceInteractive();
spinner.text('Loading data');
spinner.finishSuccess('Data loaded successfully');

// New additions
spinner.setSpinnerStyle('dots'); // Change spinner style
spinner.setColor('green'); // Change color
```

## Benefits

- Remove external dependency (ora) for better control and smaller bundle size
- Provide more interactive console features for improved user experience
- Maintain consistent API styling across all smartlog modules
- Improve testability with custom implementation
- Enable more advanced terminal interactions