feat(chart): layers panel + selection-first fib

- Adds Layers drawer (visible/lock/opacity) and effective opacity wiring.
- Implements selection-first overlay: click selects, drag moves selected, Ctrl-drag edits B, Space-drag always pans.
- Routes pointer events via capture and adds Fib opacity support.
- Updates .gitignore to keep secrets/local scratch out of git.
This commit is contained in:
u1
2026-01-06 23:26:51 +01:00
parent 6107c4e0ef
commit a12c86f1f8
9 changed files with 859 additions and 65 deletions

View File

@@ -4,8 +4,8 @@ import {
IconBrush,
IconCrosshair,
IconCursor,
IconEye,
IconFib,
IconLayers,
IconLock,
IconPlus,
IconRuler,
@@ -24,7 +24,9 @@ type Props = {
timeframe: string;
activeTool: ActiveTool;
hasFib: boolean;
isLayersOpen: boolean;
onToolChange: (tool: ActiveTool) => void;
onToggleLayers: () => void;
onZoomIn: () => void;
onZoomOut: () => void;
onResetView: () => void;
@@ -35,7 +37,9 @@ export default function ChartSideToolbar({
timeframe,
activeTool,
hasFib,
isLayersOpen,
onToolChange,
onToggleLayers,
onZoomIn,
onZoomOut,
onResetView,
@@ -195,9 +199,15 @@ export default function ChartSideToolbar({
</span>
</button>
<button type="button" className="chartToolBtn" title="Visibility" aria-label="Visibility" disabled>
<button
type="button"
className={['chartToolBtn', isLayersOpen ? 'chartToolBtn--active' : ''].filter(Boolean).join(' ')}
title="Layers"
aria-label="Layers"
onClick={onToggleLayers}
>
<span className="chartToolBtn__icon" aria-hidden="true">
<IconEye />
<IconLayers />
</span>
</button>
</div>