//! Shared explicit-construction UI substrate for RUIN.
//!
//! This crate intentionally starts with explicit Rust data construction rather than a proc-macro
//! authoring layer. The goal is to validate the threading, windowing, and scene handoff model
//! before committing to ergonomic surface syntax. Concrete platform and renderer backends live in
//! sibling crates.

pub(crate) mod trace_targets {
    #![allow(dead_code)]
    pub const PLATFORM: &str = "ruin_ui::platform";
    pub const SCENE: &str = "ruin_ui::scene";
    #[allow(dead_code)]
    pub const TEXT_PERF: &str = "ruin_ui::text_perf";
}

mod image;
mod interaction;
mod keyboard;
mod layout;
mod platform;
mod runtime;
mod scene;
mod text;
mod tree;
mod window;

pub use image::{ImageFit, ImageResource, ImageResourceError};
pub use interaction::{
    PointerButton, PointerEvent, PointerEventKind, PointerRouter, RoutedPointerEvent,
    RoutedPointerEventKind,
};
pub use keyboard::{KeyboardEvent, KeyboardEventKind, KeyboardKey, KeyboardModifiers};
pub use layout::{
    HitTarget, InteractionTree, LayoutCache, LayoutFrameStats, LayoutNode, LayoutPath,
    LayoutSnapshot, ScrollMetrics, TextHitTarget, element_min_size, layout_snapshot,
    layout_snapshot_with_cache, layout_snapshot_with_cache_and_stats,
    layout_snapshot_with_text_system,
};
pub use layout::{layout_scene, layout_scene_with_text_system};
pub use platform::{
    PlatformClosed, PlatformEndpoint, PlatformEvent, PlatformProxy, PlatformRequest,
    PlatformRuntime, set_command_wake_hook, start_headless,
};
pub use runtime::{EventStreamClosed, UiRuntime, WindowController};
pub use scene::{
    ClipRegion, Color, DisplayItem, GlyphInstance, Point, PreparedImage, PreparedText,
    PreparedTextLine, Quad, Rect, RoundedRect, SceneSnapshot, ShadowRect, TextLayoutData,
    Translation, UiSize,
};
pub use text::{
    TextAlign, TextFontFamily, TextSelectionStyle, TextSpan, TextSpanSlant, TextSpanWeight,
    TextStyle, TextSystem, TextWrap,
};
pub use tree::{
    AlignItems, Border, BoxShadow, BoxShadowKind, CornerRadius, CursorIcon, Edges, Element,
    ElementId, FlexDirection, JustifyContent, ScrollbarStyle, Style,
};
pub use window::{
    DecorationMode, WindowConfigured, WindowId, WindowLifecycle, WindowSpec, WindowUpdate,
};
