/*
 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/@bramus/style-observer/dist/index.js":
/*!***********************************************************!*\
  !*** ./node_modules/@bramus/style-observer/dist/index.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   NotificationMode: () => (/* binding */ NotificationMode),\n/* harmony export */   ReturnFormat: () => (/* binding */ ReturnFormat),\n/* harmony export */   StyleObserver: () => (/* binding */ StyleObserver),\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nvar ReturnFormat;\n(function (ReturnFormat) {\n    ReturnFormat[\"VALUE_ONLY\"] = \"value_only\";\n    ReturnFormat[\"OBJECT\"] = \"object\";\n})(ReturnFormat || (ReturnFormat = {}));\nvar NotificationMode;\n(function (NotificationMode) {\n    NotificationMode[\"CHANGED_ONLY\"] = \"changed_only\";\n    NotificationMode[\"ALL\"] = \"all\";\n})(NotificationMode || (NotificationMode = {}));\nclass StyleObserver {\n    _observedElements = new Set();\n    _cachedValues = new WeakMap();\n    constructor(callback, config = { properties: [] }) {\n        this._callback = callback;\n        this._observedVariables = config.properties;\n        this._notificationMode =\n            config.notificationMode ?? NotificationMode.CHANGED_ONLY;\n        this._returnFormat = config.returnFormat ?? ReturnFormat.OBJECT;\n    }\n    observe(targetElement) {\n        if (!this._observedElements.has(targetElement)) {\n            this._observedElements.add(targetElement);\n            this._cachedValues.set(targetElement, {});\n            this._setTargetElementStyles(targetElement);\n            targetElement.addEventListener('transitionrun', this._eventHandler);\n            this._handleUpdate(targetElement);\n        }\n    }\n    unobserve(targetElement) {\n        let elementsToUnobserve;\n        if (targetElement) {\n            if (this._observedElements.has(targetElement)) {\n                elementsToUnobserve = new Set([targetElement]);\n            }\n            else {\n                elementsToUnobserve = new Set();\n            }\n        }\n        else {\n            elementsToUnobserve = this._observedElements;\n        }\n        if (!elementsToUnobserve.size)\n            return;\n        elementsToUnobserve.forEach((elementToUnobserve) => {\n            this._unsetTargetElementStyles(elementToUnobserve);\n            elementToUnobserve.removeEventListener('transitionrun', this._eventHandler);\n            this._observedElements.delete(elementToUnobserve);\n            this._cachedValues.delete(elementToUnobserve);\n        });\n    }\n    _observedVariables;\n    _callback;\n    _eventHandler = this._handleUpdate.bind(this);\n    _notificationMode;\n    _returnFormat;\n    _setTargetElementStyles(targetElement) {\n        const cssTransitionValue = this._observedVariables\n            .map((value) => `${value} 0.001ms step-start`)\n            .join(', ');\n        targetElement.style.setProperty('transition', cssTransitionValue);\n        targetElement.style.setProperty('transition-behavior', 'allow-discrete');\n    }\n    _unsetTargetElementStyles(targetElement) {\n        targetElement.style.removeProperty('transition');\n        targetElement.style.removeProperty('transition-behavior');\n    }\n    _processComputedStyle(computedStyle, targetElement) {\n        const changes = {};\n        const cachedValuesForElement = this._cachedValues.get(targetElement) ?? {};\n        this._observedVariables.forEach((propertyName) => {\n            const currentValue = computedStyle.getPropertyValue(propertyName);\n            const previousValue = cachedValuesForElement[propertyName];\n            const hasChanged = currentValue !== previousValue;\n            if (this._notificationMode === NotificationMode.ALL || hasChanged) {\n                changes[propertyName] = {\n                    value: currentValue,\n                    previousValue,\n                    changed: hasChanged,\n                    element: targetElement,\n                };\n                cachedValuesForElement[propertyName] = currentValue;\n            }\n        });\n        return changes;\n    }\n    _getFormatter(format) {\n        switch (format) {\n            case ReturnFormat.OBJECT:\n                return (changes) => {\n                    return changes;\n                };\n            case ReturnFormat.VALUE_ONLY:\n            default:\n                return (changes) => {\n                    const formattedChanges = {};\n                    Object.keys(changes).forEach((key) => {\n                        formattedChanges[key] = changes[key].value;\n                    });\n                    return formattedChanges;\n                };\n        }\n    }\n    _handleUpdate(e) {\n        const targetElement = e instanceof HTMLElement ? e : e.target;\n        if (this._observedElements.has(targetElement)) {\n            const computedStyle = getComputedStyle(targetElement);\n            const changes = this._processComputedStyle(computedStyle, targetElement);\n            if (Object.keys(changes).length === 0)\n                return;\n            const formatter = this._getFormatter(this._returnFormat);\n            this._callback(formatter(changes));\n        }\n    }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StyleObserver);\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://bb-plugin/./node_modules/@bramus/style-observer/dist/index.js?\n}");

/***/ }),

/***/ "./node_modules/classnames/index.js":
/*!******************************************!*\
  !*** ./node_modules/classnames/index.js ***!
  \******************************************/
/***/ ((module, exports) => {

eval("{var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif ( true && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else // removed by dead control flow\n{}\n}());\n\n\n//# sourceURL=webpack://bb-plugin/./node_modules/classnames/index.js?\n}");

/***/ }),

/***/ "./node_modules/dompurify/dist/purify.js":
/*!***********************************************!*\
  !*** ./node_modules/dompurify/dist/purify.js ***!
  \***********************************************/
/***/ (function(module) {

eval("{/*! @license DOMPurify 2.5.8 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.8/LICENSE */\n\n(function (global, factory) {\n   true ? module.exports = factory() :\n  0;\n})(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n    try {\n      Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n    return _construct.apply(null, arguments);\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n    return arr2;\n  }\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var hasOwnProperty = Object.hasOwnProperty,\n    setPrototypeOf = Object.setPrototypeOf,\n    isFrozen = Object.isFrozen,\n    getPrototypeOf = Object.getPrototypeOf,\n    getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n  var freeze = Object.freeze,\n    seal = Object.seal,\n    create = Object.create; // eslint-disable-line import/no-mutable-exports\n  var _ref = typeof Reflect !== 'undefined' && Reflect,\n    apply = _ref.apply,\n    construct = _ref.construct;\n  if (!apply) {\n    apply = function apply(fun, thisValue, args) {\n      return fun.apply(thisValue, args);\n    };\n  }\n  if (!freeze) {\n    freeze = function freeze(x) {\n      return x;\n    };\n  }\n  if (!seal) {\n    seal = function seal(x) {\n      return x;\n    };\n  }\n  if (!construct) {\n    construct = function construct(Func, args) {\n      return _construct(Func, _toConsumableArray(args));\n    };\n  }\n  var arrayForEach = unapply(Array.prototype.forEach);\n  var arrayPop = unapply(Array.prototype.pop);\n  var arrayPush = unapply(Array.prototype.push);\n  var stringToLowerCase = unapply(String.prototype.toLowerCase);\n  var stringToString = unapply(String.prototype.toString);\n  var stringMatch = unapply(String.prototype.match);\n  var stringReplace = unapply(String.prototype.replace);\n  var stringIndexOf = unapply(String.prototype.indexOf);\n  var stringTrim = unapply(String.prototype.trim);\n  var regExpTest = unapply(RegExp.prototype.test);\n  var typeErrorCreate = unconstruct(TypeError);\n  function unapply(func) {\n    return function (thisArg) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      return apply(func, thisArg, args);\n    };\n  }\n  function unconstruct(func) {\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      return construct(func, args);\n    };\n  }\n\n  /* Add properties to a lookup table */\n  function addToSet(set, array, transformCaseFunc) {\n    var _transformCaseFunc;\n    transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;\n    if (setPrototypeOf) {\n      // Make 'in' and truthy checks like Boolean(set.constructor)\n      // independent of any properties defined on Object.prototype.\n      // Prevent prototype setters from intercepting set as a this value.\n      setPrototypeOf(set, null);\n    }\n    var l = array.length;\n    while (l--) {\n      var element = array[l];\n      if (typeof element === 'string') {\n        var lcElement = transformCaseFunc(element);\n        if (lcElement !== element) {\n          // Config presets (e.g. tags.js, attrs.js) are immutable.\n          if (!isFrozen(array)) {\n            array[l] = lcElement;\n          }\n          element = lcElement;\n        }\n      }\n      set[element] = true;\n    }\n    return set;\n  }\n\n  /* Shallow clone an object */\n  function clone(object) {\n    var newObject = create(null);\n    var property;\n    for (property in object) {\n      if (apply(hasOwnProperty, object, [property]) === true) {\n        newObject[property] = object[property];\n      }\n    }\n    return newObject;\n  }\n\n  /* IE10 doesn't support __lookupGetter__ so lets'\n   * simulate it. It also automatically checks\n   * if the prop is function or getter and behaves\n   * accordingly. */\n  function lookupGetter(object, prop) {\n    while (object !== null) {\n      var desc = getOwnPropertyDescriptor(object, prop);\n      if (desc) {\n        if (desc.get) {\n          return unapply(desc.get);\n        }\n        if (typeof desc.value === 'function') {\n          return unapply(desc.value);\n        }\n      }\n      object = getPrototypeOf(object);\n    }\n    function fallbackValue(element) {\n      console.warn('fallback value for', element);\n      return null;\n    }\n    return fallbackValue;\n  }\n\n  var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n  // SVG\n  var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n  var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n  // List of SVG elements that are disallowed by default.\n  // We still need to know them so that we can do namespace\n  // checks properly in case one wants to add them to\n  // allow-list.\n  var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n  var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']);\n\n  // Similarly to SVG, we want to know all MathML elements,\n  // even those that we disallow by default.\n  var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n  var text = freeze(['#text']);\n\n  var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n  var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n  var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n  var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n  // eslint-disable-next-line unicorn/better-regex\n  var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n  var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n  var TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n  var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\n  var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n  var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n  );\n  var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n  var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n  );\n  var DOCTYPE_NAME = seal(/^html$/i);\n  var CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n  var getGlobal = function getGlobal() {\n    return typeof window === 'undefined' ? null : window;\n  };\n\n  /**\n   * Creates a no-op policy for internal use only.\n   * Don't export this function outside this module!\n   * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n   * @param {Document} document The document object (to determine policy name suffix)\n   * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n   * are not supported).\n   */\n  var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n    if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n      return null;\n    }\n\n    // Allow the callers to control the unique policy name\n    // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n    // Policy creation with duplicate names throws in Trusted Types.\n    var suffix = null;\n    var ATTR_NAME = 'data-tt-policy-suffix';\n    if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n      suffix = document.currentScript.getAttribute(ATTR_NAME);\n    }\n    var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n    try {\n      return trustedTypes.createPolicy(policyName, {\n        createHTML: function createHTML(html) {\n          return html;\n        },\n        createScriptURL: function createScriptURL(scriptUrl) {\n          return scriptUrl;\n        }\n      });\n    } catch (_) {\n      // Policy creation failed (most likely another DOMPurify script has\n      // already run). Skip creating the policy, as this will only cause errors\n      // if TT are enforced.\n      console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n      return null;\n    }\n  };\n  function createDOMPurify() {\n    var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n    var DOMPurify = function DOMPurify(root) {\n      return createDOMPurify(root);\n    };\n\n    /**\n     * Version label, exposed for easier checks\n     * if DOMPurify is up to date or not\n     */\n    DOMPurify.version = '2.5.8';\n\n    /**\n     * Array of elements that DOMPurify removed during sanitation.\n     * Empty if nothing was removed.\n     */\n    DOMPurify.removed = [];\n    if (!window || !window.document || window.document.nodeType !== 9) {\n      // Not running in a browser, provide a factory function\n      // so that you can pass your own Window\n      DOMPurify.isSupported = false;\n      return DOMPurify;\n    }\n    var originalDocument = window.document;\n    var document = window.document;\n    var DocumentFragment = window.DocumentFragment,\n      HTMLTemplateElement = window.HTMLTemplateElement,\n      Node = window.Node,\n      Element = window.Element,\n      NodeFilter = window.NodeFilter,\n      _window$NamedNodeMap = window.NamedNodeMap,\n      NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n      HTMLFormElement = window.HTMLFormElement,\n      DOMParser = window.DOMParser,\n      trustedTypes = window.trustedTypes;\n    var ElementPrototype = Element.prototype;\n    var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n    var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n    var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n    var getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n    // As per issue #47, the web-components registry is inherited by a\n    // new document created via createHTMLDocument. As per the spec\n    // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n    // a new empty registry is used when creating a template contents owner\n    // document, so we use that as our parent document to ensure nothing\n    // is inherited.\n    if (typeof HTMLTemplateElement === 'function') {\n      var template = document.createElement('template');\n      if (template.content && template.content.ownerDocument) {\n        document = template.content.ownerDocument;\n      }\n    }\n    var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n    var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n    var _document = document,\n      implementation = _document.implementation,\n      createNodeIterator = _document.createNodeIterator,\n      createDocumentFragment = _document.createDocumentFragment,\n      getElementsByTagName = _document.getElementsByTagName;\n    var importNode = originalDocument.importNode;\n    var documentMode = {};\n    try {\n      documentMode = clone(document).documentMode ? document.documentMode : {};\n    } catch (_) {}\n    var hooks = {};\n\n    /**\n     * Expose whether this browser supports running the full DOMPurify.\n     */\n    DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined && documentMode !== 9;\n    var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n      ERB_EXPR$1 = ERB_EXPR,\n      TMPLIT_EXPR$1 = TMPLIT_EXPR,\n      DATA_ATTR$1 = DATA_ATTR,\n      ARIA_ATTR$1 = ARIA_ATTR,\n      IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n      ATTR_WHITESPACE$1 = ATTR_WHITESPACE,\n      CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n    var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n\n    /**\n     * We consider the elements and attributes below to be safe. Ideally\n     * don't add any new ones but feel free to remove unwanted ones.\n     */\n\n    /* allowed element names */\n    var ALLOWED_TAGS = null;\n    var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n\n    /* Allowed attribute names */\n    var ALLOWED_ATTR = null;\n    var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n\n    /*\n     * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n     * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n     * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n     * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n     */\n    var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false\n      }\n    }));\n\n    /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n    var FORBID_TAGS = null;\n\n    /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n    var FORBID_ATTR = null;\n\n    /* Decide if ARIA attributes are okay */\n    var ALLOW_ARIA_ATTR = true;\n\n    /* Decide if custom data attributes are okay */\n    var ALLOW_DATA_ATTR = true;\n\n    /* Decide if unknown protocols are okay */\n    var ALLOW_UNKNOWN_PROTOCOLS = false;\n\n    /* Decide if self-closing tags in attributes are allowed.\n     * Usually removed due to a mXSS issue in jQuery 3.0 */\n    var ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n    /* Output should be safe for common template engines.\n     * This means, DOMPurify removes data attributes, mustaches and ERB\n     */\n    var SAFE_FOR_TEMPLATES = false;\n\n    /* Output should be safe even for XML used within HTML and alike.\n     * This means, DOMPurify removes comments when containing risky content.\n     */\n    var SAFE_FOR_XML = true;\n\n    /* Decide if document with <html>... should be returned */\n    var WHOLE_DOCUMENT = false;\n\n    /* Track whether config is already set on this instance of DOMPurify. */\n    var SET_CONFIG = false;\n\n    /* Decide if all elements (e.g. style, script) must be children of\n     * document.body. By default, browsers might move them to document.head */\n    var FORCE_BODY = false;\n\n    /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n     * string (or a TrustedHTML object if Trusted Types are supported).\n     * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n     */\n    var RETURN_DOM = false;\n\n    /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n     * string  (or a TrustedHTML object if Trusted Types are supported) */\n    var RETURN_DOM_FRAGMENT = false;\n\n    /* Try to return a Trusted Type object instead of a string, return a string in\n     * case Trusted Types are not supported  */\n    var RETURN_TRUSTED_TYPE = false;\n\n    /* Output should be free from DOM clobbering attacks?\n     * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n     */\n    var SANITIZE_DOM = true;\n\n    /* Achieve full DOM Clobbering protection by isolating the namespace of named\n     * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n     *\n     * HTML/DOM spec rules that enable DOM Clobbering:\n     *   - Named Access on Window (§7.3.3)\n     *   - DOM Tree Accessors (§3.1.5)\n     *   - Form Element Parent-Child Relations (§4.10.3)\n     *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n     *   - HTMLCollection (§4.2.10.2)\n     *\n     * Namespace isolation is implemented by prefixing `id` and `name` attributes\n     * with a constant string, i.e., `user-content-`\n     */\n    var SANITIZE_NAMED_PROPS = false;\n    var SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n    /* Keep element content when removing element? */\n    var KEEP_CONTENT = true;\n\n    /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n     * of importing it into a new Document and returning a sanitized copy */\n    var IN_PLACE = false;\n\n    /* Allow usage of profiles like html, svg and mathMl */\n    var USE_PROFILES = {};\n\n    /* Tags to ignore content of when KEEP_CONTENT is true */\n    var FORBID_CONTENTS = null;\n    var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n    /* Tags that are safe for data: URIs */\n    var DATA_URI_TAGS = null;\n    var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n    /* Attributes safe for values like \"javascript:\" */\n    var URI_SAFE_ATTRIBUTES = null;\n    var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n    var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n    var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n    var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n    /* Document namespace */\n    var NAMESPACE = HTML_NAMESPACE;\n    var IS_EMPTY_INPUT = false;\n\n    /* Allowed XHTML+XML namespaces */\n    var ALLOWED_NAMESPACES = null;\n    var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n    /* Parsing of strict XHTML documents */\n    var PARSER_MEDIA_TYPE;\n    var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n    var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n    var transformCaseFunc;\n\n    /* Keep a reference to config to pass to hooks */\n    var CONFIG = null;\n\n    /* Ideally, do not touch anything below this line */\n    /* ______________________________________________ */\n\n    var formElement = document.createElement('form');\n    var isRegexOrFunction = function isRegexOrFunction(testValue) {\n      return testValue instanceof RegExp || testValue instanceof Function;\n    };\n\n    /**\n     * _parseConfig\n     *\n     * @param  {Object} cfg optional config literal\n     */\n    // eslint-disable-next-line complexity\n    var _parseConfig = function _parseConfig(cfg) {\n      if (CONFIG && CONFIG === cfg) {\n        return;\n      }\n\n      /* Shield configuration object from tampering */\n      if (!cfg || _typeof(cfg) !== 'object') {\n        cfg = {};\n      }\n\n      /* Shield configuration object from prototype pollution */\n      cfg = clone(cfg);\n      PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE;\n\n      // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n      transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n      /* Set configuration parameters */\n      ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n      ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n      ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n      URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n      // eslint-disable-line indent\n      cfg.ADD_URI_SAFE_ATTR,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n      DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n      // eslint-disable-line indent\n      cfg.ADD_DATA_URI_TAGS,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_DATA_URI_TAGS;\n      FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n      FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n      FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n      USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n      ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n      ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n      ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n      ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n      SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n      SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n      WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n      RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n      RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n      RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n      FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n      SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n      SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n      KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n      IN_PLACE = cfg.IN_PLACE || false; // Default false\n      IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n      NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n      CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n      }\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n      }\n      if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n        CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n      }\n      if (SAFE_FOR_TEMPLATES) {\n        ALLOW_DATA_ATTR = false;\n      }\n      if (RETURN_DOM_FRAGMENT) {\n        RETURN_DOM = true;\n      }\n\n      /* Parse profile info */\n      if (USE_PROFILES) {\n        ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n        ALLOWED_ATTR = [];\n        if (USE_PROFILES.html === true) {\n          addToSet(ALLOWED_TAGS, html$1);\n          addToSet(ALLOWED_ATTR, html);\n        }\n        if (USE_PROFILES.svg === true) {\n          addToSet(ALLOWED_TAGS, svg$1);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n        if (USE_PROFILES.svgFilters === true) {\n          addToSet(ALLOWED_TAGS, svgFilters);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n        if (USE_PROFILES.mathMl === true) {\n          addToSet(ALLOWED_TAGS, mathMl$1);\n          addToSet(ALLOWED_ATTR, mathMl);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n      }\n\n      /* Merge configuration parameters */\n      if (cfg.ADD_TAGS) {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n      if (cfg.ADD_ATTR) {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n      if (cfg.ADD_URI_SAFE_ATTR) {\n        addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n      }\n      if (cfg.FORBID_CONTENTS) {\n        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n          FORBID_CONTENTS = clone(FORBID_CONTENTS);\n        }\n        addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n      }\n\n      /* Add #text in case KEEP_CONTENT is set to true */\n      if (KEEP_CONTENT) {\n        ALLOWED_TAGS['#text'] = true;\n      }\n\n      /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n      if (WHOLE_DOCUMENT) {\n        addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n      }\n\n      /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n      if (ALLOWED_TAGS.table) {\n        addToSet(ALLOWED_TAGS, ['tbody']);\n        delete FORBID_TAGS.tbody;\n      }\n\n      // Prevent further manipulation of configuration.\n      // Not available in IE8, Safari 5, etc.\n      if (freeze) {\n        freeze(cfg);\n      }\n      CONFIG = cfg;\n    };\n    var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n    var HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n    // Certain elements are allowed in both SVG and HTML\n    // namespace. We need to specify them explicitly\n    // so that they don't get erroneously deleted from\n    // HTML namespace.\n    var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n    /* Keep track of all possible SVG and MathML tags\n     * so that we can perform the namespace checks\n     * correctly. */\n    var ALL_SVG_TAGS = addToSet({}, svg$1);\n    addToSet(ALL_SVG_TAGS, svgFilters);\n    addToSet(ALL_SVG_TAGS, svgDisallowed);\n    var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n    addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\n    /**\n     *\n     *\n     * @param  {Element} element a DOM element whose namespace is being checked\n     * @returns {boolean} Return false if the element has a\n     *  namespace that a spec-compliant parser would never\n     *  return. Return true otherwise.\n     */\n    var _checkValidNamespace = function _checkValidNamespace(element) {\n      var parent = getParentNode(element);\n\n      // In JSDOM, if we're inside shadow DOM, then parentNode\n      // can be null. We just simulate parent in this case.\n      if (!parent || !parent.tagName) {\n        parent = {\n          namespaceURI: NAMESPACE,\n          tagName: 'template'\n        };\n      }\n      var tagName = stringToLowerCase(element.tagName);\n      var parentTagName = stringToLowerCase(parent.tagName);\n      if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return false;\n      }\n      if (element.namespaceURI === SVG_NAMESPACE) {\n        // The only way to switch from HTML namespace to SVG\n        // is via <svg>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'svg';\n        }\n\n        // The only way to switch from MathML to SVG is via`\n        // svg if parent is either <annotation-xml> or MathML\n        // text integration points.\n        if (parent.namespaceURI === MATHML_NAMESPACE) {\n          return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n        }\n\n        // We only allow elements that are defined in SVG\n        // spec. All others are disallowed in SVG namespace.\n        return Boolean(ALL_SVG_TAGS[tagName]);\n      }\n      if (element.namespaceURI === MATHML_NAMESPACE) {\n        // The only way to switch from HTML namespace to MathML\n        // is via <math>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'math';\n        }\n\n        // The only way to switch from SVG to MathML is via\n        // <math> and HTML integration points\n        if (parent.namespaceURI === SVG_NAMESPACE) {\n          return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n        }\n\n        // We only allow elements that are defined in MathML\n        // spec. All others are disallowed in MathML namespace.\n        return Boolean(ALL_MATHML_TAGS[tagName]);\n      }\n      if (element.namespaceURI === HTML_NAMESPACE) {\n        // The only way to switch from SVG to HTML is via\n        // HTML integration points, and from MathML to HTML\n        // is via MathML text integration points\n        if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n        if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n\n        // We disallow tags that are specific for MathML\n        // or SVG and should never appear in HTML namespace\n        return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n      }\n\n      // For XHTML and XML documents that support custom namespaces\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n        return true;\n      }\n\n      // The code should never reach this place (this means\n      // that the element somehow got namespace that is not\n      // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n      // Return false just in case.\n      return false;\n    };\n\n    /**\n     * _forceRemove\n     *\n     * @param  {Node} node a DOM node\n     */\n    var _forceRemove = function _forceRemove(node) {\n      arrayPush(DOMPurify.removed, {\n        element: node\n      });\n      try {\n        // eslint-disable-next-line unicorn/prefer-dom-node-remove\n        node.parentNode.removeChild(node);\n      } catch (_) {\n        try {\n          node.outerHTML = emptyHTML;\n        } catch (_) {\n          node.remove();\n        }\n      }\n    };\n\n    /**\n     * _removeAttribute\n     *\n     * @param  {String} name an Attribute name\n     * @param  {Node} node a DOM node\n     */\n    var _removeAttribute = function _removeAttribute(name, node) {\n      try {\n        arrayPush(DOMPurify.removed, {\n          attribute: node.getAttributeNode(name),\n          from: node\n        });\n      } catch (_) {\n        arrayPush(DOMPurify.removed, {\n          attribute: null,\n          from: node\n        });\n      }\n      node.removeAttribute(name);\n\n      // We void attribute values for unremovable \"is\"\" attributes\n      if (name === 'is' && !ALLOWED_ATTR[name]) {\n        if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n          try {\n            _forceRemove(node);\n          } catch (_) {}\n        } else {\n          try {\n            node.setAttribute(name, '');\n          } catch (_) {}\n        }\n      }\n    };\n\n    /**\n     * _initDocument\n     *\n     * @param  {String} dirty a string of dirty markup\n     * @return {Document} a DOM, filled with the dirty markup\n     */\n    var _initDocument = function _initDocument(dirty) {\n      /* Create a HTML document */\n      var doc;\n      var leadingWhitespace;\n      if (FORCE_BODY) {\n        dirty = '<remove></remove>' + dirty;\n      } else {\n        /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n        var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n        leadingWhitespace = matches && matches[0];\n      }\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n        // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n        dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n      }\n      var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      /*\n       * Use the DOMParser API by default, fallback later if needs be\n       * DOMParser not work for svg when has multiple root element.\n       */\n      if (NAMESPACE === HTML_NAMESPACE) {\n        try {\n          doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n        } catch (_) {}\n      }\n\n      /* Use createHTMLDocument in case DOMParser is not available */\n      if (!doc || !doc.documentElement) {\n        doc = implementation.createDocument(NAMESPACE, 'template', null);\n        try {\n          doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n        } catch (_) {\n          // Syntax error if dirtyPayload is invalid xml\n        }\n      }\n      var body = doc.body || doc.documentElement;\n      if (dirty && leadingWhitespace) {\n        body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n      }\n\n      /* Work on whole document or just its body */\n      if (NAMESPACE === HTML_NAMESPACE) {\n        return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n      }\n      return WHOLE_DOCUMENT ? doc.documentElement : body;\n    };\n\n    /**\n     * _createIterator\n     *\n     * @param  {Document} root document/fragment to create iterator for\n     * @return {Iterator} iterator instance\n     */\n    var _createIterator = function _createIterator(root) {\n      return createNodeIterator.call(root.ownerDocument || root, root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null, false);\n    };\n\n    /**\n     * _isClobbered\n     *\n     * @param  {Node} elm element to check for clobbering attacks\n     * @return {Boolean} true if clobbered, false if safe\n     */\n    var _isClobbered = function _isClobbered(elm) {\n      return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n    };\n\n    /**\n     * _isNode\n     *\n     * @param  {Node} obj object to check whether it's a DOM node\n     * @return {Boolean} true is object is a DOM node\n     */\n    var _isNode = function _isNode(object) {\n      return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n    };\n\n    /**\n     * _executeHook\n     * Execute user configurable hooks\n     *\n     * @param  {String} entryPoint  Name of the hook's entry point\n     * @param  {Node} currentNode node to work on with the hook\n     * @param  {Object} data additional hook parameters\n     */\n    var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n      if (!hooks[entryPoint]) {\n        return;\n      }\n      arrayForEach(hooks[entryPoint], function (hook) {\n        hook.call(DOMPurify, currentNode, data, CONFIG);\n      });\n    };\n\n    /**\n     * _sanitizeElements\n     *\n     * @protect nodeName\n     * @protect textContent\n     * @protect removeChild\n     *\n     * @param   {Node} currentNode to check for permission to exist\n     * @return  {Boolean} true if node was killed, false if left alive\n     */\n    var _sanitizeElements = function _sanitizeElements(currentNode) {\n      var content;\n\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeElements', currentNode, null);\n\n      /* Check if element is clobbered or can clobber */\n      if (_isClobbered(currentNode)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Check if tagname contains Unicode */\n      if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Now let's check the element's type and name */\n      var tagName = transformCaseFunc(currentNode.nodeName);\n\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeElement', currentNode, {\n        tagName: tagName,\n        allowedTags: ALLOWED_TAGS\n      });\n\n      /* Detect mXSS attempts abusing namespace confusion */\n      if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Mitigate a problem with templates inside select */\n      if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove any ocurrence of processing instructions */\n      if (currentNode.nodeType === 7) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove any kind of possibly harmful comments */\n      if (SAFE_FOR_XML && currentNode.nodeType === 8 && regExpTest(/<[/\\w]/g, currentNode.data)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Remove element if anything forbids its presence */\n      if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n        /* Check if we have a custom element to handle */\n        if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n        }\n\n        /* Keep content except for bad-listed elements */\n        if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n          var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n          var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n          if (childNodes && parentNode) {\n            var childCount = childNodes.length;\n            for (var i = childCount - 1; i >= 0; --i) {\n              var childClone = cloneNode(childNodes[i], true);\n              childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n              parentNode.insertBefore(childClone, getNextSibling(currentNode));\n            }\n          }\n        }\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Check whether element has a valid namespace */\n      if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Make sure that older browsers don't get fallback-tag mXSS */\n      if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n        return true;\n      }\n\n      /* Sanitize element content to be template-safe */\n      if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n        /* Get the element's text content */\n        content = currentNode.textContent;\n        content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n        content = stringReplace(content, ERB_EXPR$1, ' ');\n        content = stringReplace(content, TMPLIT_EXPR$1, ' ');\n        if (currentNode.textContent !== content) {\n          arrayPush(DOMPurify.removed, {\n            element: currentNode.cloneNode()\n          });\n          currentNode.textContent = content;\n        }\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeElements', currentNode, null);\n      return false;\n    };\n\n    /**\n     * _isValidAttribute\n     *\n     * @param  {string} lcTag Lowercase tag name of containing element.\n     * @param  {string} lcName Lowercase attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid, otherwise false.\n     */\n    // eslint-disable-next-line complexity\n    var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n      /* Make sure attribute cannot clobber */\n      if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n        return false;\n      }\n\n      /* Allow valid data-* attributes: At least one character after \"-\"\n          (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n          XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n          We don't need to check the value; it's always URI safe. */\n      if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n        if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n          return false;\n        }\n        /* Check value is safe. First, is attr inert? If so, is safe */\n      } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (value) {\n        return false;\n      } else ;\n      return true;\n    };\n\n    /**\n     * _basicCustomElementCheck\n     * checks if at least one dash is included in tagName, and it's not the first char\n     * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n     * @param {string} tagName name of the tag of the node to sanitize\n     */\n    var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n      return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT$1);\n    };\n\n    /**\n     * _sanitizeAttributes\n     *\n     * @protect attributes\n     * @protect nodeName\n     * @protect removeAttribute\n     * @protect setAttribute\n     *\n     * @param  {Node} currentNode to sanitize\n     */\n    var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n      var attr;\n      var value;\n      var lcName;\n      var l;\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeAttributes', currentNode, null);\n      var attributes = currentNode.attributes;\n\n      /* Check if we have attributes; if not we might have a text node */\n      if (!attributes || _isClobbered(currentNode)) {\n        return;\n      }\n      var hookEvent = {\n        attrName: '',\n        attrValue: '',\n        keepAttr: true,\n        allowedAttributes: ALLOWED_ATTR\n      };\n      l = attributes.length;\n\n      /* Go backwards over all attributes; safely remove bad ones */\n      while (l--) {\n        attr = attributes[l];\n        var _attr = attr,\n          name = _attr.name,\n          namespaceURI = _attr.namespaceURI;\n        value = name === 'value' ? attr.value : stringTrim(attr.value);\n        lcName = transformCaseFunc(name);\n\n        /* Execute a hook if present */\n        hookEvent.attrName = lcName;\n        hookEvent.attrValue = value;\n        hookEvent.keepAttr = true;\n        hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n        _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n        value = hookEvent.attrValue;\n\n        /* Did the hooks approve of the attribute? */\n        if (hookEvent.forceKeepAttr) {\n          continue;\n        }\n\n        /* Remove attribute */\n        _removeAttribute(name, currentNode);\n\n        /* Did the hooks approve of the attribute? */\n        if (!hookEvent.keepAttr) {\n          continue;\n        }\n\n        /* Work around a security issue in jQuery 3.0 */\n        if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n          _removeAttribute(name, currentNode);\n          continue;\n        }\n\n        /* Sanitize attribute content to be template-safe */\n        if (SAFE_FOR_TEMPLATES) {\n          value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n          value = stringReplace(value, ERB_EXPR$1, ' ');\n          value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n        }\n\n        /* Is `value` valid for this attribute? */\n        var lcTag = transformCaseFunc(currentNode.nodeName);\n        if (!_isValidAttribute(lcTag, lcName, value)) {\n          continue;\n        }\n\n        /* Full DOM Clobbering protection via namespace isolation,\n         * Prefix id and name attributes with `user-content-`\n         */\n        if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n          // Remove the attribute with this value\n          _removeAttribute(name, currentNode);\n\n          // Prefix the value and later re-create the attribute with the sanitized value\n          value = SANITIZE_NAMED_PROPS_PREFIX + value;\n        }\n\n        /* Work around a security issue with comments inside attributes */\n        if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n          _removeAttribute(name, currentNode);\n          continue;\n        }\n\n        /* Handle attributes that require Trusted Types */\n        if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n          if (namespaceURI) ; else {\n            switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n              case 'TrustedHTML':\n                {\n                  value = trustedTypesPolicy.createHTML(value);\n                  break;\n                }\n              case 'TrustedScriptURL':\n                {\n                  value = trustedTypesPolicy.createScriptURL(value);\n                  break;\n                }\n            }\n          }\n        }\n\n        /* Handle invalid data-* attribute set by try-catching it */\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {}\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeAttributes', currentNode, null);\n    };\n\n    /**\n     * _sanitizeShadowDOM\n     *\n     * @param  {DocumentFragment} fragment to iterate over recursively\n     */\n    var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n      var shadowNode;\n      var shadowIterator = _createIterator(fragment);\n\n      /* Execute a hook if present */\n      _executeHook('beforeSanitizeShadowDOM', fragment, null);\n      while (shadowNode = shadowIterator.nextNode()) {\n        /* Execute a hook if present */\n        _executeHook('uponSanitizeShadowNode', shadowNode, null);\n        /* Sanitize tags and elements */\n        _sanitizeElements(shadowNode);\n\n        /* Check attributes next */\n        _sanitizeAttributes(shadowNode);\n\n        /* Deep shadow DOM detected */\n        if (shadowNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(shadowNode.content);\n        }\n      }\n\n      /* Execute a hook if present */\n      _executeHook('afterSanitizeShadowDOM', fragment, null);\n    };\n\n    /**\n     * Sanitize\n     * Public method providing core sanitation functionality\n     *\n     * @param {String|Node} dirty string or DOM node\n     * @param {Object} configuration object\n     */\n    // eslint-disable-next-line complexity\n    DOMPurify.sanitize = function (dirty) {\n      var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var body;\n      var importedNode;\n      var currentNode;\n      var oldNode;\n      var returnNode;\n      /* Make sure we have a string to sanitize.\n        DO NOT return early, as this will return the wrong type if\n        the user has requested a DOM object rather than a string */\n      IS_EMPTY_INPUT = !dirty;\n      if (IS_EMPTY_INPUT) {\n        dirty = '<!-->';\n      }\n\n      /* Stringify, in case dirty is an object */\n      if (typeof dirty !== 'string' && !_isNode(dirty)) {\n        if (typeof dirty.toString === 'function') {\n          dirty = dirty.toString();\n          if (typeof dirty !== 'string') {\n            throw typeErrorCreate('dirty is not a string, aborting');\n          }\n        } else {\n          throw typeErrorCreate('toString is not a function');\n        }\n      }\n\n      /* Check we can run. Otherwise fall back or ignore */\n      if (!DOMPurify.isSupported) {\n        if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n          if (typeof dirty === 'string') {\n            return window.toStaticHTML(dirty);\n          }\n          if (_isNode(dirty)) {\n            return window.toStaticHTML(dirty.outerHTML);\n          }\n        }\n        return dirty;\n      }\n\n      /* Assign config vars */\n      if (!SET_CONFIG) {\n        _parseConfig(cfg);\n      }\n\n      /* Clean up removed elements */\n      DOMPurify.removed = [];\n\n      /* Check if dirty is correctly typed for IN_PLACE */\n      if (typeof dirty === 'string') {\n        IN_PLACE = false;\n      }\n      if (IN_PLACE) {\n        /* Do some early pre-sanitization to avoid unsafe root nodes */\n        if (dirty.nodeName) {\n          var tagName = transformCaseFunc(dirty.nodeName);\n          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n            throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n          }\n        }\n      } else if (dirty instanceof Node) {\n        /* If dirty is a DOM element, append to an empty document to avoid\n           elements being stripped by the parser */\n        body = _initDocument('<!---->');\n        importedNode = body.ownerDocument.importNode(dirty, true);\n        if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n          /* Node is already a body, use as is */\n          body = importedNode;\n        } else if (importedNode.nodeName === 'HTML') {\n          body = importedNode;\n        } else {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          body.appendChild(importedNode);\n        }\n      } else {\n        /* Exit directly if we have nothing to do */\n        if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1) {\n          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        }\n\n        /* Initialize the document to work on */\n        body = _initDocument(dirty);\n\n        /* Check we have a DOM node from the data */\n        if (!body) {\n          return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n        }\n      }\n\n      /* Remove first element node (ours) if FORCE_BODY is set */\n      if (body && FORCE_BODY) {\n        _forceRemove(body.firstChild);\n      }\n\n      /* Get node iterator */\n      var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n      /* Now start iterating over the created document */\n      while (currentNode = nodeIterator.nextNode()) {\n        /* Fix IE's strange behavior with manipulated textNodes #89 */\n        if (currentNode.nodeType === 3 && currentNode === oldNode) {\n          continue;\n        }\n\n        /* Sanitize tags and elements */\n        _sanitizeElements(currentNode);\n\n        /* Check attributes next */\n        _sanitizeAttributes(currentNode);\n\n        /* Shadow DOM detected, sanitize it */\n        if (currentNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(currentNode.content);\n        }\n        oldNode = currentNode;\n      }\n      oldNode = null;\n\n      /* If we sanitized `dirty` in-place, return it. */\n      if (IN_PLACE) {\n        return dirty;\n      }\n\n      /* Return sanitized string or DOM */\n      if (RETURN_DOM) {\n        if (RETURN_DOM_FRAGMENT) {\n          returnNode = createDocumentFragment.call(body.ownerDocument);\n          while (body.firstChild) {\n            // eslint-disable-next-line unicorn/prefer-dom-node-append\n            returnNode.appendChild(body.firstChild);\n          }\n        } else {\n          returnNode = body;\n        }\n        if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n          /*\n            AdoptNode() is not used because internal state is not reset\n            (e.g. the past names map of a HTMLFormElement), this is safe\n            in theory but we would rather not risk another attack vector.\n            The state that is cloned by importNode() is explicitly defined\n            by the specs.\n          */\n          returnNode = importNode.call(originalDocument, returnNode, true);\n        }\n        return returnNode;\n      }\n      var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n      /* Serialize doctype if allowed */\n      if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n        serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n      }\n\n      /* Sanitize final string template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n        serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n        serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR$1, ' ');\n      }\n      return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n    };\n\n    /**\n     * Public method to set the configuration once\n     * setConfig\n     *\n     * @param {Object} cfg configuration object\n     */\n    DOMPurify.setConfig = function (cfg) {\n      _parseConfig(cfg);\n      SET_CONFIG = true;\n    };\n\n    /**\n     * Public method to remove the configuration\n     * clearConfig\n     *\n     */\n    DOMPurify.clearConfig = function () {\n      CONFIG = null;\n      SET_CONFIG = false;\n    };\n\n    /**\n     * Public method to check if an attribute value is valid.\n     * Uses last set config, if any. Otherwise, uses config defaults.\n     * isValidAttribute\n     *\n     * @param  {string} tag Tag name of containing element.\n     * @param  {string} attr Attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n     */\n    DOMPurify.isValidAttribute = function (tag, attr, value) {\n      /* Initialize shared config vars if necessary. */\n      if (!CONFIG) {\n        _parseConfig({});\n      }\n      var lcTag = transformCaseFunc(tag);\n      var lcName = transformCaseFunc(attr);\n      return _isValidAttribute(lcTag, lcName, value);\n    };\n\n    /**\n     * AddHook\n     * Public method to add DOMPurify hooks\n     *\n     * @param {String} entryPoint entry point for the hook to add\n     * @param {Function} hookFunction function to execute\n     */\n    DOMPurify.addHook = function (entryPoint, hookFunction) {\n      if (typeof hookFunction !== 'function') {\n        return;\n      }\n      hooks[entryPoint] = hooks[entryPoint] || [];\n      arrayPush(hooks[entryPoint], hookFunction);\n    };\n\n    /**\n     * RemoveHook\n     * Public method to remove a DOMPurify hook at a given entryPoint\n     * (pops it from the stack of hooks if more are present)\n     *\n     * @param {String} entryPoint entry point for the hook to remove\n     * @return {Function} removed(popped) hook\n     */\n    DOMPurify.removeHook = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        return arrayPop(hooks[entryPoint]);\n      }\n    };\n\n    /**\n     * RemoveHooks\n     * Public method to remove all DOMPurify hooks at a given entryPoint\n     *\n     * @param  {String} entryPoint entry point for the hooks to remove\n     */\n    DOMPurify.removeHooks = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        hooks[entryPoint] = [];\n      }\n    };\n\n    /**\n     * RemoveAllHooks\n     * Public method to remove all DOMPurify hooks\n     *\n     */\n    DOMPurify.removeAllHooks = function () {\n      hooks = {};\n    };\n    return DOMPurify;\n  }\n  var purify = createDOMPurify();\n\n  return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n\n\n//# sourceURL=webpack://bb-plugin/./node_modules/dompurify/dist/purify.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/api/dom/index.js":
/*!************************************************!*\
  !*** ./src/FL/Builder/system/api/dom/index.js ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   moveNodeInDOM: () => (/* binding */ moveNodeInDOM)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/FL/Builder/system/api/dom/utils.js\");\n\nconst moveNodeInDOM = (id, position = 0, parent = null) => {\n  const nodeElement = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getNodeElement)(id);\n  let parentElement = null;\n  let contentElement = null;\n  let isColumnGroup = false;\n  let isContainerModule = false;\n  let previousParentElement = nodeElement.parentElement.closest('[data-node]');\n\n  // Move within the same parent\n  if (null === parent) {\n    parentElement = nodeElement.parentElement;\n    contentElement = parentElement;\n  }\n\n  // Move to the main layout\n  if (0 === parent) {\n    parentElement = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getLayoutRoot)();\n    contentElement = parentElement;\n  }\n\n  // Move to a different parent\n  if (parent) {\n    parentElement = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getNodeElement)(parent);\n    contentElement = parentElement.querySelector('.fl-node-content');\n    isColumnGroup = parentElement.classList.contains('fl-col-group');\n    isContainerModule = parentElement.classList.contains('fl-module');\n    if (isColumnGroup) {\n      contentElement = parentElement;\n    }\n    if (isContainerModule) {\n      const childrenWrapper = parentElement.querySelector(':scope > [data-children-wrapper]');\n      if (childrenWrapper) {\n        contentElement = childrenWrapper;\n      } else if (!parentElement.querySelector(':scope > .fl-node-content')) {\n        contentElement = parentElement;\n      }\n    }\n  }\n\n  // Only move if the element isn't already in position\n  if (nodeElement !== contentElement.children[position]) {\n    nodeElement.remove();\n    if (position > contentElement.children.length - 1) {\n      contentElement.appendChild(nodeElement);\n    } else {\n      contentElement.insertBefore(nodeElement, contentElement.children[position]);\n    }\n\n    // Set the new parent value for the element data node\n    nodeElement.dataset.parent = parentElement.dataset.node;\n\n    // Reset col widths when reparenting to a new column group\n    if (isColumnGroup && parent) {\n      FLBuilder._resetColumnWidths(parentElement);\n      FLBuilder._resetColumnWidths(previousParentElement);\n    }\n  }\n  FLBuilder._highlightEmptyCols();\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/api/dom/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/api/dom/utils.js":
/*!************************************************!*\
  !*** ./src/FL/Builder/system/api/dom/utils.js ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getLayoutRoot: () => (/* binding */ getLayoutRoot),\n/* harmony export */   getNodeElement: () => (/* binding */ getNodeElement),\n/* harmony export */   scrollToNode: () => (/* binding */ scrollToNode)\n/* harmony export */ });\n/**\n * Get the root layout element.\n *\n * @param string postId\n * @return HTMLElement | null\n */\nconst getLayoutRoot = () => {\n  const {\n    postId\n  } = FLBuilderConfig;\n  return document.querySelector(`.fl-builder-content-${postId}`);\n};\n\n/**\n * Get a reference to a node's dom element from an id\n *\n * @param string id\n * @return HTMLElement | null\n */\nconst getNodeElement = id => {\n  const root = getLayoutRoot();\n  if (!root) {\n    return null;\n  }\n  return root.querySelector(`[data-node=\"${id}\"]`);\n};\n\n/**\n * Scroll the root element of a particular node onto screen if it is not.\n *\n * @param string id\n * @return void\n */\nconst scrollToNode = id => {\n  const el = getNodeElement(id);\n  if (el) {\n    el.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center'\n    });\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/api/dom/utils.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/api/index.js":
/*!********************************************!*\
  !*** ./src/FL/Builder/system/api/index.js ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   displayPanel: () => (/* binding */ displayPanel),\n/* harmony export */   getActions: () => (/* binding */ getActions),\n/* harmony export */   getConfig: () => (/* binding */ getConfig),\n/* harmony export */   getStrings: () => (/* binding */ getStrings),\n/* harmony export */   registerPanel: () => (/* binding */ registerPanel),\n/* harmony export */   togglePanel: () => (/* binding */ togglePanel)\n/* harmony export */ });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodes */ \"./src/FL/Builder/system/api/nodes.js\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings */ \"./src/FL/Builder/system/api/settings.js\");\n/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dom */ \"./src/FL/Builder/system/api/dom/index.js\");\n\n\n\n\nconst getActions = () => {\n  const {\n    registerPanel,\n    displayPanel,\n    togglePanel\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getSystemActions)();\n\n  /**\n   * Being very selective about what we expose via the public API here.\n   */\n  const systemAPI = {\n    registerPanel,\n    displayPanel,\n    togglePanel\n  };\n  return {\n    ...systemAPI,\n    ..._nodes__WEBPACK_IMPORTED_MODULE_1__,\n    ..._settings__WEBPACK_IMPORTED_MODULE_2__,\n    ..._dom__WEBPACK_IMPORTED_MODULE_3__\n  };\n};\nconst getConfig = () => window.FLBuilderConfig;\nconst getStrings = () => window.FLBuilderStrings;\nconst {\n  registerPanel,\n  displayPanel,\n  togglePanel\n} = getActions();\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/api/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/api/nodes.js":
/*!********************************************!*\
  !*** ./src/FL/Builder/system/api/nodes.js ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   copyNode: () => (/* binding */ copyNode),\n/* harmony export */   copyNodeSettings: () => (/* binding */ copyNodeSettings),\n/* harmony export */   deleteNode: () => (/* binding */ deleteNode),\n/* harmony export */   moveNode: () => (/* binding */ moveNode),\n/* harmony export */   pasteNodeSettings: () => (/* binding */ pasteNodeSettings),\n/* harmony export */   scrollToNode: () => (/* binding */ scrollToNode)\n/* harmony export */ });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n\nconst getDeleteConfirmationMessage = type => {\n  const {\n    deleteRowMessage,\n    deleteColumnGroupMessage,\n    deleteColumnMessage,\n    deleteModuleMessage\n  } = window.FLBuilderStrings;\n  switch (type) {\n    case 'row':\n      return deleteRowMessage;\n    case 'column-group':\n      return deleteColumnGroupMessage;\n    case 'column':\n      return deleteColumnMessage;\n    default:\n      return deleteModuleMessage;\n  }\n};\n\n/**\n * Handles deleting any type of node and gets confirmation if needed\n */\nconst deleteNode = id => {\n  const {\n    deleteNode\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getLayoutActions)();\n  if (!id) {\n    return;\n  }\n  let shouldDelete = true;\n  const node = (0,data__WEBPACK_IMPORTED_MODULE_0__.getNode)(id);\n\n  // Handle confirmation if needed\n  if (FLBuilder._needsDeleteConfirmation(node)) {\n    const message = getDeleteConfirmationMessage(node.type);\n    shouldDelete = confirm(message);\n  }\n  if (shouldDelete) {\n    const el = FLBuilder._getJQueryElement(id);\n\n    // Node may not exists on the canvas but still exist in data store\n    if (!el.length && (0,data__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(id)) {\n      deleteNode(id);\n    } else if ('module' === node.type) {\n      FLBuilder._deleteModule(el);\n    } else if ('column' === node.type) {\n      const col = FLBuilder._getColToDelete(el);\n      FLBuilder._deleteCol(col);\n    } else if ('column-group' === node.type) {\n      FLBuilder._deleteColGroup(el);\n    } else if ('row' === node.type) {\n      FLBuilder._deleteRow(el);\n    }\n    FLBuilder._highlightEmptyCols();\n    FLBuilder._resizeLayout();\n    FLBuilder._removeAllOverlays();\n  }\n};\nconst copyNode = id => {\n  if (!id) {\n    return;\n  }\n  const node = (0,data__WEBPACK_IMPORTED_MODULE_0__.getNode)(id);\n  if (!node || 'undefined' === typeof node.type) {\n    return;\n  }\n  if ('module' === node.type) {\n    FLBuilder._copyModule(id);\n  } else if ('column' === node.type) {\n    FLBuilder._copyColumn(id);\n  } else if ('row' === node.type) {\n    FLBuilder._copyRow(id);\n  }\n};\nconst copyNodeSettings = id => {\n  if (!id) {\n    return;\n  }\n  const node = (0,data__WEBPACK_IMPORTED_MODULE_0__.getNode)(id);\n  if (!node || 'undefined' === typeof node.type) {\n    return;\n  }\n  if ('module' === node.type) {\n    FLBuilder._moduleCopySettingsFromOutlinePanel(id);\n  } else if ('column' === node.type) {\n    FLBuilder._colCopySettingsFromOutlinePanel(id);\n  } else if ('row' === node.type) {\n    FLBuilder._rowCopySettingsFromOutlinePanel(id);\n  }\n};\nconst pasteNodeSettings = id => {\n  if (!id) {\n    return;\n  }\n  const node = (0,data__WEBPACK_IMPORTED_MODULE_0__.getNode)(id);\n  if (!node || 'undefined' === typeof node.type) {\n    return;\n  }\n  if ('module' === node.type) {\n    FLBuilder._modulePasteSettingsFromOutlinePanel(id);\n  } else if ('column' === node.type) {\n    FLBuilder._colPasteSettingsFromOutlinePanel(id);\n  } else if ('row' === node.type) {\n    FLBuilder._rowPasteSettingsFromOutlinePanel(id);\n  }\n};\nconst scrollToNode = id => {\n  const el = document.querySelector(`${FLBuilder._contentClass} [data-node=\"${id}\"]`);\n  if (el) {\n    el.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center'\n    });\n  }\n};\n\n/**\n * Generic API for causing node reordering and reparenting.\n * This updates the layout store and triggers canvas updates.\n *\n * @param String id - node id\n * @param Int position\n * @param String | Null parent - parent node id\n * @return void\n */\nconst moveNode = (id, position, parent = null, resize = []) => {\n  const {\n    reorderNode,\n    moveNode,\n    reorderColumn,\n    moveColumn\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getLayoutActions)();\n  const {\n    type,\n    parent: currentParent,\n    position: currentPosition\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getNode)(id);\n  const isColumn = 'column' === type;\n\n  // Reorder or Reparent\n  if (parent === currentParent || null === parent) {\n    if (position === currentPosition) {\n      return;\n    }\n    isColumn ? reorderColumn(id, position) : reorderNode(id, position);\n  } else {\n    // Reparent\n    isColumn ? moveColumn(id, parent, position, resize) : moveNode(id, parent, position);\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/api/nodes.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/api/settings.js":
/*!***********************************************!*\
  !*** ./src/FL/Builder/system/api/settings.js ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   openSettings: () => (/* binding */ openSettings)\n/* harmony export */ });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n\nconst isSettingsPinnedRight = () => {\n  return window.parent.document.body.classList.contains('fl-builder-ui-is-pinned-right');\n};\nconst openSettings = id => {\n  const {\n    displaySettings\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getLayoutActions)();\n  const {\n    hideCurrentPanel\n  } = (0,data__WEBPACK_IMPORTED_MODULE_0__.getSystemActions)();\n  displaySettings(id);\n\n  // Hide outline panel if needed\n  if (isSettingsPinnedRight()) {\n    hideCurrentPanel();\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/api/settings.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/index.js":
/*!*********************************************!*\
  !*** ./src/FL/Builder/system/data/index.js ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getChildren: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getChildren),\n/* harmony export */   getLayoutActions: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getLayoutActions),\n/* harmony export */   getLayoutHooks: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getLayoutHooks),\n/* harmony export */   getLayoutState: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getLayoutState),\n/* harmony export */   getLayoutStore: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getLayoutStore),\n/* harmony export */   getNode: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.getNode),\n/* harmony export */   getOutlinePanelActions: () => (/* reexport safe */ _outlinepanel__WEBPACK_IMPORTED_MODULE_2__.getOutlinePanelActions),\n/* harmony export */   getOutlinePanelSelectors: () => (/* reexport safe */ _outlinepanel__WEBPACK_IMPORTED_MODULE_2__.getOutlinePanelSelectors),\n/* harmony export */   getOutlinePanelState: () => (/* reexport safe */ _outlinepanel__WEBPACK_IMPORTED_MODULE_2__.getOutlinePanelState),\n/* harmony export */   getOutlinePanelStore: () => (/* reexport safe */ _outlinepanel__WEBPACK_IMPORTED_MODULE_2__.getOutlinePanelStore),\n/* harmony export */   getSystemActions: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.getSystemActions),\n/* harmony export */   getSystemConfig: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.getSystemConfig),\n/* harmony export */   getSystemSelectors: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.getSystemSelectors),\n/* harmony export */   getSystemState: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.getSystemState),\n/* harmony export */   getSystemStore: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.getSystemStore),\n/* harmony export */   nodeExists: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.nodeExists),\n/* harmony export */   updateNode: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.updateNode),\n/* harmony export */   useLayoutState: () => (/* reexport safe */ _layout__WEBPACK_IMPORTED_MODULE_1__.useLayoutState),\n/* harmony export */   useOutlinePanelState: () => (/* reexport safe */ _outlinepanel__WEBPACK_IMPORTED_MODULE_2__.useOutlinePanelState),\n/* harmony export */   useSystemState: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_0__.useSystemState)\n/* harmony export */ });\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./system */ \"./src/FL/Builder/system/data/system/index.js\");\n/* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layout */ \"./src/FL/Builder/system/data/layout/index.js\");\n/* harmony import */ var _outlinepanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./outlinepanel */ \"./src/FL/Builder/system/data/outlinepanel/index.js\");\n\n\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/actions.js":
/*!******************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/actions.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addColumnGroup: () => (/* binding */ addColumnGroup),\n/* harmony export */   addColumnTemplate: () => (/* binding */ addColumnTemplate),\n/* harmony export */   addColumns: () => (/* binding */ addColumns),\n/* harmony export */   addModule: () => (/* binding */ addModule),\n/* harmony export */   addNodeTemplate: () => (/* binding */ addNodeTemplate),\n/* harmony export */   addRow: () => (/* binding */ addRow),\n/* harmony export */   addRowTemplate: () => (/* binding */ addRowTemplate),\n/* harmony export */   applyModuleAlias: () => (/* binding */ applyModuleAlias),\n/* harmony export */   applyTemplate: () => (/* binding */ applyTemplate),\n/* harmony export */   cancelDisplaySettings: () => (/* binding */ cancelDisplaySettings),\n/* harmony export */   clearHistoryStates: () => (/* binding */ clearHistoryStates),\n/* harmony export */   copyColumn: () => (/* binding */ copyColumn),\n/* harmony export */   copyModule: () => (/* binding */ copyModule),\n/* harmony export */   copyRow: () => (/* binding */ copyRow),\n/* harmony export */   deleteColumn: () => (/* binding */ deleteColumn),\n/* harmony export */   deleteNode: () => (/* binding */ deleteNode),\n/* harmony export */   deleteNodeTemplate: () => (/* binding */ deleteNodeTemplate),\n/* harmony export */   deleteUserTemplate: () => (/* binding */ deleteUserTemplate),\n/* harmony export */   discardDraft: () => (/* binding */ discardDraft),\n/* harmony export */   displaySettings: () => (/* binding */ displaySettings),\n/* harmony export */   fetchLayout: () => (/* binding */ fetchLayout),\n/* harmony export */   insertFreeformNode: () => (/* binding */ insertFreeformNode),\n/* harmony export */   insertNode: () => (/* binding */ insertNode),\n/* harmony export */   insertNodes: () => (/* binding */ insertNodes),\n/* harmony export */   moveColumn: () => (/* binding */ moveColumn),\n/* harmony export */   moveNode: () => (/* binding */ moveNode),\n/* harmony export */   redo: () => (/* binding */ redo),\n/* harmony export */   refreshNodeSettings: () => (/* binding */ refreshNodeSettings),\n/* harmony export */   removeNode: () => (/* binding */ removeNode),\n/* harmony export */   renderHistoryState: () => (/* binding */ renderHistoryState),\n/* harmony export */   renderLayout: () => (/* binding */ renderLayout),\n/* harmony export */   renderNode: () => (/* binding */ renderNode),\n/* harmony export */   reorderChildren: () => (/* binding */ reorderChildren),\n/* harmony export */   reorderColumn: () => (/* binding */ reorderColumn),\n/* harmony export */   reorderNode: () => (/* binding */ reorderNode),\n/* harmony export */   resetColWidths: () => (/* binding */ resetColWidths),\n/* harmony export */   resetRowWidth: () => (/* binding */ resetRowWidth),\n/* harmony export */   resizeColumn: () => (/* binding */ resizeColumn),\n/* harmony export */   resizeRowContent: () => (/* binding */ resizeRowContent),\n/* harmony export */   resizingComplete: () => (/* binding */ resizingComplete),\n/* harmony export */   saveDraft: () => (/* binding */ saveDraft),\n/* harmony export */   saveGlobalSettings: () => (/* binding */ saveGlobalSettings),\n/* harmony export */   saveGlobalStyles: () => (/* binding */ saveGlobalStyles),\n/* harmony export */   saveHistoryState: () => (/* binding */ saveHistoryState),\n/* harmony export */   saveLayout: () => (/* binding */ saveLayout),\n/* harmony export */   saveLayoutSettings: () => (/* binding */ saveLayoutSettings),\n/* harmony export */   saveNodeTemplate: () => (/* binding */ saveNodeTemplate),\n/* harmony export */   saveUserTemplateSettings: () => (/* binding */ saveUserTemplateSettings),\n/* harmony export */   setLayout: () => (/* binding */ setLayout),\n/* harmony export */   undo: () => (/* binding */ undo),\n/* harmony export */   unlinkGlobalNode: () => (/* binding */ unlinkGlobalNode),\n/* harmony export */   updateNode: () => (/* binding */ updateNode),\n/* harmony export */   updateNodeSetting: () => (/* binding */ updateNodeSetting),\n/* harmony export */   updateNodeSettings: () => (/* binding */ updateNodeSettings)\n/* harmony export */ });\nconst undo = () => ({\n  type: 'UNDO'\n});\nconst redo = () => ({\n  type: 'REDO'\n});\n\n/**\n* Generic Nodes\n*/\nconst insertNode = (id, parent = null, nodeType, position = 0, settings = {}, global = false, ...rest) => ({\n  type: 'INSERT_NODE',\n  id,\n  parent,\n  position,\n  nodeType,\n  settings,\n  global,\n  ...rest\n});\nconst insertFreeformNode = (id, node = {}) => ({\n  type: 'INSERT_FREEFORM_NODE',\n  id,\n  node\n});\nconst insertNodes = (nodes = {}) => ({\n  type: 'INSERT_NODES',\n  nodes\n});\nconst reorderNode = (id, position) => ({\n  type: 'REORDER_NODE',\n  id,\n  position\n});\nconst reorderChildren = (parentId, childIds = []) => ({\n  type: 'REORDER_CHILDREN',\n  parentId,\n  childIds\n});\nconst moveNode = (id, parent, position) => ({\n  type: 'REPARENT_NODE',\n  id,\n  parent,\n  position\n});\nconst renderNode = (id, callback = () => {}) => ({\n  type: 'RENDER_NODE',\n  id,\n  callback\n});\nconst updateNode = (id, node = {}) => ({\n  type: 'UPDATE_NODE',\n  id,\n  node\n});\nconst updateNodeSettings = (id, settings = {}, callback = () => {}) => ({\n  type: 'UPDATE_NODE_SETTINGS',\n  id,\n  settings,\n  callback\n});\nconst updateNodeSetting = (id, key, value) => ({\n  type: 'UPDATE_NODE_SETTING',\n  id,\n  key,\n  value\n});\nconst refreshNodeSettings = (id, settings = {}) => ({\n  type: 'REFRESH_NODE_SETTINGS',\n  id,\n  settings\n});\nconst deleteNode = id => ({\n  type: 'DELETE_NODE',\n  id\n});\nconst removeNode = id => ({\n  type: 'REMOVE_NODE',\n  id\n});\nconst unlinkGlobalNode = (id, callback) => ({\n  type: 'UNLINK_GLOBAL_NODE',\n  id,\n  callback\n});\n\n/**\n* Modules\n*/\nconst addModule = (moduleType, parent, position, config = {}) => ({\n  type: 'ADD_MODULE',\n  moduleType,\n  parent,\n  position,\n  config\n});\nconst copyModule = (id, settings = {}, callback = () => {}) => ({\n  type: 'COPY_MODULE',\n  id,\n  settings,\n  callback\n});\nconst applyModuleAlias = (id, alias, settings, callback = () => {}) => ({\n  type: 'APPLY_MODULE_ALIAS',\n  id,\n  alias,\n  settings,\n  callback\n});\n\n/**\n* Columns\n*/\nconst addColumns = (id, insert, colType = '1-col', nested, module) => ({\n  type: 'ADD_COLUMNS',\n  id,\n  insert,\n  colType,\n  nested,\n  module\n});\nconst reorderColumn = (id, position) => ({\n  type: 'REORDER_COLUMN',\n  id,\n  position\n});\nconst moveColumn = (id, parent, position, resize = []) => ({\n  type: 'REPARENT_COLUMN',\n  id,\n  parent,\n  position,\n  resize\n});\nconst copyColumn = (id, settings, settingsId, callback = () => {}) => ({\n  type: 'COPY_COLUMN',\n  id,\n  settings,\n  settingsId,\n  callback\n});\nconst resizeColumn = (id, width, siblingId, siblingWidth, shouldPersist = true) => ({\n  type: 'RESIZE_COLUMN',\n  id,\n  width: parseFloat(width),\n  siblingId,\n  siblingWidth: parseFloat(siblingWidth),\n  shouldPersist\n});\nconst deleteColumn = (id, width) => ({\n  type: 'DELETE_COLUMN',\n  id,\n  width\n});\nconst resetColWidths = (groupIds = []) => ({\n  type: 'RESET_COLUMN_WIDTHS',\n  groupIds\n});\n\n/**\n* Column Groups\n*/\nconst addColumnGroup = (id, cols, position, module) => ({\n  type: 'ADD_COLUMN_GROUP',\n  id,\n  cols,\n  position,\n  module\n});\n\n/**\n* Rows\n*/\nconst addRow = (cols = 1, position, module) => ({\n  type: 'ADD_ROW',\n  cols,\n  position,\n  module\n});\nconst copyRow = (id, settings = {}, settingsId, callback = () => {}) => ({\n  type: 'COPY_ROW',\n  id,\n  settings,\n  settingsId,\n  callback\n});\nconst resizeRowContent = (id, width, shouldPersist = true) => ({\n  type: 'RESIZE_ROW_CONTENT',\n  id,\n  width,\n  shouldPersist\n});\nconst resetRowWidth = id => ({\n  type: 'RESET_ROW_WIDTH',\n  id\n});\n\n/**\n* Templates\n*/\nconst applyTemplate = (id, append = '0', templateType = 'core') => ({\n  type: 'APPLY_TEMPLATE',\n  id,\n  append,\n  templateType\n});\nconst addNodeTemplate = (nodeType, templateId, templateType, parent, position, callback = () => {}) => ({\n  type: 'ADD_NODE_TEMPLATE',\n  nodeType,\n  templateId,\n  templateType,\n  parent,\n  position,\n  callback\n});\nconst saveNodeTemplate = (id, settings = {}) => ({\n  type: 'SAVE_NODE_TEMPLATE',\n  id,\n  settings\n});\nconst deleteNodeTemplate = (id, global = false) => ({\n  type: 'DELETE_NODE_TEMPLATE',\n  id,\n  global\n});\nconst saveUserTemplateSettings = (settings = {}) => ({\n  type: 'SAVE_USER_TEMPLATE_SETTINGS',\n  settings\n});\nconst deleteUserTemplate = id => ({\n  type: 'DELETE_USER_TEMPLATE',\n  id\n});\nconst addColumnTemplate = () => ({\n  type: 'ADD_COLUMN_TEMPLATE'\n});\nconst addRowTemplate = () => ({\n  type: 'ADD_ROW_TEMPLATE'\n});\n\n/**\n* Full Layout\n*/\nconst fetchLayout = () => ({\n  type: 'FETCH_LAYOUT'\n});\nconst setLayout = (nodes = {}, attachments) => ({\n  type: 'SET_LAYOUT',\n  nodes,\n  attachments\n});\nconst renderLayout = () => ({\n  type: 'RENDER_LAYOUT'\n});\nconst saveLayoutSettings = (settings = {}) => ({\n  type: 'SAVE_LAYOUT_SETTINGS',\n  settings\n});\nconst saveGlobalSettings = (settings = {}) => ({\n  type: 'SAVE_GLOBAL_SETTINGS',\n  settings\n});\nconst saveGlobalStyles = (settings = {}) => ({\n  type: 'SAVE_GLOBAL_STYLES',\n  settings\n});\n\n/**\n * Publish/Save Actions\n */\nconst saveLayout = (shouldPublish = false, shouldExit = false, callback = () => {}) => ({\n  type: 'SAVE_LAYOUT',\n  shouldPublish,\n  shouldExit,\n  callback\n});\nconst saveDraft = () => ({\n  type: 'SAVE_DRAFT'\n});\nconst discardDraft = () => ({\n  type: 'DISCARD_DRAFT'\n});\n\n/**\n* History States\n*/\nconst saveHistoryState = (label, moduleType) => ({\n  type: 'SAVE_HISTORY_STATE',\n  label,\n  moduleType\n});\nconst clearHistoryStates = (postId, shouldExit = false) => ({\n  type: 'CLEAR_HISTORY_STATES',\n  postId,\n  shouldExit\n});\nconst renderHistoryState = (position, callback = () => {}) => ({\n  type: 'RENDER_HISTORY_STATE',\n  position,\n  callback\n});\n\n/**\n* Settings Panels\n*/\nconst displaySettings = id => ({\n  type: 'DISPLAY_SETTINGS',\n  id\n});\nconst cancelDisplaySettings = () => ({\n  type: 'CANCEL_DISPLAY_SETTINGS'\n});\n\n/**\n * Misc\n */\nconst resizingComplete = () => ({\n  type: 'RESIZING_COMPLETE'\n});\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/actions.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/effects.js":
/*!******************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/effects.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   after: () => (/* binding */ after),\n/* harmony export */   before: () => (/* binding */ before)\n/* harmony export */ });\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions */ \"./src/FL/Builder/system/data/layout/actions.js\");\n\n\n/**\n * Shorthand function for handling server responses with newNodes and/or updatedNodes\n */\nconst mergeNewAndUpdatedNodes = (response, store) => {\n  const {\n    newNodes = {},\n    updatedNodes = {},\n    deletedNodes = []\n  } = FLBuilder._jsonParse(response);\n\n  // Insert all affected nodes\n  if (0 < Object.keys(newNodes).length) {\n    store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.insertNodes(newNodes));\n  }\n\n  // Update positions on sibling nodes\n  Object.entries(updatedNodes).map(([id, node]) => {\n    store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.updateNode(id, node));\n  });\n\n  // Remove any nodes deleted from the server\n  if (0 < deletedNodes.length) {\n    deletedNodes.forEach(id => {\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.removeNode(id));\n    });\n  }\n};\nconst before = {};\nconst after = {\n  UNDO() {\n    window.FLBuilderHistoryManager.renderState('prev');\n  },\n  REDO() {\n    window.FLBuilderHistoryManager.renderState('next');\n  },\n  /**\n  * Generic Nodes\n  */\n  UPDATE_NODE_SETTINGS({\n    id: node_id,\n    settings,\n    callback\n  }) {\n    FLBuilder.ajax({\n      action: 'save_settings',\n      node_id,\n      settings\n    }, callback);\n  },\n  REORDER_NODE({\n    id: node_id,\n    position\n  }, store) {\n    // Move it on the canvas if it hasn't already\n    const {\n      moveNodeInDOM\n    } = FL.Builder.getActions();\n    moveNodeInDOM(node_id, position);\n    FLBuilder.ajax({\n      action: 'reorder_node',\n      node_id,\n      position\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._reorderNodeComplete(response);\n    });\n  },\n  REPARENT_NODE({\n    id,\n    parent,\n    position\n  }, store) {\n    // Move it on the canvas if it hasn't already\n    const {\n      moveNodeInDOM\n    } = FL.Builder.getActions();\n    moveNodeInDOM(id, position, parent);\n    FLBuilder.ajax({\n      action: 'move_node',\n      new_parent: parent,\n      node_id: id,\n      position\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._moveNodeComplete(response);\n    });\n  },\n  RENDER_NODE({\n    id,\n    callback\n  }) {\n    FLBuilder.ajax({\n      action: 'render_node',\n      node_id: id\n    }, response => {\n      const data = FLBuilder._jsonParse(response);\n      FLBuilder._renderLayout(data, callback);\n    });\n  },\n  DELETE_NODE({\n    id\n  }) {\n    FLBuilder.ajax({\n      action: 'delete_node',\n      node_id: id\n    });\n  },\n  UNLINK_GLOBAL_NODE({\n    id,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'unlink_global_node',\n      node_id: id\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  REORDER_CHILDREN({\n    childIds\n  }) {\n    // Move it on the canvas if it hasn't already\n    const {\n      moveNodeInDOM\n    } = FL.Builder.getActions();\n    childIds.map((id, i) => {\n      moveNodeInDOM(id, i);\n    });\n  },\n  /**\n  * Modules\n  */\n  ADD_MODULE({\n    moduleType,\n    parent,\n    position,\n    config\n  }, store) {\n    FLBuilder.ajax({\n      action: 'render_new_module',\n      parent_id: parent,\n      type: moduleType,\n      position,\n      node_preview: config.nodePreview,\n      widget: config.widget,\n      alias: config.alias\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._addModuleComplete(response);\n    });\n  },\n  COPY_MODULE({\n    id,\n    settings,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'copy_module',\n      node_id: id,\n      settings\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  APPLY_MODULE_ALIAS({\n    id,\n    alias,\n    settings,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'apply_module_alias',\n      node_id: id,\n      alias,\n      settings\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  /**\n  * Columns\n  */\n  ADD_COLUMNS({\n    id,\n    insert,\n    colType,\n    nested,\n    module\n  }, store) {\n    FLBuilder.ajax({\n      action: 'render_new_columns',\n      node_id: id,\n      insert,\n      type: colType,\n      nested,\n      module\n    }, response => {\n      // newNodes here actually includes siblings with position updates\n      // see server-side handler for the reason\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._addColsComplete(response);\n    });\n  },\n  RESIZE_COLUMN({\n    id,\n    width,\n    siblingId,\n    siblingWidth,\n    shouldPersist\n  }, store) {\n    if (shouldPersist) {\n      // Clear the resizing ids\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.resizingComplete());\n      FLBuilder.ajax({\n        action: 'resize_cols',\n        col_id: id,\n        col_width: width,\n        sibling_id: siblingId,\n        sibling_width: siblingWidth\n      }, response => mergeNewAndUpdatedNodes(response, store));\n    }\n  },\n  RESET_COLUMN_WIDTHS({\n    groupIds: group_id\n  }) {\n    FLBuilder.ajax({\n      action: 'reset_col_widths',\n      group_id\n    }, () => FLBuilder.triggerHook('didResetColumnWidthsComplete'));\n  },\n  DELETE_COLUMN({\n    id,\n    width\n  }) {\n    FLBuilder.ajax({\n      action: 'delete_col',\n      node_id: id,\n      new_width: width\n    });\n  },\n  REORDER_COLUMN({\n    id,\n    position\n  }) {\n    // Move it on the canvas if it hasn't already\n    const {\n      moveNodeInDOM\n    } = FL.Builder.getActions();\n    moveNodeInDOM(id, position);\n    FLBuilder.ajax({\n      action: 'reorder_col',\n      node_id: id,\n      position\n    }, () => FLBuilder.triggerHook('didMoveColumn'));\n  },\n  REPARENT_COLUMN({\n    id,\n    parent,\n    position,\n    resize\n  }) {\n    // Move it on the canvas if it hasn't already\n    const {\n      moveNodeInDOM\n    } = FL.Builder.getActions();\n    moveNodeInDOM(id, position, parent);\n    FLBuilder.ajax({\n      action: 'move_col',\n      node_id: id,\n      new_parent: parent,\n      position,\n      resize\n    }, () => FLBuilder.triggerHook('didMoveColumn'));\n  },\n  COPY_COLUMN({\n    id,\n    settings,\n    settingsId,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'copy_col',\n      node_id: id,\n      settings,\n      settings_id: settingsId\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  /**\n  * Column Groups\n  */\n  ADD_COLUMN_GROUP({\n    id,\n    cols,\n    position,\n    module\n  }, store) {\n    FLBuilder.ajax({\n      action: 'render_new_column_group',\n      node_id: id,\n      cols,\n      position,\n      module\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._addColGroupComplete(response);\n    });\n  },\n  /**\n  * Rows\n  */\n  ADD_ROW({\n    cols,\n    position,\n    module\n  }, store) {\n    FLBuilder.ajax({\n      action: 'render_new_row',\n      cols,\n      position,\n      module\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      FLBuilder._addRowComplete(response);\n    });\n  },\n  COPY_ROW({\n    id,\n    settings,\n    settingsId,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'copy_row',\n      node_id: id,\n      settings,\n      settings_id: settingsId\n    }, response => {\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  RESIZE_ROW_CONTENT({\n    id: node,\n    width,\n    shouldPersist\n  }, store) {\n    if (shouldPersist) {\n      FLBuilder.ajax({\n        action: 'resize_row_content',\n        node,\n        width\n      });\n\n      // Clear the resizing ids\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.resizingComplete());\n    }\n  },\n  RESET_ROW_WIDTH({\n    id\n  }) {\n    FLBuilder.ajax({\n      action: 'resize_row_content',\n      node: id,\n      width: ''\n    });\n  },\n  /**\n  * Templates\n  */\n  APPLY_TEMPLATE({\n    id: template_id,\n    append,\n    templateType\n  }, store) {\n    const callback = 'core' === templateType ? FLBuilder._applyTemplateComplete : FLBuilder._applyUserTemplateComplete;\n    FLBuilder.ajax({\n      action: 'core' === templateType ? 'apply_template' : 'apply_user_template',\n      template_id,\n      append\n    }, response => {\n      const data = FLBuilder._jsonParse(response);\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.setLayout(data.newNodes, []));\n      callback(response);\n    });\n  },\n  ADD_NODE_TEMPLATE({\n    nodeType,\n    templateId,\n    templateType,\n    parent,\n    position,\n    callback\n  }, store) {\n    let action = '';\n    switch (nodeType) {\n      case 'row':\n        action = 'render_new_row_template';\n        break;\n      case 'column':\n        action = 'render_new_col_template';\n        break;\n      default:\n        action = 'render_new_module';\n    }\n    FLBuilder.ajax({\n      action,\n      template_id: templateId,\n      template_type: templateType,\n      parent_id: parent,\n      position\n    }, response => {\n      if (action === 'render_new_module') {\n        response.newNodes[response.nodeId].template_title = response.template_title;\n        response.newNodes[response.nodeId].template_url = response.template_url;\n      }\n      mergeNewAndUpdatedNodes(response, store);\n      callback(response);\n    });\n  },\n  SAVE_NODE_TEMPLATE({\n    id,\n    settings\n  }, store) {\n    FLBuilder.ajax({\n      action: 'save_node_template',\n      node_id: id,\n      settings\n    }, response => {\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.fetchLayout());\n      FLBuilder._saveNodeTemplateComplete(response);\n      FLBuilder._hideNodeLoading(id);\n    });\n  },\n  DELETE_NODE_TEMPLATE({\n    id,\n    global\n  }) {\n    FLBuilder.ajax({\n      action: 'delete_node_template',\n      template_id: id\n    }, () => {\n      if (global) {\n        FLBuilder._updateLayout();\n      }\n    });\n  },\n  SAVE_USER_TEMPLATE_SETTINGS({\n    settings\n  }) {\n    FLBuilder.ajax({\n      action: 'save_user_template',\n      settings\n    }, FLBuilder._saveUserTemplateSettingsComplete);\n  },\n  DELETE_USER_TEMPLATE({\n    id\n  }) {\n    FLBuilder.ajax({\n      action: 'delete_user_template',\n      template_id: id\n    });\n  },\n  RENDER_LAYOUT() {\n    FLBuilder.ajax({\n      action: 'render_layout'\n    }, FLBuilder._renderLayout);\n  },\n  FETCH_LAYOUT(action, store) {\n    FLBuilder.ajax({\n      action: 'get_layout'\n    }, response => {\n      const {\n        nodes,\n        attachments\n      } = FLBuilder._jsonParse(response);\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.setLayout(nodes, attachments));\n    });\n  },\n  SAVE_LAYOUT({\n    shouldPublish,\n    shouldExit,\n    callback\n  }) {\n    FLBuilder.ajax({\n      action: 'save_layout',\n      publish: shouldPublish,\n      exit: shouldExit ? 1 : 0\n    }, callback);\n  },\n  SAVE_DRAFT() {\n    FLBuilder.ajax({\n      action: 'save_draft'\n    }, FLBuilder._exit);\n  },\n  DISCARD_DRAFT() {\n    FLBuilder.ajax({\n      action: 'clear_draft_layout'\n    }, () => {\n      FLBuilder.triggerHook('didDiscardChanges');\n      FLBuilder._exit();\n    });\n  },\n  SAVE_LAYOUT_SETTINGS({\n    settings\n  }) {\n    FLBuilder.ajax({\n      action: 'save_layout_settings',\n      settings\n    }, () => FLBuilder._saveLayoutSettingsComplete(settings));\n  },\n  SAVE_GLOBAL_SETTINGS({\n    settings\n  }) {\n    FLBuilder.ajax({\n      action: 'save_global_settings',\n      settings\n    }, FLBuilder._saveGlobalSettingsComplete);\n  },\n  SAVE_GLOBAL_STYLES({\n    settings\n  }) {\n    FLBuilder.ajax({\n      action: 'save_global_styles',\n      settings\n    }, FLBuilderGlobalStyles._onSaveComplete);\n  },\n  /**\n  * History States\n  */\n  SAVE_HISTORY_STATE({\n    label,\n    moduleType\n  }) {\n    if (!FLBuilderConfig.history.enabled) {\n      return false;\n    }\n    FLBuilder.ajax({\n      action: 'save_history_state',\n      label,\n      module_type: moduleType\n    }, function (response) {\n      const data = FLBuilder._jsonParse(response);\n      FLBuilderHistoryManager.states = data.states;\n      FLBuilderHistoryManager.position = parseInt(data.position);\n      FLBuilderHistoryManager.setupMainMenuData();\n    });\n  },\n  CLEAR_HISTORY_STATES({\n    postId,\n    shouldExit\n  }) {\n    if (!shouldExit) {\n      FLBuilder.ajax({\n        action: 'clear_history_states',\n        post_id: postId\n      }, () => {\n        FLBuilderHistoryManager.saveCurrentState('draft_created');\n      });\n    }\n  },\n  RENDER_HISTORY_STATE({\n    position,\n    callback\n  }, store) {\n    FLBuilder.ajax({\n      action: 'render_history_state',\n      position\n    }, response => {\n      const {\n        newNodes,\n        config\n      } = FLBuilder._jsonParse(response);\n      store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_0__.setLayout(newNodes, config.attachments));\n      callback(response);\n    });\n  },\n  /**\n  * Settings Panels\n  */\n  DISPLAY_SETTINGS({\n    id\n  }, store) {\n    const {\n      nodes\n    } = store.getState().layout.present;\n    if ('global' === id) {\n      FLBuilder._globalSettingsClicked();\n      return;\n    } else if ('layout' === id) {\n      FLBuilder._layoutSettingsClicked();\n      return;\n    }\n    if (undefined !== nodes[id]) {\n      const {\n        type,\n        settings,\n        parent,\n        global,\n        template_id,\n        ...nodeData\n      } = nodes[id];\n      switch (type) {\n        case 'column-group':\n          break;\n        case 'row':\n          FLBuilder._showRowSettings(id, global);\n          break;\n        case 'column':\n          const isNodeTemplate = 'column' !== FLBuilderConfig.userTemplateType && undefined !== template_id;\n          FLBuilder._showColSettings(id, global, isNodeTemplate);\n          break;\n        default:\n          const module = jQuery(`.fl-node-${id}`);\n          const isModuleTemplateEditing = !!module.closest('.fl-builder-content-editing').is('.fl-builder-module-template');\n          const targetNode = {\n            nodeId: id,\n            parentNodeId: parent,\n            nodeType: type,\n            moduleType: nodeData.moduleType ?? module.data('type'),\n            templateUrl: nodeData.template_url,\n            global: global,\n            dynamicEditing: nodeData.dynamic\n          };\n          if (FLBuilderConfig.postType === 'fl-builder-template') {\n            if (isModuleTemplateEditing) {\n              FLBuilder._showModuleSettings({\n                nodeId: id,\n                parentId: parent,\n                type: settings.type,\n                global: global,\n                dynamic: nodeData.dynamic\n              });\n            } else {\n              const templateNode = module.closest('[data-template-url]');\n              FLBuilder._showModuleSettingsOfTemplateNode(templateNode, module);\n            }\n          } else if (!targetNode.global && !targetNode.dynamicEditing) {\n            FLBuilder._showModuleSettings({\n              nodeId: id,\n              parentId: parent,\n              type: settings.type\n            });\n          } else {\n            const globalData = {\n              nodeId: id,\n              parentId: parent,\n              global: targetNode.global,\n              dynamicFields: targetNode.dynamicEditing,\n              nodeType: type,\n              type: targetNode.moduleType\n            };\n            FLBuilderDynamicGlobal.handleGlobalNodeDisplay(globalData);\n          }\n      }\n    }\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/effects.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/index.js":
/*!****************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/index.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getChildren: () => (/* binding */ getChildren),\n/* harmony export */   getLayoutActions: () => (/* binding */ getLayoutActions),\n/* harmony export */   getLayoutHooks: () => (/* binding */ getLayoutHooks),\n/* harmony export */   getLayoutState: () => (/* binding */ getLayoutState),\n/* harmony export */   getLayoutStore: () => (/* binding */ getLayoutStore),\n/* harmony export */   getNode: () => (/* binding */ getNode),\n/* harmony export */   nodeExists: () => (/* binding */ nodeExists),\n/* harmony export */   updateNode: () => (/* binding */ updateNode),\n/* harmony export */   useLayoutState: () => (/* binding */ useLayoutState)\n/* harmony export */ });\n/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./store */ \"./src/FL/Builder/system/data/layout/store/index.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducers */ \"./src/FL/Builder/system/data/layout/reducers.js\");\n/* harmony import */ var _effects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./effects */ \"./src/FL/Builder/system/data/layout/effects.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/FL/Builder/system/data/layout/actions.js\");\n/* harmony import */ var _tests__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tests */ \"./src/FL/Builder/system/data/layout/tests.js\");\n\n\n\n\n\nconst {\n  global\n} = FLBuilderConfig;\nconst state = {\n  layout: {\n    present: {\n      nodes: {},\n      globalSettings: global\n    }\n  }\n};\nconst {\n  store,\n  actions: actionCreators,\n  hooks\n} = (0,_store__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n  state,\n  reducers: _reducers__WEBPACK_IMPORTED_MODULE_1__,\n  effects: _effects__WEBPACK_IMPORTED_MODULE_2__,\n  actions: _actions__WEBPACK_IMPORTED_MODULE_3__,\n  tests: _tests__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n});\nconst getLayoutStore = () => store;\nconst getLayoutState = () => store.getState();\nconst getLayoutActions = () => actionCreators;\nconst getLayoutHooks = () => hooks;\nconst useLayoutState = hooks.useLayoutStore;\nconst getNode = id => {\n  const {\n    nodes\n  } = getLayoutState().layout.present;\n  if (id && id in nodes) {\n    return nodes[id];\n  }\n  return nodes;\n};\nconst updateNode = (id, node) => {\n  store.dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.updateNode(id, node));\n};\nconst getChildren = id => {\n  const {\n    nodes\n  } = getLayoutState().layout.present;\n  return Object.values(nodes).filter(node => id === node.parent);\n};\nconst nodeExists = id => {\n  const {\n    nodes\n  } = getLayoutState().layout.present;\n  return 'undefined' !== nodes[id];\n};\n\n// Initialize the data\nstore.dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.fetchLayout());\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/reducers.js":
/*!*******************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/reducers.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   editing: () => (/* binding */ editing),\n/* harmony export */   layout: () => (/* binding */ layout),\n/* harmony export */   resizing: () => (/* binding */ resizing)\n/* harmony export */ });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"redux\");\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _undoable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./undoable */ \"./src/FL/Builder/system/data/layout/undoable.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/FL/Builder/system/data/layout/utils/index.js\");\n\n\n\nconst nodes = (state = {}, action) => {\n  switch (action.type) {\n    case 'INSERT_NODE':\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.insertNewNodeAndResolvePositions)(state, action.id, {\n          node: action.id,\n          parent: action.parent,\n          type: action.nodeType,\n          position: action.position,\n          settings: action.settings,\n          global: action.global\n        })\n      };\n    case 'INSERT_FREEFORM_NODE':\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.insertNewNodeAndResolvePositions)(state, action.id, action.node)\n      };\n    case 'INSERT_NODES':\n      return {\n        ...state,\n        ...action.nodes\n      };\n    case 'REORDER_NODE':\n    case 'REORDER_COLUMN':\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.insertExistingNodeAndResolvePositions)(action.id, state[action.id].parent, action.position, state)\n      };\n    case 'REPARENT_NODE':\n    case 'REPARENT_COLUMN':\n      const parent = !action.parent ? null : action.parent;\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.insertExistingNodeAndResolvePositions)(action.id, parent, action.position, state)\n      };\n    case 'UPDATE_NODE':\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], action.node)\n      };\n    case 'UPDATE_NODE_SETTING':\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...state[action.id].settings,\n            [action.key]: action.value\n          }\n        })\n      };\n    case 'UPDATE_NODE_SETTINGS':\n      if (undefined === state[action.id]) {\n        return state;\n      }\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...state[action.id].settings,\n            ...action.settings,\n            type: 'module' === state[action.id].type ? state[action.id].settings.type : undefined\n          }\n        })\n      };\n    case 'REFRESH_NODE_SETTINGS':\n      if (undefined === state[action.id]) {\n        return state;\n      }\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...action.settings,\n            type: 'module' === state[action.id].type ? state[action.id].settings.type : undefined\n          }\n        })\n      };\n    case 'DELETE_NODE':\n    case 'REMOVE_NODE':\n      return (0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteNodeAndResolvePositions)(action.id, state);\n    case 'REORDER_CHILDREN':\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.reorderChildren)(action.parentId, action.childIds, state)\n      };\n\n    /**\n     * Modules\n     *\n     * ADD_MODULE has no reducer implementation. Causes Ajax -> INSERT_NODE.\n     * COPY_MODULE has no reducer implementation. Causes Ajax -> INSERT_NODE.\n     * For delete see DELETE_NODE\n     */\n\n    /**\n     * Columns\n     *\n     * ADD_COLUMNS has no reducer implementation. Causes Ajax.\n     * COPY_COLUMN has no reducer implementation. Causes Ajax.\n     * REORDER_COLUMN shares implementation with REORDER_NODE - see above.\n     * REPARENT_COLUMN shares implementation with REPARENT_NODE - see above.\n     */\n    case 'RESIZE_COLUMN':\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...state[action.id].settings,\n            size: action.width\n          }\n        }),\n        [action.siblingId]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.siblingId], {\n          settings: {\n            ...state[action.siblingId].settings,\n            size: action.siblingWidth\n          }\n        })\n      };\n    case 'DELETE_COLUMN':\n      return (0,_utils__WEBPACK_IMPORTED_MODULE_2__.deleteNodeAndResolvePositions)(action.id, state);\n    case 'RESET_COLUMN_WIDTHS':\n      return {\n        ...state,\n        ...(0,_utils__WEBPACK_IMPORTED_MODULE_2__.resetColumnWidths)(action.groupIds, state)\n      };\n\n    /**\n     * Column Groups\n     *\n     * ADD_COLUMN_GROUP has no implementation. Causes Ajax.\n     */\n\n    /**\n     * Rows\n     *\n     * ADD_ROW has no implementation. Causes Ajax.\n     * COPY_ROW has no implementation. Causes Ajax.\n     */\n    case 'RESIZE_ROW_CONTENT':\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...state[action.id].settings,\n            'max_content_width': action.width\n          }\n        })\n      };\n    case 'RESET_ROW_WIDTH':\n      return {\n        ...state,\n        [action.id]: (0,_utils__WEBPACK_IMPORTED_MODULE_2__.mergeNode)(state[action.id], {\n          settings: {\n            ...state[action.id].settings,\n            'max_content_width': ''\n          }\n        })\n      };\n\n    /**\n     * Templates\n     *\n     * APPLY_TEMPLATE has no reducer implementation. Causes Ajax.\n     * SAVE_NODE_TEMPLATE has no reducer implementation. Causes Ajax.\n     * DELETE_NODE_TEMPLATE has no reducer implementation. Causes Ajax.\n     * SAVE_USER_TEMPLATE_SETTINGS has no reducer implementation. Causes Ajax.\n     * DELETE_USER_TEMPLATE has no reducer implementation. Causes Ajax.\n     */\n    case 'ADD_COLUMN_TEMPLATE':\n    case 'ADD_ROW_TEMPLATE':\n      console.log(action.type, 'Needs node reducer implementation?');\n      return state;\n\n    /**\n     * Layout\n     *\n     * RENDER_LAYOUT has no reducer implementation. Causes Ajax.\n     * FETCH_LAYOUT has no reducer implementation. Causes Ajax.\n     */\n    case 'SET_LAYOUT':\n      return action.nodes;\n\n    /**\n     * Publish/Save Actions\n     *\n     * SAVE_LAYOUT, SAVE_DRAFT and DISCARD DRAFT trigger ajax effects.\n     */\n\n    /**\n     * History State\n     *\n     * SAVE_HISTORY_STATE has no reducer implementation. Causes Ajax.\n     * CLEAR_HISTORY_STATES has no reducer implementation. Causes Ajax.\n     * RENDER_HISTORY_STATE has no reducer implementation. Causes Ajax.\n     */\n\n    /**\n     * Default Pass-through\n     */\n    default:\n      return state;\n  }\n};\n\n/**\n * Tracks an array of document attachment urls.\n *\n * @var state Array\n * @var action Object\n * @return Array\n */\nconst attachments = (state = [], action) => {\n  switch (action.type) {\n    case 'SET_LAYOUT':\n      if (undefined !== action.attachments) {\n        return action.attachments;\n      }\n      return state;\n    default:\n      return state;\n  }\n};\n\n/**\n * Tracks the settings object for global settings\n *\n * @var state Object\n * @var action Object\n * @return Object\n */\nconst globalSettings = (state = {}, action) => {\n  switch (action.type) {\n    case 'SAVE_GLOBAL_SETTINGS':\n      return action.settings;\n    default:\n      return state;\n  }\n};\n\n/**\n * Layout reducer joins attachments, nodes, globalSettings into a single object reducer\n * It's wrapped in the Higher-Order Reducer undoable for undo/redo support\n */\nconst layout = (0,_undoable__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((0,redux__WEBPACK_IMPORTED_MODULE_0__.combineReducers)({\n  attachments,\n  nodes,\n  globalSettings\n}));\n\n/**\n * Tracks the id (or name - global, layout) of the settings form being edited currently.\n * returns null when inactive\n *\n * @var state null|string\n * @var action Object\n * @return null|string\n */\nconst editing = (state = null, action) => {\n  switch (action.type) {\n    case 'DISPLAY_SETTINGS':\n      return action.id;\n    case 'UPDATE_NODE_SETTINGS':\n    case 'CANCEL_DISPLAY_SETTINGS':\n      return null;\n    default:\n      return state;\n  }\n};\n\n/**\n * Manages an array of any node ids (col or row) that are currently undergoing resize. \\\n * Returns false when not active.\n *\n * @var state BOOL|Array\n * @var action Object\n * @return BOOL|Array\n */\nconst resizing = (state = false, action) => {\n  switch (action.type) {\n    case 'RESIZING_COMPLETE':\n      return false;\n    case 'RESIZE_ROW_CONTENT':\n      return [action.id];\n    case 'RESIZE_COLUMN':\n      return [action.id, action.siblingId];\n    default:\n      return state;\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/reducers.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/store/hooks.js":
/*!**********************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/store/hooks.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst stripNodeSettings = nodes => {\n  const updated = {};\n  Object.values(nodes).map(node => {\n    const newNode = {\n      ...node\n    };\n    delete newNode.settings;\n    updated[node.node] = newNode;\n  });\n  return updated;\n};\nconst getChildNodes = (nodes = {}, parent = null) => {\n  const found = {};\n  const children = Object.values(nodes).filter(node => parent === node.parent);\n  children.map(node => found[node.node] = node);\n  return found;\n};\nconst getNodeSettings = (state = {}, id) => {\n  const {\n    nodes\n  } = state.layout.present;\n  if (undefined === nodes[id] || !nodes[id].settings) {\n    return {};\n  }\n  return nodes[id].settings;\n};\nconst someNodesHaveChanged = (newState, oldState) => {\n  // have the total number of nodes changed?\n  if (Object.keys(newState).length !== Object.keys(oldState).length) {\n    return true;\n  }\n\n  // have any properties changed - excluding settings\n  return Object.values(newState).some(node => {\n    const old = oldState[node.node];\n    if (undefined === node || undefined === old) {\n      return true;\n    }\n    return node.type !== old.type || node.parent !== old.parent || node.position !== old.position || node.global !== old.global;\n  });\n};\nconst someSettingsHaveChanged = (a, b) => {\n  if (Object.keys(a).length !== Object.keys(b).length) {\n    return true;\n  }\n  return Object.keys(a).some(key => {\n    return a[key] !== b[key];\n  });\n};\nconst createStoreHooks = store => {\n  /**\n   * Generic hook for observing the entire redux store.\n   * This is usually one to avoid as it exposes all of the undo/redo history.\n   */\n  const useLayoutStore = (needsRender = () => true) => {\n    const initial = store.getState();\n    const prevState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(initial);\n    const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial);\n    (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n      setState(store.getState());\n      return store.subscribe(() => {\n        const newState = store.getState();\n        if (needsRender(prevState.current, newState)) {\n          setState({\n            ...newState\n          });\n        }\n        prevState.current = newState;\n      });\n    }, []);\n    return state;\n  };\n  const useNodeSettings = id => {\n    const initial = getNodeSettings(store.getState(), id);\n    const prevState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(initial);\n    const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial);\n    (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n      // On mount, check if anything has changed since initial\n      const newState = getNodeSettings(store.getState(), id);\n      if (someSettingsHaveChanged(newState, prevState.current)) {\n        setState(newState);\n      }\n      prevState.current = newState;\n\n      // Subscribe to store updates\n      return store.subscribe(() => {\n        const latest = getNodeSettings(store.getState(), id);\n        if (someSettingsHaveChanged(latest, prevState.current)) {\n          setState(latest);\n        }\n        prevState.current = latest;\n      });\n    }, [id]);\n    return state;\n  };\n  const getNodesWithoutSettings = (state = {}, parent) => {\n    let nodes = state.layout.present.nodes;\n    if (1 === Object.keys(nodes).length) {\n      if (undefined !== parent && null !== parent) {\n        nodes = getChildNodes(nodes, parent);\n      }\n    } else {\n      if (undefined !== parent) {\n        nodes = getChildNodes(nodes, parent);\n      }\n    }\n    return stripNodeSettings(nodes);\n  };\n  const useNodesWithoutSettings = parent => {\n    let initial = getNodesWithoutSettings(store.getState(), parent);\n    const prevState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(initial);\n    const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initial);\n    (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n      // On mount, check if anything has changed since initial\n      const newState = getNodesWithoutSettings(store.getState(), parent);\n      if (someNodesHaveChanged(newState, prevState.current)) {\n        setState(newState);\n      }\n      prevState.current = newState;\n\n      // Subscribe to store updates\n      return store.subscribe(() => {\n        const newState = getNodesWithoutSettings(store.getState(), parent);\n        if (someNodesHaveChanged(newState, prevState.current)) {\n          setState(newState);\n        }\n        prevState.current = newState;\n      });\n    }, []);\n    return state;\n  };\n  const useNodeChildren = id => {\n    const getChildren = (id, state) => {\n      const {\n        nodes\n      } = state.layout.present;\n      return Object.values(nodes).filter(node => id === node.parent).sort((a, b) => a.position - b.position);\n    };\n    const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(getChildren(id, store.getState()));\n    (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n      return store.subscribe(() => {\n        const children = getChildren(id, store.getState());\n        if (state !== children) {\n          setState(children);\n        }\n      });\n    }, []);\n    return state;\n  };\n  return {\n    useLayoutStore,\n    // Full store\n    useNodeSettings,\n    useNodesWithoutSettings,\n    useNodeChildren\n  };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStoreHooks);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/store/hooks.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/store/index.js":
/*!**********************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/store/index.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"redux\");\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./middleware */ \"./src/FL/Builder/system/data/layout/store/middleware.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks */ \"./src/FL/Builder/system/data/layout/store/hooks.js\");\n\n\n\nconst defaultState = {\n  layout: {\n    past: [],\n    present: {\n      attachments: [],\n      nodes: {}\n    },\n    future: []\n  }\n};\nconst defaultConfig = {\n  state: {},\n  reducers: {},\n  actions: {},\n  effects: {},\n  tests: {}\n};\nconst createLayoutStore = (initialConfig = defaultConfig, name = 'fl-builder/layout') => {\n  const config = {\n    ...defaultConfig,\n    ...initialConfig\n  };\n  const state = {\n    ...defaultState,\n    ...config.state\n  };\n  const reducer = (0,redux__WEBPACK_IMPORTED_MODULE_0__.combineReducers)(config.reducers);\n  const middleware = (0,_middleware__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(name, config.effects, config.tests);\n  const store = (0,redux__WEBPACK_IMPORTED_MODULE_0__.createStore)(reducer, state, middleware);\n  return {\n    store,\n    actions: (0,redux__WEBPACK_IMPORTED_MODULE_0__.bindActionCreators)({\n      ...config.actions\n    }, store.dispatch),\n    hooks: (0,_hooks__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(store)\n  };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createLayoutStore);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/store/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/store/middleware.js":
/*!***************************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/store/middleware.js ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"redux\");\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);\n\nconst INCLUDE_TESTS = true;\nconst applyTests = (tests = {}) => ({\n  getState\n}) => next => action => {\n  const result = next(action);\n  const state = getState();\n  if (undefined !== tests[action.type]) {\n    tests[action.type](state, action);\n  }\n  return result;\n};\n\n/**\n * Applys before and after effects to store actions.\n */\nconst applyEffects = effects => {\n  const {\n    before,\n    after\n  } = effects;\n  return store => {\n    return next => action => {\n      if (before && before[action.type]) {\n        before[action.type](action, store);\n      }\n      const result = next(action);\n      if (after && after[action.type]) {\n        after[action.type](action, store);\n      }\n      return result;\n    };\n  };\n};\n\n/**\n * Creates all enhancers for a new store with support\n * for redux dev tools.\n */\nconst createEnhancers = (name, effects = {}, tests = {}) => {\n  // Add Dev Tools Extension Support\n  const devToolsCompose = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;\n  const composeEnhancers = devToolsCompose ? devToolsCompose({\n    name\n  }) : redux__WEBPACK_IMPORTED_MODULE_0__.compose;\n  if (INCLUDE_TESTS) {\n    return composeEnhancers((0,redux__WEBPACK_IMPORTED_MODULE_0__.applyMiddleware)(applyTests(tests), applyEffects(effects)));\n  }\n  return composeEnhancers((0,redux__WEBPACK_IMPORTED_MODULE_0__.applyMiddleware)(applyEffects(effects)));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createEnhancers);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/store/middleware.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/tests.js":
/*!****************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/tests.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/FL/Builder/system/data/layout/utils/index.js\");\n\nconst tests = {\n  // Test functions receive ( newState, action, prevState )\n  SET_LAYOUT(state) {\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNodes)(state.layout.present.nodes);\n  },\n  /**\n   * Generic Nodes\n   */\n  INSERT_NODE(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n\n    // Check node exists\n    console.assert((0,_utils__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(action.id, nodes), 'Node should exist after insert.');\n\n    // Is it well formed?\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNodeShape)(nodes[action.id]);\n\n    // does the position match the action?\n    console.assert(nodes[action.id].position === action.position, 'Node position should be consistent after insert.');\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNoOrphans)(nodes);\n  },\n  REORDER_NODE(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n\n    // Check node exists\n    console.assert((0,_utils__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(action.id, nodes), 'Node no longer exists after reorder.');\n\n    // Is it well formed?\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNodeShape)(nodes[action.id]);\n\n    // Check position\n    const node = nodes[action.id];\n    console.assert(action.position === node.position, 'Node position should match action.position');\n  },\n  REPARENT_NODE(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n    console.assert((0,_utils__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(action.id, nodes), 'Node should not exist after reparent');\n\n    // Is it well formed?\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNodeShape)(nodes[action.id]);\n    console.assert(action.parent === nodes[action.id].parent, 'Node should have correct parent after reparent');\n  },\n  DELETE_NODE(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n\n    // Shouldn't exist anymore\n    console.assert(!(0,_utils__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(action.id, nodes), 'Node should not exist after delete');\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNoOrphans)(nodes);\n  },\n  /**\n   * Modules\n   */\n  COPY_MODULE(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n\n    // Check node exists\n    const exists = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.nodeExists)(action.id, nodes);\n    console.assert(exists, 'Node no longer exists after duplicate.');\n    if (!exists) {\n      return;\n    }\n\n    // Is it well formed?\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNodeShape)(nodes[action.id]);\n  },\n  /**\n   * Columns\n   */\n  DELETE_COLUMN(state) {\n    const {\n      nodes\n    } = state.layout.present;\n    (0,_utils__WEBPACK_IMPORTED_MODULE_0__.verifyNoOrphans)(nodes);\n  },\n  REPARENT_COLUMN() {\n    console.warn('REPARENT_COLUMN needs a test.');\n  },\n  RESET_COLUMN_WIDTHS(state, action) {\n    const {\n      nodes\n    } = state.layout.present;\n    action.groupIds.map(id => {\n      const cols = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getChildNodes)(nodes, id);\n      let size = 100 / cols.length;\n      const matches = cols.every(col => col.settings.size === size.toPrecision(5));\n      console.assert(matches, 'Column sizes should match after reset');\n    });\n  }\n\n  /**\n   * Rows\n   */\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tests);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/tests.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/undoable.js":
/*!*******************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/undoable.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Higher-order reducer to add undo/redo functionality.\n */\nconst undoable = reducer => {\n  // Call the reducer with empty action to populate the initial state\n  const defaultState = {\n    past: [],\n    present: reducer(undefined, {}),\n    future: []\n  };\n\n  // Return a reducer that handles undo and redo\n  return function (state = defaultState, action) {\n    const {\n      past = [],\n      present,\n      future = []\n    } = state;\n    switch (action.type) {\n      /*\n      case 'UNDO':\n      \tconst previous = past[ past.length - 1 ] // eslint-disable-line\n      \tconst newPast = past.slice( 0, past.length - 1 ) // eslint-disable-line\n      \treturn {\n      \t\tpast: newPast,\n      \t\tpresent: previous,\n      \t\tfuture: [ present, ...future ]\n      \t}\n      case 'REDO':\n      \tconst next = future[0] // eslint-disable-line\n      \tconst newFuture = future.slice( 1 ) // eslint-disable-line\n      \treturn {\n      \t\tpast: [ ...past, present ],\n      \t\tpresent: next,\n      \t\tfuture: newFuture\n      \t}\n      */\n\n      /**\n       * Any high precision actions should be excluded from creating undo states.\n       */\n      case 'RESIZE_COLUMN':\n        if (!action.persist) {\n          return {\n            past,\n            present: reducer(present, action),\n            future\n          };\n        }\n        return {\n          past,\n          present: reducer(present, action),\n          future\n        };\n      default:\n        return {\n          past,\n          present: reducer(present, action),\n          future\n        };\n    }\n  };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (undoable);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/undoable.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/layout/utils/index.js":
/*!**********************************************************!*\
  !*** ./src/FL/Builder/system/data/layout/utils/index.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   defaultNode: () => (/* binding */ defaultNode),\n/* harmony export */   deleteChildren: () => (/* binding */ deleteChildren),\n/* harmony export */   deleteNodeAndResolvePositions: () => (/* binding */ deleteNodeAndResolvePositions),\n/* harmony export */   getChildNodes: () => (/* binding */ getChildNodes),\n/* harmony export */   getOrphans: () => (/* binding */ getOrphans),\n/* harmony export */   getSiblingNodes: () => (/* binding */ getSiblingNodes),\n/* harmony export */   insertExistingNodeAndResolvePositions: () => (/* binding */ insertExistingNodeAndResolvePositions),\n/* harmony export */   insertNewNodeAndResolvePositions: () => (/* binding */ insertNewNodeAndResolvePositions),\n/* harmony export */   isNodeEmpty: () => (/* binding */ isNodeEmpty),\n/* harmony export */   mergeNode: () => (/* binding */ mergeNode),\n/* harmony export */   nodeExists: () => (/* binding */ nodeExists),\n/* harmony export */   reorderChildren: () => (/* binding */ reorderChildren),\n/* harmony export */   resetColumnWidths: () => (/* binding */ resetColumnWidths),\n/* harmony export */   sortNodes: () => (/* binding */ sortNodes),\n/* harmony export */   verifyNoOrphans: () => (/* binding */ verifyNoOrphans),\n/* harmony export */   verifyNodeShape: () => (/* binding */ verifyNodeShape),\n/* harmony export */   verifyNodes: () => (/* binding */ verifyNodes)\n/* harmony export */ });\nconst defaultNode = {\n  node: '',\n  type: '',\n  parent: '',\n  position: 0,\n  global: false,\n  settings: {}\n};\n\n/**\n * Sort an array of nodes by position. Used in Array.sort()\n */\nconst sortNodes = (a, b) => {\n  if (a.position > b.position) {\n    return 1;\n  } else if (a.position < b.position) {\n    return -1;\n  }\n  return 0;\n};\nconst nodeExists = (id, nodes = {}) => undefined !== nodes[id];\n\n/**\n * Get all immediate children of a particular parent node\n */\nconst getChildNodes = (nodes = {}, parent = null) => {\n  return Object.values(nodes).filter(node => parent === node.parent).sort(sortNodes);\n};\n\n/**\n * Get all siblings of a particular node\n */\nconst getSiblingNodes = (nodes = {}, id) => {\n  const target = nodes[id];\n  return Object.values(nodes).filter(node => target.parent === node.parent && id !== node.node).sort(sortNodes);\n};\n\n/**\n * Format Node\n */\nconst mergeNode = (prevNode = {}, node = {}) => {\n  const newNode = {\n    ...defaultNode,\n    ...prevNode,\n    ...node\n  };\n  if ('module' === newNode.type && undefined === newNode.settings.type) {\n    newNode.settings.type = prevNode.settings.type;\n  }\n  return newNode;\n};\n\n/**\n * Set the position of a given node, and increment the position of any trailing siblings.\n *\n * @return Object - all nodes of the same parent, including the target node.\n */\nconst insertExistingNodeAndResolvePositions = (id, parent, position, nodes = {}) => {\n  let updated = {};\n  if (undefined === nodes[id]) {\n    console.error('Undefined node', id);\n    return updated;\n  }\n\n  // Grab all nodes of the same parent and reset positions\n  const siblings = getChildNodes(nodes, parent).filter(sibling => id !== sibling.node);\n  const ids = siblings.map(sibling => sibling.node);\n\n  // Insert target id into array\n  ids.splice(position, 0, id);\n\n  // Reset positions for all\n  ids.map((nodeId, i) => {\n    updated[nodeId] = mergeNode(nodes[nodeId], {\n      position: i,\n      parent\n    });\n  });\n\n  // Returns all affected nodes\n  return updated;\n};\nconst insertNewNodeAndResolvePositions = (nodes = {}, id, newNode = {}) => {\n  const newState = {\n    ...nodes,\n    [id]: mergeNode(nodes[id], newNode)\n  };\n\n  // Returns all affected nodes\n  return insertExistingNodeAndResolvePositions(newNode.node, newNode.parent, newNode.position, newState);\n};\nconst deleteChildren = (id, nodes) => {\n  const toDelete = [];\n  let newNodes = {\n    ...nodes\n  };\n  Object.values(newNodes).map(node => {\n    if (id === node.parent) {\n      toDelete.push(node.node);\n    }\n  });\n  toDelete.map(key => {\n    newNodes = deleteChildren(key, newNodes);\n    delete newNodes[key];\n  });\n  return newNodes;\n};\nconst deleteNodeAndResolvePositions = (id, nodes) => {\n  let updated = {};\n  if (undefined === nodes[id]) {\n    console.warn('Node to be deleted is undefined', id);\n    return nodes;\n  }\n  const parent = nodes[id].parent;\n  const type = nodes[id].type;\n\n  // Delete the target node and children\n  const newState = deleteChildren(id, nodes);\n  delete newState[id];\n\n  // Column nodes check for empty column-groups to delete too\n  if ('column' === type && isNodeEmpty(parent, newState)) {\n    delete newState[parent];\n  }\n\n  // Reset sibling positions\n  // Handle col size reset\n  const siblings = getChildNodes(newState, parent);\n  siblings.map((node, i) => {\n    node.position = i;\n    if ('column' === node.type) {\n      let size = 100 / siblings.length;\n      size = size.toPrecision(5); // 3 decimal places\n      node.settings.size = size;\n    }\n    updated[node.node] = node;\n  });\n  return {\n    ...newState\n  };\n};\nconst resetColumnWidths = (groupIds = [], state) => {\n  const updated = {};\n  groupIds.map(id => {\n    const cols = Object.values(state).filter(node => id === node.parent);\n    let size = (100 / cols.length).toPrecision(5); // 3 decimal places\n    cols.map(node => {\n      updated[node.node] = mergeNode(node, {\n        settings: {\n          ...node.settings,\n          size\n        }\n      });\n    });\n  });\n\n  // Returns all affected nodes\n  return updated;\n};\nconst isNodeEmpty = (id, state) => {\n  const children = Object.values(state).filter(node => node.parent === id);\n  return 0 === children.length;\n};\nconst getOrphans = nodes => {\n  const keys = Object.keys(nodes);\n  return Object.values(nodes).filter(node => null !== node.parent && !keys.includes(node.node));\n};\n\n/**\n * Testing Utils\n */\nconst verifyNodeShape = node => {\n  if (undefined === node) {\n    return;\n  }\n\n  // Ensure properties\n  console.assert('node' in node, 'Node has no id property');\n  console.assert('type' in node, 'Node has no type property');\n  console.assert('parent' in node, 'Node has no parent property');\n  console.assert('position' in node, 'Node has no position property');\n  console.assert('settings' in node, 'Node has no settings property');\n  console.assert('global' in node, 'Node has no global property');\n  if ('module' === node.type) {\n    console.assert('type' in node.settings, 'Module settings should contain type property.');\n  }\n};\nconst verifyNodes = nodes => {\n  Object.values(nodes).map(verifyNodeShape);\n};\nconst verifyNoOrphans = nodes => {\n  const orphans = getOrphans(nodes);\n  console.assert(0 === orphans.length, 'There should be no orphaned nodes', orphans);\n};\nconst reorderChildren = (parent, childIds, state) => {\n  const children = Object.values(state).filter(node => node.parent === parent);\n  let updated = {};\n  childIds.map((id, i) => {\n    const child = children.find(node => node.node === id);\n    if (child) {\n      updated[child.node] = {\n        ...child,\n        position: i\n      };\n    }\n  });\n  return updated;\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/layout/utils/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/outlinepanel/actions.js":
/*!************************************************************!*\
  !*** ./src/FL/Builder/system/data/outlinepanel/actions.js ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   setActiveNode: () => (/* binding */ setActiveNode),\n/* harmony export */   setFocusNode: () => (/* binding */ setFocusNode)\n/* harmony export */ });\nconst setActiveNode = id => ({\n  type: 'SET_ACTIVE_NODE',\n  id\n});\nconst setFocusNode = id => ({\n  type: 'SET_FOCUS_NODE',\n  id\n});\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/outlinepanel/actions.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/outlinepanel/index.js":
/*!**********************************************************!*\
  !*** ./src/FL/Builder/system/data/outlinepanel/index.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getOutlinePanelActions: () => (/* binding */ getOutlinePanelActions),\n/* harmony export */   getOutlinePanelSelectors: () => (/* binding */ getOutlinePanelSelectors),\n/* harmony export */   getOutlinePanelState: () => (/* binding */ getOutlinePanelState),\n/* harmony export */   getOutlinePanelStore: () => (/* binding */ getOutlinePanelStore),\n/* harmony export */   useOutlinePanelState: () => (/* binding */ useOutlinePanelState)\n/* harmony export */ });\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../registry */ \"./src/FL/Builder/system/data/registry/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/FL/Builder/system/data/outlinepanel/actions.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reducers */ \"./src/FL/Builder/system/data/outlinepanel/reducers.js\");\n\n\n\nconst key = 'fl-builder/outlinepanel';\n(0,_registry__WEBPACK_IMPORTED_MODULE_0__.registerStore)(key, {\n  actions: _actions__WEBPACK_IMPORTED_MODULE_1__,\n  reducers: _reducers__WEBPACK_IMPORTED_MODULE_2__,\n  state: {\n    activeNode: false,\n    focusNode: false\n  }\n});\nconst useOutlinePanelState = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.useStore)(key);\nconst getOutlinePanelStore = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getStore)(key);\nconst getOutlinePanelState = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getStore)(key).getState();\nconst getOutlinePanelActions = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getDispatch)(key);\nconst getOutlinePanelSelectors = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getSelectors)(key);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/outlinepanel/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/outlinepanel/reducers.js":
/*!*************************************************************!*\
  !*** ./src/FL/Builder/system/data/outlinepanel/reducers.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   activeNode: () => (/* binding */ activeNode),\n/* harmony export */   focusNode: () => (/* binding */ focusNode)\n/* harmony export */ });\nconst activeNode = (state = false, action) => {\n  switch (action.type) {\n    case 'SET_ACTIVE_NODE':\n      return action.id ? action.id : false;\n    default:\n      return state;\n  }\n};\nconst focusNode = (state = false, action) => {\n  switch (action.type) {\n    case 'SET_FOCUS_NODE':\n      return action.id ? action.id : false;\n    default:\n      return state;\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/outlinepanel/reducers.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/registry/index.js":
/*!******************************************************!*\
  !*** ./src/FL/Builder/system/data/registry/index.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getDispatch: () => (/* binding */ getDispatch),\n/* harmony export */   getSelectors: () => (/* binding */ getSelectors),\n/* harmony export */   getStore: () => (/* binding */ getStore),\n/* harmony export */   registerStore: () => (/* binding */ registerStore),\n/* harmony export */   useStore: () => (/* binding */ useStore)\n/* harmony export */ });\n/* harmony import */ var fl_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fl-state */ \"fl-state\");\n/* harmony import */ var fl_state__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fl_state__WEBPACK_IMPORTED_MODULE_0__);\n\nconst {\n  registerStore,\n  useStore,\n  getStore,\n  getDispatch,\n  getSelectors\n} = (0,fl_state__WEBPACK_IMPORTED_MODULE_0__.createStoreRegistry)();\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/registry/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/system/actions.js":
/*!******************************************************!*\
  !*** ./src/FL/Builder/system/data/system/actions.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   displayPanel: () => (/* binding */ displayPanel),\n/* harmony export */   hideCurrentPanel: () => (/* binding */ hideCurrentPanel),\n/* harmony export */   registerPanel: () => (/* binding */ registerPanel),\n/* harmony export */   setColorScheme: () => (/* binding */ setColorScheme),\n/* harmony export */   setIsEditing: () => (/* binding */ setIsEditing),\n/* harmony export */   setShouldShowShortcuts: () => (/* binding */ setShouldShowShortcuts),\n/* harmony export */   togglePanel: () => (/* binding */ togglePanel)\n/* harmony export */ });\nconst setShouldShowShortcuts = value => {\n  return {\n    type: 'SET_SHOULD_SHOW_SHORTCUTS',\n    value\n  };\n};\nconst registerPanel = (handle = 'fl/untitled', options = {}) => {\n  const defaults = {\n    label: '',\n    root: null,\n    render: () => null,\n    /* Legacy Prop */\n    className: null,\n    routerProps: {},\n    onHistoryChanged: () => {}\n  };\n  return {\n    type: 'REGISTER_PANEL',\n    handle,\n    options: {\n      ...defaults,\n      ...options\n    }\n  };\n};\nconst displayPanel = (name = null) => {\n  return {\n    type: 'SET_CURRENT_PANEL',\n    name\n  };\n};\nconst togglePanel = (name = null) => {\n  return {\n    type: 'TOGGLE_PANEL',\n    name\n  };\n};\nconst hideCurrentPanel = () => ({\n  type: 'HIDE_CURRENT_PANEL'\n});\nconst setIsEditing = (value = true) => {\n  return {\n    type: 'SET_IS_EDITING',\n    value\n  };\n};\nconst setColorScheme = (value = 'light') => {\n  return {\n    type: 'SET_COLOR_SCHEME',\n    value\n  };\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/system/actions.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/system/effects.js":
/*!******************************************************!*\
  !*** ./src/FL/Builder/system/data/system/effects.js ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   after: () => (/* binding */ after),\n/* harmony export */   before: () => (/* binding */ before)\n/* harmony export */ });\n/**\n * Effects that fire before an action.\n */\nconst before = {};\n\n/**\n * Effects that fire after an action.\n */\nconst after = {\n  TOGGLE_PANEL(action, store) {\n    const {\n      currentPanel\n    } = store.getState();\n    const html = window.parent.document.querySelector('html');\n    if (currentPanel) {\n      FLBuilder._closePanel();\n    }\n    if ('assistant' === currentPanel) {\n      html.classList.add('fl-builder-assistant-visible');\n    } else {\n      html.classList.remove('fl-builder-assistant-visible');\n    }\n  },\n  HIDE_CURRENT_PANEL() {\n    const html = window.parent.document.querySelector('html');\n    html.classList.remove('fl-builder-assistant-visible');\n  },\n  SET_COLOR_SCHEME(action, store) {\n    const {\n      colorScheme\n    } = store.getState();\n    FL.Builder.utils.colorScheme.setBodyClasses(colorScheme);\n    FLBuilder.ajax({\n      action: 'save_ui_skin',\n      skin_name: colorScheme\n    });\n\n    // Keep the color scheme field in sync if it's on screen\n    const select = window.parent.document.querySelector('.fl-builder-global-settings select[name=color_scheme]');\n    if (select && select.value !== colorScheme) {\n      select.value = colorScheme;\n    }\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/system/effects.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/system/index.js":
/*!****************************************************!*\
  !*** ./src/FL/Builder/system/data/system/index.js ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getSystemActions: () => (/* binding */ getSystemActions),\n/* harmony export */   getSystemConfig: () => (/* binding */ getSystemConfig),\n/* harmony export */   getSystemSelectors: () => (/* binding */ getSystemSelectors),\n/* harmony export */   getSystemState: () => (/* binding */ getSystemState),\n/* harmony export */   getSystemStore: () => (/* binding */ getSystemStore),\n/* harmony export */   useSystemState: () => (/* binding */ useSystemState)\n/* harmony export */ });\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../registry */ \"./src/FL/Builder/system/data/registry/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/FL/Builder/system/data/system/actions.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reducers */ \"./src/FL/Builder/system/data/system/reducers.js\");\n/* harmony import */ var _effects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./effects */ \"./src/FL/Builder/system/data/system/effects.js\");\n\n\n\n\nconst key = 'fl-builder/system';\n(0,_registry__WEBPACK_IMPORTED_MODULE_0__.registerStore)(key, {\n  actions: _actions__WEBPACK_IMPORTED_MODULE_1__,\n  reducers: _reducers__WEBPACK_IMPORTED_MODULE_2__,\n  effects: _effects__WEBPACK_IMPORTED_MODULE_3__,\n  state: {\n    isEditing: true,\n    currentPanel: null,\n    shouldShowShortcuts: false,\n    colorScheme: FLBuilderConfig.userSettings.skin,\n    panels: {}\n  }\n});\nconst useSystemState = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.useStore)(key);\nconst getSystemStore = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getStore)(key);\nconst getSystemState = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getStore)(key).getState();\nconst getSystemActions = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getDispatch)(key);\nconst getSystemSelectors = () => (0,_registry__WEBPACK_IMPORTED_MODULE_0__.getSelectors)(key);\nconst getSystemConfig = () => window.FLBuilderConfig;\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/system/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/data/system/reducers.js":
/*!*******************************************************!*\
  !*** ./src/FL/Builder/system/data/system/reducers.js ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   colorScheme: () => (/* binding */ colorScheme),\n/* harmony export */   currentPanel: () => (/* binding */ currentPanel),\n/* harmony export */   isEditing: () => (/* binding */ isEditing),\n/* harmony export */   panels: () => (/* binding */ panels),\n/* harmony export */   shouldShowShortcuts: () => (/* binding */ shouldShowShortcuts)\n/* harmony export */ });\nconst shouldShowShortcuts = (state = false, action) => {\n  switch (action.type) {\n    case 'SET_SHOULD_SHOW_SHORTCUTS':\n      return action.value ? true : false;\n    default:\n      return state;\n  }\n};\nconst panels = (state = {}, action) => {\n  switch (action.type) {\n    case 'REGISTER_PANEL':\n      return {\n        ...state,\n        [action.handle]: action.options\n      };\n    default:\n      return state;\n  }\n};\nconst currentPanel = (state = null, action) => {\n  switch (action.type) {\n    case 'SET_CURRENT_PANEL':\n      return action.name;\n    case 'HIDE_CURRENT_PANEL':\n      return null;\n    case 'TOGGLE_PANEL':\n      return action.name === state ? null : action.name;\n    default:\n      return state;\n  }\n};\nconst isEditing = (state = true, action) => {\n  switch (action.type) {\n    case 'SET_IS_EDITING':\n      return action.value ? true : false;\n    default:\n      return state;\n  }\n};\nconst colorScheme = (state = 'light', action) => {\n  const values = ['light', 'dark', 'auto'];\n  switch (action.type) {\n    case 'SET_COLOR_SCHEME':\n      if (!values.includes(action.value)) {\n        return state;\n      }\n      return action.value;\n    default:\n      return state;\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/data/system/reducers.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/index.js":
/*!****************************************!*\
  !*** ./src/FL/Builder/system/index.js ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/FL/Builder/system/utils.js\");\n/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./api */ \"./src/FL/Builder/system/api/index.js\");\n/* harmony import */ var _ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui */ \"./src/FL/Builder/system/ui/index.js\");\n/* harmony import */ var _ui_3rd_party__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/3rd-party */ \"./src/FL/Builder/system/ui/3rd-party/index.js\");\n\n\n\n\n\n\n\n// Setup public API - window.FL.Builder\nwindow.FL = window.FL ?? {};\nconst builderProto = Object.getPrototypeOf(FL.Builder);\nbuilderProto.data = _data__WEBPACK_IMPORTED_MODULE_2__;\nfor (let key in _api__WEBPACK_IMPORTED_MODULE_3__) {\n  builderProto[key] = _api__WEBPACK_IMPORTED_MODULE_3__[key];\n}\n\n// Needs to happen after FL.Builder.data API is available\n(0,_ui__WEBPACK_IMPORTED_MODULE_4__.registerPanels)();\n\n// Render UI\n(0,_utils__WEBPACK_IMPORTED_MODULE_1__.renderForVersion)(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_ui__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null));\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/3rd-party/index.js":
/*!*****************************************************!*\
  !*** ./src/FL/Builder/system/ui/3rd-party/index.js ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _query_monitor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./query-monitor */ \"./src/FL/Builder/system/ui/3rd-party/query-monitor/index.js\");\n\n(0,_query_monitor__WEBPACK_IMPORTED_MODULE_0__.querymonitor)();\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/3rd-party/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/3rd-party/query-monitor/index.js":
/*!*******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/3rd-party/query-monitor/index.js ***!
  \*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   querymonitor: () => (/* binding */ querymonitor)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../i18n */ \"./src/FL/Builder/system/ui/i18n/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/3rd-party/query-monitor/style.scss\");\n\n\n\nconst querymonitor = () => {\n  FLBuilder.addHook('didInitUI', () => {\n    const actions = window.parent.document.querySelector('.fl-builder-bar-actions');\n    const saving = actions.querySelector('.fl-builder--saving-indicator');\n    const btn = document.createElement('button');\n    btn.classList.add('fl-builder-button', 'fl-builder-button-silent');\n    btn.innerHTML = '<svg width=\"20px\" x=\"0px\" y=\"0px\" viewBox=\"0 0 238 238\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" xmlns:serif=\"http://www.serif.com/\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;\"><g id=\"EMF-by-Xara-X\" serif:id=\"EMF by Xara X\"><path d=\"M170.734,183.655l-32.623,-35.483c-19.089,5.332 -40.624,6.6 -61.992,2.707c-54.118,-9.858 -86.793,-49.103 -72.935,-87.598c13.859,-38.494 69.029,-61.737 123.148,-51.878c7.553,1.375 14.687,3.324 21.334,5.762l-6.462,12.195c-5.266,-1.731 -10.922,-3.111 -16.913,-4.082c-42.267,-6.842 -85.356,9.291 -96.18,36.014c-10.824,26.722 14.695,53.963 56.963,60.808c41.535,6.724 83.865,-8.739 95.589,-34.637l13.176,22.511l0.064,0.113c-4.574,7.429 -10.792,14.102 -18.26,19.85l27.897,25.151c15.605,14.906 -15.073,47.906 -32.806,28.567Zm9.595,-26.401l-34.191,-30.641c-36.604,14.182 -70.685,6.876 -98.296,-5.59c23.399,17.456 58.534,24.774 94.542,14.959l30.526,29.179c1.989,-3.304 4.559,-6.305 7.419,-7.907Z\"/><path d=\"M42.292,90.276l27.528,0l16.45,-26.827l34.049,52.376l44.83,-68.557l34.474,58.905l37.878,0l-29.225,-7.239l-43.694,-98.934l-43.696,82.469l-33.055,-51.241l-24.826,54.79l-20.713,4.258Z\" style=\"fill:#1195d0;\"/></g></svg>';\n    btn.onclick = () => onClick();\n    btn.title = (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Query Monitor');\n    if (jQuery('#query-monitor-main').length > 0) {\n      actions.insertBefore(btn, saving);\n    }\n  });\n  const onClick = () => {\n    var el = document.getElementById(\"query-monitor-main\");\n    if (!isHidden(el)) {\n      var elem = document.getElementsByClassName(\"qm-button-container-close\");\n      elem[0].click();\n    } else {\n      var menu = document.getElementById(\"wp-admin-bar-query-monitor\");\n      elem = menu.getElementsByTagName('a');\n      elem[0].click();\n    }\n  };\n  const isHidden = el => {\n    var style = window.getComputedStyle(el);\n    return style.display === 'none';\n  };\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/3rd-party/query-monitor/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/3rd-party/query-monitor/style.scss":
/*!*********************************************************************!*\
  !*** ./src/FL/Builder/system/ui/3rd-party/query-monitor/style.scss ***!
  \*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/3rd-party/query-monitor/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/art/index.js":
/*!***********************************************!*\
  !*** ./src/FL/Builder/system/ui/art/index.js ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Icon: () => (/* binding */ Icon),\n/* harmony export */   SVGSymbols: () => (/* binding */ SVGSymbols)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/art/style.scss\");\n\n\nconst SVGSymbols = () => {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n    id: \"fl-symbol-container\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-down-caret\",\n    viewBox: \"0 0 11 6\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"polygon\", {\n    points: \"0 0 2.05697559 0 5.49235478 3.74058411 8.93443824 0 11 0 5.5 6\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-v-stack-icon\",\n    fill: \"currentColor\",\n    width: \"23\",\n    height: \"10\",\n    viewBox: \"0 0 23 10\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    width: \"23\",\n    height: \"2\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    y: \"4\",\n    width: \"23\",\n    height: \"2\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    y: \"8\",\n    width: \"23\",\n    height: \"2\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-h-stack-icon\",\n    width: \"24\",\n    height: \"10\",\n    viewBox: \"0 0 24 10\",\n    fill: \"currentColor\",\n    stroke: \"none\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    width: \"2\",\n    height: \"10\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"5.5\",\n    width: \"2\",\n    height: \"10\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"11\",\n    width: \"2\",\n    height: \"10\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"16.5\",\n    width: \"2\",\n    height: \"10\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"22\",\n    width: \"2\",\n    height: \"10\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-z-stack-icon\",\n    width: \"24\",\n    height: \"10\",\n    viewBox: \"0 0 24 10\",\n    fill: \"none\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"1\",\n    y: \"1\",\n    width: \"22\",\n    height: \"8\",\n    stroke: \"currentColor\",\n    strokeWidth: \"2\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"4\",\n    y: \"4\",\n    width: \"16\",\n    height: \"2\",\n    fill: \"currentColor\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-grid-display-icon\",\n    width: \"26\",\n    height: \"10\",\n    viewBox: \"0 0 26 10\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"12\",\n    width: \"6\",\n    height: \"4\",\n    fill: \"currentColor\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"12\",\n    y: \"6\",\n    width: \"6\",\n    height: \"4\",\n    fill: \"currentColor\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    width: \"10\",\n    height: \"10\",\n    fill: \"currentColor\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"20\",\n    width: \"6\",\n    height: \"4\",\n    fill: \"currentColor\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"20\",\n    y: \"6\",\n    width: \"6\",\n    height: \"4\",\n    fill: \"currentColor\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-swiper-display-icon\",\n    width: \"23\",\n    height: \"10\",\n    viewBox: \"0 0 23 10\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    x: \"6.75\",\n    y: \"0.75\",\n    width: \"9.5\",\n    height: \"8.5\",\n    rx: \"1.25\",\n    fill: \"none\",\n    stroke: \"currentColor\",\n    strokeWidth: \"1.5\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M20 3L22 5L20 7\",\n    stroke: \"currentColor\",\n    strokeWidth: \"1.5\",\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M3 3L1 5L3 7\",\n    stroke: \"currentColor\",\n    strokeWidth: \"1.5\",\n    strokeLinecap: \"round\",\n    strokeLinejoin: \"round\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-v-panel-drag-handle\",\n    width: \"4\",\n    height: \"20\",\n    viewBox: \"0 0 4 20\",\n    fill: \"none\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n    width: \"4\",\n    height: \"20\",\n    rx: \"2\",\n    fill: \"currentColor\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-question-mark\",\n    width: \"12\",\n    height: \"12\",\n    viewBox: \"0 0 12 12\",\n    fill: \"none\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M6 12C9.28235 12 12 9.27647 12 6C12 2.71765 9.27647 0 5.99412 0C2.71765 0 0 2.71765 0 6C0 9.27647 2.72353 12 6 12ZM6 11C3.22353 11 1.00588 8.77647 1.00588 6C1.00588 3.22353 3.21765 1 5.99412 1C8.77059 1 11 3.22353 11 6C11 8.77647 8.77647 11 6 11ZM5.87647 7.21765C6.17059 7.21765 6.35294 7.02941 6.35294 6.8V6.72941C6.35294 6.4 6.54118 6.18824 6.95294 5.91765C7.52353 5.54118 7.92941 5.2 7.92941 4.49412C7.92941 3.51765 7.05882 2.98824 6.05882 2.98824C5.04706 2.98824 4.38235 3.47059 4.22353 4.01176C4.19412 4.10588 4.17647 4.2 4.17647 4.3C4.17647 4.56471 4.38235 4.70588 4.57647 4.70588C4.77647 4.70588 4.90588 4.61176 5.01177 4.47059L5.11765 4.32941C5.32353 3.98824 5.62941 3.78824 6.02353 3.78824C6.55882 3.78824 6.90588 4.09412 6.90588 4.54118C6.90588 4.94118 6.65882 5.13529 6.14706 5.49412C5.72353 5.78824 5.40588 6.1 5.40588 6.67647V6.75294C5.40588 7.05882 5.57647 7.21765 5.87647 7.21765ZM5.86471 8.97059C6.20588 8.97059 6.5 8.7 6.5 8.35882C6.5 8.01765 6.21177 7.74706 5.86471 7.74706C5.51765 7.74706 5.22941 8.02353 5.22941 8.35882C5.22941 8.69412 5.52353 8.97059 5.86471 8.97059Z\",\n    fill: \"currentColor\"\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"symbol\", {\n    id: \"fl-outline-list-icon\",\n    width: \"20\",\n    height: \"20\",\n    viewBox: \"0 0 20 20\",\n    fill: \"none\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M1.38672 5.33984C2.1582 5.33984 2.77344 4.72461 2.77344 3.95312C2.77344 3.19141 2.1582 2.56641 1.38672 2.56641C0.625 2.56641 0 3.19141 0 3.95312C0 4.72461 0.625 5.33984 1.38672 5.33984ZM5.97656 4.89062H14.0565C14.5838 4.89062 15.0038 4.48047 15.0038 3.95312C15.0038 3.42578 14.5936 3.01562 14.0565 3.01562H5.97656C5.45898 3.01562 5.03906 3.42578 5.03906 3.95312C5.03906 4.48047 5.44922 4.89062 5.97656 4.89062ZM3.88672 11.3457C4.64844 11.3457 5.27344 10.7305 5.27344 9.95898C5.27344 9.19727 4.64844 8.57227 3.88672 8.57227C3.11523 8.57227 2.49023 9.19727 2.49023 9.95898C2.49023 10.7305 3.11523 11.3457 3.88672 11.3457ZM8.47656 10.8965H16.5794C17.1068 10.8965 17.5169 10.4863 17.5169 9.95898C17.5169 9.43164 17.1068 9.02148 16.5794 9.02148H8.47656C7.94922 9.02148 7.53906 9.43164 7.53906 9.95898C7.53906 10.4863 7.94922 10.8965 8.47656 10.8965ZM6.37695 17.3516C7.14844 17.3516 7.76367 16.7363 7.76367 15.9648C7.76367 15.2031 7.14844 14.5781 6.37695 14.5781C5.61523 14.5781 4.99023 15.2031 4.99023 15.9648C4.99023 16.7363 5.61523 17.3516 6.37695 17.3516ZM10.9668 16.9023H19.0251C19.5524 16.9023 19.9626 16.4922 19.9626 15.9648C19.9626 15.4375 19.5524 15.0273 19.0251 15.0273H10.9668C10.4395 15.0273 10.0293 15.4375 10.0293 15.9648C10.0293 16.4922 10.4395 16.9023 10.9668 16.9023Z\",\n    fill: \"currentColor\"\n  })));\n};\nconst Icon = () => {};\nIcon.Close = () => {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n    width: \"14px\",\n    height: \"14px\",\n    viewBox: \"0 0 14 14\",\n    version: \"1.1\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n    stroke: \"currentColor\",\n    strokeWidth: \"2\",\n    fill: \"none\",\n    fillRule: \"evenodd\",\n    strokeLinecap: \"round\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M13,1 L1,13\"\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n    d: \"M1,1 L13,13\"\n  })));\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/art/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/art/style.scss":
/*!*************************************************!*\
  !*** ./src/FL/Builder/system/ui/art/style.scss ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/art/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/color-scheme/index.js":
/*!********************************************************!*\
  !*** ./src/FL/Builder/system/ui/color-scheme/index.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   useColorScheme: () => (/* binding */ useColorScheme)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n\n\nconst useColorScheme = () => {\n  const {\n    colorScheme\n  } = (0,data__WEBPACK_IMPORTED_MODULE_1__.useSystemState)('colorScheme');\n  const [isOSDark, setIsOSDark] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const handleOSChange = e => setIsOSDark(e.matches);\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    const isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n    if (isDark !== isOSDark) {\n      setIsOSDark(isDark);\n    }\n    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', handleOSChange);\n    return window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', handleOSChange);\n  }, []);\n  if ('auto' === colorScheme) {\n    return isOSDark ? 'dark' : 'light';\n  }\n  return colorScheme;\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/color-scheme/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/context-menu/context.js":
/*!**********************************************************!*\
  !*** ./src/FL/Builder/system/ui/context-menu/context.js ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ContextMenuContext: () => (/* binding */ ContextMenuContext),\n/* harmony export */   useContextMenu: () => (/* binding */ useContextMenu)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst defaults = {};\nconst ContextMenuContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(defaults);\nconst useContextMenu = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ContextMenuContext);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/context-menu/context.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/context-menu/index.js":
/*!********************************************************!*\
  !*** ./src/FL/Builder/system/ui/context-menu/index.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ContextMenuProvider: () => (/* binding */ ContextMenuProvider),\n/* harmony export */   useContextMenu: () => (/* reexport safe */ _context__WEBPACK_IMPORTED_MODULE_1__.useContextMenu)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context */ \"./src/FL/Builder/system/ui/context-menu/context.js\");\n/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./menu */ \"./src/FL/Builder/system/ui/context-menu/menu/index.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\n\nconst ContextMenuProvider = ({\n  children\n}) => {\n  const [contextMenu, setContextMenu] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const clearContextMenu = () => setContextMenu(false);\n  const context = {\n    setContextMenu,\n    clearContextMenu,\n    showContextMenu: false !== contextMenu,\n    contextMenu\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context__WEBPACK_IMPORTED_MODULE_1__.ContextMenuContext.Provider, {\n    value: context\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DismissListener, null), children, false !== contextMenu && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({}, contextMenu, {\n    clear: clearContextMenu\n  })));\n};\nconst DismissListener = () => {\n  const {\n    clearContextMenu\n  } = (0,_context__WEBPACK_IMPORTED_MODULE_1__.useContextMenu)();\n  const maybeDismissOnClick = e => {\n    // This is a menu and you are not clicking within it.\n    if (window.parent.document.querySelector('.fl-builder-context-menu') && !e.target.closest('.fl-builder-context-menu')) {\n      clearContextMenu();\n      e.stopPropagation();\n    }\n  };\n  const dismissMenuOnScroll = () => {\n    if (window.parent.document.querySelector('.fl-builder-context-menu')) {\n      clearContextMenu();\n    }\n  };\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    window.parent.addEventListener('click', maybeDismissOnClick, {\n      capture: true\n    });\n    window.parent.addEventListener('scroll', dismissMenuOnScroll, {\n      capture: true\n    });\n\n    // Return a remover fn\n    return () => {\n      window.parent.removeEventListener('click', maybeDismissOnClick, {\n        capture: true\n      });\n      window.parent.removeEventListener('scroll', dismissMenuOnScroll, {\n        capture: true\n      });\n    };\n  }, []);\n  return null;\n};\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/context-menu/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/context-menu/menu/index.js":
/*!*************************************************************!*\
  !*** ./src/FL/Builder/system/ui/context-menu/menu/index.js ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/context-menu/menu/style.scss\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\nconst ContextMenu = ({\n  x,\n  y,\n  items = {},\n  clear = () => {}\n}) => {\n  const menuWidth = 180;\n  const edgeBuffer = 10;\n  const maxX = window.parent.innerWidth - (menuWidth + edgeBuffer);\n  const maxY = window.parent.innerHeight - 100;\n  let bottomBuffer = 0;\n\n  // Reduce to just the items that are enabled\n  let enabledItems = {};\n  Object.entries(items).map(([key, item]) => {\n    if (false === item.isEnabled) {\n      return;\n    }\n    enabledItems[key] = item;\n    bottomBuffer += 30;\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-builder-context-menu\",\n    style: {\n      top: y > maxY ? y - bottomBuffer : y,\n      left: x < maxX ? x : maxX,\n      width: menuWidth\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", null, Object.keys(enabledItems).map(key => {\n    const {\n      onClick,\n      label,\n      isEnabled,\n      ...rest\n    } = items[key];\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: key\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", _extends({\n      onClick: e => {\n        onClick(e);\n        clear();\n        e.stopPropagation();\n      }\n    }, rest), label));\n  })));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContextMenu);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/context-menu/menu/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/context-menu/menu/style.scss":
/*!***************************************************************!*\
  !*** ./src/FL/Builder/system/ui/context-menu/menu/style.scss ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/context-menu/menu/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/grid-overlay/index.js":
/*!********************************************************!*\
  !*** ./src/FL/Builder/system/ui/grid-overlay/index.js ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _bramus_style_observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @bramus/style-observer */ \"./node_modules/@bramus/style-observer/dist/index.js\");\n/* harmony import */ var _style_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.module.css */ \"./src/FL/Builder/system/ui/grid-overlay/style.module.css\");\n\n\n\n\nconst GridOverlay = () => {\n  const box = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n  const root = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n  const container = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n  const [id, setId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n  const [toggled, setToggled] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n  const properties = ['grid-template-columns', 'grid-template-rows', 'grid-auto-flow', 'grid-row', 'grid-column', 'justify-items', 'align-items', 'gap', 'width', 'height', 'max-width', 'max-height', 'min-width', 'min-height', 'padding', 'aspect-ratio'];\n  const observer = new _bramus_style_observer__WEBPACK_IMPORTED_MODULE_2__[\"default\"](values => renderGridOverlay(values), {\n    returnFormat: _bramus_style_observer__WEBPACK_IMPORTED_MODULE_2__.ReturnFormat.VALUE_ONLY,\n    properties: properties\n  });\n  const resizeGridOverlay = () => {\n    if (!toggled || !box.current || !container.current) return;\n    const styling = getComputedStyle(box.current);\n    container.current.style.setProperty('grid-template-rows', styling.gridTemplateRows);\n    container.current.style.setProperty('grid-template-columns', styling.gridTemplateColumns);\n    positionGridOverlay();\n  };\n  const renderGridOverlay = (values = {}) => {\n    if (!toggled || !box.current || !container.current) return;\n    const styling = getComputedStyle(box.current);\n    const rows = styling.gridTemplateRows.split(' ').length;\n    const columns = styling.gridTemplateColumns.split(' ').length;\n    Object.keys(values).forEach(key => {\n      container.current.style.setProperty(key, values[key]);\n    });\n    positionGridOverlay();\n    root.current.render(Array.from({\n      length: rows * columns\n    }).map((_, index) => /*#__PURE__*/React.createElement(\"div\", {\n      key: index,\n      className: _style_module_css__WEBPACK_IMPORTED_MODULE_3__.item\n    })));\n  };\n  const positionGridOverlay = () => {\n    if (!toggled || !box.current || !container.current) return;\n    const rectangle = box.current.getBoundingClientRect();\n    if (rectangle.top === 0 && rectangle.left === 0) {\n      observer.unobserve();\n      setTimeout(() => {\n        box.current = document.querySelector(`.fl-module-box.fl-node-${id}`);\n        box.current.classList.add(_style_module_css__WEBPACK_IMPORTED_MODULE_3__.box);\n        observer.observe(box.current);\n        positionGridOverlay();\n      }, 100);\n    } else {\n      container.current.style.width = `${rectangle.width}px`;\n      container.current.style.height = `${rectangle.height}px`;\n      container.current.style.top = `${rectangle.top + scrollY}px`;\n      container.current.style.left = `${rectangle.left + scrollX}px`;\n    }\n  };\n  const setupGridOverlay = () => {\n    box.current = document.querySelector(`.fl-module-box.fl-node-${id}`);\n    box.current.classList.add(_style_module_css__WEBPACK_IMPORTED_MODULE_3__.box);\n    container.current = document.createElement('div');\n    container.current.classList.add(_style_module_css__WEBPACK_IMPORTED_MODULE_3__.container);\n    document.body.appendChild(container.current);\n    addEventListener('resize', resizeGridOverlay);\n    root.current = (0,react_dom__WEBPACK_IMPORTED_MODULE_0__.createRoot)(container.current);\n    observer.observe(box.current);\n    renderGridOverlay();\n  };\n  const clearGridOverlay = () => {\n    observer.unobserve();\n    removeEventListener('resize', resizeGridOverlay);\n    if (box.current) {\n      box.current.classList.remove(_style_module_css__WEBPACK_IMPORTED_MODULE_3__.box);\n      box.current = null;\n    }\n    if (container.current) {\n      document.body.removeChild(container.current);\n      container.current = null;\n    }\n  };\n  (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n    toggled ? setupGridOverlay() : clearGridOverlay();\n    return () => clearGridOverlay();\n  }, [toggled]);\n  (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n    FLBuilder.addHook('setupGridOverlay', (_, id) => setId(id));\n    FLBuilder.addHook('toggleGridOverlay', (_, toggled) => setToggled(toggled));\n    FLBuilder.addHook('settings-lightbox-closed', () => setToggled(false));\n    return () => {\n      FLBuilder.removeHook('setupGridOverlay');\n      FLBuilder.removeHook('toggleGridOverlay');\n      FLBuilder.removeHook('settings-lightbox-closed');\n      // Make sure root.current is not null, fixes non iframe mode undefined var\n      if (null !== root.current) {\n        root.current.unmount();\n      }\n    };\n  }, []);\n  return null;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GridOverlay);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/grid-overlay/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/grid-overlay/style.module.css":
/*!****************************************************************!*\
  !*** ./src/FL/Builder/system/ui/grid-overlay/style.module.css ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   box: () => (/* binding */ _1),\n/* harmony export */   container: () => (/* binding */ _2),\n/* harmony export */   item: () => (/* binding */ _3)\n/* harmony export */ });\n// extracted by mini-css-extract-plugin\nvar _1 = \"jQoGXlWOqNtsHH5oBvUb\";\nvar _2 = \"mxDLEjx1nz9fBCp5iFSQ\";\nvar _3 = \"zILN2kmO9oC_Gy0JkVvp\";\n\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/grid-overlay/style.module.css?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/i18n/index.js":
/*!************************************************!*\
  !*** ./src/FL/Builder/system/ui/i18n/index.js ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   __: () => (/* binding */ __)\n/* harmony export */ });\n/**\n * @since 2.8\n * @param {String} string\n * @return {String}\n */\nfunction __(string) {\n  if (typeof window.parent.FLBuilderStrings === 'undefined') {\n    return string;\n  }\n  var strings = window.parent.FLBuilderStrings.i18n;\n  if (typeof strings[string] !== 'undefined') {\n    return strings[string];\n  } else {\n    console.warn('No translation found for \"' + string + '\" Please add string to FLBuilderStrings.i18n object in includes/ui-js-config.php');\n    return string;\n  }\n}\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/i18n/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/index.js":
/*!*******************************************!*\
  !*** ./src/FL/Builder/system/ui/index.js ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */   registerPanels: () => (/* binding */ registerPanels)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _context_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context-menu */ \"./src/FL/Builder/system/ui/context-menu/index.js\");\n/* harmony import */ var _notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./notifications */ \"./src/FL/Builder/system/ui/notifications/index.js\");\n/* harmony import */ var _inline_editor__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./inline-editor */ \"./src/FL/Builder/system/ui/inline-editor/index.js\");\n/* harmony import */ var _shortcuts_panel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shortcuts-panel */ \"./src/FL/Builder/system/ui/shortcuts-panel/index.js\");\n/* harmony import */ var _art__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./art */ \"./src/FL/Builder/system/ui/art/index.js\");\n/* harmony import */ var _outline_panel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./outline-panel */ \"./src/FL/Builder/system/ui/outline-panel/index.js\");\n/* harmony import */ var _panel_manager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./panel-manager */ \"./src/FL/Builder/system/ui/panel-manager/index.js\");\n/* harmony import */ var _color_scheme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./color-scheme */ \"./src/FL/Builder/system/ui/color-scheme/index.js\");\n/* harmony import */ var _module_layout_selector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./module-layout-selector */ \"./src/FL/Builder/system/ui/module-layout-selector/index.js\");\n/* harmony import */ var _grid_overlay__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./grid-overlay */ \"./src/FL/Builder/system/ui/grid-overlay/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/style.scss\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Builder React-based UI Root\n *\n * Gets rendered onto the page and remains.\n */\nconst BeaverBuilderUI = () => {\n  const {\n    isEditing,\n    shouldShowShortcuts\n  } = (0,data__WEBPACK_IMPORTED_MODULE_2__.useSystemState)();\n  const colorScheme = (0,_color_scheme__WEBPACK_IMPORTED_MODULE_10__.useColorScheme)();\n  const wrap = classnames__WEBPACK_IMPORTED_MODULE_1___default()({\n    [`fluid-color-scheme-${colorScheme}`]: colorScheme\n  });\n  const {\n    FormsManager\n  } = FL.Builder.settingsForms;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: wrap\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context_menu__WEBPACK_IMPORTED_MODULE_3__.ContextMenuProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_inline_editor__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_module_layout_selector__WEBPACK_IMPORTED_MODULE_11__.ModuleLayoutSelector, null), isEditing && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_art__WEBPACK_IMPORTED_MODULE_7__.SVGSymbols, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_notifications__WEBPACK_IMPORTED_MODULE_4__.NotificationsManager, null), shouldShowShortcuts && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_shortcuts_panel__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_manager__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(FormsManager, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_grid_overlay__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null))));\n};\nconst registerPanels = () => {\n  const {\n    showOutlinePanel = true,\n    unrestricted = true\n  } = (0,data__WEBPACK_IMPORTED_MODULE_2__.getSystemConfig)();\n  if (showOutlinePanel && unrestricted) {\n    (0,_outline_panel__WEBPACK_IMPORTED_MODULE_8__.registerOutlinePanel)();\n  }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BeaverBuilderUI);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/inline-editor/index.js":
/*!*********************************************************!*\
  !*** ./src/FL/Builder/system/ui/inline-editor/index.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dompurify */ \"./node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/inline-editor/style.scss\");\n\n\n\n\n/**\n * Handles inline editing for builder layouts.\n *\n * @since 2.1\n * @class InlineEditor\n */\nclass InlineEditor extends react__WEBPACK_IMPORTED_MODULE_0__.Component {\n  constructor(props) {\n    super(props);\n    const {\n      postId\n    } = this.props;\n    this.layoutClass = `.fl-builder-content-${postId ? postId : FLBuilderConfig.postId}`;\n  }\n  componentDidMount() {\n    this.setupHooks = this.setupHooks.bind(this);\n    this.hooked = false;\n    jQuery(document).on('tinymce-editor-init', this.setupHooks);\n    this.setupHooks();\n  }\n  setupHooks() {\n    if ('ontouchstart' in document) {\n      return;\n    }\n    if (!window.tinymce || this.hooked || !FLBuilderConfig.inlineEnabled) {\n      return;\n    }\n    const initEditables = this.initEditables.bind(this);\n    const refreshEditables = this.refreshEditables.bind(this);\n\n    //const destroyEditables = this.destroyEditables.bind( this )\n    const destroyAllEditables = this.destroyAllEditables.bind(this);\n    const destroyLoadingEditables = this.destroyLoadingEditables.bind(this);\n    if (FLBuilder) {\n      // Init actions\n      FLBuilder.addHook('settingsConfigLoaded', initEditables);\n      FLBuilder.addHook('restartEditingSession', initEditables);\n\n      // Destroy actions\n      FLBuilder.addHook('endEditingSession', destroyAllEditables);\n      FLBuilder.addHook('didStartNodeLoading', destroyLoadingEditables);\n\n      // Refresh actions\n      FLBuilder.addHook('didRenderLayoutComplete', refreshEditables);\n      FLBuilder.addHook('didDeleteRow', refreshEditables);\n      FLBuilder.addHook('didDeleteColumn', refreshEditables);\n      FLBuilder.addHook('didDeleteModule', refreshEditables);\n    }\n    this.initEditables();\n    this.hooked = true;\n  }\n  initEditables() {\n    const {\n      editables\n    } = FLBuilderSettingsConfig;\n    const content = jQuery(this.layoutClass);\n    if (content.length) {\n      for (const key in editables) {\n        const selector = `.fl-module[data-type=\"${key}\"]:not(.fl-editable):not(.fl-node-global)`;\n        content.find(selector).each((index, module) => {\n          module = jQuery(module);\n          const nodeId = module.data('node');\n\n          // Don't setup inline editing when more than one of the same\n          // module is present (e.g. as in Loop modules).\n          if (1 < jQuery(`[data-node=\"${nodeId}\"]`).length) {\n            return;\n          }\n          module.addClass('fl-editable');\n          module.on('click.fl-inline-editing-init', e => this.initEditable(e, module));\n        });\n      }\n    }\n  }\n  initEditable(e, module) {\n    const {\n      preview\n    } = FLBuilder;\n\n    // Don't setup if we have a parent that needs to save.\n    if (preview) {\n      const isParent = module.parents(`.fl-node-${preview.nodeId}`).length;\n      if (isParent && preview._settingsHaveChanged()) {\n        return;\n      }\n    }\n    this.setupEditable(module, () => {\n      this.onModuleOverlayClick(e);\n    });\n    module.off('click.fl-inline-editing-init');\n  }\n  setupEditable(module, callback = () => {}) {\n    const nodeId = module.data('node');\n    const settings = FLBuilderSettingsConfig.nodes[nodeId];\n    if ('undefined' === typeof settings) {\n      return false;\n    }\n    const type = module.data('type');\n    const config = FLBuilderSettingsConfig.editables[type];\n    const nodeClass = `.fl-node-${nodeId}`;\n    const editorId = `fl-inline-editor-${nodeId}`;\n    const editorOverlay = jQuery(`<div id=\"${editorId}\" class=\"fl-inline-editor\"></div>`);\n    const overlay = module.find('.fl-block-overlay');\n    const form = jQuery(`.fl-builder-settings[data-node=${nodeId}]`);\n    const {\n      connections\n    } = settings;\n    module.append(editorOverlay);\n    module.on('click', this.onModuleOverlayClick.bind(this));\n    module.on('mouseleave', this.onModuleMouseleave.bind(this));\n    for (const key in config) {\n      const data = config[key];\n      const selector = FLBuilderPreview.getFormattedSelector(nodeClass, data.selector);\n      const connection = form.find(`#fl-field-${key} .fl-field-connection-value`);\n      let editable = jQuery(selector).eq(0);\n      let editableHTML = editable.html();\n      if (!editable.length) {\n        continue;\n      } else if (connection.length && '' !== connection.val()) {\n        continue;\n      } else if (!connection.length && connections && connections[key]) {\n        continue;\n      }\n\n      // Support for modules without wrappers that have editable text as\n      // their main content. In the future, the overlays should be rendered\n      // outside of the module so we don't have to do this.\n      if (editable.hasClass('fl-module')) {\n        const clone = editable.clone();\n        const tag = 'editor' === data.field.type ? 'div' : 'span';\n        clone.find('.fl-block-overlay, .fl-inline-editor').remove();\n        editableHTML = clone.html();\n        editable.html('');\n        editable.append(overlay);\n        editable.append(editorOverlay);\n        editable.append(`<${tag} class=\"fl-inline-editor-content\">${editableHTML}</${tag}>`);\n        editable = editable.find('.fl-inline-editor-content');\n      }\n      if (editable.hasClass('mce-content-body')) {\n        tinymce.execCommand('mceRemoveEditor', true, editable.attr('id'));\n      } else {\n        editable.data('field', data.field);\n        editable.on('drop', this.onEditorDrop.bind(this));\n      }\n      tinymce.init({\n        target: editable[0],\n        inline: true,\n        menubar: false,\n        paste_as_text: true,\n        relative_urls: false,\n        convert_urls: false,\n        skin: FLBuilder ? false : 'lightgray',\n        skin_url: FLBuilder ? false : `${tinyMCEPreInit.baseURL}/skins/lightgray/`,\n        theme: 'modern',\n        theme_url: `${tinyMCEPreInit.baseURL}/themes/modern/`,\n        fixed_toolbar_container: `#${editorId}`,\n        plugins: this.getEditorPluginConfig(data.field.type),\n        toolbar: 'string' === typeof data.field.toolbar ? data.field.toolbar : this.getEditorToolbarConfig(data.field.type),\n        init_instance_callback: editor => {\n          this.onEditorInit(editor);\n\n          /**\n           * TinyMCE can change the editable's HTML which changes the visual\n           * appearance. To prevent this from happening, we reinsert the original\n           * HTML after the editable has been initialized.\n           */\n          if (!editable.find('.fl-builder-shortcode-mask-wrap').length) {\n            editable.html(editableHTML);\n          }\n          callback();\n        }\n      });\n    }\n  }\n  getEditorPluginConfig(type) {\n    switch (type) {\n      case 'editor':\n        return 'wordpress, wplink, lists, paste';\n      default:\n        return 'paste';\n    }\n  }\n  getEditorToolbarConfig(type) {\n    switch (type) {\n      case 'editor':\n        return 'bold italic strikethrough link underline | alignleft aligncenter alignright';\n      case 'unit':\n        return false;\n      default:\n        return 'bold italic strikethrough underline';\n    }\n  }\n  destroyEditables(modules) {\n    const editables = modules.find('.mce-content-body');\n    const overlays = modules.find('.fl-inline-editor');\n    const extras = jQuery('.wplink-autocomplete, .ui-helper-hidden-accessible');\n    editables.removeAttr('contenteditable');\n    modules.off('click');\n    modules.off('mouseleave');\n    modules.removeClass('fl-editable');\n    overlays.remove();\n    extras.remove();\n  }\n  destroyAllEditables() {\n    const content = jQuery(this.layoutClass);\n    const modules = content.find('.fl-editable');\n    this.destroyEditables(modules);\n  }\n  destroyLoadingEditables(e, node) {\n    let modules = jQuery(node);\n    if (!modules.hasClass('fl-module')) {\n      modules = modules.find('.fl-module');\n    }\n    this.destroyEditables(modules);\n  }\n  refreshEditables() {\n    this.initEditables();\n    tinymce.editors.map(editor => {\n      if (editor.inline && !jQuery(`#${editor.id}`).length) {\n        setTimeout(() => tinymce.execCommand('mceRemoveEditor', true, editor.id), 1);\n      }\n    });\n  }\n  getEditorEventVars(target) {\n    const editable = jQuery(target).closest('.mce-content-body');\n    const editor = tinymce.get(editable.attr('id'));\n    const field = editable.data('field');\n    const module = editable.closest('.fl-module');\n    const nodeId = module.data('node');\n    return {\n      editable,\n      module,\n      editor,\n      field,\n      nodeId\n    };\n  }\n  onEditorInit(editor) {\n    editor.on('change', this.onEditorChange.bind(this));\n    editor.on('keyup', this.onEditorChange.bind(this));\n    editor.on('undo', this.onEditorChange.bind(this));\n    editor.on('redo', this.onEditorChange.bind(this));\n    editor.on('focus', this.onEditorFocus.bind(this));\n    editor.on('blur', this.onEditorBlur.bind(this));\n    editor.on('mousedown', this.onEditorMousedown.bind(this));\n  }\n  onEditorChange(e) {\n    const target = e.target.bodyElement ? e.target.bodyElement : e.target;\n    const {\n      editor,\n      field,\n      nodeId\n    } = this.getEditorEventVars(target);\n    const settings = jQuery(`.fl-builder-settings[data-node=\"${nodeId}\"]`);\n    const content = editor.getContent();\n    if (!settings.length || !field) {\n      return;\n    } else if ('editor' === field.type) {\n      const textarea = settings.find(`#fl-field-${field.name} textarea.wp-editor-area`);\n      const editorId = textarea.attr('id');\n      if (textarea.closest('.tmce-active').length) {\n        window.parent.tinymce.get(editorId).setContent(content);\n      } else {\n        textarea.val(content);\n      }\n    } else {\n      const textarea = document.createElement('textarea');\n      textarea.innerHTML = content;\n      const cleaned = dompurify__WEBPACK_IMPORTED_MODULE_1___default().sanitize(textarea.value);\n      settings.find(`[name=\"${field.name}\"]`).val(cleaned);\n    }\n  }\n  onEditorFocus(e) {\n    const {\n      editable,\n      editor,\n      module,\n      field,\n      nodeId\n    } = this.getEditorEventVars(e.target.bodyElement);\n    const overlay = module.find('.fl-inline-editor');\n    const settingHTML = this.getSettingHTML(nodeId, field);\n    if (!this.matchHTML(editor.getContent(), settingHTML)) {\n      editable.data('original', {\n        settingHTML,\n        editableHTML: editable.html()\n      });\n      editable.css('min-height', editable.height());\n      editor.setContent(settingHTML);\n      editor.selection.select(editor.getBody(), true);\n      editor.selection.collapse(false);\n    }\n    if (editor.settings.toolbar) {\n      overlay.removeClass('fl-inline-editor-no-toolbar');\n    } else {\n      overlay.addClass('fl-inline-editor-no-toolbar');\n    }\n    module.addClass('fl-editable-focused');\n    this.showEditorOverlay(module);\n    this.showModuleSettings(module);\n  }\n  onEditorBlur(e) {\n    const {\n      editable,\n      editor,\n      module\n    } = this.getEditorEventVars(e.target.bodyElement);\n    const overlay = module.find('.fl-inline-editor');\n    const original = editable.data('original');\n    overlay.removeClass('fl-inline-editor-no-toolbar');\n    module.removeClass('fl-editable-focused');\n    if (original && this.matchHTML(editor.getContent(), original.settingHTML)) {\n      editable.html(original.editableHTML);\n      editable.css('min-height', '');\n    }\n  }\n  onEditorMousedown(e) {\n    const {\n      module\n    } = this.getEditorEventVars(e.target);\n    this.showEditorOverlay(module);\n  }\n  onEditorDrop(e) {\n    e.preventDefault();\n    return false;\n  }\n  onModuleOverlayClick(e) {\n    const actions = jQuery(e.target).closest('.fl-block-overlay-actions');\n    const module = jQuery(e.currentTarget).closest('.fl-module');\n    const editorId = module.find('.mce-content-body').first().attr('id');\n    if (actions.length || FLBuilder._colResizing) {\n      return;\n    }\n    if (editorId) {\n      tinymce.get(editorId).focus();\n      module.addClass('fl-editable-focused');\n    } else {\n      this.setupEditable(module, () => {\n        this.onModuleOverlayClick(e);\n      });\n    }\n  }\n  onModuleMouseleave() {\n    const panels = jQuery('.mce-inline-toolbar-grp:visible, .mce-floatpanel:visible');\n    if (!panels.length) {\n      this.hideEditorOverlays();\n      this.showNodeOverlays();\n    }\n  }\n  showEditorOverlay(module) {\n    const overlay = module.find('.fl-inline-editor');\n    this.hideNodeOverlays();\n    this.hideEditorOverlays();\n    overlay.show();\n    const active = jQuery('.fl-inline-editor-active-toolbar');\n    active.removeClass('fl-inline-editor-active-toolbar');\n    const toolbar = overlay.find('> .mce-panel:visible');\n    toolbar.addClass('fl-inline-editor-active-toolbar');\n  }\n  hideEditorOverlays() {\n    jQuery('.fl-inline-editor, .mce-floatpanel').hide();\n  }\n  showNodeOverlays() {\n    jQuery('.fl-block-overlay').show();\n  }\n  hideNodeOverlays() {\n    jQuery('.fl-block-overlay').hide();\n  }\n  showModuleSettings(module) {\n    const type = module.data('type');\n    const nodeId = module.data('node');\n    const parentId = module.parents('.fl-module, .fl-col').data('node');\n    const global = module.hasClass('fl-node-global');\n    const settings = jQuery(`.fl-builder-settings[data-node=\"${nodeId}\"]`);\n    if (!settings.length && FLBuilderConfig.postType !== 'fl-builder-template') {\n      FLBuilder._showModuleSettings({\n        type,\n        nodeId,\n        parentId,\n        global\n      });\n    }\n  }\n  getSettingValue(nodeId, name) {\n    const form = jQuery(`.fl-builder-settings[data-node=\"${nodeId}\"]`);\n    let settings = {};\n    if (form.length) {\n      settings = FLBuilder._getSettings(form);\n    } else {\n      settings = FLBuilderSettingsConfig.nodes[nodeId];\n    }\n    return settings[name];\n  }\n  getSettingHTML(nodeId, field) {\n    const html = this.getSettingValue(nodeId, field.name);\n    if ('editor' === field.type && '' !== html) {\n      return wp.editor.autop(html);\n    }\n    return html;\n  }\n  matchHTML(a, b) {\n    return this.cleanHTML(a) === this.cleanHTML(b);\n  }\n  cleanHTML(html) {\n    const re = /(\\r\\n|\\n|\\r)/gm;\n    return jQuery(`<div>${html}</div>`).html().trim().replace(re, '');\n  }\n  render() {\n    return null;\n  }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InlineEditor);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/inline-editor/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/inline-editor/style.scss":
/*!***********************************************************!*\
  !*** ./src/FL/Builder/system/ui/inline-editor/style.scss ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/inline-editor/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/module-layout-selector/index.js":
/*!******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/module-layout-selector/index.js ***!
  \******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ModuleLayoutSelector: () => (/* binding */ ModuleLayoutSelector)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/module-layout-selector/style.scss\");\n\n\n\nconst ModuleLayoutSelector = () => {\n  const [instances, setInstances] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n  const [selectedAliases, setSelectedAliases] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n  const {\n    inlineModuleAliases: aliases\n  } = FLBuilderConfig;\n  const createLayoutSelectorRoot = module => {\n    const rootEle = document.createElement('div');\n    rootEle.classList.add('fl-module-layout-selector-root');\n    module.find('> :not(.fl-drop-target)').remove();\n    module[0].appendChild(rootEle);\n    return (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createRoot)(rootEle);\n  };\n  const setupLayoutSelectors = () => {\n    jQuery('.fl-module').each(function () {\n      const module = jQuery(this);\n      const nodeId = module.data('node');\n      const type = module.data('type');\n      if (!module.data('accepts') || !aliases[type]) {\n        return;\n      }\n      const hasModules = !!module.find('.fl-module').length;\n      const hasLoader = !!module.find('> .fl-builder-node-loading-placeholder').length;\n      const isLoading = module.hasClass('fl-builder-node-loading');\n      const shouldRender = !hasModules && !hasLoader && !isLoading && !selectedAliases[nodeId];\n      if (!instances[nodeId] && shouldRender) {\n        instances[nodeId] = createLayoutSelectorRoot(module);\n        instances[nodeId].render(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ModuleLayoutSelectorUI, {\n          setupLayoutSelectors: setupLayoutSelectors,\n          setSelectedAlias: setSelectedAlias,\n          module: module,\n          nodeId: nodeId,\n          title: module.data('name'),\n          options: aliases[type]\n        }));\n      } else if (instances[nodeId] && !shouldRender) {\n        instances[nodeId].unmount();\n        delete instances[nodeId];\n      }\n    });\n    setInstances({\n      ...instances\n    });\n  };\n  const setSelectedAlias = (nodeId, alias) => {\n    if (!alias) {\n      delete selectedAliases[nodeId];\n    } else {\n      selectedAliases[nodeId] = alias;\n    }\n    setSelectedAliases({\n      ...selectedAliases\n    });\n  };\n  const clearSelectedAliasOnDeleteModule = (e, {\n    parentId\n  }) => {\n    const node = jQuery(`.fl-node-${parentId}`);\n    const hasModules = !!node.find('.fl-module').length;\n    if (!hasModules && selectedAliases[parentId]) {\n      delete selectedAliases[parentId];\n      setSelectedAliases({\n        ...selectedAliases\n      });\n      setupLayoutSelectors();\n    }\n  };\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    FLBuilder.addHook('didInitUI', setupLayoutSelectors);\n    FLBuilder.addHook('didDropModule', setupLayoutSelectors);\n    FLBuilder.addHook('didStartNodeLoading', setupLayoutSelectors);\n    FLBuilder.addHook('didRenderLayoutComplete', setupLayoutSelectors);\n    FLBuilder.addHook('didDeleteModule', setupLayoutSelectors);\n    FLBuilder.addHook('didDeleteModule', clearSelectedAliasOnDeleteModule);\n    return () => {\n      FLBuilder.removeHook('didInitUI', setupLayoutSelectors);\n      FLBuilder.removeHook('didDropModule', setupLayoutSelectors);\n      FLBuilder.removeHook('didStartNodeLoading', setupLayoutSelectors);\n      FLBuilder.removeHook('didRenderLayoutComplete', setupLayoutSelectors);\n      FLBuilder.removeHook('didDeleteModule', setupLayoutSelectors);\n      FLBuilder.removeHook('didDeleteModule', clearSelectedAliasOnDeleteModule);\n    };\n  }, [selectedAliases]);\n  return null;\n};\nconst ModuleLayoutSelectorUI = ({\n  setupLayoutSelectors,\n  setSelectedAlias,\n  module,\n  nodeId,\n  title,\n  options\n}) => {\n  const applyAlias = alias => {\n    const {\n      applyModuleAlias\n    } = FL.Builder.data.getLayoutActions();\n    const form = jQuery(`.fl-builder-settings[data-node=\"${nodeId}\"]`);\n    const formSettings = form.length ? FLBuilder._getSettings(form) : null;\n    FLBuilder._showNodeLoadingPlaceholder(module, 0);\n    setSelectedAlias(nodeId, alias);\n    setupLayoutSelectors();\n    applyModuleAlias(nodeId, alias, formSettings, response => {\n      const {\n        layout,\n        nodeId,\n        settings\n      } = FLBuilder._jsonParse(response);\n      FLBuilder._renderLayout(layout);\n      FLBuilderSettingsConfig.updateNode(nodeId, settings);\n      FLBuilderSettingsForms.reRenderNodeSettings(nodeId, settings);\n    });\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-module-layout-selector\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-module-layout-selector-title\"\n  }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-module-layout-selector-message\"\n  }, \"Select a layout to get started.\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-module-layout-selector-options\"\n  }, options.map(({\n    name,\n    alias,\n    icon\n  }, i) => {\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-module-layout-selector-option\",\n      key: i,\n      onClick: () => applyAlias(alias)\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-module-layout-selector-option-icon\",\n      dangerouslySetInnerHTML: {\n        __html: icon\n      }\n    }), name);\n  })));\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/module-layout-selector/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/module-layout-selector/style.scss":
/*!********************************************************************!*\
  !*** ./src/FL/Builder/system/ui/module-layout-selector/style.scss ***!
  \********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/module-layout-selector/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/notifications/index.js":
/*!*********************************************************!*\
  !*** ./src/FL/Builder/system/ui/notifications/index.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   NotificationsManager: () => (/* binding */ NotificationsManager)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/notifications/style.scss\");\n\n\n\nconst renderHTML = rawHTML => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement('div', {\n  dangerouslySetInnerHTML: {\n    __html: rawHTML\n  }\n});\nconst lite = FLBuilderConfig.lite;\nconst Post = props => {\n  let html = {\n      __html: props.children\n    },\n    date = new Date(props.date).toDateString();\n  let post;\n  if ('string' === typeof props.url && '' !== props.url) {\n    const url = lite ? props.url + '?utm_medium=bb-lite&utm_source=builder-ui&utm_campaign=notification-center' : props.url + '?utm_medium=bb-pro&utm_source=builder-ui&utm_campaign=notification-center';\n    post = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n      className: \"fl-builder-ui-post\",\n      href: url,\n      target: \"_blank\",\n      rel: \"noopener noreferrer\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-date\"\n    }, date), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-title\"\n    }, props.title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-content\",\n      dangerouslySetInnerHTML: html\n    }));\n  } else {\n    post = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"fl-builder-ui-post\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-date\"\n    }, date), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-title\"\n    }, props.title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-builder-ui-post-content\",\n      dangerouslySetInnerHTML: html\n    }));\n  }\n  return post;\n};\n\n/**\n * Notifications Sidebar Panel\n * Displayed when toggleNotifications hook is fired\n */\nclass NotificationsPanel extends react__WEBPACK_IMPORTED_MODULE_0__.Component {\n  getPosts(posts) {\n    let view,\n      renderedPosts,\n      strings = FLBuilderStrings.notifications;\n    if (0 < posts.length) {\n      renderedPosts = posts.map(item => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Post, {\n        key: item.id,\n        title: renderHTML(item.title.rendered),\n        date: item.date,\n        url: item.meta._fl_notification[0]\n      }, item.content.rendered));\n      view = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, renderedPosts);\n    } else {\n      view = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n        className: \"fl-panel-no-message\",\n        style: {\n          padding: '20px'\n        }\n      }, strings.none);\n    }\n    return view;\n  }\n  componentDidMount() {\n    FLBuilder._initScrollbars();\n  }\n  componentDidUpdate() {\n    FLBuilder._initScrollbars();\n  }\n  render() {\n    const content = this.getPosts(this.props.posts),\n      strings = FLBuilderStrings.notifications;\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-notifications-panel\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-panel-title\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      class: \"back-menu\"\n    }, \"\\u2190\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      style: {\n        padding: '10px'\n      }\n    }, renderHTML(strings.title))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-nanoscroller\",\n      ref: this.setupScroller\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-nanoscroller-content\"\n    }, content)));\n  }\n}\n\n/**\n* Non-UI Manager Object. Handles state for the notifications system\n*/\nclass NotificationsManager extends react__WEBPACK_IMPORTED_MODULE_0__.Component {\n  constructor(props) {\n    super(props);\n    let out = {};\n    const {\n      data\n    } = FLBuilderConfig.notifications;\n\n    // make sure we have valid json.\n    try {\n      out = JSON.parse(data);\n    } catch (e) {\n      out = {};\n    }\n    this.state = {\n      shouldShowNotifications: false,\n      posts: out.length > 0 ? out.slice(0, 5) : []\n    };\n    FLBuilder.addHook('toggleNotifications', this.onToggleNotifications.bind(this));\n  }\n  onToggleNotifications() {\n    const {\n      hideCurrentPanel\n    } = (0,data__WEBPACK_IMPORTED_MODULE_1__.getSystemActions)();\n    this.setState({\n      shouldShowNotifications: !this.state.shouldShowNotifications\n    });\n    hideCurrentPanel();\n    if (true === this.state.shouldShowNotifications) {\n      FLBuilder.triggerHook('notificationsLoaded');\n    }\n  }\n  render() {\n    const {\n      shouldShowNotifications,\n      posts\n    } = this.state;\n    return shouldShowNotifications && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(NotificationsPanel, {\n      posts: posts\n    });\n  }\n}\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/notifications/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/notifications/style.scss":
/*!***********************************************************!*\
  !*** ./src/FL/Builder/system/ui/notifications/style.scss ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/notifications/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/index.js":
/*!*********************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/index.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   registerOutlinePanel: () => (/* binding */ registerOutlinePanel)\n/* harmony export */ });\n/* harmony import */ var _outline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./outline */ \"./src/FL/Builder/system/ui/outline-panel/outline/index.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n */ \"./src/FL/Builder/system/ui/i18n/index.js\");\n/* harmony import */ var _outline_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./outline/storage */ \"./src/FL/Builder/system/ui/outline-panel/outline/storage.js\");\n\n\n\nconst registerOutlinePanel = () => {\n  const {\n    registerPanel,\n    togglePanel\n  } = window.FL.Builder;\n  registerPanel('outline', {\n    label: (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Outline'),\n    render: _outline__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n    // legacy\n    root: _outline__WEBPACK_IMPORTED_MODULE_0__[\"default\"] // asst compat branch changes to root\n  });\n  FLBuilder.addHook('didInitUI', () => {\n    const actions = window.parent.document.querySelector('.fl-builder-bar-actions');\n    const saving = actions.querySelector('.fl-builder--saving-indicator');\n    const btn = document.createElement('button');\n    btn.classList.add('fl-builder-button', 'fl-builder-button-silent');\n    btn.innerHTML = '<svg width=\"20\" height=\"20\"><use href=\"#fl-outline-list-icon\" /></svg>';\n    btn.onclick = () => {\n      togglePanel('outline');\n      const collapse = (0,_outline_storage__WEBPACK_IMPORTED_MODULE_2__.getStorageItem)('collapse');\n      (0,_outline_storage__WEBPACK_IMPORTED_MODULE_2__.setStorage)(false, !collapse, true, false);\n    };\n    btn.title = (0,_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Outline');\n    actions.insertBefore(btn, saving);\n  });\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/context.js":
/*!*******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/context.js ***!
  \*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst OutlineContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nOutlineContext.use = () => (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(OutlineContext);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OutlineContext);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/context.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/index.js":
/*!*****************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/index.js ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var ui_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/i18n */ \"./src/FL/Builder/system/ui/i18n/index.js\");\n/* harmony import */ var ui_context_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/context-menu */ \"./src/FL/Builder/system/ui/context-menu/index.js\");\n/* harmony import */ var api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! api */ \"./src/FL/Builder/system/api/index.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var data_layout_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! data/layout/utils */ \"./src/FL/Builder/system/data/layout/utils/index.js\");\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./context */ \"./src/FL/Builder/system/ui/outline-panel/outline/context.js\");\n/* harmony import */ var _tiny_icons__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tiny-icons */ \"./src/FL/Builder/system/ui/outline-panel/outline/tiny-icons/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ \"./src/FL/Builder/system/ui/outline-panel/outline/utils/index.js\");\n/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./storage */ \"./src/FL/Builder/system/ui/outline-panel/outline/storage.js\");\n/* harmony import */ var _label_form_index__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./label-form/index */ \"./src/FL/Builder/system/ui/outline-panel/outline/label-form/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/outline-panel/outline/style.scss\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Root Outline Component\n */\nconst Outline = () => {\n  const {\n    togglePanel\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getSystemActions)();\n  const [searchQuery, setSearchQuery] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');\n\n  /**\n   * Get the top-level nodes to map over\n   */\n  const {\n    useNodesWithoutSettings\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutHooks)();\n  const topLevelNodes = useNodesWithoutSettings(null);\n  const nodes = Object.values(topLevelNodes).sort(data_layout_utils__WEBPACK_IMPORTED_MODULE_6__.sortNodes);\n\n  /**\n   * Keep track of any node being dragged currently.\n   */\n  const [draggingItem, setDraggingItem] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const isDraggingItem = false !== draggingItem;\n  const [isMenuOpen, setMenuOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const [isSearchOpen, setIsSearchOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  let shortcutState = false;\n\n  /**\n   * Expose dragging item via OutlineContext\n   */\n  const context = {\n    draggingItem,\n    isDraggingItem,\n    clearDraggingItem: () => setDraggingItem(false),\n    setDraggingItem: item => setDraggingItem(item)\n  };\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()('fl-builder-node-outline', {\n    'is-dragging': isDraggingItem,\n    [`is-dragging-type-${draggingItem.type}`]: draggingItem\n  });\n  const toggleMenu = () => {\n    setMenuOpen(!isMenuOpen);\n  };\n  const toggleAll = val => {\n    setMenuOpen(!isMenuOpen);\n    (0,_storage__WEBPACK_IMPORTED_MODULE_10__.setStorage)(false, val);\n  };\n  const searchFilter = val => {\n    setSearchQuery(val);\n    (0,_storage__WEBPACK_IMPORTED_MODULE_10__.setSearch)(val);\n  };\n  const searchToggle = () => {\n    setIsSearchOpen(!isSearchOpen);\n  };\n  const clearSearch = () => {\n    setSearchQuery('');\n    (0,_storage__WEBPACK_IMPORTED_MODULE_10__.setSearch)('');\n  };\n  const toggleAllShortcut = () => {\n    shortcutState = !shortcutState;\n    (0,_storage__WEBPACK_IMPORTED_MODULE_10__.setStorage)(false, shortcutState);\n  };\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    FLBuilder.addHook('toggleOutlinePanelItems', toggleAllShortcut);\n    return () => {\n      FLBuilder.removeHook('toggleOutlinePanelItems', toggleAllShortcut);\n    };\n  }, []);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_context__WEBPACK_IMPORTED_MODULE_7__[\"default\"].Provider, {\n    value: context\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-builder-outline-header\"\n  }, !isSearchOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"h1\", null, \"Outline\"), isSearchOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"input\", {\n    type: \"text\",\n    placeholder: (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Search'),\n    value: searchQuery,\n    onChange: e => {\n      searchFilter(e.target.value);\n    },\n    autoFocus: true\n  }), !isSearchOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: \"fl-builder-outline-search-button\",\n    onClick: searchToggle\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SearchIcon, null)), isSearchOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: \"fl-builder-outline-search-button\",\n    onClick: () => {\n      searchToggle();\n      if (searchQuery) {\n        clearSearch();\n      }\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CloseIcon, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-builder-outline-menu\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: \"fl-builder-outline-menu-button\",\n    onClick: toggleMenu\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MoreIcon, null)), isMenuOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-builder-outline-menu-dropdown\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: \"fl-builder--menu-item\",\n    onClick: () => toggleAll(true)\n  }, FLBuilderStrings.expand_all), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: \"fl-builder--menu-item\",\n    onClick: () => toggleAll(false)\n  }, FLBuilderStrings.collapse_all)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n    className: classes\n  }, nodes.map((node, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Item, _extends({\n    key: node.node,\n    level: 1,\n    index: i\n  }, node))), !nodes.length && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n    className: \"fl-builder-outline-no-content\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('No content found'), \". \"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"a\", {\n    onClick: () => {\n      togglePanel('outline');\n      FLBuilder._showPanel();\n    }\n  }, (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Add something')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, \" \", (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('to get started'), \"!\")))));\n};\n\n/**\n * Generic Outline Item\n * Represents any kind of node.\n */\nconst Item = ({\n  node: id,\n  index,\n  level,\n  type,\n  global = false,\n  dynamic = false,\n  parent,\n  template_title,\n  template_node_id: templateNodeId,\n  template_root_node: templateRootNode\n}) => {\n  const {\n    moveNode\n  } = (0,api__WEBPACK_IMPORTED_MODULE_4__.getActions)();\n  const {\n    useNodesWithoutSettings\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutHooks)();\n  const {\n    removeNode\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutActions)();\n  const children = useNodesWithoutSettings(id);\n  const hasChildren = 0 < Object.keys(children).length;\n  const {\n    accepts\n  } = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.getModuleConfig)(id);\n  const acceptsChildren = accepts && !!accepts.length;\n  const {\n    settings\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getNode)(id);\n  const parentNode = (0,data__WEBPACK_IMPORTED_MODULE_5__.getNode)(parent);\n  const parentType = !parentNode.type ? 'layout' : parentNode.type;\n\n  /**\n   * Drag info\n   */\n  const {\n    draggingItem,\n    setDraggingItem,\n    clearDraggingItem\n  } = _context__WEBPACK_IMPORTED_MODULE_7__[\"default\"].use();\n  const [isDraggingOver, setIsDraggingOver] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const [showContent, setShowContent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)((0,_storage__WEBPACK_IMPORTED_MODULE_10__.getStorage)(id, type, global));\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()('fl-builder-node-outline-item', {\n    [`fl-builder-node-type-${type}`]: type,\n    'show-drop-before': 'before' === isDraggingOver,\n    'show-drop-after': 'after' === isDraggingOver,\n    'is-dragging-self': id === draggingItem?.id,\n    'has-children': hasChildren,\n    'accepts-children': acceptsChildren\n  });\n  const toggleContent = () => {\n    (0,_storage__WEBPACK_IMPORTED_MODULE_10__.setStorage)(id, !showContent);\n  };\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    window.addEventListener('storage', onUpdateStorage);\n    return () => {\n      window.removeEventListener('storage', onUpdateStorage);\n    };\n  }, []);\n  const onUpdateStorage = () => {\n    setShowContent((0,_storage__WEBPACK_IMPORTED_MODULE_10__.getStorage)(id, type, global));\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n    className: classes,\n    style: {\n      '--level': level\n    },\n    draggable: true,\n    onDragStart: e => {\n      // Required for draggable DOM elements\n      e.stopPropagation();\n\n      // Setup drag image\n      let ele = window.parent.document.getElementById('fl-builder-node-outline-helper');\n      if (!ele) {\n        ele = document.createElement('div');\n        ele.id = 'fl-builder-node-outline-helper';\n        window.parent.document.body.appendChild(ele);\n      }\n      ele.style.display = 'block';\n      ele.innerHTML = getItemTypeLabel(type, settings);\n      e.dataTransfer.setDragImage(ele, 0, 0);\n\n      // Setup drag data\n      e.dataTransfer.setData(type, id);\n      e.dataTransfer.setData('node-id', id);\n      e.dataTransfer.setData('node-type', type);\n\n      // Set the item data on the root OutlineContext\n      setDraggingItem({\n        id,\n        type\n      });\n    },\n    onDragEnd: () => clearDraggingItem(),\n    onDragOver: e => {\n      e.preventDefault();\n      e.stopPropagation();\n      e.dataTransfer.dropEffect = 'move';\n\n      // Double check we have the right element\n      if (!e.currentTarget.classList.contains('fl-builder-node-outline-item')) {\n        return;\n      }\n\n      // Abort if we're not dragging a type that can be dropped here.\n      if (!(0,_utils__WEBPACK_IMPORTED_MODULE_9__.shouldAllowDrop)(parentType, parent, draggingItem.type, draggingItem.id)) {\n        return;\n      }\n\n      /**\n       * Determine if we need a drop zone before or after the element.\n       */\n      const {\n        y,\n        height\n      } = e.currentTarget.getBoundingClientRect();\n      if ((0,_utils__WEBPACK_IMPORTED_MODULE_9__.isHoveringBefore)(e.clientY, y, height) && 'before' !== isDraggingOver) {\n        setIsDraggingOver('before');\n      } else if (!(0,_utils__WEBPACK_IMPORTED_MODULE_9__.isHoveringBefore)(e.clientY, y, height) && 'after' !== isDraggingOver) {\n        setIsDraggingOver('after');\n      }\n    },\n    onDragLeave: () => {\n      isDraggingOver && setIsDraggingOver(false);\n    },\n    onDrop: e => {\n      e.preventDefault();\n      e.stopPropagation();\n      isDraggingOver && setIsDraggingOver(false);\n      clearDraggingItem();\n\n      // Hide the drag image\n      window.parent.document.getElementById('fl-builder-node-outline-helper').style.display = 'none';\n\n      // Return if we shouldn't drop\n      if (!(0,_utils__WEBPACK_IMPORTED_MODULE_9__.shouldAllowDrop)(parentType, parent, draggingItem.type, draggingItem.id)) {\n        return;\n      }\n\n      // Determine which zone\n      const {\n        y,\n        height\n      } = e.currentTarget.getBoundingClientRect();\n      const zone = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.isHoveringBefore)(e.clientY, y, height) ? 'before' : 'after';\n\n      // Node to be moved\n      const nodeID = e.dataTransfer.getData('node-id');\n      const {\n        position: currentPos,\n        parent: currentParent\n      } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getNode)(nodeID);\n      let pos = index;\n      if (parent === currentParent) {\n        // Reorder nodes within the same parent.\n        if ('before' === zone) {\n          if (currentPos === index - 1) {\n            return;\n          } else {\n            pos = currentPos > index ? index : Math.max(0, index - 1);\n          }\n        } else if ('after' === zone) {\n          if (currentPos === index + 1) {\n            return;\n          } else {\n            pos = currentPos > index ? index + 1 : index;\n          }\n        }\n      } else {\n        // Move nodes to a new parent.\n        pos = 'after' === zone ? index + 1 : index;\n      }\n      const draggingElement = document.body.querySelector(`[data-node=\"${draggingItem.id}\"]`);\n      const zoneElement = document.body.querySelector(`[data-node=\"${id}\"]`);\n\n      // Move the node. Wrap in a parent node if needed.\n      if ('layout' === parentType && 'row' !== draggingItem.type) {\n        if ('module' === draggingItem.type) {\n          const config = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.getModuleConfig)(draggingItem.id);\n          const cols = 'all' === config.accepts || config.accepts.length ? null : '1-col';\n          if (cols) {\n            draggingElement.remove();\n            FLBuilder._addRow(cols, pos, draggingItem.id);\n          } else {\n            moveNode(draggingItem.id, pos, 0);\n          }\n        } else if ('column' === draggingItem.type) {\n          const group = draggingElement.closest('.fl-col-group');\n          const cols = group.querySelectorAll('.fl-col');\n          draggingElement.remove();\n          if (1 === cols.length) {\n            removeNode(group.getAttribute('data-node'));\n            group.remove();\n          } else {\n            FLBuilder._resetColumnWidths(group);\n          }\n          FLBuilder._addRow(draggingItem.id, pos);\n        } else if ('column-group' === draggingItem.type) {\n          draggingElement.remove();\n          FLBuilder._addRow(draggingItem.id, pos);\n        }\n      } else if ('row' === parentType && ['column', 'module'].includes(draggingItem.type)) {\n        if ('module' === draggingItem.type) {\n          const config = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.getModuleConfig)(draggingItem.id);\n          if ('all' === config.accepts || config.accepts.length) {\n            moveNode(draggingItem.id, pos, parent);\n          } else {\n            draggingElement.remove();\n            FLBuilder._addColGroup(parent, '1-col', pos, draggingItem.id);\n          }\n        } else if ('column' === draggingItem.type) {\n          const group = draggingElement.closest('.fl-col-group');\n          const cols = group.querySelectorAll('.fl-col');\n          draggingElement.remove();\n          if (1 === cols.length) {\n            removeNode(group.getAttribute('data-node'));\n            group.remove();\n          } else {\n            FLBuilder._resetColumnWidths(group);\n          }\n          FLBuilder._addColGroup(parent, draggingItem.id, pos);\n        }\n      } else if ('column-group' === parentType && ['column', 'module'].includes(draggingItem.type)) {\n        if ('module' === draggingItem.type) {\n          const nested = !!zoneElement.closest('.fl-col-group-nested');\n          draggingElement.remove();\n          FLBuilder._addCols(id, zone, '1-col', nested, draggingItem.id);\n        } else if ('column' === draggingItem.type) {\n          const group = draggingElement.closest('.fl-col-group');\n          const cols = group.querySelectorAll('.fl-col');\n          moveNode(nodeID, pos, parent, [parent, currentParent]);\n          if (1 === cols.length) {\n            removeNode(group.getAttribute('data-node'));\n            group.remove();\n          } else {\n            FLBuilder._resetColumnWidths(group);\n          }\n        }\n      } else {\n        moveNode(nodeID, pos, parent, [parent, currentParent]);\n      }\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ItemContent, {\n    id: id,\n    type: type,\n    global: global,\n    dynamic: dynamic,\n    position: index,\n    level: level,\n    toggleContent: toggleContent,\n    isShowingContent: showContent,\n    hasChildren: hasChildren,\n    templateTitle: template_title,\n    templateNodeId: templateNodeId,\n    templateRootNode: templateRootNode\n  }), (0,_utils__WEBPACK_IMPORTED_MODULE_9__.shouldShowEmptyDropArea)(type, id, hasChildren, global, templateNodeId) && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(EmptyDropArea, {\n    id: id,\n    type: type\n  }), 0 < Object.keys(children).length && showContent && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", null, Object.values(children).sort(data_layout_utils__WEBPACK_IMPORTED_MODULE_6__.sortNodes).map((node, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Item, _extends({\n    key: node.node,\n    level: level + 1,\n    index: i\n  }, node)))));\n};\nconst EmptyDropArea = ({\n  id,\n  type,\n  ...rest\n}) => {\n  const [isOver, setIsOver] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const {\n    moveNode\n  } = (0,api__WEBPACK_IMPORTED_MODULE_4__.getActions)();\n  const {\n    removeNode\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutActions)();\n  const {\n    draggingItem,\n    clearDraggingItem\n  } = _context__WEBPACK_IMPORTED_MODULE_7__[\"default\"].use();\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()('fl-builder-node-empty-drop-area', {\n    'is-over': isOver\n  });\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n    className: classes,\n    onDragOver: e => {\n      if ((0,_utils__WEBPACK_IMPORTED_MODULE_9__.shouldAllowDrop)(type, id, draggingItem.type, draggingItem.id)) {\n        e.preventDefault();\n        e.stopPropagation();\n        setIsOver(true);\n      }\n    },\n    onDragLeave: () => isOver && setIsOver(false),\n    onDrop: e => {\n      setIsOver(false);\n      clearDraggingItem();\n      if ((0,_utils__WEBPACK_IMPORTED_MODULE_9__.shouldAllowDrop)(type, id, draggingItem.type, draggingItem.id)) {\n        e.preventDefault();\n        e.stopPropagation();\n        const element = document.body.querySelector(`[data-node=\"${draggingItem.id}\"]`);\n        if ('row' === type && 'column-group' !== draggingItem.type) {\n          if ('module' === draggingItem.type) {\n            const config = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.getModuleConfig)(draggingItem.id);\n            if ('all' === config.accepts || config.accepts.length) {\n              moveNode(draggingItem.id, 0, id);\n            } else {\n              element.remove();\n              FLBuilder._addColGroup(id, '1-col', 0, draggingItem.id);\n            }\n          } else if ('column' === draggingItem.type) {\n            const group = element.closest('.fl-col-group');\n            const cols = group.querySelectorAll('.fl-col');\n            element.remove();\n            if (1 === cols.length) {\n              removeNode(group.getAttribute('data-node'));\n              group.remove();\n            } else {\n              FLBuilder._resetColumnWidths(group);\n            }\n            FLBuilder._addColGroup(id, draggingItem.id, 0);\n          }\n        } else {\n          // Set the node to the first position in this parent.\n          moveNode(draggingItem.id, 0, id);\n        }\n      }\n    }\n  }, rest), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"drop-area\"\n  }));\n};\nconst ItemContent = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({\n  id,\n  type,\n  global,\n  dynamic,\n  level,\n  toggleContent,\n  isShowingContent = true,\n  hasChildren,\n  templateTitle = null,\n  templateNodeId,\n  templateRootNode\n}) => {\n  const {\n    useNodeSettings\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutHooks)();\n  const settings = useNodeSettings(id);\n  const {\n    setContextMenu,\n    contextMenu,\n    clearContextMenu\n  } = (0,ui_context_menu__WEBPACK_IMPORTED_MODULE_3__.useContextMenu)();\n  const {\n    deleteNode,\n    copyNode,\n    copyNodeSettings,\n    pasteNodeSettings,\n    scrollToNode\n  } = (0,api__WEBPACK_IMPORTED_MODULE_4__.getActions)();\n  const {\n    simpleUi\n  } = (0,api__WEBPACK_IMPORTED_MODULE_4__.getConfig)();\n  const hasVisibilitySettings = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.hasVisibility)(settings);\n  const hasCodeSettings = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.hasCode)(settings);\n  const showDisclosureTriangle = !global && hasChildren;\n  const {\n    activeNode,\n    focusNode\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.useOutlinePanelState)();\n  const [isLabelActive, setLabelActive] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const [isResult, setIsResult] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const isEditingGlobalRoot = templateRootNode && id === templateNodeId;\n  const isEditingGlobalChild = !templateRootNode && id === templateNodeId;\n  const isEditingGlobalNode = isEditingGlobalRoot || isEditingGlobalChild;\n  const isComponent = global && dynamic;\n\n  // Check if widgets or modules have a registered definition\n  const hasDefinition = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.nodeHasDefinition)(type, settings);\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()('fl-builder-node-outline-item-content', {\n    'has-context-menu': false !== contextMenu && id === contextMenu.id,\n    'is-global-node': global,\n    'is-dynamic-node': dynamic,\n    'is-missing-definition': !hasDefinition,\n    'is-outline-active-node': id === activeNode,\n    'is-outline-focus-node': id === focusNode,\n    'is-search-disable': true !== isResult\n  });\n  const handleSearch = value => {\n    setIsResult(value);\n  };\n\n  // todo add fl-node-highlight\n  const highlightDomNode = () => {\n    const el = document.querySelector(`.fl-node-${id}`);\n    if (el) {\n      el.classList.add('fl-node-highlight');\n    }\n  };\n  const clearHighlight = () => {\n    const els = document.querySelectorAll('.fl-node-highlight');\n    Array.from(els).forEach(el => {\n      el.classList.remove('fl-node-highlight');\n    });\n  };\n\n  // Allows delaying clicks long enough to check if its a double-click\n  const [onClick, onDoubleClick] = (0,_utils__WEBPACK_IMPORTED_MODULE_9__.useSingleAndDoubleClick)({\n    onClick: () => {\n      if (!hasDefinition) {\n        return;\n      }\n      scrollToNode(id);\n    },\n    onDoubleClick: () => {\n      if (!hasDefinition || isLabelActive) {\n        return;\n      }\n      scrollToNode(id);\n      FLBuilder.showNodeSettings({\n        nodeId: id\n      });\n      clearHighlight();\n    }\n  });\n\n  // Controls the label form visibility\n  const toggleLabelActivity = () => {\n    setLabelActive(state => !state);\n  };\n\n  // Controls the label form submit action for each node\n  const labelFormSubmit = async value => {\n    FLBuilder.showAjaxLoader();\n    let newSettings;\n    if (isComponent && !isEditingGlobalRoot) {\n      // For component child nodes, save only the label.\n      // Do NOT wrap in dynamic_node_settings — that property\n      // belongs on the root node only. Adding it to child\n      // modules causes merge_settings_with_template to replace\n      // draft settings with published settings on subsequent loads.\n      newSettings = {\n        node_label: value\n      };\n    } else {\n      // Handle regular nodes.\n      newSettings = {\n        ...settings,\n        node_label: value\n      };\n    }\n    const {\n      updateNodeSettings,\n      refreshNodeSettings\n    } = (0,data__WEBPACK_IMPORTED_MODULE_5__.getLayoutActions)();\n    return await updateNodeSettings(id, newSettings, response => {\n      const data = FLBuilder._jsonParse(response);\n      refreshNodeSettings(id, data.settings);\n      FLBuilderSettingsConfig.nodes[id] = data.settings;\n      FLBuilder.hideAjaxLoader();\n      return true;\n    });\n  };\n\n  // gets the 'clipboard' string from localStorage and extracts the 'type' value.\n  const getTypeFromClipboard = () => {\n    const clipboard = localStorage.getItem('clipboard') || '';\n    const regex = /^\\/\\/\\/\\s*\\{type:([^\\}]+)\\}/;\n    const match = clipboard.match(regex);\n    return match && match[1] ? match[1].trim() : '';\n  };\n\n  // show the Paste Settings option based on type comparison.\n  const showPasteSettingsOption = () => {\n    const clipboardType = getTypeFromClipboard();\n\n    // normalize strings for comparison\n    const normalizedClipboardType = clipboardType.toLowerCase();\n    const normalizedSettingsType = settings?.type?.toLowerCase() ?? '';\n    const normalizedType = type?.toLowerCase?.() ?? '';\n    if (normalizedType === 'module' || normalizedType === '') {\n      return normalizedClipboardType === normalizedSettingsType;\n    }\n    return normalizedClipboardType === normalizedType;\n  };\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: classes,\n    onClick: onClick,\n    onDoubleClick: onDoubleClick,\n    onPointerEnter: highlightDomNode,\n    onPointerLeave: clearHighlight,\n    onPointerCancel: clearHighlight,\n    onContextMenu: e => {\n      // Already showing custom context menu, so show default browser menu.\n      if (false !== contextMenu && id === contextMenu.id) {\n        clearContextMenu();\n        return;\n      }\n\n      // Already label form is active, so disable custom context menu.\n      if (false !== isLabelActive) {\n        clearContextMenu();\n        return;\n      }\n      e.preventDefault();\n      const items = {\n        settings: {\n          label: 'Settings',\n          isEnabled: 'column-group' !== type && hasDefinition,\n          onClick: () => {\n            scrollToNode(id);\n            FLBuilder.showNodeSettings({\n              nodeId: id\n            });\n          }\n        },\n        clone: {\n          label: 'Duplicate',\n          isEnabled: !isEditingGlobalRoot && 'column-group' !== type && hasDefinition && !simpleUi,\n          onClick: () => copyNode(id)\n        },\n        copySettings: {\n          label: `Copy Settings`,\n          isEnabled: (!global || isEditingGlobalNode) && 'column-group' !== type && hasDefinition && !simpleUi,\n          onClick: () => copyNodeSettings(id)\n        },\n        pasteSettings: {\n          label: `Paste Settings`,\n          isEnabled: (!global || isEditingGlobalNode) && showPasteSettingsOption() && 'column-group' !== type && hasDefinition && !simpleUi,\n          onClick: () => pasteNodeSettings(id)\n        },\n        delete: {\n          label: FLBuilderStrings.remove,\n          isEnabled: !isEditingGlobalRoot && !simpleUi,\n          status: 'destructive',\n          onClick: () => deleteNode(id)\n        },\n        editTemplate: {\n          label: 'Edit Template',\n          isEnabled: !isEditingGlobalNode && global && !dynamic,\n          onClick: () => {\n            FLBuilder._nodeEditTemplate(id);\n          }\n        },\n        unlinkTemplate: {\n          label: 'Unlink Template',\n          isEnabled: !isEditingGlobalNode && global && !dynamic,\n          onClick: () => {\n            FLBuilder._nodeUnlinkGlobal(id);\n          }\n        },\n        editDynamic: {\n          label: 'Edit Component',\n          isEnabled: !isEditingGlobalNode && global && dynamic,\n          onClick: () => {\n            FLBuilder._nodeEditTemplate(id);\n          }\n        },\n        unlinkDynamic: {\n          label: 'Unlink Component',\n          isEnabled: !isEditingGlobalNode && global && dynamic,\n          onClick: () => {\n            FLBuilder._nodeUnlinkGlobal(id);\n          }\n        }\n      };\n      setContextMenu({\n        id,\n        items,\n        type,\n        global,\n        x: e.clientX,\n        y: e.clientY\n      });\n    }\n  }, showDisclosureTriangle && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-gutter\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n    className: !isShowingContent ? 'is-hiding-content' : '',\n    onClick: e => {\n      toggleContent(e);\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DisclosureArrow, null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-icon-wrap\",\n    onClick: e => {\n      toggleContent(e);\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Icon, {\n    type: type,\n    moduleType: settings.type,\n    settings: settings,\n    hasDefinition: hasDefinition\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-label-wrap\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ItemLabel, {\n    type: type,\n    settings: settings,\n    onSearch: handleSearch,\n    level: level,\n    isActive: isLabelActive,\n    submitAction: labelFormSubmit,\n    toggleActivity: toggleLabelActivity,\n    templateTitle: templateTitle,\n    isGlobal: global,\n    isDynamic: dynamic\n  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Size, {\n    id: id,\n    type: type,\n    size: parseFloat(settings.size),\n    width: settings['max_content_width'],\n    widthUnit: settings['max_content_width_unit']\n  }), hasCodeSettings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-icon-wrap\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.Code, null)), hasVisibilitySettings && 'responsive' === hasVisibilitySettings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-icon-wrap\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.Visibility, null)), hasVisibilitySettings && 'logic' === hasVisibilitySettings && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: \"fl-builder-outline-item-icon-wrap\"\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.VisibilityLogic, null)));\n});\nconst getItemTypeLabel = (type, settings = {}) => {\n  let typeLabel = undefined !== settings.type ? (0,_utils__WEBPACK_IMPORTED_MODULE_9__.getModuleTypeLabel)(settings.type) : type;\n  if ('row' === typeLabel) {\n    typeLabel = FLBuilderStrings.row;\n  } else if ('column-group' === typeLabel) {\n    typeLabel = FLBuilderStrings.columnGroup;\n  } else if ('column' === typeLabel) {\n    typeLabel = FLBuilderStrings.column;\n  }\n  return typeLabel;\n};\nconst ItemLabel = ({\n  type,\n  settings = {},\n  onSearch,\n  ...labelForm\n}) => {\n  let typeLabel = getItemTypeLabel(type, settings);\n  let description = '';\n  const {\n    isGlobal,\n    isDynamic,\n    templateTitle\n  } = labelForm;\n  const parser = new DOMParser();\n  if ('module' === type && 'type' in settings) {\n    switch (settings.type) {\n      case 'heading':\n        typeLabel = settings.tag;\n        description = settings.heading;\n        break;\n      case 'html':\n        description = settings.html;\n        break;\n      case 'rich-text':\n      case 'icon':\n      case 'button':\n        description = settings.text;\n        break;\n      case 'callout':\n        description = settings.title;\n        break;\n      case 'acf-block':\n        typeLabel = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('ACF Block');\n        break;\n      case 'reusable-block':\n        typeLabel = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('WordPress Pattern');\n        break;\n      case 'box':\n        let mode = '';\n        switch (settings.layout) {\n          case 'flex':\n            mode = 'Flex';\n            if (['', 'row', 'row-reverse'].includes(settings.flex_direction)) {\n              mode = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Flex Row');\n            } else if (['column', 'column-reverse'].includes(settings.flex_direction)) {\n              mode = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Flex Column');\n            }\n            break;\n          case 'grid':\n            mode = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Grid');\n            break;\n          case 'z_stack':\n            mode = (0,ui_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Layered');\n        }\n        typeLabel = mode ? `${typeLabel}: ${mode}` : typeLabel;\n        break;\n      case 'widget':\n        if ((0,_utils__WEBPACK_IMPORTED_MODULE_9__.nodeHasDefinition)(type, settings) && settings[settings.widget_key]?.title) {\n          description = settings[settings.widget_key].title.trim();\n        }\n        break;\n    }\n  }\n  if (isGlobal && templateTitle && FLBuilderConfig?.postType !== 'fl-builder-template') {\n    typeLabel = parser.parseFromString(templateTitle, \"text/html\").body.textContent;\n  }\n  let nodeLabel = '';\n  if (settings && 'node_label' in settings && '' !== settings.node_label) {\n    nodeLabel = settings.node_label;\n  }\n  let colon = '';\n  if (!__webpack_require__.g) {\n    colon = description && description.trim() !== '' || nodeLabel && nodeLabel.trim() !== '' ? ': ' : '';\n  }\n  const search = (0,_storage__WEBPACK_IMPORTED_MODULE_10__.getStorageItem)('search').toLowerCase();\n  const matches = [typeLabel, description, settings?.class, settings?.id, settings?.node_label];\n  const resultMatch = matches.some(value => value?.toLowerCase().includes(search));\n  const showEditForm = 'column-group' !== type && (0,_utils__WEBPACK_IMPORTED_MODULE_9__.nodeHasDefinition)(type, settings);\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    onSearch(resultMatch);\n  }, [resultMatch]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n    className: labelForm.isActive ? \"fl-builder-outline-item-label-text\" : null\n  }, typeLabel, colon), showEditForm && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_label_form_index__WEBPACK_IMPORTED_MODULE_11__[\"default\"], _extends({\n    parentStyle: \"fl-builder-outline-item-label-form\",\n    previewValue: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.sanitizeString)(description),\n    labelValue: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.sanitizeString)(nodeLabel)\n  }, labelForm)));\n};\n\n// Generic badge container\nconst PillBox = ({\n  children,\n  style,\n  ...rest\n}) => {\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", _extends({\n    style: {\n      textTransform: 'lowercase',\n      background: 'rgba(0,0,0,.05)',\n      color: '#828282',\n      fontSize: 11,\n      flex: '0 0 auto',\n      display: 'inline-flex',\n      padding: '2px 6px',\n      borderRadius: 25,\n      whiteSpace: 'nowrap',\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      fontFamily: 'monospace',\n      ...style\n    },\n    title: children\n  }, rest), children);\n};\nconst Icon = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(({\n  type,\n  moduleType,\n  settings,\n  hasDefinition\n}) => {\n  switch (type) {\n    case 'row':\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.Row, null);\n    case 'column':\n    case 'column-group':\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.Column, null);\n    case 'module':\n      const Component = (0,_tiny_icons__WEBPACK_IMPORTED_MODULE_8__.getModuleIconComponent)(moduleType, settings, hasDefinition);\n      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Component, null);\n  }\n});\nconst Size = ({\n  id,\n  type,\n  size,\n  width,\n  widthUnit\n}) => {\n  const {\n    resizing\n  } = (0,data__WEBPACK_IMPORTED_MODULE_5__.useLayoutState)();\n  let string = '';\n  if (resizing && resizing.includes(id)) {\n    if ('column' === type) {\n      string += ` ${size}% `;\n    } else if ('row' === type) {\n      string += `Max: ${width + widthUnit}`;\n    }\n  }\n  if ('' === string) {\n    return null;\n  }\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PillBox, {\n    style: {\n      background: 'var(--fl-builder-blue)',\n      color: 'white'\n    }\n  }, string);\n};\nconst DisclosureArrow = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"10\",\n  height: \"10\",\n  viewBox: \"0 0 10 10\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M2.79289 1.29289C3.18342 0.902369 3.81658 0.902369 4.20711 1.29289L7.20711 4.29289C7.59763 4.68342 7.59763 5.31658 7.20711 5.70711L4.20711 8.70711C3.81658 9.09763 3.18342 9.09763 2.79289 8.70711C2.40237 8.31658 2.40237 7.68342 2.79289 7.29289L5.08579 5L2.79289 2.70711C2.40237 2.31658 2.40237 1.68342 2.79289 1.29289Z\",\n  fill: \"currentColor\"\n}));\nconst MoreIcon = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  height: \"16\",\n  width: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"currentColor\",\n  version: \"1.1\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M2,6C0.896,6,0,6.896,0,8s0.896,2,2,2s2-0.896,2-2S3.104,6,2,6z M8,6C6.896,6,6,6.896,6,8s0.896,2,2,2s2-0.896,2-2 S9.104,6,8,6z M14,6c-1.104,0-2,0.896-2,2s0.896,2,2,2s2-0.896,2-2S15.104,6,14,6z\"\n}));\nconst SearchIcon = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"20\",\n  height: \"20\",\n  viewBox: \"0 0 20 20\",\n  fill: \"currentColor\",\n  version: \"1.1\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M12.14 4.18c1.87 1.87 2.11 4.75 0.72 6.89 0.12 0.1 0.22 0.21 0.36 0.31 0.2 0.16 0.47 0.36 0.81 0.59 0.34 0.24 0.56 0.39 0.66 0.47 0.42 0.31 0.73 0.57 0.94 0.78 0.32 0.32 0.6 0.65 0.84 1 0.25 0.35 0.44 0.69 0.59 1.040 0.14 0.35 0.21 0.68 0.18 1-0.020 0.32-0.14 0.59-0.36 0.81s-0.49 0.34-0.81 0.36c-0.31 0.020-0.65-0.040-0.99-0.19-0.35-0.14-0.7-0.34-1.040-0.59-0.35-0.24-0.68-0.52-1-0.84-0.21-0.21-0.47-0.52-0.77-0.93-0.1-0.13-0.25-0.35-0.47-0.66-0.22-0.32-0.4-0.57-0.56-0.78-0.16-0.2-0.29-0.35-0.44-0.5-2.070 1.090-4.69 0.76-6.44-0.98-2.14-2.15-2.14-5.64 0-7.78 2.15-2.15 5.63-2.15 7.78 0zM10.73 10.54c1.36-1.37 1.36-3.58 0-4.95-1.37-1.37-3.59-1.37-4.95 0-1.37 1.37-1.37 3.58 0 4.95 1.36 1.37 3.58 1.37 4.95 0z\"\n}));\nconst CloseIcon = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"14px\",\n  height: \"14px\",\n  viewBox: \"0 0 14 14\",\n  version: \"1.1\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n  stroke: \"currentColor\",\n  strokeWidth: \"2\",\n  fill: \"none\",\n  fillRule: \"evenodd\",\n  strokeLinecap: \"round\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M13,1 L1,13\"\n}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M1,1 L13,13\"\n})));\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Outline);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/label-form/icons.js":
/*!****************************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/label-form/icons.js ***!
  \****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Accept: () => (/* binding */ Accept)\n/* harmony export */ });\nconst Accept = () => /*#__PURE__*/React.createElement(\"svg\", {\n  viewBox: \"0 0 665.8 1000\",\n  fill: \"currentColor\",\n  height: \"1em\",\n  width: \"1em\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M248 850c-22.667 0-41.333-9.333-56-28L12 586C1.333 570-2.667 552.667 0 534s11.333-34 26-46 31.667-16.667 51-14c19.333 2.667 35 12 47 28l118 154 296-474c10.667-16 25-26 43-30s35.667-1.333 53 8c16 10.667 26 25 30 43s1.333 35.667-8 53L306 816c-13.333 21.333-32 32-56 32l-2 2\"\n}));\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/label-form/icons.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/label-form/index.js":
/*!****************************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/label-form/index.js ***!
  \****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./icons */ \"./src/FL/Builder/system/ui/outline-panel/outline/label-form/icons.js\");\n/* harmony import */ var _style_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.module.css */ \"./src/FL/Builder/system/ui/outline-panel/outline/label-form/style.module.css\");\n\n\n\nconst valueSetter = (labelValue, previewValue) => previewValue && previewValue !== '' && labelValue === '' ? previewValue : labelValue;\nconst LabelForm = ({\n  parentStyle,\n  isActive,\n  toggleActivity,\n  submitAction,\n  labelValue,\n  previewValue\n}) => {\n  const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(valueSetter(labelValue, previewValue));\n  const [submitting, setSubmitting] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n  const submit = async event => {\n    event.preventDefault();\n    if (!submitting) setSubmitting(true);\n    if (await submitAction(value)) {\n      setSubmitting(false);\n      close(true);\n    }\n  };\n  const close = submitted => {\n    if (submitted || isActive && !submitting) {\n      setValue(valueSetter(labelValue, previewValue));\n      toggleActivity();\n    }\n  };\n  if (!isActive && value !== valueSetter(labelValue, previewValue)) {\n    setValue(valueSetter(labelValue, previewValue));\n  }\n  return /*#__PURE__*/React.createElement(\"section\", {\n    id: _style_module_css__WEBPACK_IMPORTED_MODULE_2__.section,\n    className: parentStyle\n  }, /*#__PURE__*/React.createElement(\"form\", {\n    className: isActive ? _style_module_css__WEBPACK_IMPORTED_MODULE_2__.active : _style_module_css__WEBPACK_IMPORTED_MODULE_2__.form,\n    onSubmit: submit,\n    onBlur: () => close(false)\n  }, /*#__PURE__*/React.createElement(\"input\", {\n    className: _style_module_css__WEBPACK_IMPORTED_MODULE_2__.field,\n    placeholder: \"type a label\",\n    type: \"text\",\n    value: value,\n    draggable: isActive,\n    autoFocus: isActive,\n    readOnly: !isActive,\n    disabled: submitting,\n    onChange: event => setValue(event.target.value),\n    onKeyUp: event => {\n      if (event.key === \"Escape\") close(false);\n    },\n    onClick: () => {\n      if (!isActive) {\n        toggleActivity();\n        setValue(labelValue);\n      }\n    },\n    onDragStart: event => {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }), /*#__PURE__*/React.createElement(\"button\", {\n    className: _style_module_css__WEBPACK_IMPORTED_MODULE_2__.button,\n    type: \"submit\",\n    onMouseDown: () => setSubmitting(true)\n  }, /*#__PURE__*/React.createElement(_icons__WEBPACK_IMPORTED_MODULE_1__.Accept, null))));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LabelForm);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/label-form/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/label-form/style.module.css":
/*!************************************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/label-form/style.module.css ***!
  \************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   active: () => (/* binding */ _1),\n/* harmony export */   button: () => (/* binding */ _2),\n/* harmony export */   field: () => (/* binding */ _3),\n/* harmony export */   form: () => (/* binding */ _4),\n/* harmony export */   section: () => (/* binding */ _5)\n/* harmony export */ });\n// extracted by mini-css-extract-plugin\nvar _1 = \"jk4bBAyaHA0IsH69wbMd\";\nvar _2 = \"ub93QbVect8Iddkza68T\";\nvar _3 = \"gYPSavxB0WUYgYd0Fy9b\";\nvar _4 = \"aUC70H5VeqIS5GHfBdUl\";\nvar _5 = \"hpierpwrTFZvbsOnEOU0\";\n\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/label-form/style.module.css?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/storage.js":
/*!*******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/storage.js ***!
  \*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getStorage: () => (/* binding */ getStorage),\n/* harmony export */   getStorageItem: () => (/* binding */ getStorageItem),\n/* harmony export */   setSearch: () => (/* binding */ setSearch),\n/* harmony export */   setStorage: () => (/* binding */ setStorage)\n/* harmony export */ });\nconst setStorage = (node = false, value, event = true, collapseAll = true) => {\n  const {\n    pathname\n  } = window.location;\n  const key = `${pathname.replace(/^\\/|\\/$/g, '').toLowerCase()}:outline`;\n  const storage = JSON.parse(window.localStorage.getItem(key)) || {};\n  if (false === node) {\n    for (let uid in storage) {\n      if ('collapse' !== uid) {\n        storage[uid] = {\n          ...storage[uid],\n          ...{\n            collapsed: !value\n          }\n        };\n      }\n    }\n    if (collapseAll) {\n      storage['collapse'] = !value;\n    }\n  } else {\n    storage[node] = {\n      ...storage[node],\n      ...{\n        collapsed: !value\n      }\n    };\n  }\n  storage['search'] = '';\n  window.localStorage.setItem(key, JSON.stringify(storage));\n  if (event) {\n    window.dispatchEvent(new Event('storage'));\n  }\n};\nconst getStorage = (node, type, global) => {\n  const {\n    pathname\n  } = window.location;\n  const key = `${pathname.replace(/^\\/|\\/$/g, '').toLowerCase()}:outline`;\n  const storage = JSON.parse(window.localStorage.getItem(key)) || {};\n  if (node in storage) {\n    const {\n      collapsed\n    } = storage[node];\n    return !collapsed;\n  }\n  if ('module' !== type && 'column-group' !== type && !global) {\n    setStorage(node, true, false);\n  }\n  return true;\n};\nconst setSearch = (search = '', event = true) => {\n  const {\n    pathname\n  } = window.location;\n  const key = `${pathname.replace(/^\\/|\\/$/g, '').toLowerCase()}:outline`;\n  const storage = JSON.parse(window.localStorage.getItem(key)) || {};\n  for (let uid in storage) {\n    if ('collapse' !== uid) {\n      storage[uid] = {\n        ...storage[uid],\n        ...{\n          collapsed: false\n        }\n      };\n    }\n  }\n  storage['search'] = search;\n  window.localStorage.setItem(key, JSON.stringify(storage));\n  if (event) {\n    window.dispatchEvent(new Event('storage'));\n  }\n};\nconst getStorageItem = type => {\n  const {\n    pathname\n  } = window.location;\n  const key = `${pathname.replace(/^\\/|\\/$/g, '').toLowerCase()}:outline`;\n  const storage = JSON.parse(window.localStorage.getItem(key)) || {};\n  return 'undefined' !== typeof storage[type] ? storage[type] : '';\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/storage.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/style.scss":
/*!*******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/style.scss ***!
  \*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/tiny-icons/index.js":
/*!****************************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/tiny-icons/index.js ***!
  \****************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Alert: () => (/* binding */ Alert),\n/* harmony export */   Code: () => (/* binding */ Code),\n/* harmony export */   Column: () => (/* binding */ Column),\n/* harmony export */   DefaultIcon: () => (/* binding */ DefaultIcon),\n/* harmony export */   Photo: () => (/* binding */ Photo),\n/* harmony export */   Row: () => (/* binding */ Row),\n/* harmony export */   Text: () => (/* binding */ Text),\n/* harmony export */   Visibility: () => (/* binding */ Visibility),\n/* harmony export */   VisibilityLogic: () => (/* binding */ VisibilityLogic),\n/* harmony export */   getModuleIconComponent: () => (/* binding */ getModuleIconComponent)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \"./src/FL/Builder/system/ui/outline-panel/outline/utils/index.js\");\n\n\n\n// Swiped these from Figma so we'll be doing our own before they ship\n\nconst getModuleIconComponent = (type, settings, hasDefinition = true) => {\n  if (!hasDefinition) {\n    return Alert;\n  }\n  switch (type) {\n    case 'rich-text':\n      return Text;\n    case 'photo':\n      return Photo;\n    case 'icon':\n      if ('icon' in settings) {\n        return () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n          className: settings.icon,\n          \"aria-hidden\": \"true\"\n        });\n      }\n      break;\n    case 'widget':\n      return () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"i\", {\n        className: \"dashicons dashicons-wordpress\",\n        \"aria-hidden\": \"true\"\n      });\n    default:\n      let def = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.findConfig)(settings);\n      if (def && 'icon' in def) {\n        return () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n          style: {\n            flexShrink: 0,\n            width: 16,\n            height: 16,\n            fill: 'currentColor'\n          },\n          dangerouslySetInnerHTML: {\n            __html: def.icon\n          }\n        });\n      }\n      return DefaultIcon;\n  }\n};\nconst DefaultIcon = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n  x: \"2.5\",\n  y: \"2.5\",\n  width: \"11\",\n  height: \"11\",\n  rx: \"1.5\",\n  stroke: \"currentColor\"\n}));\nconst Column = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n  x: \"9.5\",\n  y: \"13.5\",\n  width: \"11\",\n  height: \"4\",\n  rx: \"0.5\",\n  transform: \"rotate(-90 9.5 13.5)\",\n  stroke: \"currentColor\"\n}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n  x: \"2.5\",\n  y: \"13.5\",\n  width: \"11\",\n  height: \"4\",\n  rx: \"0.5\",\n  transform: \"rotate(-90 2.5 13.5)\",\n  stroke: \"currentColor\"\n}));\nconst Row = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n  x: \"2.5\",\n  y: \"9.5\",\n  width: \"11\",\n  height: \"4\",\n  rx: \"0.5\",\n  stroke: \"currentColor\"\n}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"rect\", {\n  x: \"2.5\",\n  y: \"2.5\",\n  width: \"11\",\n  height: \"4\",\n  rx: \"0.5\",\n  stroke: \"currentColor\"\n}));\nconst Photo = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  className: \"svg\",\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M12 6c0 1.105-.895 2-2 2-1.105 0-2-.895-2-2 0-1.105.895-2 2-2 1.105 0 2 .895 2 2zm-1 0c0 .552-.448 1-1 1-.552 0-1-.448-1-1 0-.552.448-1 1-1 .552 0 1 .448 1 1zM3 2c-.552 0-1 .448-1 1v10c0 .552.448 1 1 1h10c.552 0 1-.448 1-1V3c0-.552-.448-1-1-1H3zm10 1H3v6.293l2.5-2.5L11.707 13H13V3zM3 13v-2.293l2.5-2.5L10.293 13H3z\",\n  fillRule: \"evenodd\",\n  fillOpacity: \"1\",\n  fill: \"currentCOlor\",\n  stroke: \"none\"\n}));\nconst Text = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M3.48254 7.83023L3.05006 9.22531H5.78441L5.35194 7.83023C5.19383 7.31871 5.03572 6.81183 4.87761 6.3096C4.72881 5.79807 4.58465 5.27724 4.44514 4.74711H4.38934C4.24053 5.27724 4.09172 5.79807 3.94291 6.3096C3.7941 6.81183 3.64065 7.31871 3.48254 7.83023ZM0.692383 12.9502L3.7755 3.79846H5.08688L8.17 12.9502H6.94233L6.07738 10.16H2.7571L1.8782 12.9502H0.692383Z\",\n  fill: \"currentColor\"\n}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M11.5546 13.1176C11.2384 13.1176 10.9407 13.0711 10.6617 12.9781C10.3827 12.8944 10.1363 12.7735 9.92234 12.6153C9.71773 12.4479 9.55497 12.248 9.43407 12.0155C9.31316 11.7737 9.25271 11.4993 9.25271 11.1924C9.25271 10.811 9.34106 10.4809 9.51777 10.2019C9.70378 9.91355 9.9921 9.66709 10.3827 9.46247C10.7826 9.25786 11.2942 9.09045 11.9173 8.96025C12.5404 8.83004 13.2891 8.72773 14.1634 8.65333C14.1541 8.42082 14.1169 8.20225 14.0518 7.99764C13.9867 7.79303 13.8844 7.61632 13.7449 7.46751C13.6053 7.30941 13.4193 7.18385 13.1868 7.09084C12.9636 6.99784 12.6892 6.95134 12.3637 6.95134C11.9173 6.95134 11.4895 7.03969 11.0803 7.2164C10.671 7.38381 10.3083 7.56517 9.9921 7.76048L9.54567 6.97924C9.71308 6.86763 9.90839 6.75603 10.1316 6.64442C10.3641 6.52351 10.6059 6.41656 10.857 6.32355C11.1175 6.23055 11.3918 6.15614 11.6801 6.10034C11.9685 6.03523 12.2614 6.00268 12.559 6.00268C13.4891 6.00268 14.1773 6.25845 14.6238 6.76998C15.0795 7.2722 15.3073 7.94649 15.3073 8.79284V12.9502H14.3726L14.275 12.0294H14.2331C13.8518 12.327 13.4286 12.5828 12.9636 12.7967C12.5079 13.0106 12.0382 13.1176 11.5546 13.1176ZM11.8615 12.1968C12.2521 12.1968 12.6334 12.1131 13.0055 11.9457C13.3868 11.769 13.7728 11.5179 14.1634 11.1924V9.40667C13.4379 9.46248 12.8288 9.54153 12.3358 9.64383C11.8522 9.74614 11.4616 9.8717 11.164 10.0205C10.8756 10.16 10.671 10.3228 10.5501 10.5088C10.4292 10.6855 10.3688 10.8855 10.3688 11.1087C10.3688 11.304 10.4106 11.4714 10.4943 11.6109C10.578 11.7411 10.685 11.8527 10.8152 11.9457C10.9547 12.0294 11.1128 12.0945 11.2895 12.141C11.4755 12.1782 11.6662 12.1968 11.8615 12.1968Z\",\n  fill: \"currentColor\"\n}));\nconst Alert = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M2.375 15.0203H13.625C14.9067 15.0203 15.7271 14.0754 15.7271 12.9109C15.7271 12.5593 15.6392 12.2004 15.4487 11.8708L9.80908 2.04175C9.41357 1.33862 8.71045 0.979736 8 0.979736C7.28955 0.979736 6.5791 1.34595 6.18359 2.04175L0.543945 11.8782C0.353516 12.2078 0.265625 12.5593 0.265625 12.9109C0.265625 14.0754 1.09326 15.0203 2.375 15.0203ZM2.51416 13.614C2.06006 13.614 1.75977 13.2405 1.75977 12.8376C1.75977 12.7205 1.77441 12.574 1.84766 12.4421L7.34082 2.82544C7.4873 2.57642 7.74365 2.45923 8 2.45923C8.25635 2.45923 8.50537 2.57642 8.64453 2.82544L14.145 12.4568C14.2109 12.5813 14.2402 12.7205 14.2402 12.8376C14.2402 13.2405 13.9326 13.614 13.4785 13.614H2.51416ZM8 9.93726C8.40283 9.93726 8.63721 9.71021 8.64453 9.2854L8.75439 5.76245C8.76904 5.33032 8.44678 5.02271 7.99268 5.02271C7.53857 5.02271 7.22363 5.323 7.23828 5.75513L7.34082 9.29272C7.35547 9.71021 7.58984 9.93726 8 9.93726ZM8 12.3689C8.47607 12.3689 8.86426 12.0247 8.86426 11.5632C8.86426 11.0945 8.4834 10.7576 8 10.7576C7.52393 10.7576 7.13574 11.1018 7.13574 11.5632C7.13574 12.0247 7.53125 12.3689 8 12.3689Z\",\n  fill: \"currentColor\"\n}));\nconst Visibility = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M7.99634 15.5732C12.1492 15.5732 15.5769 12.1455 15.5769 8C15.5769 3.85449 12.1418 0.426758 7.98901 0.426758C3.84351 0.426758 0.423096 3.85449 0.423096 8C0.423096 12.1455 3.85083 15.5732 7.99634 15.5732ZM7.99634 14.0645C4.63452 14.0645 1.94653 11.3618 1.94653 8C1.94653 4.63818 4.63452 1.94287 7.98901 1.94287C11.3508 1.94287 14.0535 4.63818 14.0608 8C14.0681 11.3618 11.3582 14.0645 7.99634 14.0645ZM7.99634 11.1787C10.9919 11.1787 13.0281 8.76172 13.0281 8.00732C13.0281 7.26025 10.9919 4.83594 7.99634 4.83594C5.00806 4.83594 2.94995 7.26025 2.94995 8.00732C2.94995 8.76172 5.02271 11.1787 7.99634 11.1787ZM7.99634 10.0654C6.85376 10.0654 5.93091 9.12793 5.92358 8.00732C5.92358 6.86475 6.85376 5.94922 7.99634 5.94922C9.13159 5.94922 10.0544 6.86475 10.0544 8.00732C10.0544 9.12793 9.13159 10.0654 7.99634 10.0654ZM8.00366 8.9082C8.48706 8.9082 8.89722 8.49072 8.89722 8.00732C8.89722 7.52393 8.48706 7.10645 8.00366 7.10645C7.49829 7.10645 7.08813 7.52393 7.08813 8.00732C7.08813 8.49072 7.49829 8.9082 8.00366 8.9082Z\",\n  fill: \"currentColor\"\n}));\nconst VisibilityLogic = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 16 16\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M7.99634 15.5732C12.1492 15.5732 15.5769 12.1455 15.5769 8C15.5769 3.85449 12.1418 0.426758 7.98901 0.426758C3.84351 0.426758 0.423096 3.85449 0.423096 8C0.423096 12.1455 3.85083 15.5732 7.99634 15.5732ZM7.99634 14.0645C4.63452 14.0645 1.94653 11.3618 1.94653 8C1.94653 4.63818 4.63452 1.94287 7.98901 1.94287C11.3508 1.94287 14.0535 4.63818 14.0608 8C14.0681 11.3618 11.3582 14.0645 7.99634 14.0645ZM7.99634 11.1787C10.9919 11.1787 13.0281 8.76172 13.0281 8.00732C13.0281 7.26025 10.9919 4.83594 7.99634 4.83594C5.00806 4.83594 2.94995 7.26025 2.94995 8.00732C2.94995 8.76172 5.02271 11.1787 7.99634 11.1787ZM7.99634 10.0654C6.85376 10.0654 5.93091 9.12793 5.92358 8.00732C5.92358 6.86475 6.85376 5.94922 7.99634 5.94922C9.13159 5.94922 10.0544 6.86475 10.0544 8.00732C10.0544 9.12793 9.13159 10.0654 7.99634 10.0654ZM8.00366 8.9082C8.48706 8.9082 8.89722 8.49072 8.89722 8.00732C8.89722 7.52393 8.48706 7.10645 8.00366 7.10645C7.49829 7.10645 7.08813 7.52393 7.08813 8.00732C7.08813 8.49072 7.49829 8.9082 8.00366 8.9082Z\",\n  fill: \"red\"\n}));\nconst Code = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"svg\", {\n  width: \"16px\",\n  height: \"16px\",\n  viewBox: \"0 0 12 11.25\",\n  fill: \"none\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"g\", {\n  stroke: \"none\",\n  \"stroke-width\": \"1\",\n  fill: \"currentColor\",\n  \"fill-rule\": \"evenodd\"\n}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M6.523,2.729 C6.3261,2.6723 6.1212,2.7869 6.0644,2.9838 L4.582,8.1721 C4.5253,8.369 4.6399,8.574 4.8368,8.6307 C5.0337,8.6875 5.2387,8.5728 5.2954,8.376 L6.7778,3.1876 C6.8345,2.9908 6.7199,2.7858 6.523,2.729 Z M7.4565,4.1199 C7.3117,4.2647 7.3117,4.4998 7.4565,4.6445 L8.4906,5.6799 L7.4553,6.7152 C7.3105,6.86 7.3105,7.0951 7.4553,7.2399 C7.6001,7.3846 7.8352,7.3846 7.9799,7.2399 L9.277,5.9428 C9.4218,5.798 9.4218,5.5629 9.277,5.4182 L7.9799,4.1211 C7.8352,3.9763 7.6001,3.9763 7.4553,4.1211 L7.4565,4.1199 Z M3.9045,4.1199 C3.7598,3.9752 3.5247,3.9752 3.3799,4.1199 L2.0828,5.417 C1.9381,5.5618 1.9381,5.7969 2.0828,5.9416 L3.3799,7.2387 C3.5247,7.3835 3.7598,7.3835 3.9045,7.2387 C4.0493,7.0939 4.0493,6.8588 3.9045,6.7141 L2.8692,5.6799 L3.9045,4.6445 C4.0493,4.4998 4.0493,4.2647 3.9045,4.1199 Z\",\n  id: \"Fill-1\",\n  fill: \"currentColor\"\n}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"path\", {\n  d: \"M5.6799,0 C8.8147,0 11.3598,2.5451 11.3598,5.6799 C11.3598,8.8147 8.8147,11.3598 5.6799,11.3598 C2.5451,11.3598 0,8.8147 0,5.6799 C0,2.5451 2.5451,0 5.6799,0 Z M5.6827,1.1799 C8.1663,1.1799 10.1827,3.1963 10.1827,5.6799 C10.1827,8.1635 8.1663,10.1799 5.6827,10.1799 C3.1991,10.1799 1.1827,8.1635 1.1827,5.6799 C1.1827,3.1963 3.1991,1.1799 5.6827,1.1799 Z\",\n  fill: \"currentColor\"\n})));\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/tiny-icons/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/utils/index.js":
/*!***********************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/utils/index.js ***!
  \***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   findConfig: () => (/* binding */ findConfig),\n/* harmony export */   getChildNodes: () => (/* binding */ getChildNodes),\n/* harmony export */   getModuleConfig: () => (/* binding */ getModuleConfig),\n/* harmony export */   getModuleTypeLabel: () => (/* binding */ getModuleTypeLabel),\n/* harmony export */   getNodeTree: () => (/* binding */ getNodeTree),\n/* harmony export */   hasChildNode: () => (/* binding */ hasChildNode),\n/* harmony export */   hasCode: () => (/* binding */ hasCode),\n/* harmony export */   hasVisibility: () => (/* binding */ hasVisibility),\n/* harmony export */   isHoveringBefore: () => (/* binding */ isHoveringBefore),\n/* harmony export */   nodeHasDefinition: () => (/* binding */ nodeHasDefinition),\n/* harmony export */   sanitizeString: () => (/* binding */ sanitizeString),\n/* harmony export */   shouldAllowDrop: () => (/* binding */ shouldAllowDrop),\n/* harmony export */   shouldShowEmptyDropArea: () => (/* binding */ shouldShowEmptyDropArea),\n/* harmony export */   useSingleAndDoubleClick: () => (/* reexport safe */ _use_single_and_double_click__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dompurify */ \"./node_modules/dompurify/dist/purify.js\");\n/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! api */ \"./src/FL/Builder/system/api/index.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _use_single_and_double_click__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-single-and-double-click */ \"./src/FL/Builder/system/ui/outline-panel/outline/utils/use-single-and-double-click.js\");\n\n\n\n\n\nconst sanitizeString = (string = '') => {\n  return (0,dompurify__WEBPACK_IMPORTED_MODULE_0__.sanitize)(string, {\n    ALLOWED_TAGS: []\n  }).substring(0, 48);\n};\nconst getModuleDefinition = type => {\n  const {\n    contentItems\n  } = (0,api__WEBPACK_IMPORTED_MODULE_1__.getConfig)();\n  const def = contentItems.module.find(item => item.slug === type && !item.isAlias);\n  return 'object' === typeof def ? def : false;\n};\nconst getModuleTypeLabel = type => {\n  const def = getModuleDefinition(type);\n  return def ? def.name : type;\n};\nconst hasVisibility = settings => {\n  const {\n    responsive_display = '',\n    visibility_display = ''\n  } = settings;\n  const responsive = 'desktop,large,medium,mobile' !== responsive_display && '' !== responsive_display || '' !== visibility_display;\n  const logic = '' !== visibility_display;\n  if (logic && 'logic' === visibility_display) {\n    return 'logic';\n  }\n  if (responsive) {\n    return 'responsive';\n  }\n  return false;\n};\nconst hasCode = settings => {\n  const {\n    bb_css_code = '',\n    bb_js_code = ''\n  } = settings;\n  return '' !== bb_css_code || '' !== bb_js_code;\n};\nconst getChildNodes = (id, nodes) => {\n  return Object.values(nodes).filter(node => id === node.parent);\n};\nconst hasChildNode = (parentId, childId) => {\n  const children = (0,data__WEBPACK_IMPORTED_MODULE_2__.getChildren)(parentId);\n  if (parentId === childId) {\n    return true;\n  }\n  for (let i in children) {\n    if (children[i].node === childId) {\n      return true;\n    } else if (hasChildNode(children[i].node, childId)) {\n      return true;\n    }\n  }\n  return false;\n};\nconst getNodeTree = nodes => {\n  const flat = Object.values(nodes);\n  const tree = [];\n  flat.forEach(node => {\n    if (null === node.parent) {\n      return tree.push(node);\n    }\n    const parentIndex = flat.findIndex(item => item.node === node.parent);\n    if (!flat[parentIndex].children) {\n      return flat[parentIndex].children = [node];\n    }\n    flat[parentIndex].children.push(node);\n  });\n  return tree;\n};\n\n/**\n * Check if the mouse is hovering in the before (top half) or after (bottom half) area of an element.\n */\nconst isHoveringBefore = (mouseY, y, height) => {\n  const half = height / 2;\n  const threshold = y + half;\n  return mouseY <= threshold;\n};\nconst shouldAllowDrop = (parentType, parentId, dragType, dragId) => {\n  const dragRules = {\n    'layout': ['row', 'column-group', 'column', 'module'],\n    'row': ['column-group', 'column', 'module'],\n    'column-group': ['column', 'module'],\n    'column': ['module'],\n    'module': ['module']\n  };\n  if (!dragRules[parentType].includes(dragType)) {\n    return false;\n  }\n  if ('module' === parentType) {\n    const dragNode = (0,data__WEBPACK_IMPORTED_MODULE_2__.getNode)(dragId);\n    const {\n      accepts\n    } = getModuleConfig(parentId);\n\n    // Don't allow dropping into child modules of the node being dragged.\n    if (hasChildNode(dragId, parentId)) {\n      return false;\n    }\n\n    // Don't allow dropping unaccepted modules into a container module.\n    if ('object' === typeof accepts && accepts.length && !accepts.includes(dragNode.settings.type)) {\n      return false;\n    }\n  }\n  return true;\n};\nconst shouldShowEmptyDropArea = (type, id, hasChildren, global, templateNodeId) => {\n  if (hasChildren || global && !FLBuilderConfig.userTemplateType) {\n    return false;\n  } else if ('module' === type) {\n    const config = getModuleConfig(id);\n    if (FLBuilderConfig.userTemplateType && global && id !== templateNodeId) {\n      return false;\n    } else if ('undefined' === typeof config) {\n      return false;\n    } else if ('all' === config.accepts || 0 < config.accepts.length) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Cache the module type slugs\n */\nlet moduleTypeList = [];\nconst getModuleTypeList = (keys = false) => {\n  if (0 >= moduleTypeList.length) {\n    const {\n      contentItems\n    } = (0,api__WEBPACK_IMPORTED_MODULE_1__.getConfig)(); // FLBuilderConfig\n    moduleTypeList = contentItems.module.filter(module => !module.isAlias && module.slug !== undefined);\n  }\n  if (keys) {\n    return moduleTypeList.map(module => module.slug);\n  }\n  return moduleTypeList;\n};\nconst getWidgetTypeList = (keys = false) => {\n  const {\n    contentItems\n  } = (0,api__WEBPACK_IMPORTED_MODULE_1__.getConfig)();\n  const list = contentItems.module.filter(module => module.isWidget && module.name !== undefined);\n  if (keys) {\n    return list.map(module => module.name);\n  }\n  return list;\n};\nconst getACFTypeList = (keys = false) => {\n  const {\n    contentItems\n  } = (0,api__WEBPACK_IMPORTED_MODULE_1__.getConfig)();\n  const list = contentItems.module.filter(module => module.isAlias && module.settings.acf_block_type !== undefined);\n  if (keys) {\n    return list.map(module => module.settings.acf_block_type);\n  }\n  return list;\n};\nconst findConfig = settings => {\n  // Different compare logic if the module is a WordPress widget\n  if (settings.type === 'widget') {\n    return getWidgetTypeList().find(item => settings.widget_title === item.name);\n  }\n  // Different compare logic if the module is an ACF block\n  if (settings.type === 'acf-block') {\n    return getACFTypeList().find(item => settings.acf_block_type === item.settings.acf_block_type);\n  }\n  // Standard compare logic for other modules \n  return getModuleTypeList().find(item => settings.type === item.slug);\n};\nconst nodeHasDefinition = (type, settings) => {\n  if ('widget' === settings.type) {\n    return getWidgetTypeList(true).includes(settings.widget_title);\n  } else if ('acf-block' === settings.type) {\n    return getACFTypeList(true).includes(settings.acf_block_type);\n  } else if ('module' === type) {\n    return getModuleTypeList(true).includes(settings.type);\n  }\n  return true;\n};\nconst getModuleConfig = id => {\n  const node = (0,data__WEBPACK_IMPORTED_MODULE_2__.getNode)(id);\n  // Skipping the column group node and non-module nodes as they are just containers with no settings object\n  if (node.type !== 'module' || node.type === 'column-group') {\n    return {\n      accepts: []\n    };\n  }\n  // A check in case of undefined or missing module definitions\n  if (!nodeHasDefinition(node.type, node.settings)) {\n    return {\n      accepts: []\n    };\n  }\n  return findConfig(node.settings);\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/utils/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/outline-panel/outline/utils/use-single-and-double-click.js":
/*!*********************************************************************************************!*\
  !*** ./src/FL/Builder/system/ui/outline-panel/outline/utils/use-single-and-double-click.js ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\nconst noop = () => {};\nconst requestTimeout = (fn, delay, registerCancel) => {\n  const start = new Date().getTime();\n  const loop = () => {\n    const delta = new Date().getTime() - start;\n    if (delta >= delay) {\n      fn();\n      registerCancel(noop);\n      return;\n    }\n    const raf = requestAnimationFrame(loop);\n    registerCancel(() => cancelAnimationFrame(raf));\n  };\n  const raf = requestAnimationFrame(loop);\n  registerCancel(() => cancelAnimationFrame(raf));\n};\nconst useCancelableScheduledWork = () => {\n  const cancelCallback = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(noop);\n  const registerCancel = fn => cancelCallback.current = fn;\n  const cancelScheduledWork = () => cancelCallback.current();\n\n  // Cancels the current scheduled work before the \"unmount\"\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    return cancelScheduledWork;\n  }, []);\n  return [registerCancel, cancelScheduledWork];\n};\nconst useSingleAndDoubleClick = ({\n  onClick,\n  onDoubleClick,\n  delay = 300\n}) => {\n  const [registerCancel, cancelScheduledRaf] = useCancelableScheduledWork();\n  const handleClick = () => {\n    cancelScheduledRaf();\n    requestTimeout(onClick, delay, registerCancel);\n  };\n  const handleDoubleClick = () => {\n    cancelScheduledRaf();\n    onDoubleClick();\n  };\n  return [handleClick, handleDoubleClick];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSingleAndDoubleClick);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/outline-panel/outline/utils/use-single-and-double-click.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/panel-manager/frame/index.js":
/*!***************************************************************!*\
  !*** ./src/FL/Builder/system/ui/panel-manager/frame/index.js ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\nconst Frame = ({\n  className,\n  ...rest\n}) => {\n  const isOffset = () => FLBuilder.PinnedUI.getPinnedSide() === 'right' && !FLBuilder.PinnedUI.isCollapsed() ? 'fl-builder-workspace-panel-offset' : null;\n  const [offset, setOffset] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(isOffset());\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()('fl-builder-workspace-panel', className, offset);\n  FLBuilder.addHook('didPinContentPanel', () => {\n    setOffset(isOffset());\n  });\n  if (isOffset()) {\n    jQuery('.fl-builder--panel-header .fl-builder--tab-button.is-showing').removeClass('is-showing');\n  }\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n    className: classes\n  }, rest));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Frame);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/panel-manager/frame/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/panel-manager/index.js":
/*!*********************************************************!*\
  !*** ./src/FL/Builder/system/ui/panel-manager/index.js ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frame */ \"./src/FL/Builder/system/ui/panel-manager/frame/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/panel-manager/style.scss\");\n\n\n\n\nconst handleObjectOrFunction = obj => {\n  return 'function' === typeof obj ? obj() : obj;\n};\nconst PanelManager = () => {\n  const {\n    currentPanel,\n    panels\n  } = (0,data__WEBPACK_IMPORTED_MODULE_1__.useSystemState)();\n  let panel = null;\n  if (currentPanel in panels) {\n    panel = panels[currentPanel];\n  } else {\n    return null;\n  }\n  const {\n    routerProps,\n    onHistoryChanged,\n    root,\n    render,\n    frame = _frame__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n    // Allows frame component to be overriden by registered panel\n    className: panelClassName,\n    wrapClassName,\n    onMount = () => {},\n    onUnmount = () => {}\n  } = panel;\n  const Frame = false === frame ? react__WEBPACK_IMPORTED_MODULE_0__.Fragment : frame;\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: wrapClassName\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Frame, {\n    className: false !== frame && panelClassName\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PanelContent, {\n    onMount: onMount,\n    onUnmount: onUnmount,\n    Content: root ? root : render /* support legacy render prop */\n  })));\n};\nconst PanelContent = ({\n  onMount = () => {},\n  onUnmount = () => {},\n  Content\n}) => {\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    onMount();\n    return () => onUnmount();\n  }, []);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Content, null);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PanelManager);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/panel-manager/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/panel-manager/style.scss":
/*!***********************************************************!*\
  !*** ./src/FL/Builder/system/ui/panel-manager/style.scss ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/panel-manager/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/shortcuts-panel/index.js":
/*!***********************************************************!*\
  !*** ./src/FL/Builder/system/ui/shortcuts-panel/index.js ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel */ \"./src/FL/Builder/system/ui/shortcuts-panel/panel/index.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/FL/Builder/system/data/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/shortcuts-panel/style.scss\");\n\n\n\n\nconst ShortcutsList = ({\n  shortcuts\n}) => {\n  if (0 === Object.keys(shortcuts).length) {\n    return null;\n  }\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"ul\", {\n    className: \"fl-ui-shortcut-list\"\n  }, Object.values(shortcuts).map((item, i) => {\n    const {\n      label,\n      keyLabel\n    } = item;\n    const key = {\n      __html: keyLabel\n    };\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"li\", {\n      key: i\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", null, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"span\", {\n      className: \"fl-ui-shortcut-item-keycode\",\n      dangerouslySetInnerHTML: key\n    }));\n  }));\n};\nconst ShortcutsPanel = () => {\n  const {\n    setShouldShowShortcuts\n  } = (0,data__WEBPACK_IMPORTED_MODULE_2__.getSystemActions)();\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel__WEBPACK_IMPORTED_MODULE_1__.Panel, {\n    title: \"Keyboard Shortcuts\",\n    onClose: () => setShouldShowShortcuts(false),\n    className: \"fl-ui-help\",\n    style: {\n      width: 660,\n      maxWidth: '95vw'\n    }\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ShortcutsList, {\n    shortcuts: FLBuilderConfig.keyboardShortcuts\n  }));\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShortcutsPanel);\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/shortcuts-panel/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/shortcuts-panel/panel/index.js":
/*!*****************************************************************!*\
  !*** ./src/FL/Builder/system/ui/shortcuts-panel/panel/index.js ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Panel: () => (/* binding */ Panel)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _art__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../art */ \"./src/FL/Builder/system/ui/art/index.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ \"./src/FL/Builder/system/ui/shortcuts-panel/panel/style.scss\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n\n\n\n\nconst Panel = ({\n  className,\n  children,\n  title,\n  actions,\n  showCloseButton = true,\n  onClose = () => {},\n  ...rest\n}) => {\n  const classes = classnames__WEBPACK_IMPORTED_MODULE_1___default()({\n    'fl-ui-panel-area': true\n  }, className);\n  const TrailingActions = () => {\n    if (!actions && !showCloseButton) {\n      return null;\n    }\n    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n      className: \"fl-ui-panel-trailing-actions\"\n    }, actions, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"button\", {\n      onClick: onClose,\n      className: \"fl-ui-button\"\n    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_art__WEBPACK_IMPORTED_MODULE_2__.Icon.Close, null)));\n  };\n  const stopProp = e => e.stopPropagation();\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: classes,\n    onClick: onClose\n  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n    className: \"fl-ui-panel\"\n  }, rest, {\n    onClick: stopProp\n  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-ui-panel-topbar\"\n  }, title && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-ui-panel-title\"\n  }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(TrailingActions, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n    className: \"fl-ui-panel-content\"\n  }, children)));\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/shortcuts-panel/panel/index.js?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/shortcuts-panel/panel/style.scss":
/*!*******************************************************************!*\
  !*** ./src/FL/Builder/system/ui/shortcuts-panel/panel/style.scss ***!
  \*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/shortcuts-panel/panel/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/shortcuts-panel/style.scss":
/*!*************************************************************!*\
  !*** ./src/FL/Builder/system/ui/shortcuts-panel/style.scss ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/shortcuts-panel/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/ui/style.scss":
/*!*********************************************!*\
  !*** ./src/FL/Builder/system/ui/style.scss ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/ui/style.scss?\n}");

/***/ }),

/***/ "./src/FL/Builder/system/utils.js":
/*!****************************************!*\
  !*** ./src/FL/Builder/system/utils.js ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   renderForVersion: () => (/* binding */ renderForVersion)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst isAtLeastReact18 = 18 <= parseInt(react__WEBPACK_IMPORTED_MODULE_0___default().version.split('.')[0]);\nconst renderForVersion = content => {\n  const mountNode = window.parent.document.getElementById('fl-ui-root');\n  mountNode.classList.add('fluid', 'fl', 'uid');\n  if (isAtLeastReact18) {\n    const root = (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createRoot)(mountNode);\n    root.render(content);\n  } else {\n    (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.render)(content, mountNode);\n  }\n};\n\n//# sourceURL=webpack://bb-plugin/./src/FL/Builder/system/utils.js?\n}");

/***/ }),

/***/ "fl-state":
/*!***************************!*\
  !*** external "FL.state" ***!
  \***************************/
/***/ ((module) => {

"use strict";
module.exports = FL.state;

/***/ }),

/***/ "react":
/*!************************!*\
  !*** external "React" ***!
  \************************/
/***/ ((module) => {

"use strict";
module.exports = React;

/***/ }),

/***/ "react-dom":
/*!***************************!*\
  !*** external "ReactDOM" ***!
  \***************************/
/***/ ((module) => {

"use strict";
module.exports = ReactDOM;

/***/ }),

/***/ "redux":
/*!************************!*\
  !*** external "Redux" ***!
  \************************/
/***/ ((module) => {

"use strict";
module.exports = Redux;

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	(() => {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module can't be inlined because the eval devtool is used.
/******/ 	var __webpack_exports__ = __webpack_require__("./src/FL/Builder/system/index.js");
/******/ 	
/******/ })()
;