1use anyhow::{anyhow, Result};
36use fission_diagnostics::prelude as diag;
37use downcast_rs::Downcast;
38use fission_ir::CoreIR;
39use lazy_static::lazy_static;
40use serde_json;
41use std::any::{Any, TypeId};
42use std::collections::{HashMap, HashSet};
43use std::sync::Arc;
44
45extern crate self as fission_core;
46
47pub mod action;
48pub mod context; pub mod diff;
50pub mod effect; pub mod env;
52pub mod event;
53pub mod hit_test;
54pub mod input;
55pub mod lowering;
56pub mod media;
57pub mod registry;
58pub mod runtime;
59pub mod time;
60pub mod ui;
61
62pub mod view;
63
64#[cfg(test)]
65mod tests;
66
67use crate::env::ActiveAnimation;
68pub use action::{Action, ActionEnvelope, ActionId, AppState};
69pub use context::{ReducerContext, Effects}; pub use effect::{Effect, EffectEnvelope, EffectPayload, ActionInput, SystemEffect}; pub use env::{Env, InteractionStateMap, RuntimeState, ScrollStateMap, Clipboard, ImeHandler};
72pub use runtime::Runtime;
73
74pub use event::{InputEvent, KeyCode, KeyEvent, LifecycleEvent, PointerButton, PointerEvent};
75pub use fission_ir::op;
76pub use fission_ir::{EmbedKind, NodeId, Op, WidgetNodeId};
77pub use fission_layout::{
78 BoxConstraints, FlexDirection, LayoutEngine, LayoutOp, LayoutPoint, LayoutRect, LayoutSize, LayoutSnapshot, LayoutUnit, TextMeasurer,
79};
80use hit_test::{find_next_focus_node, hit_test, hit_test_with_scroll};
81pub use lowering::{LoweringContext, NodeBuilder};
82pub use registry::{
83 ActionRegistry, AnimationPropertyId, AnimationRequest, AnimationStartValue, BuildCtx, Handler,
84 PortalLayer, VideoRegistration,
85};
86pub use time::{Clock, CurrentTime};
87pub use ui::{Builder, Button, Column, CustomNode, LayoutBuilder, Lower, LowerDyn, Node, Row, Text};
88pub use view::{Selector, View, Widget};
89
90#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
102pub struct Tick {
103 pub dt: CurrentTime,
105}
106
107impl Action for Tick {
108 fn static_id() -> ActionId {
109 *TICK_ACTION_ID
110 }
111}
112
113lazy_static! {
114 pub static ref TICK_ACTION_ID: ActionId = ActionId::from_name("fission_core::Tick");
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
129pub struct AdvanceTo {
130 pub time: CurrentTime,
132}
133
134impl Action for AdvanceTo {
135 fn static_id() -> ActionId {
136 *ADVANCE_TO_ACTION_ID
137 }
138}
139
140lazy_static! {
141 pub static ref ADVANCE_TO_ACTION_ID: ActionId = ActionId::from_name("fission_core::AdvanceTo");
142}
143
144pub type BoxedReducer = Box<
151 dyn FnMut(
152 &mut HashMap<TypeId, Box<dyn AppState>>,
153 &ActionEnvelope,
154 NodeId,
155 &mut Vec<EffectEnvelope>,
156 &ActionInput
157 ) -> Result<()>
158 + Send
159 + Sync,
160>;