Skip to main content

hyle_dioxus/
lib.rs

1//! Dioxus integration for hyle.
2//!
3//! Provides hooks and context utilities for building data-driven UIs with hyle
4//! in Dioxus applications, calling the `hyle` crate directly without any WASM bridge.
5//!
6//! # Quick start
7//!
8//! ```rust,ignore
9//! use std::sync::Arc;
10//! use dioxus::prelude::*;
11//! use hyle_dioxus::{use_context_provider, HyleConfig, use_data, HyleAdapter, use_adapter_config};
12//!
13//! fn app() -> Element {
14//!     use_context_provider(|| HyleConfig { blueprint: Arc::new(my_blueprint()) });
15//!     use_adapter_config!(make_rest_adapter("http://localhost:3001/api"));
16//!     rsx! { Router::<Route> {} }
17//! }
18//! ```
19
20mod context;
21mod filter;
22mod hooks;
23mod query;
24mod types;
25pub mod adapter;
26#[cfg(feature = "axum")]
27pub mod axum;
28#[cfg(feature = "axum")]
29pub use axum::HyleRenderer;
30
31pub use context::{use_context_provider, use_hyle_components, HyleConfig};
32pub use filter::{FilterField, FormFilterField};
33pub use hooks::{form_body, use_data, use_filters, use_form, use_forma, use_list, use_list_with_filters, use_manifest, use_mutation};
34pub use query::{
35    make_fullstack_adapter, use_dioxus_mutation, use_fullstack_source,
36    DioxusMutationOptions, InvalidationSignal,
37};
38pub use types::{
39    field_type_key, BoundMutateInput, BoundMutation, BoundMutations, DioxusFieldChangeFn,
40    DioxusFieldChangeMap, HyleAdapter,
41    HyleComponents, HyleFilterField, HyleFilterFieldProps,
42    HyleFiltersState, HyleFormState, HyleListState, HyleMutation,
43    HyleSourceState, HyleValueProps, UseFiltersOptions, UseFormOptions,
44    UseSource,
45};
46pub use adapter::{
47    apply_change, build_effective_query, build_filter_fields, compute_data, compute_forma_result,
48    compute_manifest, run_purify, AdapterFiltersOptions, AdapterFormOptions, FieldChange,
49    FieldChangeFn, FieldChangeMap, FormErrors, HyleDataField, HyleDataState,
50    HyleManifestState, UseFormaOptions,
51};
52
53// Re-export hyle types that callers need when building blueprints and queries.
54pub use hyle::{
55    Blueprint, Column, Field, FieldType, Forma, FormaContext, FormaField, FormaFieldType, Manifest,
56    Model, Primitive, PurifyError, Query, Row, Sort, Source, Value,
57};
58
59/// The default component stylesheet for hyle UI components.
60pub static CSS: manganis::Asset = manganis::asset!("assets/hyle.css");
61
62// ── Adapter config macro ──────────────────────────────────────────────────────
63
64/// Provide a `HyleAdapter` as Dioxus context.
65///
66/// Call this at the **top level** of your root component, passing a fully
67/// constructed `HyleAdapter` (e.g. from `make_fullstack_adapter`).
68/// All hooks then read source and mutations from context automatically.
69///
70/// ```rust,ignore
71/// use hyle_dioxus::use_adapter_config;
72/// use hyle_dioxus::make_fullstack_adapter;
73///
74/// fn App() -> Element {
75///     use_adapter_config!(make_fullstack_adapter(...));
76///     // ...
77/// }
78/// ```
79#[macro_export]
80macro_rules! use_adapter_config {
81    ($adapter:expr) => {
82        {
83            use dioxus::prelude::use_context_provider;
84            use hyle_dioxus::HyleAdapter;
85            let _hyle_adapter: HyleAdapter = $adapter;
86            use_context_provider(|| _hyle_adapter);
87        }
88    };
89}