@measured/puck-plugin-heading-analyzer 0.17.0-canary.fcdf346 → 0.17.0-canary.fe9321f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +1397 -47
  2. package/dist/index.mjs +1405 -51
  3. package/package.json +3 -3
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 (!arg) continue;
81
- var argType = typeof arg;
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));
81
+ }
82
+ }
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);
101
102
  }
102
103
  }
103
- return classes.join(" ");
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
 
@@ -248,17 +1593,10 @@ import { useContext as useContext2, useMemo } from "react";
248
1593
 
249
1594
  // ../core/components/DropZone/context.tsx
250
1595
  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
1596
  import {
258
- createContext as createContext2,
259
- useContext,
260
- useEffect as useEffect3,
261
- useState as useState4
1597
+ createContext,
1598
+ useCallback,
1599
+ useState
262
1600
  } from "react";
263
1601
 
264
1602
  // ../core/lib/get-item.ts
@@ -271,6 +1609,31 @@ var rootDroppableId = "default-zone";
271
1609
  // ../core/lib/setup-zone.ts
272
1610
  init_react_import();
273
1611
 
1612
+ // ../core/lib/get-zone-id.ts
1613
+ init_react_import();
1614
+ var getZoneId = (zoneCompound) => {
1615
+ if (!zoneCompound) {
1616
+ return [];
1617
+ }
1618
+ if (zoneCompound && zoneCompound.indexOf(":") > -1) {
1619
+ return zoneCompound.split(":");
1620
+ }
1621
+ return [rootDroppableId, zoneCompound];
1622
+ };
1623
+
1624
+ // ../core/components/DropZone/context.tsx
1625
+ import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
1626
+ var dropZoneContext = createContext(null);
1627
+
1628
+ // ../core/components/Puck/context.tsx
1629
+ init_react_import();
1630
+ import {
1631
+ createContext as createContext2,
1632
+ useContext,
1633
+ useEffect as useEffect3,
1634
+ useState as useState4
1635
+ } from "react";
1636
+
274
1637
  // ../core/components/ViewportControls/default-viewports.ts
275
1638
  init_react_import();
276
1639
  var defaultViewports = [
@@ -279,6 +1642,9 @@ var defaultViewports = [
279
1642
  { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
280
1643
  ];
281
1644
 
1645
+ // ../core/components/Puck/context.tsx
1646
+ var import_ua_parser_js = __toESM(require_ua_parser());
1647
+
282
1648
  // ../core/lib/use-resolved-permissions.ts
283
1649
  init_react_import();
284
1650
  import { useCallback as useCallback2, useEffect, useState as useState2 } from "react";
@@ -346,6 +1712,7 @@ var defaultContext = {
346
1712
  status: "LOADING",
347
1713
  setStatus: () => null,
348
1714
  iframe: {},
1715
+ safariFallbackMode: false,
349
1716
  globalPermissions: {},
350
1717
  getPermissions: () => ({}),
351
1718
  refreshPermissions: () => null
@@ -365,18 +1732,6 @@ function useAppContext() {
365
1732
  });
366
1733
  }
367
1734
 
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
1735
  // ../core/lib/use-breadcrumbs.ts
381
1736
  var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
382
1737
  const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
@@ -570,12 +1925,11 @@ var scrollIntoView = (el) => {
570
1925
  // ../core/lib/get-frame.ts
571
1926
  init_react_import();
572
1927
  var getFrame = () => {
573
- if (typeof window === "undefined") return;
574
- let frameEl = document.querySelector("#preview-frame");
575
- if ((frameEl == null ? void 0 : frameEl.tagName) === "IFRAME") {
576
- return frameEl.contentDocument || document;
1928
+ let frame = document.querySelector("#preview-frame");
1929
+ if ((frame == null ? void 0 : frame.tagName) === "IFRAME") {
1930
+ frame = frame.contentDocument;
577
1931
  }
578
- return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
1932
+ return frame;
579
1933
  };
580
1934
 
581
1935
  // src/HeadingAnalyzer.tsx