Skip to main content

oxframe_components/
lib.rs

1//! Blocks for explainer videos. Each one is added like any other node,
2//! takes its look from the project theme, and speaks three words:
3//! [`enter`](TitleCard::enter), [`next`](TitleCard::next) and [`exit`](TitleCard::exit).
4//!
5//! ```ignore
6//! let steps = view.add(BulletList::new(["Take the middle", "Compare", "Drop half"]));
7//! steps.enter().await;
8//! for _ in 0..3 { steps.next().await; }
9//! ```
10
11#![warn(missing_docs)]
12
13/// `From<X>` and `From<&X>` for `Node`, so a component goes wherever a node
14/// does: `caption.next_to(&end_card, Side::Bottom)`. Invoked in each
15/// component's module, where its root field is visible.
16macro_rules! into_node {
17    ($($t:ty => |$c:ident| $root:expr;)*) => {$(
18        impl From<$t> for oxframe_2d::Node {
19            fn from($c: $t) -> oxframe_2d::Node {
20                $root
21            }
22        }
23        impl From<&$t> for oxframe_2d::Node {
24            fn from($c: &$t) -> oxframe_2d::Node {
25                $root
26            }
27        }
28    )*};
29}
30
31mod axes;
32mod callout;
33mod code;
34mod flow;
35mod host;
36mod lower;
37mod matrix;
38mod table;
39mod title;
40
41pub use axes::{Axes, AxesBuilder, Bars, Interval, Mat2, NumberLine, Plot, Series, Vector};
42pub use callout::{Callout, CalloutBuilder};
43pub use code::{CodeExplainer, CodeExplainerBuilder};
44pub use flow::{FlowDiagram, FlowDiagramBuilder};
45pub use lower::{ChapterMarker, ChapterMarkerBuilder, LowerThird, LowerThirdBuilder};
46pub use matrix::{Matrix, MatrixBuilder};
47pub use table::{Table, TableBuilder, TableRow};
48pub use title::{
49    BulletList, BulletListBuilder, EndCard, EndCardBuilder, TitleCard, TitleCardBuilder,
50};