automoby-kit 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +7 -71
  2. package/dist/cjs/Accordion.js +59 -1
  3. package/dist/cjs/Backdrop.js +26 -1
  4. package/dist/cjs/Breadcrumb.js +61 -1
  5. package/dist/cjs/Button.js +48 -1
  6. package/dist/cjs/Chips.js +117 -1
  7. package/dist/cjs/Divider.js +23 -1
  8. package/dist/cjs/Drawer.js +112 -1
  9. package/dist/cjs/Input.js +84 -1
  10. package/dist/cjs/Menu.js +122 -1
  11. package/dist/cjs/Pagination.js +188 -1
  12. package/dist/cjs/RadioGroup.js +73 -1
  13. package/dist/cjs/Tabs.js +54 -1
  14. package/dist/cjs/Typography.js +63 -1
  15. package/dist/cjs/chevron-left-COj1qGVo.js +16 -0
  16. package/dist/{types → cjs}/components/Accordion/Accordion.d.ts +2 -2
  17. package/dist/{types → cjs}/components/Breadcrumb/Breadcrumb.d.ts +2 -2
  18. package/dist/{types → cjs}/components/Chips/Chips.d.ts +5 -5
  19. package/dist/{types → cjs}/components/Drawer/Drawer.d.ts +2 -2
  20. package/dist/{types → cjs}/components/Input/Input.d.ts +4 -4
  21. package/dist/{types → cjs}/components/Input/Input.stories.d.ts +1 -1
  22. package/dist/{types → cjs}/components/Pagination/Pagination.d.ts +2 -2
  23. package/dist/{types → cjs}/components/RadioGroup/RadioGroup.d.ts +2 -2
  24. package/dist/cjs/components/Select/Select.d.ts +17 -0
  25. package/dist/cjs/components/Select/Select.stories.d.ts +104 -0
  26. package/dist/{types → cjs}/components/Tabs/Tabs.d.ts +2 -2
  27. package/dist/{types → cjs}/contexts/MobileContext.d.ts +1 -0
  28. package/dist/cjs/contexts.js +1491 -1
  29. package/dist/cjs/createLucideIcon-BTjFFtDc.js +114 -0
  30. package/dist/cjs/index.d.ts +34 -0
  31. package/dist/cjs/index.js +52 -1
  32. package/dist/cjs/utils.js +9 -1
  33. package/dist/esm/Accordion.js +57 -1
  34. package/dist/esm/Backdrop.js +24 -1
  35. package/dist/esm/Breadcrumb.js +59 -1
  36. package/dist/esm/Button.js +46 -1
  37. package/dist/esm/Chips.js +112 -1
  38. package/dist/esm/Divider.js +21 -1
  39. package/dist/esm/Drawer.js +110 -1
  40. package/dist/esm/Input.js +82 -1
  41. package/dist/esm/Menu.js +120 -1
  42. package/dist/esm/Pagination.js +186 -1
  43. package/dist/esm/RadioGroup.js +71 -1
  44. package/dist/esm/Tabs.js +52 -1
  45. package/dist/esm/Typography.js +60 -1
  46. package/dist/esm/components/Accordion/Accordion.d.ts +25 -0
  47. package/dist/esm/components/Accordion/Accordion.stories.d.ts +175 -0
  48. package/dist/esm/components/Backdrop/Backdrop.d.ts +20 -0
  49. package/dist/esm/components/Backdrop/Backdrop.stories.d.ts +9 -0
  50. package/dist/esm/components/Breadcrumb/Breadcrumb.d.ts +16 -0
  51. package/dist/esm/components/Breadcrumb/Breadcrumb.stories.d.ts +177 -0
  52. package/dist/esm/components/Button/Button.d.ts +13 -0
  53. package/dist/esm/components/Button/Button.stories.d.ts +100 -0
  54. package/dist/esm/components/Chips/Chips.d.ts +37 -0
  55. package/dist/esm/components/Chips/Chips.stories.d.ts +90 -0
  56. package/dist/esm/components/Divider/Divider.d.ts +25 -0
  57. package/dist/esm/components/Divider/Divider.stories.d.ts +88 -0
  58. package/dist/esm/components/Drawer/Drawer.d.ts +16 -0
  59. package/dist/esm/components/Drawer/Drawer.stories.d.ts +128 -0
  60. package/dist/esm/components/Input/Input.d.ts +24 -0
  61. package/dist/esm/components/Input/Input.stories.d.ts +131 -0
  62. package/dist/esm/components/Menu/Menu.d.ts +39 -0
  63. package/dist/esm/components/Menu/Menu.stories.d.ts +89 -0
  64. package/dist/esm/components/Pagination/Pagination.d.ts +12 -0
  65. package/dist/esm/components/Pagination/Pagination.stories.d.ts +76 -0
  66. package/dist/esm/components/RadioGroup/RadioGroup.d.ts +55 -0
  67. package/dist/esm/components/RadioGroup/RadioGroup.stories.d.ts +86 -0
  68. package/dist/esm/components/Select/Select.d.ts +17 -0
  69. package/dist/esm/components/Select/Select.stories.d.ts +104 -0
  70. package/dist/esm/components/Tabs/Tabs.d.ts +43 -0
  71. package/dist/esm/components/Tabs/Tabs.stories.d.ts +66 -0
  72. package/dist/esm/components/Typography/Typography.d.ts +9 -0
  73. package/dist/esm/components/Typography/Typography.stories.d.ts +57 -0
  74. package/dist/esm/contexts/MobileContext.d.ts +13 -0
  75. package/dist/esm/contexts.js +1485 -1
  76. package/dist/esm/index.d.ts +34 -0
  77. package/dist/esm/index.js +37 -1
  78. package/dist/esm/utils/cn.d.ts +2 -0
  79. package/dist/esm/utils.js +7 -1
  80. package/package.json +2 -7
  81. package/dist/cjs/ProtectedComponent.js +0 -1
  82. package/dist/cjs/licensing.js +0 -1
  83. package/dist/esm/ProtectedComponent.js +0 -1
  84. package/dist/esm/licensing.js +0 -1
  85. package/dist/types/Accordion.js +0 -54
  86. package/dist/types/Backdrop.js +0 -24
  87. package/dist/types/Breadcrumb.js +0 -56
  88. package/dist/types/Button.js +0 -46
  89. package/dist/types/Chips.js +0 -109
  90. package/dist/types/Divider.js +0 -21
  91. package/dist/types/Drawer.js +0 -107
  92. package/dist/types/Input.js +0 -78
  93. package/dist/types/Menu.js +0 -120
  94. package/dist/types/Pagination.js +0 -183
  95. package/dist/types/ProtectedComponent.js +0 -33
  96. package/dist/types/RadioGroup.js +0 -68
  97. package/dist/types/Tabs.js +0 -49
  98. package/dist/types/Typography.js +0 -60
  99. package/dist/types/components/ProtectedComponent.d.ts +0 -5
  100. package/dist/types/contexts.js +0 -1478
  101. package/dist/types/index.d.ts +0 -36
  102. package/dist/types/index.js +0 -38
  103. package/dist/types/licensing/LicenseManager.d.ts +0 -41
  104. package/dist/types/licensing/index.d.ts +0 -30
  105. package/dist/types/licensing.js +0 -125
  106. package/dist/types/utils.js +0 -7
  107. /package/dist/{types → cjs}/components/Accordion/Accordion.stories.d.ts +0 -0
  108. /package/dist/{types → cjs}/components/Backdrop/Backdrop.d.ts +0 -0
  109. /package/dist/{types → cjs}/components/Backdrop/Backdrop.stories.d.ts +0 -0
  110. /package/dist/{types → cjs}/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -0
  111. /package/dist/{types → cjs}/components/Button/Button.d.ts +0 -0
  112. /package/dist/{types → cjs}/components/Button/Button.stories.d.ts +0 -0
  113. /package/dist/{types → cjs}/components/Chips/Chips.stories.d.ts +0 -0
  114. /package/dist/{types → cjs}/components/Divider/Divider.d.ts +0 -0
  115. /package/dist/{types → cjs}/components/Divider/Divider.stories.d.ts +0 -0
  116. /package/dist/{types → cjs}/components/Drawer/Drawer.stories.d.ts +0 -0
  117. /package/dist/{types → cjs}/components/Menu/Menu.d.ts +0 -0
  118. /package/dist/{types → cjs}/components/Menu/Menu.stories.d.ts +0 -0
  119. /package/dist/{types → cjs}/components/Pagination/Pagination.stories.d.ts +0 -0
  120. /package/dist/{types → cjs}/components/RadioGroup/RadioGroup.stories.d.ts +0 -0
  121. /package/dist/{types → cjs}/components/Tabs/Tabs.stories.d.ts +0 -0
  122. /package/dist/{types → cjs}/components/Typography/Typography.d.ts +0 -0
  123. /package/dist/{types → cjs}/components/Typography/Typography.stories.d.ts +0 -0
  124. /package/dist/{types → cjs}/utils/cn.d.ts +0 -0
  125. /package/dist/{types → esm}/chevron-left-Ck6O99eF.js +0 -0
  126. /package/dist/{types → esm}/createLucideIcon-D-q73LTT.js +0 -0
@@ -1 +1,1485 @@
1
- "use client";import{jsx as i}from"react/jsx-runtime";import{createContext as e}from"react";var t,o="user-agent",r="",a="function",s="undefined",n="object",w="string",b="browser",d="cpu",l="device",c="engine",u="os",h="result",p="name",m="type",f="vendor",g="version",v="architecture",k="major",x="model",y="console",C="mobile",A="tablet",_="smarttv",S="wearable",I="xr",U="embedded",q="inapp",P="brands",z="formFactors",H="fullVersionList",T="platform",O="platformVersion",D="bitness",M="sec-ch-ua",j=M+"-full-version-list",E=M+"-arch",V=M+"-"+D,B=M+"-form-factors",R=M+"-"+C,W=M+"-"+x,N=M+"-"+T,F=N+"-version",L=[P,H,C,x,T,O,v,z,D],G="Amazon",$="Apple",X="ASUS",Y="BlackBerry",K="Google",Q="Huawei",Z="Lenovo",J="Honor",ii="LG",ei="Microsoft",ti="Motorola",oi="Nvidia",ri="OnePlus",ai="OPPO",si="Samsung",ni="Sharp",wi="Sony",bi="Xiaomi",di="Zebra",li="Chrome",ci="Chromium",ui="Chromecast",hi="Edge",pi="Firefox",mi="Opera",fi="Facebook",gi="Sogou",vi="Mobile ",ki=" Browser",xi="Windows",yi=typeof window!==s&&window.navigator?window.navigator:void 0,Ci=yi&&yi.userAgentData?yi.userAgentData:void 0,enumerize=function(i){for(var e={},t=0;t<i.length;t++)e[i[t].toUpperCase()]=i[t];return e},has=function(i,e){if(typeof i===n&&i.length>0){for(var t in i)if(lowerize(e)==lowerize(i[t]))return!0;return!1}return!!isString(i)&&lowerize(e)==lowerize(i)},isExtensions=function(i,e){for(var t in i)return/^(browser|cpu|device|engine|os)$/.test(t)||!!e&&isExtensions(i[t])},isString=function(i){return typeof i===w},itemListToArray=function(i){if(i){for(var e=[],t=strip(/\\?\"/g,i).split(","),o=0;o<t.length;o++)if(t[o].indexOf(";")>-1){var r=trim(t[o]).split(";v=");e[o]={brand:r[0],version:r[1]}}else e[o]=trim(t[o]);return e}},lowerize=function(i){return isString(i)?i.toLowerCase():i},majorize=function(i){return isString(i)?strip(/[^\d\.]/g,i).split(".")[0]:void 0},setProps=function(i){for(var e in i){var t=i[e];typeof t==n&&2==t.length?this[t[0]]=t[1]:this[t]=void 0}return this},strip=function(i,e){return isString(e)?e.replace(i,r):e},stripQuotes=function(i){return strip(/\\?\"/g,i)},trim=function(i,e){if(isString(i))return i=strip(/^\s\s*/,i),typeof e===s?i:i.substring(0,500)},rgxMapper=function(i,e){if(i&&e)for(var t,o,r,s,w,b,d=0;d<e.length&&!w;){var l=e[d],c=e[d+1];for(t=o=0;t<l.length&&!w&&l[t];)if(w=l[t++].exec(i))for(r=0;r<c.length;r++)b=w[++o],typeof(s=c[r])===n&&s.length>0?2===s.length?typeof s[1]==a?this[s[0]]=s[1].call(this,b):this[s[0]]=s[1]:s.length>=3&&(typeof s[1]!==a||s[1].exec&&s[1].test?3==s.length?this[s[0]]=b?b.replace(s[1],s[2]):void 0:4==s.length?this[s[0]]=b?s[3].call(this,b.replace(s[1],s[2])):void 0:s.length>4&&(this[s[0]]=b?s[3].apply(this,[b.replace(s[1],s[2])].concat(s.slice(4))):void 0):s.length>3?this[s[0]]=b?s[1].apply(this,s.slice(2)):void 0:this[s[0]]=b?s[1].call(this,b,s[2]):void 0):this[s]=b||void 0;d+=2}},strMapper=function(i,e){for(var t in e)if(typeof e[t]===n&&e[t].length>0){for(var o=0;o<e[t].length;o++)if(has(e[t][o],i))return"?"===t?void 0:t}else if(has(e[t],i))return"?"===t?void 0:t;return e.hasOwnProperty("*")?e["*"]:i},Ai={ME:"4.90","NT 3.51":"3.51","NT 4.0":"4.0",2e3:["5.0","5.01"],XP:["5.1","5.2"],Vista:"6.0",7:"6.1",8:"6.2",8.1:"6.3",10:["6.4","10.0"],NT:""},_i={embedded:"Automotive",mobile:"Mobile",tablet:["Tablet","EInk"],smarttv:"TV",wearable:"Watch",xr:["VR","XR"],"?":["Desktop","Unknown"],"*":void 0},Si={Chrome:"Google Chrome",Edge:"Microsoft Edge","Edge WebView2":"Microsoft Edge WebView2","Chrome WebView":"Android WebView","Chrome Headless":"HeadlessChrome","Huawei Browser":"HuaweiBrowser","MIUI Browser":"Miui Browser","Opera Mobi":"OperaMobile",Yandex:"YaBrowser"},Ii={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[g,[p,vi+"Chrome"]],[/webview.+edge\/([\w\.]+)/i],[g,[p,hi+" WebView"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[g,[p,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[p,g],[/opios[\/ ]+([\w\.]+)/i],[g,[p,mi+" Mini"]],[/\bop(?:rg)?x\/([\w\.]+)/i],[g,[p,mi+" GX"]],[/\bopr\/([\w\.]+)/i],[g,[p,mi]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[g,[p,"Baidu"]],[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],[g,[p,"Maxthon"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,/(heytap|ovi|115|surf)browser\/([\d\.]+)/i,/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i],[p,g],[/quark(?:pc)?\/([-\w\.]+)/i],[g,[p,"Quark"]],[/\bddg\/([\w\.]+)/i],[g,[p,"DuckDuckGo"]],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[g,[p,"UCBrowser"]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[g,[p,"WeChat"]],[/konqueror\/([\w\.]+)/i],[g,[p,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[g,[p,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[g,[p,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[g,[p,"Smart "+Z+ki]],[/(avast|avg)\/([\w\.]+)/i],[[p,/(.+)/,"$1 Secure"+ki],g],[/\bfocus\/([\w\.]+)/i],[g,[p,pi+" Focus"]],[/\bopt\/([\w\.]+)/i],[g,[p,mi+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[g,[p,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[g,[p,"Dolphin"]],[/coast\/([\w\.]+)/i],[g,[p,mi+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[g,[p,"MIUI"+ki]],[/fxios\/([\w\.-]+)/i],[g,[p,vi+pi]],[/\bqihoobrowser\/?([\w\.]*)/i],[g,[p,"360"]],[/\b(qq)\/([\w\.]+)/i],[[p,/(.+)/,"$1Browser"],g],[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],[[p,/(.+)/,"$1"+ki],g],[/samsungbrowser\/([\w\.]+)/i],[g,[p,si+" Internet"]],[/metasr[\/ ]?([\d\.]+)/i],[g,[p,gi+" Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[p,gi+" Mobile"],g],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i],[p,g],[/(lbbrowser|rekonq)/i],[p],[/ome\/([\w\.]+) \w* ?(iron) saf/i,/ome\/([\w\.]+).+qihu (360)[es]e/i],[g,p],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[p,fi],g,[m,q]],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/(daum)apps[\/ ]([\w\.]+)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i],[p,g,[m,q]],[/\bgsa\/([\w\.]+) .*safari\//i],[g,[p,"GSA"],[m,q]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[g,[p,"TikTok"],[m,q]],[/\[(linkedin)app\]/i],[p,[m,q]],[/(chromium)[\/ ]([-\w\.]+)/i],[p,g],[/headlesschrome(?:\/([\w\.]+)| )/i],[g,[p,li+" Headless"]],[/wv\).+chrome\/([\w\.]+).+edgw\//i],[g,[p,hi+" WebView2"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[p,li+" WebView"],g],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[g,[p,"Android"+ki]],[/chrome\/([\w\.]+) mobile/i],[g,[p,vi+"Chrome"]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[p,g],[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],[g,[p,vi+"Safari"]],[/iphone .*mobile(?:\/\w+ | ?)safari/i],[[p,vi+"Safari"]],[/version\/([\w\.\,]+) .*(safari)/i],[g,p],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[p,[g,"1"]],[/(webkit|khtml)\/([\w\.]+)/i],[p,g],[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],[[p,vi+pi],g],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[p,"Netscape"],g],[/(wolvic|librewolf)\/([\w\.]+)/i],[p,g],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[g,[p,pi+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/\b(links) \(([\w\.]+)/i],[p,[g,/_/g,"."]],[/(cobalt)\/([\w\.]+)/i],[p,[g,/[^\d\.]+./,r]]],cpu:[[/\b((amd|x|x86[-_]?|wow|win)64)\b/i],[[v,"amd64"]],[/(ia32(?=;))/i,/\b((i[346]|x)86)(pc)?\b/i],[[v,"ia32"]],[/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],[[v,"arm64"]],[/\b(arm(v[67])?ht?n?[fl]p?)\b/i],[[v,"armhf"]],[/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],[[v,"arm"]],[/((ppc|powerpc)(64)?)( mac|;|\))/i],[[v,/ower/,r,lowerize]],[/ sun4\w[;\)]/i],[[v,"sparc"]],[/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i],[[v,lowerize]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[x,[f,si],[m,A]],[/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,/sec-(sgh\w+)/i],[x,[f,si],[m,C]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[x,[f,$],[m,C]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[x,[f,$],[m,A]],[/(macintosh);/i],[x,[f,$]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[x,[f,ni],[m,C]],[/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i],[x,[f,J],[m,A]],[/honor([-\w ]+)[;\)]/i],[x,[f,J],[m,C]],[/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i],[x,[f,Q],[m,A]],[/(?:huawei)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[x,[f,Q],[m,C]],[/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i],[[x,/_/g," "],[f,bi],[m,A]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i,/ ([\w ]+) miui\/v?\d/i],[[x,/_/g," "],[f,bi],[m,C]],[/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-k]\w[1m]10)\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[x,[f,ri],[m,C]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[x,[f,ai],[m,C]],[/\b(opd2(\d{3}a?))(?: bui|\))/i],[x,[f,strMapper,{OnePlus:["203","304","403","404","413","415"],"*":ai}],[m,A]],[/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i],[x,[f,"BLU"],[m,C]],[/; vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[x,[f,"Vivo"],[m,C]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[x,[f,"Realme"],[m,C]],[/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i],[x,[f,Z],[m,A]],[/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i],[x,[f,Z],[m,C]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i],[x,[f,ti],[m,C]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[x,[f,ti],[m,A]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[x,[f,ii],[m,A]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,/\blg-?([\d\w]+) bui/i],[x,[f,ii],[m,C]],[/(nokia) (t[12][01])/i],[f,x,[m,A]],[/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,/nokia[-_ ]?(([-\w\. ]*))/i],[[x,/_/g," "],[m,C],[f,"Nokia"]],[/(pixel (c|tablet))\b/i],[x,[f,K],[m,A]],[/droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i],[x,[f,K],[m,C]],[/(google) (pixelbook( go)?)/i],[f,x],[/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[x,[f,wi],[m,C]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[x,"Xperia Tablet"],[f,wi],[m,A]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[x,[f,G],[m,A]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[x,/(.+)/g,"Fire Phone $1"],[f,G],[m,C]],[/(playbook);[-\w\),; ]+(rim)/i],[x,f,[m,A]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[x,[f,Y],[m,C]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[x,[f,X],[m,A]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[x,[f,X],[m,C]],[/(nexus 9)/i],[x,[f,"HTC"],[m,A]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[f,[x,/_/g," "],[m,C]],[/tcl (xess p17aa)/i,/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i],[x,[f,"TCL"],[m,A]],[/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i],[x,[f,"TCL"],[m,C]],[/(itel) ((\w+))/i],[[f,lowerize],x,[m,strMapper,{tablet:["p10001l","w7001"],"*":"mobile"}]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[x,[f,"Acer"],[m,A]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[x,[f,"Meizu"],[m,C]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[x,[f,"Ulefone"],[m,C]],[/; (energy ?\w+)(?: bui|\))/i,/; energizer ([\w ]+)(?: bui|\))/i],[x,[f,"Energizer"],[m,C]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],[x,[f,"Cat"],[m,C]],[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],[x,[f,"Smartfren"],[m,C]],[/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i],[x,[f,"Nothing"],[m,C]],[/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i],[x,[f,"Archos"],[m,A]],[/archos ([\w ]+)( b|\))/i,/; (ac[3-6]\d\w{2,8})( b|\))/i],[x,[f,"Archos"],[m,C]],[/; (n159v)/i],[x,[f,"HMD"],[m,C]],[/(imo) (tab \w+)/i,/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i],[f,x,[m,A]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,/; (blu|hmd|imo|infinix|lava|oneplus|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,/(hp) ([\w ]+\w)/i,/(microsoft); (lumia[\w ]+)/i,/(oppo) ?([\w ]+) bui/i],[f,x,[m,C]],[/(kobo)\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i],[f,x,[m,A]],[/(surface duo)/i],[x,[f,ei],[m,A]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[x,[f,"Fairphone"],[m,C]],[/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],[x,[f,oi],[m,A]],[/(sprint) (\w+)/i],[f,x,[m,C]],[/(kin\.[onetw]{3})/i],[[x,/\./g," "],[f,ei],[m,C]],[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[x,[f,di],[m,A]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[x,[f,di],[m,C]],[/smart-tv.+(samsung)/i],[f,[m,_]],[/hbbtv.+maple;(\d+)/i],[[x,/^/,"SmartTV"],[f,si],[m,_]],[/(vizio)(?: |.+model\/)(\w+-\w+)/i,/tcast.+(lg)e?. ([-\w]+)/i],[f,x,[m,_]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[f,ii],[m,_]],[/(apple) ?tv/i],[f,[x,$+" TV"],[m,_]],[/crkey.*devicetype\/chromecast/i],[[x,ui+" Third Generation"],[f,K],[m,_]],[/crkey.*devicetype\/([^/]*)/i],[[x,/^/,"Chromecast "],[f,K],[m,_]],[/fuchsia.*crkey/i],[[x,ui+" Nest Hub"],[f,K],[m,_]],[/crkey/i],[[x,ui],[f,K],[m,_]],[/(portaltv)/i],[x,[f,fi],[m,_]],[/droid.+aft(\w+)( bui|\))/i],[x,[f,G],[m,_]],[/(shield \w+ tv)/i],[x,[f,oi],[m,_]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[x,[f,ni],[m,_]],[/(bravia[\w ]+)( bui|\))/i],[x,[f,wi],[m,_]],[/(mi(tv|box)-?\w+) bui/i],[x,[f,bi],[m,_]],[/Hbbtv.*(technisat) (.*);/i],[f,x,[m,_]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[f,/.+\/(\w+)/,"$1",strMapper,{LG:"lge"}],[x,trim],[m,_]],[/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i],[x,[m,_]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:|large screen[\w ]+safari)\b/i],[[m,_]],[/(playstation \w+)/i],[x,[f,wi],[m,y]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[x,[f,ei],[m,y]],[/(ouya)/i,/(nintendo) (\w+)/i,/(retroid) (pocket ([^\)]+))/i],[f,x,[m,y]],[/droid.+; (shield)( bui|\))/i],[x,[f,oi],[m,y]],[/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],[x,[f,si],[m,S]],[/((pebble))app/i,/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i],[f,x,[m,S]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[x,[f,ai],[m,S]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[x,[f,$],[m,S]],[/(opwwe\d{3})/i],[x,[f,ri],[m,S]],[/(moto 360)/i],[x,[f,ti],[m,S]],[/(smartwatch 3)/i],[x,[f,wi],[m,S]],[/(g watch r)/i],[x,[f,ii],[m,S]],[/droid.+; (wt63?0{2,3})\)/i],[x,[f,di],[m,S]],[/droid.+; (glass) \d/i],[x,[f,K],[m,I]],[/(pico) (4|neo3(?: link|pro)?)/i],[f,x,[m,I]],[/(quest( \d| pro)?s?).+vr/i],[x,[f,fi],[m,I]],[/mobile vr; rv.+firefox/i],[[m,I]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[f,[m,U]],[/(aeobc)\b/i],[x,[f,G],[m,U]],[/(homepod).+mac os/i],[x,[f,$],[m,U]],[/windows iot/i],[[m,U]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i],[x,[m,strMapper,{mobile:"Mobile",xr:"VR","*":A}]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[m,A]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[m,C]],[/droid .+?; ([\w\. -]+)( bui|\))/i],[x,[f,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[g,[p,hi+"HTML"]],[/(arkweb)\/([\w\.]+)/i],[p,g],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[g,[p,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[p,g],[/ladybird\//i],[[p,"LibWeb"]],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[g,p]],os:[[/(windows nt) (6\.[23]); arm/i],[[p,/N/,"R"],[g,strMapper,Ai]],[/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i],[p,g],[/windows nt ?([\d\.\)]*)(?!.+xbox)/i,/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i],[[g,/(;|\))/g,"",strMapper,Ai],[p,xi]],[/(windows ce)\/?([\d\.]*)/i],[p,g],[/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[g,/_/g,"."],[p,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i],[[p,"macOS"],[g,/_/g,"."]],[/android ([\d\.]+).*crkey/i],[g,[p,ui+" Android"]],[/fuchsia.*crkey\/([\d\.]+)/i],[g,[p,ui+" Fuchsia"]],[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],[g,[p,ui+" SmartSpeaker"]],[/linux.*crkey\/([\d\.]+)/i],[g,[p,ui+" Linux"]],[/crkey\/([\d\.]+)/i],[g,[p,ui]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[g,p],[/(ubuntu) ([\w\.]+) like android/i],[[p,/(.+)/,"$1 Touch"],g],[/(harmonyos)[\/ ]?([\d\.]*)/i,/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i],[p,g],[/\(bb(10);/i],[g,[p,Y]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],[g,[p,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[g,[p,pi+" OS"]],[/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i],[g,[p,"webOS"]],[/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i],[[g,strMapper,{25:"120",24:"108",23:"94",22:"87",6:"79",5:"68",4:"53",3:"38",2:"538",1:"537","*":"TV"}],[p,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[g,[p,"watchOS"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[p,"Chrome OS"],g],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) (\w+)/i,/(xbox); +xbox ([^\);]+)/i,/(pico) .+os([\w\.]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/linux.+(mint)[\/\(\) ]?([\w\.]*)/i,/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/\b(aix)[; ]([1-9\.]{0,4})/i,/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) ?(r\d)?/i],[p,g],[/(sunos) ?([\d\.]*)/i],[[p,"Solaris"],g],[/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[p,g]]},Ui=(setProps.call((t={init:{},isIgnore:{},isIgnoreRgx:{},toString:{}}).init,[[b,[p,g,k,m]],[d,[v]],[l,[m,x,f]],[c,[p,g]],[u,[p,g]]]),setProps.call(t.isIgnore,[[b,[g,k]],[c,[g]],[u,[g]]]),setProps.call(t.isIgnoreRgx,[[b,/ ?browser$/i],[u,/ ?os$/i]]),setProps.call(t.toString,[[b,[p,g]],[d,[v]],[l,[f,x]],[c,[p,g]],[u,[p,g]]]),t),createIData=function(i,e){var t=Ui.init[e],o=Ui.isIgnore[e]||0,a=Ui.isIgnoreRgx[e]||0,n=Ui.toString[e]||0;function IData(){setProps.call(this,t)}return IData.prototype.getItem=function(){return i},IData.prototype.withClientHints=function(){return Ci?Ci.getHighEntropyValues(L).then(function(e){return i.setCH(new UACHData(e,!1)).parseCH().get()}):i.parseCH().get()},IData.prototype.withFeatureCheck=function(){return i.detectFeature().get()},e!=h&&(IData.prototype.is=function(i){var e=!1;for(var t in this)if(this.hasOwnProperty(t)&&!has(o,t)&&lowerize(a?strip(a,this[t]):this[t])==lowerize(a?strip(a,i):i)){if(e=!0,i!=s)break}else if(i==s&&e){e=!e;break}return e},IData.prototype.toString=function(){var i=r;for(var e in n)typeof this[n[e]]!==s&&(i+=(i?" ":r)+this[n[e]]);return i||s}),Ci||(IData.prototype.then=function(i){var e=this,IDataResolve=function(){for(var i in e)e.hasOwnProperty(i)&&(this[i]=e[i])};IDataResolve.prototype={is:IData.prototype.is,toString:IData.prototype.toString};var t=new IDataResolve;return i(t),t}),new IData};function UACHData(i,e){if(i=i||{},setProps.call(this,L),e)setProps.call(this,[[P,itemListToArray(i[M])],[H,itemListToArray(i[j])],[C,/\?1/.test(i[R])],[x,stripQuotes(i[W])],[T,stripQuotes(i[N])],[O,stripQuotes(i[F])],[v,stripQuotes(i[E])],[z,itemListToArray(i[B])],[D,stripQuotes(i[V])]]);else for(var t in i)this.hasOwnProperty(t)&&typeof i[t]!==s&&(this[t]=i[t])}function UAItem(i,e,t,o){return this.get=function(i){return i?this.data.hasOwnProperty(i)?this.data[i]:void 0:this.data},this.set=function(i,e){return this.data[i]=e,this},this.setCH=function(i){return this.uaCH=i,this},this.detectFeature=function(){if(yi&&yi.userAgent==this.ua)switch(this.itemType){case b:yi.brave&&typeof yi.brave.isBrave==a&&this.set(p,"Brave");break;case l:!this.get(m)&&Ci&&Ci[C]&&this.set(m,C),"Macintosh"==this.get(x)&&yi&&typeof yi.standalone!==s&&yi.maxTouchPoints&&yi.maxTouchPoints>2&&this.set(x,"iPad").set(m,A);break;case u:!this.get(p)&&Ci&&Ci[T]&&this.set(p,Ci[T]);break;case h:var i=this.data,detect=function(e){return i[e].getItem().detectFeature().get()};this.set(b,detect(b)).set(d,detect(d)).set(l,detect(l)).set(c,detect(c)).set(u,detect(u))}return this},this.parseUA=function(){return this.itemType!=h&&rgxMapper.call(this.data,this.ua,this.rgxMap),this.itemType==b&&this.set(k,majorize(this.get(g))),this},this.parseCH=function(){var i=this.uaCH,e=this.rgxMap;switch(this.itemType){case b:case c:var t,o=i[H]||i[P];if(o)for(var r in o){var a=o[r].brand||o[r],s=o[r].version;this.itemType==b&&!/not.a.brand/i.test(a)&&(!t||/Chrom/.test(t)&&a!=ci||t==hi&&/WebView2/.test(a))&&(a=strMapper(a,Si),(t=this.get(p))&&!/Chrom/.test(t)&&/Chrom/.test(a)||this.set(p,a).set(g,s).set(k,majorize(s)),t=a),this.itemType==c&&a==ci&&this.set(g,s)}break;case d:var n=i[v];n&&(n&&"64"==i[D]&&(n+="64"),rgxMapper.call(this.data,n+";",e));break;case l:if(i[C]&&this.set(m,C),i[x]&&(this.set(x,i[x]),!this.get(m)||!this.get(f))){var w={};rgxMapper.call(w,"droid 9; "+i[x]+")",e),!this.get(m)&&w.type&&this.set(m,w.type),!this.get(f)&&w.vendor&&this.set(f,w.vendor)}if(i[z]){var y;if("string"!=typeof i[z])for(var A=0;!y&&A<i[z].length;)y=strMapper(i[z][A++],_i);else y=strMapper(i[z],_i);this.set(m,y)}break;case u:var _=i[T];if(_){var S=i[O];_==xi&&(S=parseInt(majorize(S),10)>=13?"11":"10"),this.set(p,_).set(g,S)}this.get(p)==xi&&"Xbox"==i[x]&&this.set(p,"Xbox").set(g,void 0);break;case h:var I=this.data,parse=function(e){return I[e].getItem().setCH(i).parseCH().get()};this.set(b,parse(b)).set(d,parse(d)).set(l,parse(l)).set(c,parse(c)).set(u,parse(u))}return this},setProps.call(this,[["itemType",i],["ua",e],["uaCH",o],["rgxMap",t],["data",createIData(this,i)]]),this}function UAParser(i,e,t){if(typeof i===n?(isExtensions(i,!0)?(typeof e===n&&(t=e),e=i):(t=i,e=void 0),i=void 0):typeof i!==w||isExtensions(e,!0)||(t=e,e=void 0),t&&typeof t.append===a){var s={};t.forEach(function(i,e){s[e]=i}),t=s}if(!(this instanceof UAParser))return new UAParser(i,e,t).getResult();var p=typeof i===w?i:t&&t[o]?t[o]:yi&&yi.userAgent?yi.userAgent:r,m=new UACHData(t,!0),f=e?function(i,e){var t={},o=e;if(!isExtensions(e))for(var r in o={},e)for(var a in e[r])o[a]=e[r][a].concat(o[a]?o[a]:[]);for(var s in i)t[s]=o[s]&&o[s].length%2==0?o[s].concat(i[s]):i[s];return t}(Ii,e):Ii,createItemFunc=function(i){return i==h?function(){return new UAItem(i,p,f,m).set("ua",p).set(b,this.getBrowser()).set(d,this.getCPU()).set(l,this.getDevice()).set(c,this.getEngine()).set(u,this.getOS()).get()}:function(){return new UAItem(i,p,f[i],m).parseUA().get()}};return setProps.call(this,[["getBrowser",createItemFunc(b)],["getCPU",createItemFunc(d)],["getDevice",createItemFunc(l)],["getEngine",createItemFunc(c)],["getOS",createItemFunc(u)],["getResult",createItemFunc(h)],["getUA",function(){return p}],["setUA",function(i){return isString(i)&&(p=i.length>500?trim(i,500):i),this}]]).setUA(p),this}UAParser.VERSION="2.0.4",UAParser.BROWSER=enumerize([p,g,k,m]),UAParser.CPU=enumerize([v]),UAParser.DEVICE=enumerize([x,f,m,y,C,_,A,S,U]),UAParser.ENGINE=UAParser.OS=enumerize([p,g]);const qi=e(void 0),MobileProvider=({userAgent:e,children:t})=>{const o=(i=>{const e=new UAParser;e.setUA(i);const t=e.getDevice();return"mobile"===t.type||"tablet"===t.type})(e),r={isMobile:o,userAgent:e};return i(qi.Provider,{value:r,children:t})};export{MobileProvider,qi as default};
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useContext } from 'react';
3
+
4
+ // Generated ESM version of ua-parser-js
5
+ // DO NOT EDIT THIS FILE!
6
+ // Source: /src/main/ua-parser.js
7
+
8
+ /////////////////////////////////////////////////////////////////////////////////
9
+ /* UAParser.js v2.0.4
10
+ Copyright © 2012-2025 Faisal Salman <f@faisalman.com>
11
+ AGPLv3 License *//*
12
+ Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
13
+ Supports browser & node.js environment.
14
+ Demo : https://uaparser.dev
15
+ Source : https://github.com/faisalman/ua-parser-js */
16
+ /////////////////////////////////////////////////////////////////////////////////
17
+
18
+ /* jshint esversion: 6 */
19
+ /* globals window */
20
+
21
+
22
+
23
+ //////////////
24
+ // Constants
25
+ /////////////
26
+
27
+ var LIBVERSION = '2.0.4',
28
+ UA_MAX_LENGTH = 500,
29
+ USER_AGENT = 'user-agent',
30
+ EMPTY = '',
31
+ UNKNOWN = '?',
32
+
33
+ // typeof
34
+ FUNC_TYPE = 'function',
35
+ UNDEF_TYPE = 'undefined',
36
+ OBJ_TYPE = 'object',
37
+ STR_TYPE = 'string',
38
+
39
+ // properties
40
+ UA_BROWSER = 'browser',
41
+ UA_CPU = 'cpu',
42
+ UA_DEVICE = 'device',
43
+ UA_ENGINE = 'engine',
44
+ UA_OS = 'os',
45
+ UA_RESULT = 'result',
46
+
47
+ NAME = 'name',
48
+ TYPE = 'type',
49
+ VENDOR = 'vendor',
50
+ VERSION = 'version',
51
+ ARCHITECTURE= 'architecture',
52
+ MAJOR = 'major',
53
+ MODEL = 'model',
54
+
55
+ // device types
56
+ CONSOLE = 'console',
57
+ MOBILE = 'mobile',
58
+ TABLET = 'tablet',
59
+ SMARTTV = 'smarttv',
60
+ WEARABLE = 'wearable',
61
+ XR = 'xr',
62
+ EMBEDDED = 'embedded',
63
+
64
+ // browser types
65
+ INAPP = 'inapp',
66
+
67
+ // client hints
68
+ BRANDS = 'brands',
69
+ FORMFACTORS = 'formFactors',
70
+ FULLVERLIST = 'fullVersionList',
71
+ PLATFORM = 'platform',
72
+ PLATFORMVER = 'platformVersion',
73
+ BITNESS = 'bitness',
74
+ CH_HEADER = 'sec-ch-ua',
75
+ CH_HEADER_FULL_VER_LIST = CH_HEADER + '-full-version-list',
76
+ CH_HEADER_ARCH = CH_HEADER + '-arch',
77
+ CH_HEADER_BITNESS = CH_HEADER + '-' + BITNESS,
78
+ CH_HEADER_FORM_FACTORS = CH_HEADER + '-form-factors',
79
+ CH_HEADER_MOBILE = CH_HEADER + '-' + MOBILE,
80
+ CH_HEADER_MODEL = CH_HEADER + '-' + MODEL,
81
+ CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
82
+ CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
83
+ CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
84
+
85
+ // device vendors
86
+ AMAZON = 'Amazon',
87
+ APPLE = 'Apple',
88
+ ASUS = 'ASUS',
89
+ BLACKBERRY = 'BlackBerry',
90
+ GOOGLE = 'Google',
91
+ HUAWEI = 'Huawei',
92
+ LENOVO = 'Lenovo',
93
+ HONOR = 'Honor',
94
+ LG = 'LG',
95
+ MICROSOFT = 'Microsoft',
96
+ MOTOROLA = 'Motorola',
97
+ NVIDIA = 'Nvidia',
98
+ ONEPLUS = 'OnePlus',
99
+ OPPO = 'OPPO',
100
+ SAMSUNG = 'Samsung',
101
+ SHARP = 'Sharp',
102
+ SONY = 'Sony',
103
+ XIAOMI = 'Xiaomi',
104
+ ZEBRA = 'Zebra',
105
+
106
+ // browsers
107
+ CHROME = 'Chrome',
108
+ CHROMIUM = 'Chromium',
109
+ CHROMECAST = 'Chromecast',
110
+ EDGE = 'Edge',
111
+ FIREFOX = 'Firefox',
112
+ OPERA = 'Opera',
113
+ FACEBOOK = 'Facebook',
114
+ SOGOU = 'Sogou',
115
+
116
+ PREFIX_MOBILE = 'Mobile ',
117
+ SUFFIX_BROWSER = ' Browser',
118
+
119
+ // os
120
+ WINDOWS = 'Windows';
121
+
122
+ var isWindow = typeof window !== UNDEF_TYPE,
123
+ NAVIGATOR = (isWindow && window.navigator) ?
124
+ window.navigator :
125
+ undefined,
126
+ NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ?
127
+ NAVIGATOR.userAgentData :
128
+ undefined;
129
+
130
+ ///////////
131
+ // Helper
132
+ //////////
133
+
134
+ var extend = function (defaultRgx, extensions) {
135
+ var mergedRgx = {};
136
+ var extraRgx = extensions;
137
+ if (!isExtensions(extensions)) {
138
+ extraRgx = {};
139
+ for (var i in extensions) {
140
+ for (var j in extensions[i]) {
141
+ extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);
142
+ }
143
+ }
144
+ }
145
+ for (var k in defaultRgx) {
146
+ mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];
147
+ }
148
+ return mergedRgx;
149
+ },
150
+ enumerize = function (arr) {
151
+ var enums = {};
152
+ for (var i=0; i<arr.length; i++) {
153
+ enums[arr[i].toUpperCase()] = arr[i];
154
+ }
155
+ return enums;
156
+ },
157
+ has = function (str1, str2) {
158
+ if (typeof str1 === OBJ_TYPE && str1.length > 0) {
159
+ for (var i in str1) {
160
+ if (lowerize(str2) == lowerize(str1[i])) return true;
161
+ }
162
+ return false;
163
+ }
164
+ return isString(str1) ? lowerize(str2) == lowerize(str1) : false;
165
+ },
166
+ isExtensions = function (obj, deep) {
167
+ for (var prop in obj) {
168
+ return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
169
+ }
170
+ },
171
+ isString = function (val) {
172
+ return typeof val === STR_TYPE;
173
+ },
174
+ itemListToArray = function (header) {
175
+ if (!header) return undefined;
176
+ var arr = [];
177
+ var tokens = strip(/\\?\"/g, header).split(',');
178
+ for (var i = 0; i < tokens.length; i++) {
179
+ if (tokens[i].indexOf(';') > -1) {
180
+ var token = trim(tokens[i]).split(';v=');
181
+ arr[i] = { brand : token[0], version : token[1] };
182
+ } else {
183
+ arr[i] = trim(tokens[i]);
184
+ }
185
+ }
186
+ return arr;
187
+ },
188
+ lowerize = function (str) {
189
+ return isString(str) ? str.toLowerCase() : str;
190
+ },
191
+ majorize = function (version) {
192
+ return isString(version) ? strip(/[^\d\.]/g, version).split('.')[0] : undefined;
193
+ },
194
+ setProps = function (arr) {
195
+ for (var i in arr) {
196
+ var propName = arr[i];
197
+ if (typeof propName == OBJ_TYPE && propName.length == 2) {
198
+ this[propName[0]] = propName[1];
199
+ } else {
200
+ this[propName] = undefined;
201
+ }
202
+ }
203
+ return this;
204
+ },
205
+ strip = function (pattern, str) {
206
+ return isString(str) ? str.replace(pattern, EMPTY) : str;
207
+ },
208
+ stripQuotes = function (str) {
209
+ return strip(/\\?\"/g, str);
210
+ },
211
+ trim = function (str, len) {
212
+ if (isString(str)) {
213
+ str = strip(/^\s\s*/, str);
214
+ return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
215
+ }
216
+ };
217
+
218
+ ///////////////
219
+ // Map helper
220
+ //////////////
221
+
222
+ var rgxMapper = function (ua, arrays) {
223
+
224
+ if(!ua || !arrays) return;
225
+
226
+ var i = 0, j, k, p, q, matches, match;
227
+
228
+ // loop through all regexes maps
229
+ while (i < arrays.length && !matches) {
230
+
231
+ var regex = arrays[i], // even sequence (0,2,4,..)
232
+ props = arrays[i + 1]; // odd sequence (1,3,5,..)
233
+ j = k = 0;
234
+
235
+ // try matching uastring with regexes
236
+ while (j < regex.length && !matches) {
237
+
238
+ if (!regex[j]) { break; }
239
+ matches = regex[j++].exec(ua);
240
+
241
+ if (!!matches) {
242
+ for (p = 0; p < props.length; p++) {
243
+ match = matches[++k];
244
+ q = props[p];
245
+ // check if given property is actually array
246
+ if (typeof q === OBJ_TYPE && q.length > 0) {
247
+ if (q.length === 2) {
248
+ if (typeof q[1] == FUNC_TYPE) {
249
+ // assign modified match
250
+ this[q[0]] = q[1].call(this, match);
251
+ } else {
252
+ // assign given value, ignore regex match
253
+ this[q[0]] = q[1];
254
+ }
255
+ } else if (q.length >= 3) {
256
+ // Check whether q[1] FUNCTION or REGEX
257
+ if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
258
+ if (q.length > 3) {
259
+ this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;
260
+ } else {
261
+ // call function (usually string mapper)
262
+ this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
263
+ }
264
+ } else {
265
+ if (q.length == 3) {
266
+ // sanitize match using given regex
267
+ this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
268
+ } else if (q.length == 4) {
269
+ this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;
270
+ } else if (q.length > 4) {
271
+ this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;
272
+ }
273
+ }
274
+ }
275
+ } else {
276
+ this[q] = match ? match : undefined;
277
+ }
278
+ }
279
+ }
280
+ }
281
+ i += 2;
282
+ }
283
+ },
284
+
285
+ strMapper = function (str, map) {
286
+
287
+ for (var i in map) {
288
+ // check if current value is array
289
+ if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
290
+ for (var j = 0; j < map[i].length; j++) {
291
+ if (has(map[i][j], str)) {
292
+ return (i === UNKNOWN) ? undefined : i;
293
+ }
294
+ }
295
+ } else if (has(map[i], str)) {
296
+ return (i === UNKNOWN) ? undefined : i;
297
+ }
298
+ }
299
+ return map.hasOwnProperty('*') ? map['*'] : str;
300
+ };
301
+
302
+ ///////////////
303
+ // String map
304
+ //////////////
305
+
306
+ var windowsVersionMap = {
307
+ 'ME' : '4.90',
308
+ 'NT 3.51': '3.51',
309
+ 'NT 4.0': '4.0',
310
+ '2000' : ['5.0', '5.01'],
311
+ 'XP' : ['5.1', '5.2'],
312
+ 'Vista' : '6.0',
313
+ '7' : '6.1',
314
+ '8' : '6.2',
315
+ '8.1' : '6.3',
316
+ '10' : ['6.4', '10.0'],
317
+ 'NT' : ''
318
+ },
319
+
320
+ formFactorsMap = {
321
+ 'embedded' : 'Automotive',
322
+ 'mobile' : 'Mobile',
323
+ 'tablet' : ['Tablet', 'EInk'],
324
+ 'smarttv' : 'TV',
325
+ 'wearable' : 'Watch',
326
+ 'xr' : ['VR', 'XR'],
327
+ '?' : ['Desktop', 'Unknown'],
328
+ '*' : undefined
329
+ },
330
+
331
+ browserHintsMap = {
332
+ 'Chrome' : 'Google Chrome',
333
+ 'Edge' : 'Microsoft Edge',
334
+ 'Edge WebView2' : 'Microsoft Edge WebView2',
335
+ 'Chrome WebView': 'Android WebView',
336
+ 'Chrome Headless':'HeadlessChrome',
337
+ 'Huawei Browser': 'HuaweiBrowser',
338
+ 'MIUI Browser' : 'Miui Browser',
339
+ 'Opera Mobi' : 'OperaMobile',
340
+ 'Yandex' : 'YaBrowser'
341
+ };
342
+
343
+ //////////////
344
+ // Regex map
345
+ /////////////
346
+
347
+ var defaultRegexes = {
348
+
349
+ browser : [[
350
+
351
+ // Most common regardless engine
352
+ /\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
353
+ ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
354
+ /webview.+edge\/([\w\.]+)/i // Microsoft Edge
355
+ ], [VERSION, [NAME, EDGE+' WebView']], [
356
+ /edg(?:e|ios|a)?\/([\w\.]+)/i
357
+ ], [VERSION, [NAME, 'Edge']], [
358
+
359
+ // Presto based
360
+ /(opera mini)\/([-\w\.]+)/i, // Opera Mini
361
+ /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, // Opera Mobi/Tablet
362
+ /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i // Opera
363
+ ], [NAME, VERSION], [
364
+ /opios[\/ ]+([\w\.]+)/i // Opera mini on iphone >= 8.0
365
+ ], [VERSION, [NAME, OPERA+' Mini']], [
366
+ /\bop(?:rg)?x\/([\w\.]+)/i // Opera GX
367
+ ], [VERSION, [NAME, OPERA+' GX']], [
368
+ /\bopr\/([\w\.]+)/i // Opera Webkit
369
+ ], [VERSION, [NAME, OPERA]], [
370
+
371
+ // Mixed
372
+ /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
373
+ ], [VERSION, [NAME, 'Baidu']], [
374
+ /\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i // Maxthon
375
+ ], [VERSION, [NAME, 'Maxthon']], [
376
+ /(kindle)\/([\w\.]+)/i, // Kindle
377
+ /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
378
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
379
+ // Trident based
380
+ /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
381
+ /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
382
+
383
+ // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble
384
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser)\/([-\w\.]+)/i,
385
+ // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
386
+ /(heytap|ovi|115|surf)browser\/([\d\.]+)/i, // HeyTap/Ovi/115/Surf
387
+ /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
388
+ ], [NAME, VERSION], [
389
+ /quark(?:pc)?\/([-\w\.]+)/i // Quark
390
+ ], [VERSION, [NAME, 'Quark']], [
391
+ /\bddg\/([\w\.]+)/i // DuckDuckGo
392
+ ], [VERSION, [NAME, 'DuckDuckGo']], [
393
+ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
394
+ ], [VERSION, [NAME, 'UCBrowser']], [
395
+ /microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
396
+ /\bqbcore\/([\w\.]+).+microm/i,
397
+ /micromessenger\/([\w\.]+)/i // WeChat
398
+ ], [VERSION, [NAME, 'WeChat']], [
399
+ /konqueror\/([\w\.]+)/i // Konqueror
400
+ ], [VERSION, [NAME, 'Konqueror']], [
401
+ /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i // IE11
402
+ ], [VERSION, [NAME, 'IE']], [
403
+ /ya(?:search)?browser\/([\w\.]+)/i // Yandex
404
+ ], [VERSION, [NAME, 'Yandex']], [
405
+ /slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
406
+ ], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [
407
+ /(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser
408
+ ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
409
+ /\bfocus\/([\w\.]+)/i // Firefox Focus
410
+ ], [VERSION, [NAME, FIREFOX+' Focus']], [
411
+ /\bopt\/([\w\.]+)/i // Opera Touch
412
+ ], [VERSION, [NAME, OPERA+' Touch']], [
413
+ /coc_coc\w+\/([\w\.]+)/i // Coc Coc Browser
414
+ ], [VERSION, [NAME, 'Coc Coc']], [
415
+ /dolfin\/([\w\.]+)/i // Dolphin
416
+ ], [VERSION, [NAME, 'Dolphin']], [
417
+ /coast\/([\w\.]+)/i // Opera Coast
418
+ ], [VERSION, [NAME, OPERA+' Coast']], [
419
+ /miuibrowser\/([\w\.]+)/i // MIUI Browser
420
+ ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [
421
+ /fxios\/([\w\.-]+)/i // Firefox for iOS
422
+ ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [
423
+ /\bqihoobrowser\/?([\w\.]*)/i // 360
424
+ ], [VERSION, [NAME, '360']], [
425
+ /\b(qq)\/([\w\.]+)/i // QQ
426
+ ], [[NAME, /(.+)/, '$1Browser'], VERSION], [
427
+ /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
428
+ ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
429
+ /samsungbrowser\/([\w\.]+)/i // Samsung Internet
430
+ ], [VERSION, [NAME, SAMSUNG + ' Internet']], [
431
+ /metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
432
+ ], [VERSION, [NAME, SOGOU + ' Explorer']], [
433
+ /(sogou)mo\w+\/([\d\.]+)/i // Sogou Mobile
434
+ ], [[NAME, SOGOU + ' Mobile'], VERSION], [
435
+ /(electron)\/([\w\.]+) safari/i, // Electron-based App
436
+ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
437
+ /m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i // QQ/2345
438
+ ], [NAME, VERSION], [
439
+ /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq
440
+ ], [NAME], [
441
+ /ome\/([\w\.]+) \w* ?(iron) saf/i, // Iron
442
+ /ome\/([\w\.]+).+qihu (360)[es]e/i // 360
443
+ ], [VERSION, NAME], [
444
+
445
+ // WebView
446
+ /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
447
+ ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [
448
+ /(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
449
+ /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
450
+ /(daum)apps[\/ ]([\w\.]+)/i, // Daum App
451
+ /safari (line)\/([\w\.]+)/i, // Line App for iOS
452
+ /\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
453
+ /(alipay)client\/([\w\.]+)/i, // Alipay
454
+ /(twitter)(?:and| f.+e\/([\w\.]+))/i, // Twitter
455
+ /(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i // Instagram/Snapchat/Klarna
456
+ ], [NAME, VERSION, [TYPE, INAPP]], [
457
+ /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
458
+ ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [
459
+ /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
460
+ ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [
461
+ /\[(linkedin)app\]/i // LinkedIn App for iOS & Android
462
+ ], [NAME, [TYPE, INAPP]], [
463
+
464
+ /(chromium)[\/ ]([-\w\.]+)/i // Chromium
465
+ ], [NAME, VERSION], [
466
+
467
+ /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
468
+ ], [VERSION, [NAME, CHROME+' Headless']], [
469
+
470
+ /wv\).+chrome\/([\w\.]+).+edgw\//i // Edge WebView2
471
+ ], [VERSION, [NAME, EDGE+' WebView2']], [
472
+
473
+ / wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
474
+ ], [[NAME, CHROME+' WebView'], VERSION], [
475
+
476
+ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser
477
+ ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [
478
+
479
+ /chrome\/([\w\.]+) mobile/i // Chrome Mobile
480
+ ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
481
+
482
+ /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia
483
+ ], [NAME, VERSION], [
484
+
485
+ /version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i // Safari Mobile
486
+ ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [
487
+ /iphone .*mobile(?:\/\w+ | ?)safari/i
488
+ ], [[NAME, PREFIX_MOBILE + 'Safari']], [
489
+ /version\/([\w\.\,]+) .*(safari)/i // Safari
490
+ ], [VERSION, NAME], [
491
+ /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i // Safari < 3.0
492
+ ], [NAME, [VERSION, '1']], [
493
+
494
+ /(webkit|khtml)\/([\w\.]+)/i
495
+ ], [NAME, VERSION], [
496
+
497
+ // Gecko based
498
+ /(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i // Firefox Mobile
499
+ ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [
500
+ /(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
501
+ ], [[NAME, 'Netscape'], VERSION], [
502
+ /(wolvic|librewolf)\/([\w\.]+)/i // Wolvic/LibreWolf
503
+ ], [NAME, VERSION], [
504
+ /mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality
505
+ ], [VERSION, [NAME, FIREFOX+' Reality']], [
506
+ /ekiohf.+(flow)\/([\w\.]+)/i, // Flow
507
+ /(swiftfox)/i, // Swiftfox
508
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
509
+ // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
510
+ /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
511
+ // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
512
+ /(firefox)\/([\w\.]+)/i, // Other Firefox-based
513
+ /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
514
+
515
+ // Other
516
+ /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
517
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
518
+ /\b(links) \(([\w\.]+)/i // Links
519
+ ], [NAME, [VERSION, /_/g, '.']], [
520
+
521
+ /(cobalt)\/([\w\.]+)/i // Cobalt
522
+ ], [NAME, [VERSION, /[^\d\.]+./, EMPTY]]
523
+ ],
524
+
525
+ cpu : [[
526
+
527
+ /\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
528
+ ], [[ARCHITECTURE, 'amd64']], [
529
+
530
+ /(ia32(?=;))/i, // IA32 (quicktime)
531
+ /\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
532
+ ], [[ARCHITECTURE, 'ia32']], [
533
+
534
+ /\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
535
+ ], [[ARCHITECTURE, 'arm64']], [
536
+
537
+ /\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
538
+ ], [[ARCHITECTURE, 'armhf']], [
539
+
540
+ // PocketPC mistakenly identified as PowerPC
541
+ /( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
542
+ ], [[ARCHITECTURE, 'arm']], [
543
+
544
+ /((ppc|powerpc)(64)?)( mac|;|\))/i // PowerPC
545
+ ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
546
+
547
+ / sun4\w[;\)]/i // SPARC
548
+ ], [[ARCHITECTURE, 'sparc']], [
549
+
550
+ /\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i
551
+ // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
552
+ ], [[ARCHITECTURE, lowerize]]
553
+ ],
554
+
555
+ device : [[
556
+
557
+ //////////////////////////
558
+ // MOBILES & TABLETS
559
+ /////////////////////////
560
+
561
+ // Samsung
562
+ /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
563
+ ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
564
+ /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
565
+ /samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
566
+ /sec-(sgh\w+)/i
567
+ ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
568
+
569
+ // Apple
570
+ /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i // iPod/iPhone
571
+ ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [
572
+ /\((ipad);[-\w\),; ]+apple/i, // iPad
573
+ /applecoremedia\/[\w\.]+ \((ipad)/i,
574
+ /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
575
+ ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [
576
+ /(macintosh);/i
577
+ ], [MODEL, [VENDOR, APPLE]], [
578
+
579
+ // Sharp
580
+ /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
581
+ ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
582
+
583
+ // Honor
584
+ /\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
585
+ ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
586
+ /honor([-\w ]+)[;\)]/i
587
+ ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
588
+
589
+ // Huawei
590
+ /\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
591
+ ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
592
+ /(?:huawei)([-\w ]+)[;\)]/i,
593
+ /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
594
+ ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
595
+
596
+ // Xiaomi
597
+ /oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
598
+ /\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
599
+ ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
600
+
601
+ /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
602
+ /\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
603
+ /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
604
+ /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
605
+ /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
606
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i, // Xiaomi Mi
607
+ / ([\w ]+) miui\/v?\d/i
608
+ ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
609
+
610
+ // OnePlus
611
+ /droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-k]\w[1m]10)\b/i,
612
+ /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
613
+ ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
614
+
615
+ // OPPO
616
+ /; (\w+) bui.+ oppo/i,
617
+ /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
618
+ ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
619
+ /\b(opd2(\d{3}a?))(?: bui|\))/i
620
+ ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [
621
+
622
+ // BLU
623
+ /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i // Vivo series
624
+ ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [
625
+
626
+ // Vivo
627
+ /; vivo (\w+)(?: bui|\))/i,
628
+ /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
629
+ ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [
630
+
631
+ // Realme
632
+ /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
633
+ ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [
634
+
635
+ // Lenovo
636
+ /(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
637
+ /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
638
+ ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
639
+ /lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
640
+ ], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [
641
+
642
+ // Motorola
643
+ /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
644
+ /\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
645
+ /((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
646
+ ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
647
+ /\b(mz60\d|xoom[2 ]{0,2}) build\//i
648
+ ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
649
+
650
+ // LG
651
+ /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
652
+ ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
653
+ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
654
+ /\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
655
+ /\blg-?([\d\w]+) bui/i
656
+ ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
657
+
658
+ // Nokia
659
+ /(nokia) (t[12][01])/i
660
+ ], [VENDOR, MODEL, [TYPE, TABLET]], [
661
+ /(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
662
+ /nokia[-_ ]?(([-\w\. ]*))/i
663
+ ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
664
+
665
+ // Google
666
+ /(pixel (c|tablet))\b/i // Google Pixel C/Tablet
667
+ ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
668
+ // Google Pixel
669
+ /droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i
670
+ ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
671
+ /(google) (pixelbook( go)?)/i
672
+ ], [VENDOR, MODEL], [
673
+
674
+ // Sony
675
+ /droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
676
+ ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [
677
+ /sony tablet [ps]/i,
678
+ /\b(?:sony)?sgp\w+(?: bui|\))/i
679
+ ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [
680
+
681
+ // Amazon
682
+ /(alexa)webm/i,
683
+ /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i, // Kindle Fire without Silk / Echo Show
684
+ /(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
685
+ ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
686
+ /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
687
+ ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [
688
+
689
+ // BlackBerry
690
+ /(playbook);[-\w\),; ]+(rim)/i // BlackBerry PlayBook
691
+ ], [MODEL, VENDOR, [TYPE, TABLET]], [
692
+ /\b((?:bb[a-f]|st[hv])100-\d)/i,
693
+ /\(bb10; (\w+)/i // BlackBerry 10
694
+ ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [
695
+
696
+ // Asus
697
+ /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
698
+ ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [
699
+ / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
700
+ ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [
701
+
702
+ // HTC
703
+ /(nexus 9)/i // HTC Nexus 9
704
+ ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [
705
+ /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, // HTC
706
+
707
+ // ZTE
708
+ /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
709
+ /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
710
+ ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
711
+
712
+ // TCL
713
+ /tcl (xess p17aa)/i,
714
+ /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
715
+ ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [
716
+ /droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
717
+ ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [
718
+
719
+ // itel
720
+ /(itel) ((\w+))/i
721
+ ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [
722
+
723
+ // Acer
724
+ /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
725
+ ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
726
+
727
+ // Meizu
728
+ /droid.+; (m[1-5] note) bui/i,
729
+ /\bmz-([-\w]{2,})/i
730
+ ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [
731
+
732
+ // Ulefone
733
+ /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
734
+ ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
735
+
736
+ // Energizer
737
+ /; (energy ?\w+)(?: bui|\))/i,
738
+ /; energizer ([\w ]+)(?: bui|\))/i
739
+ ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [
740
+
741
+ // Cat
742
+ /; cat (b35);/i,
743
+ /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
744
+ ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [
745
+
746
+ // Smartfren
747
+ /((?:new )?andromax[\w- ]+)(?: bui|\))/i
748
+ ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [
749
+
750
+ // Nothing
751
+ /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
752
+ ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
753
+
754
+ // Archos
755
+ /; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
756
+ /archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
757
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [
758
+ /archos ([\w ]+)( b|\))/i,
759
+ /; (ac[3-6]\d\w{2,8})( b|\))/i
760
+ ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
761
+
762
+ // HMD
763
+ /; (n159v)/i
764
+ ], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [
765
+
766
+ // MIXED
767
+ /(imo) (tab \w+)/i, // IMO
768
+ /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno
769
+ ], [VENDOR, MODEL, [TYPE, TABLET]], [
770
+
771
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
772
+ // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
773
+ /; (blu|hmd|imo|infinix|lava|oneplus|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL
774
+ /(hp) ([\w ]+\w)/i, // HP iPAQ
775
+ /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
776
+ /(oppo) ?([\w ]+) bui/i // OPPO
777
+ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
778
+
779
+ /(kobo)\s(ereader|touch)/i, // Kobo
780
+ /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
781
+ /(kindle)\/([\w\.]+)/i // Kindle
782
+ ], [VENDOR, MODEL, [TYPE, TABLET]], [
783
+
784
+ /(surface duo)/i // Surface Duo
785
+ ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
786
+ /droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
787
+ ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
788
+ /((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
789
+ ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
790
+ /(sprint) (\w+)/i // Sprint Phones
791
+ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
792
+ /(kin\.[onetw]{3})/i // Microsoft Kin
793
+ ], [[MODEL, /\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [
794
+ /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra
795
+ ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [
796
+ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
797
+ ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [
798
+
799
+ ///////////////////
800
+ // SMARTTVS
801
+ ///////////////////
802
+
803
+ /smart-tv.+(samsung)/i // Samsung
804
+ ], [VENDOR, [TYPE, SMARTTV]], [
805
+ /hbbtv.+maple;(\d+)/i
806
+ ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [
807
+ /(vizio)(?: |.+model\/)(\w+-\w+)/i, // Vizio
808
+ /tcast.+(lg)e?. ([-\w]+)/i // LG SmartTV
809
+ ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
810
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
811
+ ], [[VENDOR, LG], [TYPE, SMARTTV]], [
812
+ /(apple) ?tv/i // Apple TV
813
+ ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
814
+ /crkey.*devicetype\/chromecast/i // Google Chromecast Third Generation
815
+ ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
816
+ /crkey.*devicetype\/([^/]*)/i // Google Chromecast with specific device type
817
+ ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
818
+ /fuchsia.*crkey/i // Google Chromecast Nest Hub
819
+ ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
820
+ /crkey/i // Google Chromecast, Linux-based or unknown
821
+ ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
822
+ /(portaltv)/i // Facebook Portal TV
823
+ ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [
824
+ /droid.+aft(\w+)( bui|\))/i // Fire TV
825
+ ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
826
+ /(shield \w+ tv)/i // Nvidia Shield TV
827
+ ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
828
+ /\(dtv[\);].+(aquos)/i,
829
+ /(aquos-tv[\w ]+)\)/i // Sharp
830
+ ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
831
+ /(bravia[\w ]+)( bui|\))/i // Sony
832
+ ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
833
+ /(mi(tv|box)-?\w+) bui/i // Xiaomi
834
+ ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
835
+ /Hbbtv.*(technisat) (.*);/i // TechniSAT
836
+ ], [VENDOR, MODEL, [TYPE, SMARTTV]], [
837
+ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
838
+ /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
839
+ ], [[VENDOR, /.+\/(\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [
840
+ // SmartTV from Unidentified Vendors
841
+ /droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i
842
+ ], [MODEL, [TYPE, SMARTTV]], [
843
+ /\b(android tv|smart[- ]?tv|opera tv|tv; rv:|large screen[\w ]+safari)\b/i
844
+ ], [[TYPE, SMARTTV]], [
845
+
846
+ ///////////////////
847
+ // CONSOLES
848
+ ///////////////////
849
+
850
+ /(playstation \w+)/i // Playstation
851
+ ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
852
+ /\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
853
+ ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [
854
+ /(ouya)/i, // Ouya
855
+ /(nintendo) (\w+)/i, // Nintendo
856
+ /(retroid) (pocket ([^\)]+))/i // Retroid Pocket
857
+ ], [VENDOR, MODEL, [TYPE, CONSOLE]], [
858
+ /droid.+; (shield)( bui|\))/i // Nvidia Portable
859
+ ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
860
+
861
+ ///////////////////
862
+ // WEARABLES
863
+ ///////////////////
864
+
865
+ /\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
866
+ ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
867
+ /((pebble))app/i, // Pebble
868
+ /(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
869
+ ], [VENDOR, MODEL, [TYPE, WEARABLE]], [
870
+ /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
871
+ ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
872
+ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
873
+ ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
874
+ /(opwwe\d{3})/i // OnePlus Watch
875
+ ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
876
+ /(moto 360)/i // Motorola 360
877
+ ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
878
+ /(smartwatch 3)/i // Sony SmartWatch
879
+ ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
880
+ /(g watch r)/i // LG G Watch R
881
+ ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
882
+ /droid.+; (wt63?0{2,3})\)/i
883
+ ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
884
+
885
+ ///////////////////
886
+ // XR
887
+ ///////////////////
888
+
889
+ /droid.+; (glass) \d/i // Google Glass
890
+ ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
891
+ /(pico) (4|neo3(?: link|pro)?)/i // Pico
892
+ ], [VENDOR, MODEL, [TYPE, XR]], [
893
+ /(quest( \d| pro)?s?).+vr/i // Meta Quest
894
+ ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
895
+ /mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic
896
+ ], [[TYPE, XR]], [
897
+
898
+ ///////////////////
899
+ // EMBEDDED
900
+ ///////////////////
901
+
902
+ /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i // Tesla
903
+ ], [VENDOR, [TYPE, EMBEDDED]], [
904
+ /(aeobc)\b/i // Echo Dot
905
+ ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
906
+ /(homepod).+mac os/i // Apple HomePod
907
+ ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
908
+ /windows iot/i // Unidentifiable embedded device using Windows IoT
909
+ ], [[TYPE, EMBEDDED]], [
910
+
911
+ ////////////////////
912
+ // MIXED (GENERIC)
913
+ ///////////////////
914
+
915
+ /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
916
+ ], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
917
+ /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
918
+ ], [[TYPE, TABLET]], [
919
+ /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
920
+ ], [[TYPE, MOBILE]], [
921
+ /droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
922
+ ], [MODEL, [VENDOR, 'Generic']]
923
+ ],
924
+
925
+ engine : [[
926
+
927
+ /windows.+ edge\/([\w\.]+)/i // EdgeHTML
928
+ ], [VERSION, [NAME, EDGE+'HTML']], [
929
+
930
+ /(arkweb)\/([\w\.]+)/i // ArkWeb
931
+ ], [NAME, VERSION], [
932
+
933
+ /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
934
+ ], [VERSION, [NAME, 'Blink']], [
935
+
936
+ /(presto)\/([\w\.]+)/i, // Presto
937
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
938
+ /ekioh(flow)\/([\w\.]+)/i, // Flow
939
+ /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
940
+ /(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
941
+
942
+ /\b(libweb)/i // LibWeb
943
+ ], [NAME, VERSION], [
944
+ /ladybird\//i
945
+ ], [[NAME, 'LibWeb']], [
946
+
947
+ /rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
948
+ ], [VERSION, NAME]
949
+ ],
950
+
951
+ os : [[
952
+
953
+ // Windows
954
+ /(windows nt) (6\.[23]); arm/i // Windows RT
955
+ ], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [
956
+ /(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i, // Windows IoT/Mobile/Phone
957
+ // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
958
+ /(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
959
+ ], [NAME, VERSION], [
960
+ /windows nt ?([\d\.\)]*)(?!.+xbox)/i,
961
+ /\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
962
+ ], [[VERSION, /(;|\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [
963
+ /(windows ce)\/?([\d\.]*)/i // Windows CE
964
+ ], [NAME, VERSION], [
965
+
966
+ // iOS/macOS
967
+ /[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
968
+ /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
969
+ /cfnetwork\/.+darwin/i
970
+ ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
971
+ /(mac os x) ?([\w\. ]*)/i,
972
+ /(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i // Mac OS
973
+ ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [
974
+
975
+ // Google Chromecast
976
+ /android ([\d\.]+).*crkey/i // Google Chromecast, Android-based
977
+ ], [VERSION, [NAME, CHROMECAST + ' Android']], [
978
+ /fuchsia.*crkey\/([\d\.]+)/i // Google Chromecast, Fuchsia-based
979
+ ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [
980
+ /crkey\/([\d\.]+).*devicetype\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker
981
+ ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [
982
+ /linux.*crkey\/([\d\.]+)/i // Google Chromecast, Legacy Linux-based
983
+ ], [VERSION, [NAME, CHROMECAST + ' Linux']], [
984
+ /crkey\/([\d\.]+)/i // Google Chromecast, unknown
985
+ ], [VERSION, [NAME, CHROMECAST]], [
986
+
987
+ // Mobile OSes
988
+ /droid ([\w\.]+)\b.+(android[- ]x86)/i // Android-x86
989
+ ], [VERSION, NAME], [
990
+ /(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
991
+ ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
992
+ /(harmonyos)[\/ ]?([\d\.]*)/i, // HarmonyOS
993
+ // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
994
+ /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
995
+ ], [NAME, VERSION], [
996
+ /\(bb(10);/i // BlackBerry 10
997
+ ], [VERSION, [NAME, BLACKBERRY]], [
998
+ /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
999
+ ], [VERSION, [NAME, 'Symbian']], [
1000
+ /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
1001
+ ], [VERSION, [NAME, FIREFOX+' OS']], [
1002
+ /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i, // WebOS
1003
+ /webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
1004
+ ], [VERSION, [NAME, 'webOS']], [
1005
+ /web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
1006
+ // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
1007
+ ], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [
1008
+ /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
1009
+ ], [VERSION, [NAME, 'watchOS']], [
1010
+
1011
+ // Google ChromeOS
1012
+ /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
1013
+ ], [[NAME, "Chrome OS"], VERSION],[
1014
+
1015
+ // Smart TVs
1016
+ /panasonic;(viera)/i, // Panasonic Viera
1017
+ /(netrange)mmh/i, // Netrange
1018
+ /(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
1019
+
1020
+ // Console
1021
+ /(nintendo|playstation) (\w+)/i, // Nintendo/Playstation
1022
+ /(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
1023
+ /(pico) .+os([\w\.]+)/i, // Pico
1024
+
1025
+ // Other
1026
+ /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, // Joli/Palm
1027
+ /linux.+(mint)[\/\(\) ]?([\w\.]*)/i, // Mint
1028
+ /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
1029
+ /([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
1030
+ // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
1031
+ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i, // Solaris
1032
+ /\b(aix)[; ]([1-9\.]{0,4})/i, // AIX
1033
+ /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i, // Hurd/Linux/MorphOS
1034
+ /(gnu) ?([\w\.]*)/i, // GNU
1035
+ /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
1036
+ /(haiku) ?(r\d)?/i // Haiku
1037
+ ], [NAME, VERSION], [
1038
+ /(sunos) ?([\d\.]*)/i // Solaris
1039
+ ], [[NAME, 'Solaris'], VERSION], [
1040
+ /\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
1041
+ /(unix) ?([\w\.]*)/i // UNIX
1042
+ ], [NAME, VERSION]
1043
+ ]
1044
+ };
1045
+
1046
+ /////////////////
1047
+ // Factories
1048
+ ////////////////
1049
+
1050
+ var defaultProps = (function () {
1051
+ var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};
1052
+ setProps.call(props.init, [
1053
+ [UA_BROWSER, [NAME, VERSION, MAJOR, TYPE]],
1054
+ [UA_CPU, [ARCHITECTURE]],
1055
+ [UA_DEVICE, [TYPE, MODEL, VENDOR]],
1056
+ [UA_ENGINE, [NAME, VERSION]],
1057
+ [UA_OS, [NAME, VERSION]]
1058
+ ]);
1059
+ setProps.call(props.isIgnore, [
1060
+ [UA_BROWSER, [VERSION, MAJOR]],
1061
+ [UA_ENGINE, [VERSION]],
1062
+ [UA_OS, [VERSION]]
1063
+ ]);
1064
+ setProps.call(props.isIgnoreRgx, [
1065
+ [UA_BROWSER, / ?browser$/i],
1066
+ [UA_OS, / ?os$/i]
1067
+ ]);
1068
+ setProps.call(props.toString, [
1069
+ [UA_BROWSER, [NAME, VERSION]],
1070
+ [UA_CPU, [ARCHITECTURE]],
1071
+ [UA_DEVICE, [VENDOR, MODEL]],
1072
+ [UA_ENGINE, [NAME, VERSION]],
1073
+ [UA_OS, [NAME, VERSION]]
1074
+ ]);
1075
+ return props;
1076
+ })();
1077
+
1078
+ var createIData = function (item, itemType) {
1079
+
1080
+ var init_props = defaultProps.init[itemType],
1081
+ is_ignoreProps = defaultProps.isIgnore[itemType] || 0,
1082
+ is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,
1083
+ toString_props = defaultProps.toString[itemType] || 0;
1084
+
1085
+ function IData () {
1086
+ setProps.call(this, init_props);
1087
+ }
1088
+
1089
+ IData.prototype.getItem = function () {
1090
+ return item;
1091
+ };
1092
+
1093
+ IData.prototype.withClientHints = function () {
1094
+
1095
+ // nodejs / non-client-hints browsers
1096
+ if (!NAVIGATOR_UADATA) {
1097
+ return item
1098
+ .parseCH()
1099
+ .get();
1100
+ }
1101
+
1102
+ // browsers based on chromium 85+
1103
+ return NAVIGATOR_UADATA
1104
+ .getHighEntropyValues(CH_ALL_VALUES)
1105
+ .then(function (res) {
1106
+ return item
1107
+ .setCH(new UACHData(res, false))
1108
+ .parseCH()
1109
+ .get();
1110
+ });
1111
+ };
1112
+
1113
+ IData.prototype.withFeatureCheck = function () {
1114
+ return item.detectFeature().get();
1115
+ };
1116
+
1117
+ if (itemType != UA_RESULT) {
1118
+ IData.prototype.is = function (strToCheck) {
1119
+ var is = false;
1120
+ for (var i in this) {
1121
+ if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
1122
+ is = true;
1123
+ if (strToCheck != UNDEF_TYPE) break;
1124
+ } else if (strToCheck == UNDEF_TYPE && is) {
1125
+ is = !is;
1126
+ break;
1127
+ }
1128
+ }
1129
+ return is;
1130
+ };
1131
+ IData.prototype.toString = function () {
1132
+ var str = EMPTY;
1133
+ for (var i in toString_props) {
1134
+ if (typeof(this[toString_props[i]]) !== UNDEF_TYPE) {
1135
+ str += (str ? ' ' : EMPTY) + this[toString_props[i]];
1136
+ }
1137
+ }
1138
+ return str || UNDEF_TYPE;
1139
+ };
1140
+ }
1141
+
1142
+ if (!NAVIGATOR_UADATA) {
1143
+ IData.prototype.then = function (cb) {
1144
+ var that = this;
1145
+ var IDataResolve = function () {
1146
+ for (var prop in that) {
1147
+ if (that.hasOwnProperty(prop)) {
1148
+ this[prop] = that[prop];
1149
+ }
1150
+ }
1151
+ };
1152
+ IDataResolve.prototype = {
1153
+ is : IData.prototype.is,
1154
+ toString : IData.prototype.toString
1155
+ };
1156
+ var resolveData = new IDataResolve();
1157
+ cb(resolveData);
1158
+ return resolveData;
1159
+ };
1160
+ }
1161
+
1162
+ return new IData();
1163
+ };
1164
+
1165
+ /////////////////
1166
+ // Constructor
1167
+ ////////////////
1168
+
1169
+ function UACHData (uach, isHttpUACH) {
1170
+ uach = uach || {};
1171
+ setProps.call(this, CH_ALL_VALUES);
1172
+ if (isHttpUACH) {
1173
+ setProps.call(this, [
1174
+ [BRANDS, itemListToArray(uach[CH_HEADER])],
1175
+ [FULLVERLIST, itemListToArray(uach[CH_HEADER_FULL_VER_LIST])],
1176
+ [MOBILE, /\?1/.test(uach[CH_HEADER_MOBILE])],
1177
+ [MODEL, stripQuotes(uach[CH_HEADER_MODEL])],
1178
+ [PLATFORM, stripQuotes(uach[CH_HEADER_PLATFORM])],
1179
+ [PLATFORMVER, stripQuotes(uach[CH_HEADER_PLATFORM_VER])],
1180
+ [ARCHITECTURE, stripQuotes(uach[CH_HEADER_ARCH])],
1181
+ [FORMFACTORS, itemListToArray(uach[CH_HEADER_FORM_FACTORS])],
1182
+ [BITNESS, stripQuotes(uach[CH_HEADER_BITNESS])]
1183
+ ]);
1184
+ } else {
1185
+ for (var prop in uach) {
1186
+ if(this.hasOwnProperty(prop) && typeof uach[prop] !== UNDEF_TYPE) this[prop] = uach[prop];
1187
+ }
1188
+ }
1189
+ }
1190
+
1191
+ function UAItem (itemType, ua, rgxMap, uaCH) {
1192
+
1193
+ this.get = function (prop) {
1194
+ if (!prop) return this.data;
1195
+ return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;
1196
+ };
1197
+
1198
+ this.set = function (prop, val) {
1199
+ this.data[prop] = val;
1200
+ return this;
1201
+ };
1202
+
1203
+ this.setCH = function (ch) {
1204
+ this.uaCH = ch;
1205
+ return this;
1206
+ };
1207
+
1208
+ this.detectFeature = function () {
1209
+ if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
1210
+ switch (this.itemType) {
1211
+ case UA_BROWSER:
1212
+ // Brave-specific detection
1213
+ if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == FUNC_TYPE) {
1214
+ this.set(NAME, 'Brave');
1215
+ }
1216
+ break;
1217
+ case UA_DEVICE:
1218
+ // Chrome-specific detection: check for 'mobile' value of navigator.userAgentData
1219
+ if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
1220
+ this.set(TYPE, MOBILE);
1221
+ }
1222
+ // iPadOS-specific detection: identified as Mac, but has some iOS-only properties
1223
+ if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== UNDEF_TYPE && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
1224
+ this.set(MODEL, 'iPad')
1225
+ .set(TYPE, TABLET);
1226
+ }
1227
+ break;
1228
+ case UA_OS:
1229
+ // Chrome-specific detection: check for 'platform' value of navigator.userAgentData
1230
+ if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
1231
+ this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
1232
+ }
1233
+ break;
1234
+ case UA_RESULT:
1235
+ var data = this.data;
1236
+ var detect = function (itemType) {
1237
+ return data[itemType]
1238
+ .getItem()
1239
+ .detectFeature()
1240
+ .get();
1241
+ };
1242
+ this.set(UA_BROWSER, detect(UA_BROWSER))
1243
+ .set(UA_CPU, detect(UA_CPU))
1244
+ .set(UA_DEVICE, detect(UA_DEVICE))
1245
+ .set(UA_ENGINE, detect(UA_ENGINE))
1246
+ .set(UA_OS, detect(UA_OS));
1247
+ }
1248
+ }
1249
+ return this;
1250
+ };
1251
+
1252
+ this.parseUA = function () {
1253
+ if (this.itemType != UA_RESULT) {
1254
+ rgxMapper.call(this.data, this.ua, this.rgxMap);
1255
+ }
1256
+ if (this.itemType == UA_BROWSER) {
1257
+ this.set(MAJOR, majorize(this.get(VERSION)));
1258
+ }
1259
+ return this;
1260
+ };
1261
+
1262
+ this.parseCH = function () {
1263
+ var uaCH = this.uaCH,
1264
+ rgxMap = this.rgxMap;
1265
+
1266
+ switch (this.itemType) {
1267
+ case UA_BROWSER:
1268
+ case UA_ENGINE:
1269
+ var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
1270
+ if (brands) {
1271
+ for (var i in brands) {
1272
+ var brandName = brands[i].brand || brands[i],
1273
+ brandVersion = brands[i].version;
1274
+ if (this.itemType == UA_BROWSER &&
1275
+ !/not.a.brand/i.test(brandName) &&
1276
+ (!prevName ||
1277
+ (/Chrom/.test(prevName) && brandName != CHROMIUM) ||
1278
+ (prevName == EDGE && /WebView2/.test(brandName))
1279
+ )) {
1280
+ brandName = strMapper(brandName, browserHintsMap);
1281
+ prevName = this.get(NAME);
1282
+ if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
1283
+ this.set(NAME, brandName)
1284
+ .set(VERSION, brandVersion)
1285
+ .set(MAJOR, majorize(brandVersion));
1286
+ }
1287
+ prevName = brandName;
1288
+ }
1289
+ if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
1290
+ this.set(VERSION, brandVersion);
1291
+ }
1292
+ }
1293
+ }
1294
+ break;
1295
+ case UA_CPU:
1296
+ var archName = uaCH[ARCHITECTURE];
1297
+ if (archName) {
1298
+ if (archName && uaCH[BITNESS] == '64') archName += '64';
1299
+ rgxMapper.call(this.data, archName + ';', rgxMap);
1300
+ }
1301
+ break;
1302
+ case UA_DEVICE:
1303
+ if (uaCH[MOBILE]) {
1304
+ this.set(TYPE, MOBILE);
1305
+ }
1306
+ if (uaCH[MODEL]) {
1307
+ this.set(MODEL, uaCH[MODEL]);
1308
+ if (!this.get(TYPE) || !this.get(VENDOR)) {
1309
+ var reParse = {};
1310
+ rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
1311
+ if (!this.get(TYPE) && !!reParse.type) {
1312
+ this.set(TYPE, reParse.type);
1313
+ }
1314
+ if (!this.get(VENDOR) && !!reParse.vendor) {
1315
+ this.set(VENDOR, reParse.vendor);
1316
+ }
1317
+ }
1318
+ }
1319
+ if (uaCH[FORMFACTORS]) {
1320
+ var ff;
1321
+ if (typeof uaCH[FORMFACTORS] !== 'string') {
1322
+ var idx = 0;
1323
+ while (!ff && idx < uaCH[FORMFACTORS].length) {
1324
+ ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
1325
+ }
1326
+ } else {
1327
+ ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
1328
+ }
1329
+ this.set(TYPE, ff);
1330
+ }
1331
+ break;
1332
+ case UA_OS:
1333
+ var osName = uaCH[PLATFORM];
1334
+ if(osName) {
1335
+ var osVersion = uaCH[PLATFORMVER];
1336
+ if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');
1337
+ this.set(NAME, osName)
1338
+ .set(VERSION, osVersion);
1339
+ }
1340
+ // Xbox-Specific Detection
1341
+ if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {
1342
+ this.set(NAME, 'Xbox')
1343
+ .set(VERSION, undefined);
1344
+ }
1345
+ break;
1346
+ case UA_RESULT:
1347
+ var data = this.data;
1348
+ var parse = function (itemType) {
1349
+ return data[itemType]
1350
+ .getItem()
1351
+ .setCH(uaCH)
1352
+ .parseCH()
1353
+ .get();
1354
+ };
1355
+ this.set(UA_BROWSER, parse(UA_BROWSER))
1356
+ .set(UA_CPU, parse(UA_CPU))
1357
+ .set(UA_DEVICE, parse(UA_DEVICE))
1358
+ .set(UA_ENGINE, parse(UA_ENGINE))
1359
+ .set(UA_OS, parse(UA_OS));
1360
+ }
1361
+ return this;
1362
+ };
1363
+
1364
+ setProps.call(this, [
1365
+ ['itemType', itemType],
1366
+ ['ua', ua],
1367
+ ['uaCH', uaCH],
1368
+ ['rgxMap', rgxMap],
1369
+ ['data', createIData(this, itemType)]
1370
+ ]);
1371
+
1372
+ return this;
1373
+ }
1374
+
1375
+ function UAParser (ua, extensions, headers) {
1376
+
1377
+ if (typeof ua === OBJ_TYPE) {
1378
+ if (isExtensions(ua, true)) {
1379
+ if (typeof extensions === OBJ_TYPE) {
1380
+ headers = extensions; // case UAParser(extensions, headers)
1381
+ }
1382
+ extensions = ua; // case UAParser(extensions)
1383
+ } else {
1384
+ headers = ua; // case UAParser(headers)
1385
+ extensions = undefined;
1386
+ }
1387
+ ua = undefined;
1388
+ } else if (typeof ua === STR_TYPE && !isExtensions(extensions, true)) {
1389
+ headers = extensions; // case UAParser(ua, headers)
1390
+ extensions = undefined;
1391
+ }
1392
+
1393
+ // Convert Headers object into a plain object
1394
+ if (headers && typeof headers.append === FUNC_TYPE) {
1395
+ var kv = {};
1396
+ headers.forEach(function (v, k) { kv[k] = v; });
1397
+ headers = kv;
1398
+ }
1399
+
1400
+ if (!(this instanceof UAParser)) {
1401
+ return new UAParser(ua, extensions, headers).getResult();
1402
+ }
1403
+
1404
+ var userAgent = typeof ua === STR_TYPE ? ua : // Passed user-agent string
1405
+ (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers
1406
+ ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent
1407
+ EMPTY)), // empty string
1408
+
1409
+ httpUACH = new UACHData(headers, true),
1410
+ regexMap = extensions ?
1411
+ extend(defaultRegexes, extensions) :
1412
+ defaultRegexes,
1413
+
1414
+ createItemFunc = function (itemType) {
1415
+ if (itemType == UA_RESULT) {
1416
+ return function () {
1417
+ return new UAItem(itemType, userAgent, regexMap, httpUACH)
1418
+ .set('ua', userAgent)
1419
+ .set(UA_BROWSER, this.getBrowser())
1420
+ .set(UA_CPU, this.getCPU())
1421
+ .set(UA_DEVICE, this.getDevice())
1422
+ .set(UA_ENGINE, this.getEngine())
1423
+ .set(UA_OS, this.getOS())
1424
+ .get();
1425
+ };
1426
+ } else {
1427
+ return function () {
1428
+ return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)
1429
+ .parseUA()
1430
+ .get();
1431
+ };
1432
+ }
1433
+ };
1434
+
1435
+ // public methods
1436
+ setProps.call(this, [
1437
+ ['getBrowser', createItemFunc(UA_BROWSER)],
1438
+ ['getCPU', createItemFunc(UA_CPU)],
1439
+ ['getDevice', createItemFunc(UA_DEVICE)],
1440
+ ['getEngine', createItemFunc(UA_ENGINE)],
1441
+ ['getOS', createItemFunc(UA_OS)],
1442
+ ['getResult', createItemFunc(UA_RESULT)],
1443
+ ['getUA', function () { return userAgent; }],
1444
+ ['setUA', function (ua) {
1445
+ if (isString(ua))
1446
+ userAgent = ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
1447
+ return this;
1448
+ }]
1449
+ ])
1450
+ .setUA(userAgent);
1451
+
1452
+ return this;
1453
+ }
1454
+
1455
+ UAParser.VERSION = LIBVERSION;
1456
+ UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);
1457
+ UAParser.CPU = enumerize([ARCHITECTURE]);
1458
+ UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
1459
+ UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
1460
+
1461
+ const MobileContext = createContext(undefined);
1462
+ const detectMobile = (userAgent) => {
1463
+ const parser = new UAParser();
1464
+ parser.setUA(userAgent);
1465
+ const device = parser.getDevice();
1466
+ return device.type === 'mobile' || device.type === 'tablet';
1467
+ };
1468
+ const MobileProvider = ({ userAgent, children, }) => {
1469
+ const isMobile = detectMobile(userAgent);
1470
+ // eslint-disable-next-line react/jsx-no-constructed-context-values
1471
+ const value = {
1472
+ isMobile,
1473
+ userAgent,
1474
+ };
1475
+ return (jsx(MobileContext.Provider, { value: value, children: children }));
1476
+ };
1477
+ const useMobile = () => {
1478
+ const context = useContext(MobileContext);
1479
+ if (context === undefined) {
1480
+ throw new Error('useMobile must be used within a MobileProvider');
1481
+ }
1482
+ return context.isMobile;
1483
+ };
1484
+
1485
+ export { MobileProvider, MobileContext as default, useMobile };