using System; namespace AcDream.App.UI; /// /// Lifecycle contract for a controller attached to a retained retail window. /// Implementations own panel-specific subscriptions and reactions; the window /// manager owns visibility, focus, capture, geometry, and teardown ordering. /// public interface IRetainedPanelController : IDisposable { /// Called once for each hidden-to-shown transition. void OnShown() { } /// Called once for each shown-to-hidden transition. void OnHidden() { } /// /// Called when keyboard focus enters, leaves, or moves within this window. /// is null when focus left the window. /// Controllers that do not react to focus may use this default no-op. /// void OnDescendantFocusChanged(UiElement? focusedDescendant) { } }