quadraui 0.6.0

Cross-platform Rust UI toolkit: write one AppLogic and run it unmodified on TUI, GTK4 (Linux), macOS, and Windows backends
Documentation
//! High-level helpers that compose multiple primitives into reusable
//! interaction patterns.
//!
//! The `primitives` module provides stateless descriptors (MenuBar,
//! ContextMenu, Form, etc.). This module provides **controllers** that
//! own the interaction state machine for common compositions — so apps
//! define structure + handle semantic events, without reimplementing
//! open/close/navigate/hover logic.
//!
//! - [`FocusGroup`] — Tab/Shift+Tab cycling through N regions by index.
//! - [`FocusRing`] — Tab/Shift+Tab cycling through widget IDs.
//! - [`MenuSystem`] — MenuBar + ContextMenu dropdown composition.
//! - [`SidebarSystem`] — MSV + TreeView sidebar panel composition.
//! - [`FormController`] — single Form with built-in scrollbar + event dispatch.
//! - [`TreeController`] — single keyboard-navigable TreeView + scrollbar.
//! - [`AppShell`] — ActivityBar + sidebar panel container composition.
//! - [`FolderPickerController`] — cross-backend directory-browsing modal.
//! - [`FilePickerController`] — cross-backend file open/save modal.
//! - [`MessageDialogController`] — cross-backend message/alert-box driver.
//! - [`DualModePaletteController`] — Palette that toggles between text-input
//!   mode (free-text confirm) and list/search mode (item selection).
//! - [`ChatController`] — chat overlay with scrollable transcript + multi-line
//!   input + status strip.
//! - [`TabGroupController`] — TabBar + Split + DropZone + FocusGroup wired into
//!   editor-group-style tabbed split panes.
//! - [`HelpRegistry`] / [`HelpOverlayController`] — per-view help registry +
//!   `?`-triggered cheatsheet overlay, plus helpers to feed registered
//!   actions into the command palette.
//! - [`WorkspaceController`] — open-N-view-one document set (ordered
//!   opaque ids, one active) rendered through the `TabBar` primitive.
//!   Unlike [`TabGroupController`] it owns no content, so the host can
//!   paint a body that borrows app state.
//! - [`notify_or_toast`] — send a [`crate::backend::Notification`]
//!   natively where the backend supports it, degrade to the in-canvas
//!   `Toast` primitive where it doesn't.
//! - [`SidebarPanelBody`] — background fill + optional header/search
//!   chrome + body widget + scrollbar-gutter reservation for a sidebar
//!   panel, composed from existing `Backend` methods.
//! - [`ToastStackController`] — keyboard-focus cursor for the non-modal
//!   [`crate::primitives::toast::ToastOverlay`]: Tab/Shift+Tab/Left/Right
//!   cycle a focused toast's buttons, Up/Down move between toasts, Enter
//!   activates, Escape dismisses.
//!
//! [`crate::ScrollView`] is a `primitives` type, not a controller here —
//! it is the generic seam for a host that scrolls content it lays out
//! itself. [`FormController`], [`TreeController`], and [`ChatController`]
//! keep their own row-indexed scroll state unchanged; a future controller
//! for scrolling arbitrary child content (a help panel, a form section)
//! composes [`crate::ScrollView`] the same way these compose their own
//! primitive instead of duplicating offset/thumb math.

pub mod app_shell;
pub mod bottom_panel;
pub mod chat_controller;
pub mod context_menu_controller;
pub mod dual_mode_palette;
pub mod file_picker;
pub mod focus_group;
pub mod focus_ring;
pub mod folder_picker;
pub mod form_controller;
pub mod help_layer;
pub mod markdown;
pub mod menu_system;
pub mod message_dialog;
pub mod notification;
pub mod sidebar_panel_body;
pub mod sidebar_system;
pub mod status_bar_interaction;
pub mod tab_group;
pub mod toast_stack;
pub mod toolbar_hover_tracker;
pub mod tree_controller;
pub mod workspace;

pub use app_shell::{
    AppShell, AppShellEvent, AppShellLayout, BottomBand, PanelDefinition, ShellPosition,
};
pub use bottom_panel::{
    BackendWidget, BottomPanelConfig, BottomPanelController, BottomPanelEvent, BottomPanelLayout,
    BottomPanelTab,
};
pub use chat_controller::{ChatController, ChatControllerEvent, ChatRole, ChatTurn};
pub use context_menu_controller::{ContextMenuController, ContextMenuOutcome};
pub use dual_mode_palette::{DualModePaletteController, DualModePaletteEvent};
pub use file_picker::{FilePickerController, FilePickerEvent, FilePickerMode};
pub use focus_group::FocusGroup;
pub use focus_ring::FocusRing;
pub use folder_picker::{FolderPickerController, FolderPickerEvent, PALETTE_CHROME_ROWS};
pub use form_controller::{FormController, FormControllerEvent};
pub use help_layer::{
    filter_help_actions, help_actions_to_palette_items, HelpAction, HelpNote,
    HelpOverlayController, HelpOverlayEvent, HelpRegistry, ViewHelp,
};
pub use markdown::{render_markdown_to_styled_wrapped, CodeBlockRange, RenderedMarkdown};
pub use menu_system::{MenuDef, MenuEvent, MenuSystem};
pub use message_dialog::{MessageDialogController, MessageDialogEvent};
pub use notification::notify_or_toast;
pub use sidebar_panel_body::{SidebarPanelBody, SidebarPanelBodyLayout, SidebarPanelChrome};
pub use sidebar_system::{
    NavigationMode, SectionKind, SidebarEvent, SidebarSectionDef, SidebarSystem,
};
pub use status_bar_interaction::{StatusBarAction, StatusBarInteraction};
pub use tab_group::{
    resolve_tab_drop, GroupLayout, Pane, PaneDragRect, PaneTab, TabDragSource, TabDropInstruction,
    TabGroupController, TabGroupEvent, TabGroupLayout,
};
pub use toast_stack::{ToastStackController, ToastStackEvent};
pub use toolbar_hover_tracker::ToolbarHoverTracker;
pub use tree_controller::{TreeController, TreeControllerEvent};
pub use workspace::{WorkspaceController, WorkspaceDoc, WorkspaceEvent, WorkspaceLayout};