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