Live-filtering through slugify ate hyphens and spaces (trailing hyphens are stripped) and jumped the cursor to the end on mid-text edits. Now only spaces→hyphens and lowercasing happen oninput (length-preserving, cursor stays put); the full slugify runs at commit before the server call, which keeps its own validation.