Open menu state and event-side behavior.
The state keeps only interaction data. Item trees stay in the model so callers can rebuild or reuse menus without carrying transient hover state.