//! Human-like input for browser automation: mouse paths, wheel scrolling and
//! typing rhythm.
//!
//! Every function is pure: it takes the parameters and a random number
//! generator and returns points, deltas or durations. Sending them (CDP,
//! WebDriver, OS events) is the caller's job, so the crate has no I/O and no
//! async runtime, and a seeded RNG makes every result reproducible.
//!
//! ```
//! use rand::{rngs::StdRng, SeedableRng};
//! use veilus_human_input::{keyboard, mouse};
//!
//! let mut rng = StdRng::seed_from_u64(7);
//! let params = mouse::MouseParams::default();
//! let steps = mouse::path((40.0, 40.0), (600.0, 320.0), 80.0, ¶ms, &mut rng);
//! assert_eq!(steps.last().map(|s| (s.x, s.y)), Some((600.0, 320.0)));
//!
//! let keys = keyboard::timings("hello", &keyboard::TypingParams::default(), &mut rng);
//! assert_eq!(keys.len(), 5);
//! ```
//!
//! The `Default` parameter sets are reasonable starting points, not a
//! measurement of any particular person. Tune them for your own use.
// Compile and run the README examples as doctests.
;