//! Change-notification wiring for [`TextArea`], split out of `text_area.rs`
//! to keep that file under the project's 800-line cap.
//!
//! Mirrors `TextField`'s `on_change` semantics (see
//! `text_field/filter.rs::notify_change`): a `FnMut(&str)` callback that fires
//! after every text mutation, letting a caller capture edits back into a shared
//! cell. The dispatcher is invoked from the two internal mutation funnels
//! ([`TextArea::insert_str`] and [`TextArea::delete`]) and, when the content
//! epoch advances, from the pre-default key-chord interceptor in `widget_impl`.
use *;