Skip to main content

tessera_ui/
lib.rs

1//! Declarative UI runtime and extension APIs.
2//!
3//! ## Usage
4//!
5//! Compose with [`tessera`], defer child content with [`RenderSlot`], and own data with [`State`].
6#![deny(
7    missing_docs,
8    clippy::unwrap_used,
9    rustdoc::broken_intra_doc_links,
10    rustdoc::invalid_rust_codeblocks,
11    rustdoc::invalid_html_tags
12)]
13
14extern crate self as tessera_ui;
15
16#[doc(hidden)]
17pub mod __private;
18pub mod accessibility;
19#[cfg(target_os = "android")]
20pub mod android;
21pub mod asset;
22mod build_tree;
23pub mod clip;
24pub mod clipboard;
25pub mod color;
26mod component_call;
27mod dispatcher;
28mod graphics;
29mod work;
30
31pub use dispatcher::UiDispatcher;
32pub use graphics::{
33    FrameBuffer, GraphicsDevice, GraphicsWork, GraphicsWorkDiagnostics, ScratchFit, ScratchTexture,
34    ScratchTextureDescriptor, TrackedBuffer,
35};
36pub use work::{FrameWork, WorkExecution, WorkPhase, WorkTotals};
37
38mod session;
39pub mod system_back;
40
41pub use session::{RuntimeSession, RuntimeSessionGuard, RuntimeSessionId, WeakRuntimeSession};
42
43pub(crate) use session::{local_runtime_resource, runtime_resource};
44
45mod component_tree;
46pub mod context;
47mod cursor;
48pub mod dp;
49pub mod entry_point;
50pub mod entry_registry;
51mod execution_context;
52pub mod focus;
53pub mod geometry;
54#[cfg(all(feature = "headless", not(target_family = "wasm")))]
55pub mod headless;
56mod ime_state;
57mod inline_set;
58mod keyboard_state;
59pub mod layout;
60pub mod modifier;
61pub mod nested_scroll;
62pub(crate) mod pipeline_cache;
63pub mod pipeline_context;
64pub mod plugin;
65#[cfg(feature = "profiling")]
66pub mod profiler;
67mod prop;
68pub mod px;
69mod read_dependencies;
70mod render_graph;
71pub mod render_module;
72mod render_pass;
73pub mod render_scene;
74pub mod renderer;
75mod runtime;
76pub mod scroll;
77#[cfg(any(test, feature = "testing"))]
78pub mod testing;
79mod thread_utils;
80pub mod time;
81
82pub use accesskit;
83pub use indextree::{Arena, NodeId};
84pub use tessera_macros::{entry, lint, tessera};
85pub use wgpu;
86pub use winit;
87
88pub use crate::{
89    accessibility::{AccessibilityActionHandler, AccessibilityId, AccessibilityNode},
90    asset::{Asset, FontAsset, LoadState, Resource, Source},
91    clip::{ClipRegion, ClipShape, ui_stencil_state},
92    clipboard::{
93        ClipboardAction, ClipboardInput, ClipboardInputModifierNode, ClipboardResponse,
94        ClipboardWrite, request_clipboard_action,
95    },
96    color::Color,
97    component_tree::{
98        AxisConstraint, ComponentTree, ComputedData, Constraint, ImeInput, ImeInputHandlerFn,
99        ImeRequest, ImeSession, KeyboardInput, KeyboardInputHandlerFn, MeasurementError,
100        ParentConstraint, PointerEventPass, PointerInput, PointerInputHandlerFn,
101    },
102    context::{Context, provide_context, use_context},
103    cursor::{
104        CursorEventContent, GestureState, MOUSE_POINTER_ID, PointerChange, PointerId,
105        PressKeyEventType, ScrollDeltaUnit, ScrollEventContent, ScrollEventSource,
106    },
107    dp::Dp,
108    entry_point::EntryPoint,
109    entry_registry::{EntryRegistry, TesseraPackage},
110    focus::{
111        FocusDirection, FocusGroupNode, FocusManager, FocusProperties, FocusRequester,
112        FocusRestorationTarget, FocusScopeNode, FocusState, FocusTraversalPolicy,
113        FocusTraversalStrategy,
114    },
115    geometry::{FloatRect, LayoutCoordinates, LocalToWindow, scaled_box},
116    keyboard_state::KeyboardEvent,
117    layout::{
118        DefaultLayoutNode, DrawModifierHandle, LayoutModifierHandle, LayoutResult,
119        NoopDrawModifier, RenderInput, RenderMetadataMut,
120    },
121    modifier::{
122        BuildModifierNode, CursorModifierExt, CursorModifierNode, DrawModifierContent,
123        DrawModifierContext, DrawModifierNode, FocusModifierExt, ImeInputModifierNode,
124        KeyboardInputModifierNode, LayoutModifierChild, LayoutModifierInput, LayoutModifierNode,
125        Modifier, ModifierBuildContext, ParentDataMap, ParentDataModifierNode,
126        PlacementModifierNode, PointerInputModifierNode, SemanticsModifierNode,
127    },
128    pipeline_context::PipelineContext,
129    plugin::{
130        DesktopPlatformContext, DesktopWindowAction, Plugin, PluginContext, PluginResult,
131        register_plugin, register_plugin_boxed, try_with_plugin, try_with_plugin_mut, with_plugin,
132        with_plugin_mut,
133    },
134    prop::{Callback, CallbackWith, RenderSlot, RenderSlotWith, Slot},
135    px::{Px, PxPosition, PxRect, PxSize},
136    render_graph::{DrawGeometry, RenderFragment, RenderFragmentOp, RenderGraph, RenderGraphOp},
137    render_module::RenderModule,
138    render_scene::{Command, DrawRegion, PaddingRect, SampleRegion},
139    renderer::{
140        Renderer,
141        compute::{self, ComputablePipeline, ComputeCommand, ComputePipelineRegistry},
142        core::OffscreenReadbackError,
143        drawer::{self, DrawCommand, DrawablePipeline, PipelineRegistry, command},
144    },
145    runtime::{
146        FrameClockDiagnostics, FrameNanosControl, State, StateOwner, current_frame_nanos,
147        current_frame_time, frame_delta, key, receive_frame_nanos, remember, remember_with_key,
148        retain, retain_with_key,
149    },
150    scroll::{PlatformScrollConfig, normalize_platform_scroll_delta, platform_scroll_config},
151    thread_utils::SendSync,
152};
153
154use ime_state::ImeState;
155
156#[cfg(all(feature = "headless", not(target_family = "wasm")))]
157pub use crate::headless::{
158    HEADLESS_ENV, HEADLESS_FRAME_TIME_MS_ENV, HEADLESS_HEIGHT_ENV, HEADLESS_WIDTH_ENV,
159    HeadlessConfig, HeadlessError, HeadlessRenderer, encode_png_rgba, headless_mode_requested,
160    run_headless, write_png_file,
161};
162
163#[cfg(target_os = "android")]
164pub use {jni, ndk_context, ndk_sys};
165
166/// Window safe areas and keyboard occlusion.
167pub mod window_insets;
168pub use window_insets::{Insets, WindowInsets, WindowInsetsController};