mirror of
https://github.com/Kpa-clawbot/meshcore-analyzer.git
synced 2026-06-06 17:51:39 +00:00
b8e9b04a97
## Panel Corner-Position Toggle (M0) Fixes #608 ### What Each overlay panel on the live map page (feed, legend, node detail) gets a small corner-toggle button that cycles through **TL → TR → BR → BL** placement. This solves the panel-blocking-map-data problem with minimal complexity. ### Changes **`public/live.css`** (~60 lines) - CSS classes for 4 corner positions via `data-position` attribute - Smooth transitions with `cubic-bezier` easing - `prefers-reduced-motion` support - Direction-aware hide animations for positioned panels - `.panel-corner-btn` styling (subtle, hover-to-reveal) - Mobile: corner buttons hidden (`<640px` — panels are hidden or bottom-sheet) - `.sr-only` class for screen reader announcements **`public/live.js`** (~90 lines) - `PANEL_DEFAULTS`, `CORNER_CYCLE`, `CORNER_ARROWS` constants - `getPanelPositions()` — reads from localStorage with defaults - `nextAvailableCorner()` — collision avoidance (skips occupied corners) - `applyPanelPosition()` — sets `data-position` + updates button - `onCornerClick()` — cycle logic + persistence + SR announcement - `resetPanelPositions()` — clears saved positions - Corner toggle buttons added to feed, legend, and node detail panel HTML - `initPanelPositions()` called during page init **`test-panel-corner.js`** (14 tests) - `nextAvailableCorner`: available, skip occupied, skip multiple, self-exclusion - `getPanelPositions`: defaults, saved values - `applyPanelPosition`: attribute setting, button update, missing element - `onCornerClick`: cycling, collision avoidance - `resetPanelPositions`: clear + restore defaults - Cycle order and default position validation ### What this does NOT include - Drag-and-drop (M1–M4) - Snap-to-edge - Z-index management - Keyboard repositioning - Any of the full drag system ### Design decisions - **`data-position` + CSS classes** over inline transforms — avoids conflict with existing show/hide `transform` animations - **Cycle (TL→TR→BR→BL)** over toggle-to-opposite — predictable, learnable - **3 panels, 4 corners** — collision avoidance is trivial, always a free corner - **Header/stats panel excluded** — it's contextual chrome, not repositionable --------- Co-authored-by: you <you@example.com>
12 KiB
12 KiB