valknarness 94ea87ca83 feat: implement color manipulation tools with interactive sliders
Add complete color manipulation interface to playground:

**New Components:**
- Slider component - Customizable range input with label and value display
  - Smooth animations on thumb hover
  - Keyboard accessible
  - Shows current value with optional suffix
  - Tailwind-styled for consistency

- ManipulationPanel component - Full color manipulation controls
  - Lighten/Darken sliders (0-100% range)
  - Saturate/Desaturate sliders (0-100% range)
  - Hue rotation slider (-180° to +180°)
  - Complementary color quick action
  - All operations integrated with Pastel API
  - Toast notifications for success/error
  - Loading states during API calls

**Playground Enhancements:**
- Replaced placeholder quick action buttons with ManipulationPanel
- Full integration with color manipulation mutations
- Real-time color updates after each operation
- User-friendly feedback with toast messages
- Amount controls for precise adjustments

**Features:**
- Live preview of manipulation results
- Configurable amounts before applying
- Success/error handling with helpful messages
- Disabled state during API operations
- Smooth user experience with immediate feedback

**API Integration:**
- useLighten, useDarken mutations
- useSaturate, useDesaturate mutations
- useRotate for hue rotation
- useComplement for complementary colors
- All mutations with proper error handling

Build successful! Color manipulation tools fully functional.

Next: Navigation, theme system, and additional UI components.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 11:28:35 +01:00

Pastel UI

A modern, interactive web application for color manipulation, palette generation, and accessibility analysis.

Next.js React Tailwind CSS TypeScript License

Pastel UI is a beautiful, feature-rich interface for the Pastel API, providing intuitive tools for color manipulation, palette generation, and accessibility testing.

Features

🎨 Color Playground

  • Interactive Color Picker - Real-time color selection with live preview
  • Multi-Format Support - Hex, RGB, HSL, HSV, Lab, OkLab, LCH, OkLCH, CMYK, Gray, and 148 named colors
  • Color Manipulation - Lighten, darken, saturate, desaturate, rotate, complement, mix, grayscale
  • Format Conversion - Convert between any color format with one click
  • Copy to Clipboard - Quick copy for all formats

🎭 Palette Generation

  • Harmony Palettes - Monochromatic, analogous, complementary, split-complementary, triadic, tetradic
  • Distinct Colors - Generate visually distinct colors using simulated annealing algorithm
  • Gradient Creator - Multi-stop gradients with color space selection (RGB, HSL, Lab, LCH, OkLab, OkLCH)
  • Export Options - CSS, JSON, Tailwind config, SCSS, SVG, PNG

Accessibility Tools

  • WCAG Contrast Checker - AA/AAA compliance analysis for text and backgrounds
  • Color Blindness Simulator - Protanopia, deuteranopia, tritanopia simulation
  • Text Color Optimizer - Find optimal text color for any background
  • Batch Accessibility Testing - Test entire palettes at once

🔍 Color Analysis

  • Perceptual Distance - CIE76 and CIEDE2000 metrics
  • Color Sorting - Sort by hue, brightness, luminance, chroma
  • Named Color Search - Find nearest named color for any input
  • Color Information - Comprehensive color data in all formats

Advanced Features

  • Batch Operations - Upload CSV/JSON, process multiple colors, download results
  • Color History - Track all colors used in your session
  • Saved Palettes - Persistent storage of your favorite palettes
  • Command Palette - Keyboard shortcuts (Cmd+K) for power users
  • Dark/Light Mode - System preference + manual toggle
  • Shareable Links - Share colors and palettes via URL

Tech Stack

Quick Start

Prerequisites

  • Node.js 18+ (20+ recommended)
  • pnpm 9+ (or npm/yarn)
  • Pastel API running locally or remotely

Installation

# Clone the repository
git clone git@github.com:valknarness/pastel-ui.git
cd pastel-ui

# Install dependencies
pnpm install

# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your Pastel API URL

# Run development server
pnpm dev

Open http://localhost:3000 in your browser.

Environment Variables

# .env.local
NEXT_PUBLIC_API_URL=http://localhost:3000  # Your Pastel API URL
NEXT_PUBLIC_APP_URL=http://localhost:3000  # This app's URL (for sharing)

Development

Available Commands

# Development
pnpm dev              # Start dev server (http://localhost:3000)
pnpm dev:turbo        # Start with Turbopack (faster)

# Building
pnpm build            # Production build
pnpm start            # Start production server

# Code Quality
pnpm lint             # Run ESLint
pnpm lint:fix         # Fix ESLint issues automatically
pnpm format           # Format code with Prettier
pnpm type-check       # TypeScript type checking

# Testing
pnpm test             # Run unit tests (Vitest)
pnpm test:ui          # Vitest UI mode
pnpm test:e2e         # Run E2E tests (Playwright)
pnpm test:e2e:ui      # Playwright UI mode

# Analysis
pnpm analyze          # Analyze bundle size

Project Structure

pastel-ui/
├── app/                    # Next.js App Router
│   ├── playground/        # Color manipulation tool
│   ├── palettes/          # Palette generation
│   ├── accessibility/     # Accessibility tools
│   ├── names/             # Named colors explorer
│   └── batch/             # Batch operations
├── components/
│   ├── ui/               # Base UI components
│   ├── color/            # Color-specific components
│   ├── tools/            # Tool components
│   └── layout/           # Layout components
├── lib/
│   ├── api/              # API client and queries
│   ├── utils/            # Utility functions
│   ├── hooks/            # Custom React hooks
│   └── stores/           # Zustand stores
└── tests/                # Unit and E2E tests

See CLAUDE.md for detailed architecture documentation.

Features Overview

Color Playground (/)

The main interface for color manipulation:

  • Input colors in any format
  • View comprehensive color information
  • Manipulate colors with intuitive controls
  • Convert between formats instantly
  • Copy values with one click

Palette Generation (/palettes)

Create beautiful color palettes:

Harmony Palettes (/palettes/harmony)

Generate palettes based on color theory:

  • Monochromatic - Variations of a single hue
  • Analogous - Adjacent colors on the wheel
  • Complementary - Opposite colors
  • Split-complementary - Base + two adjacent to complement
  • Triadic - Three evenly spaced colors
  • Tetradic - Four colors in a rectangle

Distinct Colors (/palettes/distinct)

Generate visually distinct colors using advanced algorithms:

  • Configurable count (2-100 colors)
  • Distance metric selection (CIE76, CIEDE2000)
  • Optional fixed colors to include
  • Real-time progress indicator

Gradient Creator (/palettes/gradient)

Create smooth color gradients:

  • Multiple color stops
  • Configurable step count
  • Color space selection for interpolation
  • Live preview
  • Export as CSS or color array

Accessibility Tools (/accessibility)

Ensure your colors are accessible:

Contrast Checker (/accessibility/contrast)

  • WCAG 2.1 compliance testing
  • AA/AAA ratings for normal and large text
  • Contrast ratio calculation
  • Improvement recommendations

Color Blindness Simulator (/accessibility/colorblind)

  • Simulate protanopia (red-blind)
  • Simulate deuteranopia (green-blind)
  • Simulate tritanopia (blue-blind)
  • Side-by-side comparison
  • Batch palette testing

Named Colors Explorer (/names)

Browse and search 148 CSS/X11 named colors:

  • Visual grid display
  • Search by name or hex value
  • Sort by hue, brightness, saturation, name
  • Find nearest named color for any input
  • Click to use in playground

Batch Operations (/batch)

Process multiple colors efficiently:

  • Upload CSV/JSON files
  • Apply operations to all colors
  • Bulk format conversion
  • Visual preview of results
  • Download in multiple formats

Export Formats

Export your colors and palettes in various formats:

CSS Variables

:root {
  --color-primary: #ff0099;
  --color-secondary: #00ccff;
  --color-accent: #ffcc00;
}

Tailwind Config

module.exports = {
  theme: {
    extend: {
      colors: {
        primary: '#ff0099',
        secondary: '#00ccff',
        accent: '#ffcc00',
      }
    }
  }
}

JSON

{
  "colors": [
    { "name": "primary", "hex": "#ff0099" },
    { "name": "secondary", "hex": "#00ccff" },
    { "name": "accent", "hex": "#ffcc00" }
  ]
}

SCSS

$color-primary: #ff0099;
$color-secondary: #00ccff;
$color-accent: #ffcc00;

Keyboard Shortcuts

Shortcut Action
Cmd/Ctrl + K Open command palette
Cmd/Ctrl + C Copy current color (hex)
Cmd/Ctrl + V Paste color from clipboard
Cmd/Ctrl + Z Undo color change
Cmd/Ctrl + Shift + Z Redo color change
Cmd/Ctrl + D Toggle dark/light mode
Cmd/Ctrl + / Show keyboard shortcuts
Esc Close modals/dialogs
Arrow Keys Navigate color history
Space Toggle color picker

API Integration

Pastel UI communicates with the Pastel API for all color operations. The API client is type-safe and includes automatic retries, caching, and error handling.

Example API Usage

import { pastelAPI } from '@/lib/api/client';

// Get color information
const info = await pastelAPI.getColorInfo(['#ff0099']);

// Generate distinct colors
const distinct = await pastelAPI.generateDistinct(8, 'ciede2000');

// Create gradient
const gradient = await pastelAPI.generateGradient({
  stops: ['#ff0000', '#0000ff'],
  count: 10,
  colorspace: 'lch'
});

See CLAUDE.md for detailed API integration documentation.

Performance

Pastel UI is optimized for performance:

  • Fast Initial Load - < 200KB initial bundle
  • Code Splitting - Route-based automatic splitting
  • Image Optimization - Next.js Image with AVIF/WebP
  • API Caching - React Query with smart cache invalidation
  • Debounced Updates - Smooth slider interactions
  • Web Workers - Heavy calculations off main thread

Accessibility

Pastel UI meets WCAG 2.1 Level AAA standards:

  • Keyboard Navigation - Full keyboard support
  • Screen Reader Support - Comprehensive ARIA labels
  • Focus Management - Logical focus order
  • Color Contrast - AAA contrast throughout
  • Reduced Motion - Respects user preferences
  • Semantic HTML - Proper HTML structure

Browser Support

  • Chrome/Edge 90+
  • Firefox 88+
  • Safari 14+
  • Mobile Safari 14+
  • Chrome Android 90+

Deployment

Deploy with Vercel

# Install Vercel CLI
pnpm add -g vercel

# Deploy
vercel

# Production deployment
vercel --prod

Docker

# Build
docker build -t pastel-ui .

# Run
docker run -p 3000:3000 -e NEXT_PUBLIC_API_URL=https://api.pastel.com pastel-ui

Static Export

# Build static export
pnpm build

# Output in out/ directory
# Deploy to any static hosting (Netlify, Cloudflare Pages, etc.)

Contributing

Contributions are welcome! Please read CLAUDE.md for development guidelines.

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (pnpm test)
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

PR Checklist

  • Tests pass (pnpm test and pnpm test:e2e)
  • No linting errors (pnpm lint)
  • No TypeScript errors (pnpm type-check)
  • Code formatted (pnpm format)
  • Documentation updated (if needed)
  • Accessibility tested (keyboard, screen reader)
  • Performance checked (pnpm analyze)
  • Pastel API - REST API for color manipulation
  • Pastel CLI - Original command-line tool by David Peter

License

MIT License - see LICENSE file for details.

Acknowledgments

Support


Built with ❤️ using Next.js, React, and Tailwind CSS

Project Status: Design phase complete, ready for implementation Last Updated: 2025-11-07

Description
No description provided
Readme MIT 313 KiB
Languages
TypeScript 95.4%
CSS 3.7%
Dockerfile 0.9%