@measured/puck-plugin-heading-analyzer 0.17.0-canary.fcdf346 → 0.17.0
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.
- package/dist/index.js +1486 -82
- package/dist/index.mjs +1482 -74
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
@@ -72,35 +72,45 @@ var require_classnames = __commonJS({
|
|
72
72
|
(function() {
|
73
73
|
"use strict";
|
74
74
|
var hasOwn = {}.hasOwnProperty;
|
75
|
-
var nativeCodeString = "[native code]";
|
76
75
|
function classNames() {
|
77
|
-
var classes =
|
76
|
+
var classes = "";
|
78
77
|
for (var i = 0; i < arguments.length; i++) {
|
79
78
|
var arg = arguments[i];
|
80
|
-
if (
|
81
|
-
|
82
|
-
if (argType === "string" || argType === "number") {
|
83
|
-
classes.push(arg);
|
84
|
-
} else if (Array.isArray(arg)) {
|
85
|
-
if (arg.length) {
|
86
|
-
var inner = classNames.apply(null, arg);
|
87
|
-
if (inner) {
|
88
|
-
classes.push(inner);
|
89
|
-
}
|
90
|
-
}
|
91
|
-
} else if (argType === "object") {
|
92
|
-
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
|
93
|
-
classes.push(arg.toString());
|
94
|
-
continue;
|
95
|
-
}
|
96
|
-
for (var key in arg) {
|
97
|
-
if (hasOwn.call(arg, key) && arg[key]) {
|
98
|
-
classes.push(key);
|
99
|
-
}
|
100
|
-
}
|
79
|
+
if (arg) {
|
80
|
+
classes = appendClass(classes, parseValue(arg));
|
101
81
|
}
|
102
82
|
}
|
103
|
-
return classes
|
83
|
+
return classes;
|
84
|
+
}
|
85
|
+
function parseValue(arg) {
|
86
|
+
if (typeof arg === "string" || typeof arg === "number") {
|
87
|
+
return arg;
|
88
|
+
}
|
89
|
+
if (typeof arg !== "object") {
|
90
|
+
return "";
|
91
|
+
}
|
92
|
+
if (Array.isArray(arg)) {
|
93
|
+
return classNames.apply(null, arg);
|
94
|
+
}
|
95
|
+
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
|
96
|
+
return arg.toString();
|
97
|
+
}
|
98
|
+
var classes = "";
|
99
|
+
for (var key in arg) {
|
100
|
+
if (hasOwn.call(arg, key) && arg[key]) {
|
101
|
+
classes = appendClass(classes, key);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
return classes;
|
105
|
+
}
|
106
|
+
function appendClass(value, newClass) {
|
107
|
+
if (!newClass) {
|
108
|
+
return value;
|
109
|
+
}
|
110
|
+
if (value) {
|
111
|
+
return value + " " + newClass;
|
112
|
+
}
|
113
|
+
return value + newClass;
|
104
114
|
}
|
105
115
|
if (typeof module !== "undefined" && module.exports) {
|
106
116
|
classNames.default = classNames;
|
@@ -116,6 +126,1341 @@ var require_classnames = __commonJS({
|
|
116
126
|
}
|
117
127
|
});
|
118
128
|
|
129
|
+
// ../../node_modules/ua-parser-js/src/ua-parser.js
|
130
|
+
var require_ua_parser = __commonJS({
|
131
|
+
"../../node_modules/ua-parser-js/src/ua-parser.js"(exports, module) {
|
132
|
+
"use strict";
|
133
|
+
init_react_import();
|
134
|
+
(function(window2, undefined2) {
|
135
|
+
"use strict";
|
136
|
+
var LIBVERSION = "1.0.39", EMPTY = "", UNKNOWN = "?", FUNC_TYPE = "function", UNDEF_TYPE = "undefined", OBJ_TYPE = "object", STR_TYPE = "string", MAJOR = "major", MODEL = "model", NAME = "name", TYPE = "type", VENDOR = "vendor", VERSION = "version", ARCHITECTURE = "architecture", CONSOLE = "console", MOBILE = "mobile", TABLET = "tablet", SMARTTV = "smarttv", WEARABLE = "wearable", EMBEDDED = "embedded", UA_MAX_LENGTH = 500;
|
137
|
+
var AMAZON = "Amazon", APPLE = "Apple", ASUS = "ASUS", BLACKBERRY = "BlackBerry", BROWSER = "Browser", CHROME = "Chrome", EDGE = "Edge", FIREFOX = "Firefox", GOOGLE = "Google", HUAWEI = "Huawei", LG = "LG", MICROSOFT = "Microsoft", MOTOROLA = "Motorola", OPERA = "Opera", SAMSUNG = "Samsung", SHARP = "Sharp", SONY = "Sony", XIAOMI = "Xiaomi", ZEBRA = "Zebra", FACEBOOK = "Facebook", CHROMIUM_OS = "Chromium OS", MAC_OS = "Mac OS", SUFFIX_BROWSER = " Browser";
|
138
|
+
var extend = function(regexes2, extensions) {
|
139
|
+
var mergedRegexes = {};
|
140
|
+
for (var i in regexes2) {
|
141
|
+
if (extensions[i] && extensions[i].length % 2 === 0) {
|
142
|
+
mergedRegexes[i] = extensions[i].concat(regexes2[i]);
|
143
|
+
} else {
|
144
|
+
mergedRegexes[i] = regexes2[i];
|
145
|
+
}
|
146
|
+
}
|
147
|
+
return mergedRegexes;
|
148
|
+
}, enumerize = function(arr) {
|
149
|
+
var enums = {};
|
150
|
+
for (var i = 0; i < arr.length; i++) {
|
151
|
+
enums[arr[i].toUpperCase()] = arr[i];
|
152
|
+
}
|
153
|
+
return enums;
|
154
|
+
}, has = function(str1, str2) {
|
155
|
+
return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
|
156
|
+
}, lowerize = function(str) {
|
157
|
+
return str.toLowerCase();
|
158
|
+
}, majorize = function(version) {
|
159
|
+
return typeof version === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split(".")[0] : undefined2;
|
160
|
+
}, trim = function(str, len) {
|
161
|
+
if (typeof str === STR_TYPE) {
|
162
|
+
str = str.replace(/^\s\s*/, EMPTY);
|
163
|
+
return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
|
164
|
+
}
|
165
|
+
};
|
166
|
+
var rgxMapper = function(ua, arrays) {
|
167
|
+
var i = 0, j, k, p, q, matches, match;
|
168
|
+
while (i < arrays.length && !matches) {
|
169
|
+
var regex = arrays[i], props = arrays[i + 1];
|
170
|
+
j = k = 0;
|
171
|
+
while (j < regex.length && !matches) {
|
172
|
+
if (!regex[j]) {
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
matches = regex[j++].exec(ua);
|
176
|
+
if (!!matches) {
|
177
|
+
for (p = 0; p < props.length; p++) {
|
178
|
+
match = matches[++k];
|
179
|
+
q = props[p];
|
180
|
+
if (typeof q === OBJ_TYPE && q.length > 0) {
|
181
|
+
if (q.length === 2) {
|
182
|
+
if (typeof q[1] == FUNC_TYPE) {
|
183
|
+
this[q[0]] = q[1].call(this, match);
|
184
|
+
} else {
|
185
|
+
this[q[0]] = q[1];
|
186
|
+
}
|
187
|
+
} else if (q.length === 3) {
|
188
|
+
if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
|
189
|
+
this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined2;
|
190
|
+
} else {
|
191
|
+
this[q[0]] = match ? match.replace(q[1], q[2]) : undefined2;
|
192
|
+
}
|
193
|
+
} else if (q.length === 4) {
|
194
|
+
this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined2;
|
195
|
+
}
|
196
|
+
} else {
|
197
|
+
this[q] = match ? match : undefined2;
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
i += 2;
|
203
|
+
}
|
204
|
+
}, strMapper = function(str, map) {
|
205
|
+
for (var i in map) {
|
206
|
+
if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
|
207
|
+
for (var j = 0; j < map[i].length; j++) {
|
208
|
+
if (has(map[i][j], str)) {
|
209
|
+
return i === UNKNOWN ? undefined2 : i;
|
210
|
+
}
|
211
|
+
}
|
212
|
+
} else if (has(map[i], str)) {
|
213
|
+
return i === UNKNOWN ? undefined2 : i;
|
214
|
+
}
|
215
|
+
}
|
216
|
+
return map.hasOwnProperty("*") ? map["*"] : str;
|
217
|
+
};
|
218
|
+
var oldSafariMap = {
|
219
|
+
"1.0": "/8",
|
220
|
+
"1.2": "/1",
|
221
|
+
"1.3": "/3",
|
222
|
+
"2.0": "/412",
|
223
|
+
"2.0.2": "/416",
|
224
|
+
"2.0.3": "/417",
|
225
|
+
"2.0.4": "/419",
|
226
|
+
"?": "/"
|
227
|
+
}, windowsVersionMap = {
|
228
|
+
"ME": "4.90",
|
229
|
+
"NT 3.11": "NT3.51",
|
230
|
+
"NT 4.0": "NT4.0",
|
231
|
+
"2000": "NT 5.0",
|
232
|
+
"XP": ["NT 5.1", "NT 5.2"],
|
233
|
+
"Vista": "NT 6.0",
|
234
|
+
"7": "NT 6.1",
|
235
|
+
"8": "NT 6.2",
|
236
|
+
"8.1": "NT 6.3",
|
237
|
+
"10": ["NT 6.4", "NT 10.0"],
|
238
|
+
"RT": "ARM"
|
239
|
+
};
|
240
|
+
var regexes = {
|
241
|
+
browser: [
|
242
|
+
[
|
243
|
+
/\b(?:crmo|crios)\/([\w\.]+)/i
|
244
|
+
// Chrome for Android/iOS
|
245
|
+
],
|
246
|
+
[VERSION, [NAME, "Chrome"]],
|
247
|
+
[
|
248
|
+
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
249
|
+
// Microsoft Edge
|
250
|
+
],
|
251
|
+
[VERSION, [NAME, "Edge"]],
|
252
|
+
[
|
253
|
+
// Presto based
|
254
|
+
/(opera mini)\/([-\w\.]+)/i,
|
255
|
+
// Opera Mini
|
256
|
+
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
|
257
|
+
// Opera Mobi/Tablet
|
258
|
+
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
|
259
|
+
// Opera
|
260
|
+
],
|
261
|
+
[NAME, VERSION],
|
262
|
+
[
|
263
|
+
/opios[\/ ]+([\w\.]+)/i
|
264
|
+
// Opera mini on iphone >= 8.0
|
265
|
+
],
|
266
|
+
[VERSION, [NAME, OPERA + " Mini"]],
|
267
|
+
[
|
268
|
+
/\bop(?:rg)?x\/([\w\.]+)/i
|
269
|
+
// Opera GX
|
270
|
+
],
|
271
|
+
[VERSION, [NAME, OPERA + " GX"]],
|
272
|
+
[
|
273
|
+
/\bopr\/([\w\.]+)/i
|
274
|
+
// Opera Webkit
|
275
|
+
],
|
276
|
+
[VERSION, [NAME, OPERA]],
|
277
|
+
[
|
278
|
+
// Mixed
|
279
|
+
/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
|
280
|
+
// Baidu
|
281
|
+
],
|
282
|
+
[VERSION, [NAME, "Baidu"]],
|
283
|
+
[
|
284
|
+
/(kindle)\/([\w\.]+)/i,
|
285
|
+
// Kindle
|
286
|
+
/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
|
287
|
+
// Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
|
288
|
+
// Trident based
|
289
|
+
/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,
|
290
|
+
// Avant/IEMobile/SlimBrowser
|
291
|
+
/(?:ms|\()(ie) ([\w\.]+)/i,
|
292
|
+
// Internet Explorer
|
293
|
+
// Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
|
294
|
+
/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio)\/([-\w\.]+)/i,
|
295
|
+
// Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio
|
296
|
+
/(heytap|ovi)browser\/([\d\.]+)/i,
|
297
|
+
// HeyTap/Ovi
|
298
|
+
/(weibo)__([\d\.]+)/i
|
299
|
+
// Weibo
|
300
|
+
],
|
301
|
+
[NAME, VERSION],
|
302
|
+
[
|
303
|
+
/quark(?:pc)?\/([-\w\.]+)/i
|
304
|
+
// Quark
|
305
|
+
],
|
306
|
+
[VERSION, [NAME, "Quark"]],
|
307
|
+
[
|
308
|
+
/\bddg\/([\w\.]+)/i
|
309
|
+
// DuckDuckGo
|
310
|
+
],
|
311
|
+
[VERSION, [NAME, "DuckDuckGo"]],
|
312
|
+
[
|
313
|
+
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
|
314
|
+
// UCBrowser
|
315
|
+
],
|
316
|
+
[VERSION, [NAME, "UC" + BROWSER]],
|
317
|
+
[
|
318
|
+
/microm.+\bqbcore\/([\w\.]+)/i,
|
319
|
+
// WeChat Desktop for Windows Built-in Browser
|
320
|
+
/\bqbcore\/([\w\.]+).+microm/i,
|
321
|
+
/micromessenger\/([\w\.]+)/i
|
322
|
+
// WeChat
|
323
|
+
],
|
324
|
+
[VERSION, [NAME, "WeChat"]],
|
325
|
+
[
|
326
|
+
/konqueror\/([\w\.]+)/i
|
327
|
+
// Konqueror
|
328
|
+
],
|
329
|
+
[VERSION, [NAME, "Konqueror"]],
|
330
|
+
[
|
331
|
+
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
|
332
|
+
// IE11
|
333
|
+
],
|
334
|
+
[VERSION, [NAME, "IE"]],
|
335
|
+
[
|
336
|
+
/ya(?:search)?browser\/([\w\.]+)/i
|
337
|
+
// Yandex
|
338
|
+
],
|
339
|
+
[VERSION, [NAME, "Yandex"]],
|
340
|
+
[
|
341
|
+
/slbrowser\/([\w\.]+)/i
|
342
|
+
// Smart Lenovo Browser
|
343
|
+
],
|
344
|
+
[VERSION, [NAME, "Smart Lenovo " + BROWSER]],
|
345
|
+
[
|
346
|
+
/(avast|avg)\/([\w\.]+)/i
|
347
|
+
// Avast/AVG Secure Browser
|
348
|
+
],
|
349
|
+
[[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION],
|
350
|
+
[
|
351
|
+
/\bfocus\/([\w\.]+)/i
|
352
|
+
// Firefox Focus
|
353
|
+
],
|
354
|
+
[VERSION, [NAME, FIREFOX + " Focus"]],
|
355
|
+
[
|
356
|
+
/\bopt\/([\w\.]+)/i
|
357
|
+
// Opera Touch
|
358
|
+
],
|
359
|
+
[VERSION, [NAME, OPERA + " Touch"]],
|
360
|
+
[
|
361
|
+
/coc_coc\w+\/([\w\.]+)/i
|
362
|
+
// Coc Coc Browser
|
363
|
+
],
|
364
|
+
[VERSION, [NAME, "Coc Coc"]],
|
365
|
+
[
|
366
|
+
/dolfin\/([\w\.]+)/i
|
367
|
+
// Dolphin
|
368
|
+
],
|
369
|
+
[VERSION, [NAME, "Dolphin"]],
|
370
|
+
[
|
371
|
+
/coast\/([\w\.]+)/i
|
372
|
+
// Opera Coast
|
373
|
+
],
|
374
|
+
[VERSION, [NAME, OPERA + " Coast"]],
|
375
|
+
[
|
376
|
+
/miuibrowser\/([\w\.]+)/i
|
377
|
+
// MIUI Browser
|
378
|
+
],
|
379
|
+
[VERSION, [NAME, "MIUI " + BROWSER]],
|
380
|
+
[
|
381
|
+
/fxios\/([-\w\.]+)/i
|
382
|
+
// Firefox for iOS
|
383
|
+
],
|
384
|
+
[VERSION, [NAME, FIREFOX]],
|
385
|
+
[
|
386
|
+
/\bqihu|(qi?ho?o?|360)browser/i
|
387
|
+
// 360
|
388
|
+
],
|
389
|
+
[[NAME, "360" + SUFFIX_BROWSER]],
|
390
|
+
[
|
391
|
+
/\b(qq)\/([\w\.]+)/i
|
392
|
+
// QQ
|
393
|
+
],
|
394
|
+
[[NAME, /(.+)/, "$1Browser"], VERSION],
|
395
|
+
[
|
396
|
+
/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
|
397
|
+
],
|
398
|
+
[[NAME, /(.+)/, "$1" + SUFFIX_BROWSER], VERSION],
|
399
|
+
[
|
400
|
+
// Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
|
401
|
+
/samsungbrowser\/([\w\.]+)/i
|
402
|
+
// Samsung Internet
|
403
|
+
],
|
404
|
+
[VERSION, [NAME, SAMSUNG + " Internet"]],
|
405
|
+
[
|
406
|
+
/(comodo_dragon)\/([\w\.]+)/i
|
407
|
+
// Comodo Dragon
|
408
|
+
],
|
409
|
+
[[NAME, /_/g, " "], VERSION],
|
410
|
+
[
|
411
|
+
/metasr[\/ ]?([\d\.]+)/i
|
412
|
+
// Sogou Explorer
|
413
|
+
],
|
414
|
+
[VERSION, [NAME, "Sogou Explorer"]],
|
415
|
+
[
|
416
|
+
/(sogou)mo\w+\/([\d\.]+)/i
|
417
|
+
// Sogou Mobile
|
418
|
+
],
|
419
|
+
[[NAME, "Sogou Mobile"], VERSION],
|
420
|
+
[
|
421
|
+
/(electron)\/([\w\.]+) safari/i,
|
422
|
+
// Electron-based App
|
423
|
+
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
|
424
|
+
// Tesla
|
425
|
+
/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i
|
426
|
+
// QQBrowser/2345 Browser
|
427
|
+
],
|
428
|
+
[NAME, VERSION],
|
429
|
+
[
|
430
|
+
/(lbbrowser|rekonq)/i,
|
431
|
+
// LieBao Browser/Rekonq
|
432
|
+
/\[(linkedin)app\]/i
|
433
|
+
// LinkedIn App for iOS & Android
|
434
|
+
],
|
435
|
+
[NAME],
|
436
|
+
[
|
437
|
+
// WebView
|
438
|
+
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
|
439
|
+
// Facebook App for iOS & Android
|
440
|
+
],
|
441
|
+
[[NAME, FACEBOOK], VERSION],
|
442
|
+
[
|
443
|
+
/(Klarna)\/([\w\.]+)/i,
|
444
|
+
// Klarna Shopping Browser for iOS & Android
|
445
|
+
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
|
446
|
+
// Kakao App
|
447
|
+
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
|
448
|
+
// Naver InApp
|
449
|
+
/safari (line)\/([\w\.]+)/i,
|
450
|
+
// Line App for iOS
|
451
|
+
/\b(line)\/([\w\.]+)\/iab/i,
|
452
|
+
// Line App for Android
|
453
|
+
/(alipay)client\/([\w\.]+)/i,
|
454
|
+
// Alipay
|
455
|
+
/(twitter)(?:and| f.+e\/([\w\.]+))/i,
|
456
|
+
// Twitter
|
457
|
+
/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i
|
458
|
+
// Chromium/Instagram/Snapchat
|
459
|
+
],
|
460
|
+
[NAME, VERSION],
|
461
|
+
[
|
462
|
+
/\bgsa\/([\w\.]+) .*safari\//i
|
463
|
+
// Google Search Appliance on iOS
|
464
|
+
],
|
465
|
+
[VERSION, [NAME, "GSA"]],
|
466
|
+
[
|
467
|
+
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
|
468
|
+
// TikTok
|
469
|
+
],
|
470
|
+
[VERSION, [NAME, "TikTok"]],
|
471
|
+
[
|
472
|
+
/headlesschrome(?:\/([\w\.]+)| )/i
|
473
|
+
// Chrome Headless
|
474
|
+
],
|
475
|
+
[VERSION, [NAME, CHROME + " Headless"]],
|
476
|
+
[
|
477
|
+
/ wv\).+(chrome)\/([\w\.]+)/i
|
478
|
+
// Chrome WebView
|
479
|
+
],
|
480
|
+
[[NAME, CHROME + " WebView"], VERSION],
|
481
|
+
[
|
482
|
+
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
|
483
|
+
// Android Browser
|
484
|
+
],
|
485
|
+
[VERSION, [NAME, "Android " + BROWSER]],
|
486
|
+
[
|
487
|
+
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
|
488
|
+
// Chrome/OmniWeb/Arora/Tizen/Nokia
|
489
|
+
],
|
490
|
+
[NAME, VERSION],
|
491
|
+
[
|
492
|
+
/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
|
493
|
+
// Mobile Safari
|
494
|
+
],
|
495
|
+
[VERSION, [NAME, "Mobile Safari"]],
|
496
|
+
[
|
497
|
+
/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
|
498
|
+
// Safari & Safari Mobile
|
499
|
+
],
|
500
|
+
[VERSION, NAME],
|
501
|
+
[
|
502
|
+
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
|
503
|
+
// Safari < 3.0
|
504
|
+
],
|
505
|
+
[NAME, [VERSION, strMapper, oldSafariMap]],
|
506
|
+
[
|
507
|
+
/(webkit|khtml)\/([\w\.]+)/i
|
508
|
+
],
|
509
|
+
[NAME, VERSION],
|
510
|
+
[
|
511
|
+
// Gecko based
|
512
|
+
/(navigator|netscape\d?)\/([-\w\.]+)/i
|
513
|
+
// Netscape
|
514
|
+
],
|
515
|
+
[[NAME, "Netscape"], VERSION],
|
516
|
+
[
|
517
|
+
/(wolvic)\/([\w\.]+)/i
|
518
|
+
// Wolvic
|
519
|
+
],
|
520
|
+
[NAME, VERSION],
|
521
|
+
[
|
522
|
+
/mobile vr; rv:([\w\.]+)\).+firefox/i
|
523
|
+
// Firefox Reality
|
524
|
+
],
|
525
|
+
[VERSION, [NAME, FIREFOX + " Reality"]],
|
526
|
+
[
|
527
|
+
/ekiohf.+(flow)\/([\w\.]+)/i,
|
528
|
+
// Flow
|
529
|
+
/(swiftfox)/i,
|
530
|
+
// Swiftfox
|
531
|
+
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
|
532
|
+
// IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
|
533
|
+
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
|
534
|
+
// Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
|
535
|
+
/(firefox)\/([\w\.]+)/i,
|
536
|
+
// Other Firefox-based
|
537
|
+
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
|
538
|
+
// Mozilla
|
539
|
+
// Other
|
540
|
+
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
541
|
+
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
|
542
|
+
/(links) \(([\w\.]+)/i
|
543
|
+
// Links
|
544
|
+
],
|
545
|
+
[NAME, [VERSION, /_/g, "."]],
|
546
|
+
[
|
547
|
+
/(cobalt)\/([\w\.]+)/i
|
548
|
+
// Cobalt
|
549
|
+
],
|
550
|
+
[NAME, [VERSION, /master.|lts./, ""]]
|
551
|
+
],
|
552
|
+
cpu: [
|
553
|
+
[
|
554
|
+
/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
|
555
|
+
// AMD64 (x64)
|
556
|
+
],
|
557
|
+
[[ARCHITECTURE, "amd64"]],
|
558
|
+
[
|
559
|
+
/(ia32(?=;))/i
|
560
|
+
// IA32 (quicktime)
|
561
|
+
],
|
562
|
+
[[ARCHITECTURE, lowerize]],
|
563
|
+
[
|
564
|
+
/((?:i[346]|x)86)[;\)]/i
|
565
|
+
// IA32 (x86)
|
566
|
+
],
|
567
|
+
[[ARCHITECTURE, "ia32"]],
|
568
|
+
[
|
569
|
+
/\b(aarch64|arm(v?8e?l?|_?64))\b/i
|
570
|
+
// ARM64
|
571
|
+
],
|
572
|
+
[[ARCHITECTURE, "arm64"]],
|
573
|
+
[
|
574
|
+
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
|
575
|
+
// ARMHF
|
576
|
+
],
|
577
|
+
[[ARCHITECTURE, "armhf"]],
|
578
|
+
[
|
579
|
+
// PocketPC mistakenly identified as PowerPC
|
580
|
+
/windows (ce|mobile); ppc;/i
|
581
|
+
],
|
582
|
+
[[ARCHITECTURE, "arm"]],
|
583
|
+
[
|
584
|
+
/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
|
585
|
+
// PowerPC
|
586
|
+
],
|
587
|
+
[[ARCHITECTURE, /ower/, EMPTY, lowerize]],
|
588
|
+
[
|
589
|
+
/(sun4\w)[;\)]/i
|
590
|
+
// SPARC
|
591
|
+
],
|
592
|
+
[[ARCHITECTURE, "sparc"]],
|
593
|
+
[
|
594
|
+
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
595
|
+
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
596
|
+
],
|
597
|
+
[[ARCHITECTURE, lowerize]]
|
598
|
+
],
|
599
|
+
device: [
|
600
|
+
[
|
601
|
+
//////////////////////////
|
602
|
+
// MOBILES & TABLETS
|
603
|
+
/////////////////////////
|
604
|
+
// Samsung
|
605
|
+
/\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
|
606
|
+
],
|
607
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
|
608
|
+
[
|
609
|
+
/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
610
|
+
/samsung[- ]((?!sm-[lr])[-\w]+)/i,
|
611
|
+
/sec-(sgh\w+)/i
|
612
|
+
],
|
613
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
|
614
|
+
[
|
615
|
+
// Apple
|
616
|
+
/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
|
617
|
+
// iPod/iPhone
|
618
|
+
],
|
619
|
+
[MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
|
620
|
+
[
|
621
|
+
/\((ipad);[-\w\),; ]+apple/i,
|
622
|
+
// iPad
|
623
|
+
/applecoremedia\/[\w\.]+ \((ipad)/i,
|
624
|
+
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
625
|
+
],
|
626
|
+
[MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
|
627
|
+
[
|
628
|
+
/(macintosh);/i
|
629
|
+
],
|
630
|
+
[MODEL, [VENDOR, APPLE]],
|
631
|
+
[
|
632
|
+
// Sharp
|
633
|
+
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
634
|
+
],
|
635
|
+
[MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
|
636
|
+
[
|
637
|
+
// Huawei
|
638
|
+
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
639
|
+
],
|
640
|
+
[MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
|
641
|
+
[
|
642
|
+
/(?:huawei|honor)([-\w ]+)[;\)]/i,
|
643
|
+
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
644
|
+
],
|
645
|
+
[MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
|
646
|
+
[
|
647
|
+
// Xiaomi
|
648
|
+
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
|
649
|
+
// Xiaomi POCO
|
650
|
+
/\b; (\w+) build\/hm\1/i,
|
651
|
+
// Xiaomi Hongmi 'numeric' models
|
652
|
+
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
|
653
|
+
// Xiaomi Hongmi
|
654
|
+
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
|
655
|
+
// Xiaomi Redmi
|
656
|
+
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
|
657
|
+
// Xiaomi Redmi 'numeric' models
|
658
|
+
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i
|
659
|
+
// Xiaomi Mi
|
660
|
+
],
|
661
|
+
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
|
662
|
+
[
|
663
|
+
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,
|
664
|
+
// Redmi Pad
|
665
|
+
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
|
666
|
+
// Mi Pad tablets
|
667
|
+
],
|
668
|
+
[[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
|
669
|
+
[
|
670
|
+
// OPPO
|
671
|
+
/; (\w+) bui.+ oppo/i,
|
672
|
+
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
673
|
+
],
|
674
|
+
[MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]],
|
675
|
+
[
|
676
|
+
/\b(opd2\d{3}a?) bui/i
|
677
|
+
],
|
678
|
+
[MODEL, [VENDOR, "OPPO"], [TYPE, TABLET]],
|
679
|
+
[
|
680
|
+
// Vivo
|
681
|
+
/vivo (\w+)(?: bui|\))/i,
|
682
|
+
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
683
|
+
],
|
684
|
+
[MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
|
685
|
+
[
|
686
|
+
// Realme
|
687
|
+
/\b(rmx[1-3]\d{3})(?: bui|;|\))/i
|
688
|
+
],
|
689
|
+
[MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
|
690
|
+
[
|
691
|
+
// Motorola
|
692
|
+
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
693
|
+
/\bmot(?:orola)?[- ](\w*)/i,
|
694
|
+
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
695
|
+
],
|
696
|
+
[MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
|
697
|
+
[
|
698
|
+
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
699
|
+
],
|
700
|
+
[MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
|
701
|
+
[
|
702
|
+
// LG
|
703
|
+
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
704
|
+
],
|
705
|
+
[MODEL, [VENDOR, LG], [TYPE, TABLET]],
|
706
|
+
[
|
707
|
+
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
708
|
+
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
709
|
+
/\blg-?([\d\w]+) bui/i
|
710
|
+
],
|
711
|
+
[MODEL, [VENDOR, LG], [TYPE, MOBILE]],
|
712
|
+
[
|
713
|
+
// Lenovo
|
714
|
+
/(ideatab[-\w ]+)/i,
|
715
|
+
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
716
|
+
],
|
717
|
+
[MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]],
|
718
|
+
[
|
719
|
+
// Nokia
|
720
|
+
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
721
|
+
/nokia[-_ ]?([-\w\.]*)/i
|
722
|
+
],
|
723
|
+
[[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]],
|
724
|
+
[
|
725
|
+
// Google
|
726
|
+
/(pixel c)\b/i
|
727
|
+
// Google Pixel C
|
728
|
+
],
|
729
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
|
730
|
+
[
|
731
|
+
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
|
732
|
+
// Google Pixel
|
733
|
+
],
|
734
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
|
735
|
+
[
|
736
|
+
// Sony
|
737
|
+
/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
738
|
+
],
|
739
|
+
[MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
|
740
|
+
[
|
741
|
+
/sony tablet [ps]/i,
|
742
|
+
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
743
|
+
],
|
744
|
+
[[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
|
745
|
+
[
|
746
|
+
// OnePlus
|
747
|
+
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
748
|
+
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
749
|
+
],
|
750
|
+
[MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]],
|
751
|
+
[
|
752
|
+
// Amazon
|
753
|
+
/(alexa)webm/i,
|
754
|
+
/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
|
755
|
+
// Kindle Fire without Silk / Echo Show
|
756
|
+
/(kf[a-z]+)( bui|\)).+silk\//i
|
757
|
+
// Kindle Fire HD
|
758
|
+
],
|
759
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
|
760
|
+
[
|
761
|
+
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
|
762
|
+
// Fire Phone
|
763
|
+
],
|
764
|
+
[[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
|
765
|
+
[
|
766
|
+
// BlackBerry
|
767
|
+
/(playbook);[-\w\),; ]+(rim)/i
|
768
|
+
// BlackBerry PlayBook
|
769
|
+
],
|
770
|
+
[MODEL, VENDOR, [TYPE, TABLET]],
|
771
|
+
[
|
772
|
+
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
773
|
+
/\(bb10; (\w+)/i
|
774
|
+
// BlackBerry 10
|
775
|
+
],
|
776
|
+
[MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
|
777
|
+
[
|
778
|
+
// Asus
|
779
|
+
/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
|
780
|
+
],
|
781
|
+
[MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
|
782
|
+
[
|
783
|
+
/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
|
784
|
+
],
|
785
|
+
[MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
|
786
|
+
[
|
787
|
+
// HTC
|
788
|
+
/(nexus 9)/i
|
789
|
+
// HTC Nexus 9
|
790
|
+
],
|
791
|
+
[MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
|
792
|
+
[
|
793
|
+
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
|
794
|
+
// HTC
|
795
|
+
// ZTE
|
796
|
+
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
797
|
+
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
|
798
|
+
// Alcatel/GeeksPhone/Nexian/Panasonic/Sony
|
799
|
+
],
|
800
|
+
[VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
|
801
|
+
[
|
802
|
+
// TCL
|
803
|
+
/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])\w*(\)| bui)/i
|
804
|
+
],
|
805
|
+
[MODEL, [VENDOR, "TCL"], [TYPE, TABLET]],
|
806
|
+
[
|
807
|
+
// itel
|
808
|
+
/(itel) ((\w+))/i
|
809
|
+
],
|
810
|
+
[[VENDOR, lowerize], MODEL, [TYPE, strMapper, { "tablet": ["p10001l", "w7001"], "*": "mobile" }]],
|
811
|
+
[
|
812
|
+
// Acer
|
813
|
+
/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
|
814
|
+
],
|
815
|
+
[MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
|
816
|
+
[
|
817
|
+
// Meizu
|
818
|
+
/droid.+; (m[1-5] note) bui/i,
|
819
|
+
/\bmz-([-\w]{2,})/i
|
820
|
+
],
|
821
|
+
[MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
|
822
|
+
[
|
823
|
+
// Ulefone
|
824
|
+
/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
|
825
|
+
],
|
826
|
+
[MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
|
827
|
+
[
|
828
|
+
// Nothing
|
829
|
+
/droid.+; (a(?:015|06[35]|142p?))/i
|
830
|
+
],
|
831
|
+
[MODEL, [VENDOR, "Nothing"], [TYPE, MOBILE]],
|
832
|
+
[
|
833
|
+
// MIXED
|
834
|
+
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
|
835
|
+
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
|
836
|
+
/(hp) ([\w ]+\w)/i,
|
837
|
+
// HP iPAQ
|
838
|
+
/(asus)-?(\w+)/i,
|
839
|
+
// Asus
|
840
|
+
/(microsoft); (lumia[\w ]+)/i,
|
841
|
+
// Microsoft Lumia
|
842
|
+
/(lenovo)[-_ ]?([-\w]+)/i,
|
843
|
+
// Lenovo
|
844
|
+
/(jolla)/i,
|
845
|
+
// Jolla
|
846
|
+
/(oppo) ?([\w ]+) bui/i
|
847
|
+
// OPPO
|
848
|
+
],
|
849
|
+
[VENDOR, MODEL, [TYPE, MOBILE]],
|
850
|
+
[
|
851
|
+
/(kobo)\s(ereader|touch)/i,
|
852
|
+
// Kobo
|
853
|
+
/(archos) (gamepad2?)/i,
|
854
|
+
// Archos
|
855
|
+
/(hp).+(touchpad(?!.+tablet)|tablet)/i,
|
856
|
+
// HP TouchPad
|
857
|
+
/(kindle)\/([\w\.]+)/i,
|
858
|
+
// Kindle
|
859
|
+
/(nook)[\w ]+build\/(\w+)/i,
|
860
|
+
// Nook
|
861
|
+
/(dell) (strea[kpr\d ]*[\dko])/i,
|
862
|
+
// Dell Streak
|
863
|
+
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
|
864
|
+
// Le Pan Tablets
|
865
|
+
/(trinity)[- ]*(t\d{3}) bui/i,
|
866
|
+
// Trinity Tablets
|
867
|
+
/(gigaset)[- ]+(q\w{1,9}) bui/i,
|
868
|
+
// Gigaset Tablets
|
869
|
+
/(vodafone) ([\w ]+)(?:\)| bui)/i
|
870
|
+
// Vodafone
|
871
|
+
],
|
872
|
+
[VENDOR, MODEL, [TYPE, TABLET]],
|
873
|
+
[
|
874
|
+
/(surface duo)/i
|
875
|
+
// Surface Duo
|
876
|
+
],
|
877
|
+
[MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
|
878
|
+
[
|
879
|
+
/droid [\d\.]+; (fp\du?)(?: b|\))/i
|
880
|
+
// Fairphone
|
881
|
+
],
|
882
|
+
[MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
|
883
|
+
[
|
884
|
+
/(u304aa)/i
|
885
|
+
// AT&T
|
886
|
+
],
|
887
|
+
[MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]],
|
888
|
+
[
|
889
|
+
/\bsie-(\w*)/i
|
890
|
+
// Siemens
|
891
|
+
],
|
892
|
+
[MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]],
|
893
|
+
[
|
894
|
+
/\b(rct\w+) b/i
|
895
|
+
// RCA Tablets
|
896
|
+
],
|
897
|
+
[MODEL, [VENDOR, "RCA"], [TYPE, TABLET]],
|
898
|
+
[
|
899
|
+
/\b(venue[\d ]{2,7}) b/i
|
900
|
+
// Dell Venue Tablets
|
901
|
+
],
|
902
|
+
[MODEL, [VENDOR, "Dell"], [TYPE, TABLET]],
|
903
|
+
[
|
904
|
+
/\b(q(?:mv|ta)\w+) b/i
|
905
|
+
// Verizon Tablet
|
906
|
+
],
|
907
|
+
[MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]],
|
908
|
+
[
|
909
|
+
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
|
910
|
+
// Barnes & Noble Tablet
|
911
|
+
],
|
912
|
+
[MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]],
|
913
|
+
[
|
914
|
+
/\b(tm\d{3}\w+) b/i
|
915
|
+
],
|
916
|
+
[MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]],
|
917
|
+
[
|
918
|
+
/\b(k88) b/i
|
919
|
+
// ZTE K Series Tablet
|
920
|
+
],
|
921
|
+
[MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]],
|
922
|
+
[
|
923
|
+
/\b(nx\d{3}j) b/i
|
924
|
+
// ZTE Nubia
|
925
|
+
],
|
926
|
+
[MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]],
|
927
|
+
[
|
928
|
+
/\b(gen\d{3}) b.+49h/i
|
929
|
+
// Swiss GEN Mobile
|
930
|
+
],
|
931
|
+
[MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]],
|
932
|
+
[
|
933
|
+
/\b(zur\d{3}) b/i
|
934
|
+
// Swiss ZUR Tablet
|
935
|
+
],
|
936
|
+
[MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]],
|
937
|
+
[
|
938
|
+
/\b((zeki)?tb.*\b) b/i
|
939
|
+
// Zeki Tablets
|
940
|
+
],
|
941
|
+
[MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]],
|
942
|
+
[
|
943
|
+
/\b([yr]\d{2}) b/i,
|
944
|
+
/\b(dragon[- ]+touch |dt)(\w{5}) b/i
|
945
|
+
// Dragon Touch Tablet
|
946
|
+
],
|
947
|
+
[[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]],
|
948
|
+
[
|
949
|
+
/\b(ns-?\w{0,9}) b/i
|
950
|
+
// Insignia Tablets
|
951
|
+
],
|
952
|
+
[MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]],
|
953
|
+
[
|
954
|
+
/\b((nxa|next)-?\w{0,9}) b/i
|
955
|
+
// NextBook Tablets
|
956
|
+
],
|
957
|
+
[MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]],
|
958
|
+
[
|
959
|
+
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
|
960
|
+
// Voice Xtreme Phones
|
961
|
+
],
|
962
|
+
[[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]],
|
963
|
+
[
|
964
|
+
/\b(lvtel\-)?(v1[12]) b/i
|
965
|
+
// LvTel Phones
|
966
|
+
],
|
967
|
+
[[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]],
|
968
|
+
[
|
969
|
+
/\b(ph-1) /i
|
970
|
+
// Essential PH-1
|
971
|
+
],
|
972
|
+
[MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]],
|
973
|
+
[
|
974
|
+
/\b(v(100md|700na|7011|917g).*\b) b/i
|
975
|
+
// Envizen Tablets
|
976
|
+
],
|
977
|
+
[MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]],
|
978
|
+
[
|
979
|
+
/\b(trio[-\w\. ]+) b/i
|
980
|
+
// MachSpeed Tablets
|
981
|
+
],
|
982
|
+
[MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]],
|
983
|
+
[
|
984
|
+
/\btu_(1491) b/i
|
985
|
+
// Rotor Tablets
|
986
|
+
],
|
987
|
+
[MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]],
|
988
|
+
[
|
989
|
+
/(shield[\w ]+) b/i
|
990
|
+
// Nvidia Shield Tablets
|
991
|
+
],
|
992
|
+
[MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]],
|
993
|
+
[
|
994
|
+
/(sprint) (\w+)/i
|
995
|
+
// Sprint Phones
|
996
|
+
],
|
997
|
+
[VENDOR, MODEL, [TYPE, MOBILE]],
|
998
|
+
[
|
999
|
+
/(kin\.[onetw]{3})/i
|
1000
|
+
// Microsoft Kin
|
1001
|
+
],
|
1002
|
+
[[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
|
1003
|
+
[
|
1004
|
+
/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
|
1005
|
+
// Zebra
|
1006
|
+
],
|
1007
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
|
1008
|
+
[
|
1009
|
+
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
1010
|
+
],
|
1011
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
|
1012
|
+
[
|
1013
|
+
///////////////////
|
1014
|
+
// SMARTTVS
|
1015
|
+
///////////////////
|
1016
|
+
/smart-tv.+(samsung)/i
|
1017
|
+
// Samsung
|
1018
|
+
],
|
1019
|
+
[VENDOR, [TYPE, SMARTTV]],
|
1020
|
+
[
|
1021
|
+
/hbbtv.+maple;(\d+)/i
|
1022
|
+
],
|
1023
|
+
[[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
|
1024
|
+
[
|
1025
|
+
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
1026
|
+
// LG SmartTV
|
1027
|
+
],
|
1028
|
+
[[VENDOR, LG], [TYPE, SMARTTV]],
|
1029
|
+
[
|
1030
|
+
/(apple) ?tv/i
|
1031
|
+
// Apple TV
|
1032
|
+
],
|
1033
|
+
[VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
|
1034
|
+
[
|
1035
|
+
/crkey/i
|
1036
|
+
// Google Chromecast
|
1037
|
+
],
|
1038
|
+
[[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
|
1039
|
+
[
|
1040
|
+
/droid.+aft(\w+)( bui|\))/i
|
1041
|
+
// Fire TV
|
1042
|
+
],
|
1043
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
|
1044
|
+
[
|
1045
|
+
/\(dtv[\);].+(aquos)/i,
|
1046
|
+
/(aquos-tv[\w ]+)\)/i
|
1047
|
+
// Sharp
|
1048
|
+
],
|
1049
|
+
[MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
|
1050
|
+
[
|
1051
|
+
/(bravia[\w ]+)( bui|\))/i
|
1052
|
+
// Sony
|
1053
|
+
],
|
1054
|
+
[MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
|
1055
|
+
[
|
1056
|
+
/(mitv-\w{5}) bui/i
|
1057
|
+
// Xiaomi
|
1058
|
+
],
|
1059
|
+
[MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
|
1060
|
+
[
|
1061
|
+
/Hbbtv.*(technisat) (.*);/i
|
1062
|
+
// TechniSAT
|
1063
|
+
],
|
1064
|
+
[VENDOR, MODEL, [TYPE, SMARTTV]],
|
1065
|
+
[
|
1066
|
+
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
|
1067
|
+
// Roku
|
1068
|
+
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
|
1069
|
+
// HbbTV devices
|
1070
|
+
],
|
1071
|
+
[[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]],
|
1072
|
+
[
|
1073
|
+
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
1074
|
+
// SmartTV from Unidentified Vendors
|
1075
|
+
],
|
1076
|
+
[[TYPE, SMARTTV]],
|
1077
|
+
[
|
1078
|
+
///////////////////
|
1079
|
+
// CONSOLES
|
1080
|
+
///////////////////
|
1081
|
+
/(ouya)/i,
|
1082
|
+
// Ouya
|
1083
|
+
/(nintendo) ([wids3utch]+)/i
|
1084
|
+
// Nintendo
|
1085
|
+
],
|
1086
|
+
[VENDOR, MODEL, [TYPE, CONSOLE]],
|
1087
|
+
[
|
1088
|
+
/droid.+; (shield) bui/i
|
1089
|
+
// Nvidia
|
1090
|
+
],
|
1091
|
+
[MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]],
|
1092
|
+
[
|
1093
|
+
/(playstation [345portablevi]+)/i
|
1094
|
+
// Playstation
|
1095
|
+
],
|
1096
|
+
[MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
|
1097
|
+
[
|
1098
|
+
/\b(xbox(?: one)?(?!; xbox))[\); ]/i
|
1099
|
+
// Microsoft Xbox
|
1100
|
+
],
|
1101
|
+
[MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
|
1102
|
+
[
|
1103
|
+
///////////////////
|
1104
|
+
// WEARABLES
|
1105
|
+
///////////////////
|
1106
|
+
/\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i
|
1107
|
+
// Samsung Galaxy Watch
|
1108
|
+
],
|
1109
|
+
[MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]],
|
1110
|
+
[
|
1111
|
+
/((pebble))app/i
|
1112
|
+
// Pebble
|
1113
|
+
],
|
1114
|
+
[VENDOR, MODEL, [TYPE, WEARABLE]],
|
1115
|
+
[
|
1116
|
+
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
|
1117
|
+
// Apple Watch
|
1118
|
+
],
|
1119
|
+
[MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
|
1120
|
+
[
|
1121
|
+
/droid.+; (glass) \d/i
|
1122
|
+
// Google Glass
|
1123
|
+
],
|
1124
|
+
[MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]],
|
1125
|
+
[
|
1126
|
+
/droid.+; (wt63?0{2,3})\)/i
|
1127
|
+
],
|
1128
|
+
[MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
|
1129
|
+
[
|
1130
|
+
/(quest( \d| pro)?)/i
|
1131
|
+
// Oculus Quest
|
1132
|
+
],
|
1133
|
+
[MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]],
|
1134
|
+
[
|
1135
|
+
///////////////////
|
1136
|
+
// EMBEDDED
|
1137
|
+
///////////////////
|
1138
|
+
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
|
1139
|
+
// Tesla
|
1140
|
+
],
|
1141
|
+
[VENDOR, [TYPE, EMBEDDED]],
|
1142
|
+
[
|
1143
|
+
/(aeobc)\b/i
|
1144
|
+
// Echo Dot
|
1145
|
+
],
|
1146
|
+
[MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
|
1147
|
+
[
|
1148
|
+
////////////////////
|
1149
|
+
// MIXED (GENERIC)
|
1150
|
+
///////////////////
|
1151
|
+
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i
|
1152
|
+
// Android Phones from Unidentified Vendors
|
1153
|
+
],
|
1154
|
+
[MODEL, [TYPE, MOBILE]],
|
1155
|
+
[
|
1156
|
+
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
|
1157
|
+
// Android Tablets from Unidentified Vendors
|
1158
|
+
],
|
1159
|
+
[MODEL, [TYPE, TABLET]],
|
1160
|
+
[
|
1161
|
+
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
|
1162
|
+
// Unidentifiable Tablet
|
1163
|
+
],
|
1164
|
+
[[TYPE, TABLET]],
|
1165
|
+
[
|
1166
|
+
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
|
1167
|
+
// Unidentifiable Mobile
|
1168
|
+
],
|
1169
|
+
[[TYPE, MOBILE]],
|
1170
|
+
[
|
1171
|
+
/(android[-\w\. ]{0,9});.+buil/i
|
1172
|
+
// Generic Android Device
|
1173
|
+
],
|
1174
|
+
[MODEL, [VENDOR, "Generic"]]
|
1175
|
+
],
|
1176
|
+
engine: [
|
1177
|
+
[
|
1178
|
+
/windows.+ edge\/([\w\.]+)/i
|
1179
|
+
// EdgeHTML
|
1180
|
+
],
|
1181
|
+
[VERSION, [NAME, EDGE + "HTML"]],
|
1182
|
+
[
|
1183
|
+
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
|
1184
|
+
// Blink
|
1185
|
+
],
|
1186
|
+
[VERSION, [NAME, "Blink"]],
|
1187
|
+
[
|
1188
|
+
/(presto)\/([\w\.]+)/i,
|
1189
|
+
// Presto
|
1190
|
+
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
1191
|
+
// WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
|
1192
|
+
/ekioh(flow)\/([\w\.]+)/i,
|
1193
|
+
// Flow
|
1194
|
+
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
|
1195
|
+
// KHTML/Tasman/Links
|
1196
|
+
/(icab)[\/ ]([23]\.[\d\.]+)/i,
|
1197
|
+
// iCab
|
1198
|
+
/\b(libweb)/i
|
1199
|
+
],
|
1200
|
+
[NAME, VERSION],
|
1201
|
+
[
|
1202
|
+
/rv\:([\w\.]{1,9})\b.+(gecko)/i
|
1203
|
+
// Gecko
|
1204
|
+
],
|
1205
|
+
[VERSION, NAME]
|
1206
|
+
],
|
1207
|
+
os: [
|
1208
|
+
[
|
1209
|
+
// Windows
|
1210
|
+
/microsoft (windows) (vista|xp)/i
|
1211
|
+
// Windows (iTunes)
|
1212
|
+
],
|
1213
|
+
[NAME, VERSION],
|
1214
|
+
[
|
1215
|
+
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i
|
1216
|
+
// Windows Phone
|
1217
|
+
],
|
1218
|
+
[NAME, [VERSION, strMapper, windowsVersionMap]],
|
1219
|
+
[
|
1220
|
+
/windows nt 6\.2; (arm)/i,
|
1221
|
+
// Windows RT
|
1222
|
+
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
1223
|
+
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
1224
|
+
],
|
1225
|
+
[[VERSION, strMapper, windowsVersionMap], [NAME, "Windows"]],
|
1226
|
+
[
|
1227
|
+
// iOS/macOS
|
1228
|
+
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
|
1229
|
+
// iOS
|
1230
|
+
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
1231
|
+
/cfnetwork\/.+darwin/i
|
1232
|
+
],
|
1233
|
+
[[VERSION, /_/g, "."], [NAME, "iOS"]],
|
1234
|
+
[
|
1235
|
+
/(mac os x) ?([\w\. ]*)/i,
|
1236
|
+
/(macintosh|mac_powerpc\b)(?!.+haiku)/i
|
1237
|
+
// Mac OS
|
1238
|
+
],
|
1239
|
+
[[NAME, MAC_OS], [VERSION, /_/g, "."]],
|
1240
|
+
[
|
1241
|
+
// Mobile OSes
|
1242
|
+
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
|
1243
|
+
// Android-x86/HarmonyOS
|
1244
|
+
],
|
1245
|
+
[VERSION, NAME],
|
1246
|
+
[
|
1247
|
+
// Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
|
1248
|
+
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
|
1249
|
+
/(blackberry)\w*\/([\w\.]*)/i,
|
1250
|
+
// Blackberry
|
1251
|
+
/(tizen|kaios)[\/ ]([\w\.]+)/i,
|
1252
|
+
// Tizen/KaiOS
|
1253
|
+
/\((series40);/i
|
1254
|
+
// Series 40
|
1255
|
+
],
|
1256
|
+
[NAME, VERSION],
|
1257
|
+
[
|
1258
|
+
/\(bb(10);/i
|
1259
|
+
// BlackBerry 10
|
1260
|
+
],
|
1261
|
+
[VERSION, [NAME, BLACKBERRY]],
|
1262
|
+
[
|
1263
|
+
/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
|
1264
|
+
// Symbian
|
1265
|
+
],
|
1266
|
+
[VERSION, [NAME, "Symbian"]],
|
1267
|
+
[
|
1268
|
+
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
|
1269
|
+
// Firefox OS
|
1270
|
+
],
|
1271
|
+
[VERSION, [NAME, FIREFOX + " OS"]],
|
1272
|
+
[
|
1273
|
+
/web0s;.+rt(tv)/i,
|
1274
|
+
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
|
1275
|
+
// WebOS
|
1276
|
+
],
|
1277
|
+
[VERSION, [NAME, "webOS"]],
|
1278
|
+
[
|
1279
|
+
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
|
1280
|
+
// watchOS
|
1281
|
+
],
|
1282
|
+
[VERSION, [NAME, "watchOS"]],
|
1283
|
+
[
|
1284
|
+
// Google Chromecast
|
1285
|
+
/crkey\/([\d\.]+)/i
|
1286
|
+
// Google Chromecast
|
1287
|
+
],
|
1288
|
+
[VERSION, [NAME, CHROME + "cast"]],
|
1289
|
+
[
|
1290
|
+
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
|
1291
|
+
// Chromium OS
|
1292
|
+
],
|
1293
|
+
[[NAME, CHROMIUM_OS], VERSION],
|
1294
|
+
[
|
1295
|
+
// Smart TVs
|
1296
|
+
/panasonic;(viera)/i,
|
1297
|
+
// Panasonic Viera
|
1298
|
+
/(netrange)mmh/i,
|
1299
|
+
// Netrange
|
1300
|
+
/(nettv)\/(\d+\.[\w\.]+)/i,
|
1301
|
+
// NetTV
|
1302
|
+
// Console
|
1303
|
+
/(nintendo|playstation) ([wids345portablevuch]+)/i,
|
1304
|
+
// Nintendo/Playstation
|
1305
|
+
/(xbox); +xbox ([^\);]+)/i,
|
1306
|
+
// Microsoft Xbox (360, One, X, S, Series X, Series S)
|
1307
|
+
// Other
|
1308
|
+
/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
|
1309
|
+
// Joli/Palm
|
1310
|
+
/(mint)[\/\(\) ]?(\w*)/i,
|
1311
|
+
// Mint
|
1312
|
+
/(mageia|vectorlinux)[; ]/i,
|
1313
|
+
// Mageia/VectorLinux
|
1314
|
+
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
1315
|
+
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
1316
|
+
/(hurd|linux) ?([\w\.]*)/i,
|
1317
|
+
// Hurd/Linux
|
1318
|
+
/(gnu) ?([\w\.]*)/i,
|
1319
|
+
// GNU
|
1320
|
+
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
|
1321
|
+
// FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
1322
|
+
/(haiku) (\w+)/i
|
1323
|
+
// Haiku
|
1324
|
+
],
|
1325
|
+
[NAME, VERSION],
|
1326
|
+
[
|
1327
|
+
/(sunos) ?([\w\.\d]*)/i
|
1328
|
+
// Solaris
|
1329
|
+
],
|
1330
|
+
[[NAME, "Solaris"], VERSION],
|
1331
|
+
[
|
1332
|
+
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
|
1333
|
+
// Solaris
|
1334
|
+
/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
|
1335
|
+
// AIX
|
1336
|
+
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
|
1337
|
+
// BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
|
1338
|
+
/(unix) ?([\w\.]*)/i
|
1339
|
+
// UNIX
|
1340
|
+
],
|
1341
|
+
[NAME, VERSION]
|
1342
|
+
]
|
1343
|
+
};
|
1344
|
+
var UAParser2 = function(ua, extensions) {
|
1345
|
+
if (typeof ua === OBJ_TYPE) {
|
1346
|
+
extensions = ua;
|
1347
|
+
ua = undefined2;
|
1348
|
+
}
|
1349
|
+
if (!(this instanceof UAParser2)) {
|
1350
|
+
return new UAParser2(ua, extensions).getResult();
|
1351
|
+
}
|
1352
|
+
var _navigator = typeof window2 !== UNDEF_TYPE && window2.navigator ? window2.navigator : undefined2;
|
1353
|
+
var _ua = ua || (_navigator && _navigator.userAgent ? _navigator.userAgent : EMPTY);
|
1354
|
+
var _uach = _navigator && _navigator.userAgentData ? _navigator.userAgentData : undefined2;
|
1355
|
+
var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
|
1356
|
+
var _isSelfNav = _navigator && _navigator.userAgent == _ua;
|
1357
|
+
this.getBrowser = function() {
|
1358
|
+
var _browser = {};
|
1359
|
+
_browser[NAME] = undefined2;
|
1360
|
+
_browser[VERSION] = undefined2;
|
1361
|
+
rgxMapper.call(_browser, _ua, _rgxmap.browser);
|
1362
|
+
_browser[MAJOR] = majorize(_browser[VERSION]);
|
1363
|
+
if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {
|
1364
|
+
_browser[NAME] = "Brave";
|
1365
|
+
}
|
1366
|
+
return _browser;
|
1367
|
+
};
|
1368
|
+
this.getCPU = function() {
|
1369
|
+
var _cpu = {};
|
1370
|
+
_cpu[ARCHITECTURE] = undefined2;
|
1371
|
+
rgxMapper.call(_cpu, _ua, _rgxmap.cpu);
|
1372
|
+
return _cpu;
|
1373
|
+
};
|
1374
|
+
this.getDevice = function() {
|
1375
|
+
var _device = {};
|
1376
|
+
_device[VENDOR] = undefined2;
|
1377
|
+
_device[MODEL] = undefined2;
|
1378
|
+
_device[TYPE] = undefined2;
|
1379
|
+
rgxMapper.call(_device, _ua, _rgxmap.device);
|
1380
|
+
if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {
|
1381
|
+
_device[TYPE] = MOBILE;
|
1382
|
+
}
|
1383
|
+
if (_isSelfNav && _device[MODEL] == "Macintosh" && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {
|
1384
|
+
_device[MODEL] = "iPad";
|
1385
|
+
_device[TYPE] = TABLET;
|
1386
|
+
}
|
1387
|
+
return _device;
|
1388
|
+
};
|
1389
|
+
this.getEngine = function() {
|
1390
|
+
var _engine = {};
|
1391
|
+
_engine[NAME] = undefined2;
|
1392
|
+
_engine[VERSION] = undefined2;
|
1393
|
+
rgxMapper.call(_engine, _ua, _rgxmap.engine);
|
1394
|
+
return _engine;
|
1395
|
+
};
|
1396
|
+
this.getOS = function() {
|
1397
|
+
var _os = {};
|
1398
|
+
_os[NAME] = undefined2;
|
1399
|
+
_os[VERSION] = undefined2;
|
1400
|
+
rgxMapper.call(_os, _ua, _rgxmap.os);
|
1401
|
+
if (_isSelfNav && !_os[NAME] && _uach && _uach.platform && _uach.platform != "Unknown") {
|
1402
|
+
_os[NAME] = _uach.platform.replace(/chrome os/i, CHROMIUM_OS).replace(/macos/i, MAC_OS);
|
1403
|
+
}
|
1404
|
+
return _os;
|
1405
|
+
};
|
1406
|
+
this.getResult = function() {
|
1407
|
+
return {
|
1408
|
+
ua: this.getUA(),
|
1409
|
+
browser: this.getBrowser(),
|
1410
|
+
engine: this.getEngine(),
|
1411
|
+
os: this.getOS(),
|
1412
|
+
device: this.getDevice(),
|
1413
|
+
cpu: this.getCPU()
|
1414
|
+
};
|
1415
|
+
};
|
1416
|
+
this.getUA = function() {
|
1417
|
+
return _ua;
|
1418
|
+
};
|
1419
|
+
this.setUA = function(ua2) {
|
1420
|
+
_ua = typeof ua2 === STR_TYPE && ua2.length > UA_MAX_LENGTH ? trim(ua2, UA_MAX_LENGTH) : ua2;
|
1421
|
+
return this;
|
1422
|
+
};
|
1423
|
+
this.setUA(_ua);
|
1424
|
+
return this;
|
1425
|
+
};
|
1426
|
+
UAParser2.VERSION = LIBVERSION;
|
1427
|
+
UAParser2.BROWSER = enumerize([NAME, VERSION, MAJOR]);
|
1428
|
+
UAParser2.CPU = enumerize([ARCHITECTURE]);
|
1429
|
+
UAParser2.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
|
1430
|
+
UAParser2.ENGINE = UAParser2.OS = enumerize([NAME, VERSION]);
|
1431
|
+
if (typeof exports !== UNDEF_TYPE) {
|
1432
|
+
if (typeof module !== UNDEF_TYPE && module.exports) {
|
1433
|
+
exports = module.exports = UAParser2;
|
1434
|
+
}
|
1435
|
+
exports.UAParser = UAParser2;
|
1436
|
+
} else {
|
1437
|
+
if (typeof define === FUNC_TYPE && define.amd) {
|
1438
|
+
define(function() {
|
1439
|
+
return UAParser2;
|
1440
|
+
});
|
1441
|
+
} else if (typeof window2 !== UNDEF_TYPE) {
|
1442
|
+
window2.UAParser = UAParser2;
|
1443
|
+
}
|
1444
|
+
}
|
1445
|
+
var $ = typeof window2 !== UNDEF_TYPE && (window2.jQuery || window2.Zepto);
|
1446
|
+
if ($ && !$.ua) {
|
1447
|
+
var parser = new UAParser2();
|
1448
|
+
$.ua = parser.getResult();
|
1449
|
+
$.ua.get = function() {
|
1450
|
+
return parser.getUA();
|
1451
|
+
};
|
1452
|
+
$.ua.set = function(ua) {
|
1453
|
+
parser.setUA(ua);
|
1454
|
+
var result = parser.getResult();
|
1455
|
+
for (var prop in result) {
|
1456
|
+
$.ua[prop] = result[prop];
|
1457
|
+
}
|
1458
|
+
};
|
1459
|
+
}
|
1460
|
+
})(typeof window === "object" ? window : exports);
|
1461
|
+
}
|
1462
|
+
});
|
1463
|
+
|
119
1464
|
// index.ts
|
120
1465
|
init_react_import();
|
121
1466
|
|
@@ -192,6 +1537,17 @@ init_react_import();
|
|
192
1537
|
|
193
1538
|
// ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
|
194
1539
|
init_react_import();
|
1540
|
+
import { forwardRef as forwardRef2, createElement as createElement2 } from "react";
|
1541
|
+
|
1542
|
+
// ../../node_modules/lucide-react/dist/esm/shared/src/utils.js
|
1543
|
+
init_react_import();
|
1544
|
+
var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
1545
|
+
var mergeClasses = (...classes) => classes.filter((className, index, array) => {
|
1546
|
+
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
|
1547
|
+
}).join(" ").trim();
|
1548
|
+
|
1549
|
+
// ../../node_modules/lucide-react/dist/esm/Icon.js
|
1550
|
+
init_react_import();
|
195
1551
|
import { forwardRef, createElement } from "react";
|
196
1552
|
|
197
1553
|
// ../../node_modules/lucide-react/dist/esm/defaultAttributes.js
|
@@ -208,28 +1564,55 @@ var defaultAttributes = {
|
|
208
1564
|
strokeLinejoin: "round"
|
209
1565
|
};
|
210
1566
|
|
1567
|
+
// ../../node_modules/lucide-react/dist/esm/Icon.js
|
1568
|
+
var Icon = forwardRef(
|
1569
|
+
(_a, ref) => {
|
1570
|
+
var _b = _a, {
|
1571
|
+
color = "currentColor",
|
1572
|
+
size = 24,
|
1573
|
+
strokeWidth = 2,
|
1574
|
+
absoluteStrokeWidth,
|
1575
|
+
className = "",
|
1576
|
+
children,
|
1577
|
+
iconNode
|
1578
|
+
} = _b, rest = __objRest(_b, [
|
1579
|
+
"color",
|
1580
|
+
"size",
|
1581
|
+
"strokeWidth",
|
1582
|
+
"absoluteStrokeWidth",
|
1583
|
+
"className",
|
1584
|
+
"children",
|
1585
|
+
"iconNode"
|
1586
|
+
]);
|
1587
|
+
return createElement(
|
1588
|
+
"svg",
|
1589
|
+
__spreadValues(__spreadProps(__spreadValues({
|
1590
|
+
ref
|
1591
|
+
}, defaultAttributes), {
|
1592
|
+
width: size,
|
1593
|
+
height: size,
|
1594
|
+
stroke: color,
|
1595
|
+
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
1596
|
+
className: mergeClasses("lucide", className)
|
1597
|
+
}), rest),
|
1598
|
+
[
|
1599
|
+
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
1600
|
+
...Array.isArray(children) ? children : [children]
|
1601
|
+
]
|
1602
|
+
);
|
1603
|
+
}
|
1604
|
+
);
|
1605
|
+
|
211
1606
|
// ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
|
212
|
-
var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().trim();
|
213
1607
|
var createLucideIcon = (iconName, iconNode) => {
|
214
|
-
const Component =
|
1608
|
+
const Component = forwardRef2(
|
215
1609
|
(_a, ref) => {
|
216
|
-
var _b = _a, {
|
217
|
-
return
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
width: size,
|
223
|
-
height: size,
|
224
|
-
stroke: color,
|
225
|
-
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
226
|
-
className: ["lucide", `lucide-${toKebabCase(iconName)}`, className].join(" ")
|
227
|
-
}), rest),
|
228
|
-
[
|
229
|
-
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
230
|
-
...Array.isArray(children) ? children : [children]
|
231
|
-
]
|
232
|
-
);
|
1610
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
1611
|
+
return createElement2(Icon, __spreadValues({
|
1612
|
+
ref,
|
1613
|
+
iconNode,
|
1614
|
+
className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className)
|
1615
|
+
}, props));
|
233
1616
|
}
|
234
1617
|
);
|
235
1618
|
Component.displayName = `${iconName}`;
|
@@ -248,17 +1631,10 @@ import { useContext as useContext2, useMemo } from "react";
|
|
248
1631
|
|
249
1632
|
// ../core/components/DropZone/context.tsx
|
250
1633
|
init_react_import();
|
251
|
-
import { createContext, useCallback, useState } from "react";
|
252
|
-
import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
|
253
|
-
var dropZoneContext = createContext(null);
|
254
|
-
|
255
|
-
// ../core/components/Puck/context.tsx
|
256
|
-
init_react_import();
|
257
1634
|
import {
|
258
|
-
createContext
|
259
|
-
|
260
|
-
|
261
|
-
useState as useState4
|
1635
|
+
createContext,
|
1636
|
+
useCallback,
|
1637
|
+
useState
|
262
1638
|
} from "react";
|
263
1639
|
|
264
1640
|
// ../core/lib/get-item.ts
|
@@ -271,6 +1647,31 @@ var rootDroppableId = "default-zone";
|
|
271
1647
|
// ../core/lib/setup-zone.ts
|
272
1648
|
init_react_import();
|
273
1649
|
|
1650
|
+
// ../core/lib/get-zone-id.ts
|
1651
|
+
init_react_import();
|
1652
|
+
var getZoneId = (zoneCompound) => {
|
1653
|
+
if (!zoneCompound) {
|
1654
|
+
return [];
|
1655
|
+
}
|
1656
|
+
if (zoneCompound && zoneCompound.indexOf(":") > -1) {
|
1657
|
+
return zoneCompound.split(":");
|
1658
|
+
}
|
1659
|
+
return [rootDroppableId, zoneCompound];
|
1660
|
+
};
|
1661
|
+
|
1662
|
+
// ../core/components/DropZone/context.tsx
|
1663
|
+
import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
|
1664
|
+
var dropZoneContext = createContext(null);
|
1665
|
+
|
1666
|
+
// ../core/components/Puck/context.tsx
|
1667
|
+
init_react_import();
|
1668
|
+
import {
|
1669
|
+
createContext as createContext2,
|
1670
|
+
useContext,
|
1671
|
+
useEffect as useEffect3,
|
1672
|
+
useState as useState4
|
1673
|
+
} from "react";
|
1674
|
+
|
274
1675
|
// ../core/components/ViewportControls/default-viewports.ts
|
275
1676
|
init_react_import();
|
276
1677
|
var defaultViewports = [
|
@@ -279,6 +1680,9 @@ var defaultViewports = [
|
|
279
1680
|
{ width: 1280, height: "auto", icon: "Monitor", label: "Large" }
|
280
1681
|
];
|
281
1682
|
|
1683
|
+
// ../core/components/Puck/context.tsx
|
1684
|
+
var import_ua_parser_js = __toESM(require_ua_parser());
|
1685
|
+
|
282
1686
|
// ../core/lib/use-resolved-permissions.ts
|
283
1687
|
init_react_import();
|
284
1688
|
import { useCallback as useCallback2, useEffect, useState as useState2 } from "react";
|
@@ -346,6 +1750,7 @@ var defaultContext = {
|
|
346
1750
|
status: "LOADING",
|
347
1751
|
setStatus: () => null,
|
348
1752
|
iframe: {},
|
1753
|
+
safariFallbackMode: false,
|
349
1754
|
globalPermissions: {},
|
350
1755
|
getPermissions: () => ({}),
|
351
1756
|
refreshPermissions: () => null
|
@@ -365,18 +1770,6 @@ function useAppContext() {
|
|
365
1770
|
});
|
366
1771
|
}
|
367
1772
|
|
368
|
-
// ../core/lib/get-zone-id.ts
|
369
|
-
init_react_import();
|
370
|
-
var getZoneId = (zoneCompound) => {
|
371
|
-
if (!zoneCompound) {
|
372
|
-
return [];
|
373
|
-
}
|
374
|
-
if (zoneCompound && zoneCompound.indexOf(":") > -1) {
|
375
|
-
return zoneCompound.split(":");
|
376
|
-
}
|
377
|
-
return [rootDroppableId, zoneCompound];
|
378
|
-
};
|
379
|
-
|
380
1773
|
// ../core/lib/use-breadcrumbs.ts
|
381
1774
|
var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
|
382
1775
|
const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
|
@@ -570,12 +1963,11 @@ var scrollIntoView = (el) => {
|
|
570
1963
|
// ../core/lib/get-frame.ts
|
571
1964
|
init_react_import();
|
572
1965
|
var getFrame = () => {
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
return frameEl.contentDocument || document;
|
1966
|
+
let frame = document.querySelector("#preview-frame");
|
1967
|
+
if ((frame == null ? void 0 : frame.tagName) === "IFRAME") {
|
1968
|
+
frame = frame.contentDocument;
|
577
1969
|
}
|
578
|
-
return
|
1970
|
+
return frame;
|
579
1971
|
};
|
580
1972
|
|
581
1973
|
// src/HeadingAnalyzer.tsx
|
@@ -756,9 +2148,25 @@ classnames/index.js:
|
|
756
2148
|
http://jedwatson.github.io/classnames
|
757
2149
|
*)
|
758
2150
|
|
2151
|
+
lucide-react/dist/esm/shared/src/utils.js:
|
2152
|
+
(**
|
2153
|
+
* @license lucide-react v0.468.0 - ISC
|
2154
|
+
*
|
2155
|
+
* This source code is licensed under the ISC license.
|
2156
|
+
* See the LICENSE file in the root directory of this source tree.
|
2157
|
+
*)
|
2158
|
+
|
759
2159
|
lucide-react/dist/esm/defaultAttributes.js:
|
760
2160
|
(**
|
761
|
-
* @license lucide-react v0.
|
2161
|
+
* @license lucide-react v0.468.0 - ISC
|
2162
|
+
*
|
2163
|
+
* This source code is licensed under the ISC license.
|
2164
|
+
* See the LICENSE file in the root directory of this source tree.
|
2165
|
+
*)
|
2166
|
+
|
2167
|
+
lucide-react/dist/esm/Icon.js:
|
2168
|
+
(**
|
2169
|
+
* @license lucide-react v0.468.0 - ISC
|
762
2170
|
*
|
763
2171
|
* This source code is licensed under the ISC license.
|
764
2172
|
* See the LICENSE file in the root directory of this source tree.
|
@@ -766,7 +2174,7 @@ lucide-react/dist/esm/defaultAttributes.js:
|
|
766
2174
|
|
767
2175
|
lucide-react/dist/esm/createLucideIcon.js:
|
768
2176
|
(**
|
769
|
-
* @license lucide-react v0.
|
2177
|
+
* @license lucide-react v0.468.0 - ISC
|
770
2178
|
*
|
771
2179
|
* This source code is licensed under the ISC license.
|
772
2180
|
* See the LICENSE file in the root directory of this source tree.
|
@@ -774,7 +2182,7 @@ lucide-react/dist/esm/createLucideIcon.js:
|
|
774
2182
|
|
775
2183
|
lucide-react/dist/esm/icons/chevron-right.js:
|
776
2184
|
(**
|
777
|
-
* @license lucide-react v0.
|
2185
|
+
* @license lucide-react v0.468.0 - ISC
|
778
2186
|
*
|
779
2187
|
* This source code is licensed under the ISC license.
|
780
2188
|
* See the LICENSE file in the root directory of this source tree.
|
@@ -782,7 +2190,7 @@ lucide-react/dist/esm/icons/chevron-right.js:
|
|
782
2190
|
|
783
2191
|
lucide-react/dist/esm/lucide-react.js:
|
784
2192
|
(**
|
785
|
-
* @license lucide-react v0.
|
2193
|
+
* @license lucide-react v0.468.0 - ISC
|
786
2194
|
*
|
787
2195
|
* This source code is licensed under the ISC license.
|
788
2196
|
* See the LICENSE file in the root directory of this source tree.
|