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) { }
}