1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//! Takumi is a library with different parts to render UI component trees to images. This crate contains the core logic for layout and rendering.
//!
//! Checkout the [Quick Start](https://takumi.kane.tw/docs) if you are looking for napi-rs / WASM bindings.
//!
//! # Example
//!
//! ```rust
//! use takumi::{
//! layout::{
//! node::Node,
//! Viewport,
//! style::{Length::Px, Style, StyleDeclaration},
//! },
//! resources::font::FontResource,
//! rendering::{render, RenderOptions},
//! GlobalContext,
//! };
//!
//! // Create a node tree with `Node::container` and `Node::text`
//! let node = Node::container([Node::text("Hello, world!").with_style(
//! Style::default().with(StyleDeclaration::font_size(Px(32.0).into())),
//! )]);
//!
//! // Create a context for storing resources, font caches.
//! // You should reuse the context to speed up the rendering.
//! let mut global = GlobalContext::default();
//!
//! // Load fonts
//! global.font_context.load_and_store(
//! FontResource::new(include_bytes!("../../assets/fonts/geist/Geist[wght].woff2"))
//! );
//!
//! // Create a viewport
//! let viewport = Viewport::new((1200, 630));
//!
//! // Create render options
//! let options = RenderOptions::builder()
//! .viewport(viewport)
//! .node(node)
//! .global(&global)
//! .build();
//!
//! // Render the layout to an `RgbaImage`
//! let image = render(options).unwrap();
//! ```
//!
//! # Feature Flags
//!
//! - `woff2`: Enable WOFF2 font support.
//! - `woff`: Enable WOFF font support.
//! - `svg`: Enable SVG support.
//! - `rayon`: Enable rayon support.
//!
//! # Credits
//!
//! Takumi wouldn't be possible without the following works:
//!
//! - [taffy](https://github.com/DioxusLabs/taffy) for the flex & grid layout.
//! - [image](https://github.com/image-rs/image) for the image processing.
//! - [parley](https://github.com/linebender/parley) for text layout.
//! - [skrifa](https://github.com/googlefonts/fontations/tree/main/skrifa) for glyph loading.
//! - [wuff](https://github.com/nicoburns/wuff) for woff/woff2 decompression.
//! - [resvg](https://github.com/linebender/resvg) for SVG parsing & rasterization.
/// Layout related modules, including the node tree, style parsing, and layout calculation.
/// Rendering related modules, including the image renderer, canvas operations.
/// Error handling types and utilities.
/// Shared deserializers for structured and shorthand keyframe inputs.
/// External resource management (fonts, images)
use HashSet;
pub use ;
use TypedBuilder;
use Xxh3DefaultBuilder;
use crate;
/// The main context for image rendering.
///
/// This struct holds all the necessary state for rendering images, including
/// font management, image storage, and debug options.
/// Type alias for HashSet using XXH3 hasher
pub type Xxh3HashSet<T> = ;