@measured/puck-plugin-heading-analyzer 0.17.2-canary.f323610 → 0.18.0-canary.beb05b5

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 CHANGED
@@ -133,1341 +133,6 @@ var require_classnames = __commonJS({
133
133
  }
134
134
  });
135
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
-
1471
136
  // index.ts
1472
137
  var plugin_heading_analyzer_exports = {};
1473
138
  __export(plugin_heading_analyzer_exports, {
@@ -1643,7 +308,11 @@ var import_react8 = require("react");
1643
308
 
1644
309
  // ../core/components/DropZone/context.tsx
1645
310
  init_react_import();
1646
- var import_react4 = require("react");
311
+ var import_react7 = require("react");
312
+
313
+ // ../core/components/Puck/context.tsx
314
+ init_react_import();
315
+ var import_react6 = require("react");
1647
316
 
1648
317
  // ../core/lib/get-item.ts
1649
318
  init_react_import();
@@ -1655,26 +324,6 @@ var rootDroppableId = "default-zone";
1655
324
  // ../core/lib/setup-zone.ts
1656
325
  init_react_import();
1657
326
 
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
-
1678
327
  // ../core/components/ViewportControls/default-viewports.ts
1679
328
  init_react_import();
1680
329
  var defaultViewports = [
@@ -1683,12 +332,9 @@ var defaultViewports = [
1683
332
  { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
1684
333
  ];
1685
334
 
1686
- // ../core/components/Puck/context.tsx
1687
- var import_ua_parser_js = __toESM(require_ua_parser());
1688
-
1689
335
  // ../core/lib/use-resolved-permissions.ts
1690
336
  init_react_import();
1691
- var import_react5 = require("react");
337
+ var import_react4 = require("react");
1692
338
 
1693
339
  // ../core/lib/flatten-data.ts
1694
340
  init_react_import();
@@ -1698,7 +344,7 @@ init_react_import();
1698
344
 
1699
345
  // ../core/lib/use-resolved-data.ts
1700
346
  init_react_import();
1701
- var import_react6 = require("react");
347
+ var import_react5 = require("react");
1702
348
 
1703
349
  // ../core/lib/resolve-component-data.ts
1704
350
  init_react_import();
@@ -1710,7 +356,7 @@ init_react_import();
1710
356
  init_react_import();
1711
357
 
1712
358
  // ../core/components/Puck/context.tsx
1713
- var import_jsx_runtime3 = require("react/jsx-runtime");
359
+ var import_jsx_runtime2 = require("react/jsx-runtime");
1714
360
  var defaultAppState = {
1715
361
  data: { content: [], root: {} },
1716
362
  ui: {
@@ -1720,6 +366,7 @@ var defaultAppState = {
1720
366
  itemSelector: null,
1721
367
  componentList: {},
1722
368
  isDragging: false,
369
+ previewMode: "edit",
1723
370
  viewports: {
1724
371
  current: {
1725
372
  width: defaultViewports[0].width,
@@ -1753,14 +400,13 @@ var defaultContext = {
1753
400
  status: "LOADING",
1754
401
  setStatus: () => null,
1755
402
  iframe: {},
1756
- safariFallbackMode: false,
1757
403
  globalPermissions: {},
1758
404
  getPermissions: () => ({}),
1759
405
  refreshPermissions: () => null
1760
406
  };
1761
- var appContext = (0, import_react7.createContext)(defaultContext);
407
+ var appContext = (0, import_react6.createContext)(defaultContext);
1762
408
  function useAppContext() {
1763
- const mainContext = (0, import_react7.useContext)(appContext);
409
+ const mainContext = (0, import_react6.useContext)(appContext);
1764
410
  return __spreadProps(__spreadValues({}, mainContext), {
1765
411
  // Helpers
1766
412
  setUi: (ui, recordHistory) => {
@@ -1773,6 +419,22 @@ function useAppContext() {
1773
419
  });
1774
420
  }
1775
421
 
422
+ // ../core/components/DropZone/context.tsx
423
+ var import_jsx_runtime3 = require("react/jsx-runtime");
424
+ var dropZoneContext = (0, import_react7.createContext)(null);
425
+
426
+ // ../core/lib/get-zone-id.ts
427
+ init_react_import();
428
+ var getZoneId = (zoneCompound) => {
429
+ if (!zoneCompound) {
430
+ return [];
431
+ }
432
+ if (zoneCompound && zoneCompound.indexOf(":") > -1) {
433
+ return zoneCompound.split(":");
434
+ }
435
+ return [rootDroppableId, zoneCompound];
436
+ };
437
+
1776
438
  // ../core/lib/use-breadcrumbs.ts
1777
439
  var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
1778
440
  const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
@@ -1966,11 +628,12 @@ var scrollIntoView = (el) => {
1966
628
  // ../core/lib/get-frame.ts
1967
629
  init_react_import();
1968
630
  var getFrame = () => {
1969
- let frame = document.querySelector("#preview-frame");
1970
- if ((frame == null ? void 0 : frame.tagName) === "IFRAME") {
1971
- frame = frame.contentDocument;
631
+ if (typeof window === "undefined") return;
632
+ let frameEl = document.querySelector("#preview-frame");
633
+ if ((frameEl == null ? void 0 : frameEl.tagName) === "IFRAME") {
634
+ return frameEl.contentDocument || document;
1972
635
  }
1973
- return frame;
636
+ return (frameEl == null ? void 0 : frameEl.ownerDocument) || document;
1974
637
  };
1975
638
 
1976
639
  // src/HeadingAnalyzer.tsx
@@ -1979,36 +642,29 @@ var import_jsx_runtime7 = require("react/jsx-runtime");
1979
642
  var getClassName5 = get_class_name_factory_default("HeadingAnalyzer", HeadingAnalyzer_module_default);
1980
643
  var getClassNameItem2 = get_class_name_factory_default("HeadingAnalyzerItem", HeadingAnalyzer_module_default);
1981
644
  var ReactFromJSON = import_react_from_json.default.default || import_react_from_json.default;
1982
- var dataAttr = "data-puck-heading-analyzer-id";
1983
- var getOutline = ({
1984
- addDataAttr = false,
1985
- frame
1986
- } = {}) => {
645
+ var getOutline = ({ frame } = {}) => {
1987
646
  const headings = (frame == null ? void 0 : frame.querySelectorAll("h1,h2,h3,h4,h5,h6")) || [];
1988
647
  const _outline = [];
1989
648
  headings.forEach((item, i) => {
1990
- if (addDataAttr) {
1991
- item.setAttribute(dataAttr, i.toString());
1992
- }
1993
649
  _outline.push({
1994
650
  rank: parseInt(item.tagName.split("H")[1]),
1995
651
  text: item.textContent,
1996
- analyzeId: i.toString()
652
+ element: item
1997
653
  });
1998
654
  });
1999
655
  return _outline;
2000
656
  };
2001
657
  function buildHierarchy(frame) {
2002
658
  var _a, _b;
2003
- const headings = getOutline({ addDataAttr: true, frame });
659
+ const headings = getOutline({ frame });
2004
660
  const root = { rank: 0, children: [], text: "" };
2005
661
  let path = [root];
2006
662
  for (let heading of headings) {
2007
663
  const node = {
2008
664
  rank: heading.rank,
2009
665
  text: heading.text,
2010
- analyzeId: heading.analyzeId,
2011
- children: []
666
+ children: [],
667
+ element: heading.element
2012
668
  };
2013
669
  if (node.rank === 1) {
2014
670
  path = [root];
@@ -2035,18 +691,18 @@ function buildHierarchy(frame) {
2035
691
  var HeadingAnalyzer = () => {
2036
692
  const { appState } = (0, import_puck.usePuck)();
2037
693
  const [hierarchy, setHierarchy] = (0, import_react9.useState)([]);
2038
- const [firstRender, setFirstRender] = (0, import_react9.useState)(true);
2039
694
  (0, import_react9.useEffect)(() => {
2040
695
  const frame = getFrame();
2041
- if (!frame) return;
2042
- if (firstRender) {
2043
- setTimeout(() => {
2044
- setHierarchy(buildHierarchy(frame));
2045
- setFirstRender(false);
2046
- }, 100);
2047
- } else {
2048
- setHierarchy(buildHierarchy(frame));
2049
- }
696
+ const entry = frame == null ? void 0 : frame.querySelector(`[data-puck-entry]`);
697
+ if (!entry) return;
698
+ setHierarchy(buildHierarchy(entry));
699
+ const observer = new MutationObserver(() => {
700
+ setHierarchy(buildHierarchy(entry));
701
+ });
702
+ observer.observe(entry, { subtree: true, childList: true });
703
+ return () => {
704
+ observer.disconnect();
705
+ };
2050
706
  }, [appState.data]);
2051
707
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: getClassName5(), children: [
2052
708
  /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
@@ -2077,12 +733,9 @@ var HeadingAnalyzer = () => {
2077
733
  "small",
2078
734
  {
2079
735
  className: getClassNameItem2({ missing: props.missing }),
2080
- onClick: typeof props.analyzeId == "undefined" ? void 0 : (e) => {
736
+ onClick: typeof props.element == "undefined" ? void 0 : (e) => {
2081
737
  e.stopPropagation();
2082
- const frame = getFrame();
2083
- const el = frame == null ? void 0 : frame.querySelector(
2084
- `[${dataAttr}="${props.analyzeId}"]`
2085
- );
738
+ const el = props.element;
2086
739
  const oldStyle = __spreadValues({}, el.style);
2087
740
  if (el) {
2088
741
  scrollIntoView(el);