"use strict";
exports.__esModule = true;
exports.isTouchSupported = exports.isPointerEventsSupported = exports.releaseMatchMedia = exports.getMatchMedia = void 0;
var tslib_1 = require("tslib");
// @ts-nocheck
var mq_json_1 = (0, tslib_1.__importDefault)(require("./mq.json"));
// TODO: перенести в /utils
var pool = {};
var refCounters = {};
/**
 * Возвращает MediaQueryList для заданного media-выражения.
 *
 * @param queryProp media выражение или кастомный запрос из `mq.json`, например `--mobile`.
 */
function getMatchMedia(queryProp) {
    var query = mq_json_1["default"][queryProp] || queryProp;
    if (pool[query]) {
        refCounters[query] += 1;
    }
    else {
        pool[query] = window.matchMedia(query);
        refCounters[query] = 1;
    }
    return pool[query];
}
exports.getMatchMedia = getMatchMedia;
/**
 * Удаляет MediaQueryList.
 *
 * @param queryProp media выражение или кастомный запрос из `mq.json`, например `--mobile`.
 */
function releaseMatchMedia(queryProp) {
    var query = mq_json_1["default"][queryProp] || queryProp;
    refCounters[query] -= 1;
    if (pool[query] && refCounters[query] === 0) {
        delete pool[query];
        delete refCounters[query];
    }
}
exports.releaseMatchMedia = releaseMatchMedia;
/**
 * Возвращает `true`, если есть поддержка `Pointer Events`
 */
function isPointerEventsSupported() {
    return 'PointerEvent' in window || 'msPointerEnabled' in window.navigator;
}
exports.isPointerEventsSupported = isPointerEventsSupported;
/**
 * Возвращает `true`, если есть поддержка `Touch Events`
 */
function isTouchSupported() {
    return ('ontouchstart' in window ||
        window.navigator.maxTouchPoints > 0 ||
        window.navigator.msMaxTouchPoints > 0);
}
exports.isTouchSupported = isTouchSupported;
