UNPKG

@yandex/ui

Version:

Yandex UI components

78 lines (77 loc) 3.07 kB
import { canUseDOM } from '../../lib/canUseDOM'; var PointerFocus = /** @class */ (function () { function PointerFocus() { var _this = this; this.onKeyDown = function () { window.clearTimeout(_this.timeoutId); _this.isPointer = false; }; this.onMouseDown = function () { _this.isPointer = true; window.clearTimeout(_this.timeoutId); _this.timeoutId = window.setTimeout(function () { return (_this.isPointer = false); }, 600); }; this.onFocus = function () { if (_this.isPointer) { window.document.body.classList.add('pointerfocus'); window.document.body.classList.remove('utilityfocus'); } else { window.document.body.classList.add('utilityfocus'); window.document.body.classList.remove('pointerfocus'); } }; this.onBlur = function () { window.addEventListener('focus', _this.setIsPointerOnTabFocus, true); }; this.setIsPointerOnTabFocus = function () { window.removeEventListener('focus', _this.setIsPointerOnTabFocus, true); if (window.document.body.classList.contains('pointerfocus')) { _this.isPointer = true; window.setTimeout(function () { return (_this.isPointer = false); }); } }; this.timeoutId = 0; this.isPointer = false; window.addEventListener('blur', this.onBlur); window.document.addEventListener('keydown', this.onKeyDown); window.document.addEventListener('mousedown', this.onMouseDown); window.document.addEventListener('mouseup', this.onMouseDown); window.document.addEventListener('focusin', this.onFocus); if (!window.document.body.classList.contains('pointerfocus') && !window.document.documentElement.classList.contains('pointerfocus')) { window.document.body.classList.add('utilityfocus'); } } PointerFocus.create = function () { return new PointerFocus(); }; /** * Удаляет все обработчики и классы с документа. */ PointerFocus.prototype.dispose = function () { window.removeEventListener('blur', this.onBlur); window.document.removeEventListener('keydown', this.onKeyDown); window.document.removeEventListener('mousedown', this.onMouseDown); window.document.removeEventListener('mouseup', this.onMouseDown); window.document.removeEventListener('focusin', this.onFocus); window.document.body.classList.remove('pointerfocus', 'utilityfocus'); }; return PointerFocus; }()); var pointerFocus = null; if (canUseDOM()) { if (pointerFocus === null) { pointerFocus = PointerFocus.create(); } } /** * Отключает PointerFocus на странице. * * @internal */ export function dispose() { if (pointerFocus) { pointerFocus.dispose(); } }