feat(ui): centralize retail selection state

This commit is contained in:
Erik 2026-07-11 00:51:20 +02:00
parent c7607f019c
commit 7983309d23
30 changed files with 591 additions and 108 deletions

View file

@ -316,15 +316,24 @@ chrome and content together; full suite and user visual gate.
### 3.1 Centralize selection
- [ ] Add Core `SelectionState` with selected guid, previous guid, reason/source,
- [x] Add Core `SelectionState` with selected guid, previous guid, reason/source,
and one change event.
- [ ] Route world pick, radar click, inventory selection, paperdoll selection,
- [x] Route world pick, radar click, inventory selection, paperdoll selection,
toolbar selected strip, target indicator, examine/use, and plugins through it.
- [ ] Delete panel-local competing selection state except transient hover/row focus.
- [ ] Add one App interaction-state owner for `None`, `Use`, `Examine`, and
- [x] Delete panel-local competing selection state except transient hover/row focus.
- [x] Add one App interaction-state owner for `None`, `Use`, `Examine`, and
`UseItemOnTarget(sourceGuid)`; Core selection remains session truth while target
mode remains UI orchestration state.
**Implementation (2026-07-11):** Core `SelectionState` ports
`ACCWeenieObject::SetSelectedObject @ 0x0058C2E0`, including deduplication,
previous/previous-valid tracking, object-removal clear, and plugin callbacks.
World pick, radar, combat targeting, inventory, paperdoll slots, the selected
toolbar strip, target indicator, use/pickup, PreviousSelection, and the new
`IPluginHost.Selection` contract share that owner. `InteractionState` separately
owns `None`/`Use`/`Examine`/`UseItemOnTarget`; `ItemInteractionController` now
projects its pending source from that state. AP-58 retired.
### 3.2 Port item-use/drop legality into Core
- [ ] Translate `ItemHolder::UseObject`, `DetermineUseResult`, and