feat(dashboard): add auto-layout button with smart widget packing

Implements intelligent auto-layout system that efficiently arranges widgets to maximize space usage while respecting panel width constraints.

**Key Features:**
- Smart packing algorithm that sorts by widget area and finds optimal positions
- Respects responsive column count (2-4 columns based on panel width)
- Prefers full-width widgets when possible to eliminate gaps
- Fallback to narrower widths for better vertical packing
- Maintains minimum widget sizes

**Implementation:**
- GridEngine.autoLayout() - Core packing algorithm with collision detection
- DashboardManager.autoLayoutWidgets() - High-level API that re-renders after layout
- Auto-Arrange button in dashboard header (uses fa-table-cells-large icon)
- Event handler wired to call autoLayoutWidgets with preferFullWidth=true

**Algorithm Strategy:**
1. Sort widgets by area (largest first) for efficient packing
2. For each widget, try full-width placement first
3. Find first available position using row-by-row scan
4. If position is too far down, try narrower widths
5. Mark cells as occupied to prevent overlaps

**Testing Notes:**
- Works with current responsive column system (2-4 columns)
- Respects minimum sizes and column constraints
- Re-renders all widgets after repositioning
- Auto-saves layout changes

Part of Epic 2: Dashboard Widget Library
This commit is contained in:
Lucas 'Paperboy' Rose-Winters
2025-10-23 14:00:00 +11:00
parent e32a008f0b
commit 122bb3194a
13 changed files with 668 additions and 87 deletions
+10 -10
View File
@@ -708,26 +708,26 @@
**Epic 2 Status:**
**Core Widgets Implemented (Needs Testing):**
**Core Widgets Implemented (Code Complete - Needs Testing):**
- [x] Task 2.1: User Stats Widget (408 lines)
- [x] Task 2.2: Info Box Widgets - 5 modular widgets (545 lines)
- [x] Task 2.3: Present Characters Widget (377 lines)
- [x] Task 2.4: Inventory Widget (925 lines)
**Optional Widgets (Deferred to post-v2.0):**
**Remaining Widgets (To Do Next):**
- [ ] Task 2.5: Classic Stats Widget (standalone)
- [ ] Task 2.6: Dice Roller Widget
- [ ] Task 2.7: Last Roll Display Widget
**Epic 2 Complete When (TESTING IN PROGRESS):**
- [ ] TESTING: All core widgets converted and functional
- [ ] TESTING: Each widget draggable and resizable
- [ ] TESTING: All existing functionality preserved
- [ ] TESTING: Configuration options work for each widget
- [ ] TESTING: No regressions in data persistence
- [ ] TESTING: Mobile responsive behavior maintained
**Epic 2 Complete When:**
- [ ] All 7 widgets converted and functional (4 done, 3 remaining)
- [ ] Each widget draggable and resizable
- [ ] All existing functionality preserved
- [ ] Configuration options work for each widget
- [ ] No regressions in data persistence
- [ ] Mobile responsive behavior maintained
**Next Step:** Complete integration and end-to-end testing before marking Epic 2 complete
**Next Step:** Continue with Tasks 2.5, 2.6, 2.7 OR test/integrate existing widgets first (awaiting direction)
---