LearnNewsExamplesServices
Frontmatter
id7204
titlePhase 3: Dynamic Proxy Transitioning (Windowing)
stateClosed
labels
enhancement
assigneestobiu
createdAtAug 21, 2025, 12:06 AM
updatedAtOct 24, 2025, 12:08 PM
githubUrlhttps://github.com/neomjs/neo/issues/7204
authortobiu
commentsCount1
parentIssue7201
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtOct 24, 2025, 12:08 PM

Phase 3: Dynamic Proxy Transitioning (Windowing)

Closed v11.0.0 enhancement
tobiu
tobiu commented on Aug 21, 2025, 12:06 AM

This phase builds directly on the live proxy from Phase 2, introducing a seamless transition between an in-page proxy and a separate browser window, based on the drag location. This will adapt the existing "detach widget" logic found in Colors.view.ViewportController.

  1. API Integration & Boundary Detection:

    • Integrate the Window Management API for window placement control.
    • During a drag:move operation, use Neo.util.Rectangle.getIntersection() to continuously calculate the overlap between the live proxy's bounds and the viewport's bounds.
  2. Seamless Proxy-to-Window Transition:

    • If the proxy is dragged more than 50% outside the viewport, trigger a transition:
      • The drag operation will continue without interruption.
      • Adapt the logic from ViewportController.createBrowserWindow(): A new popup window will be created at the proxy's current screen coordinates.
      • The live component will be moved from the in-page proxy into the new popup, reusing the existing child app and connection logic (onAppConnect).
      • The in-page proxy will be destroyed, and the drag operation will now move the popup window using popup.moveTo().
  3. Seamless Window-to-Proxy Transition ("Docking"):

    • If a dragged popup window is moved back to overlap the viewport by more than 50%, it will automatically transition back:
      • The drag operation will continue without interruption.
      • Adapt the logic from ViewportController.onAppDisconnect(): Instead of just re-inserting the widget into the layout, it will be moved into a new live in-page proxy created at the window's current position.
      • The popup window will be closed.
      • The drag operation will revert to moving the in-page proxy, allowing for re-sorting within the viewport.
tobiu assigned to @tobiu on Aug 21, 2025, 12:06 AM
tobiu added the enhancement label on Aug 21, 2025, 12:06 AM
tobiu added parent issue #7201 on Aug 21, 2025, 12:06 AM
tobiu referenced in commit fc51172 - "Phase 3: Dynamic Proxy Transitioning (Windowing) #7204 starting point" on Aug 21, 2025, 6:41 PM
tobiu referenced in commit 1c5b345 - "#7204 dashboard.Container: allowOverdrag" on Aug 21, 2025, 6:43 PM
tobiu referenced in commit aeae9c5 - "#7204 passing the proxyRect (dragEl rect) into the dragBoundaryExit event." on Aug 21, 2025, 9:27 PM
tobiu referenced in commit 39168db - "#7204 Colors.view.ViewportController: openWidgetInPopup()" on Aug 21, 2025, 9:33 PM
tobiu referenced in commit b415efd - "#7204 popup drag:move events (WIP)" on Aug 21, 2025, 11:38 PM
tobiu referenced in commit 0fb3eb0 - "#7204 dragBoundaryEntry event" on Aug 21, 2025, 11:53 PM
tobiu referenced in commit b7f19e8 - "Phase 3: Dynamic Proxy Transitioning (Windowing) #7204" on Aug 22, 2025, 12:51 AM
tobiu
tobiu Oct 24, 2025, 12:08 PM

resolved.

tobiu closed this issue on Oct 24, 2025, 12:08 PM