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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//! Atoms - Basic UI building blocks
//!
//! Atoms are the smallest UI components organized by category:
//!
//! - **core**: Basic UI components (always available)
//! - **audio**: Audio visualization and control (requires `audio` feature)
//! - **midi**: MIDI input and editing (requires `midi` feature)
//! - **mixer**: Audio mixing and effects (requires `mixer` feature)
//! - **visual**: Video/graphics editing (requires `visual` feature)
//!
//! # Feature Flags
//!
//! - `audio` - Audio visualization components (BPM, transport, waveform, etc.)
//! - `midi` - MIDI components (keyboard, piano roll, mapper)
//! - `mixer` - Mixer components (channel strip, effects, automation)
//! - `visual` - Visual editing components (layers, masks, color wheel)
//! - `vj` - Enables `audio` + `visual`
//! - `daw` - Enables `audio` + `midi` + `mixer`
//! - `studio` - Enables all VJ/DAW components
//!
//! # Creating New Atoms
//!
//! When creating a new atom component, ensure it respects theme scaling:
//!
//! ## Required: Use Theme Values
//!
//! ```ignore
//! use crate::Theme;
//!
//! impl Widget for MyAtom {
//! fn ui(self, ui: &mut Ui) -> Response {
//! let theme = Theme::current(ui.ctx());
//!
//! // Use theme values (respects scaling)
//! let height = theme.spacing_md + theme.spacing_sm;
//! let font = egui::FontId::proportional(theme.font_size_sm);
//! let padding = theme.spacing_sm;
//! let border = theme.stroke_width;
//! let corner = theme.radius_sm;
//! }
//! }
//! ```
//!
//! ## Theme Token Reference
//!
//! | Category | Tokens | Scaled by |
//! |----------|--------|-----------|
//! | Spacing | `spacing_xs/sm/md/lg/xl` | `with_scale()`, `with_spacing_scale()` |
//! | Font | `font_size_xs/sm/md/lg/xl/2xl/3xl` | `with_font_scale()` |
//! | Radius | `radius_sm/md/lg` | `with_radius_scale()` |
//! | Stroke | `stroke_width`, `border_width` | `with_stroke_scale()` |
// =============================================================================
// Core atoms (always available)
// =============================================================================
pub use *;
// =============================================================================
// Audio atoms (audio feature)
// =============================================================================
pub use *;
// =============================================================================
// MIDI atoms (midi feature)
// =============================================================================
pub use *;
// =============================================================================
// Mixer atoms (mixer feature)
// =============================================================================
pub use *;
// =============================================================================
// Visual atoms (visual feature)
// =============================================================================
pub use *;
// =============================================================================
// Plot atoms (plot feature - existing)
// =============================================================================
pub use raw as plot_raw;
pub use ;
// =============================================================================
// Extras atoms (extras feature - existing)
// =============================================================================
pub use raw as extras_raw;
pub use ;