Skip to main content

motion_canvas_rs/
lib.rs

1#![doc = include_str!("../README.md")]
2
3pub mod assets;
4pub mod core;
5pub mod elements;
6pub mod project;
7#[cfg(feature = "runtime")]
8pub mod runtime;
9
10// --- RE-EXPORTS ---
11
12/// High-level configuration and project management
13pub use project::Project;
14
15pub use crate::core::animation::paint::Paint;
16/// Common mathematical types
17pub use glam::Vec2;
18pub use peniko::Color;
19pub use peniko::{ColorStop, ColorStops, Extend, Gradient, GradientKind};
20
21/// Custom Result type for the library
22pub type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
23
24/// Re-export nodes for easier access
25pub mod nodes {
26    pub use crate::elements::*;
27}
28
29/// Animation flow controls and macros (all!, chain!, wait, etc.)
30pub mod flows {
31    pub use crate::core::animation::flow::*;
32    // Re-export macros at the module level as well
33    pub use crate::{all, any, chain, delay, loop_anim, sequence, wait, with_easing};
34    #[cfg(feature = "audio")]
35    pub use crate::{audio_wait, play};
36}
37
38/// Easing functions (cubic_in, elastic_out, etc.)
39pub mod easings {
40    pub use crate::core::easings::*;
41}
42
43/// Common types for a quick start
44pub mod prelude {
45    pub use crate::project::Project;
46
47    // Core Traits
48    pub use crate::core::animation::base::Animation;
49    pub use crate::core::animation::base::Node;
50    pub use crate::core::animation::tween::Signal;
51    pub use crate::core::animation::tween::Tweenable;
52    pub use crate::core::filters::{Blur, DEFAULT_BLUR};
53    pub use crate::core::{AnyAnimation, AnyNode};
54
55    // Export the modules themselves for namespaced access
56    pub use crate::easings;
57    pub use crate::flows;
58    pub use crate::nodes;
59
60    #[cfg(feature = "runtime")]
61    pub use crate::runtime::ProjectRuntimeExt;
62
63    // Glob-export for direct access (e.g. Circle, all!, quad_in)
64    pub use crate::core::animation::flow::*;
65    pub use crate::core::easings::*;
66
67    pub use crate::core::masks::MaskMode;
68    pub use crate::elements::container::*;
69    pub use crate::elements::masks::{MaskNode, MaskNode as Mask};
70    pub use crate::elements::media::*;
71    pub use crate::elements::shapes::*;
72
73    #[cfg(feature = "physics")]
74    pub use crate::elements::physics::{
75        PhysicsMode, PhysicsNode, PhysicsShape, RigidBodyNode, StaticBodyNode,
76    };
77
78    pub use crate::{
79        all, any, chain, delay, linear_gradient, loop_anim, radial_gradient, sequence, wait,
80        with_easing,
81    };
82    #[cfg(feature = "audio")]
83    pub use crate::{audio_wait, play};
84
85    pub use crate::assets::font_manager::FontManager;
86    pub use crate::assets::palette::Palette;
87    pub use crate::Result;
88
89    pub use crate::core::animation::paint::Paint;
90    pub use glam::Vec2;
91    pub use kurbo::{Affine, BezPath, Point};
92    pub use peniko::Color;
93    pub use peniko::{ColorStop, ColorStops, Extend, Gradient, GradientKind};
94
95    #[cfg(feature = "runtime")]
96    pub use vello::Scene;
97}