UNPKG

@adyen/adyen-platform-experience-web

Version:

![Platform Experience header](https://github.com/Adyen/adyen-platform-experience-web/assets/7926613/18094965-9e01-450e-8dc9-ea84e6b22c2b)

65 lines (64 loc) 2.46 kB
import { useRef as u, useMemo as i, useCallback as l } from "../../external/preact/hooks/dist/hooks.module.js"; import { InteractionKeyCode as r } from "../../components/types.js"; import { withTabbableRoot as T, isFocusable as p, focusIsWithin as L } from "../../primitives/dom/tabbableRoot/tabbable.js"; import C from "../useReflex.js"; import { isUndefined as O } from "../../utils/value/is.js"; const w = (R, f) => { const s = u(!1), o = u(null), c = u(!1), a = i(T, []), m = i(() => { let e = null, t; return (F) => { O(t) || cancelAnimationFrame(t); let n = F.target; for (; n && n !== F.currentTarget; ) { if (p(n)) { e = n, t = requestAnimationFrame(() => { t = requestAnimationFrame(() => { var b; o.current !== e && e instanceof HTMLElement && ((b = o.current = e) == null || b.focus()), e = null, t = void 0; }); }); return; } n = n.parentNode; } }; }, []), d = l((e) => { a.current = o.current = e.target; }, []), E = l((e) => { a.tabbables.includes(e.relatedTarget) || L(e.currentTarget, e.relatedTarget) || c.current || (s.current = !0, requestAnimationFrame(() => { s.current && f(s.current = !1); })); }, []), A = i(() => { let e; return (t) => { switch (t.code) { case r.ARROW_DOWN: case r.ARROW_LEFT: case r.ARROW_RIGHT: case r.ARROW_UP: case r.END: case r.ESCAPE: case r.HOME: case r.PAGE_DOWN: case r.PAGE_UP: case r.TAB: cancelAnimationFrame(e), e = requestAnimationFrame(() => { e = requestAnimationFrame(() => { c.current = !1, e = void 0; }); }), c.current = !0; break; } t.code === r.TAB ? (t.preventDefault(), a.current = t.shiftKey ? -1 : 1) : t.code === r.ESCAPE && f(!0); }; }, []); return C( l((e, t) => { t instanceof Element && (t.removeEventListener("keydown", A, !0), t.removeEventListener("focusin", d, !0), t.removeEventListener("focusout", E, !0), e.removeEventListener("click", m, !0)), e instanceof Element ? (e.addEventListener("keydown", A, !0), e.addEventListener("focusin", d, !0), e.addEventListener("focusout", E, !0), e.addEventListener("click", m, !0), s.current = !1, a.root = e) : a.root = null; }, []), R ); }; export { w as default };