{"version":3,"file":"browser.mjs","sources":["../../../src/tools/browser.ts"],"sourcesContent":["import { Type } from './type'\n\nlet UA: string = ''\ntry {\n  UA = navigator?.userAgent.toLowerCase()\n} catch {\n  UA = '?'\n}\n\n/**\n * @see bitrix/js/main/core/src/lib/browser.js\n */\nclass BrowserManager {\n  isOpera(): boolean {\n    return UA.includes('opera')\n  }\n\n  isIE(): boolean {\n    return 'attachEvent' in document && !this.isOpera()\n  }\n\n  isIE6(): boolean {\n    return UA.includes('msie 6')\n  }\n\n  isIE7(): boolean {\n    return UA.includes('msie 7')\n  }\n\n  isIE8(): boolean {\n    return UA.includes('msie 8')\n  }\n\n  isIE9(): boolean {\n    return 'documentMode' in document && ((document?.documentMode as number) >= 9)\n  }\n\n  isIE10(): boolean {\n    return 'documentMode' in document && ((document?.documentMode as number) >= 10)\n  }\n\n  isSafari(): boolean {\n    return UA.includes('safari') && !UA.includes('chrome')\n  }\n\n  isFirefox() {\n    return UA.includes('firefox')\n  }\n\n  isChrome() {\n    return UA.includes('chrome')\n  }\n\n  detectIEVersion() {\n    if (\n      this.isOpera()\n      || this.isSafari()\n      || this.isFirefox()\n      || this.isChrome()\n    ) {\n      return -1\n    }\n\n    let rv = -1\n\n    if (\n      // @ts-expect-error we detect IEVersion ////\n      !!window.MSStream\n      // @ts-expect-error we detect IEVersion ////\n      && !window.ActiveXObject\n      && 'ActiveXObject' in window\n    ) {\n      rv = 11\n    } else if (this.isIE10()) {\n      rv = 10\n    } else if (this.isIE9()) {\n      rv = 9\n    } else if (this.isIE()) {\n      rv = 8\n    }\n\n    if (rv === -1 || rv === 8) {\n      if (navigator.appName === 'Microsoft Internet Explorer') {\n        const re = /MSIE (\\d[.0-9]*)/\n        const res = navigator.userAgent.match(re)\n\n        if (Type.isArrayLike(res) && res.length > 0) {\n          rv = Number.parseFloat(res[1]!)\n        }\n      }\n\n      if (navigator.appName === 'Netscape') {\n        // Alternative check for IE 11\n        rv = 11\n        const re = /Trident\\/.*rv:(\\d[.0-9]*)/\n\n        if (re.exec(navigator.userAgent) != null) {\n          const res = navigator.userAgent.match(re)\n\n          if (Type.isArrayLike(res) && res.length > 0) {\n            rv = Number.parseFloat(res[1]!)\n          }\n        }\n      }\n    }\n\n    return rv\n  }\n\n  isIE11(): boolean {\n    return this.detectIEVersion() >= 11\n  }\n\n  isMac(): boolean {\n    return UA.includes('macintosh')\n  }\n\n  isWin(): boolean {\n    return UA.includes('windows')\n  }\n\n  isLinux(): boolean {\n    return UA.includes('linux') && !this.isAndroid()\n  }\n\n  isAndroid(): boolean {\n    return UA.includes('android')\n  }\n\n  isIPad(): boolean {\n    return UA.includes('ipad;') || (this.isMac() && this.isTouchDevice())\n  }\n\n  isIPhone(): boolean {\n    return UA.includes('iphone;')\n  }\n\n  isIOS(): boolean {\n    return this.isIPad() || this.isIPhone()\n  }\n\n  isMobile(): boolean {\n    return (\n      this.isIPhone()\n      || this.isIPad()\n      || this.isAndroid()\n      || UA.includes('mobile')\n      || UA.includes('touch')\n    )\n  }\n\n  isRetina(): boolean {\n    return (window.devicePixelRatio && window.devicePixelRatio >= 2) === true\n  }\n\n  isTouchDevice(): boolean {\n    return (\n      'ontouchstart' in window\n      || navigator.maxTouchPoints > 0\n    )\n  }\n\n  isDoctype(target: any): boolean {\n    const doc = target || document\n\n    if (doc.compatMode) {\n      return doc.compatMode === 'CSS1Compat'\n    }\n\n    return doc.documentElement && doc.documentElement.clientHeight\n  }\n\n  isLocalStorageSupported(): boolean {\n    try {\n      localStorage.setItem('test', 'test')\n      localStorage.removeItem('test')\n      return true\n    } catch {\n      return false\n    }\n  }\n\n  detectAndroidVersion(): number {\n    const re = /Android (\\d[.0-9]*)/\n\n    if (re.exec(navigator.userAgent) != null) {\n      const res = navigator.userAgent.match(re)\n      if (Type.isArrayLike(res) && res.length > 0) {\n        return Number.parseFloat(res[1]!)\n      }\n    }\n\n    return 0\n  }\n}\n\nexport const Browser = new BrowserManager()\n"],"names":[],"mappings":"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"}