//! Multi-pane desktop application framework built on egui_tiles.
//!
//! Build dockable, tile-based layouts with serializable widgets:
//!
//! - [`Mosaic`]: Top-level layout container managing panes and tiles
//! - [`Widget`]: Trait for custom widget panes (title, UI, camera requirements)
//! - [`Pane`]: Wrapper holding a widget instance within the tile tree
//! - [`WidgetContext`]: Per-frame context passed to widgets (world access, cameras)
//! - [`ViewportWidget`]: Built-in widget for rendering a camera's output
//!
//! Additional features:
//!
//! - [`ThemeState`]: 11 theme presets with live switching
//! - [`Modals`]: Modal dialog system (confirm, input, custom)
//! - [`Toasts`]: Toast notification system
//! - [`CommandPalette`]: Searchable command palette with keyboard activation
//! - [`ShortcutManager`]: Keyboard shortcut registration and handling
//! - [`StatusBar`]: Bottom status bar with sections
//! - [`FpsCounter`]: Frame rate display
//! - [`EventLog`]: Timestamped event history
//! - [`MosaicConfig`]: Persistent configuration (recent files, window size)
//! - [`ProjectSaveFile`]: Project serialization with layout and widget state
//!
//! Requires the `mosaic` feature (which implies `egui`).

mod behavior;
mod clipboard;
mod command_palette;
mod config;
mod drag_drop;
mod error;
mod event_log;
mod fps;
mod layout;
mod modal;
mod notification;
mod project;
mod recent_files;
#[cfg(all(not(target_arch = "wasm32"), feature = "file_dialog"))]
mod settings;
mod shortcuts;
mod status_bar;
mod theme;
mod viewport;
mod widget;

pub use crate::filesystem::{FileError, FileFilter, LoadedFile, PendingFileLoad};
#[cfg(all(not(target_arch = "wasm32"), feature = "file_dialog"))]
pub use crate::filesystem::{pick_file, pick_folder, read_file, save_file_dialog, write_file};
#[cfg(any(target_arch = "wasm32", feature = "file_dialog"))]
pub use crate::filesystem::{request_file_load, save_file};
pub use behavior::TileBehavior;
pub use clipboard::{get_clipboard_text, set_clipboard_text};
pub use command_palette::{Command, CommandPalette};
pub use config::MosaicConfig;
pub use drag_drop::{
    DroppedFile, FileCategory, categorize_file, get_dropped_files, is_file_hovering,
    render_drop_overlay, render_drop_overlay_with_category,
};
pub use error::MosaicError;
pub use event_log::{EventLog, EventLogEntry};
pub use fps::FpsCounter;
pub use layout::{LayoutEvent, Mosaic, format_window_title, load_project, save_project};
pub use modal::{ModalRequest, ModalResult, Modals};
pub use notification::{ToastKind, Toasts};
pub use project::{CURRENT_VERSION, LayoutSaveFile, ProjectSaveFile, WindowLayout};
pub use recent_files::{RecentFiles, RecentFilesAction};
#[cfg(all(not(target_arch = "wasm32"), feature = "file_dialog"))]
pub use settings::Settings;
pub use shortcuts::{KeyBinding, ShortcutEntry, ShortcutManager};
pub use status_bar::{StatusBar, StatusBarSection};
pub use theme::{
    ThemeConfig, ThemeState, apply_theme, get_active_theme_visuals, render_theme_editor,
    render_theme_editor_window,
};
pub use viewport::ViewportWidget;
pub use widget::{Pane, Widget, WidgetContext, WidgetEntry};
