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