| Crates.io | hyperchad_renderer |
| lib.rs | hyperchad_renderer |
| version | 0.1.4 |
| created_at | 2025-05-07 15:34:36.910001+00 |
| updated_at | 2025-07-21 20:04:08.119325+00 |
| description | HyperChad renderer package |
| homepage | |
| repository | https://github.com/MoosicBox/MoosicBox |
| max_upload_size | |
| id | 1664029 |
| size | 65,655 |
Core rendering abstractions and traits for HyperChad UI frameworks.
The HyperChad Renderer package provides:
Add this to your Cargo.toml:
[dependencies]
hyperchad_renderer = { path = "../hyperchad/renderer" }
# Enable additional features
hyperchad_renderer = {
path = "../hyperchad/renderer",
features = ["json", "canvas", "assets", "viewport"]
}
use hyperchad_renderer::{Renderer, View, PartialView, Color, Handle};
use async_trait::async_trait;
struct MyRenderer {
// Renderer state
}
#[async_trait]
impl Renderer for MyRenderer {
async fn init(
&mut self,
width: f32,
height: f32,
x: Option<i32>,
y: Option<i32>,
background: Option<Color>,
title: Option<&str>,
description: Option<&str>,
viewport: Option<&str>,
) -> Result<(), Box<dyn std::error::Error + Send + 'static>> {
// Initialize renderer with window properties
Ok(())
}
async fn render(&self, view: View) -> Result<(), Box<dyn std::error::Error + Send + 'static>> {
// Render full view
Ok(())
}
async fn render_partial(&self, partial: PartialView) -> Result<(), Box<dyn std::error::Error + Send + 'static>> {
// Render partial content update
Ok(())
}
async fn emit_event(&self, event_name: String, event_value: Option<String>) -> Result<(), Box<dyn std::error::Error + Send + 'static>> {
// Handle event emission
Ok(())
}
fn add_responsive_trigger(&mut self, name: String, trigger: ResponsiveTrigger) {
// Add responsive breakpoint trigger
}
}
use hyperchad_renderer::{Content, View, PartialView};
use hyperchad_transformer::Container;
// Create view content
let view_content = Content::view(View {
future: None,
immediate: Container::default(),
});
// Create partial view content
let partial_content = Content::partial_view(
"#content",
Container::default()
);
// From string (with HTML parsing)
let string_content: Content = "<div>Hello World</div>".try_into()?;
// From container
let container_content = Content::from(Container::default());
use hyperchad_renderer::{HtmlTagRenderer, Color};
use hyperchad_transformer::{Container, ResponsiveTrigger};
use std::collections::HashMap;
struct MyHtmlRenderer {
responsive_triggers: HashMap<String, ResponsiveTrigger>,
}
impl HtmlTagRenderer for MyHtmlRenderer {
fn add_responsive_trigger(&mut self, name: String, trigger: ResponsiveTrigger) {
self.responsive_triggers.insert(name, trigger);
}
fn element_attrs_to_html(
&self,
f: &mut dyn std::io::Write,
container: &Container,
is_flex_child: bool,
) -> Result<(), std::io::Error> {
// Generate HTML attributes for container
Ok(())
}
fn root_html(
&self,
headers: &HashMap<String, String>,
container: &Container,
content: String,
viewport: Option<&str>,
background: Option<Color>,
title: Option<&str>,
description: Option<&str>,
) -> String {
format!(r#"
<!DOCTYPE html>
<html>
<head>
<title>{}</title>
<meta name="description" content="{}">
<meta name="viewport" content="{}">
</head>
<body style="background-color: {}">
{}
</body>
</html>
"#,
title.unwrap_or("HyperChad App"),
description.unwrap_or(""),
viewport.unwrap_or("width=device-width, initial-scale=1"),
background.map(|c| c.to_string()).unwrap_or_else(|| "white".to_string()),
content
)
}
fn partial_html(
&self,
headers: &HashMap<String, String>,
container: &Container,
content: String,
viewport: Option<&str>,
background: Option<Color>,
) -> String {
content
}
}
use hyperchad_renderer::RendererEvent;
// Handle renderer events
match event {
RendererEvent::View(view) => {
// Handle full view update
}
RendererEvent::Partial(partial) => {
// Handle partial content update
}
RendererEvent::Event { name, value } => {
// Handle custom event
println!("Event: {} = {:?}", name, value);
}
#[cfg(feature = "canvas")]
RendererEvent::CanvasUpdate(update) => {
// Handle canvas update
}
}
canvas feature)#[cfg(feature = "canvas")]
use hyperchad_renderer::canvas::CanvasUpdate;
#[cfg(feature = "canvas")]
#[async_trait]
impl Renderer for MyRenderer {
async fn render_canvas(&self, update: CanvasUpdate) -> Result<(), Box<dyn std::error::Error + Send + 'static>> {
// Handle canvas rendering
Ok(())
}
}
assets feature)#[cfg(feature = "assets")]
use hyperchad_renderer::assets::StaticAssetRoute;
#[cfg(feature = "assets")]
{
let asset_route = StaticAssetRoute {
route: "/static/style.css".to_string(),
content_type: "text/css".to_string(),
content: "body { margin: 0; }".to_string(),
};
}
json feature)Core rendering interface with initialization, rendering, and event handling.
Application execution interface for running renderer instances.
Conversion trait for creating runner instances from renderers.
HTML-specific rendering with CSS generation and document structure.
json: Enable JSON content supportcanvas: Enable canvas rendering capabilitiesassets: Enable static asset managementviewport: Enable viewport utilitiesThis package is designed for: