@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.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 (!arg) continue;
88
- var argType = typeof arg;
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.join(" ");
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, {
@@ -261,12 +1606,6 @@ var import_react7 = require("react");
261
1606
  // ../core/components/DropZone/context.tsx
262
1607
  init_react_import();
263
1608
  var import_react3 = require("react");
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");
270
1609
 
271
1610
  // ../core/lib/get-item.ts
272
1611
  init_react_import();
@@ -278,6 +1617,26 @@ var rootDroppableId = "default-zone";
278
1617
  // ../core/lib/setup-zone.ts
279
1618
  init_react_import();
280
1619
 
1620
+ // ../core/lib/get-zone-id.ts
1621
+ init_react_import();
1622
+ var getZoneId = (zoneCompound) => {
1623
+ if (!zoneCompound) {
1624
+ return [];
1625
+ }
1626
+ if (zoneCompound && zoneCompound.indexOf(":") > -1) {
1627
+ return zoneCompound.split(":");
1628
+ }
1629
+ return [rootDroppableId, zoneCompound];
1630
+ };
1631
+
1632
+ // ../core/components/DropZone/context.tsx
1633
+ var import_jsx_runtime2 = require("react/jsx-runtime");
1634
+ var dropZoneContext = (0, import_react3.createContext)(null);
1635
+
1636
+ // ../core/components/Puck/context.tsx
1637
+ init_react_import();
1638
+ var import_react6 = require("react");
1639
+
281
1640
  // ../core/components/ViewportControls/default-viewports.ts
282
1641
  init_react_import();
283
1642
  var defaultViewports = [
@@ -286,6 +1645,9 @@ var defaultViewports = [
286
1645
  { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
287
1646
  ];
288
1647
 
1648
+ // ../core/components/Puck/context.tsx
1649
+ var import_ua_parser_js = __toESM(require_ua_parser());
1650
+
289
1651
  // ../core/lib/use-resolved-permissions.ts
290
1652
  init_react_import();
291
1653
  var import_react4 = require("react");
@@ -353,6 +1715,7 @@ var defaultContext = {
353
1715
  status: "LOADING",
354
1716
  setStatus: () => null,
355
1717
  iframe: {},
1718
+ safariFallbackMode: false,
356
1719
  globalPermissions: {},
357
1720
  getPermissions: () => ({}),
358
1721
  refreshPermissions: () => null
@@ -372,18 +1735,6 @@ function useAppContext() {
372
1735
  });
373
1736
  }
374
1737
 
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
1738
  // ../core/lib/use-breadcrumbs.ts
388
1739
  var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
389
1740
  const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
@@ -577,12 +1928,11 @@ var scrollIntoView = (el) => {
577
1928
  // ../core/lib/get-frame.ts
578
1929
  init_react_import();
579
1930
  var getFrame = () => {
580
- if (typeof window === "undefined") return;
581
- let frameEl = document.querySelector("#preview-frame");
582
- if ((frameEl == null ? void 0 : frameEl.tagName) === "IFRAME") {
583
- return frameEl.contentDocument || document;
1931
+ let frame = document.querySelector("#preview-frame");
1932
+ if ((frame == null ? void 0 : frame.tagName) === "IFRAME") {
1933
+ frame = frame.contentDocument;
584
1934
  }
585
- return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
1935
+ return frame;
586
1936
  };
587
1937
 
588
1938
  // src/HeadingAnalyzer.tsx