acton_htmx/template/framework/mod.rs
1//! Framework template system with XDG-compliant storage
2//!
3//! This module provides runtime-loadable templates for framework-generated HTML
4//! (forms, flash messages, validation errors, error pages, etc.).
5//!
6//! Templates are resolved in order:
7//! 1. User customizations in `$XDG_CONFIG_HOME/acton-htmx/templates/framework/`
8//! 2. Cached defaults in `$XDG_CACHE_HOME/acton-htmx/templates/framework/`
9//! 3. Embedded fallbacks compiled into the binary
10//!
11//! # Example
12//!
13//! ```rust,no_run
14//! use acton_htmx::template::framework::FrameworkTemplates;
15//!
16//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
17//! let templates = FrameworkTemplates::new()?;
18//!
19//! // Render a form input
20//! let html = templates.render("forms/input.html", minijinja::context! {
21//! input_type => "text",
22//! name => "email",
23//! id => "email",
24//! })?;
25//! # Ok(())
26//! # }
27//! ```
28
29mod loader;
30
31pub use loader::{FrameworkTemplateError, FrameworkTemplates};
32
33/// Names of all framework templates
34pub const TEMPLATE_NAMES: &[&str] = &[
35 // Forms
36 "forms/form.html",
37 "forms/field-wrapper.html",
38 "forms/input.html",
39 "forms/textarea.html",
40 "forms/select.html",
41 "forms/checkbox.html",
42 "forms/radio-group.html",
43 "forms/submit-button.html",
44 "forms/help-text.html",
45 "forms/label.html",
46 "forms/csrf-input.html",
47 // Validation
48 "validation/field-errors.html",
49 "validation/validation-summary.html",
50 // Flash messages
51 "flash/container.html",
52 "flash/message.html",
53 // HTMX
54 "htmx/oob-wrapper.html",
55 // Error pages
56 "errors/400.html",
57 "errors/401.html",
58 "errors/403.html",
59 "errors/404.html",
60 "errors/422.html",
61 "errors/500.html",
62];