1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//! Separator drag state.
use HashMap;
use crateWidgetId;
// =============================================================================
// Generic widget-level drag state (used by the uzor separator widget)
// =============================================================================
/// Drag state for a single separator resize handle.
///
/// Maps to mlc `SeparatorDragState` (widget level, §2.5).
///
/// Fields:
/// - `field_id`: which separator widget is being dragged.
/// - `start_pos`: cursor position at drag-start (axis-aligned px).
/// - `start_value`: the separator's logical value (e.g. ratio, px offset) at
/// drag-start — used to compute absolute new value each frame.
/// - `target_pane_id`: opaque ID of the pane/leaf being resized by this drag
/// (mlc: `instance_id: u64` for sub-pane, `sep_idx: usize` for split-panel).
/// - `min_size_constraint`: minimum size (px) the resized pane must maintain.
/// - `max_size_constraint`: maximum size (px) the resized pane may reach
/// (`None` = no upper bound).
// =============================================================================
// Multi-separator hover tracking
// =============================================================================
/// Per-separator hover state for screens that render multiple separators
/// simultaneously (e.g. sub-pane list, split-panel grid).
///
/// Keyed by the same `WidgetId` used in `register_separator`.
// =============================================================================
// SeparatorController snap-back state
// =============================================================================
//
// NOTE: `uzor::docking::panels::separator::SeparatorController` exists and
// implements snap-back machinery (returns `None` from `update_drag` when a
// min-size constraint is violated). However, chart-app (mylittlechart) does NOT
// call `SeparatorController` for any of its separator drag paths:
//
// - Sub-pane drag: `ChartPanelGrid::drag_pane_separator()` — direct ratio update, no snap-back.
// - Split-panel drag: `ChartPanelGrid::apply_separator_drag()` — cascading proportion update, no snap-back.
// - Sidebar drag: inline in `on_drag_move`, no snap-back.
//
// Decision: keep `SeparatorController` in `uzor::docking` where it lives.
// It is NOT used by or re-exported from this widget module. If a future caller
// needs snap-back, use `crate::layout::docking::separator::SeparatorController`
// directly.