quadraui 0.2.1

Cross-platform Rust UI toolkit: write one AppLogic and run it unmodified on TUI, GTK4 (Linux), macOS, and Windows backends
Documentation
//! Backend-agnostic app code shared by every example in this crate.
//!
//! Every example is a thin `main` that constructs an `AppLogic` impl
//! and calls `quadraui::{tui,gtk}::run(app)`. The `AppLogic` bodies
//! themselves live in this module, identical across both backends —
//! that's the payoff of the runner abstraction.
//!
//! Cargo doesn't auto-treat `examples/common/mod.rs` as an example
//! binary (it would if it were named `common.rs` at the examples/
//! root). Each example references it via `#[path = "common/mod.rs"]
//! mod common;`. This is the canonical pattern for shared example
//! helpers in Rust crates.
//!
//! - [`MiniApp`] (in [`mini_app`]) — minimal one-StatusBar app, used
//!   by `tui_app` / `gtk_app`.
//! - [`AppState`] (in [`demo`]) — richer demo state (tabs + status
//!   focus + last message), used by `tui_demo` / `gtk_demo`.
//! - [`DebugSidebar`] (in [`multi_tree`]) — `MultiSectionView` with
//!   N collapsible-tree sections, used by `tui_multi_tree` /
//!   `gtk_multi_tree`. Demonstrates the consumer pattern for
//!   per-section scroll/selection state.
//! - [`ChatDemo`] (in [`chat_demo`]) — `ChatController` overlay with
//!   scrollable transcript, multi-line input, history, and spinner,
//!   used by `tui_chat` / `gtk_chat`.
//! - [`SidebarRevealDemo`] (in [`sidebar_reveal_demo`]) — single Tree
//!   section exercising `SidebarSystem::reveal`, used by
//!   `tui_sidebar_reveal` / `gtk_sidebar_reveal`.
//! - [`SidebarPanelBodyDemo`] (in [`sidebar_panel_body_demo`]) —
//!   `quadraui::compose::sidebar_panel_body::SidebarPanelBody`
//!   composing a background fill + cyclable header/search chrome + a
//!   raw `TreeView` body + a hand-built scrollbar. Used by
//!   `tui_sidebar_panel_body` / `gtk_sidebar_panel_body`.
//! - [`WorkspaceDemo`] (in [`workspace_demo`]) — `WorkspaceController`
//!   mounted inside an `AppShell` panel: open-N-view-one document
//!   tabs in the panel's rect, body painted by the app. Used by
//!   `tui_workspace` / `gtk_workspace`.
//! - [`FocusDemo`] (in [`focus_demo`]) — two lists + a status bar whose
//!   Tab/Shift+Tab order is derived from `ScreenLayout::tab_stops` and
//!   cycled by the runner-owned `FocusManager`, with the backend
//!   painting the focus ring. Used by `tui_focus_ring` / `gtk_focus_ring`.
//! - [`CaretShapeDemo`] (in [`caret_shape_demo`]) — cycles an `Editor`'s
//!   caret through `EditorCursorShape`'s three modes, calling
//!   `Backend::set_caret_shape` on each change. Used by
//!   `tui_caret_shape` / `gtk_caret_shape`.
//! - [`key_map`] — **not** an `AppLogic`, unlike everything else in this
//!   list. `KeyMap`/`KeyContext` are a standalone copy-paste recipe, not
//!   wired into any runner. See its own module doc.
//! - [`ScrollViewDemo`] (in [`scroll_view_demo`], `gtk`/`win`) — tall row
//!   list wheel-scrolled and scrollbar-dragged through a
//!   `quadraui::ScrollView`, painted via each backend's own
//!   `scroll_view::{paint_clipped, draw_scrollbar_for}`. Used by
//!   `gtk_scroll_view` / `win_scroll_view` — no TUI rasteriser for this
//!   primitive exists yet.

// Each example uses a subset of the shared items, so dead-code +
// unused-import warnings are expected and not actionable here.
#![allow(dead_code, unused_imports)]

#[cfg(feature = "terminal")]
pub mod terminal_app;
#[cfg(feature = "terminal")]
pub use terminal_app::TerminalApp;

pub mod activity_nav;
pub mod activity_style_demo;
pub mod ai_transcript;
pub mod appshell_demo;
pub mod board_app;
pub mod bottom_panel_demo;
pub mod canvas_app;
pub mod caret_shape_demo;
pub mod chart_app;
pub mod chat_demo;
pub mod clipboard_demo;
pub mod command_line_selection_demo;
pub mod context_menu_style_demo;
pub mod controls;
pub mod data_table_app;
pub mod demo;
pub mod dialog_table_demo;
pub mod diff_view_demo;
pub mod editor_font_demo;
pub mod file_dialog_demo;
pub mod file_picker_app;
pub mod find_replace_app;
pub mod float_app;
pub mod focus_demo;
pub mod folder_picker_app;
pub mod form_all_fields;
pub mod form_groups;
pub mod form_scroll;
pub mod frame_demo;
pub mod full_chrome_demo;
pub mod help_layer_demo;
pub mod hit_map_recover_demo;
pub mod hscroll_editor;
pub mod image_app;
pub mod indicators_app;
pub mod key_map;
pub mod markdown_demo;
pub mod markdown_wrap_demo;
pub mod menu_bar_app;
pub mod message_dialog_app;
pub mod message_dialog_demo;
pub mod message_list_demo;
pub mod mini_app;
pub mod minimap_app;
pub mod modal_occlusion_demo;
pub mod multi_tree;
pub mod native_menu;
pub mod palette_dual_mode_app;
pub mod panel_app;
pub mod pipeline_app;
pub mod right_click_demo;
#[cfg(any(feature = "gtk", feature = "win"))]
pub mod scroll_view_demo;
pub mod search_panel;
pub mod selection_app;
pub mod shell_app;
pub mod shell_menu_demo;
pub mod sidebar_panel_app;
pub mod sidebar_panel_body_demo;
pub mod sidebar_reveal_demo;
pub mod sidebar_search;
pub mod split_app;
pub mod split_tree_app;
pub mod status_bar_priority_demo;
pub mod submenu_app;
pub mod tab_chrome_demo;
pub mod tab_group_demo;
pub mod tab_icons_demo;
pub mod text_display_wrap_demo;
pub mod text_input_demo;
pub mod toast_actions_app;
pub mod toast_app;
pub mod toolbar_app;
pub mod tooltip_demo;
pub mod wide_tab_bar_demo;
pub mod window_control_demo;
pub mod workspace_demo;

pub use activity_nav::ActivityNavApp;
pub use activity_style_demo::ActivityStyleDemo;
pub use ai_transcript::AiTranscript;
pub use board_app::BoardApp;
pub use canvas_app::CanvasApp;
pub use caret_shape_demo::CaretShapeDemo;
pub use chart_app::ChartApp;
pub use chat_demo::ChatDemo;
pub use clipboard_demo::ClipboardDemo;
pub use command_line_selection_demo::CommandLineSelectionDemo;
pub use context_menu_style_demo::ContextMenuStyleDemo;
pub use controls::ControlsApp;
pub use data_table_app::DataTableApp;
pub use demo::AppState;
pub use dialog_table_demo::DialogTableDemo;
pub use diff_view_demo::DiffViewApp;
pub use editor_font_demo::EditorFontDemo;
pub use file_dialog_demo::FileDialogDemo;
pub use file_picker_app::FilePickerApp;
pub use find_replace_app::FindReplaceApp;
pub use float_app::FloatApp;
pub use focus_demo::FocusDemo;
pub use folder_picker_app::FolderPickerApp;
pub use form_all_fields::FormAllFieldsApp;
pub use form_groups::FormGroupsApp;
pub use form_scroll::FormScrollApp;
pub use frame_demo::FrameDemo;
pub use help_layer_demo::HelpLayerDemo;
pub use hit_map_recover_demo::HitMapRecoverDemo;
pub use hscroll_editor::HScrollEditor;
pub use image_app::ImageApp;
pub use indicators_app::IndicatorsApp;
pub use markdown_demo::MarkdownDemo;
pub use markdown_wrap_demo::MarkdownWrapDemo;
pub use menu_bar_app::MenuBarApp;
pub use message_dialog_app::MessageDialogApp;
pub use message_dialog_demo::MessageDialogDemo;
pub use message_list_demo::MessageListApp;
pub use mini_app::MiniApp;
pub use minimap_app::MinimapApp;
pub use modal_occlusion_demo::ModalOcclusionDemo;
pub use multi_tree::DebugSidebar;
pub use native_menu::NativeMenuApp;
pub use palette_dual_mode_app::PaletteDualModeApp;
pub use panel_app::PanelApp;
pub use pipeline_app::PipelineApp;
pub use right_click_demo::RightClickDemo;
#[cfg(any(feature = "gtk", feature = "win"))]
pub use scroll_view_demo::ScrollViewDemo;
pub use search_panel::SearchPanelApp;
pub use selection_app::SelectionDemo;
pub use shell_app::ShellApp;
pub use shell_menu_demo::ShellMenuDemo;
pub use sidebar_panel_app::SidebarPanelApp;
pub use sidebar_panel_body_demo::SidebarPanelBodyDemo;
pub use sidebar_reveal_demo::SidebarRevealDemo;
pub use sidebar_search::SidebarSearchApp;
pub use split_app::SplitApp;
pub use split_tree_app::SplitTreeApp;
pub use status_bar_priority_demo::StatusBarPriorityDemo;
pub use submenu_app::SubmenuApp;
pub use tab_chrome_demo::TabChromeDemo;
pub use tab_group_demo::TabGroupDemo;
pub use tab_icons_demo::TabIconsDemo;
pub use text_display_wrap_demo::TextDisplayWrapDemo;
pub use toast_actions_app::ToastActionsApp;
pub use toast_app::ToastApp;
pub use toolbar_app::ToolbarApp;
pub use tooltip_demo::TooltipDemo;
pub use wide_tab_bar_demo::WideTabBarDemo;
pub use window_control_demo::WindowControlDemo;
pub use workspace_demo::WorkspaceDemo;