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

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