UNPKG

@yandex/ui

Version:

Yandex UI components

82 lines (81 loc) 3.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dispose = void 0; var canUseDOM_1 = require("../../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_1.canUseDOM()) { if (pointerFocus === null) { pointerFocus = PointerFocus.create(); } } /** * Отключает PointerFocus на странице. * * @internal */ function dispose() { if (pointerFocus) { pointerFocus.dispose(); } } exports.dispose = dispose;