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;