Skip to main content

leptos_forms_rs/
lib.rs

1//! Leptos Forms - A comprehensive form management library for Leptos
2//!
3//! This library provides a complete solution for building forms in Leptos applications,
4//! including form state management, validation, field arrays, event handling, and more.
5//!
6//! ## Features
7//!
8//! - **Type-safe forms** with compile-time validation
9//! - **Reactive state management** using Leptos signals
10//! - **Event handling system** with comprehensive form and field events
11//! - **Hook system** with React-like hooks for form state management
12//! - **Component integration** with pre-built form components
13//! - **Field arrays and dynamic forms** support
14//! - **Form persistence** with localStorage support
15//! - **WASM-powered** for high performance
16//!
17//! ## Quick Start
18//!
19//! ```rust
20//! use leptos::*;
21//! use leptos::prelude::{ElementChild, ClassAttribute};
22//! use leptos_forms_rs::*;
23//! use leptos_forms_rs::core::types::FieldType;
24//! use serde::{Deserialize, Serialize};
25//!
26//! #[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
27//! struct LoginForm {
28//!     email: String,
29//!     password: String,
30//! }
31//!
32//! impl Form for LoginForm {
33//!     fn default_values() -> Self {
34//!         LoginForm {
35//!             email: "".to_string(),
36//!             password: "".to_string(),
37//!         }
38//!     }
39//!
40//!     fn field_metadata() -> Vec<FieldMetadata> {
41//!         vec![
42//!             FieldMetadata {
43//!                 name: "email".to_string(),
44//!                 field_type: FieldType::Email,
45//!                 ..Default::default()
46//!             },
47//!             FieldMetadata {
48//!                 name: "password".to_string(),
49//!                 field_type: FieldType::Password,
50//!                 ..Default::default()
51//!             }
52//!         ]
53//!     }
54//!
55//!     fn validate(&self) -> Result<(), ValidationErrors> { Ok(()) }
56//! }
57//!
58//! #[component]
59//! pub fn LoginPage() -> impl IntoView {
60//!     let (form, _submit_callback, _reset_callback) = use_form(LoginForm::default_values());
61//!
62//!     view! {
63//!         <div class="form">
64//!             <FormField form=form.clone() name="email".to_string() />
65//!             <FormField form=form.clone() name="password".to_string() />
66//!         </div>
67//!     }
68//! }
69//! ```
70
71pub mod components;
72pub mod core;
73pub mod devtools;
74pub mod error;
75pub mod events;
76pub mod examples;
77pub mod hooks;
78pub mod utils;
79pub mod validation;
80
81// WASM optimizations module
82#[cfg(target_arch = "wasm32")]
83pub mod wasm_optimizations;
84
85// Re-export core types and traits
86pub use core::traits::FormState;
87pub use core::{FieldMetadata, Form, FormHandle, FormSchema};
88
89// Re-export validation types
90pub use validation::{validate_form, ValidationErrors, Validators};
91
92// Re-export error types
93pub use error::{FieldError, FormError};
94
95// Re-export hooks
96pub use hooks::{
97    use_conditional_validation, use_field_array, use_field_array_values, use_field_dirty, use_field_error,
98    use_field_touched, use_field_value, use_form, use_form_analytics, use_form_performance,
99    use_form_persistence, use_form_submission, use_form_validation, use_form_wizard,
100    use_real_time_validation, FieldArrayHandle,
101};
102
103// Re-export components
104pub use components::{
105    form_wizard as FormWizard, Form as FormComponent, FormDebug, FormField, FormReset,
106};
107
108// Re-export utility functions
109pub use utils::{
110    deserialize_form, form_from_json, form_to_json, form_to_map, forms_are_equal, get_field_type,
111    get_form_field_names, get_form_stats, get_required_field_names, has_validation_errors,
112    is_field_required, map_to_form, merge_validation_errors, serialize_form, validate_field_value,
113    validate_form_detailed, FormStats, FormValidationResult,
114};
115
116// Re-export events
117pub use events::{
118    EventSystem, EventSystemBuilder, EventSystemUtils, FieldBlurHandler, FieldChangeHandler,
119    FieldEvent, FieldEventType, FieldFocusHandler, FieldInputHandler, FormEvent, FormEventType,
120    FormResetHandler, FormSubmitHandler,
121};
122
123// Re-export devtools
124pub use devtools::{
125    DebugUtilities, FieldChange, FieldState, FormSnapshot, FormStateInspector, FormStateSnapshot,
126    IntegrityCheck, PerformanceMetrics, PerformanceMonitor, SnapshotDiff,
127};
128
129#[cfg(test)]
130mod tests;