//! Panels - Lego-style composable panel system //! //! This module provides: //! - AutonomousPanel: Self-contained UI component //! - Composite patterns: Vertical, Horizontal, Split, Tab, Grid //! - ChangeNotifier: Observer pattern for panel communication //! - Detail: Components for detail/edit panels (state machine, semaphore, buttons) //! //! Architecture based on Simifactu's Lego Panels system: //! - Panels are autonomous (own state, UI, logic) //! - Panels are reusable across windows //! - Windows compose panels (not inheritance) //! - Communication via ChangeNotifier (observer pattern) const std = @import("std"); // ============================================================================= // Module imports // ============================================================================= pub const panel = @import("panel.zig"); pub const composite = @import("composite.zig"); pub const change_notifier = @import("change_notifier.zig"); pub const detail = @import("detail/detail.zig"); // ============================================================================= // Panel types // ============================================================================= pub const AutonomousPanel = panel.AutonomousPanel; pub const PanelType = panel.PanelType; pub const PanelState = panel.PanelState; pub const BuildFn = panel.BuildFn; pub const RefreshFn = panel.RefreshFn; pub const DestroyFn = panel.DestroyFn; pub const DataChangeFn = panel.DataChangeFn; pub const createPanel = panel.createPanel; // ============================================================================= // Composite types // ============================================================================= pub const VerticalComposite = composite.VerticalComposite; pub const HorizontalComposite = composite.HorizontalComposite; pub const SplitComposite = composite.SplitComposite; pub const SplitState = composite.SplitState; pub const TabComposite = composite.TabComposite; pub const TabState = composite.TabState; pub const GridComposite = composite.GridComposite; // ============================================================================= // ChangeNotifier types (for panel-to-panel communication) // ============================================================================= pub const ChangeNotifier = change_notifier.ChangeNotifier; pub const DataChange = change_notifier.DataChange; pub const ChangeType = change_notifier.ChangeType; pub const Observer = change_notifier.Observer; pub const ObserverCallback = change_notifier.ObserverCallback; pub const getChangeNotifier = change_notifier.getChangeNotifier; pub const setChangeNotifier = change_notifier.setChangeNotifier; // ============================================================================= // Detail Panel types (for edit/detail panels) // ============================================================================= pub const DetailPanelState = detail.DetailPanelState; pub const DetailPanelBase = detail.DetailPanelBase; pub const EscapeResult = detail.EscapeResult; pub const ActionButtonsResult = detail.ActionButtonsResult; pub const NavButtonsResult = detail.NavButtonsResult; pub const ActionButtonsOpts = detail.ActionButtonsOpts; pub const NavButtonsOpts = detail.NavButtonsOpts; // ============================================================================= // Tests // ============================================================================= test { std.testing.refAllDecls(@This()); }