@measured/puck-plugin-heading-analyzer 0.14.2-canary.c4a66ad → 0.14.2-canary.e529e85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +1472 -49
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -34978,36 +34978,33 @@ function querySelectorAll(parentNode, selector) {
34978
34978
  function getOptions(shared2, fromBinding) {
34979
34979
  return __spreadValues(__spreadValues({}, shared2), fromBinding);
34980
34980
  }
34981
- function bindEvent(el, binding, options) {
34981
+ function bindEvent(win, binding, options) {
34982
34982
  let timer;
34983
- if (el.nodeName === "IFRAME") {
34983
+ if (!loaded) {
34984
34984
  timer = setInterval(() => {
34985
- const currentWin = getWin(el);
34986
- if ((currentWin == null ? void 0 : currentWin.document.readyState) === "complete") {
34987
- currentWin.addEventListener(binding.eventName, binding.fn, options);
34988
- clearInterval(timer);
34985
+ if (win.document.readyState === "complete") {
34986
+ win.addEventListener(binding.eventName, binding.fn, options);
34987
+ loaded = true;
34989
34988
  }
34990
34989
  }, 100);
34991
- return timer;
34990
+ } else {
34991
+ win.addEventListener(binding.eventName, binding.fn, options);
34992
34992
  }
34993
- const win = getWin(el);
34994
- win == null ? void 0 : win.addEventListener(binding.eventName, binding.fn, options);
34995
34993
  return timer;
34996
34994
  }
34997
34995
  function bindEvents(el, bindings, sharedOptions) {
34998
34996
  const unbindings = bindings.flatMap((binding) => {
34999
34997
  const iframes = querySelectorAll(window.document, "[data-rfd-iframe]");
35000
- const els = [el, ...iframes];
35001
- return els.map((currentEl) => {
35002
- if (!currentEl)
34998
+ const windows = [el, ...iframes.map((iframe) => iframe.contentWindow)];
34999
+ return windows.map((win) => {
35000
+ if (!win)
35003
35001
  return function unbind() {
35004
35002
  };
35005
35003
  const options = getOptions(sharedOptions, binding.options);
35006
- const timer = bindEvent(currentEl, binding, options);
35004
+ const timer = bindEvent(win, binding, options);
35007
35005
  return function unbind() {
35008
35006
  clearInterval(timer);
35009
- const win = getWin(currentEl);
35010
- win == null ? void 0 : win.removeEventListener(binding.eventName, binding.fn, options);
35007
+ win.removeEventListener(binding.eventName, binding.fn, options);
35011
35008
  };
35012
35009
  });
35013
35010
  });
@@ -35207,6 +35204,26 @@ function getFurthestAway({
35207
35204
  }).sort((a2, b) => b.distance - a2.distance);
35208
35205
  return sorted[0] ? sorted[0].id : null;
35209
35206
  }
35207
+ function normalizeFamilies(pageBorderBox, candidates) {
35208
+ const families = candidates.reduce((acc, candidate) => {
35209
+ var _a3;
35210
+ const familyName = ((_a3 = candidate.parents[0]) == null ? void 0 : _a3.id) || candidate.descriptor.id;
35211
+ const family = acc[familyName] || [];
35212
+ const generation = candidate.parents.length;
35213
+ family[generation] = [...family[generation] || [], candidate];
35214
+ return __spreadProps(__spreadValues({}, acc), {
35215
+ [familyName]: family
35216
+ });
35217
+ }, {});
35218
+ return Object.keys(families).map((familyName) => {
35219
+ const family = families[familyName].flat();
35220
+ const reversedFamily = [...family].reverse();
35221
+ const chosenMember = reversedFamily.find((member) => {
35222
+ return pageBorderBox.center.x < member.page.borderBox.right && pageBorderBox.center.x > member.page.borderBox.left && pageBorderBox.center.y > member.page.borderBox.top && pageBorderBox.center.y < member.page.borderBox.bottom;
35223
+ });
35224
+ return chosenMember || family[0];
35225
+ });
35226
+ }
35210
35227
  function getDroppableOver({
35211
35228
  pageBorderBox,
35212
35229
  draggable: draggable2,
@@ -35247,10 +35264,14 @@ function getDroppableOver({
35247
35264
  if (candidates.length === 1) {
35248
35265
  return candidates[0].descriptor.id;
35249
35266
  }
35267
+ const normalizedCandidates = normalizeFamilies(pageBorderBox, candidates);
35268
+ if (normalizedCandidates.length === 1) {
35269
+ return normalizedCandidates[0].descriptor.id;
35270
+ }
35250
35271
  return getFurthestAway({
35251
35272
  pageBorderBox,
35252
35273
  draggable: draggable2,
35253
- candidates
35274
+ candidates: normalizedCandidates
35254
35275
  });
35255
35276
  }
35256
35277
  function getIsDisplaced({
@@ -37621,7 +37642,7 @@ function getBody() {
37621
37642
  !document.body ? process.env.NODE_ENV !== "production" ? invariant2(false, "document.body is not ready") : invariant2(false) : void 0;
37622
37643
  return document.body;
37623
37644
  }
37624
- var import_react5, import_react_dom2, isProduction$1, spacesAndTabs, lineStartWithSpaces, clean$2, getDevMessage, getFormattedMessage, isDisabledFlag, warning2, error, getWin, isProduction2, prefix$1, RbdInvariant, ErrorBoundary, dragHandleUsageInstructions, position, onDragStart, withLocation, withCombine, onDragUpdate, returnedToStart, onDragEnd, preset, preset$1, origin, add, subtract, isEqual$1, negate, patch, distance2, closest$1, apply, executeClip, offsetByPosition, getCorners, noSpacing2, scroll$1, increase, clip2, getSubject, scrollDroppable, toDroppableMap, toDraggableMap, toDroppableList, toDraggableList, getDraggablesInsideDroppable, removeDraggableFromList, moveToNextCombine, isHomeOf, noDisplacedBy, emptyGroups, noImpact, noImpact$1, isWithin, isPartiallyVisibleThroughFrame, isTotallyVisibleThroughFrame, vertical, horizontal, isTotallyVisibleThroughFrameOnAxis, getDroppableDisplaced, isVisibleInDroppable, isVisibleInViewport, isVisible$1, isPartiallyVisible, isTotallyVisible, isTotallyVisibleOnAxis, getShouldAnimate, fromCombine, fromReorder, moveToNextIndex, getCombinedItemDisplacement, whenCombining, distanceFromStartToBorderBoxCenter, distanceFromEndToBorderBoxCenter, getCrossAxisBorderBoxCenter, goAfter, goBefore, goIntoStart, whenReordering, withDroppableDisplacement, getResultWithoutDroppableDisplacement, getPageBorderBoxCenterFromImpact, scrollViewport, speculativelyIncrease, withViewportDisplacement, getClientFromPageBorderBoxCenter, isTotallyVisibleInNewLocation, moveToNextPlace, getKnownActive, getBestCrossAxisDroppable, getCurrentPageBorderBoxCenter, getCurrentPageBorderBox, getClosestDraggable, getDisplacedBy, getRequiredGrowthForPlaceholder, withMaxScroll, addPlaceholder, removePlaceholder, moveToNewDroppable, moveCrossAxis, whatIsDraggedOver, getDroppableOver$1, moveInDirection, offsetRectByPosition, withDroppableScroll, getReorderImpact, combineThresholdDivisor, getCombineImpact, getDragImpact, patchDroppableMap, clearUnusedPlaceholder, recomputePlaceholders, update, recompute, getClientBorderBoxCenter, refreshSnap, getHomeLocation, getLiftEffect, patchDimensionMap, start, finish, offsetDraggable, getFrame, adjustAdditionsForScrollChanges, timingsKey, publishWhileDraggingInVirtual, isSnapping, postDroppableChange, idle$2, reducer, beforeInitialCapture, lift$1, initialPublish, publishWhileDragging, collectionStarting, updateDroppableScroll, updateDroppableIsEnabled, updateDroppableIsCombineEnabled, move, moveByWindowScroll, updateViewportMaxScroll, moveUp, moveDown, moveRight, moveLeft, flush, animateDrop, completeDrop, drop$1, dropPending, dropAnimationFinished, lift, style, curves, combine, timings, outOfTheWayTiming, transitions, moveTo, transforms, minDropTime, maxDropTime, dropTimeRange, maxDropTimeAtDistance, cancelDropModifier, getDropDuration, getNewHomeClientOffset, getDropImpact, dropMiddleware, drop, getWindowScroll3, shouldEnd, scrollListener, scrollListener$1, getExpiringAnnounce, getAsyncMarshal, areLocationsEqual, isCombineEqual, isCriticalEqual, withTimings, getDragStart, getPublisher, responders, dropAnimationFinishMiddleware, dropAnimationFinish, dropAnimationFlushOnScrollMiddleware, dropAnimationFlushOnScroll, dimensionMarshalStopper, focus, shouldStop, autoScroll, pendingDrop, pendingDrop$1, composeEnhancers, createStore2, clean$1, getMaxScroll, getDocumentElement, getMaxWindowScroll, getViewport, getInitialPublish, createDimensionMarshal, canStartDrag, scrollWindow, getScrollableDroppables, getScrollableDroppableOver, getBestScrollableDroppable, defaultAutoScrollerOptions, getDistanceThresholds, getPercentage, minScroll, getValueFromDistance, dampenValueByTime, getValue, getScrollOnAxis, adjustForSizeLimits, clean, getScroll$1, smallestSigned, getOverlap, canPartiallyScroll, canScrollWindow, getWindowOverlap, canScrollDroppable, getDroppableOverlap, getWindowScrollChange, getDroppableScrollChange, iframeCache, createCol, matrixPattern, getMatrix, getOrigin, findNearestTransform, defaultTransform, getTransform, applyTransformPoint, applyTransformRect, applyTransformSpacing, applyTransformBox, resetToOrigin, getIframeScroll, scroll, createFluidScroller, createJumpScroller, createAutoScroller, prefix2, dragHandle, draggable, droppable, scrollContainer, makeGetSelector, getStyles, noPointerEvents, getStyles$1, useIsomorphicLayoutEffect2, useLayoutEffect2, getHead, createStyleEl, alwaysDataAttr, dynamicDataAttr, getWindowFromEl, dragHandleCache, StoreContext, getBodyElement, visuallyHidden, visuallyHidden$1, getId, count$1, defaults, useUniqueId$1, AppContext, peerDependencies, semver, getVersion, isSatisfied, checkReactVersion, suffix, checkDoctype, tab, enter, escape, space, pageUp, pageDown, end, home, arrowLeft, arrowUp, arrowRight, arrowDown, preventedKeys, preventStandardKeyEvents, supportedEventName, supportedPageVisibilityEventName, primaryButton, sloppyClickThreshold, idle$1, scrollJumpKeys, idle, timeForLongPress, forcePressThreshold, interactiveTagNames, getBorderBoxCenterPosition, supportedMatchesName, defaultSensors, createResponders, createAutoScrollerOptions, count, useUniqueContextId$1, zIndexOptions, getDraggingTransition, getDraggingOpacity, getShouldDraggingAnimate, applyOffsetBox, DroppableContext, Draggable, Draggable$1, isStrictEqual, whatIsDraggedOverFromResult, getCombineWithFromResult, getCombineWithFromImpact, atRest, makeMapStateToProps$1, mapDispatchToProps$1, ConnectedDraggable, ConnectedDraggable$1, getScroll, isEqual2, isScroll, isAuto, isVisible, isEither, isBoth, isElementScrollable, isBodyScrollable, getClosestScrollable, getClosestScrollable$1, getIsFixed, getEnv, getDroppableDimension, getClient, getDimension, immediate, delayed, getListenerOptions, getScrollable, getClosestScrollableFromDrag, empty, getSize, getStyle, Placeholder, Placeholder$1, shared, standard, virtual, AnimateInOut, Droppable, Droppable$1, defaultProps, attachDefaultPropsToOwnProps, isMatchingType, getDraggable, makeMapStateToProps, mapDispatchToProps, ConnectedDroppable, ConnectedDroppable$1;
37645
+ var import_react5, import_react_dom2, isProduction$1, spacesAndTabs, lineStartWithSpaces, clean$2, getDevMessage, getFormattedMessage, isDisabledFlag, warning2, error, loaded, isProduction2, prefix$1, RbdInvariant, ErrorBoundary, dragHandleUsageInstructions, position, onDragStart, withLocation, withCombine, onDragUpdate, returnedToStart, onDragEnd, preset, preset$1, origin, add, subtract, isEqual$1, negate, patch, distance2, closest$1, apply, executeClip, offsetByPosition, getCorners, noSpacing2, scroll$1, increase, clip2, getSubject, scrollDroppable, toDroppableMap, toDraggableMap, toDroppableList, toDraggableList, getDraggablesInsideDroppable, removeDraggableFromList, moveToNextCombine, isHomeOf, noDisplacedBy, emptyGroups, noImpact, noImpact$1, isWithin, isPartiallyVisibleThroughFrame, isTotallyVisibleThroughFrame, vertical, horizontal, isTotallyVisibleThroughFrameOnAxis, getDroppableDisplaced, isVisibleInDroppable, isVisibleInViewport, isVisible$1, isPartiallyVisible, isTotallyVisible, isTotallyVisibleOnAxis, getShouldAnimate, fromCombine, fromReorder, moveToNextIndex, getCombinedItemDisplacement, whenCombining, distanceFromStartToBorderBoxCenter, distanceFromEndToBorderBoxCenter, getCrossAxisBorderBoxCenter, goAfter, goBefore, goIntoStart, whenReordering, withDroppableDisplacement, getResultWithoutDroppableDisplacement, getPageBorderBoxCenterFromImpact, scrollViewport, speculativelyIncrease, withViewportDisplacement, getClientFromPageBorderBoxCenter, isTotallyVisibleInNewLocation, moveToNextPlace, getKnownActive, getBestCrossAxisDroppable, getCurrentPageBorderBoxCenter, getCurrentPageBorderBox, getClosestDraggable, getDisplacedBy, getRequiredGrowthForPlaceholder, withMaxScroll, addPlaceholder, removePlaceholder, moveToNewDroppable, moveCrossAxis, whatIsDraggedOver, getDroppableOver$1, moveInDirection, offsetRectByPosition, withDroppableScroll, getReorderImpact, combineThresholdDivisor, getCombineImpact, getDragImpact, patchDroppableMap, clearUnusedPlaceholder, recomputePlaceholders, update, recompute, getClientBorderBoxCenter, refreshSnap, getHomeLocation, getLiftEffect, patchDimensionMap, start, finish, offsetDraggable, getFrame, adjustAdditionsForScrollChanges, timingsKey, publishWhileDraggingInVirtual, isSnapping, postDroppableChange, idle$2, reducer, beforeInitialCapture, lift$1, initialPublish, publishWhileDragging, collectionStarting, updateDroppableScroll, updateDroppableIsEnabled, updateDroppableIsCombineEnabled, move, moveByWindowScroll, updateViewportMaxScroll, moveUp, moveDown, moveRight, moveLeft, flush, animateDrop, completeDrop, drop$1, dropPending, dropAnimationFinished, lift, style, curves, combine, timings, outOfTheWayTiming, transitions, moveTo, transforms, minDropTime, maxDropTime, dropTimeRange, maxDropTimeAtDistance, cancelDropModifier, getDropDuration, getNewHomeClientOffset, getDropImpact, dropMiddleware, drop, getWindowScroll3, shouldEnd, scrollListener, scrollListener$1, getExpiringAnnounce, getAsyncMarshal, areLocationsEqual, isCombineEqual, isCriticalEqual, withTimings, getDragStart, getPublisher, responders, dropAnimationFinishMiddleware, dropAnimationFinish, dropAnimationFlushOnScrollMiddleware, dropAnimationFlushOnScroll, dimensionMarshalStopper, focus, shouldStop, autoScroll, pendingDrop, pendingDrop$1, composeEnhancers, createStore2, clean$1, getMaxScroll, getDocumentElement, getMaxWindowScroll, getViewport, getInitialPublish, createDimensionMarshal, canStartDrag, scrollWindow, getScrollableDroppables, getScrollableDroppableOver, getBestScrollableDroppable, defaultAutoScrollerOptions, getDistanceThresholds, getPercentage, minScroll, getValueFromDistance, dampenValueByTime, getValue, getScrollOnAxis, adjustForSizeLimits, clean, getScroll$1, smallestSigned, getOverlap, canPartiallyScroll, canScrollWindow, getWindowOverlap, canScrollDroppable, getDroppableOverlap, getWindowScrollChange, getDroppableScrollChange, iframeCache, createCol, matrixPattern, getMatrix, getOrigin, findNearestTransform, defaultTransform, getTransform, applyTransformPoint, applyTransformRect, applyTransformSpacing, applyTransformBox, resetToOrigin, getIframeScroll, scroll, createFluidScroller, createJumpScroller, createAutoScroller, prefix2, dragHandle, draggable, droppable, scrollContainer, makeGetSelector, getStyles, noPointerEvents, getStyles$1, useIsomorphicLayoutEffect2, useLayoutEffect2, getHead, createStyleEl, alwaysDataAttr, dynamicDataAttr, getWindowFromEl, dragHandleCache, StoreContext, getBodyElement, visuallyHidden, visuallyHidden$1, getId, count$1, defaults, useUniqueId$1, AppContext, peerDependencies, semver, getVersion, isSatisfied, checkReactVersion, suffix, checkDoctype, tab, enter, escape, space, pageUp, pageDown, end, home, arrowLeft, arrowUp, arrowRight, arrowDown, preventedKeys, preventStandardKeyEvents, supportedEventName, supportedPageVisibilityEventName, primaryButton, sloppyClickThreshold, idle$1, scrollJumpKeys, idle, timeForLongPress, forcePressThreshold, interactiveTagNames, getBorderBoxCenterPosition, supportedMatchesName, defaultSensors, createResponders, createAutoScrollerOptions, count, useUniqueContextId$1, zIndexOptions, getDraggingTransition, getDraggingOpacity, getShouldDraggingAnimate, applyOffsetBox, DroppableContext, Draggable, Draggable$1, isStrictEqual, whatIsDraggedOverFromResult, getCombineWithFromResult, getCombineWithFromImpact, atRest, makeMapStateToProps$1, mapDispatchToProps$1, ConnectedDraggable, ConnectedDraggable$1, getScroll, isEqual2, isScroll, isAuto, isVisible, isEither, isBoth, isElementScrollable, isBodyScrollable, getClosestScrollable, getClosestScrollable$1, getIsFixed, getEnv, getDroppableDimension, getClient, getParents, getDimension, immediate, delayed, getListenerOptions, getScrollable, getClosestScrollableFromDrag, empty, getSize, getStyle, Placeholder, Placeholder$1, shared, standard, virtual, AnimateInOut, Droppable, Droppable$1, defaultProps, attachDefaultPropsToOwnProps, isMatchingType, getDraggable, makeMapStateToProps, mapDispatchToProps, ConnectedDroppable, ConnectedDroppable$1;
37625
37646
  var init_dnd_esm = __esm({
37626
37647
  "../../node_modules/@measured/dnd/dist/dnd.esm.js"() {
37627
37648
  init_react_import();
@@ -37650,13 +37671,7 @@ var init_dnd_esm = __esm({
37650
37671
  isDisabledFlag = "__@hello-pangea/dnd-disable-dev-warnings";
37651
37672
  warning2 = log.bind(null, "warn");
37652
37673
  error = log.bind(null, "error");
37653
- getWin = (el) => {
37654
- let win = el;
37655
- if (el.nodeName === "IFRAME") {
37656
- win = el.contentWindow;
37657
- }
37658
- return win;
37659
- };
37674
+ loaded = false;
37660
37675
  isProduction2 = process.env.NODE_ENV === "production";
37661
37676
  prefix$1 = "Invariant failed";
37662
37677
  RbdInvariant = class extends Error {
@@ -41996,7 +42011,8 @@ var init_dnd_esm = __esm({
41996
42011
  client,
41997
42012
  page,
41998
42013
  closest: closest2,
41999
- transform
42014
+ transform,
42015
+ parents
42000
42016
  }) => {
42001
42017
  const frame = (() => {
42002
42018
  if (!closest2) {
@@ -42045,7 +42061,8 @@ var init_dnd_esm = __esm({
42045
42061
  page,
42046
42062
  frame,
42047
42063
  subject,
42048
- transform
42064
+ transform,
42065
+ parents
42049
42066
  };
42050
42067
  return dimension;
42051
42068
  };
@@ -42082,6 +42099,27 @@ var init_dnd_esm = __esm({
42082
42099
  });
42083
42100
  return client;
42084
42101
  };
42102
+ getParents = (ref2) => {
42103
+ var _a3;
42104
+ const contextId = ref2.getAttribute(`${prefix2}-droppable-context-id`);
42105
+ const parentDescriptors = [];
42106
+ if (!contextId)
42107
+ return [];
42108
+ let currentEl = ref2;
42109
+ while (currentEl) {
42110
+ currentEl = (_a3 = currentEl.parentElement) == null ? void 0 : _a3.closest(`[${prefix2}-droppable-context-id="${contextId}"]`);
42111
+ const id = currentEl == null ? void 0 : currentEl.getAttribute(`${prefix2}-droppable-id`);
42112
+ if (id) {
42113
+ parentDescriptors.push({
42114
+ id,
42115
+ mode: "standard",
42116
+ type: "DEFAULT"
42117
+ });
42118
+ }
42119
+ }
42120
+ parentDescriptors.reverse();
42121
+ return parentDescriptors;
42122
+ };
42085
42123
  getDimension = ({
42086
42124
  ref: ref2,
42087
42125
  descriptor,
@@ -42117,6 +42155,7 @@ var init_dnd_esm = __esm({
42117
42155
  shouldClipSubject
42118
42156
  };
42119
42157
  })();
42158
+ const parents = getParents(ref2);
42120
42159
  const dimension = getDroppableDimension({
42121
42160
  descriptor,
42122
42161
  isEnabled: !isDropDisabled,
@@ -42126,7 +42165,8 @@ var init_dnd_esm = __esm({
42126
42165
  client,
42127
42166
  page,
42128
42167
  closest: closest2,
42129
- transform
42168
+ transform,
42169
+ parents
42130
42170
  });
42131
42171
  return dimension;
42132
42172
  };
@@ -42597,6 +42637,1291 @@ var init_dnd_esm = __esm({
42597
42637
  }
42598
42638
  });
42599
42639
 
42640
+ // ../../node_modules/ua-parser-js/src/ua-parser.js
42641
+ var require_ua_parser = __commonJS({
42642
+ "../../node_modules/ua-parser-js/src/ua-parser.js"(exports, module2) {
42643
+ init_react_import();
42644
+ (function(window2, undefined2) {
42645
+ "use strict";
42646
+ 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", TYPE2 = "type", VENDOR = "vendor", VERSION = "version", ARCHITECTURE = "architecture", CONSOLE = "console", MOBILE = "mobile", TABLET = "tablet", SMARTTV = "smarttv", WEARABLE = "wearable", EMBEDDED = "embedded", UA_MAX_LENGTH = 500;
42647
+ 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";
42648
+ var extend = function(regexes2, extensions) {
42649
+ var mergedRegexes = {};
42650
+ for (var i2 in regexes2) {
42651
+ if (extensions[i2] && extensions[i2].length % 2 === 0) {
42652
+ mergedRegexes[i2] = extensions[i2].concat(regexes2[i2]);
42653
+ } else {
42654
+ mergedRegexes[i2] = regexes2[i2];
42655
+ }
42656
+ }
42657
+ return mergedRegexes;
42658
+ }, enumerize = function(arr) {
42659
+ var enums = {};
42660
+ for (var i2 = 0; i2 < arr.length; i2++) {
42661
+ enums[arr[i2].toUpperCase()] = arr[i2];
42662
+ }
42663
+ return enums;
42664
+ }, has = function(str1, str2) {
42665
+ return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
42666
+ }, lowerize = function(str) {
42667
+ return str.toLowerCase();
42668
+ }, majorize = function(version2) {
42669
+ return typeof version2 === STR_TYPE ? version2.replace(/[^\d\.]/g, EMPTY).split(".")[0] : undefined2;
42670
+ }, trim = function(str, len) {
42671
+ if (typeof str === STR_TYPE) {
42672
+ str = str.replace(/^\s\s*/, EMPTY);
42673
+ return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
42674
+ }
42675
+ };
42676
+ var rgxMapper = function(ua, arrays) {
42677
+ var i2 = 0, j, k, p, q, matches, match;
42678
+ while (i2 < arrays.length && !matches) {
42679
+ var regex = arrays[i2], props = arrays[i2 + 1];
42680
+ j = k = 0;
42681
+ while (j < regex.length && !matches) {
42682
+ if (!regex[j]) {
42683
+ break;
42684
+ }
42685
+ matches = regex[j++].exec(ua);
42686
+ if (!!matches) {
42687
+ for (p = 0; p < props.length; p++) {
42688
+ match = matches[++k];
42689
+ q = props[p];
42690
+ if (typeof q === OBJ_TYPE && q.length > 0) {
42691
+ if (q.length === 2) {
42692
+ if (typeof q[1] == FUNC_TYPE) {
42693
+ this[q[0]] = q[1].call(this, match);
42694
+ } else {
42695
+ this[q[0]] = q[1];
42696
+ }
42697
+ } else if (q.length === 3) {
42698
+ if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {
42699
+ this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined2;
42700
+ } else {
42701
+ this[q[0]] = match ? match.replace(q[1], q[2]) : undefined2;
42702
+ }
42703
+ } else if (q.length === 4) {
42704
+ this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined2;
42705
+ }
42706
+ } else {
42707
+ this[q] = match ? match : undefined2;
42708
+ }
42709
+ }
42710
+ }
42711
+ }
42712
+ i2 += 2;
42713
+ }
42714
+ }, strMapper = function(str, map) {
42715
+ for (var i2 in map) {
42716
+ if (typeof map[i2] === OBJ_TYPE && map[i2].length > 0) {
42717
+ for (var j = 0; j < map[i2].length; j++) {
42718
+ if (has(map[i2][j], str)) {
42719
+ return i2 === UNKNOWN ? undefined2 : i2;
42720
+ }
42721
+ }
42722
+ } else if (has(map[i2], str)) {
42723
+ return i2 === UNKNOWN ? undefined2 : i2;
42724
+ }
42725
+ }
42726
+ return str;
42727
+ };
42728
+ var oldSafariMap = {
42729
+ "1.0": "/8",
42730
+ "1.2": "/1",
42731
+ "1.3": "/3",
42732
+ "2.0": "/412",
42733
+ "2.0.2": "/416",
42734
+ "2.0.3": "/417",
42735
+ "2.0.4": "/419",
42736
+ "?": "/"
42737
+ }, windowsVersionMap = {
42738
+ "ME": "4.90",
42739
+ "NT 3.11": "NT3.51",
42740
+ "NT 4.0": "NT4.0",
42741
+ "2000": "NT 5.0",
42742
+ "XP": ["NT 5.1", "NT 5.2"],
42743
+ "Vista": "NT 6.0",
42744
+ "7": "NT 6.1",
42745
+ "8": "NT 6.2",
42746
+ "8.1": "NT 6.3",
42747
+ "10": ["NT 6.4", "NT 10.0"],
42748
+ "RT": "ARM"
42749
+ };
42750
+ var regexes = {
42751
+ browser: [
42752
+ [
42753
+ /\b(?:crmo|crios)\/([\w\.]+)/i
42754
+ // Chrome for Android/iOS
42755
+ ],
42756
+ [VERSION, [NAME, "Chrome"]],
42757
+ [
42758
+ /edg(?:e|ios|a)?\/([\w\.]+)/i
42759
+ // Microsoft Edge
42760
+ ],
42761
+ [VERSION, [NAME, "Edge"]],
42762
+ [
42763
+ // Presto based
42764
+ /(opera mini)\/([-\w\.]+)/i,
42765
+ // Opera Mini
42766
+ /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
42767
+ // Opera Mobi/Tablet
42768
+ /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
42769
+ // Opera
42770
+ ],
42771
+ [NAME, VERSION],
42772
+ [
42773
+ /opios[\/ ]+([\w\.]+)/i
42774
+ // Opera mini on iphone >= 8.0
42775
+ ],
42776
+ [VERSION, [NAME, OPERA + " Mini"]],
42777
+ [
42778
+ /\bopr\/([\w\.]+)/i
42779
+ // Opera Webkit
42780
+ ],
42781
+ [VERSION, [NAME, OPERA]],
42782
+ [
42783
+ // Mixed
42784
+ /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
42785
+ // Baidu
42786
+ ],
42787
+ [VERSION, [NAME, "Baidu"]],
42788
+ [
42789
+ /(kindle)\/([\w\.]+)/i,
42790
+ // Kindle
42791
+ /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,
42792
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer
42793
+ // Trident based
42794
+ /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,
42795
+ // Avant/IEMobile/SlimBrowser
42796
+ /(?:ms|\()(ie) ([\w\.]+)/i,
42797
+ // Internet Explorer
42798
+ // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
42799
+ /(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,
42800
+ // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ
42801
+ /(heytap|ovi)browser\/([\d\.]+)/i,
42802
+ // Heytap/Ovi
42803
+ /(weibo)__([\d\.]+)/i
42804
+ // Weibo
42805
+ ],
42806
+ [NAME, VERSION],
42807
+ [
42808
+ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
42809
+ // UCBrowser
42810
+ ],
42811
+ [VERSION, [NAME, "UC" + BROWSER]],
42812
+ [
42813
+ /microm.+\bqbcore\/([\w\.]+)/i,
42814
+ // WeChat Desktop for Windows Built-in Browser
42815
+ /\bqbcore\/([\w\.]+).+microm/i,
42816
+ /micromessenger\/([\w\.]+)/i
42817
+ // WeChat
42818
+ ],
42819
+ [VERSION, [NAME, "WeChat"]],
42820
+ [
42821
+ /konqueror\/([\w\.]+)/i
42822
+ // Konqueror
42823
+ ],
42824
+ [VERSION, [NAME, "Konqueror"]],
42825
+ [
42826
+ /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
42827
+ // IE11
42828
+ ],
42829
+ [VERSION, [NAME, "IE"]],
42830
+ [
42831
+ /ya(?:search)?browser\/([\w\.]+)/i
42832
+ // Yandex
42833
+ ],
42834
+ [VERSION, [NAME, "Yandex"]],
42835
+ [
42836
+ /slbrowser\/([\w\.]+)/i
42837
+ // Smart Lenovo Browser
42838
+ ],
42839
+ [VERSION, [NAME, "Smart Lenovo " + BROWSER]],
42840
+ [
42841
+ /(avast|avg)\/([\w\.]+)/i
42842
+ // Avast/AVG Secure Browser
42843
+ ],
42844
+ [[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION],
42845
+ [
42846
+ /\bfocus\/([\w\.]+)/i
42847
+ // Firefox Focus
42848
+ ],
42849
+ [VERSION, [NAME, FIREFOX + " Focus"]],
42850
+ [
42851
+ /\bopt\/([\w\.]+)/i
42852
+ // Opera Touch
42853
+ ],
42854
+ [VERSION, [NAME, OPERA + " Touch"]],
42855
+ [
42856
+ /coc_coc\w+\/([\w\.]+)/i
42857
+ // Coc Coc Browser
42858
+ ],
42859
+ [VERSION, [NAME, "Coc Coc"]],
42860
+ [
42861
+ /dolfin\/([\w\.]+)/i
42862
+ // Dolphin
42863
+ ],
42864
+ [VERSION, [NAME, "Dolphin"]],
42865
+ [
42866
+ /coast\/([\w\.]+)/i
42867
+ // Opera Coast
42868
+ ],
42869
+ [VERSION, [NAME, OPERA + " Coast"]],
42870
+ [
42871
+ /miuibrowser\/([\w\.]+)/i
42872
+ // MIUI Browser
42873
+ ],
42874
+ [VERSION, [NAME, "MIUI " + BROWSER]],
42875
+ [
42876
+ /fxios\/([-\w\.]+)/i
42877
+ // Firefox for iOS
42878
+ ],
42879
+ [VERSION, [NAME, FIREFOX]],
42880
+ [
42881
+ /\bqihu|(qi?ho?o?|360)browser/i
42882
+ // 360
42883
+ ],
42884
+ [[NAME, "360 " + BROWSER]],
42885
+ [
42886
+ /(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i
42887
+ ],
42888
+ [[NAME, /(.+)/, "$1 " + BROWSER], VERSION],
42889
+ [
42890
+ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser
42891
+ /samsungbrowser\/([\w\.]+)/i
42892
+ // Samsung Internet
42893
+ ],
42894
+ [VERSION, [NAME, SAMSUNG + " Internet"]],
42895
+ [
42896
+ /(comodo_dragon)\/([\w\.]+)/i
42897
+ // Comodo Dragon
42898
+ ],
42899
+ [[NAME, /_/g, " "], VERSION],
42900
+ [
42901
+ /metasr[\/ ]?([\d\.]+)/i
42902
+ // Sogou Explorer
42903
+ ],
42904
+ [VERSION, [NAME, "Sogou Explorer"]],
42905
+ [
42906
+ /(sogou)mo\w+\/([\d\.]+)/i
42907
+ // Sogou Mobile
42908
+ ],
42909
+ [[NAME, "Sogou Mobile"], VERSION],
42910
+ [
42911
+ /(electron)\/([\w\.]+) safari/i,
42912
+ // Electron-based App
42913
+ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
42914
+ // Tesla
42915
+ /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i
42916
+ // QQBrowser/2345 Browser
42917
+ ],
42918
+ [NAME, VERSION],
42919
+ [
42920
+ /(lbbrowser)/i,
42921
+ // LieBao Browser
42922
+ /\[(linkedin)app\]/i
42923
+ // LinkedIn App for iOS & Android
42924
+ ],
42925
+ [NAME],
42926
+ [
42927
+ // WebView
42928
+ /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
42929
+ // Facebook App for iOS & Android
42930
+ ],
42931
+ [[NAME, FACEBOOK], VERSION],
42932
+ [
42933
+ /(Klarna)\/([\w\.]+)/i,
42934
+ // Klarna Shopping Browser for iOS & Android
42935
+ /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
42936
+ // Kakao App
42937
+ /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
42938
+ // Naver InApp
42939
+ /safari (line)\/([\w\.]+)/i,
42940
+ // Line App for iOS
42941
+ /\b(line)\/([\w\.]+)\/iab/i,
42942
+ // Line App for Android
42943
+ /(alipay)client\/([\w\.]+)/i,
42944
+ // Alipay
42945
+ /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i
42946
+ // Chromium/Instagram/Snapchat
42947
+ ],
42948
+ [NAME, VERSION],
42949
+ [
42950
+ /\bgsa\/([\w\.]+) .*safari\//i
42951
+ // Google Search Appliance on iOS
42952
+ ],
42953
+ [VERSION, [NAME, "GSA"]],
42954
+ [
42955
+ /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
42956
+ // TikTok
42957
+ ],
42958
+ [VERSION, [NAME, "TikTok"]],
42959
+ [
42960
+ /headlesschrome(?:\/([\w\.]+)| )/i
42961
+ // Chrome Headless
42962
+ ],
42963
+ [VERSION, [NAME, CHROME + " Headless"]],
42964
+ [
42965
+ / wv\).+(chrome)\/([\w\.]+)/i
42966
+ // Chrome WebView
42967
+ ],
42968
+ [[NAME, CHROME + " WebView"], VERSION],
42969
+ [
42970
+ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
42971
+ // Android Browser
42972
+ ],
42973
+ [VERSION, [NAME, "Android " + BROWSER]],
42974
+ [
42975
+ /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
42976
+ // Chrome/OmniWeb/Arora/Tizen/Nokia
42977
+ ],
42978
+ [NAME, VERSION],
42979
+ [
42980
+ /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
42981
+ // Mobile Safari
42982
+ ],
42983
+ [VERSION, [NAME, "Mobile Safari"]],
42984
+ [
42985
+ /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
42986
+ // Safari & Safari Mobile
42987
+ ],
42988
+ [VERSION, NAME],
42989
+ [
42990
+ /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
42991
+ // Safari < 3.0
42992
+ ],
42993
+ [NAME, [VERSION, strMapper, oldSafariMap]],
42994
+ [
42995
+ /(webkit|khtml)\/([\w\.]+)/i
42996
+ ],
42997
+ [NAME, VERSION],
42998
+ [
42999
+ // Gecko based
43000
+ /(navigator|netscape\d?)\/([-\w\.]+)/i
43001
+ // Netscape
43002
+ ],
43003
+ [[NAME, "Netscape"], VERSION],
43004
+ [
43005
+ /mobile vr; rv:([\w\.]+)\).+firefox/i
43006
+ // Firefox Reality
43007
+ ],
43008
+ [VERSION, [NAME, FIREFOX + " Reality"]],
43009
+ [
43010
+ /ekiohf.+(flow)\/([\w\.]+)/i,
43011
+ // Flow
43012
+ /(swiftfox)/i,
43013
+ // Swiftfox
43014
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
43015
+ // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar
43016
+ /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
43017
+ // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
43018
+ /(firefox)\/([\w\.]+)/i,
43019
+ // Other Firefox-based
43020
+ /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
43021
+ // Mozilla
43022
+ // Other
43023
+ /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
43024
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser
43025
+ /(links) \(([\w\.]+)/i,
43026
+ // Links
43027
+ /panasonic;(viera)/i
43028
+ // Panasonic Viera
43029
+ ],
43030
+ [NAME, VERSION],
43031
+ [
43032
+ /(cobalt)\/([\w\.]+)/i
43033
+ // Cobalt
43034
+ ],
43035
+ [NAME, [VERSION, /master.|lts./, ""]]
43036
+ ],
43037
+ cpu: [
43038
+ [
43039
+ /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
43040
+ // AMD64 (x64)
43041
+ ],
43042
+ [[ARCHITECTURE, "amd64"]],
43043
+ [
43044
+ /(ia32(?=;))/i
43045
+ // IA32 (quicktime)
43046
+ ],
43047
+ [[ARCHITECTURE, lowerize]],
43048
+ [
43049
+ /((?:i[346]|x)86)[;\)]/i
43050
+ // IA32 (x86)
43051
+ ],
43052
+ [[ARCHITECTURE, "ia32"]],
43053
+ [
43054
+ /\b(aarch64|arm(v?8e?l?|_?64))\b/i
43055
+ // ARM64
43056
+ ],
43057
+ [[ARCHITECTURE, "arm64"]],
43058
+ [
43059
+ /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
43060
+ // ARMHF
43061
+ ],
43062
+ [[ARCHITECTURE, "armhf"]],
43063
+ [
43064
+ // PocketPC mistakenly identified as PowerPC
43065
+ /windows (ce|mobile); ppc;/i
43066
+ ],
43067
+ [[ARCHITECTURE, "arm"]],
43068
+ [
43069
+ /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
43070
+ // PowerPC
43071
+ ],
43072
+ [[ARCHITECTURE, /ower/, EMPTY, lowerize]],
43073
+ [
43074
+ /(sun4\w)[;\)]/i
43075
+ // SPARC
43076
+ ],
43077
+ [[ARCHITECTURE, "sparc"]],
43078
+ [
43079
+ /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
43080
+ // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
43081
+ ],
43082
+ [[ARCHITECTURE, lowerize]]
43083
+ ],
43084
+ device: [
43085
+ [
43086
+ //////////////////////////
43087
+ // MOBILES & TABLETS
43088
+ /////////////////////////
43089
+ // Samsung
43090
+ /\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
43091
+ ],
43092
+ [MODEL, [VENDOR, SAMSUNG], [TYPE2, TABLET]],
43093
+ [
43094
+ /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
43095
+ /samsung[- ]([-\w]+)/i,
43096
+ /sec-(sgh\w+)/i
43097
+ ],
43098
+ [MODEL, [VENDOR, SAMSUNG], [TYPE2, MOBILE]],
43099
+ [
43100
+ // Apple
43101
+ /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
43102
+ // iPod/iPhone
43103
+ ],
43104
+ [MODEL, [VENDOR, APPLE], [TYPE2, MOBILE]],
43105
+ [
43106
+ /\((ipad);[-\w\),; ]+apple/i,
43107
+ // iPad
43108
+ /applecoremedia\/[\w\.]+ \((ipad)/i,
43109
+ /\b(ipad)\d\d?,\d\d?[;\]].+ios/i
43110
+ ],
43111
+ [MODEL, [VENDOR, APPLE], [TYPE2, TABLET]],
43112
+ [
43113
+ /(macintosh);/i
43114
+ ],
43115
+ [MODEL, [VENDOR, APPLE]],
43116
+ [
43117
+ // Sharp
43118
+ /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
43119
+ ],
43120
+ [MODEL, [VENDOR, SHARP], [TYPE2, MOBILE]],
43121
+ [
43122
+ // Huawei
43123
+ /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
43124
+ ],
43125
+ [MODEL, [VENDOR, HUAWEI], [TYPE2, TABLET]],
43126
+ [
43127
+ /(?:huawei|honor)([-\w ]+)[;\)]/i,
43128
+ /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
43129
+ ],
43130
+ [MODEL, [VENDOR, HUAWEI], [TYPE2, MOBILE]],
43131
+ [
43132
+ // Xiaomi
43133
+ /\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,
43134
+ // Xiaomi POCO
43135
+ /\b; (\w+) build\/hm\1/i,
43136
+ // Xiaomi Hongmi 'numeric' models
43137
+ /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
43138
+ // Xiaomi Hongmi
43139
+ /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
43140
+ // Xiaomi Redmi
43141
+ /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,
43142
+ // Xiaomi Redmi 'numeric' models
43143
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
43144
+ // Xiaomi Mi
43145
+ ],
43146
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE2, MOBILE]],
43147
+ [
43148
+ /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,
43149
+ // Redmi Pad
43150
+ /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
43151
+ // Mi Pad tablets
43152
+ ],
43153
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE2, TABLET]],
43154
+ [
43155
+ // OPPO
43156
+ /; (\w+) bui.+ oppo/i,
43157
+ /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
43158
+ ],
43159
+ [MODEL, [VENDOR, "OPPO"], [TYPE2, MOBILE]],
43160
+ [
43161
+ // Vivo
43162
+ /vivo (\w+)(?: bui|\))/i,
43163
+ /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
43164
+ ],
43165
+ [MODEL, [VENDOR, "Vivo"], [TYPE2, MOBILE]],
43166
+ [
43167
+ // Realme
43168
+ /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
43169
+ ],
43170
+ [MODEL, [VENDOR, "Realme"], [TYPE2, MOBILE]],
43171
+ [
43172
+ // Motorola
43173
+ /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
43174
+ /\bmot(?:orola)?[- ](\w*)/i,
43175
+ /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
43176
+ ],
43177
+ [MODEL, [VENDOR, MOTOROLA], [TYPE2, MOBILE]],
43178
+ [
43179
+ /\b(mz60\d|xoom[2 ]{0,2}) build\//i
43180
+ ],
43181
+ [MODEL, [VENDOR, MOTOROLA], [TYPE2, TABLET]],
43182
+ [
43183
+ // LG
43184
+ /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
43185
+ ],
43186
+ [MODEL, [VENDOR, LG], [TYPE2, TABLET]],
43187
+ [
43188
+ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
43189
+ /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
43190
+ /\blg-?([\d\w]+) bui/i
43191
+ ],
43192
+ [MODEL, [VENDOR, LG], [TYPE2, MOBILE]],
43193
+ [
43194
+ // Lenovo
43195
+ /(ideatab[-\w ]+)/i,
43196
+ /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
43197
+ ],
43198
+ [MODEL, [VENDOR, "Lenovo"], [TYPE2, TABLET]],
43199
+ [
43200
+ // Nokia
43201
+ /(?:maemo|nokia).*(n900|lumia \d+)/i,
43202
+ /nokia[-_ ]?([-\w\.]*)/i
43203
+ ],
43204
+ [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE2, MOBILE]],
43205
+ [
43206
+ // Google
43207
+ /(pixel c)\b/i
43208
+ // Google Pixel C
43209
+ ],
43210
+ [MODEL, [VENDOR, GOOGLE], [TYPE2, TABLET]],
43211
+ [
43212
+ /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
43213
+ // Google Pixel
43214
+ ],
43215
+ [MODEL, [VENDOR, GOOGLE], [TYPE2, MOBILE]],
43216
+ [
43217
+ // Sony
43218
+ /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
43219
+ ],
43220
+ [MODEL, [VENDOR, SONY], [TYPE2, MOBILE]],
43221
+ [
43222
+ /sony tablet [ps]/i,
43223
+ /\b(?:sony)?sgp\w+(?: bui|\))/i
43224
+ ],
43225
+ [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE2, TABLET]],
43226
+ [
43227
+ // OnePlus
43228
+ / (kb2005|in20[12]5|be20[12][59])\b/i,
43229
+ /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
43230
+ ],
43231
+ [MODEL, [VENDOR, "OnePlus"], [TYPE2, MOBILE]],
43232
+ [
43233
+ // Amazon
43234
+ /(alexa)webm/i,
43235
+ /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
43236
+ // Kindle Fire without Silk / Echo Show
43237
+ /(kf[a-z]+)( bui|\)).+silk\//i
43238
+ // Kindle Fire HD
43239
+ ],
43240
+ [MODEL, [VENDOR, AMAZON], [TYPE2, TABLET]],
43241
+ [
43242
+ /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
43243
+ // Fire Phone
43244
+ ],
43245
+ [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE2, MOBILE]],
43246
+ [
43247
+ // BlackBerry
43248
+ /(playbook);[-\w\),; ]+(rim)/i
43249
+ // BlackBerry PlayBook
43250
+ ],
43251
+ [MODEL, VENDOR, [TYPE2, TABLET]],
43252
+ [
43253
+ /\b((?:bb[a-f]|st[hv])100-\d)/i,
43254
+ /\(bb10; (\w+)/i
43255
+ // BlackBerry 10
43256
+ ],
43257
+ [MODEL, [VENDOR, BLACKBERRY], [TYPE2, MOBILE]],
43258
+ [
43259
+ // Asus
43260
+ /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
43261
+ ],
43262
+ [MODEL, [VENDOR, ASUS], [TYPE2, TABLET]],
43263
+ [
43264
+ / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
43265
+ ],
43266
+ [MODEL, [VENDOR, ASUS], [TYPE2, MOBILE]],
43267
+ [
43268
+ // HTC
43269
+ /(nexus 9)/i
43270
+ // HTC Nexus 9
43271
+ ],
43272
+ [MODEL, [VENDOR, "HTC"], [TYPE2, TABLET]],
43273
+ [
43274
+ /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
43275
+ // HTC
43276
+ // ZTE
43277
+ /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
43278
+ /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
43279
+ // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
43280
+ ],
43281
+ [VENDOR, [MODEL, /_/g, " "], [TYPE2, MOBILE]],
43282
+ [
43283
+ // Acer
43284
+ /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
43285
+ ],
43286
+ [MODEL, [VENDOR, "Acer"], [TYPE2, TABLET]],
43287
+ [
43288
+ // Meizu
43289
+ /droid.+; (m[1-5] note) bui/i,
43290
+ /\bmz-([-\w]{2,})/i
43291
+ ],
43292
+ [MODEL, [VENDOR, "Meizu"], [TYPE2, MOBILE]],
43293
+ [
43294
+ // Ulefone
43295
+ /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
43296
+ ],
43297
+ [MODEL, [VENDOR, "Ulefone"], [TYPE2, MOBILE]],
43298
+ [
43299
+ // MIXED
43300
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
43301
+ // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
43302
+ /(hp) ([\w ]+\w)/i,
43303
+ // HP iPAQ
43304
+ /(asus)-?(\w+)/i,
43305
+ // Asus
43306
+ /(microsoft); (lumia[\w ]+)/i,
43307
+ // Microsoft Lumia
43308
+ /(lenovo)[-_ ]?([-\w]+)/i,
43309
+ // Lenovo
43310
+ /(jolla)/i,
43311
+ // Jolla
43312
+ /(oppo) ?([\w ]+) bui/i
43313
+ // OPPO
43314
+ ],
43315
+ [VENDOR, MODEL, [TYPE2, MOBILE]],
43316
+ [
43317
+ /(kobo)\s(ereader|touch)/i,
43318
+ // Kobo
43319
+ /(archos) (gamepad2?)/i,
43320
+ // Archos
43321
+ /(hp).+(touchpad(?!.+tablet)|tablet)/i,
43322
+ // HP TouchPad
43323
+ /(kindle)\/([\w\.]+)/i,
43324
+ // Kindle
43325
+ /(nook)[\w ]+build\/(\w+)/i,
43326
+ // Nook
43327
+ /(dell) (strea[kpr\d ]*[\dko])/i,
43328
+ // Dell Streak
43329
+ /(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
43330
+ // Le Pan Tablets
43331
+ /(trinity)[- ]*(t\d{3}) bui/i,
43332
+ // Trinity Tablets
43333
+ /(gigaset)[- ]+(q\w{1,9}) bui/i,
43334
+ // Gigaset Tablets
43335
+ /(vodafone) ([\w ]+)(?:\)| bui)/i
43336
+ // Vodafone
43337
+ ],
43338
+ [VENDOR, MODEL, [TYPE2, TABLET]],
43339
+ [
43340
+ /(surface duo)/i
43341
+ // Surface Duo
43342
+ ],
43343
+ [MODEL, [VENDOR, MICROSOFT], [TYPE2, TABLET]],
43344
+ [
43345
+ /droid [\d\.]+; (fp\du?)(?: b|\))/i
43346
+ // Fairphone
43347
+ ],
43348
+ [MODEL, [VENDOR, "Fairphone"], [TYPE2, MOBILE]],
43349
+ [
43350
+ /(u304aa)/i
43351
+ // AT&T
43352
+ ],
43353
+ [MODEL, [VENDOR, "AT&T"], [TYPE2, MOBILE]],
43354
+ [
43355
+ /\bsie-(\w*)/i
43356
+ // Siemens
43357
+ ],
43358
+ [MODEL, [VENDOR, "Siemens"], [TYPE2, MOBILE]],
43359
+ [
43360
+ /\b(rct\w+) b/i
43361
+ // RCA Tablets
43362
+ ],
43363
+ [MODEL, [VENDOR, "RCA"], [TYPE2, TABLET]],
43364
+ [
43365
+ /\b(venue[\d ]{2,7}) b/i
43366
+ // Dell Venue Tablets
43367
+ ],
43368
+ [MODEL, [VENDOR, "Dell"], [TYPE2, TABLET]],
43369
+ [
43370
+ /\b(q(?:mv|ta)\w+) b/i
43371
+ // Verizon Tablet
43372
+ ],
43373
+ [MODEL, [VENDOR, "Verizon"], [TYPE2, TABLET]],
43374
+ [
43375
+ /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
43376
+ // Barnes & Noble Tablet
43377
+ ],
43378
+ [MODEL, [VENDOR, "Barnes & Noble"], [TYPE2, TABLET]],
43379
+ [
43380
+ /\b(tm\d{3}\w+) b/i
43381
+ ],
43382
+ [MODEL, [VENDOR, "NuVision"], [TYPE2, TABLET]],
43383
+ [
43384
+ /\b(k88) b/i
43385
+ // ZTE K Series Tablet
43386
+ ],
43387
+ [MODEL, [VENDOR, "ZTE"], [TYPE2, TABLET]],
43388
+ [
43389
+ /\b(nx\d{3}j) b/i
43390
+ // ZTE Nubia
43391
+ ],
43392
+ [MODEL, [VENDOR, "ZTE"], [TYPE2, MOBILE]],
43393
+ [
43394
+ /\b(gen\d{3}) b.+49h/i
43395
+ // Swiss GEN Mobile
43396
+ ],
43397
+ [MODEL, [VENDOR, "Swiss"], [TYPE2, MOBILE]],
43398
+ [
43399
+ /\b(zur\d{3}) b/i
43400
+ // Swiss ZUR Tablet
43401
+ ],
43402
+ [MODEL, [VENDOR, "Swiss"], [TYPE2, TABLET]],
43403
+ [
43404
+ /\b((zeki)?tb.*\b) b/i
43405
+ // Zeki Tablets
43406
+ ],
43407
+ [MODEL, [VENDOR, "Zeki"], [TYPE2, TABLET]],
43408
+ [
43409
+ /\b([yr]\d{2}) b/i,
43410
+ /\b(dragon[- ]+touch |dt)(\w{5}) b/i
43411
+ // Dragon Touch Tablet
43412
+ ],
43413
+ [[VENDOR, "Dragon Touch"], MODEL, [TYPE2, TABLET]],
43414
+ [
43415
+ /\b(ns-?\w{0,9}) b/i
43416
+ // Insignia Tablets
43417
+ ],
43418
+ [MODEL, [VENDOR, "Insignia"], [TYPE2, TABLET]],
43419
+ [
43420
+ /\b((nxa|next)-?\w{0,9}) b/i
43421
+ // NextBook Tablets
43422
+ ],
43423
+ [MODEL, [VENDOR, "NextBook"], [TYPE2, TABLET]],
43424
+ [
43425
+ /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
43426
+ // Voice Xtreme Phones
43427
+ ],
43428
+ [[VENDOR, "Voice"], MODEL, [TYPE2, MOBILE]],
43429
+ [
43430
+ /\b(lvtel\-)?(v1[12]) b/i
43431
+ // LvTel Phones
43432
+ ],
43433
+ [[VENDOR, "LvTel"], MODEL, [TYPE2, MOBILE]],
43434
+ [
43435
+ /\b(ph-1) /i
43436
+ // Essential PH-1
43437
+ ],
43438
+ [MODEL, [VENDOR, "Essential"], [TYPE2, MOBILE]],
43439
+ [
43440
+ /\b(v(100md|700na|7011|917g).*\b) b/i
43441
+ // Envizen Tablets
43442
+ ],
43443
+ [MODEL, [VENDOR, "Envizen"], [TYPE2, TABLET]],
43444
+ [
43445
+ /\b(trio[-\w\. ]+) b/i
43446
+ // MachSpeed Tablets
43447
+ ],
43448
+ [MODEL, [VENDOR, "MachSpeed"], [TYPE2, TABLET]],
43449
+ [
43450
+ /\btu_(1491) b/i
43451
+ // Rotor Tablets
43452
+ ],
43453
+ [MODEL, [VENDOR, "Rotor"], [TYPE2, TABLET]],
43454
+ [
43455
+ /(shield[\w ]+) b/i
43456
+ // Nvidia Shield Tablets
43457
+ ],
43458
+ [MODEL, [VENDOR, "Nvidia"], [TYPE2, TABLET]],
43459
+ [
43460
+ /(sprint) (\w+)/i
43461
+ // Sprint Phones
43462
+ ],
43463
+ [VENDOR, MODEL, [TYPE2, MOBILE]],
43464
+ [
43465
+ /(kin\.[onetw]{3})/i
43466
+ // Microsoft Kin
43467
+ ],
43468
+ [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE2, MOBILE]],
43469
+ [
43470
+ /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
43471
+ // Zebra
43472
+ ],
43473
+ [MODEL, [VENDOR, ZEBRA], [TYPE2, TABLET]],
43474
+ [
43475
+ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
43476
+ ],
43477
+ [MODEL, [VENDOR, ZEBRA], [TYPE2, MOBILE]],
43478
+ [
43479
+ ///////////////////
43480
+ // SMARTTVS
43481
+ ///////////////////
43482
+ /smart-tv.+(samsung)/i
43483
+ // Samsung
43484
+ ],
43485
+ [VENDOR, [TYPE2, SMARTTV]],
43486
+ [
43487
+ /hbbtv.+maple;(\d+)/i
43488
+ ],
43489
+ [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE2, SMARTTV]],
43490
+ [
43491
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
43492
+ // LG SmartTV
43493
+ ],
43494
+ [[VENDOR, LG], [TYPE2, SMARTTV]],
43495
+ [
43496
+ /(apple) ?tv/i
43497
+ // Apple TV
43498
+ ],
43499
+ [VENDOR, [MODEL, APPLE + " TV"], [TYPE2, SMARTTV]],
43500
+ [
43501
+ /crkey/i
43502
+ // Google Chromecast
43503
+ ],
43504
+ [[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE2, SMARTTV]],
43505
+ [
43506
+ /droid.+aft(\w+)( bui|\))/i
43507
+ // Fire TV
43508
+ ],
43509
+ [MODEL, [VENDOR, AMAZON], [TYPE2, SMARTTV]],
43510
+ [
43511
+ /\(dtv[\);].+(aquos)/i,
43512
+ /(aquos-tv[\w ]+)\)/i
43513
+ // Sharp
43514
+ ],
43515
+ [MODEL, [VENDOR, SHARP], [TYPE2, SMARTTV]],
43516
+ [
43517
+ /(bravia[\w ]+)( bui|\))/i
43518
+ // Sony
43519
+ ],
43520
+ [MODEL, [VENDOR, SONY], [TYPE2, SMARTTV]],
43521
+ [
43522
+ /(mitv-\w{5}) bui/i
43523
+ // Xiaomi
43524
+ ],
43525
+ [MODEL, [VENDOR, XIAOMI], [TYPE2, SMARTTV]],
43526
+ [
43527
+ /Hbbtv.*(technisat) (.*);/i
43528
+ // TechniSAT
43529
+ ],
43530
+ [VENDOR, MODEL, [TYPE2, SMARTTV]],
43531
+ [
43532
+ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
43533
+ // Roku
43534
+ /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
43535
+ // HbbTV devices
43536
+ ],
43537
+ [[VENDOR, trim], [MODEL, trim], [TYPE2, SMARTTV]],
43538
+ [
43539
+ /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
43540
+ // SmartTV from Unidentified Vendors
43541
+ ],
43542
+ [[TYPE2, SMARTTV]],
43543
+ [
43544
+ ///////////////////
43545
+ // CONSOLES
43546
+ ///////////////////
43547
+ /(ouya)/i,
43548
+ // Ouya
43549
+ /(nintendo) ([wids3utch]+)/i
43550
+ // Nintendo
43551
+ ],
43552
+ [VENDOR, MODEL, [TYPE2, CONSOLE]],
43553
+ [
43554
+ /droid.+; (shield) bui/i
43555
+ // Nvidia
43556
+ ],
43557
+ [MODEL, [VENDOR, "Nvidia"], [TYPE2, CONSOLE]],
43558
+ [
43559
+ /(playstation [345portablevi]+)/i
43560
+ // Playstation
43561
+ ],
43562
+ [MODEL, [VENDOR, SONY], [TYPE2, CONSOLE]],
43563
+ [
43564
+ /\b(xbox(?: one)?(?!; xbox))[\); ]/i
43565
+ // Microsoft Xbox
43566
+ ],
43567
+ [MODEL, [VENDOR, MICROSOFT], [TYPE2, CONSOLE]],
43568
+ [
43569
+ ///////////////////
43570
+ // WEARABLES
43571
+ ///////////////////
43572
+ /((pebble))app/i
43573
+ // Pebble
43574
+ ],
43575
+ [VENDOR, MODEL, [TYPE2, WEARABLE]],
43576
+ [
43577
+ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
43578
+ // Apple Watch
43579
+ ],
43580
+ [MODEL, [VENDOR, APPLE], [TYPE2, WEARABLE]],
43581
+ [
43582
+ /droid.+; (glass) \d/i
43583
+ // Google Glass
43584
+ ],
43585
+ [MODEL, [VENDOR, GOOGLE], [TYPE2, WEARABLE]],
43586
+ [
43587
+ /droid.+; (wt63?0{2,3})\)/i
43588
+ ],
43589
+ [MODEL, [VENDOR, ZEBRA], [TYPE2, WEARABLE]],
43590
+ [
43591
+ /(quest( 2| pro)?)/i
43592
+ // Oculus Quest
43593
+ ],
43594
+ [MODEL, [VENDOR, FACEBOOK], [TYPE2, WEARABLE]],
43595
+ [
43596
+ ///////////////////
43597
+ // EMBEDDED
43598
+ ///////////////////
43599
+ /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
43600
+ // Tesla
43601
+ ],
43602
+ [VENDOR, [TYPE2, EMBEDDED]],
43603
+ [
43604
+ /(aeobc)\b/i
43605
+ // Echo Dot
43606
+ ],
43607
+ [MODEL, [VENDOR, AMAZON], [TYPE2, EMBEDDED]],
43608
+ [
43609
+ ////////////////////
43610
+ // MIXED (GENERIC)
43611
+ ///////////////////
43612
+ /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i
43613
+ // Android Phones from Unidentified Vendors
43614
+ ],
43615
+ [MODEL, [TYPE2, MOBILE]],
43616
+ [
43617
+ /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
43618
+ // Android Tablets from Unidentified Vendors
43619
+ ],
43620
+ [MODEL, [TYPE2, TABLET]],
43621
+ [
43622
+ /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
43623
+ // Unidentifiable Tablet
43624
+ ],
43625
+ [[TYPE2, TABLET]],
43626
+ [
43627
+ /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
43628
+ // Unidentifiable Mobile
43629
+ ],
43630
+ [[TYPE2, MOBILE]],
43631
+ [
43632
+ /(android[-\w\. ]{0,9});.+buil/i
43633
+ // Generic Android Device
43634
+ ],
43635
+ [MODEL, [VENDOR, "Generic"]]
43636
+ ],
43637
+ engine: [
43638
+ [
43639
+ /windows.+ edge\/([\w\.]+)/i
43640
+ // EdgeHTML
43641
+ ],
43642
+ [VERSION, [NAME, EDGE + "HTML"]],
43643
+ [
43644
+ /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
43645
+ // Blink
43646
+ ],
43647
+ [VERSION, [NAME, "Blink"]],
43648
+ [
43649
+ /(presto)\/([\w\.]+)/i,
43650
+ // Presto
43651
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
43652
+ // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna
43653
+ /ekioh(flow)\/([\w\.]+)/i,
43654
+ // Flow
43655
+ /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
43656
+ // KHTML/Tasman/Links
43657
+ /(icab)[\/ ]([23]\.[\d\.]+)/i,
43658
+ // iCab
43659
+ /\b(libweb)/i
43660
+ ],
43661
+ [NAME, VERSION],
43662
+ [
43663
+ /rv\:([\w\.]{1,9})\b.+(gecko)/i
43664
+ // Gecko
43665
+ ],
43666
+ [VERSION, NAME]
43667
+ ],
43668
+ os: [
43669
+ [
43670
+ // Windows
43671
+ /microsoft (windows) (vista|xp)/i
43672
+ // Windows (iTunes)
43673
+ ],
43674
+ [NAME, VERSION],
43675
+ [
43676
+ /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i
43677
+ // Windows Phone
43678
+ ],
43679
+ [NAME, [VERSION, strMapper, windowsVersionMap]],
43680
+ [
43681
+ /windows nt 6\.2; (arm)/i,
43682
+ // Windows RT
43683
+ /windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
43684
+ /(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
43685
+ ],
43686
+ [[VERSION, strMapper, windowsVersionMap], [NAME, "Windows"]],
43687
+ [
43688
+ // iOS/macOS
43689
+ /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
43690
+ // iOS
43691
+ /(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
43692
+ /cfnetwork\/.+darwin/i
43693
+ ],
43694
+ [[VERSION, /_/g, "."], [NAME, "iOS"]],
43695
+ [
43696
+ /(mac os x) ?([\w\. ]*)/i,
43697
+ /(macintosh|mac_powerpc\b)(?!.+haiku)/i
43698
+ // Mac OS
43699
+ ],
43700
+ [[NAME, MAC_OS], [VERSION, /_/g, "."]],
43701
+ [
43702
+ // Mobile OSes
43703
+ /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
43704
+ // Android-x86/HarmonyOS
43705
+ ],
43706
+ [VERSION, NAME],
43707
+ [
43708
+ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
43709
+ /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
43710
+ /(blackberry)\w*\/([\w\.]*)/i,
43711
+ // Blackberry
43712
+ /(tizen|kaios)[\/ ]([\w\.]+)/i,
43713
+ // Tizen/KaiOS
43714
+ /\((series40);/i
43715
+ // Series 40
43716
+ ],
43717
+ [NAME, VERSION],
43718
+ [
43719
+ /\(bb(10);/i
43720
+ // BlackBerry 10
43721
+ ],
43722
+ [VERSION, [NAME, BLACKBERRY]],
43723
+ [
43724
+ /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
43725
+ // Symbian
43726
+ ],
43727
+ [VERSION, [NAME, "Symbian"]],
43728
+ [
43729
+ /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
43730
+ // Firefox OS
43731
+ ],
43732
+ [VERSION, [NAME, FIREFOX + " OS"]],
43733
+ [
43734
+ /web0s;.+rt(tv)/i,
43735
+ /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
43736
+ // WebOS
43737
+ ],
43738
+ [VERSION, [NAME, "webOS"]],
43739
+ [
43740
+ /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
43741
+ // watchOS
43742
+ ],
43743
+ [VERSION, [NAME, "watchOS"]],
43744
+ [
43745
+ // Google Chromecast
43746
+ /crkey\/([\d\.]+)/i
43747
+ // Google Chromecast
43748
+ ],
43749
+ [VERSION, [NAME, CHROME + "cast"]],
43750
+ [
43751
+ /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
43752
+ // Chromium OS
43753
+ ],
43754
+ [[NAME, CHROMIUM_OS], VERSION],
43755
+ [
43756
+ // Smart TVs
43757
+ /panasonic;(viera)/i,
43758
+ // Panasonic Viera
43759
+ /(netrange)mmh/i,
43760
+ // Netrange
43761
+ /(nettv)\/(\d+\.[\w\.]+)/i,
43762
+ // NetTV
43763
+ // Console
43764
+ /(nintendo|playstation) ([wids345portablevuch]+)/i,
43765
+ // Nintendo/Playstation
43766
+ /(xbox); +xbox ([^\);]+)/i,
43767
+ // Microsoft Xbox (360, One, X, S, Series X, Series S)
43768
+ // Other
43769
+ /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
43770
+ // Joli/Palm
43771
+ /(mint)[\/\(\) ]?(\w*)/i,
43772
+ // Mint
43773
+ /(mageia|vectorlinux)[; ]/i,
43774
+ // Mageia/VectorLinux
43775
+ /([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,
43776
+ // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
43777
+ /(hurd|linux) ?([\w\.]*)/i,
43778
+ // Hurd/Linux
43779
+ /(gnu) ?([\w\.]*)/i,
43780
+ // GNU
43781
+ /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
43782
+ // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
43783
+ /(haiku) (\w+)/i
43784
+ // Haiku
43785
+ ],
43786
+ [NAME, VERSION],
43787
+ [
43788
+ /(sunos) ?([\w\.\d]*)/i
43789
+ // Solaris
43790
+ ],
43791
+ [[NAME, "Solaris"], VERSION],
43792
+ [
43793
+ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
43794
+ // Solaris
43795
+ /(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
43796
+ // AIX
43797
+ /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
43798
+ // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS
43799
+ /(unix) ?([\w\.]*)/i
43800
+ // UNIX
43801
+ ],
43802
+ [NAME, VERSION]
43803
+ ]
43804
+ };
43805
+ var UAParser2 = function(ua, extensions) {
43806
+ if (typeof ua === OBJ_TYPE) {
43807
+ extensions = ua;
43808
+ ua = undefined2;
43809
+ }
43810
+ if (!(this instanceof UAParser2)) {
43811
+ return new UAParser2(ua, extensions).getResult();
43812
+ }
43813
+ var _navigator = typeof window2 !== UNDEF_TYPE && window2.navigator ? window2.navigator : undefined2;
43814
+ var _ua = ua || (_navigator && _navigator.userAgent ? _navigator.userAgent : EMPTY);
43815
+ var _uach = _navigator && _navigator.userAgentData ? _navigator.userAgentData : undefined2;
43816
+ var _rgxmap = extensions ? extend(regexes, extensions) : regexes;
43817
+ var _isSelfNav = _navigator && _navigator.userAgent == _ua;
43818
+ this.getBrowser = function() {
43819
+ var _browser = {};
43820
+ _browser[NAME] = undefined2;
43821
+ _browser[VERSION] = undefined2;
43822
+ rgxMapper.call(_browser, _ua, _rgxmap.browser);
43823
+ _browser[MAJOR] = majorize(_browser[VERSION]);
43824
+ if (_isSelfNav && _navigator && _navigator.brave && typeof _navigator.brave.isBrave == FUNC_TYPE) {
43825
+ _browser[NAME] = "Brave";
43826
+ }
43827
+ return _browser;
43828
+ };
43829
+ this.getCPU = function() {
43830
+ var _cpu = {};
43831
+ _cpu[ARCHITECTURE] = undefined2;
43832
+ rgxMapper.call(_cpu, _ua, _rgxmap.cpu);
43833
+ return _cpu;
43834
+ };
43835
+ this.getDevice = function() {
43836
+ var _device = {};
43837
+ _device[VENDOR] = undefined2;
43838
+ _device[MODEL] = undefined2;
43839
+ _device[TYPE2] = undefined2;
43840
+ rgxMapper.call(_device, _ua, _rgxmap.device);
43841
+ if (_isSelfNav && !_device[TYPE2] && _uach && _uach.mobile) {
43842
+ _device[TYPE2] = MOBILE;
43843
+ }
43844
+ if (_isSelfNav && _device[MODEL] == "Macintosh" && _navigator && typeof _navigator.standalone !== UNDEF_TYPE && _navigator.maxTouchPoints && _navigator.maxTouchPoints > 2) {
43845
+ _device[MODEL] = "iPad";
43846
+ _device[TYPE2] = TABLET;
43847
+ }
43848
+ return _device;
43849
+ };
43850
+ this.getEngine = function() {
43851
+ var _engine = {};
43852
+ _engine[NAME] = undefined2;
43853
+ _engine[VERSION] = undefined2;
43854
+ rgxMapper.call(_engine, _ua, _rgxmap.engine);
43855
+ return _engine;
43856
+ };
43857
+ this.getOS = function() {
43858
+ var _os = {};
43859
+ _os[NAME] = undefined2;
43860
+ _os[VERSION] = undefined2;
43861
+ rgxMapper.call(_os, _ua, _rgxmap.os);
43862
+ if (_isSelfNav && !_os[NAME] && _uach && _uach.platform != "Unknown") {
43863
+ _os[NAME] = _uach.platform.replace(/chrome os/i, CHROMIUM_OS).replace(/macos/i, MAC_OS);
43864
+ }
43865
+ return _os;
43866
+ };
43867
+ this.getResult = function() {
43868
+ return {
43869
+ ua: this.getUA(),
43870
+ browser: this.getBrowser(),
43871
+ engine: this.getEngine(),
43872
+ os: this.getOS(),
43873
+ device: this.getDevice(),
43874
+ cpu: this.getCPU()
43875
+ };
43876
+ };
43877
+ this.getUA = function() {
43878
+ return _ua;
43879
+ };
43880
+ this.setUA = function(ua2) {
43881
+ _ua = typeof ua2 === STR_TYPE && ua2.length > UA_MAX_LENGTH ? trim(ua2, UA_MAX_LENGTH) : ua2;
43882
+ return this;
43883
+ };
43884
+ this.setUA(_ua);
43885
+ return this;
43886
+ };
43887
+ UAParser2.VERSION = LIBVERSION;
43888
+ UAParser2.BROWSER = enumerize([NAME, VERSION, MAJOR]);
43889
+ UAParser2.CPU = enumerize([ARCHITECTURE]);
43890
+ UAParser2.DEVICE = enumerize([MODEL, VENDOR, TYPE2, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
43891
+ UAParser2.ENGINE = UAParser2.OS = enumerize([NAME, VERSION]);
43892
+ if (typeof exports !== UNDEF_TYPE) {
43893
+ if (typeof module2 !== UNDEF_TYPE && module2.exports) {
43894
+ exports = module2.exports = UAParser2;
43895
+ }
43896
+ exports.UAParser = UAParser2;
43897
+ } else {
43898
+ if (typeof define === FUNC_TYPE && define.amd) {
43899
+ define(function() {
43900
+ return UAParser2;
43901
+ });
43902
+ } else if (typeof window2 !== UNDEF_TYPE) {
43903
+ window2.UAParser = UAParser2;
43904
+ }
43905
+ }
43906
+ var $ = typeof window2 !== UNDEF_TYPE && (window2.jQuery || window2.Zepto);
43907
+ if ($ && !$.ua) {
43908
+ var parser = new UAParser2();
43909
+ $.ua = parser.getResult();
43910
+ $.ua.get = function() {
43911
+ return parser.getUA();
43912
+ };
43913
+ $.ua.set = function(ua) {
43914
+ parser.setUA(ua);
43915
+ var result = parser.getResult();
43916
+ for (var prop in result) {
43917
+ $.ua[prop] = result[prop];
43918
+ }
43919
+ };
43920
+ }
43921
+ })(typeof window === "object" ? window : exports);
43922
+ }
43923
+ });
43924
+
42600
43925
  // ../../node_modules/use-debounce/dist/index.module.js
42601
43926
  var index_module_exports = {};
42602
43927
  __export(index_module_exports, {
@@ -44541,6 +45866,26 @@ var require_dist = __commonJS({
44541
45866
  mod
44542
45867
  ));
44543
45868
  var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod);
45869
+ var __async2 = (__this, __arguments, generator) => {
45870
+ return new Promise((resolve, reject) => {
45871
+ var fulfilled = (value) => {
45872
+ try {
45873
+ step(generator.next(value));
45874
+ } catch (e2) {
45875
+ reject(e2);
45876
+ }
45877
+ };
45878
+ var rejected = (value) => {
45879
+ try {
45880
+ step(generator.throw(value));
45881
+ } catch (e2) {
45882
+ reject(e2);
45883
+ }
45884
+ };
45885
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
45886
+ step((generator = generator.apply(__this, __arguments)).next());
45887
+ });
45888
+ };
44544
45889
  var auto_frame_component_exports = {};
44545
45890
  __export2(auto_frame_component_exports, {
44546
45891
  default: () => AutoFrameComponent_default
@@ -44559,6 +45904,23 @@ var require_dist = __commonJS({
44559
45904
  });
44560
45905
  return collected;
44561
45906
  };
45907
+ var getStyleSheet = (el) => {
45908
+ return Array.from(document.styleSheets).find((ss) => ss.ownerNode === el);
45909
+ };
45910
+ var getStyles2 = (styleSheet) => {
45911
+ if (styleSheet) {
45912
+ try {
45913
+ return [...styleSheet.cssRules].map((rule) => rule.cssText).join("");
45914
+ } catch (e2) {
45915
+ console.warn(
45916
+ "Access to stylesheet %s is denied. Ignoring\u2026",
45917
+ styleSheet.href
45918
+ );
45919
+ }
45920
+ }
45921
+ return "";
45922
+ };
45923
+ var defer = (fn) => setTimeout(fn, 0);
44562
45924
  var CopyHostStyles = ({
44563
45925
  children,
44564
45926
  debug = false,
@@ -44573,7 +45935,7 @@ var require_dist = __commonJS({
44573
45935
  const elements = [];
44574
45936
  const lookupEl = (el) => elements.findIndex((elementMap) => elementMap.original === el);
44575
45937
  const addEl = (el, onLoad = () => {
44576
- }) => {
45938
+ }) => __async2(void 0, null, function* () {
44577
45939
  const index = lookupEl(el);
44578
45940
  if (index > -1) {
44579
45941
  if (debug)
@@ -44584,10 +45946,34 @@ var require_dist = __commonJS({
44584
45946
  onLoad();
44585
45947
  return;
44586
45948
  }
44587
- const elHash = (0, import_object_hash.default)(el.outerHTML);
45949
+ let mirror;
45950
+ if (el.nodeName === "LINK") {
45951
+ mirror = document.createElement("style");
45952
+ mirror.type = "text/css";
45953
+ let styleSheet = getStyleSheet(el);
45954
+ if (!styleSheet) {
45955
+ yield new Promise((resolve) => el.onload = resolve);
45956
+ styleSheet = getStyleSheet(el);
45957
+ }
45958
+ const styles = getStyles2(styleSheet);
45959
+ if (!styles) {
45960
+ if (debug) {
45961
+ console.warn(
45962
+ `Tried to load styles for link element, but couldn't find them. Skipping...`
45963
+ );
45964
+ }
45965
+ onLoad();
45966
+ return;
45967
+ }
45968
+ mirror.innerHTML = styles;
45969
+ mirror.setAttribute("data-href", el.getAttribute("href"));
45970
+ } else {
45971
+ mirror = el.cloneNode(true);
45972
+ }
45973
+ const elHash = (0, import_object_hash.default)(mirror.outerHTML);
44588
45974
  const existingHashes = collectStyles(doc).map(
44589
- (existingStyle) => (0, import_object_hash.default)(existingStyle.outerHTML)
44590
- );
45975
+ (existingStyle) => existingStyle !== mirror && (0, import_object_hash.default)(existingStyle.outerHTML)
45976
+ ).filter(Boolean);
44591
45977
  if (existingHashes.indexOf(elHash) > -1) {
44592
45978
  if (debug)
44593
45979
  console.log(
@@ -44596,13 +45982,12 @@ var require_dist = __commonJS({
44596
45982
  onLoad();
44597
45983
  return;
44598
45984
  }
44599
- const mirror = el.cloneNode(true);
44600
45985
  mirror.onload = onLoad;
44601
45986
  doc.head.append(mirror);
44602
45987
  elements.push({ original: el, mirror });
44603
45988
  if (debug)
44604
45989
  console.log(`Added style node ${el.outerHTML}`);
44605
- };
45990
+ });
44606
45991
  const removeEl = (el) => {
44607
45992
  const index = lookupEl(el);
44608
45993
  if (index === -1) {
@@ -44623,7 +46008,7 @@ var require_dist = __commonJS({
44623
46008
  if (node.nodeType === Node.TEXT_NODE || node.nodeType === Node.ELEMENT_NODE) {
44624
46009
  const el = node.nodeType === Node.TEXT_NODE ? node.parentElement : node;
44625
46010
  if (el && el.matches(styleSelector)) {
44626
- addEl(el);
46011
+ defer(() => addEl(el));
44627
46012
  }
44628
46013
  }
44629
46014
  });
@@ -44631,7 +46016,7 @@ var require_dist = __commonJS({
44631
46016
  if (node.nodeType === Node.TEXT_NODE || node.nodeType === Node.ELEMENT_NODE) {
44632
46017
  const el = node.nodeType === Node.TEXT_NODE ? node.parentElement : node;
44633
46018
  if (el && el.matches(styleSelector)) {
44634
- removeEl(el);
46019
+ defer(() => removeEl(el));
44635
46020
  }
44636
46021
  }
44637
46022
  });
@@ -44642,12 +46027,14 @@ var require_dist = __commonJS({
44642
46027
  const collectedStyles = collectStyles(parentDocument);
44643
46028
  let mountedCounter = 0;
44644
46029
  collectedStyles.forEach((styleNode) => {
44645
- addEl(styleNode, () => {
44646
- mountedCounter += 1;
44647
- if (mountedCounter === collectedStyles.length) {
44648
- onStylesLoaded();
44649
- }
44650
- });
46030
+ defer(
46031
+ () => addEl(styleNode, () => {
46032
+ mountedCounter += 1;
46033
+ if (mountedCounter === collectedStyles.length) {
46034
+ onStylesLoaded();
46035
+ }
46036
+ })
46037
+ );
44651
46038
  });
44652
46039
  observer.observe(parentDocument.head, { childList: true, subtree: true });
44653
46040
  return () => {
@@ -44656,10 +46043,14 @@ var require_dist = __commonJS({
44656
46043
  }, []);
44657
46044
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children });
44658
46045
  };
44659
- var AutoFrameComponent_default = import_react22.default.forwardRef(function(_a3, ref2) {
44660
- var _b = _a3, { children, debug, onStylesLoaded } = _b, props = __objRest2(_b, ["children", "debug", "onStylesLoaded"]);
44661
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_frame_component.default, __spreadProps2(__spreadValues2({}, props), { ref: ref2, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CopyHostStyles, { debug, onStylesLoaded, children }) }));
44662
- });
46046
+ var AutoFrameComponent = import_react22.default.forwardRef(
46047
+ function(_a3, ref2) {
46048
+ var _b = _a3, { children, debug, onStylesLoaded } = _b, props = __objRest2(_b, ["children", "debug", "onStylesLoaded"]);
46049
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_frame_component.default, __spreadProps2(__spreadValues2({}, props), { ref: ref2, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CopyHostStyles, { debug, onStylesLoaded, children }) }));
46050
+ }
46051
+ );
46052
+ AutoFrameComponent.displayName = "AutoFrameComponent";
46053
+ var AutoFrameComponent_default = AutoFrameComponent;
44663
46054
  }
44664
46055
  });
44665
46056
 
@@ -74400,6 +75791,7 @@ var require_dist2 = __commonJS({
74400
75791
  { width: 768, height: "auto", icon: "Tablet", label: "Medium" },
74401
75792
  { width: 1280, height: "auto", icon: "Monitor", label: "Large" }
74402
75793
  ];
75794
+ var import_ua_parser_js2 = require_ua_parser();
74403
75795
  var import_jsx_runtime22 = require("react/jsx-runtime");
74404
75796
  var defaultAppState2 = {
74405
75797
  data: { content: [], root: { props: { title: "" } } },
@@ -74439,7 +75831,8 @@ var require_dist2 = __commonJS({
74439
75831
  setZoomConfig: () => null,
74440
75832
  status: "LOADING",
74441
75833
  setStatus: () => null,
74442
- iframe: {}
75834
+ iframe: {},
75835
+ safariFallbackMode: false
74443
75836
  };
74444
75837
  var appContext2 = (0, import_react32.createContext)(defaultContext2);
74445
75838
  var AppProvider = ({
@@ -74451,10 +75844,34 @@ var require_dist2 = __commonJS({
74451
75844
  (0, import_react32.useEffect)(() => {
74452
75845
  setStatus("MOUNTED");
74453
75846
  }, []);
75847
+ const [safariFallbackMode, setSafariFallbackMode] = (0, import_react32.useState)(false);
75848
+ (0, import_react32.useEffect)(() => {
75849
+ var _a3, _b, _c;
75850
+ const ua = new import_ua_parser_js2.UAParser(navigator.userAgent);
75851
+ const { browser } = ua.getResult();
75852
+ if (browser.name === "Safari" && (((_a3 = browser.version) == null ? void 0 : _a3.indexOf("17.2.")) || ((_b = browser.version) == null ? void 0 : _b.indexOf("17.3.")) || ((_c = browser.version) == null ? void 0 : _c.indexOf("17.4.")))) {
75853
+ if (process.env.NODE_ENV !== "production" && value.iframe.enabled) {
75854
+ console.warn(
75855
+ `Detected Safari ${browser.version}, which contains a bug that prevents Puck DropZones from detecting a mouseover event within an iframe. This affects Safari versions 17.2, 17.3 and 17.4.
75856
+
75857
+ Running in compatibility mode, which may have some DropZone side-effects. Alternatively, consider disabling iframes: https://puckeditor.com/docs/integrating-puck/viewports#opting-out-of-iframes.
75858
+
75859
+ See https://github.com/measuredco/puck/issues/411 for more information. This message will not show in production.`
75860
+ );
75861
+ }
75862
+ setSafariFallbackMode(true);
75863
+ }
75864
+ }, []);
74454
75865
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
74455
75866
  appContext2.Provider,
74456
75867
  {
74457
- value: __spreadProps2(__spreadValues2({}, value), { zoomConfig, setZoomConfig, status, setStatus }),
75868
+ value: __spreadProps2(__spreadValues2({}, value), {
75869
+ zoomConfig,
75870
+ setZoomConfig,
75871
+ status,
75872
+ setStatus,
75873
+ safariFallbackMode
75874
+ }),
74458
75875
  children
74459
75876
  }
74460
75877
  );
@@ -75176,7 +76593,11 @@ var require_dist2 = __commonJS({
75176
76593
  let isEnabled = userWillDrag;
75177
76594
  if (userIsDragging) {
75178
76595
  if (draggingNewComponent) {
75179
- isEnabled = hoveringOverArea;
76596
+ if (appContext22.safariFallbackMode) {
76597
+ isEnabled = true;
76598
+ } else {
76599
+ isEnabled = hoveringOverArea;
76600
+ }
75180
76601
  } else {
75181
76602
  isEnabled = draggingOverArea && hoveringOverZone;
75182
76603
  }
@@ -78957,6 +80378,7 @@ var defaultViewports = [
78957
80378
  ];
78958
80379
 
78959
80380
  // ../core/components/Puck/context.tsx
80381
+ var import_ua_parser_js = __toESM(require_ua_parser());
78960
80382
  var import_jsx_runtime4 = require("react/jsx-runtime");
78961
80383
  var defaultAppState = {
78962
80384
  data: { content: [], root: { props: { title: "" } } },
@@ -78996,7 +80418,8 @@ var defaultContext = {
78996
80418
  setZoomConfig: () => null,
78997
80419
  status: "LOADING",
78998
80420
  setStatus: () => null,
78999
- iframe: {}
80421
+ iframe: {},
80422
+ safariFallbackMode: false
79000
80423
  };
79001
80424
  var appContext = (0, import_react10.createContext)(defaultContext);
79002
80425
  function useAppContext() {