Files
fahnen_esp32/.pio/libdeps/esp01_1m/FastLED/LAYOUT.md

14 KiB
Raw Blame History

FastLED UI Layout Management System Design

Overview

This document outlines the design for a comprehensive, responsive UI layout management system for the FastLED WebAssembly compiler interface. The system provides dynamic layout calculation, state management, and container coordination to ensure optimal UI presentation across different screen sizes and orientations.

Architecture

Core Components

┌─────────────────────────────────────────────────────────────────┐
│                    UILayoutPlacementManager                     │
│                     (Main Orchestrator)                        │
├─────────────────────────────────────────────────────────────────┤
│ • Coordinates all layout operations                             │
│ • Applies CSS styling and grid layouts                          │
│ • Handles layout mode transitions                               │
│ • Manages container visibility                                  │
└─────────────────────────────────────────────────────────────────┘
                                │
                ┌───────────────┼───────────────┐
                │               │               │
                ▼               ▼               ▼
┌─────────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
│  LayoutStateManager │ │ ResizeCoordinator│ │  ColumnValidator    │
│  (State & Logic)    │ │ (Event Handling) │ │ (Optimization)      │
├─────────────────────┤ ├─────────────────┤ ├─────────────────────┤
│ • Viewport tracking │ │ • Resize events  │ │ • Layout validation │
│ • Layout calculation│ │ • Debouncing     │ │ • Performance check │
│ • State transitions │ │ • Event dispatch │ │ • Efficiency metrics│
│ • Container states  │ │ • Coordination   │ │ • Optimization hints│
└─────────────────────┘ └─────────────────┘ └─────────────────────┘

Component Specifications

1. UILayoutPlacementManager

Purpose: Main orchestrator for all layout operations Location: src/platforms/wasm/compiler/modules/ui_layout_placement_manager.js

Key Responsibilities:

  • Apply layout styles to DOM elements
  • Coordinate between state manager and UI components
  • Handle layout mode transitions (mobile, tablet, desktop, ultrawide)
  • Manage container visibility and grid configurations

Public API:

class UILayoutPlacementManager {
  constructor()
  applyLayout()
  forceLayoutUpdate()
  validateAndOptimizeLayout()
  getLayoutInfo()
  updateContentMetrics(totalGroups, totalElements)
}

2. LayoutStateManager

Purpose: Unified state management for layout calculations Location: src/platforms/wasm/compiler/modules/layout_state_manager.js

Key Features:

  • Centralized layout state storage
  • Viewport and breakpoint detection
  • Canvas and UI column calculations
  • Container state tracking
  • Atomic state updates with change events

State Schema:

{
  mode: 'mobile' | 'tablet' | 'desktop' | 'ultrawide',
  viewportWidth: number,
  availableWidth: number,
  canvasSize: number,
  uiColumns: number,
  uiColumnWidth: number,
  uiTotalWidth: number,
  canExpand: boolean,
  container2Visible: boolean,
  totalGroups: number,
  totalElements: number
}

3. ResizeCoordinator

Purpose: Coordinated resize event handling Location: src/platforms/wasm/compiler/modules/resize_coordinator.js

Features:

  • Debounced resize event handling
  • Cross-component resize coordination
  • Performance-optimized event dispatch
  • Race condition prevention

4. ColumnValidator

Purpose: Layout optimization and validation Location: src/platforms/wasm/compiler/modules/column_validator.js

Capabilities:

  • Layout efficiency analysis
  • Column width optimization
  • Content density validation
  • Performance recommendations

Layout Modes

Mobile (≤ 768px)

  • Layout: Single column (1×N grid)
  • Canvas: Full width, centered
  • UI: Stacked below canvas
  • Containers: Only primary UI container visible

Tablet (769px - 1199px)

  • Layout: Two columns (2×N grid)
  • Canvas: Left side, fixed width
  • UI: Right side, flexible width
  • Containers: Primary UI container only

Desktop (1200px - 1599px)

  • Layout: Two columns (2×N grid)
  • Canvas: Left side, larger fixed width
  • UI: Right side, flexible width
  • Containers: Primary UI container only

Ultrawide (≥ 1600px)

  • Layout: Three columns (3×N grid)
  • Canvas: Center, fixed width
  • UI: Left and right sides, flexible widths
  • Containers: Both primary and secondary UI containers

Configuration

Layout Constants

{
  minCanvasSize: 320,
  maxCanvasSize: 800,
  minUIColumnWidth: 280,
  maxUIColumnWidth: 400,
  horizontalGap: 40,
  verticalGap: 20,
  containerPadding: 40,
  maxUIColumns: 3,
  preferredUIColumnWidth: 320,
  canvasExpansionRatio: 0.6,
  minContentRatio: 0.4
}

Breakpoints

{
  mobile: { max: 768 },
  tablet: { min: 769, max: 1199 },
  desktop: { min: 1200, max: 1599 },
  ultrawide: { min: 1600 }
}

Implementation Todos

Phase 1: Core Infrastructure

  • Create LayoutStateManager with unified state handling
  • Implement ResizeCoordinator for event management
  • Build ColumnValidator for layout optimization
  • Refactor UILayoutPlacementManager to use new components

Phase 2: State Management

  • Implement atomic state updates with change events
  • Add container state tracking and visibility management
  • Create viewport detection and breakpoint handling
  • Add content metrics tracking (groups, elements)

Phase 3: Layout Calculation

  • Implement responsive canvas sizing algorithms
  • Add dynamic UI column width calculation
  • Create layout mode transition logic
  • Add grid template generation for CSS

Phase 4: Event Coordination

  • Implement debounced resize handling
  • Add cross-component event coordination
  • Create performance-optimized event dispatch
  • Add race condition prevention

Phase 5: Optimization & Validation

  • Create layout efficiency analysis
  • Implement column width optimization
  • Add content density validation
  • Create performance monitoring and recommendations

Phase 6: Integration & Polish

  • Integrate with existing UI manager
  • Add backward compatibility for legacy APIs
  • Implement proper error handling and fallbacks
  • Add comprehensive logging and debugging support

Phase 7: Testing & Documentation

  • Create comprehensive unit tests for all components
  • Add integration tests for layout scenarios
  • Create visual regression tests for different screen sizes
  • Add performance benchmarks and optimization tests
  • Document API usage and configuration options

Phase 8: Advanced Features

  • Add animation support for layout transitions
  • Implement custom breakpoint configuration
  • Add layout templates and presets
  • Create advanced grid layout options
  • Add accessibility features and ARIA support

Phase 9: Performance Optimization

  • Implement layout caching for repeated calculations
  • Add virtual scrolling for large UI element lists
  • Optimize DOM manipulation and CSS application
  • Add lazy loading for non-visible UI components
  • Implement progressive enhancement for slower devices

Phase 10: Extensibility

  • Create plugin system for custom layout algorithms
  • Add theme and styling customization APIs
  • Implement layout export/import functionality
  • Create developer tools for layout debugging
  • Add real-time layout editing capabilities

Benefits

Performance

  • Debounced Events: Prevents excessive layout recalculations
  • Atomic Updates: Eliminates partial state inconsistencies
  • Efficient DOM: Minimizes CSS recalculations and reflows
  • Optimized Calculations: Smart caching and memoization

Maintainability

  • Separation of Concerns: Each component has a single responsibility
  • Unified State: Single source of truth for layout information
  • Modular Design: Components can be tested and modified independently
  • Clear APIs: Well-defined interfaces between components

User Experience

  • Responsive Design: Seamless adaptation to any screen size
  • Smooth Transitions: Coordinated layout changes without flicker
  • Optimal Layouts: Intelligent space utilization across devices
  • Fast Rendering: Performance-optimized for real-time applications

Developer Experience

  • Type Safety: Comprehensive JSDoc annotations for IDE support
  • Debugging Tools: Built-in logging and state inspection
  • Extensible: Easy to add new layout modes and features
  • Documentation: Clear API documentation and usage examples

JSON UI Persistent State

State Management Architecture

The system now includes comprehensive JSON-based state persistence implemented in commit 86d9b7d5d. This enables:

  • Persistent Layout State: All layout configurations stored as JSON with atomic updates
  • UI Element State Tracking: Complete state management for UI elements with change events
  • Recording/Playback System: Full UI interaction recording and replay capabilities
  • Container State Management: Visibility and configuration state for all UI containers

Core State Components

LayoutStateManager

Location: src/platforms/wasm/compiler/modules/layout_state_manager.js:487

Provides centralized JSON state management with:

{
  mode: 'mobile' | 'tablet' | 'desktop' | 'ultrawide',
  viewportWidth: number,
  availableWidth: number,
  canvasSize: number,
  uiColumns: number,
  uiColumnWidth: number,
  uiTotalWidth: number,
  canExpand: boolean,
  container2Visible: boolean,
  totalGroups: number,
  totalElements: number,
  containers: {
    'ui-controls': { visible: boolean, columns: number, width: number },
    'ui-controls-2': { visible: boolean, columns: number, width: number }
  }
}

UIRecorder

Location: src/platforms/wasm/compiler/modules/ui_recorder.js:517

Records UI state changes as JSON events:

{
  recording: {
    version: "1.0",
    startTime: "ISO8601",
    endTime: "ISO8601",
    metadata: { recordingId: string, layoutMode: string, totalDuration: number }
  },
  events: [
    {
      timestamp: number,
      type: 'add' | 'update' | 'remove',
      elementId: string,
      data: { elementType?: string, value?: any, previousValue?: any, elementConfig?: Object }
    }
  ]
}

UIPlayback

Location: src/platforms/wasm/compiler/modules/ui_playback.js:596

Reconstructs UI from JSON state with:

  • Event-by-event playback with timing control
  • Speed control and pause/resume functionality
  • Element state validation and restoration
  • Progress tracking and timeline navigation

UI Reconstruction Benefits

Instead of manipulating DOM objects directly, the JSON state system enables:

  1. State-Driven Reconstruction: Rebuild entire UI from current JSON state
  2. Atomic Updates: All changes applied atomically to prevent inconsistencies
  3. Time Travel: Navigate to any point in UI history via recorded states
  4. State Validation: Verify UI consistency against recorded state
  5. Reproducible Layouts: Exact recreation of UI configurations

Usage Pattern for Reconstruction

// Get current UI state
const currentState = layoutManager.stateManager.getState();

// Reconstruct UI from state instead of DOM manipulation
function reconstructUI(state) {
  // Clear existing UI
  clearAllContainers();

  // Rebuild from JSON state
  applyLayoutFromState(state);
  recreateElementsFromState(state);
  restoreContainerVisibility(state);
}

// Apply state changes
layoutManager.stateManager.updateState(newStateData);

Integration Points

UI Manager Integration

// In JsonUiManager constructor
this.layoutManager = new UILayoutPlacementManager();

// Listen for layout changes
this.layoutManager.stateManager.addStateChangeListener((changeEvent) => {
  const { state } = changeEvent;
  this.onLayoutChange(state.mode);
});

Container Management

// Check container visibility before placing elements
const container2State = this.layoutManager.stateManager.getContainerState('ui-controls-2');
if (container2State && container2State.visible) {
  // Use multi-container layout
} else {
  // Use single-container layout
}

Content Updates

// Update content metrics when UI elements change
this.layoutManager.updateContentMetrics(totalGroups, totalElements);

// Force layout recalculation when needed
this.layoutManager.forceLayoutUpdate();

Future Enhancements

Advanced Layout Modes

  • Split-screen: Side-by-side canvas and code editor
  • Picture-in-picture: Floating canvas with overlay UI
  • Full-screen: Immersive canvas mode with minimal UI
  • Multi-monitor: Extended layout across multiple displays

Dynamic Content

  • Adaptive UI: UI elements that resize based on content
  • Collapsible sections: Expandable/collapsible UI groups
  • Floating panels: Draggable and dockable UI components
  • Custom layouts: User-defined layout configurations

Accessibility

  • Screen reader support: Proper ARIA labels and navigation
  • Keyboard navigation: Full keyboard accessibility
  • High contrast: Theme support for visual accessibility
  • Responsive text: Scalable fonts and UI elements

This design provides a robust foundation for responsive UI layout management in the FastLED WebAssembly compiler, ensuring optimal user experience across all device types and screen sizes.