@measured/puck-plugin-heading-analyzer 0.16.0-canary.f0655f0 → 0.16.0-canary.fc564d7

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 ADDED
@@ -0,0 +1,2084 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __objRest = (source, exclude) => {
25
+ var target = {};
26
+ for (var prop in source)
27
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
28
+ target[prop] = source[prop];
29
+ if (source != null && __getOwnPropSymbols)
30
+ for (var prop of __getOwnPropSymbols(source)) {
31
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
32
+ target[prop] = source[prop];
33
+ }
34
+ return target;
35
+ };
36
+ var __esm = (fn, res) => function __init() {
37
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
38
+ };
39
+ var __commonJS = (cb, mod) => function __require() {
40
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
41
+ };
42
+ var __copyProps = (to, from, except, desc) => {
43
+ if (from && typeof from === "object" || typeof from === "function") {
44
+ for (let key of __getOwnPropNames(from))
45
+ if (!__hasOwnProp.call(to, key) && key !== except)
46
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
47
+ }
48
+ return to;
49
+ };
50
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
51
+ // If the importer is in node compatibility mode or this is not an ESM
52
+ // file that has been converted to a CommonJS file using a Babel-
53
+ // compatible transform (i.e. "__esModule" has not been set), then set
54
+ // "default" to the CommonJS "module.exports" for node compatibility.
55
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
56
+ mod
57
+ ));
58
+
59
+ // ../tsup-config/react-import.js
60
+ import React from "react";
61
+ var init_react_import = __esm({
62
+ "../tsup-config/react-import.js"() {
63
+ "use strict";
64
+ }
65
+ });
66
+
67
+ // ../../node_modules/classnames/index.js
68
+ var require_classnames = __commonJS({
69
+ "../../node_modules/classnames/index.js"(exports, module) {
70
+ "use strict";
71
+ init_react_import();
72
+ (function() {
73
+ "use strict";
74
+ var hasOwn = {}.hasOwnProperty;
75
+ var nativeCodeString = "[native code]";
76
+ function classNames() {
77
+ var classes = [];
78
+ for (var i = 0; i < arguments.length; i++) {
79
+ var arg = arguments[i];
80
+ if (!arg) continue;
81
+ var argType = typeof arg;
82
+ if (argType === "string" || argType === "number") {
83
+ classes.push(arg);
84
+ } else if (Array.isArray(arg)) {
85
+ if (arg.length) {
86
+ var inner = classNames.apply(null, arg);
87
+ if (inner) {
88
+ classes.push(inner);
89
+ }
90
+ }
91
+ } else if (argType === "object") {
92
+ if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) {
93
+ classes.push(arg.toString());
94
+ continue;
95
+ }
96
+ for (var key in arg) {
97
+ if (hasOwn.call(arg, key) && arg[key]) {
98
+ classes.push(key);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return classes.join(" ");
104
+ }
105
+ if (typeof module !== "undefined" && module.exports) {
106
+ classNames.default = classNames;
107
+ module.exports = classNames;
108
+ } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) {
109
+ define("classnames", [], function() {
110
+ return classNames;
111
+ });
112
+ } else {
113
+ window.classNames = classNames;
114
+ }
115
+ })();
116
+ }
117
+ });
118
+
119
+ // ../../node_modules/ua-parser-js/src/ua-parser.js
120
+ var require_ua_parser = __commonJS({
121
+ "../../node_modules/ua-parser-js/src/ua-parser.js"(exports, module) {
122
+ "use strict";
123
+ init_react_import();
124
+ (function(window2, undefined2) {
125
+ "use strict";
126
+ var LIBVERSION = "1.0.37", 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;
127
+ 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";
128
+ var extend = function(regexes2, extensions) {
129
+ var mergedRegexes = {};
130
+ for (var i in regexes2) {
131
+ if (extensions[i] && extensions[i].length % 2 === 0) {
132
+ mergedRegexes[i] = extensions[i].concat(regexes2[i]);
133
+ } else {
134
+ mergedRegexes[i] = regexes2[i];
135
+ }
136
+ }
137
+ return mergedRegexes;
138
+ }, enumerize = function(arr) {
139
+ var enums = {};
140
+ for (var i = 0; i < arr.length; i++) {
141
+ enums[arr[i].toUpperCase()] = arr[i];
142
+ }
143
+ return enums;
144
+ }, has = function(str1, str2) {
145
+ return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
146
+ }, lowerize = function(str) {
147
+ return str.toLowerCase();
148
+ }, majorize = function(version) {
149
+ return typeof version === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split(".")[0] : undefined2;
150
+ }, trim = function(str, len) {
151
+ if (typeof str === STR_TYPE) {
152
+ str = str.replace(/^\s\s*/, EMPTY);
153
+ return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
154
+ }
155
+ };
156
+ var rgxMapper = function(ua, arrays) {
157
+ var i = 0, j, k, p, q, matches, match;
158
+ while (i < arrays.length && !matches) {
159
+ var regex = arrays[i], props = arrays[i + 1];
160
+ j = k = 0;
161
+ while (j < regex.length && !matches) {
162
+ if (!regex[j]) {
163
+ break;
164
+ }
165
+ matches = regex[j++].exec(ua);
166
+ if (!!matches) {
167
+ for (p = 0; p < props.length; p++) {
168
+ match = matches[++k];
169
+ q = props[p];
170
+ if (typeof q === OBJ_TYPE && q.length > 0) {
171
+ if (q.length === 2) {
172
+ if (typeof q[1] == FUNC_TYPE) {
173
+ this[q[0]] = q[1].call(this, match);
174
+ } else {
175
+ this[q[0]] = q[1];
176
+ }
177
+ } else if (q.length === 3) {
178
+ if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
179
+ this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined2;
180
+ } else {
181
+ this[q[0]] = match ? match.replace(q[1], q[2]) : undefined2;
182
+ }
183
+ } else if (q.length === 4) {
184
+ this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined2;
185
+ }
186
+ } else {
187
+ this[q] = match ? match : undefined2;
188
+ }
189
+ }
190
+ }
191
+ }
192
+ i += 2;
193
+ }
194
+ }, strMapper = function(str, map) {
195
+ for (var i in map) {
196
+ if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {
197
+ for (var j = 0; j < map[i].length; j++) {
198
+ if (has(map[i][j], str)) {
199
+ return i === UNKNOWN ? undefined2 : i;
200
+ }
201
+ }
202
+ } else if (has(map[i], str)) {
203
+ return i === UNKNOWN ? undefined2 : i;
204
+ }
205
+ }
206
+ return str;
207
+ };
208
+ var oldSafariMap = {
209
+ "1.0": "/8",
210
+ "1.2": "/1",
211
+ "1.3": "/3",
212
+ "2.0": "/412",
213
+ "2.0.2": "/416",
214
+ "2.0.3": "/417",
215
+ "2.0.4": "/419",
216
+ "?": "/"
217
+ }, windowsVersionMap = {
218
+ "ME": "4.90",
219
+ "NT 3.11": "NT3.51",
220
+ "NT 4.0": "NT4.0",
221
+ "2000": "NT 5.0",
222
+ "XP": ["NT 5.1", "NT 5.2"],
223
+ "Vista": "NT 6.0",
224
+ "7": "NT 6.1",
225
+ "8": "NT 6.2",
226
+ "8.1": "NT 6.3",
227
+ "10": ["NT 6.4", "NT 10.0"],
228
+ "RT": "ARM"
229
+ };
230
+ var regexes = {
231
+ browser: [
232
+ [
233
+ /\b(?:crmo|crios)\/([\w\.]+)/i
234
+ // Chrome for Android/iOS
235
+ ],
236
+ [VERSION, [NAME, "Chrome"]],
237
+ [
238
+ /edg(?:e|ios|a)?\/([\w\.]+)/i
239
+ // Microsoft Edge
240
+ ],
241
+ [VERSION, [NAME, "Edge"]],
242
+ [
243
+ // Presto based
244
+ /(opera mini)\/([-\w\.]+)/i,
245
+ // Opera Mini
246
+ /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
247
+ // Opera Mobi/Tablet
248
+ /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
249
+ // Opera
250
+ ],
251
+ [NAME, VERSION],
252
+ [
253
+ /opios[\/ ]+([\w\.]+)/i
254
+ // Opera mini on iphone >= 8.0
255
+ ],
256
+ [VERSION, [NAME, OPERA + " Mini"]],
257
+ [
258
+ /\bopr\/([\w\.]+)/i
259
+ // Opera Webkit
260
+ ],
261
+ [VERSION, [NAME, OPERA]],
262
+ [
263
+ // Mixed
264
+ /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
265
+ // Baidu
266
+ ],
267
+ [VERSION, [NAME, "Baidu"]],
268
+ [
269
+ /(kindle)\/([\w\.]+)/i,
270
+ // Kindle
271
+ /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,
272
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer
273
+ // Trident based
274
+ /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,
275
+ // Avant/IEMobile/SlimBrowser
276
+ /(?:ms|\()(ie) ([\w\.]+)/i,
277
+ // Internet Explorer
278
+ // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
279
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
280
+ // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
281
+ /(heytap|ovi)browser\/([\d\.]+)/i,
282
+ // Heytap/Ovi
283
+ /(weibo)__([\d\.]+)/i
284
+ // Weibo
285
+ ],
286
+ [NAME, VERSION],
287
+ [
288
+ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
289
+ // UCBrowser
290
+ ],
291
+ [VERSION, [NAME, "UC" + BROWSER]],
292
+ [
293
+ /microm.+\bqbcore\/([\w\.]+)/i,
294
+ // WeChat Desktop for Windows Built-in Browser
295
+ /\bqbcore\/([\w\.]+).+microm/i,
296
+ /micromessenger\/([\w\.]+)/i
297
+ // WeChat
298
+ ],
299
+ [VERSION, [NAME, "WeChat"]],
300
+ [
301
+ /konqueror\/([\w\.]+)/i
302
+ // Konqueror
303
+ ],
304
+ [VERSION, [NAME, "Konqueror"]],
305
+ [
306
+ /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
307
+ // IE11
308
+ ],
309
+ [VERSION, [NAME, "IE"]],
310
+ [
311
+ /ya(?:search)?browser\/([\w\.]+)/i
312
+ // Yandex
313
+ ],
314
+ [VERSION, [NAME, "Yandex"]],
315
+ [
316
+ /slbrowser\/([\w\.]+)/i
317
+ // Smart Lenovo Browser
318
+ ],
319
+ [VERSION, [NAME, "Smart Lenovo " + BROWSER]],
320
+ [
321
+ /(avast|avg)\/([\w\.]+)/i
322
+ // Avast/AVG Secure Browser
323
+ ],
324
+ [[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION],
325
+ [
326
+ /\bfocus\/([\w\.]+)/i
327
+ // Firefox Focus
328
+ ],
329
+ [VERSION, [NAME, FIREFOX + " Focus"]],
330
+ [
331
+ /\bopt\/([\w\.]+)/i
332
+ // Opera Touch
333
+ ],
334
+ [VERSION, [NAME, OPERA + " Touch"]],
335
+ [
336
+ /coc_coc\w+\/([\w\.]+)/i
337
+ // Coc Coc Browser
338
+ ],
339
+ [VERSION, [NAME, "Coc Coc"]],
340
+ [
341
+ /dolfin\/([\w\.]+)/i
342
+ // Dolphin
343
+ ],
344
+ [VERSION, [NAME, "Dolphin"]],
345
+ [
346
+ /coast\/([\w\.]+)/i
347
+ // Opera Coast
348
+ ],
349
+ [VERSION, [NAME, OPERA + " Coast"]],
350
+ [
351
+ /miuibrowser\/([\w\.]+)/i
352
+ // MIUI Browser
353
+ ],
354
+ [VERSION, [NAME, "MIUI " + BROWSER]],
355
+ [
356
+ /fxios\/([-\w\.]+)/i
357
+ // Firefox for iOS
358
+ ],
359
+ [VERSION, [NAME, FIREFOX]],
360
+ [
361
+ /\bqihu|(qi?ho?o?|360)browser/i
362
+ // 360
363
+ ],
364
+ [[NAME, "360 " + BROWSER]],
365
+ [
366
+ /(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i
367
+ ],
368
+ [[NAME, /(.+)/, "$1 " + BROWSER], VERSION],
369
+ [
370
+ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser
371
+ /samsungbrowser\/([\w\.]+)/i
372
+ // Samsung Internet
373
+ ],
374
+ [VERSION, [NAME, SAMSUNG + " Internet"]],
375
+ [
376
+ /(comodo_dragon)\/([\w\.]+)/i
377
+ // Comodo Dragon
378
+ ],
379
+ [[NAME, /_/g, " "], VERSION],
380
+ [
381
+ /metasr[\/ ]?([\d\.]+)/i
382
+ // Sogou Explorer
383
+ ],
384
+ [VERSION, [NAME, "Sogou Explorer"]],
385
+ [
386
+ /(sogou)mo\w+\/([\d\.]+)/i
387
+ // Sogou Mobile
388
+ ],
389
+ [[NAME, "Sogou Mobile"], VERSION],
390
+ [
391
+ /(electron)\/([\w\.]+) safari/i,
392
+ // Electron-based App
393
+ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
394
+ // Tesla
395
+ /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i
396
+ // QQBrowser/2345 Browser
397
+ ],
398
+ [NAME, VERSION],
399
+ [
400
+ /(lbbrowser)/i,
401
+ // LieBao Browser
402
+ /\[(linkedin)app\]/i
403
+ // LinkedIn App for iOS & Android
404
+ ],
405
+ [NAME],
406
+ [
407
+ // WebView
408
+ /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
409
+ // Facebook App for iOS & Android
410
+ ],
411
+ [[NAME, FACEBOOK], VERSION],
412
+ [
413
+ /(Klarna)\/([\w\.]+)/i,
414
+ // Klarna Shopping Browser for iOS & Android
415
+ /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
416
+ // Kakao App
417
+ /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
418
+ // Naver InApp
419
+ /safari (line)\/([\w\.]+)/i,
420
+ // Line App for iOS
421
+ /\b(line)\/([\w\.]+)\/iab/i,
422
+ // Line App for Android
423
+ /(alipay)client\/([\w\.]+)/i,
424
+ // Alipay
425
+ /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i
426
+ // Chromium/Instagram/Snapchat
427
+ ],
428
+ [NAME, VERSION],
429
+ [
430
+ /\bgsa\/([\w\.]+) .*safari\//i
431
+ // Google Search Appliance on iOS
432
+ ],
433
+ [VERSION, [NAME, "GSA"]],
434
+ [
435
+ /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
436
+ // TikTok
437
+ ],
438
+ [VERSION, [NAME, "TikTok"]],
439
+ [
440
+ /headlesschrome(?:\/([\w\.]+)| )/i
441
+ // Chrome Headless
442
+ ],
443
+ [VERSION, [NAME, CHROME + " Headless"]],
444
+ [
445
+ / wv\).+(chrome)\/([\w\.]+)/i
446
+ // Chrome WebView
447
+ ],
448
+ [[NAME, CHROME + " WebView"], VERSION],
449
+ [
450
+ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
451
+ // Android Browser
452
+ ],
453
+ [VERSION, [NAME, "Android " + BROWSER]],
454
+ [
455
+ /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
456
+ // Chrome/OmniWeb/Arora/Tizen/Nokia
457
+ ],
458
+ [NAME, VERSION],
459
+ [
460
+ /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
461
+ // Mobile Safari
462
+ ],
463
+ [VERSION, [NAME, "Mobile Safari"]],
464
+ [
465
+ /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
466
+ // Safari & Safari Mobile
467
+ ],
468
+ [VERSION, NAME],
469
+ [
470
+ /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
471
+ // Safari < 3.0
472
+ ],
473
+ [NAME, [VERSION, strMapper, oldSafariMap]],
474
+ [
475
+ /(webkit|khtml)\/([\w\.]+)/i
476
+ ],
477
+ [NAME, VERSION],
478
+ [
479
+ // Gecko based
480
+ /(navigator|netscape\d?)\/([-\w\.]+)/i
481
+ // Netscape
482
+ ],
483
+ [[NAME, "Netscape"], VERSION],
484
+ [
485
+ /mobile vr; rv:([\w\.]+)\).+firefox/i
486
+ // Firefox Reality
487
+ ],
488
+ [VERSION, [NAME, FIREFOX + " Reality"]],
489
+ [
490
+ /ekiohf.+(flow)\/([\w\.]+)/i,
491
+ // Flow
492
+ /(swiftfox)/i,
493
+ // Swiftfox
494
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
495
+ // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar
496
+ /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
497
+ // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
498
+ /(firefox)\/([\w\.]+)/i,
499
+ // Other Firefox-based
500
+ /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
501
+ // Mozilla
502
+ // Other
503
+ /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
504
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
505
+ /(links) \(([\w\.]+)/i,
506
+ // Links
507
+ /panasonic;(viera)/i
508
+ // Panasonic Viera
509
+ ],
510
+ [NAME, VERSION],
511
+ [
512
+ /(cobalt)\/([\w\.]+)/i
513
+ // Cobalt
514
+ ],
515
+ [NAME, [VERSION, /master.|lts./, ""]]
516
+ ],
517
+ cpu: [
518
+ [
519
+ /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
520
+ // AMD64 (x64)
521
+ ],
522
+ [[ARCHITECTURE, "amd64"]],
523
+ [
524
+ /(ia32(?=;))/i
525
+ // IA32 (quicktime)
526
+ ],
527
+ [[ARCHITECTURE, lowerize]],
528
+ [
529
+ /((?:i[346]|x)86)[;\)]/i
530
+ // IA32 (x86)
531
+ ],
532
+ [[ARCHITECTURE, "ia32"]],
533
+ [
534
+ /\b(aarch64|arm(v?8e?l?|_?64))\b/i
535
+ // ARM64
536
+ ],
537
+ [[ARCHITECTURE, "arm64"]],
538
+ [
539
+ /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
540
+ // ARMHF
541
+ ],
542
+ [[ARCHITECTURE, "armhf"]],
543
+ [
544
+ // PocketPC mistakenly identified as PowerPC
545
+ /windows (ce|mobile); ppc;/i
546
+ ],
547
+ [[ARCHITECTURE, "arm"]],
548
+ [
549
+ /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
550
+ // PowerPC
551
+ ],
552
+ [[ARCHITECTURE, /ower/, EMPTY, lowerize]],
553
+ [
554
+ /(sun4\w)[;\)]/i
555
+ // SPARC
556
+ ],
557
+ [[ARCHITECTURE, "sparc"]],
558
+ [
559
+ /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
560
+ // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
561
+ ],
562
+ [[ARCHITECTURE, lowerize]]
563
+ ],
564
+ device: [
565
+ [
566
+ //////////////////////////
567
+ // MOBILES & TABLETS
568
+ /////////////////////////
569
+ // Samsung
570
+ /\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
571
+ ],
572
+ [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
573
+ [
574
+ /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
575
+ /samsung[- ]([-\w]+)/i,
576
+ /sec-(sgh\w+)/i
577
+ ],
578
+ [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
579
+ [
580
+ // Apple
581
+ /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
582
+ // iPod/iPhone
583
+ ],
584
+ [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
585
+ [
586
+ /\((ipad);[-\w\),; ]+apple/i,
587
+ // iPad
588
+ /applecoremedia\/[\w\.]+ \((ipad)/i,
589
+ /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
590
+ ],
591
+ [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
592
+ [
593
+ /(macintosh);/i
594
+ ],
595
+ [MODEL, [VENDOR, APPLE]],
596
+ [
597
+ // Sharp
598
+ /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
599
+ ],
600
+ [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
601
+ [
602
+ // Huawei
603
+ /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
604
+ ],
605
+ [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
606
+ [
607
+ /(?:huawei|honor)([-\w ]+)[;\)]/i,
608
+ /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
609
+ ],
610
+ [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
611
+ [
612
+ // Xiaomi
613
+ /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
614
+ // Xiaomi POCO
615
+ /\b; (\w+) build\/hm\1/i,
616
+ // Xiaomi Hongmi 'numeric' models
617
+ /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
618
+ // Xiaomi Hongmi
619
+ /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
620
+ // Xiaomi Redmi
621
+ /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
622
+ // Xiaomi Redmi 'numeric' models
623
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
624
+ // Xiaomi Mi
625
+ ],
626
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
627
+ [
628
+ /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,
629
+ // Redmi Pad
630
+ /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
631
+ // Mi Pad tablets
632
+ ],
633
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
634
+ [
635
+ // OPPO
636
+ /; (\w+) bui.+ oppo/i,
637
+ /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
638
+ ],
639
+ [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]],
640
+ [
641
+ // Vivo
642
+ /vivo (\w+)(?: bui|\))/i,
643
+ /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
644
+ ],
645
+ [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
646
+ [
647
+ // Realme
648
+ /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
649
+ ],
650
+ [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
651
+ [
652
+ // Motorola
653
+ /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
654
+ /\bmot(?:orola)?[- ](\w*)/i,
655
+ /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
656
+ ],
657
+ [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
658
+ [
659
+ /\b(mz60\d|xoom[2 ]{0,2}) build\//i
660
+ ],
661
+ [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
662
+ [
663
+ // LG
664
+ /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
665
+ ],
666
+ [MODEL, [VENDOR, LG], [TYPE, TABLET]],
667
+ [
668
+ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
669
+ /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
670
+ /\blg-?([\d\w]+) bui/i
671
+ ],
672
+ [MODEL, [VENDOR, LG], [TYPE, MOBILE]],
673
+ [
674
+ // Lenovo
675
+ /(ideatab[-\w ]+)/i,
676
+ /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
677
+ ],
678
+ [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]],
679
+ [
680
+ // Nokia
681
+ /(?:maemo|nokia).*(n900|lumia \d+)/i,
682
+ /nokia[-_ ]?([-\w\.]*)/i
683
+ ],
684
+ [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]],
685
+ [
686
+ // Google
687
+ /(pixel c)\b/i
688
+ // Google Pixel C
689
+ ],
690
+ [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
691
+ [
692
+ /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
693
+ // Google Pixel
694
+ ],
695
+ [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
696
+ [
697
+ // Sony
698
+ /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
699
+ ],
700
+ [MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
701
+ [
702
+ /sony tablet [ps]/i,
703
+ /\b(?:sony)?sgp\w+(?: bui|\))/i
704
+ ],
705
+ [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
706
+ [
707
+ // OnePlus
708
+ / (kb2005|in20[12]5|be20[12][59])\b/i,
709
+ /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
710
+ ],
711
+ [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]],
712
+ [
713
+ // Amazon
714
+ /(alexa)webm/i,
715
+ /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
716
+ // Kindle Fire without Silk / Echo Show
717
+ /(kf[a-z]+)( bui|\)).+silk\//i
718
+ // Kindle Fire HD
719
+ ],
720
+ [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
721
+ [
722
+ /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
723
+ // Fire Phone
724
+ ],
725
+ [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
726
+ [
727
+ // BlackBerry
728
+ /(playbook);[-\w\),; ]+(rim)/i
729
+ // BlackBerry PlayBook
730
+ ],
731
+ [MODEL, VENDOR, [TYPE, TABLET]],
732
+ [
733
+ /\b((?:bb[a-f]|st[hv])100-\d)/i,
734
+ /\(bb10; (\w+)/i
735
+ // BlackBerry 10
736
+ ],
737
+ [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
738
+ [
739
+ // Asus
740
+ /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
741
+ ],
742
+ [MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
743
+ [
744
+ / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
745
+ ],
746
+ [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
747
+ [
748
+ // HTC
749
+ /(nexus 9)/i
750
+ // HTC Nexus 9
751
+ ],
752
+ [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
753
+ [
754
+ /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
755
+ // HTC
756
+ // ZTE
757
+ /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
758
+ /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
759
+ // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
760
+ ],
761
+ [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
762
+ [
763
+ // Acer
764
+ /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
765
+ ],
766
+ [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
767
+ [
768
+ // Meizu
769
+ /droid.+; (m[1-5] note) bui/i,
770
+ /\bmz-([-\w]{2,})/i
771
+ ],
772
+ [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
773
+ [
774
+ // Ulefone
775
+ /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
776
+ ],
777
+ [MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
778
+ [
779
+ // MIXED
780
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
781
+ // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
782
+ /(hp) ([\w ]+\w)/i,
783
+ // HP iPAQ
784
+ /(asus)-?(\w+)/i,
785
+ // Asus
786
+ /(microsoft); (lumia[\w ]+)/i,
787
+ // Microsoft Lumia
788
+ /(lenovo)[-_ ]?([-\w]+)/i,
789
+ // Lenovo
790
+ /(jolla)/i,
791
+ // Jolla
792
+ /(oppo) ?([\w ]+) bui/i
793
+ // OPPO
794
+ ],
795
+ [VENDOR, MODEL, [TYPE, MOBILE]],
796
+ [
797
+ /(kobo)\s(ereader|touch)/i,
798
+ // Kobo
799
+ /(archos) (gamepad2?)/i,
800
+ // Archos
801
+ /(hp).+(touchpad(?!.+tablet)|tablet)/i,
802
+ // HP TouchPad
803
+ /(kindle)\/([\w\.]+)/i,
804
+ // Kindle
805
+ /(nook)[\w ]+build\/(\w+)/i,
806
+ // Nook
807
+ /(dell) (strea[kpr\d ]*[\dko])/i,
808
+ // Dell Streak
809
+ /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
810
+ // Le Pan Tablets
811
+ /(trinity)[- ]*(t\d{3}) bui/i,
812
+ // Trinity Tablets
813
+ /(gigaset)[- ]+(q\w{1,9}) bui/i,
814
+ // Gigaset Tablets
815
+ /(vodafone) ([\w ]+)(?:\)| bui)/i
816
+ // Vodafone
817
+ ],
818
+ [VENDOR, MODEL, [TYPE, TABLET]],
819
+ [
820
+ /(surface duo)/i
821
+ // Surface Duo
822
+ ],
823
+ [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
824
+ [
825
+ /droid [\d\.]+; (fp\du?)(?: b|\))/i
826
+ // Fairphone
827
+ ],
828
+ [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
829
+ [
830
+ /(u304aa)/i
831
+ // AT&T
832
+ ],
833
+ [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]],
834
+ [
835
+ /\bsie-(\w*)/i
836
+ // Siemens
837
+ ],
838
+ [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]],
839
+ [
840
+ /\b(rct\w+) b/i
841
+ // RCA Tablets
842
+ ],
843
+ [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]],
844
+ [
845
+ /\b(venue[\d ]{2,7}) b/i
846
+ // Dell Venue Tablets
847
+ ],
848
+ [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]],
849
+ [
850
+ /\b(q(?:mv|ta)\w+) b/i
851
+ // Verizon Tablet
852
+ ],
853
+ [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]],
854
+ [
855
+ /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
856
+ // Barnes & Noble Tablet
857
+ ],
858
+ [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]],
859
+ [
860
+ /\b(tm\d{3}\w+) b/i
861
+ ],
862
+ [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]],
863
+ [
864
+ /\b(k88) b/i
865
+ // ZTE K Series Tablet
866
+ ],
867
+ [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]],
868
+ [
869
+ /\b(nx\d{3}j) b/i
870
+ // ZTE Nubia
871
+ ],
872
+ [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]],
873
+ [
874
+ /\b(gen\d{3}) b.+49h/i
875
+ // Swiss GEN Mobile
876
+ ],
877
+ [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]],
878
+ [
879
+ /\b(zur\d{3}) b/i
880
+ // Swiss ZUR Tablet
881
+ ],
882
+ [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]],
883
+ [
884
+ /\b((zeki)?tb.*\b) b/i
885
+ // Zeki Tablets
886
+ ],
887
+ [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]],
888
+ [
889
+ /\b([yr]\d{2}) b/i,
890
+ /\b(dragon[- ]+touch |dt)(\w{5}) b/i
891
+ // Dragon Touch Tablet
892
+ ],
893
+ [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]],
894
+ [
895
+ /\b(ns-?\w{0,9}) b/i
896
+ // Insignia Tablets
897
+ ],
898
+ [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]],
899
+ [
900
+ /\b((nxa|next)-?\w{0,9}) b/i
901
+ // NextBook Tablets
902
+ ],
903
+ [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]],
904
+ [
905
+ /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
906
+ // Voice Xtreme Phones
907
+ ],
908
+ [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]],
909
+ [
910
+ /\b(lvtel\-)?(v1[12]) b/i
911
+ // LvTel Phones
912
+ ],
913
+ [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]],
914
+ [
915
+ /\b(ph-1) /i
916
+ // Essential PH-1
917
+ ],
918
+ [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]],
919
+ [
920
+ /\b(v(100md|700na|7011|917g).*\b) b/i
921
+ // Envizen Tablets
922
+ ],
923
+ [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]],
924
+ [
925
+ /\b(trio[-\w\. ]+) b/i
926
+ // MachSpeed Tablets
927
+ ],
928
+ [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]],
929
+ [
930
+ /\btu_(1491) b/i
931
+ // Rotor Tablets
932
+ ],
933
+ [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]],
934
+ [
935
+ /(shield[\w ]+) b/i
936
+ // Nvidia Shield Tablets
937
+ ],
938
+ [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]],
939
+ [
940
+ /(sprint) (\w+)/i
941
+ // Sprint Phones
942
+ ],
943
+ [VENDOR, MODEL, [TYPE, MOBILE]],
944
+ [
945
+ /(kin\.[onetw]{3})/i
946
+ // Microsoft Kin
947
+ ],
948
+ [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
949
+ [
950
+ /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
951
+ // Zebra
952
+ ],
953
+ [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
954
+ [
955
+ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
956
+ ],
957
+ [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
958
+ [
959
+ ///////////////////
960
+ // SMARTTVS
961
+ ///////////////////
962
+ /smart-tv.+(samsung)/i
963
+ // Samsung
964
+ ],
965
+ [VENDOR, [TYPE, SMARTTV]],
966
+ [
967
+ /hbbtv.+maple;(\d+)/i
968
+ ],
969
+ [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
970
+ [
971
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
972
+ // LG SmartTV
973
+ ],
974
+ [[VENDOR, LG], [TYPE, SMARTTV]],
975
+ [
976
+ /(apple) ?tv/i
977
+ // Apple TV
978
+ ],
979
+ [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
980
+ [
981
+ /crkey/i
982
+ // Google Chromecast
983
+ ],
984
+ [[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
985
+ [
986
+ /droid.+aft(\w+)( bui|\))/i
987
+ // Fire TV
988
+ ],
989
+ [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
990
+ [
991
+ /\(dtv[\);].+(aquos)/i,
992
+ /(aquos-tv[\w ]+)\)/i
993
+ // Sharp
994
+ ],
995
+ [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
996
+ [
997
+ /(bravia[\w ]+)( bui|\))/i
998
+ // Sony
999
+ ],
1000
+ [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
1001
+ [
1002
+ /(mitv-\w{5}) bui/i
1003
+ // Xiaomi
1004
+ ],
1005
+ [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
1006
+ [
1007
+ /Hbbtv.*(technisat) (.*);/i
1008
+ // TechniSAT
1009
+ ],
1010
+ [VENDOR, MODEL, [TYPE, SMARTTV]],
1011
+ [
1012
+ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
1013
+ // Roku
1014
+ /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
1015
+ // HbbTV devices
1016
+ ],
1017
+ [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]],
1018
+ [
1019
+ /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
1020
+ // SmartTV from Unidentified Vendors
1021
+ ],
1022
+ [[TYPE, SMARTTV]],
1023
+ [
1024
+ ///////////////////
1025
+ // CONSOLES
1026
+ ///////////////////
1027
+ /(ouya)/i,
1028
+ // Ouya
1029
+ /(nintendo) ([wids3utch]+)/i
1030
+ // Nintendo
1031
+ ],
1032
+ [VENDOR, MODEL, [TYPE, CONSOLE]],
1033
+ [
1034
+ /droid.+; (shield) bui/i
1035
+ // Nvidia
1036
+ ],
1037
+ [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]],
1038
+ [
1039
+ /(playstation [345portablevi]+)/i
1040
+ // Playstation
1041
+ ],
1042
+ [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
1043
+ [
1044
+ /\b(xbox(?: one)?(?!; xbox))[\); ]/i
1045
+ // Microsoft Xbox
1046
+ ],
1047
+ [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
1048
+ [
1049
+ ///////////////////
1050
+ // WEARABLES
1051
+ ///////////////////
1052
+ /((pebble))app/i
1053
+ // Pebble
1054
+ ],
1055
+ [VENDOR, MODEL, [TYPE, WEARABLE]],
1056
+ [
1057
+ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
1058
+ // Apple Watch
1059
+ ],
1060
+ [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
1061
+ [
1062
+ /droid.+; (glass) \d/i
1063
+ // Google Glass
1064
+ ],
1065
+ [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]],
1066
+ [
1067
+ /droid.+; (wt63?0{2,3})\)/i
1068
+ ],
1069
+ [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
1070
+ [
1071
+ /(quest( 2| pro)?)/i
1072
+ // Oculus Quest
1073
+ ],
1074
+ [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]],
1075
+ [
1076
+ ///////////////////
1077
+ // EMBEDDED
1078
+ ///////////////////
1079
+ /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
1080
+ // Tesla
1081
+ ],
1082
+ [VENDOR, [TYPE, EMBEDDED]],
1083
+ [
1084
+ /(aeobc)\b/i
1085
+ // Echo Dot
1086
+ ],
1087
+ [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
1088
+ [
1089
+ ////////////////////
1090
+ // MIXED (GENERIC)
1091
+ ///////////////////
1092
+ /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i
1093
+ // Android Phones from Unidentified Vendors
1094
+ ],
1095
+ [MODEL, [TYPE, MOBILE]],
1096
+ [
1097
+ /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
1098
+ // Android Tablets from Unidentified Vendors
1099
+ ],
1100
+ [MODEL, [TYPE, TABLET]],
1101
+ [
1102
+ /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
1103
+ // Unidentifiable Tablet
1104
+ ],
1105
+ [[TYPE, TABLET]],
1106
+ [
1107
+ /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
1108
+ // Unidentifiable Mobile
1109
+ ],
1110
+ [[TYPE, MOBILE]],
1111
+ [
1112
+ /(android[-\w\. ]{0,9});.+buil/i
1113
+ // Generic Android Device
1114
+ ],
1115
+ [MODEL, [VENDOR, "Generic"]]
1116
+ ],
1117
+ engine: [
1118
+ [
1119
+ /windows.+ edge\/([\w\.]+)/i
1120
+ // EdgeHTML
1121
+ ],
1122
+ [VERSION, [NAME, EDGE + "HTML"]],
1123
+ [
1124
+ /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
1125
+ // Blink
1126
+ ],
1127
+ [VERSION, [NAME, "Blink"]],
1128
+ [
1129
+ /(presto)\/([\w\.]+)/i,
1130
+ // Presto
1131
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
1132
+ // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
1133
+ /ekioh(flow)\/([\w\.]+)/i,
1134
+ // Flow
1135
+ /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
1136
+ // KHTML/Tasman/Links
1137
+ /(icab)[\/ ]([23]\.[\d\.]+)/i,
1138
+ // iCab
1139
+ /\b(libweb)/i
1140
+ ],
1141
+ [NAME, VERSION],
1142
+ [
1143
+ /rv\:([\w\.]{1,9})\b.+(gecko)/i
1144
+ // Gecko
1145
+ ],
1146
+ [VERSION, NAME]
1147
+ ],
1148
+ os: [
1149
+ [
1150
+ // Windows
1151
+ /microsoft (windows) (vista|xp)/i
1152
+ // Windows (iTunes)
1153
+ ],
1154
+ [NAME, VERSION],
1155
+ [
1156
+ /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i
1157
+ // Windows Phone
1158
+ ],
1159
+ [NAME, [VERSION, strMapper, windowsVersionMap]],
1160
+ [
1161
+ /windows nt 6\.2; (arm)/i,
1162
+ // Windows RT
1163
+ /windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
1164
+ /(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
1165
+ ],
1166
+ [[VERSION, strMapper, windowsVersionMap], [NAME, "Windows"]],
1167
+ [
1168
+ // iOS/macOS
1169
+ /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
1170
+ // iOS
1171
+ /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
1172
+ /cfnetwork\/.+darwin/i
1173
+ ],
1174
+ [[VERSION, /_/g, "."], [NAME, "iOS"]],
1175
+ [
1176
+ /(mac os x) ?([\w\. ]*)/i,
1177
+ /(macintosh|mac_powerpc\b)(?!.+haiku)/i
1178
+ // Mac OS
1179
+ ],
1180
+ [[NAME, MAC_OS], [VERSION, /_/g, "."]],
1181
+ [
1182
+ // Mobile OSes
1183
+ /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
1184
+ // Android-x86/HarmonyOS
1185
+ ],
1186
+ [VERSION, NAME],
1187
+ [
1188
+ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
1189
+ /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
1190
+ /(blackberry)\w*\/([\w\.]*)/i,
1191
+ // Blackberry
1192
+ /(tizen|kaios)[\/ ]([\w\.]+)/i,
1193
+ // Tizen/KaiOS
1194
+ /\((series40);/i
1195
+ // Series 40
1196
+ ],
1197
+ [NAME, VERSION],
1198
+ [
1199
+ /\(bb(10);/i
1200
+ // BlackBerry 10
1201
+ ],
1202
+ [VERSION, [NAME, BLACKBERRY]],
1203
+ [
1204
+ /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
1205
+ // Symbian
1206
+ ],
1207
+ [VERSION, [NAME, "Symbian"]],
1208
+ [
1209
+ /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
1210
+ // Firefox OS
1211
+ ],
1212
+ [VERSION, [NAME, FIREFOX + " OS"]],
1213
+ [
1214
+ /web0s;.+rt(tv)/i,
1215
+ /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
1216
+ // WebOS
1217
+ ],
1218
+ [VERSION, [NAME, "webOS"]],
1219
+ [
1220
+ /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
1221
+ // watchOS
1222
+ ],
1223
+ [VERSION, [NAME, "watchOS"]],
1224
+ [
1225
+ // Google Chromecast
1226
+ /crkey\/([\d\.]+)/i
1227
+ // Google Chromecast
1228
+ ],
1229
+ [VERSION, [NAME, CHROME + "cast"]],
1230
+ [
1231
+ /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
1232
+ // Chromium OS
1233
+ ],
1234
+ [[NAME, CHROMIUM_OS], VERSION],
1235
+ [
1236
+ // Smart TVs
1237
+ /panasonic;(viera)/i,
1238
+ // Panasonic Viera
1239
+ /(netrange)mmh/i,
1240
+ // Netrange
1241
+ /(nettv)\/(\d+\.[\w\.]+)/i,
1242
+ // NetTV
1243
+ // Console
1244
+ /(nintendo|playstation) ([wids345portablevuch]+)/i,
1245
+ // Nintendo/Playstation
1246
+ /(xbox); +xbox ([^\);]+)/i,
1247
+ // Microsoft Xbox (360, One, X, S, Series X, Series S)
1248
+ // Other
1249
+ /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
1250
+ // Joli/Palm
1251
+ /(mint)[\/\(\) ]?(\w*)/i,
1252
+ // Mint
1253
+ /(mageia|vectorlinux)[; ]/i,
1254
+ // Mageia/VectorLinux
1255
+ /([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,
1256
+ // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
1257
+ /(hurd|linux) ?([\w\.]*)/i,
1258
+ // Hurd/Linux
1259
+ /(gnu) ?([\w\.]*)/i,
1260
+ // GNU
1261
+ /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
1262
+ // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
1263
+ /(haiku) (\w+)/i
1264
+ // Haiku
1265
+ ],
1266
+ [NAME, VERSION],
1267
+ [
1268
+ /(sunos) ?([\w\.\d]*)/i
1269
+ // Solaris
1270
+ ],
1271
+ [[NAME, "Solaris"], VERSION],
1272
+ [
1273
+ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
1274
+ // Solaris
1275
+ /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
1276
+ // AIX
1277
+ /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
1278
+ // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
1279
+ /(unix) ?([\w\.]*)/i
1280
+ // UNIX
1281
+ ],
1282
+ [NAME, VERSION]
1283
+ ]
1284
+ };
1285
+ var UAParser2 = function(ua, extensions) {
1286
+ if (typeof ua === OBJ_TYPE) {
1287
+ extensions = ua;
1288
+ ua = undefined2;
1289
+ }
1290
+ if (!(this instanceof UAParser2)) {
1291
+ return new UAParser2(ua, extensions).getResult();
1292
+ }
1293
+ var _navigator = typeof window2 !== UNDEF_TYPE && window2.navigator ? window2.navigator : undefined2;
1294
+ var _ua = ua || (_navigator && _navigator.userAgent ? _navigator.userAgent : EMPTY);
1295
+ var _uach = _navigator && _navigator.userAgentData ? _navigator.userAgentData : undefined2;
1296
+ var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
1297
+ var _isSelfNav = _navigator && _navigator.userAgent == _ua;
1298
+ this.getBrowser = function() {
1299
+ var _browser = {};
1300
+ _browser[NAME] = undefined2;
1301
+ _browser[VERSION] = undefined2;
1302
+ rgxMapper.call(_browser, _ua, _rgxmap.browser);
1303
+ _browser[MAJOR] = majorize(_browser[VERSION]);
1304
+ if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {
1305
+ _browser[NAME] = "Brave";
1306
+ }
1307
+ return _browser;
1308
+ };
1309
+ this.getCPU = function() {
1310
+ var _cpu = {};
1311
+ _cpu[ARCHITECTURE] = undefined2;
1312
+ rgxMapper.call(_cpu, _ua, _rgxmap.cpu);
1313
+ return _cpu;
1314
+ };
1315
+ this.getDevice = function() {
1316
+ var _device = {};
1317
+ _device[VENDOR] = undefined2;
1318
+ _device[MODEL] = undefined2;
1319
+ _device[TYPE] = undefined2;
1320
+ rgxMapper.call(_device, _ua, _rgxmap.device);
1321
+ if (_isSelfNav && !_device[TYPE] && _uach && _uach.mobile) {
1322
+ _device[TYPE] = MOBILE;
1323
+ }
1324
+ if (_isSelfNav && _device[MODEL] == "Macintosh" && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {
1325
+ _device[MODEL] = "iPad";
1326
+ _device[TYPE] = TABLET;
1327
+ }
1328
+ return _device;
1329
+ };
1330
+ this.getEngine = function() {
1331
+ var _engine = {};
1332
+ _engine[NAME] = undefined2;
1333
+ _engine[VERSION] = undefined2;
1334
+ rgxMapper.call(_engine, _ua, _rgxmap.engine);
1335
+ return _engine;
1336
+ };
1337
+ this.getOS = function() {
1338
+ var _os = {};
1339
+ _os[NAME] = undefined2;
1340
+ _os[VERSION] = undefined2;
1341
+ rgxMapper.call(_os, _ua, _rgxmap.os);
1342
+ if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != "Unknown") {
1343
+ _os[NAME] = _uach.platform.replace(/chrome os/i, CHROMIUM_OS).replace(/macos/i, MAC_OS);
1344
+ }
1345
+ return _os;
1346
+ };
1347
+ this.getResult = function() {
1348
+ return {
1349
+ ua: this.getUA(),
1350
+ browser: this.getBrowser(),
1351
+ engine: this.getEngine(),
1352
+ os: this.getOS(),
1353
+ device: this.getDevice(),
1354
+ cpu: this.getCPU()
1355
+ };
1356
+ };
1357
+ this.getUA = function() {
1358
+ return _ua;
1359
+ };
1360
+ this.setUA = function(ua2) {
1361
+ _ua = typeof ua2 === STR_TYPE && ua2.length > UA_MAX_LENGTH ? trim(ua2, UA_MAX_LENGTH) : ua2;
1362
+ return this;
1363
+ };
1364
+ this.setUA(_ua);
1365
+ return this;
1366
+ };
1367
+ UAParser2.VERSION = LIBVERSION;
1368
+ UAParser2.BROWSER = enumerize([NAME, VERSION, MAJOR]);
1369
+ UAParser2.CPU = enumerize([ARCHITECTURE]);
1370
+ UAParser2.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
1371
+ UAParser2.ENGINE = UAParser2.OS = enumerize([NAME, VERSION]);
1372
+ if (typeof exports !== UNDEF_TYPE) {
1373
+ if (typeof module !== UNDEF_TYPE && module.exports) {
1374
+ exports = module.exports = UAParser2;
1375
+ }
1376
+ exports.UAParser = UAParser2;
1377
+ } else {
1378
+ if (typeof define === FUNC_TYPE && define.amd) {
1379
+ define(function() {
1380
+ return UAParser2;
1381
+ });
1382
+ } else if (typeof window2 !== UNDEF_TYPE) {
1383
+ window2.UAParser = UAParser2;
1384
+ }
1385
+ }
1386
+ var $ = typeof window2 !== UNDEF_TYPE && (window2.jQuery || window2.Zepto);
1387
+ if ($ && !$.ua) {
1388
+ var parser = new UAParser2();
1389
+ $.ua = parser.getResult();
1390
+ $.ua.get = function() {
1391
+ return parser.getUA();
1392
+ };
1393
+ $.ua.set = function(ua) {
1394
+ parser.setUA(ua);
1395
+ var result = parser.getResult();
1396
+ for (var prop in result) {
1397
+ $.ua[prop] = result[prop];
1398
+ }
1399
+ };
1400
+ }
1401
+ })(typeof window === "object" ? window : exports);
1402
+ }
1403
+ });
1404
+
1405
+ // index.ts
1406
+ init_react_import();
1407
+
1408
+ // src/HeadingAnalyzer.tsx
1409
+ init_react_import();
1410
+ import { useEffect as useEffect4, useState as useState5 } from "react";
1411
+
1412
+ // css-module:/home/runner/work/puck/puck/packages/plugin-heading-analyzer/src/HeadingAnalyzer.module.css#css-module
1413
+ init_react_import();
1414
+ var HeadingAnalyzer_module_default = { "HeadingAnalyzer": "_HeadingAnalyzer_116v6_1", "HeadingAnalyzer-cssWarning": "_HeadingAnalyzer-cssWarning_116v6_5", "HeadingAnalyzerItem": "_HeadingAnalyzerItem_116v6_9", "HeadingAnalyzerItem--missing": "_HeadingAnalyzerItem--missing_116v6_13" };
1415
+
1416
+ // src/HeadingAnalyzer.tsx
1417
+ import { usePuck } from "@measured/puck";
1418
+
1419
+ // ../core/components/SidebarSection/index.tsx
1420
+ init_react_import();
1421
+
1422
+ // css-module:/home/runner/work/puck/puck/packages/core/components/SidebarSection/styles.module.css#css-module
1423
+ init_react_import();
1424
+ var styles_module_default = { "SidebarSection": "_SidebarSection_125qe_1", "SidebarSection-title": "_SidebarSection-title_125qe_12", "SidebarSection--noBorderTop": "_SidebarSection--noBorderTop_125qe_20", "SidebarSection-content": "_SidebarSection-content_125qe_24", "SidebarSection--noPadding": "_SidebarSection--noPadding_125qe_28", "SidebarSection-breadcrumbLabel": "_SidebarSection-breadcrumbLabel_125qe_41", "SidebarSection-breadcrumbs": "_SidebarSection-breadcrumbs_125qe_70", "SidebarSection-breadcrumb": "_SidebarSection-breadcrumb_125qe_41", "SidebarSection-heading": "_SidebarSection-heading_125qe_82", "SidebarSection-loadingOverlay": "_SidebarSection-loadingOverlay_125qe_86" };
1425
+
1426
+ // ../core/lib/get-class-name-factory.ts
1427
+ init_react_import();
1428
+ var import_classnames = __toESM(require_classnames());
1429
+ var getClassNameFactory = (rootClass, styles, config = { baseClass: "" }) => (options = {}) => {
1430
+ if (typeof options === "string") {
1431
+ const descendant = options;
1432
+ const style = styles[`${rootClass}-${descendant}`];
1433
+ if (style) {
1434
+ return config.baseClass + styles[`${rootClass}-${descendant}`] || "";
1435
+ }
1436
+ return "";
1437
+ } else if (typeof options === "object") {
1438
+ const modifiers = options;
1439
+ const prefixedModifiers = {};
1440
+ for (let modifier in modifiers) {
1441
+ prefixedModifiers[styles[`${rootClass}--${modifier}`]] = modifiers[modifier];
1442
+ }
1443
+ const c = styles[rootClass];
1444
+ return config.baseClass + (0, import_classnames.default)(__spreadValues({
1445
+ [c]: !!c
1446
+ }, prefixedModifiers));
1447
+ } else {
1448
+ return config.baseClass + styles[rootClass] || "";
1449
+ }
1450
+ };
1451
+ var get_class_name_factory_default = getClassNameFactory;
1452
+
1453
+ // ../core/components/Heading/index.tsx
1454
+ init_react_import();
1455
+
1456
+ // css-module:/home/runner/work/puck/puck/packages/core/components/Heading/styles.module.css#css-module
1457
+ init_react_import();
1458
+ var styles_module_default2 = { "Heading": "_Heading_qxrry_1", "Heading--xxxxl": "_Heading--xxxxl_qxrry_12", "Heading--xxxl": "_Heading--xxxl_qxrry_18", "Heading--xxl": "_Heading--xxl_qxrry_22", "Heading--xl": "_Heading--xl_qxrry_26", "Heading--l": "_Heading--l_qxrry_30", "Heading--m": "_Heading--m_qxrry_34", "Heading--s": "_Heading--s_qxrry_38", "Heading--xs": "_Heading--xs_qxrry_42" };
1459
+
1460
+ // ../core/components/Heading/index.tsx
1461
+ import { jsx } from "react/jsx-runtime";
1462
+ var getClassName = get_class_name_factory_default("Heading", styles_module_default2);
1463
+ var Heading = ({ children, rank, size = "m" }) => {
1464
+ const Tag = rank ? `h${rank}` : "span";
1465
+ return /* @__PURE__ */ jsx(
1466
+ Tag,
1467
+ {
1468
+ className: getClassName({
1469
+ [size]: true
1470
+ }),
1471
+ children
1472
+ }
1473
+ );
1474
+ };
1475
+
1476
+ // ../../node_modules/lucide-react/dist/esm/lucide-react.js
1477
+ init_react_import();
1478
+
1479
+ // ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
1480
+ init_react_import();
1481
+ import { forwardRef, createElement } from "react";
1482
+
1483
+ // ../../node_modules/lucide-react/dist/esm/defaultAttributes.js
1484
+ init_react_import();
1485
+ var defaultAttributes = {
1486
+ xmlns: "http://www.w3.org/2000/svg",
1487
+ width: 24,
1488
+ height: 24,
1489
+ viewBox: "0 0 24 24",
1490
+ fill: "none",
1491
+ stroke: "currentColor",
1492
+ strokeWidth: 2,
1493
+ strokeLinecap: "round",
1494
+ strokeLinejoin: "round"
1495
+ };
1496
+
1497
+ // ../../node_modules/lucide-react/dist/esm/createLucideIcon.js
1498
+ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().trim();
1499
+ var createLucideIcon = (iconName, iconNode) => {
1500
+ const Component = forwardRef(
1501
+ (_a, ref) => {
1502
+ var _b = _a, { color = "currentColor", size = 24, strokeWidth = 2, absoluteStrokeWidth, className = "", children } = _b, rest = __objRest(_b, ["color", "size", "strokeWidth", "absoluteStrokeWidth", "className", "children"]);
1503
+ return createElement(
1504
+ "svg",
1505
+ __spreadValues(__spreadProps(__spreadValues({
1506
+ ref
1507
+ }, defaultAttributes), {
1508
+ width: size,
1509
+ height: size,
1510
+ stroke: color,
1511
+ strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
1512
+ className: ["lucide", `lucide-${toKebabCase(iconName)}`, className].join(" ")
1513
+ }), rest),
1514
+ [
1515
+ ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
1516
+ ...Array.isArray(children) ? children : [children]
1517
+ ]
1518
+ );
1519
+ }
1520
+ );
1521
+ Component.displayName = `${iconName}`;
1522
+ return Component;
1523
+ };
1524
+
1525
+ // ../../node_modules/lucide-react/dist/esm/icons/chevron-right.js
1526
+ init_react_import();
1527
+ var ChevronRight = createLucideIcon("ChevronRight", [
1528
+ ["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]
1529
+ ]);
1530
+
1531
+ // ../core/lib/use-breadcrumbs.ts
1532
+ init_react_import();
1533
+ import { useContext as useContext2, useMemo } from "react";
1534
+
1535
+ // ../core/components/DropZone/context.tsx
1536
+ init_react_import();
1537
+ import {
1538
+ createContext,
1539
+ useCallback,
1540
+ useState
1541
+ } from "react";
1542
+
1543
+ // ../core/lib/get-item.ts
1544
+ init_react_import();
1545
+
1546
+ // ../core/lib/root-droppable-id.ts
1547
+ init_react_import();
1548
+ var rootDroppableId = "default-zone";
1549
+
1550
+ // ../core/lib/setup-zone.ts
1551
+ init_react_import();
1552
+
1553
+ // ../core/lib/get-zone-id.ts
1554
+ init_react_import();
1555
+ var getZoneId = (zoneCompound) => {
1556
+ if (!zoneCompound) {
1557
+ return [];
1558
+ }
1559
+ if (zoneCompound && zoneCompound.indexOf(":") > -1) {
1560
+ return zoneCompound.split(":");
1561
+ }
1562
+ return [rootDroppableId, zoneCompound];
1563
+ };
1564
+
1565
+ // ../core/components/DropZone/context.tsx
1566
+ import { Fragment, jsx as jsx2 } from "react/jsx-runtime";
1567
+ var dropZoneContext = createContext(null);
1568
+
1569
+ // ../core/components/Puck/context.tsx
1570
+ init_react_import();
1571
+ import {
1572
+ createContext as createContext2,
1573
+ useContext,
1574
+ useEffect as useEffect3,
1575
+ useState as useState4
1576
+ } from "react";
1577
+
1578
+ // ../core/components/ViewportControls/default-viewports.ts
1579
+ init_react_import();
1580
+ var defaultViewports = [
1581
+ { width: 360, height: "auto", icon: "Smartphone", label: "Small" },
1582
+ { width: 768, height: "auto", icon: "Tablet", label: "Medium" },
1583
+ { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
1584
+ ];
1585
+
1586
+ // ../core/components/Puck/context.tsx
1587
+ var import_ua_parser_js = __toESM(require_ua_parser());
1588
+
1589
+ // ../core/lib/use-resolved-permissions.ts
1590
+ init_react_import();
1591
+ import { useCallback as useCallback2, useEffect, useState as useState2 } from "react";
1592
+
1593
+ // ../core/lib/flatten-data.ts
1594
+ init_react_import();
1595
+
1596
+ // ../core/lib/get-changed.ts
1597
+ init_react_import();
1598
+
1599
+ // ../core/lib/use-resolved-data.ts
1600
+ init_react_import();
1601
+ import { useCallback as useCallback3, useEffect as useEffect2, useState as useState3 } from "react";
1602
+
1603
+ // ../core/lib/resolve-component-data.ts
1604
+ init_react_import();
1605
+
1606
+ // ../core/lib/apply-dynamic-props.ts
1607
+ init_react_import();
1608
+
1609
+ // ../core/lib/resolve-root-data.ts
1610
+ init_react_import();
1611
+
1612
+ // ../core/components/Puck/context.tsx
1613
+ import { jsx as jsx3 } from "react/jsx-runtime";
1614
+ var defaultAppState = {
1615
+ data: { content: [], root: {} },
1616
+ ui: {
1617
+ leftSideBarVisible: true,
1618
+ rightSideBarVisible: true,
1619
+ arrayState: {},
1620
+ itemSelector: null,
1621
+ componentList: {},
1622
+ isDragging: false,
1623
+ viewports: {
1624
+ current: {
1625
+ width: defaultViewports[0].width,
1626
+ height: defaultViewports[0].height || "auto"
1627
+ },
1628
+ options: [],
1629
+ controlsVisible: true
1630
+ }
1631
+ }
1632
+ };
1633
+ var defaultContext = {
1634
+ state: defaultAppState,
1635
+ dispatch: () => null,
1636
+ config: { components: {} },
1637
+ componentState: {},
1638
+ setComponentState: () => {
1639
+ },
1640
+ resolveData: () => {
1641
+ },
1642
+ plugins: [],
1643
+ overrides: {},
1644
+ history: {},
1645
+ viewports: defaultViewports,
1646
+ zoomConfig: {
1647
+ autoZoom: 1,
1648
+ rootHeight: 0,
1649
+ zoom: 1
1650
+ },
1651
+ setZoomConfig: () => null,
1652
+ status: "LOADING",
1653
+ setStatus: () => null,
1654
+ iframe: {},
1655
+ safariFallbackMode: false,
1656
+ globalPermissions: {},
1657
+ getPermissions: () => ({}),
1658
+ refreshPermissions: () => null
1659
+ };
1660
+ var appContext = createContext2(defaultContext);
1661
+ function useAppContext() {
1662
+ const mainContext = useContext(appContext);
1663
+ return __spreadProps(__spreadValues({}, mainContext), {
1664
+ // Helpers
1665
+ setUi: (ui, recordHistory) => {
1666
+ return mainContext.dispatch({
1667
+ type: "setUi",
1668
+ ui,
1669
+ recordHistory
1670
+ });
1671
+ }
1672
+ });
1673
+ }
1674
+
1675
+ // ../core/lib/use-breadcrumbs.ts
1676
+ var convertPathDataToBreadcrumbs = (selectedItem, pathData, data) => {
1677
+ const id = selectedItem ? selectedItem == null ? void 0 : selectedItem.props.id : "";
1678
+ const currentPathData = pathData && id && pathData[id] ? __spreadValues({}, pathData[id]) : { label: "Page", path: [] };
1679
+ if (!id) {
1680
+ return [];
1681
+ }
1682
+ return currentPathData == null ? void 0 : currentPathData.path.reduce((acc, zoneCompound) => {
1683
+ const [area] = getZoneId(zoneCompound);
1684
+ if (area === rootDroppableId) {
1685
+ return [
1686
+ {
1687
+ label: "Page",
1688
+ selector: null
1689
+ }
1690
+ ];
1691
+ }
1692
+ const parentZoneCompound = acc.length > 0 ? acc[acc.length - 1].zoneCompound : rootDroppableId;
1693
+ let parentZone = data.content;
1694
+ if (parentZoneCompound && parentZoneCompound !== rootDroppableId) {
1695
+ parentZone = data.zones[parentZoneCompound];
1696
+ }
1697
+ if (!parentZone) {
1698
+ return acc;
1699
+ }
1700
+ const itemIndex = parentZone.findIndex(
1701
+ (queryItem) => queryItem.props.id === area
1702
+ );
1703
+ const item = parentZone[itemIndex];
1704
+ if (!item) {
1705
+ return acc;
1706
+ }
1707
+ return [
1708
+ ...acc,
1709
+ {
1710
+ label: item.type.toString(),
1711
+ selector: {
1712
+ index: itemIndex,
1713
+ zone: parentZoneCompound
1714
+ },
1715
+ zoneCompound
1716
+ }
1717
+ ];
1718
+ }, []);
1719
+ };
1720
+ var useBreadcrumbs = (renderCount) => {
1721
+ const {
1722
+ state: { data },
1723
+ selectedItem
1724
+ } = useAppContext();
1725
+ const dzContext = useContext2(dropZoneContext);
1726
+ return useMemo(() => {
1727
+ const breadcrumbs = convertPathDataToBreadcrumbs(
1728
+ selectedItem,
1729
+ dzContext == null ? void 0 : dzContext.pathData,
1730
+ data
1731
+ );
1732
+ if (renderCount) {
1733
+ return breadcrumbs.slice(breadcrumbs.length - renderCount);
1734
+ }
1735
+ return breadcrumbs;
1736
+ }, [selectedItem, dzContext == null ? void 0 : dzContext.pathData, renderCount]);
1737
+ };
1738
+
1739
+ // ../core/components/Loader/index.tsx
1740
+ init_react_import();
1741
+
1742
+ // ../core/lib/index.ts
1743
+ init_react_import();
1744
+
1745
+ // ../core/lib/filter.ts
1746
+ init_react_import();
1747
+
1748
+ // ../core/lib/reorder.ts
1749
+ init_react_import();
1750
+
1751
+ // ../core/lib/replace.ts
1752
+ init_react_import();
1753
+
1754
+ // css-module:/home/runner/work/puck/puck/packages/core/components/Loader/styles.module.css#css-module
1755
+ init_react_import();
1756
+ var styles_module_default3 = { "Loader": "_Loader_nacdm_13", "loader-animation": "_loader-animation_nacdm_1" };
1757
+
1758
+ // ../core/components/Loader/index.tsx
1759
+ import { jsx as jsx4 } from "react/jsx-runtime";
1760
+ var getClassName2 = get_class_name_factory_default("Loader", styles_module_default3);
1761
+ var Loader = (_a) => {
1762
+ var _b = _a, {
1763
+ color,
1764
+ size = 16
1765
+ } = _b, props = __objRest(_b, [
1766
+ "color",
1767
+ "size"
1768
+ ]);
1769
+ return /* @__PURE__ */ jsx4(
1770
+ "span",
1771
+ __spreadValues({
1772
+ className: getClassName2(),
1773
+ style: {
1774
+ width: size,
1775
+ height: size,
1776
+ color
1777
+ },
1778
+ "aria-label": "loading"
1779
+ }, props)
1780
+ );
1781
+ };
1782
+
1783
+ // ../core/components/SidebarSection/index.tsx
1784
+ import { jsx as jsx5, jsxs } from "react/jsx-runtime";
1785
+ var getClassName3 = get_class_name_factory_default("SidebarSection", styles_module_default);
1786
+ var SidebarSection = ({
1787
+ children,
1788
+ title,
1789
+ background,
1790
+ showBreadcrumbs,
1791
+ noBorderTop,
1792
+ noPadding,
1793
+ isLoading
1794
+ }) => {
1795
+ const { setUi } = useAppContext();
1796
+ const breadcrumbs = useBreadcrumbs(1);
1797
+ return /* @__PURE__ */ jsxs(
1798
+ "div",
1799
+ {
1800
+ className: getClassName3({ noBorderTop, noPadding }),
1801
+ style: { background },
1802
+ children: [
1803
+ /* @__PURE__ */ jsx5("div", { className: getClassName3("title"), children: /* @__PURE__ */ jsxs("div", { className: getClassName3("breadcrumbs"), children: [
1804
+ showBreadcrumbs ? breadcrumbs.map((breadcrumb, i) => /* @__PURE__ */ jsxs("div", { className: getClassName3("breadcrumb"), children: [
1805
+ /* @__PURE__ */ jsx5(
1806
+ "button",
1807
+ {
1808
+ type: "button",
1809
+ className: getClassName3("breadcrumbLabel"),
1810
+ onClick: () => setUi({ itemSelector: breadcrumb.selector }),
1811
+ children: breadcrumb.label
1812
+ }
1813
+ ),
1814
+ /* @__PURE__ */ jsx5(ChevronRight, { size: 16 })
1815
+ ] }, i)) : null,
1816
+ /* @__PURE__ */ jsx5("div", { className: getClassName3("heading"), children: /* @__PURE__ */ jsx5(Heading, { rank: "2", size: "xs", children: title }) })
1817
+ ] }) }),
1818
+ /* @__PURE__ */ jsx5("div", { className: getClassName3("content"), children }),
1819
+ isLoading && /* @__PURE__ */ jsx5("div", { className: getClassName3("loadingOverlay"), children: /* @__PURE__ */ jsx5(Loader, { size: 32 }) })
1820
+ ]
1821
+ }
1822
+ );
1823
+ };
1824
+
1825
+ // ../core/components/OutlineList/index.tsx
1826
+ init_react_import();
1827
+
1828
+ // css-module:/home/runner/work/puck/puck/packages/core/components/OutlineList/styles.module.css#css-module
1829
+ init_react_import();
1830
+ var styles_module_default4 = { "OutlineList": "_OutlineList_18bgy_1", "OutlineListItem": "_OutlineListItem_18bgy_20", "OutlineListItem--clickable": "_OutlineListItem--clickable_18bgy_35" };
1831
+
1832
+ // ../core/components/OutlineList/index.tsx
1833
+ import { jsx as jsx6 } from "react/jsx-runtime";
1834
+ var getClassName4 = get_class_name_factory_default("OutlineList", styles_module_default4);
1835
+ var getClassNameItem = get_class_name_factory_default("OutlineListItem", styles_module_default4);
1836
+ var OutlineList = ({ children }) => {
1837
+ return /* @__PURE__ */ jsx6("ul", { className: getClassName4(), children });
1838
+ };
1839
+ OutlineList.Clickable = ({ children }) => /* @__PURE__ */ jsx6("div", { className: getClassNameItem({ clickable: true }), children });
1840
+ OutlineList.Item = ({
1841
+ children,
1842
+ onClick
1843
+ }) => {
1844
+ return /* @__PURE__ */ jsx6(
1845
+ "li",
1846
+ {
1847
+ className: getClassNameItem({ clickable: !!onClick }),
1848
+ onClick,
1849
+ children
1850
+ }
1851
+ );
1852
+ };
1853
+
1854
+ // ../core/lib/scroll-into-view.ts
1855
+ init_react_import();
1856
+ var scrollIntoView = (el) => {
1857
+ const oldStyle = __spreadValues({}, el.style);
1858
+ el.style.scrollMargin = "256px";
1859
+ if (el) {
1860
+ el == null ? void 0 : el.scrollIntoView({ behavior: "smooth" });
1861
+ el.style.scrollMargin = oldStyle.scrollMargin || "";
1862
+ }
1863
+ };
1864
+
1865
+ // ../core/lib/get-frame.ts
1866
+ init_react_import();
1867
+ var getFrame = () => {
1868
+ let frame = document.querySelector("#preview-frame");
1869
+ if ((frame == null ? void 0 : frame.tagName) === "IFRAME") {
1870
+ frame = frame.contentDocument;
1871
+ }
1872
+ return frame;
1873
+ };
1874
+
1875
+ // src/HeadingAnalyzer.tsx
1876
+ import ReactFromJSONModule from "react-from-json";
1877
+ import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
1878
+ var getClassName5 = get_class_name_factory_default("HeadingAnalyzer", HeadingAnalyzer_module_default);
1879
+ var getClassNameItem2 = get_class_name_factory_default("HeadingAnalyzerItem", HeadingAnalyzer_module_default);
1880
+ var ReactFromJSON = ReactFromJSONModule.default || ReactFromJSONModule;
1881
+ var dataAttr = "data-puck-heading-analyzer-id";
1882
+ var getOutline = ({
1883
+ addDataAttr = false,
1884
+ frame
1885
+ } = {}) => {
1886
+ const headings = (frame == null ? void 0 : frame.querySelectorAll("h1,h2,h3,h4,h5,h6")) || [];
1887
+ const _outline = [];
1888
+ headings.forEach((item, i) => {
1889
+ if (addDataAttr) {
1890
+ item.setAttribute(dataAttr, i.toString());
1891
+ }
1892
+ _outline.push({
1893
+ rank: parseInt(item.tagName.split("H")[1]),
1894
+ text: item.textContent,
1895
+ analyzeId: i.toString()
1896
+ });
1897
+ });
1898
+ return _outline;
1899
+ };
1900
+ function buildHierarchy(frame) {
1901
+ var _a, _b;
1902
+ const headings = getOutline({ addDataAttr: true, frame });
1903
+ const root = { rank: 0, children: [], text: "" };
1904
+ let path = [root];
1905
+ for (let heading of headings) {
1906
+ const node = {
1907
+ rank: heading.rank,
1908
+ text: heading.text,
1909
+ analyzeId: heading.analyzeId,
1910
+ children: []
1911
+ };
1912
+ if (node.rank === 1) {
1913
+ path = [root];
1914
+ } else {
1915
+ while (path[path.length - 1].rank >= node.rank) {
1916
+ path.pop();
1917
+ }
1918
+ while (path.length < node.rank) {
1919
+ const missingNode = {
1920
+ rank: path.length,
1921
+ missing: true,
1922
+ children: [],
1923
+ text: ""
1924
+ };
1925
+ (_a = path[path.length - 1].children) == null ? void 0 : _a.push(missingNode);
1926
+ path.push(missingNode);
1927
+ }
1928
+ }
1929
+ (_b = path[path.length - 1].children) == null ? void 0 : _b.push(node);
1930
+ path.push(node);
1931
+ }
1932
+ return root.children;
1933
+ }
1934
+ var HeadingAnalyzer = () => {
1935
+ const { appState } = usePuck();
1936
+ const [hierarchy, setHierarchy] = useState5([]);
1937
+ const [firstRender, setFirstRender] = useState5(true);
1938
+ useEffect4(() => {
1939
+ const frame = getFrame();
1940
+ if (!frame) return;
1941
+ if (firstRender) {
1942
+ setTimeout(() => {
1943
+ setHierarchy(buildHierarchy(frame));
1944
+ setFirstRender(false);
1945
+ }, 100);
1946
+ } else {
1947
+ setHierarchy(buildHierarchy(frame));
1948
+ }
1949
+ }, [appState.data]);
1950
+ return /* @__PURE__ */ jsxs2("div", { className: getClassName5(), children: [
1951
+ /* @__PURE__ */ jsxs2(
1952
+ "small",
1953
+ {
1954
+ className: getClassName5("cssWarning"),
1955
+ style: {
1956
+ color: "var(--puck-color-red-04)",
1957
+ display: "block",
1958
+ marginBottom: 16
1959
+ },
1960
+ children: [
1961
+ "Heading analyzer styles not loaded. Please review the",
1962
+ " ",
1963
+ /* @__PURE__ */ jsx7("a", { href: "https://github.com/measuredco/puck/blob/main/packages/plugin-heading-analyzer/README.md", children: "README" }),
1964
+ "."
1965
+ ]
1966
+ }
1967
+ ),
1968
+ hierarchy.length === 0 && /* @__PURE__ */ jsx7("div", { children: "No headings." }),
1969
+ /* @__PURE__ */ jsx7(OutlineList, { children: /* @__PURE__ */ jsx7(
1970
+ ReactFromJSON,
1971
+ {
1972
+ mapping: {
1973
+ Root: (props) => /* @__PURE__ */ jsx7(Fragment2, { children: props.children }),
1974
+ OutlineListItem: (props) => /* @__PURE__ */ jsxs2(OutlineList.Item, { children: [
1975
+ /* @__PURE__ */ jsx7(OutlineList.Clickable, { children: /* @__PURE__ */ jsx7(
1976
+ "small",
1977
+ {
1978
+ className: getClassNameItem2({ missing: props.missing }),
1979
+ onClick: typeof props.analyzeId == "undefined" ? void 0 : (e) => {
1980
+ e.stopPropagation();
1981
+ const frame = getFrame();
1982
+ const el = frame == null ? void 0 : frame.querySelector(
1983
+ `[${dataAttr}="${props.analyzeId}"]`
1984
+ );
1985
+ const oldStyle = __spreadValues({}, el.style);
1986
+ if (el) {
1987
+ scrollIntoView(el);
1988
+ el.style.outline = "4px solid var(--puck-color-rose-06)";
1989
+ el.style.outlineOffset = "4px";
1990
+ setTimeout(() => {
1991
+ el.style.outline = oldStyle.outline || "";
1992
+ el.style.outlineOffset = oldStyle.outlineOffset || "";
1993
+ }, 2e3);
1994
+ }
1995
+ },
1996
+ children: props.missing ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
1997
+ /* @__PURE__ */ jsxs2("b", { children: [
1998
+ "H",
1999
+ props.rank
2000
+ ] }),
2001
+ ": Missing"
2002
+ ] }) : /* @__PURE__ */ jsxs2(Fragment2, { children: [
2003
+ /* @__PURE__ */ jsxs2("b", { children: [
2004
+ "H",
2005
+ props.rank
2006
+ ] }),
2007
+ ": ",
2008
+ props.text
2009
+ ] })
2010
+ }
2011
+ ) }),
2012
+ /* @__PURE__ */ jsx7(OutlineList, { children: props.children })
2013
+ ] })
2014
+ },
2015
+ entry: {
2016
+ props: { children: hierarchy },
2017
+ type: "Root"
2018
+ },
2019
+ mapProp: (prop) => {
2020
+ if (prop && prop.rank) {
2021
+ return {
2022
+ type: "OutlineListItem",
2023
+ props: prop
2024
+ };
2025
+ }
2026
+ return prop;
2027
+ }
2028
+ }
2029
+ ) })
2030
+ ] });
2031
+ };
2032
+ var headingAnalyzer = {
2033
+ overrides: {
2034
+ fields: ({ children, itemSelector }) => /* @__PURE__ */ jsxs2(Fragment2, { children: [
2035
+ children,
2036
+ /* @__PURE__ */ jsx7("div", { style: { display: itemSelector ? "none" : "block" }, children: /* @__PURE__ */ jsx7(SidebarSection, { title: "Heading Outline", children: /* @__PURE__ */ jsx7(HeadingAnalyzer, {}) }) })
2037
+ ] })
2038
+ }
2039
+ };
2040
+ var HeadingAnalyzer_default = headingAnalyzer;
2041
+ export {
2042
+ HeadingAnalyzer_default as default
2043
+ };
2044
+ /*! Bundled license information:
2045
+
2046
+ classnames/index.js:
2047
+ (*!
2048
+ Copyright (c) 2018 Jed Watson.
2049
+ Licensed under the MIT License (MIT), see
2050
+ http://jedwatson.github.io/classnames
2051
+ *)
2052
+
2053
+ lucide-react/dist/esm/defaultAttributes.js:
2054
+ (**
2055
+ * @license lucide-react v0.298.0 - ISC
2056
+ *
2057
+ * This source code is licensed under the ISC license.
2058
+ * See the LICENSE file in the root directory of this source tree.
2059
+ *)
2060
+
2061
+ lucide-react/dist/esm/createLucideIcon.js:
2062
+ (**
2063
+ * @license lucide-react v0.298.0 - ISC
2064
+ *
2065
+ * This source code is licensed under the ISC license.
2066
+ * See the LICENSE file in the root directory of this source tree.
2067
+ *)
2068
+
2069
+ lucide-react/dist/esm/icons/chevron-right.js:
2070
+ (**
2071
+ * @license lucide-react v0.298.0 - ISC
2072
+ *
2073
+ * This source code is licensed under the ISC license.
2074
+ * See the LICENSE file in the root directory of this source tree.
2075
+ *)
2076
+
2077
+ lucide-react/dist/esm/lucide-react.js:
2078
+ (**
2079
+ * @license lucide-react v0.298.0 - ISC
2080
+ *
2081
+ * This source code is licensed under the ISC license.
2082
+ * See the LICENSE file in the root directory of this source tree.
2083
+ *)
2084
+ */