ef.js

Declarative DOM helper experiment

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
import { type ElementSetup, map, on, type ReactiveOrStatic } from "../../ef.js";

export function onInput<T extends HTMLElement & { value: string }>(
  listener: ReactiveOrStatic<(value: string) => void>,
): ElementSetup<T> {
  return on<T, InputEvent>(
    "input",
    map(listener, (f) => (ev) => {
      if (
        ev.currentTarget instanceof HTMLElement &&
        "value" in ev.currentTarget &&
        typeof ev.currentTarget.value === "string"
      ) {
        ev.stopPropagation();
        f(ev.currentTarget.value);
      }
    }),
  );
}