Frontmatter
| id | 7201 |
| title | Dashboard Drag & Drop |
| state | Open |
| labels | enhancementepicno auto close |
| assignees | tobiu |
| createdAt | Aug 21, 2025, 12:03 AM |
| updatedAt | Nov 19, 2025, 3:01 PM |
| githubUrl | https://github.com/neomjs/neo/issues/7201 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | 7202 Phase 1: Foundational Sorting 7203 Phase 2: Live In-Page Proxy 7204 Phase 3: Dynamic Proxy Transitioning (Windowing) 7205 Phase 4: Framework-Level Dashboard Abstraction 7206 Initial Dashboard Drag & Drop 7207 Enhance container.SortZone for Complex Layouts 7208 main.addon.DragDrop: onDragMove() => pass the dragElement rect to the app worker 7209 draggable.dashboard.SortZone: moveTo() => regression bug 7210 Implement Window Management Permission Request |
| subIssuesCompleted | 5 |
| subIssuesTotal | 9 |
| blockedBy | [] |
| blocking | [] |
Dashboard Drag & Drop
Openenhancementepicno auto close
tobiu assigned to @tobiu on Aug 21, 2025, 12:03 AM
tobiu added sub-issue #7202 on Aug 21, 2025, 12:04 AM
tobiu added sub-issue #7203 on Aug 21, 2025, 12:05 AM
tobiu added sub-issue #7204 on Aug 21, 2025, 12:06 AM
tobiu added sub-issue #7205 on Aug 21, 2025, 12:06 AM
tobiu added sub-issue #7206 on Aug 21, 2025, 12:34 AM
tobiu added sub-issue #7207 on Aug 21, 2025, 11:12 AM
tobiu added sub-issue #7208 on Aug 21, 2025, 8:46 PM
tobiu added sub-issue #7209 on Aug 21, 2025, 9:22 PM
tobiu added sub-issue #7210 on Aug 21, 2025, 9:50 PM
Overview
This epic covers the implementation of drag-and-drop functionality for the main widgets within the Colors App dashboard (
apps/colors/view/Viewport.mjs). The goal is to allow users to reorder the Grid, Pie Chart, and Bar Chart components. The implementation should be inspired by the fluid, main-thread driven drag-and-drop logic used forTabContainerheaders.This epic serves as the foundational R&D for the multi-window dashboard capabilities of the upcoming Neo Studio.
Key Requirements
HeaderToolbarat the top of the viewport will be excluded from reordering.Design Rationale & Strategy
This section outlines the key architectural decisions and strategic insights that inform the implementation phases.
Architectural Approach (Phase 1): The plan is to refactor the existing
toolbar.SortZoneinto a more genericcontainer.SortZone. While simply reusing the toolbar-specific class might be a faster shortcut, the refactoring approach was chosen as the correct long-term solution. It establishes a clean, reusable abstraction for sorting items in any flexbox-based container, improving maintainability and avoiding technical debt.Live Proxy (Phase 2): The core goal is to create a high-fidelity user experience, where the dragged component is not a static image but remains a fully "live" instance. This leverages the Neo.mjs VDOM engine's ability to reparent live components, which is a key technical differentiator and provides the foundation for the advanced effects in Phase 3.
Dynamic Windowing (Phase 3): The implementation of this ambitious phase is significantly de-risked and accelerated by adapting existing, proven logic. The
apps/colors/view/ViewportControlleralready contains robust functionality for detaching a live widget into a separate popup window. Phase 3 will adapt this logic to trigger dynamically mid-drag. Furthermore,Neo.util.Rectangle.getIntersection()has been identified as the ideal utility for the boundary-check calculations.