---
description: Guidelines for implementing and maintaining user interface components
globs: scripts/modules/ui.js
alwaysApply: false
---

# User Interface Implementation Guidelines

## Core UI Component Principles

- **Function Scope Separation**:
  - ✅ DO: Keep display logic separate from business logic
  - ✅ DO: Import data processing functions from other modules
  - ❌ DON'T: Include task manipulations within UI functions
  - ❌ DON'T: Create circular dependencies with other modules

- **Standard Display Pattern**:
  ```javascript
  // ✅ DO: Follow this pattern for display functions
  /**
   * Display information about a task
   * @param {Object} task - The task to display
   */
  function displayTaskInfo(task) {
    console.log(boxen(
      chalk.white.bold(`Task: #${task.id} - ${task.title}`),
      { padding: 1, borderColor: 'blue', borderStyle: 'round' }
    ));
  }
  ```

## Visual Styling Standards

- **Color Scheme**:
  - Use `chalk.blue` for informational messages
  - Use `chalk.green` for success messages
  - Use `chalk.yellow` for warnings
  - Use `chalk.red` for errors
  - Use `chalk.cyan` for prompts and highlights
  - Use `chalk.magenta` for subtask-related information

- **Box Styling**:
  ```javascript
  // ✅ DO: Use consistent box styles by content type
  // For success messages:
  boxen(content, { 
    padding: 1, 
    borderColor: 'green', 
    borderStyle: 'round', 
    margin: { top: 1 } 
  })

  // For errors:
  boxen(content, { 
    padding: 1, 
    borderColor: 'red', 
    borderStyle: 'round'
  })

  // For information:
  boxen(content, { 
    padding: 1, 
    borderColor: 'blue', 
    borderStyle: 'round', 
    margin: { top: 1, bottom: 1 } 
  })
  ```

## Table Display Guidelines

- **Table Structure**:
  - Use [`cli-table3`](mdc:node_modules/cli-table3/README.md) for consistent table rendering
  - Include colored headers with bold formatting
  - Use appropriate column widths for readability

  ```javascript
  // ✅ DO: Create well-structured tables
  const table = new Table({
    head: [
      chalk.cyan.bold('ID'),
      chalk.cyan.bold('Title'),
      chalk.cyan.bold('Status'),
      chalk.cyan.bold('Priority'),
      chalk.cyan.bold('Dependencies')
    ],
    colWidths: [5, 40, 15, 10, 20]
  });
  
  // Add content rows
  table.push([
    task.id,
    truncate(task.title, 37),
    getStatusWithColor(task.status),
    chalk.white(task.priority || 'medium'),
    formatDependenciesWithStatus(task.dependencies, allTasks, true)
  ]);
  
  console.log(table.toString());
  ```

## Loading Indicators

- **Animation Standards**:
  - Use [`ora`](mdc:node_modules/ora/readme.md) for spinner animations
  - Create and stop loading indicators correctly

  ```javascript
  // ✅ DO: Properly manage loading state
  const loadingIndicator = startLoadingIndicator('Processing task data...');
  try {
    // Do async work...
    stopLoadingIndicator(loadingIndicator);
    // Show success message
  } catch (error) {
    stopLoadingIndicator(loadingIndicator);
    // Show error message
  }
  ```

## Helper Functions

- **Status Formatting**:
  - Use `getStatusWithColor` for consistent status display
  - Use `formatDependenciesWithStatus` for dependency lists
  - Use `truncate` to handle text that may overflow display

- **Progress Reporting**:
  - Use visual indicators for progress (bars, percentages)
  - Include both numeric and visual representations
  
  ```javascript
  // ✅ DO: Show clear progress indicators
  console.log(`${chalk.cyan('Tasks:')} ${completedTasks}/${totalTasks} (${completionPercentage.toFixed(1)}%)`);
  console.log(`${chalk.cyan('Progress:')} ${createProgressBar(completionPercentage)}`);
  ```

## Command Suggestions

- **Action Recommendations**:
  - Provide next step suggestions after command completion
  - Use a consistent format for suggested commands

  ```javascript
  // ✅ DO: Show suggested next actions
  console.log(boxen(
    chalk.white.bold('Next Steps:') + '\n\n' +
    `${chalk.cyan('1.')} Run ${chalk.yellow('task-master list')} to view all tasks\n` +
    `${chalk.cyan('2.')} Run ${chalk.yellow('task-master show --id=' + newTaskId)} to view details`,
    { padding: 1, borderColor: 'cyan', borderStyle: 'round', margin: { top: 1 } }
  ));
  ```

Refer to [`ui.js`](mdc:scripts/modules/ui.js) for implementation examples and [`new_features.mdc`](mdc:.cursor/rules/new_features.mdc) for integration guidelines. 