namespace AcDream.UI.Abstractions;
///
/// A UI panel — chat window, inventory, vitals HUD, character sheet, etc.
/// Panels are backend-agnostic: they only call into
/// primitives, never reach through to a specific UI library (Hexa.NET.ImGui
/// in Phase D.2a, a custom retail-look toolkit in Phase D.2b).
///
///
/// Hard rule: no using Hexa.NET.ImGui inside a panel file. If a
/// widget needs a feature the abstraction doesn't expose, extend
/// ; do not import the backend. See
/// docs/plans/2026-04-24-ui-framework.md.
///
///
public interface IPanel
{
/// Stable, globally-unique identifier. Convention: acdream.{name}.
string Id { get; }
/// Human-readable window title shown in the chrome of the panel.
string Title { get; }
///
/// Whether the panel is currently visible. Backends read this per frame;
/// panels may mutate it in response to their own close-button handling.
///
bool IsVisible { get; set; }
///
/// Draw the panel for one frame. Called by
/// on the render thread once ImGui's (or the future custom backend's)
/// frame has begun. Panels issue drawing calls through
/// and publish user-intent actions through ..
///
void Render(PanelContext ctx, IPanelRenderer renderer);
}