Skip to content

Conversation

@sayagodev
Copy link

✨ Pull Request

ℹ️ About the PR

This PR introduces a comprehensive design overlay feature that allows users to overlay design images on device previews for visual comparison. The implementation includes:

Core Features:

  • Design Overlay Redux Slice: Complete state management with persistence to Electron store
  • DesignOverlay Component: Renders overlay images with configurable opacity and two positioning modes:
    • Overlay mode: Semi-transparent overlay directly on the device preview
    • Side-by-side mode: Full opacity comparison view with guide grid support
  • DesignOverlayControls Component: Modal interface for managing overlays with:
    • Image upload functionality
    • Opacity slider (0-100%)
    • Position selector (overlay/side-by-side)
    • Enable/disable toggle
    • Save and remove actions
  • FileUploader Enhancement: Added file name display for better UX

🖼️ Testing Scenarios / Screenshots

Testing Performed:

  1. Redux Slice Tests: Verified state management, persistence, and selectors
  2. DesignOverlay Component Tests:
    • Rendering conditions (disabled state, empty image)
    • Opacity application in overlay and side modes
    • GuideGrid integration in side mode
  3. DesignOverlayControls Component Tests:
    • File upload functionality
    • Opacity slider interaction
    • Save/remove actions
    • State persistence

Manual Testing Scenarios:

  • Upload design image and verify overlay appears
  • Adjust opacity slider and verify real-time updates
  • Switch between overlay and side-by-side modes
  • Enable/disable overlay toggle
  • Remove overlay and verify cleanup
  • Verify persistence across app restarts
  • Test scroll synchronization in overlay mode

Screenshots:

  • Overlay mode with adjustable opacity
image
  • Side-by-side comparison mode
screenshot_13012026_073940
  • Design overlay controls modal
screenshot_13012026_074003
- Create design-overlay slice with setDesignOverlay and removeDesignOverlay actions
- Add designOverlays schema to electron store for persistence
- Integrate designOverlay reducer into main Redux store
- Load persisted overlays on app initialization
- Add scrollX and scrollY to pass-scroll-data IPC messages
- Update Coordinates interface to include scrollX and scrollY
- Update Device component to handle new scroll coordinates
- Introduce DesignOverlayControls component for managing design overlays
- Implement state management for overlay settings including image upload, opacity, and position
- Add DesignOverlay component to render the overlay based on user settings
- Integrate new controls into the Toolbar for user interaction
- Rearrange imports for better organization in Device component
- Update resolution handling to use a consistent format
- Enhance design overlay rendering logic based on state
- Fix scroll data handling to correctly reference scroll coordinates
- Add optional fileName property to DesignOverlayState for future use
…lity

- Add optional showFileName and initialFileName props to FileUploader
- Implement state management for displaying the selected file name
- Update file input handling to reset value based on showFileName prop
- Refactor component structure to conditionally render file name and upload button
- Implement tests for setDesignOverlay and removeDesignOverlay actions
- Validate state updates and persistence to electron store
- Add selectors to retrieve overlay state and enabled status
- Ensure coverage for various scenarios including existing and non-existent overlays
@CLAassistant
Copy link

CLAassistant commented Jan 13, 2026

CLA assistant check
All committers have signed the CLA.

- Bump ResponsivelyApp version to 1.17.1 in package-lock.json and yarn.lock
- Adjust scroll position calculations in DesignOverlay to account for zoom factor
@sayagodev
Copy link
Author

Core Features: +1

  • Interactive Divider Slider: Draggable vertical divider in overlay mode for real-time comparison. Click and drag to reveal/hide portions of the design overlay.
divider.mp4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants