# Cocoanut TODO
## ✅ v0.2.0 (COMPLETE)
Rewrote from scratch. Declarative view tree, reactive state, zero warnings.
### Core
- [x] Single `View` type with `ViewKind` enum (26 view types)
- [x] Single `renderer.rs` — all AppKit mapping in one file
- [x] 7 source files, ~2000 lines (was: 114 files, 26,878 lines)
- [x] JSON serializable view tree (ViewDesc)
- [x] 0 warnings, 29 tests + 1 doctest
### Event System
- [x] ObjC target/action dispatch via `CocoanutActionHandler`
- [x] `event::register(id, closure)` global callback registry
- [x] All controls wired: Button, Checkbox, Radio, Toggle, Slider, Dropdown, DatePicker, ColorPicker
### State Management
- [x] `State<T>` with `on_change` listeners
- [x] `counter_state()` convenience
- [x] `bind_label(state, tag, format_fn)` — tag-based NSView label updates
- [x] `.tag(N)` modifier for identifying views
### Views (26 total)
- [x] Layout: VStack, HStack, ZStack, Spacer
- [x] Text: Text, Label, TextField, SecureField, TextArea
- [x] Controls: Button, Checkbox, Radio, Slider, Toggle, Dropdown, DatePicker, ColorPicker
- [x] Containers: ScrollView, TabView, SplitView, GroupBox, WebView, TableView
- [x] Data: ProgressBar, Image
- [x] Custom
### Polish
- [x] Dark mode: `Appearance` enum, `.dark()`/`.light()`, `set_appearance()`
- [x] Accessibility: `.accessibility(label)` on all views
- [x] Menu actions: `MenuItem::on_action(callback_id)`
- [x] Zero compiler warnings (`#![allow(unexpected_cfgs)]`)
## 🔮 Next
### v0.3.0 — Auto Layout
- [ ] NSLayoutConstraint-based layout (replace frame-based)
- [ ] Intrinsic content size support
### v0.4.0 — Two-Way Binding
- [ ] Text field value binding to State<String>
- [ ] Slider value binding to State<f64>
- [ ] Toggle binding to State<bool>
### v0.5.0 — TableView Data Source
- [ ] NSTableViewDataSource ObjC delegate for row data
- [ ] Reactive table updates from State changes