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