UNPKG

next-csrf

Version:

CSRF mitigation library for Next.js

45 lines (35 loc) 1.28 kB
/* trigger a callback once the context element is focusable and is fully visible in the viewport */ import whenVisibleArea from './visible-area'; import isFocusable from '../is/focusable'; import contextToElement from '../util/context-to-element'; import getDocument from '../util/get-document'; export default function () { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, callback = _ref.callback, area = _ref.area; if (typeof callback !== 'function') { throw new TypeError('when/focusable requires options.callback to be a function'); } var element = contextToElement({ label: 'when/focusable', context: context }); var filterCallback = function filterCallback(target) { if (!isFocusable(target)) { return false; } return callback(target); }; var _document = getDocument(element); var handle = whenVisibleArea({ context: element, callback: filterCallback, area: area }); var disengage = function disengage() { _document.removeEventListener('focus', disengage, true); handle && handle.disengage(); }; _document.addEventListener('focus', disengage, true); return { disengage: disengage }; } //# sourceMappingURL=focusable.js.map