wp/wp-includes/js/dist/block-editor.js
changeset 22 8c2e4d02f4ef
parent 21 48c4eec2b7e6
--- a/wp/wp-includes/js/dist/block-editor.js	Fri Sep 05 18:40:08 2025 +0200
+++ b/wp/wp-includes/js/dist/block-editor.js	Fri Sep 05 18:52:52 2025 +0200
@@ -1,2480 +1,14 @@
 /******/ (() => { // webpackBootstrap
 /******/ 	var __webpack_modules__ = ({
 
-/***/ 4306:
-/***/ (function(module, exports) {
-
-var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
-	autosize 4.0.4
-	license: MIT
-	http://www.jacklmoore.com/autosize
-*/
-(function (global, factory) {
-	if (true) {
-		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
-		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
-		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-	} else { var mod; }
-})(this, function (module, exports) {
-	'use strict';
-
-	var map = typeof Map === "function" ? new Map() : function () {
-		var keys = [];
-		var values = [];
-
-		return {
-			has: function has(key) {
-				return keys.indexOf(key) > -1;
-			},
-			get: function get(key) {
-				return values[keys.indexOf(key)];
-			},
-			set: function set(key, value) {
-				if (keys.indexOf(key) === -1) {
-					keys.push(key);
-					values.push(value);
-				}
-			},
-			delete: function _delete(key) {
-				var index = keys.indexOf(key);
-				if (index > -1) {
-					keys.splice(index, 1);
-					values.splice(index, 1);
-				}
-			}
-		};
-	}();
-
-	var createEvent = function createEvent(name) {
-		return new Event(name, { bubbles: true });
-	};
-	try {
-		new Event('test');
-	} catch (e) {
-		// IE does not support `new Event()`
-		createEvent = function createEvent(name) {
-			var evt = document.createEvent('Event');
-			evt.initEvent(name, true, false);
-			return evt;
-		};
-	}
-
-	function assign(ta) {
-		if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
-
-		var heightOffset = null;
-		var clientWidth = null;
-		var cachedHeight = null;
-
-		function init() {
-			var style = window.getComputedStyle(ta, null);
-
-			if (style.resize === 'vertical') {
-				ta.style.resize = 'none';
-			} else if (style.resize === 'both') {
-				ta.style.resize = 'horizontal';
-			}
-
-			if (style.boxSizing === 'content-box') {
-				heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
-			} else {
-				heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
-			}
-			// Fix when a textarea is not on document body and heightOffset is Not a Number
-			if (isNaN(heightOffset)) {
-				heightOffset = 0;
-			}
-
-			update();
-		}
-
-		function changeOverflow(value) {
-			{
-				// Chrome/Safari-specific fix:
-				// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
-				// made available by removing the scrollbar. The following forces the necessary text reflow.
-				var width = ta.style.width;
-				ta.style.width = '0px';
-				// Force reflow:
-				/* jshint ignore:start */
-				ta.offsetWidth;
-				/* jshint ignore:end */
-				ta.style.width = width;
-			}
-
-			ta.style.overflowY = value;
-		}
-
-		function getParentOverflows(el) {
-			var arr = [];
-
-			while (el && el.parentNode && el.parentNode instanceof Element) {
-				if (el.parentNode.scrollTop) {
-					arr.push({
-						node: el.parentNode,
-						scrollTop: el.parentNode.scrollTop
-					});
-				}
-				el = el.parentNode;
-			}
-
-			return arr;
-		}
-
-		function resize() {
-			if (ta.scrollHeight === 0) {
-				// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
-				return;
-			}
-
-			var overflows = getParentOverflows(ta);
-			var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
-
-			ta.style.height = '';
-			ta.style.height = ta.scrollHeight + heightOffset + 'px';
-
-			// used to check if an update is actually necessary on window.resize
-			clientWidth = ta.clientWidth;
-
-			// prevents scroll-position jumping
-			overflows.forEach(function (el) {
-				el.node.scrollTop = el.scrollTop;
-			});
-
-			if (docTop) {
-				document.documentElement.scrollTop = docTop;
-			}
-		}
-
-		function update() {
-			resize();
-
-			var styleHeight = Math.round(parseFloat(ta.style.height));
-			var computed = window.getComputedStyle(ta, null);
-
-			// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
-			var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
-
-			// The actual height not matching the style height (set via the resize method) indicates that 
-			// the max-height has been exceeded, in which case the overflow should be allowed.
-			if (actualHeight < styleHeight) {
-				if (computed.overflowY === 'hidden') {
-					changeOverflow('scroll');
-					resize();
-					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
-				}
-			} else {
-				// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
-				if (computed.overflowY !== 'hidden') {
-					changeOverflow('hidden');
-					resize();
-					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
-				}
-			}
-
-			if (cachedHeight !== actualHeight) {
-				cachedHeight = actualHeight;
-				var evt = createEvent('autosize:resized');
-				try {
-					ta.dispatchEvent(evt);
-				} catch (err) {
-					// Firefox will throw an error on dispatchEvent for a detached element
-					// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
-				}
-			}
-		}
-
-		var pageResize = function pageResize() {
-			if (ta.clientWidth !== clientWidth) {
-				update();
-			}
-		};
-
-		var destroy = function (style) {
-			window.removeEventListener('resize', pageResize, false);
-			ta.removeEventListener('input', update, false);
-			ta.removeEventListener('keyup', update, false);
-			ta.removeEventListener('autosize:destroy', destroy, false);
-			ta.removeEventListener('autosize:update', update, false);
-
-			Object.keys(style).forEach(function (key) {
-				ta.style[key] = style[key];
-			});
-
-			map.delete(ta);
-		}.bind(ta, {
-			height: ta.style.height,
-			resize: ta.style.resize,
-			overflowY: ta.style.overflowY,
-			overflowX: ta.style.overflowX,
-			wordWrap: ta.style.wordWrap
-		});
-
-		ta.addEventListener('autosize:destroy', destroy, false);
-
-		// IE9 does not fire onpropertychange or oninput for deletions,
-		// so binding to onkeyup to catch most of those events.
-		// There is no way that I know of to detect something like 'cut' in IE9.
-		if ('onpropertychange' in ta && 'oninput' in ta) {
-			ta.addEventListener('keyup', update, false);
-		}
-
-		window.addEventListener('resize', pageResize, false);
-		ta.addEventListener('input', update, false);
-		ta.addEventListener('autosize:update', update, false);
-		ta.style.overflowX = 'hidden';
-		ta.style.wordWrap = 'break-word';
-
-		map.set(ta, {
-			destroy: destroy,
-			update: update
-		});
-
-		init();
-	}
-
-	function destroy(ta) {
-		var methods = map.get(ta);
-		if (methods) {
-			methods.destroy();
-		}
-	}
-
-	function update(ta) {
-		var methods = map.get(ta);
-		if (methods) {
-			methods.update();
-		}
-	}
-
-	var autosize = null;
-
-	// Do nothing in Node.js environment and IE8 (or lower)
-	if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
-		autosize = function autosize(el) {
-			return el;
-		};
-		autosize.destroy = function (el) {
-			return el;
-		};
-		autosize.update = function (el) {
-			return el;
-		};
-	} else {
-		autosize = function autosize(el, options) {
-			if (el) {
-				Array.prototype.forEach.call(el.length ? el : [el], function (x) {
-					return assign(x, options);
-				});
-			}
-			return el;
-		};
-		autosize.destroy = function (el) {
-			if (el) {
-				Array.prototype.forEach.call(el.length ? el : [el], destroy);
-			}
-			return el;
-		};
-		autosize.update = function (el) {
-			if (el) {
-				Array.prototype.forEach.call(el.length ? el : [el], update);
-			}
-			return el;
-		};
-	}
-
-	exports.default = autosize;
-	module.exports = exports['default'];
-});
-
-/***/ }),
-
-/***/ 6109:
-/***/ ((module) => {
-
-// This code has been refactored for 140 bytes
-// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js
-var computedStyle = function (el, prop, getComputedStyle) {
-  getComputedStyle = window.getComputedStyle;
-
-  // In one fell swoop
-  return (
-    // If we have getComputedStyle
-    getComputedStyle ?
-      // Query it
-      // TODO: From CSS-Query notes, we might need (node, null) for FF
-      getComputedStyle(el) :
-
-    // Otherwise, we are in IE and use currentStyle
-      el.currentStyle
-  )[
-    // Switch to camelCase for CSSOM
-    // DEV: Grabbed from jQuery
-    // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
-    // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
-    prop.replace(/-(\w)/gi, function (word, letter) {
-      return letter.toUpperCase();
-    })
-  ];
-};
-
-module.exports = computedStyle;
-
-
-/***/ }),
-
-/***/ 5417:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-/*istanbul ignore start*/
-
-
-Object.defineProperty(exports, "__esModule", ({
-  value: true
-}));
-exports["default"] = Diff;
-
-/*istanbul ignore end*/
-function Diff() {}
-
-Diff.prototype = {
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  diff: function diff(oldString, newString) {
-    /*istanbul ignore start*/
-    var
-    /*istanbul ignore end*/
-    options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
-    var callback = options.callback;
-
-    if (typeof options === 'function') {
-      callback = options;
-      options = {};
-    }
-
-    this.options = options;
-    var self = this;
-
-    function done(value) {
-      if (callback) {
-        setTimeout(function () {
-          callback(undefined, value);
-        }, 0);
-        return true;
-      } else {
-        return value;
-      }
-    } // Allow subclasses to massage the input prior to running
-
-
-    oldString = this.castInput(oldString);
-    newString = this.castInput(newString);
-    oldString = this.removeEmpty(this.tokenize(oldString));
-    newString = this.removeEmpty(this.tokenize(newString));
-    var newLen = newString.length,
-        oldLen = oldString.length;
-    var editLength = 1;
-    var maxEditLength = newLen + oldLen;
-    var bestPath = [{
-      newPos: -1,
-      components: []
-    }]; // Seed editLength = 0, i.e. the content starts with the same values
-
-    var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
-
-    if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
-      // Identity per the equality and tokenizer
-      return done([{
-        value: this.join(newString),
-        count: newString.length
-      }]);
-    } // Main worker method. checks all permutations of a given edit length for acceptance.
-
-
-    function execEditLength() {
-      for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
-        var basePath =
-        /*istanbul ignore start*/
-        void 0
-        /*istanbul ignore end*/
-        ;
-
-        var addPath = bestPath[diagonalPath - 1],
-            removePath = bestPath[diagonalPath + 1],
-            _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
-
-        if (addPath) {
-          // No one else is going to attempt to use this value, clear it
-          bestPath[diagonalPath - 1] = undefined;
-        }
-
-        var canAdd = addPath && addPath.newPos + 1 < newLen,
-            canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
-
-        if (!canAdd && !canRemove) {
-          // If this path is a terminal then prune
-          bestPath[diagonalPath] = undefined;
-          continue;
-        } // Select the diagonal that we want to branch from. We select the prior
-        // path whose position in the new string is the farthest from the origin
-        // and does not pass the bounds of the diff graph
-
-
-        if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
-          basePath = clonePath(removePath);
-          self.pushComponent(basePath.components, undefined, true);
-        } else {
-          basePath = addPath; // No need to clone, we've pulled it from the list
-
-          basePath.newPos++;
-          self.pushComponent(basePath.components, true, undefined);
-        }
-
-        _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
-
-        if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
-          return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
-        } else {
-          // Otherwise track this path as a potential candidate and continue.
-          bestPath[diagonalPath] = basePath;
-        }
-      }
-
-      editLength++;
-    } // Performs the length of edit iteration. Is a bit fugly as this has to support the
-    // sync and async mode which is never fun. Loops over execEditLength until a value
-    // is produced.
-
-
-    if (callback) {
-      (function exec() {
-        setTimeout(function () {
-          // This should not happen, but we want to be safe.
-
-          /* istanbul ignore next */
-          if (editLength > maxEditLength) {
-            return callback();
-          }
-
-          if (!execEditLength()) {
-            exec();
-          }
-        }, 0);
-      })();
-    } else {
-      while (editLength <= maxEditLength) {
-        var ret = execEditLength();
-
-        if (ret) {
-          return ret;
-        }
-      }
-    }
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  pushComponent: function pushComponent(components, added, removed) {
-    var last = components[components.length - 1];
-
-    if (last && last.added === added && last.removed === removed) {
-      // We need to clone here as the component clone operation is just
-      // as shallow array clone
-      components[components.length - 1] = {
-        count: last.count + 1,
-        added: added,
-        removed: removed
-      };
-    } else {
-      components.push({
-        count: 1,
-        added: added,
-        removed: removed
-      });
-    }
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
-    var newLen = newString.length,
-        oldLen = oldString.length,
-        newPos = basePath.newPos,
-        oldPos = newPos - diagonalPath,
-        commonCount = 0;
-
-    while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
-      newPos++;
-      oldPos++;
-      commonCount++;
-    }
-
-    if (commonCount) {
-      basePath.components.push({
-        count: commonCount
-      });
-    }
-
-    basePath.newPos = newPos;
-    return oldPos;
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  equals: function equals(left, right) {
-    if (this.options.comparator) {
-      return this.options.comparator(left, right);
-    } else {
-      return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
-    }
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  removeEmpty: function removeEmpty(array) {
-    var ret = [];
-
-    for (var i = 0; i < array.length; i++) {
-      if (array[i]) {
-        ret.push(array[i]);
-      }
-    }
-
-    return ret;
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  castInput: function castInput(value) {
-    return value;
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  tokenize: function tokenize(value) {
-    return value.split('');
-  },
-
-  /*istanbul ignore start*/
-
-  /*istanbul ignore end*/
-  join: function join(chars) {
-    return chars.join('');
-  }
-};
-
-function buildValues(diff, components, newString, oldString, useLongestToken) {
-  var componentPos = 0,
-      componentLen = components.length,
-      newPos = 0,
-      oldPos = 0;
-
-  for (; componentPos < componentLen; componentPos++) {
-    var component = components[componentPos];
-
-    if (!component.removed) {
-      if (!component.added && useLongestToken) {
-        var value = newString.slice(newPos, newPos + component.count);
-        value = value.map(function (value, i) {
-          var oldValue = oldString[oldPos + i];
-          return oldValue.length > value.length ? oldValue : value;
-        });
-        component.value = diff.join(value);
-      } else {
-        component.value = diff.join(newString.slice(newPos, newPos + component.count));
-      }
-
-      newPos += component.count; // Common case
-
-      if (!component.added) {
-        oldPos += component.count;
-      }
-    } else {
-      component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
-      oldPos += component.count; // Reverse add and remove so removes are output first to match common convention
-      // The diffing algorithm is tied to add then remove output and this is the simplest
-      // route to get the desired output with minimal overhead.
-
-      if (componentPos && components[componentPos - 1].added) {
-        var tmp = components[componentPos - 1];
-        components[componentPos - 1] = components[componentPos];
-        components[componentPos] = tmp;
-      }
-    }
-  } // Special case handle for when one terminal is ignored (i.e. whitespace).
-  // For this case we merge the terminal into the prior string and drop the change.
-  // This is only available for string mode.
-
-
-  var lastComponent = components[componentLen - 1];
-
-  if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
-    components[componentLen - 2].value += lastComponent.value;
-    components.pop();
-  }
-
-  return components;
-}
-
-function clonePath(path) {
-  return {
-    newPos: path.newPos,
-    components: path.components.slice(0)
-  };
-}
-
-
-/***/ }),
-
-/***/ 8021:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-var __webpack_unused_export__;
-/*istanbul ignore start*/
-
-
-__webpack_unused_export__ = ({
-  value: true
-});
-exports.JJ = diffChars;
-__webpack_unused_export__ = void 0;
-
-/*istanbul ignore end*/
-var
-/*istanbul ignore start*/
-_base = _interopRequireDefault(__webpack_require__(5417))
-/*istanbul ignore end*/
-;
-
-/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/*istanbul ignore end*/
-var characterDiff = new
-/*istanbul ignore start*/
-_base
-/*istanbul ignore end*/
-.
-/*istanbul ignore start*/
-default
-/*istanbul ignore end*/
-();
-
-/*istanbul ignore start*/
-__webpack_unused_export__ = characterDiff;
-
-/*istanbul ignore end*/
-function diffChars(oldStr, newStr, options) {
-  return characterDiff.diff(oldStr, newStr, options);
-}
-
-
-/***/ }),
-
-/***/ 7734:
-/***/ ((module) => {
-
-"use strict";
-
-
-// do not edit .js files directly - edit src/index.jst
-
-
-  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';
-
-
-module.exports = function equal(a, b) {
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-
-    if ((a instanceof Map) && (b instanceof Map)) {
-      if (a.size !== b.size) return false;
-      for (i of a.entries())
-        if (!b.has(i[0])) return false;
-      for (i of a.entries())
-        if (!equal(i[1], b.get(i[0]))) return false;
-      return true;
-    }
-
-    if ((a instanceof Set) && (b instanceof Set)) {
-      if (a.size !== b.size) return false;
-      for (i of a.entries())
-        if (!b.has(i[0])) return false;
-      return true;
-    }
-
-    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (a[i] !== b[i]) return false;
-      return true;
-    }
-
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-
-    for (i = length; i-- !== 0;) {
-      var key = keys[i];
-
-      if (!equal(a[key], b[key])) return false;
-    }
-
-    return true;
-  }
-
-  // true if both NaN, false otherwise
-  return a!==a && b!==b;
-};
-
-
-/***/ }),
-
-/***/ 5215:
-/***/ ((module) => {
-
-"use strict";
-
-
-// do not edit .js files directly - edit src/index.jst
-
-
-
-module.exports = function equal(a, b) {
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-
-    for (i = length; i-- !== 0;) {
-      var key = keys[i];
-
-      if (!equal(a[key], b[key])) return false;
-    }
-
-    return true;
-  }
-
-  // true if both NaN, false otherwise
-  return a!==a && b!==b;
-};
-
-
-/***/ }),
-
-/***/ 461:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-// Load in dependencies
-var computedStyle = __webpack_require__(6109);
-
-/**
- * Calculate the `line-height` of a given node
- * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
- * @returns {Number} `line-height` of the element in pixels
- */
-function lineHeight(node) {
-  // Grab the line-height via style
-  var lnHeightStr = computedStyle(node, 'line-height');
-  var lnHeight = parseFloat(lnHeightStr, 10);
-
-  // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
-  if (lnHeightStr === lnHeight + '') {
-    // Save the old lineHeight style and update the em unit to the element
-    var _lnHeightStyle = node.style.lineHeight;
-    node.style.lineHeight = lnHeightStr + 'em';
-
-    // Calculate the em based height
-    lnHeightStr = computedStyle(node, 'line-height');
-    lnHeight = parseFloat(lnHeightStr, 10);
-
-    // Revert the lineHeight style
-    if (_lnHeightStyle) {
-      node.style.lineHeight = _lnHeightStyle;
-    } else {
-      delete node.style.lineHeight;
-    }
-  }
-
-  // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
-  // DEV: `em` units are converted to `pt` in IE6
-  // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
-  if (lnHeightStr.indexOf('pt') !== -1) {
-    lnHeight *= 4;
-    lnHeight /= 3;
-  // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
-  } else if (lnHeightStr.indexOf('mm') !== -1) {
-    lnHeight *= 96;
-    lnHeight /= 25.4;
-  // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
-  } else if (lnHeightStr.indexOf('cm') !== -1) {
-    lnHeight *= 96;
-    lnHeight /= 2.54;
-  // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
-  } else if (lnHeightStr.indexOf('in') !== -1) {
-    lnHeight *= 96;
-  // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
-  } else if (lnHeightStr.indexOf('pc') !== -1) {
-    lnHeight *= 16;
-  }
-
-  // Continue our computation
-  lnHeight = Math.round(lnHeight);
-
-  // If the line-height is "normal", calculate by font-size
-  if (lnHeightStr === 'normal') {
-    // Create a temporary node
-    var nodeName = node.nodeName;
-    var _node = document.createElement(nodeName);
-    _node.innerHTML = '&nbsp;';
-
-    // If we have a text area, reset it to only 1 row
-    // https://github.com/twolfson/line-height/issues/4
-    if (nodeName.toUpperCase() === 'TEXTAREA') {
-      _node.setAttribute('rows', '1');
-    }
-
-    // Set the font-size of the element
-    var fontSizeStr = computedStyle(node, 'font-size');
-    _node.style.fontSize = fontSizeStr;
-
-    // Remove default padding/border which can affect offset height
-    // https://github.com/twolfson/line-height/issues/4
-    // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
-    _node.style.padding = '0px';
-    _node.style.border = '0px';
-
-    // Append it to the body
-    var body = document.body;
-    body.appendChild(_node);
-
-    // Assume the line height of the element is the height
-    var height = _node.offsetHeight;
-    lnHeight = height;
-
-    // Remove our child from the DOM
-    body.removeChild(_node);
-  }
-
-  // Return the calculated height
-  return lnHeight;
-}
-
-// Export lineHeight
-module.exports = lineHeight;
-
-
-/***/ }),
-
-/***/ 7520:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = __webpack_require__(7191);
-
-
-/***/ }),
-
-/***/ 8202:
-/***/ ((module) => {
-
-"use strict";
-/**
- * Copyright (c) 2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- * @providesModule ExecutionEnvironment
- */
-
-/*jslint evil: true */
-
-
-
-var canUseDOM = !!(
-  typeof window !== 'undefined' &&
-  window.document &&
-  window.document.createElement
-);
-
-/**
- * Simple, lightweight module assisting with the detection and context of
- * Worker. Helps avoid circular dependencies and allows code to reason about
- * whether or not they are in a Worker, even if they never include the main
- * `ReactWorker` dependency.
- */
-var ExecutionEnvironment = {
-
-  canUseDOM: canUseDOM,
-
-  canUseWorkers: typeof Worker !== 'undefined',
-
-  canUseEventListeners:
-    canUseDOM && !!(window.addEventListener || window.attachEvent),
-
-  canUseViewport: canUseDOM && !!window.screen,
-
-  isInWorker: !canUseDOM // For now, this is true - might change in the future.
-
-};
-
-module.exports = ExecutionEnvironment;
-
+/***/ 197:
+/***/ (() => {
+
+/* (ignored) */
 
 /***/ }),
 
-/***/ 2213:
-/***/ ((module) => {
-
-/**
- * Copyright 2004-present Facebook. All Rights Reserved.
- *
- * @providesModule UserAgent_DEPRECATED
- */
-
-/**
- *  Provides entirely client-side User Agent and OS detection. You should prefer
- *  the non-deprecated UserAgent module when possible, which exposes our
- *  authoritative server-side PHP-based detection to the client.
- *
- *  Usage is straightforward:
- *
- *    if (UserAgent_DEPRECATED.ie()) {
- *      //  IE
- *    }
- *
- *  You can also do version checks:
- *
- *    if (UserAgent_DEPRECATED.ie() >= 7) {
- *      //  IE7 or better
- *    }
- *
- *  The browser functions will return NaN if the browser does not match, so
- *  you can also do version compares the other way:
- *
- *    if (UserAgent_DEPRECATED.ie() < 7) {
- *      //  IE6 or worse
- *    }
- *
- *  Note that the version is a float and may include a minor version number,
- *  so you should always use range operators to perform comparisons, not
- *  strict equality.
- *
- *  **Note:** You should **strongly** prefer capability detection to browser
- *  version detection where it's reasonable:
- *
- *    http://www.quirksmode.org/js/support.html
- *
- *  Further, we have a large number of mature wrapper functions and classes
- *  which abstract away many browser irregularities. Check the documentation,
- *  grep for things, or ask on javascript@lists.facebook.com before writing yet
- *  another copy of "event || window.event".
- *
- */
-
-var _populated = false;
-
-// Browsers
-var _ie, _firefox, _opera, _webkit, _chrome;
-
-// Actual IE browser for compatibility mode
-var _ie_real_version;
-
-// Platforms
-var _osx, _windows, _linux, _android;
-
-// Architectures
-var _win64;
-
-// Devices
-var _iphone, _ipad, _native;
-
-var _mobile;
-
-function _populate() {
-  if (_populated) {
-    return;
-  }
-
-  _populated = true;
-
-  // To work around buggy JS libraries that can't handle multi-digit
-  // version numbers, Opera 10's user agent string claims it's Opera
-  // 9, then later includes a Version/X.Y field:
-  //
-  // Opera/9.80 (foo) Presto/2.2.15 Version/10.10
-  var uas = navigator.userAgent;
-  var agent = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(uas);
-  var os    = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);
-
-  _iphone = /\b(iPhone|iP[ao]d)/.exec(uas);
-  _ipad = /\b(iP[ao]d)/.exec(uas);
-  _android = /Android/i.exec(uas);
-  _native = /FBAN\/\w+;/i.exec(uas);
-  _mobile = /Mobile/i.exec(uas);
-
-  // Note that the IE team blog would have you believe you should be checking
-  // for 'Win64; x64'.  But MSDN then reveals that you can actually be coming
-  // from either x64 or ia64;  so ultimately, you should just check for Win64
-  // as in indicator of whether you're in 64-bit IE.  32-bit IE on 64-bit
-  // Windows will send 'WOW64' instead.
-  _win64 = !!(/Win64/.exec(uas));
-
-  if (agent) {
-    _ie = agent[1] ? parseFloat(agent[1]) : (
-          agent[5] ? parseFloat(agent[5]) : NaN);
-    // IE compatibility mode
-    if (_ie && document && document.documentMode) {
-      _ie = document.documentMode;
-    }
-    // grab the "true" ie version from the trident token if available
-    var trident = /(?:Trident\/(\d+.\d+))/.exec(uas);
-    _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;
-
-    _firefox = agent[2] ? parseFloat(agent[2]) : NaN;
-    _opera   = agent[3] ? parseFloat(agent[3]) : NaN;
-    _webkit  = agent[4] ? parseFloat(agent[4]) : NaN;
-    if (_webkit) {
-      // We do not add the regexp to the above test, because it will always
-      // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in
-      // the userAgent string.
-      agent = /(?:Chrome\/(\d+\.\d+))/.exec(uas);
-      _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;
-    } else {
-      _chrome = NaN;
-    }
-  } else {
-    _ie = _firefox = _opera = _chrome = _webkit = NaN;
-  }
-
-  if (os) {
-    if (os[1]) {
-      // Detect OS X version.  If no version number matches, set _osx to true.
-      // Version examples:  10, 10_6_1, 10.7
-      // Parses version number as a float, taking only first two sets of
-      // digits.  If only one set of digits is found, returns just the major
-      // version number.
-      var ver = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(uas);
-
-      _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;
-    } else {
-      _osx = false;
-    }
-    _windows = !!os[2];
-    _linux   = !!os[3];
-  } else {
-    _osx = _windows = _linux = false;
-  }
-}
-
-var UserAgent_DEPRECATED = {
-
-  /**
-   *  Check if the UA is Internet Explorer.
-   *
-   *
-   *  @return float|NaN Version number (if match) or NaN.
-   */
-  ie: function() {
-    return _populate() || _ie;
-  },
-
-  /**
-   * Check if we're in Internet Explorer compatibility mode.
-   *
-   * @return bool true if in compatibility mode, false if
-   * not compatibility mode or not ie
-   */
-  ieCompatibilityMode: function() {
-    return _populate() || (_ie_real_version > _ie);
-  },
-
-
-  /**
-   * Whether the browser is 64-bit IE.  Really, this is kind of weak sauce;  we
-   * only need this because Skype can't handle 64-bit IE yet.  We need to remove
-   * this when we don't need it -- tracked by #601957.
-   */
-  ie64: function() {
-    return UserAgent_DEPRECATED.ie() && _win64;
-  },
-
-  /**
-   *  Check if the UA is Firefox.
-   *
-   *
-   *  @return float|NaN Version number (if match) or NaN.
-   */
-  firefox: function() {
-    return _populate() || _firefox;
-  },
-
-
-  /**
-   *  Check if the UA is Opera.
-   *
-   *
-   *  @return float|NaN Version number (if match) or NaN.
-   */
-  opera: function() {
-    return _populate() || _opera;
-  },
-
-
-  /**
-   *  Check if the UA is WebKit.
-   *
-   *
-   *  @return float|NaN Version number (if match) or NaN.
-   */
-  webkit: function() {
-    return _populate() || _webkit;
-  },
-
-  /**
-   *  For Push
-   *  WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit
-   */
-  safari: function() {
-    return UserAgent_DEPRECATED.webkit();
-  },
-
-  /**
-   *  Check if the UA is a Chrome browser.
-   *
-   *
-   *  @return float|NaN Version number (if match) or NaN.
-   */
-  chrome : function() {
-    return _populate() || _chrome;
-  },
-
-
-  /**
-   *  Check if the user is running Windows.
-   *
-   *  @return bool `true' if the user's OS is Windows.
-   */
-  windows: function() {
-    return _populate() || _windows;
-  },
-
-
-  /**
-   *  Check if the user is running Mac OS X.
-   *
-   *  @return float|bool   Returns a float if a version number is detected,
-   *                       otherwise true/false.
-   */
-  osx: function() {
-    return _populate() || _osx;
-  },
-
-  /**
-   * Check if the user is running Linux.
-   *
-   * @return bool `true' if the user's OS is some flavor of Linux.
-   */
-  linux: function() {
-    return _populate() || _linux;
-  },
-
-  /**
-   * Check if the user is running on an iPhone or iPod platform.
-   *
-   * @return bool `true' if the user is running some flavor of the
-   *    iPhone OS.
-   */
-  iphone: function() {
-    return _populate() || _iphone;
-  },
-
-  mobile: function() {
-    return _populate() || (_iphone || _ipad || _android || _mobile);
-  },
-
-  nativeApp: function() {
-    // webviews inside of the native apps
-    return _populate() || _native;
-  },
-
-  android: function() {
-    return _populate() || _android;
-  },
-
-  ipad: function() {
-    return _populate() || _ipad;
-  }
-};
-
-module.exports = UserAgent_DEPRECATED;
-
-
-/***/ }),
-
-/***/ 1087:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/**
- * Copyright 2013-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- * @providesModule isEventSupported
- */
-
-
-
-var ExecutionEnvironment = __webpack_require__(8202);
-
-var useHasFeature;
-if (ExecutionEnvironment.canUseDOM) {
-  useHasFeature =
-    document.implementation &&
-    document.implementation.hasFeature &&
-    // always returns true in newer browsers as per the standard.
-    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
-    document.implementation.hasFeature('', '') !== true;
-}
-
-/**
- * Checks if an event is supported in the current execution environment.
- *
- * NOTE: This will not work correctly for non-generic events such as `change`,
- * `reset`, `load`, `error`, and `select`.
- *
- * Borrows from Modernizr.
- *
- * @param {string} eventNameSuffix Event name, e.g. "click".
- * @param {?boolean} capture Check if the capture phase is supported.
- * @return {boolean} True if the event is supported.
- * @internal
- * @license Modernizr 3.0.0pre (Custom Build) | MIT
- */
-function isEventSupported(eventNameSuffix, capture) {
-  if (!ExecutionEnvironment.canUseDOM ||
-      capture && !('addEventListener' in document)) {
-    return false;
-  }
-
-  var eventName = 'on' + eventNameSuffix;
-  var isSupported = eventName in document;
-
-  if (!isSupported) {
-    var element = document.createElement('div');
-    element.setAttribute(eventName, 'return;');
-    isSupported = typeof element[eventName] === 'function';
-  }
-
-  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
-    // This is the only way to test support for the `wheel` event in IE9+.
-    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
-  }
-
-  return isSupported;
-}
-
-module.exports = isEventSupported;
-
-
-/***/ }),
-
-/***/ 7191:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/**
- * Copyright (c) 2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- * @providesModule normalizeWheel
- * @typechecks
- */
-
-
-
-var UserAgent_DEPRECATED = __webpack_require__(2213);
-
-var isEventSupported = __webpack_require__(1087);
-
-
-// Reasonable defaults
-var PIXEL_STEP  = 10;
-var LINE_HEIGHT = 40;
-var PAGE_HEIGHT = 800;
-
-/**
- * Mouse wheel (and 2-finger trackpad) support on the web sucks.  It is
- * complicated, thus this doc is long and (hopefully) detailed enough to answer
- * your questions.
- *
- * If you need to react to the mouse wheel in a predictable way, this code is
- * like your bestest friend. * hugs *
- *
- * As of today, there are 4 DOM event types you can listen to:
- *
- *   'wheel'                -- Chrome(31+), FF(17+), IE(9+)
- *   'mousewheel'           -- Chrome, IE(6+), Opera, Safari
- *   'MozMousePixelScroll'  -- FF(3.5 only!) (2010-2013) -- don't bother!
- *   'DOMMouseScroll'       -- FF(0.9.7+) since 2003
- *
- * So what to do?  The is the best:
- *
- *   normalizeWheel.getEventType();
- *
- * In your event callback, use this code to get sane interpretation of the
- * deltas.  This code will return an object with properties:
- *
- *   spinX   -- normalized spin speed (use for zoom) - x plane
- *   spinY   -- " - y plane
- *   pixelX  -- normalized distance (to pixels) - x plane
- *   pixelY  -- " - y plane
- *
- * Wheel values are provided by the browser assuming you are using the wheel to
- * scroll a web page by a number of lines or pixels (or pages).  Values can vary
- * significantly on different platforms and browsers, forgetting that you can
- * scroll at different speeds.  Some devices (like trackpads) emit more events
- * at smaller increments with fine granularity, and some emit massive jumps with
- * linear speed or acceleration.
- *
- * This code does its best to normalize the deltas for you:
- *
- *   - spin is trying to normalize how far the wheel was spun (or trackpad
- *     dragged).  This is super useful for zoom support where you want to
- *     throw away the chunky scroll steps on the PC and make those equal to
- *     the slow and smooth tiny steps on the Mac. Key data: This code tries to
- *     resolve a single slow step on a wheel to 1.
- *
- *   - pixel is normalizing the desired scroll delta in pixel units.  You'll
- *     get the crazy differences between browsers, but at least it'll be in
- *     pixels!
- *
- *   - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT.  This
- *     should translate to positive value zooming IN, negative zooming OUT.
- *     This matches the newer 'wheel' event.
- *
- * Why are there spinX, spinY (or pixels)?
- *
- *   - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn
- *     with a mouse.  It results in side-scrolling in the browser by default.
- *
- *   - spinY is what you expect -- it's the classic axis of a mouse wheel.
- *
- *   - I dropped spinZ/pixelZ.  It is supported by the DOM 3 'wheel' event and
- *     probably is by browsers in conjunction with fancy 3D controllers .. but
- *     you know.
- *
- * Implementation info:
- *
- * Examples of 'wheel' event if you scroll slowly (down) by one step with an
- * average mouse:
- *
- *   OS X + Chrome  (mouse)     -    4   pixel delta  (wheelDelta -120)
- *   OS X + Safari  (mouse)     -  N/A   pixel delta  (wheelDelta  -12)
- *   OS X + Firefox (mouse)     -    0.1 line  delta  (wheelDelta  N/A)
- *   Win8 + Chrome  (mouse)     -  100   pixel delta  (wheelDelta -120)
- *   Win8 + Firefox (mouse)     -    3   line  delta  (wheelDelta -120)
- *
- * On the trackpad:
- *
- *   OS X + Chrome  (trackpad)  -    2   pixel delta  (wheelDelta   -6)
- *   OS X + Firefox (trackpad)  -    1   pixel delta  (wheelDelta  N/A)
- *
- * On other/older browsers.. it's more complicated as there can be multiple and
- * also missing delta values.
- *
- * The 'wheel' event is more standard:
- *
- * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
- *
- * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and
- * deltaX, deltaY and deltaZ.  Some browsers provide other values to maintain
- * backward compatibility with older events.  Those other values help us
- * better normalize spin speed.  Example of what the browsers provide:
- *
- *                          | event.wheelDelta | event.detail
- *        ------------------+------------------+--------------
- *          Safari v5/OS X  |       -120       |       0
- *          Safari v5/Win7  |       -120       |       0
- *         Chrome v17/OS X  |       -120       |       0
- *         Chrome v17/Win7  |       -120       |       0
- *                IE9/Win7  |       -120       |   undefined
- *         Firefox v4/OS X  |     undefined    |       1
- *         Firefox v4/Win7  |     undefined    |       3
- *
- */
-function normalizeWheel(/*object*/ event) /*object*/ {
-  var sX = 0, sY = 0,       // spinX, spinY
-      pX = 0, pY = 0;       // pixelX, pixelY
-
-  // Legacy
-  if ('detail'      in event) { sY = event.detail; }
-  if ('wheelDelta'  in event) { sY = -event.wheelDelta / 120; }
-  if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }
-  if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }
-
-  // side scrolling on FF with DOMMouseScroll
-  if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
-    sX = sY;
-    sY = 0;
-  }
-
-  pX = sX * PIXEL_STEP;
-  pY = sY * PIXEL_STEP;
-
-  if ('deltaY' in event) { pY = event.deltaY; }
-  if ('deltaX' in event) { pX = event.deltaX; }
-
-  if ((pX || pY) && event.deltaMode) {
-    if (event.deltaMode == 1) {          // delta in LINE units
-      pX *= LINE_HEIGHT;
-      pY *= LINE_HEIGHT;
-    } else {                             // delta in PAGE units
-      pX *= PAGE_HEIGHT;
-      pY *= PAGE_HEIGHT;
-    }
-  }
-
-  // Fall-back if spin cannot be determined
-  if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }
-  if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }
-
-  return { spinX  : sX,
-           spinY  : sY,
-           pixelX : pX,
-           pixelY : pY };
-}
-
-
-/**
- * The best combination if you prefer spinX + spinY normalization.  It favors
- * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with
- * 'wheel' event, making spin speed determination impossible.
- */
-normalizeWheel.getEventType = function() /*string*/ {
-  return (UserAgent_DEPRECATED.firefox())
-           ? 'DOMMouseScroll'
-           : (isEventSupported('wheel'))
-               ? 'wheel'
-               : 'mousewheel';
-};
-
-module.exports = normalizeWheel;
-
-
-/***/ }),
-
-/***/ 2775:
-/***/ ((module) => {
-
-var x=String;
-var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x}};
-module.exports=create();
-module.exports.createColors = create;
-
-
-/***/ }),
-
-/***/ 4465:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-
-
-/***/ }),
-
-/***/ 8036:
-/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-__webpack_require__(4465);
-const postcss_1 = __importDefault(__webpack_require__(4529));
-const PostCSSPlugin_1 = __importDefault(__webpack_require__(3576));
-module.exports = (0, PostCSSPlugin_1.default)(postcss_1.default);
-
-
-/***/ }),
-
-/***/ 5525:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.prefixWrapCSSSelector = exports.prefixWrapCSSRule = void 0;
-const CSSSelector_1 = __webpack_require__(3467);
-const prefixWrapCSSRule = (cssRule, nested, ignoredSelectors, prefixSelector, prefixRootTags) => {
-    // Check each rule to see if it exactly matches our prefix selector, when
-    // this happens, don't try to prefix that selector.
-    const rules = cssRule.selectors.filter((selector) => !(0, CSSSelector_1.cssRuleMatchesPrefixSelector)({ selector: selector }, prefixSelector));
-    if (rules.length === 0) {
-        return;
-    }
-    cssRule.selector = rules
-        .map((cssSelector) => (0, exports.prefixWrapCSSSelector)(cssSelector, cssRule, nested, ignoredSelectors, prefixSelector, prefixRootTags))
-        .filter(CSSSelector_1.isValidCSSSelector)
-        .join(", ");
-};
-exports.prefixWrapCSSRule = prefixWrapCSSRule;
-const prefixWrapCSSSelector = (cssSelector, cssRule, nested, ignoredSelectors, prefixSelector, prefixRootTags) => {
-    const cleanedSelector = (0, CSSSelector_1.cleanSelector)(cssSelector);
-    if (cleanedSelector === "") {
-        return null;
-    }
-    // Don't prefix nested selected.
-    if (nested !== null && cleanedSelector.startsWith(nested, 0)) {
-        return cleanedSelector;
-    }
-    // Do not prefix keyframes rules.
-    if ((0, CSSSelector_1.isKeyframes)(cssRule)) {
-        return cleanedSelector;
-    }
-    // Check for matching ignored selectors
-    if (ignoredSelectors.some((currentValue) => cleanedSelector.match(currentValue))) {
-        return cleanedSelector;
-    }
-    // Anything other than a root tag is always prefixed.
-    if ((0, CSSSelector_1.isNotRootTag)(cleanedSelector)) {
-        return prefixSelector + " " + cleanedSelector;
-    }
-    // Handle special case where root tags should be converted into classes
-    // rather than being replaced.
-    if (prefixRootTags) {
-        return prefixSelector + " ." + cleanedSelector;
-    }
-    // HTML and Body elements cannot be contained within our container so lets
-    // extract their styles.
-    return cleanedSelector.replace(/^(body|html|:root)/, prefixSelector);
-};
-exports.prefixWrapCSSSelector = prefixWrapCSSSelector;
-
-
-/***/ }),
-
-/***/ 3467:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.cssRuleMatchesPrefixSelector = exports.isNotRootTag = exports.isKeyframes = exports.cleanSelector = exports.isValidCSSSelector = void 0;
-const ANY_WHITESPACE_AT_BEGINNING_OR_END = /(^\s*|\s*$)/g;
-const IS_ROOT_TAG = /^(body|html|:root).*$/;
-const isValidCSSSelector = (cssSelector) => {
-    return cssSelector !== null;
-};
-exports.isValidCSSSelector = isValidCSSSelector;
-const cleanSelector = (cssSelector) => {
-    return cssSelector.replace(ANY_WHITESPACE_AT_BEGINNING_OR_END, "");
-};
-exports.cleanSelector = cleanSelector;
-const isKeyframes = (cssRule) => {
-    const { parent } = cssRule;
-    const parentReal = parent;
-    // @see https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule
-    return (parent !== undefined &&
-        parentReal.type === "atrule" &&
-        parentReal.name !== undefined &&
-        parentReal.name.match(/keyframes$/) !== null);
-};
-exports.isKeyframes = isKeyframes;
-const isNotRootTag = (cleanSelector) => {
-    return !cleanSelector.match(IS_ROOT_TAG);
-};
-exports.isNotRootTag = isNotRootTag;
-const cssRuleMatchesPrefixSelector = (cssRule, prefixSelector) => {
-    const escapedPrefixSelector = prefixSelector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
-    // eslint-disable-next-line security-node/non-literal-reg-expr
-    const isPrefixSelector = new RegExp(`^${escapedPrefixSelector}$`);
-    return isPrefixSelector.test(cssRule.selector);
-};
-exports.cssRuleMatchesPrefixSelector = cssRuleMatchesPrefixSelector;
-
-
-/***/ }),
-
-/***/ 9411:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.shouldIncludeFilePath = void 0;
-const shouldIncludeFilePath = (filePath, whitelist, blacklist) => {
-    // If whitelist exists, check if rule is contained within it.
-    if (whitelist.length > 0) {
-        return (filePath != undefined &&
-            whitelist.some((currentValue) => filePath.match(currentValue)));
-    }
-    // If blacklist exists, check if rule is not contained within it.
-    if (blacklist.length > 0) {
-        return !(filePath != undefined &&
-            blacklist.some((currentValue) => filePath.match(currentValue)));
-    }
-    // In all other cases, presume rule should be prefixed.
-    return true;
-};
-exports.shouldIncludeFilePath = shouldIncludeFilePath;
-
-
-/***/ }),
-
-/***/ 8061:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    var desc = Object.getOwnPropertyDescriptor(m, k);
-    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
-      desc = { enumerable: true, get: function() { return m[k]; } };
-    }
-    Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.asPostCSSv7PluginGenerator = void 0;
-const PostCSSPrefixWrap_1 = __importStar(__webpack_require__(1311));
-const asPostCSSv7PluginGenerator = (postcss) => {
-    return postcss.plugin(PostCSSPrefixWrap_1.PLUGIN_NAME, (prefixSelector, options) => {
-        return new PostCSSPrefixWrap_1.default(prefixSelector, options).prefix();
-    });
-};
-exports.asPostCSSv7PluginGenerator = asPostCSSv7PluginGenerator;
-
-
-/***/ }),
-
-/***/ 2888:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    var desc = Object.getOwnPropertyDescriptor(m, k);
-    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
-      desc = { enumerable: true, get: function() { return m[k]; } };
-    }
-    Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.asPostCSSv8PluginGenerator = exports.isPostCSSv8 = void 0;
-const PostCSSPrefixWrap_1 = __importStar(__webpack_require__(1311));
-const isPostCSSv8 = (postcss) => postcss.Root !== undefined;
-exports.isPostCSSv8 = isPostCSSv8;
-const asPostCSSv8PluginGenerator = () => {
-    return (prefixSelector, options) => {
-        const plugin = new PostCSSPrefixWrap_1.default(prefixSelector, options);
-        return {
-            postcssPlugin: PostCSSPrefixWrap_1.PLUGIN_NAME,
-            Once(root) {
-                plugin.prefixRoot(root);
-            },
-        };
-    };
-};
-exports.asPostCSSv8PluginGenerator = asPostCSSv8PluginGenerator;
-
-
-/***/ }),
-
-/***/ 3576:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const PostCSS8Plugin_1 = __webpack_require__(2888);
-const PostCSS7Plugin_1 = __webpack_require__(8061);
-module.exports = (postcss) => {
-    if ((0, PostCSS8Plugin_1.isPostCSSv8)(postcss)) {
-        return (0, PostCSS8Plugin_1.asPostCSSv8PluginGenerator)();
-    }
-    else {
-        return (0, PostCSS7Plugin_1.asPostCSSv7PluginGenerator)(postcss);
-    }
-};
-
-
-/***/ }),
-
-/***/ 1311:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.PLUGIN_NAME = void 0;
-const CSSRuleWrapper_1 = __webpack_require__(5525);
-const FileIncludeList_1 = __webpack_require__(9411);
-exports.PLUGIN_NAME = "postcss-prefixwrap";
-class PostCSSPrefixWrap {
-    blacklist;
-    ignoredSelectors;
-    isPrefixSelector;
-    prefixRootTags;
-    prefixSelector;
-    whitelist;
-    nested;
-    constructor(prefixSelector, options = {}) {
-        this.blacklist = options.blacklist ?? [];
-        this.ignoredSelectors = options.ignoredSelectors ?? [];
-        this.isPrefixSelector = new RegExp(
-        // eslint-disable-next-line security-node/non-literal-reg-expr
-        `^${prefixSelector.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}$`);
-        this.prefixRootTags = options.prefixRootTags ?? false;
-        this.prefixSelector = prefixSelector;
-        this.whitelist = options.whitelist ?? [];
-        this.nested = options.nested ?? null;
-    }
-    prefixRoot(css) {
-        if ((0, FileIncludeList_1.shouldIncludeFilePath)(css.source?.input?.file, this.whitelist, this.blacklist)) {
-            css.walkRules((cssRule) => {
-                (0, CSSRuleWrapper_1.prefixWrapCSSRule)(cssRule, this.nested, this.ignoredSelectors, this.prefixSelector, this.prefixRootTags);
-            });
-        }
-    }
-    prefix() {
-        return (css) => {
-            this.prefixRoot(css);
-        };
-    }
-}
-exports["default"] = PostCSSPrefixWrap;
-
-
-/***/ }),
-
-/***/ 5404:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-const CSSValueParser = __webpack_require__(1544)
-
-/**
- * @type {import('postcss').PluginCreator}
- */
-module.exports = (opts) => {
-
-  const DEFAULTS = {
-    skipHostRelativeUrls: true,
-  }
-  const config = Object.assign(DEFAULTS, opts)
-
-  return {
-    postcssPlugin: 'rebaseUrl',
-
-    Declaration(decl) {
-      // The faster way to find Declaration node
-      const parsedValue = CSSValueParser(decl.value)
-
-      let valueChanged = false
-      parsedValue.walk(node => {
-        if (node.type !== 'function' || node.value !== 'url') {
-          return
-        }
-
-        const urlVal = node.nodes[0].value
-
-        // bases relative URLs with rootUrl
-        const basedUrl = new URL(urlVal, opts.rootUrl)
-
-        // skip host-relative, already normalized URLs (e.g. `/images/image.jpg`, without `..`s)
-        if ((basedUrl.pathname === urlVal) && config.skipHostRelativeUrls) {
-          return false // skip this value
-        }
-
-        node.nodes[0].value = basedUrl.toString()
-        valueChanged = true
-
-        return false // do not walk deeper
-      })
-
-      if (valueChanged) {
-        decl.value = CSSValueParser.stringify(parsedValue)
-      }
-
-    }
-  }
-}
-
-module.exports.postcss = true
-
-
-/***/ }),
-
-/***/ 1544:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var parse = __webpack_require__(8491);
-var walk = __webpack_require__(3815);
-var stringify = __webpack_require__(4725);
-
-function ValueParser(value) {
-  if (this instanceof ValueParser) {
-    this.nodes = parse(value);
-    return this;
-  }
-  return new ValueParser(value);
-}
-
-ValueParser.prototype.toString = function() {
-  return Array.isArray(this.nodes) ? stringify(this.nodes) : "";
-};
-
-ValueParser.prototype.walk = function(cb, bubble) {
-  walk(this.nodes, cb, bubble);
-  return this;
-};
-
-ValueParser.unit = __webpack_require__(1524);
-
-ValueParser.walk = walk;
-
-ValueParser.stringify = stringify;
-
-module.exports = ValueParser;
-
-
-/***/ }),
-
-/***/ 8491:
-/***/ ((module) => {
-
-var openParentheses = "(".charCodeAt(0);
-var closeParentheses = ")".charCodeAt(0);
-var singleQuote = "'".charCodeAt(0);
-var doubleQuote = '"'.charCodeAt(0);
-var backslash = "\\".charCodeAt(0);
-var slash = "/".charCodeAt(0);
-var comma = ",".charCodeAt(0);
-var colon = ":".charCodeAt(0);
-var star = "*".charCodeAt(0);
-var uLower = "u".charCodeAt(0);
-var uUpper = "U".charCodeAt(0);
-var plus = "+".charCodeAt(0);
-var isUnicodeRange = /^[a-f0-9?-]+$/i;
-
-module.exports = function(input) {
-  var tokens = [];
-  var value = input;
-
-  var next,
-    quote,
-    prev,
-    token,
-    escape,
-    escapePos,
-    whitespacePos,
-    parenthesesOpenPos;
-  var pos = 0;
-  var code = value.charCodeAt(pos);
-  var max = value.length;
-  var stack = [{ nodes: tokens }];
-  var balanced = 0;
-  var parent;
-
-  var name = "";
-  var before = "";
-  var after = "";
-
-  while (pos < max) {
-    // Whitespaces
-    if (code <= 32) {
-      next = pos;
-      do {
-        next += 1;
-        code = value.charCodeAt(next);
-      } while (code <= 32);
-      token = value.slice(pos, next);
-
-      prev = tokens[tokens.length - 1];
-      if (code === closeParentheses && balanced) {
-        after = token;
-      } else if (prev && prev.type === "div") {
-        prev.after = token;
-        prev.sourceEndIndex += token.length;
-      } else if (
-        code === comma ||
-        code === colon ||
-        (code === slash &&
-          value.charCodeAt(next + 1) !== star &&
-          (!parent ||
-            (parent && parent.type === "function" && parent.value !== "calc")))
-      ) {
-        before = token;
-      } else {
-        tokens.push({
-          type: "space",
-          sourceIndex: pos,
-          sourceEndIndex: next,
-          value: token
-        });
-      }
-
-      pos = next;
-
-      // Quotes
-    } else if (code === singleQuote || code === doubleQuote) {
-      next = pos;
-      quote = code === singleQuote ? "'" : '"';
-      token = {
-        type: "string",
-        sourceIndex: pos,
-        quote: quote
-      };
-      do {
-        escape = false;
-        next = value.indexOf(quote, next + 1);
-        if (~next) {
-          escapePos = next;
-          while (value.charCodeAt(escapePos - 1) === backslash) {
-            escapePos -= 1;
-            escape = !escape;
-          }
-        } else {
-          value += quote;
-          next = value.length - 1;
-          token.unclosed = true;
-        }
-      } while (escape);
-      token.value = value.slice(pos + 1, next);
-      token.sourceEndIndex = token.unclosed ? next : next + 1;
-      tokens.push(token);
-      pos = next + 1;
-      code = value.charCodeAt(pos);
-
-      // Comments
-    } else if (code === slash && value.charCodeAt(pos + 1) === star) {
-      next = value.indexOf("*/", pos);
-
-      token = {
-        type: "comment",
-        sourceIndex: pos,
-        sourceEndIndex: next + 2
-      };
-
-      if (next === -1) {
-        token.unclosed = true;
-        next = value.length;
-        token.sourceEndIndex = next;
-      }
-
-      token.value = value.slice(pos + 2, next);
-      tokens.push(token);
-
-      pos = next + 2;
-      code = value.charCodeAt(pos);
-
-      // Operation within calc
-    } else if (
-      (code === slash || code === star) &&
-      parent &&
-      parent.type === "function" &&
-      parent.value === "calc"
-    ) {
-      token = value[pos];
-      tokens.push({
-        type: "word",
-        sourceIndex: pos - before.length,
-        sourceEndIndex: pos + token.length,
-        value: token
-      });
-      pos += 1;
-      code = value.charCodeAt(pos);
-
-      // Dividers
-    } else if (code === slash || code === comma || code === colon) {
-      token = value[pos];
-
-      tokens.push({
-        type: "div",
-        sourceIndex: pos - before.length,
-        sourceEndIndex: pos + token.length,
-        value: token,
-        before: before,
-        after: ""
-      });
-      before = "";
-
-      pos += 1;
-      code = value.charCodeAt(pos);
-
-      // Open parentheses
-    } else if (openParentheses === code) {
-      // Whitespaces after open parentheses
-      next = pos;
-      do {
-        next += 1;
-        code = value.charCodeAt(next);
-      } while (code <= 32);
-      parenthesesOpenPos = pos;
-      token = {
-        type: "function",
-        sourceIndex: pos - name.length,
-        value: name,
-        before: value.slice(parenthesesOpenPos + 1, next)
-      };
-      pos = next;
-
-      if (name === "url" && code !== singleQuote && code !== doubleQuote) {
-        next -= 1;
-        do {
-          escape = false;
-          next = value.indexOf(")", next + 1);
-          if (~next) {
-            escapePos = next;
-            while (value.charCodeAt(escapePos - 1) === backslash) {
-              escapePos -= 1;
-              escape = !escape;
-            }
-          } else {
-            value += ")";
-            next = value.length - 1;
-            token.unclosed = true;
-          }
-        } while (escape);
-        // Whitespaces before closed
-        whitespacePos = next;
-        do {
-          whitespacePos -= 1;
-          code = value.charCodeAt(whitespacePos);
-        } while (code <= 32);
-        if (parenthesesOpenPos < whitespacePos) {
-          if (pos !== whitespacePos + 1) {
-            token.nodes = [
-              {
-                type: "word",
-                sourceIndex: pos,
-                sourceEndIndex: whitespacePos + 1,
-                value: value.slice(pos, whitespacePos + 1)
-              }
-            ];
-          } else {
-            token.nodes = [];
-          }
-          if (token.unclosed && whitespacePos + 1 !== next) {
-            token.after = "";
-            token.nodes.push({
-              type: "space",
-              sourceIndex: whitespacePos + 1,
-              sourceEndIndex: next,
-              value: value.slice(whitespacePos + 1, next)
-            });
-          } else {
-            token.after = value.slice(whitespacePos + 1, next);
-            token.sourceEndIndex = next;
-          }
-        } else {
-          token.after = "";
-          token.nodes = [];
-        }
-        pos = next + 1;
-        token.sourceEndIndex = token.unclosed ? next : pos;
-        code = value.charCodeAt(pos);
-        tokens.push(token);
-      } else {
-        balanced += 1;
-        token.after = "";
-        token.sourceEndIndex = pos + 1;
-        tokens.push(token);
-        stack.push(token);
-        tokens = token.nodes = [];
-        parent = token;
-      }
-      name = "";
-
-      // Close parentheses
-    } else if (closeParentheses === code && balanced) {
-      pos += 1;
-      code = value.charCodeAt(pos);
-
-      parent.after = after;
-      parent.sourceEndIndex += after.length;
-      after = "";
-      balanced -= 1;
-      stack[stack.length - 1].sourceEndIndex = pos;
-      stack.pop();
-      parent = stack[balanced];
-      tokens = parent.nodes;
-
-      // Words
-    } else {
-      next = pos;
-      do {
-        if (code === backslash) {
-          next += 1;
-        }
-        next += 1;
-        code = value.charCodeAt(next);
-      } while (
-        next < max &&
-        !(
-          code <= 32 ||
-          code === singleQuote ||
-          code === doubleQuote ||
-          code === comma ||
-          code === colon ||
-          code === slash ||
-          code === openParentheses ||
-          (code === star &&
-            parent &&
-            parent.type === "function" &&
-            parent.value === "calc") ||
-          (code === slash &&
-            parent.type === "function" &&
-            parent.value === "calc") ||
-          (code === closeParentheses && balanced)
-        )
-      );
-      token = value.slice(pos, next);
-
-      if (openParentheses === code) {
-        name = token;
-      } else if (
-        (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
-        plus === token.charCodeAt(1) &&
-        isUnicodeRange.test(token.slice(2))
-      ) {
-        tokens.push({
-          type: "unicode-range",
-          sourceIndex: pos,
-          sourceEndIndex: next,
-          value: token
-        });
-      } else {
-        tokens.push({
-          type: "word",
-          sourceIndex: pos,
-          sourceEndIndex: next,
-          value: token
-        });
-      }
-
-      pos = next;
-    }
-  }
-
-  for (pos = stack.length - 1; pos; pos -= 1) {
-    stack[pos].unclosed = true;
-    stack[pos].sourceEndIndex = value.length;
-  }
-
-  return stack[0].nodes;
-};
-
-
-/***/ }),
-
-/***/ 4725:
-/***/ ((module) => {
-
-function stringifyNode(node, custom) {
-  var type = node.type;
-  var value = node.value;
-  var buf;
-  var customResult;
-
-  if (custom && (customResult = custom(node)) !== undefined) {
-    return customResult;
-  } else if (type === "word" || type === "space") {
-    return value;
-  } else if (type === "string") {
-    buf = node.quote || "";
-    return buf + value + (node.unclosed ? "" : buf);
-  } else if (type === "comment") {
-    return "/*" + value + (node.unclosed ? "" : "*/");
-  } else if (type === "div") {
-    return (node.before || "") + value + (node.after || "");
-  } else if (Array.isArray(node.nodes)) {
-    buf = stringify(node.nodes, custom);
-    if (type !== "function") {
-      return buf;
-    }
-    return (
-      value +
-      "(" +
-      (node.before || "") +
-      buf +
-      (node.after || "") +
-      (node.unclosed ? "" : ")")
-    );
-  }
-  return value;
-}
-
-function stringify(nodes, custom) {
-  var result, i;
-
-  if (Array.isArray(nodes)) {
-    result = "";
-    for (i = nodes.length - 1; ~i; i -= 1) {
-      result = stringifyNode(nodes[i], custom) + result;
-    }
-    return result;
-  }
-  return stringifyNode(nodes, custom);
-}
-
-module.exports = stringify;
-
-
-/***/ }),
-
-/***/ 1524:
-/***/ ((module) => {
-
-var minus = "-".charCodeAt(0);
-var plus = "+".charCodeAt(0);
-var dot = ".".charCodeAt(0);
-var exp = "e".charCodeAt(0);
-var EXP = "E".charCodeAt(0);
-
-// Check if three code points would start a number
-// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
-function likeNumber(value) {
-  var code = value.charCodeAt(0);
-  var nextCode;
-
-  if (code === plus || code === minus) {
-    nextCode = value.charCodeAt(1);
-
-    if (nextCode >= 48 && nextCode <= 57) {
-      return true;
-    }
-
-    var nextNextCode = value.charCodeAt(2);
-
-    if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
-      return true;
-    }
-
-    return false;
-  }
-
-  if (code === dot) {
-    nextCode = value.charCodeAt(1);
-
-    if (nextCode >= 48 && nextCode <= 57) {
-      return true;
-    }
-
-    return false;
-  }
-
-  if (code >= 48 && code <= 57) {
-    return true;
-  }
-
-  return false;
-}
-
-// Consume a number
-// https://www.w3.org/TR/css-syntax-3/#consume-number
-module.exports = function(value) {
-  var pos = 0;
-  var length = value.length;
-  var code;
-  var nextCode;
-  var nextNextCode;
-
-  if (length === 0 || !likeNumber(value)) {
-    return false;
-  }
-
-  code = value.charCodeAt(pos);
-
-  if (code === plus || code === minus) {
-    pos++;
-  }
-
-  while (pos < length) {
-    code = value.charCodeAt(pos);
-
-    if (code < 48 || code > 57) {
-      break;
-    }
-
-    pos += 1;
-  }
-
-  code = value.charCodeAt(pos);
-  nextCode = value.charCodeAt(pos + 1);
-
-  if (code === dot && nextCode >= 48 && nextCode <= 57) {
-    pos += 2;
-
-    while (pos < length) {
-      code = value.charCodeAt(pos);
-
-      if (code < 48 || code > 57) {
-        break;
-      }
-
-      pos += 1;
-    }
-  }
-
-  code = value.charCodeAt(pos);
-  nextCode = value.charCodeAt(pos + 1);
-  nextNextCode = value.charCodeAt(pos + 2);
-
-  if (
-    (code === exp || code === EXP) &&
-    ((nextCode >= 48 && nextCode <= 57) ||
-      ((nextCode === plus || nextCode === minus) &&
-        nextNextCode >= 48 &&
-        nextNextCode <= 57))
-  ) {
-    pos += nextCode === plus || nextCode === minus ? 3 : 2;
-
-    while (pos < length) {
-      code = value.charCodeAt(pos);
-
-      if (code < 48 || code > 57) {
-        break;
-      }
-
-      pos += 1;
-    }
-  }
-
-  return {
-    number: value.slice(0, pos),
-    unit: value.slice(pos)
-  };
-};
-
-
-/***/ }),
-
-/***/ 3815:
-/***/ ((module) => {
-
-module.exports = function walk(nodes, cb, bubble) {
-  var i, max, node, result;
-
-  for (i = 0, max = nodes.length; i < max; i += 1) {
-    node = nodes[i];
-    if (!bubble) {
-      result = cb(node, i, nodes);
-    }
-
-    if (
-      result !== false &&
-      node.type === "function" &&
-      Array.isArray(node.nodes)
-    ) {
-      walk(node.nodes, cb, bubble);
-    }
-
-    if (bubble) {
-      cb(node, i, nodes);
-    }
-  }
-};
-
-
-/***/ }),
-
-/***/ 1326:
+/***/ 271:
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
 "use strict";
@@ -2482,497 +16,396 @@
 
 let Container = __webpack_require__(683)
 
-class AtRule extends Container {
+let LazyResult, Processor
+
+class Document extends Container {
   constructor(defaults) {
-    super(defaults)
-    this.type = 'atrule'
-  }
-
-  append(...children) {
-    if (!this.proxyOf.nodes) this.nodes = []
-    return super.append(...children)
-  }
-
-  prepend(...children) {
-    if (!this.proxyOf.nodes) this.nodes = []
-    return super.prepend(...children)
-  }
-}
-
-module.exports = AtRule
-AtRule.default = AtRule
-
-Container.registerAtRule(AtRule)
-
-
-/***/ }),
-
-/***/ 6589:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Node = __webpack_require__(7490)
-
-class Comment extends Node {
-  constructor(defaults) {
-    super(defaults)
-    this.type = 'comment'
-  }
-}
-
-module.exports = Comment
-Comment.default = Comment
+    // type needs to be passed to super, otherwise child roots won't be normalized correctly
+    super({ type: 'document', ...defaults })
+
+    if (!this.nodes) {
+      this.nodes = []
+    }
+  }
+
+  toResult(opts = {}) {
+    let lazy = new LazyResult(new Processor(), this, opts)
+
+    return lazy.stringify()
+  }
+}
+
+Document.registerLazyResult = dependant => {
+  LazyResult = dependant
+}
+
+Document.registerProcessor = dependant => {
+  Processor = dependant
+}
+
+module.exports = Document
+Document.default = Document
 
 
 /***/ }),
 
-/***/ 683:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+/***/ 346:
+/***/ ((module) => {
 
 "use strict";
 
 
-let { isClean, my } = __webpack_require__(1381)
-let Declaration = __webpack_require__(1516)
-let Comment = __webpack_require__(6589)
-let Node = __webpack_require__(7490)
-
-let parse, Rule, AtRule, Root
-
-function cleanSource(nodes) {
-  return nodes.map(i => {
-    if (i.nodes) i.nodes = cleanSource(i.nodes)
-    delete i.source
-    return i
-  })
-}
-
-function markDirtyUp(node) {
-  node[isClean] = false
-  if (node.proxyOf.nodes) {
-    for (let i of node.proxyOf.nodes) {
-      markDirtyUp(i)
-    }
-  }
-}
-
-class Container extends Node {
-  append(...children) {
-    for (let child of children) {
-      let nodes = this.normalize(child, this.last)
-      for (let node of nodes) this.proxyOf.nodes.push(node)
-    }
-
-    this.markDirty()
-
-    return this
-  }
-
-  cleanRaws(keepBetween) {
-    super.cleanRaws(keepBetween)
-    if (this.nodes) {
-      for (let node of this.nodes) node.cleanRaws(keepBetween)
-    }
-  }
-
-  each(callback) {
-    if (!this.proxyOf.nodes) return undefined
-    let iterator = this.getIterator()
-
-    let index, result
-    while (this.indexes[iterator] < this.proxyOf.nodes.length) {
-      index = this.indexes[iterator]
-      result = callback(this.proxyOf.nodes[index], index)
-      if (result === false) break
-
-      this.indexes[iterator] += 1
-    }
-
-    delete this.indexes[iterator]
-    return result
-  }
-
-  every(condition) {
-    return this.nodes.every(condition)
-  }
-
-  getIterator() {
-    if (!this.lastEach) this.lastEach = 0
-    if (!this.indexes) this.indexes = {}
-
-    this.lastEach += 1
-    let iterator = this.lastEach
-    this.indexes[iterator] = 0
-
-    return iterator
-  }
-
-  getProxyProcessor() {
-    return {
-      get(node, prop) {
-        if (prop === 'proxyOf') {
-          return node
-        } else if (!node[prop]) {
-          return node[prop]
-        } else if (
-          prop === 'each' ||
-          (typeof prop === 'string' && prop.startsWith('walk'))
-        ) {
-          return (...args) => {
-            return node[prop](
-              ...args.map(i => {
-                if (typeof i === 'function') {
-                  return (child, index) => i(child.toProxy(), index)
-                } else {
-                  return i
-                }
-              })
-            )
-          }
-        } else if (prop === 'every' || prop === 'some') {
-          return cb => {
-            return node[prop]((child, ...other) =>
-              cb(child.toProxy(), ...other)
-            )
-          }
-        } else if (prop === 'root') {
-          return () => node.root().toProxy()
-        } else if (prop === 'nodes') {
-          return node.nodes.map(i => i.toProxy())
-        } else if (prop === 'first' || prop === 'last') {
-          return node[prop].toProxy()
-        } else {
-          return node[prop]
-        }
-      },
-
-      set(node, prop, value) {
-        if (node[prop] === value) return true
-        node[prop] = value
-        if (prop === 'name' || prop === 'params' || prop === 'selector') {
-          node.markDirty()
-        }
-        return true
-      }
-    }
-  }
-
-  index(child) {
-    if (typeof child === 'number') return child
-    if (child.proxyOf) child = child.proxyOf
-    return this.proxyOf.nodes.indexOf(child)
-  }
-
-  insertAfter(exist, add) {
-    let existIndex = this.index(exist)
-    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
-    existIndex = this.index(exist)
-    for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
-
-    let index
-    for (let id in this.indexes) {
-      index = this.indexes[id]
-      if (existIndex < index) {
-        this.indexes[id] = index + nodes.length
-      }
-    }
-
-    this.markDirty()
-
-    return this
-  }
-
-  insertBefore(exist, add) {
-    let existIndex = this.index(exist)
-    let type = existIndex === 0 ? 'prepend' : false
-    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
-    existIndex = this.index(exist)
-    for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
-
-    let index
-    for (let id in this.indexes) {
-      index = this.indexes[id]
-      if (existIndex <= index) {
-        this.indexes[id] = index + nodes.length
-      }
-    }
-
-    this.markDirty()
-
-    return this
-  }
-
-  normalize(nodes, sample) {
-    if (typeof nodes === 'string') {
-      nodes = cleanSource(parse(nodes).nodes)
-    } else if (typeof nodes === 'undefined') {
-      nodes = []
-    } else if (Array.isArray(nodes)) {
-      nodes = nodes.slice(0)
-      for (let i of nodes) {
-        if (i.parent) i.parent.removeChild(i, 'ignore')
-      }
-    } else if (nodes.type === 'root' && this.type !== 'document') {
-      nodes = nodes.nodes.slice(0)
-      for (let i of nodes) {
-        if (i.parent) i.parent.removeChild(i, 'ignore')
-      }
-    } else if (nodes.type) {
-      nodes = [nodes]
-    } else if (nodes.prop) {
-      if (typeof nodes.value === 'undefined') {
-        throw new Error('Value field is missed in node creation')
-      } else if (typeof nodes.value !== 'string') {
-        nodes.value = String(nodes.value)
-      }
-      nodes = [new Declaration(nodes)]
-    } else if (nodes.selector) {
-      nodes = [new Rule(nodes)]
-    } else if (nodes.name) {
-      nodes = [new AtRule(nodes)]
-    } else if (nodes.text) {
-      nodes = [new Comment(nodes)]
-    } else {
-      throw new Error('Unknown node type in node creation')
-    }
-
-    let processed = nodes.map(i => {
-      /* c8 ignore next */
-      if (!i[my]) Container.rebuild(i)
-      i = i.proxyOf
-      if (i.parent) i.parent.removeChild(i)
-      if (i[isClean]) markDirtyUp(i)
-      if (typeof i.raws.before === 'undefined') {
-        if (sample && typeof sample.raws.before !== 'undefined') {
-          i.raws.before = sample.raws.before.replace(/\S/g, '')
-        }
-      }
-      i.parent = this.proxyOf
-      return i
-    })
-
-    return processed
-  }
-
-  prepend(...children) {
-    children = children.reverse()
-    for (let child of children) {
-      let nodes = this.normalize(child, this.first, 'prepend').reverse()
-      for (let node of nodes) this.proxyOf.nodes.unshift(node)
-      for (let id in this.indexes) {
-        this.indexes[id] = this.indexes[id] + nodes.length
-      }
-    }
-
-    this.markDirty()
-
-    return this
-  }
-
-  push(child) {
-    child.parent = this
-    this.proxyOf.nodes.push(child)
-    return this
-  }
-
-  removeAll() {
-    for (let node of this.proxyOf.nodes) node.parent = undefined
-    this.proxyOf.nodes = []
-
-    this.markDirty()
-
-    return this
-  }
-
-  removeChild(child) {
-    child = this.index(child)
-    this.proxyOf.nodes[child].parent = undefined
-    this.proxyOf.nodes.splice(child, 1)
-
-    let index
-    for (let id in this.indexes) {
-      index = this.indexes[id]
-      if (index >= child) {
-        this.indexes[id] = index - 1
-      }
-    }
-
-    this.markDirty()
-
-    return this
-  }
-
-  replaceValues(pattern, opts, callback) {
-    if (!callback) {
-      callback = opts
-      opts = {}
-    }
-
-    this.walkDecls(decl => {
-      if (opts.props && !opts.props.includes(decl.prop)) return
-      if (opts.fast && !decl.value.includes(opts.fast)) return
-
-      decl.value = decl.value.replace(pattern, callback)
-    })
-
-    this.markDirty()
-
-    return this
-  }
-
-  some(condition) {
-    return this.nodes.some(condition)
-  }
-
-  walk(callback) {
-    return this.each((child, i) => {
-      let result
-      try {
-        result = callback(child, i)
-      } catch (e) {
-        throw child.addToError(e)
-      }
-      if (result !== false && child.walk) {
-        result = child.walk(callback)
-      }
-
-      return result
-    })
-  }
-
-  walkAtRules(name, callback) {
-    if (!callback) {
-      callback = name
-      return this.walk((child, i) => {
-        if (child.type === 'atrule') {
-          return callback(child, i)
-        }
-      })
-    }
-    if (name instanceof RegExp) {
-      return this.walk((child, i) => {
-        if (child.type === 'atrule' && name.test(child.name)) {
-          return callback(child, i)
-        }
-      })
-    }
-    return this.walk((child, i) => {
-      if (child.type === 'atrule' && child.name === name) {
-        return callback(child, i)
-      }
-    })
-  }
-
-  walkComments(callback) {
-    return this.walk((child, i) => {
-      if (child.type === 'comment') {
-        return callback(child, i)
-      }
-    })
-  }
-
-  walkDecls(prop, callback) {
-    if (!callback) {
-      callback = prop
-      return this.walk((child, i) => {
-        if (child.type === 'decl') {
-          return callback(child, i)
-        }
-      })
-    }
-    if (prop instanceof RegExp) {
-      return this.walk((child, i) => {
-        if (child.type === 'decl' && prop.test(child.prop)) {
-          return callback(child, i)
-        }
-      })
-    }
-    return this.walk((child, i) => {
-      if (child.type === 'decl' && child.prop === prop) {
-        return callback(child, i)
-      }
-    })
-  }
-
-  walkRules(selector, callback) {
-    if (!callback) {
-      callback = selector
-
-      return this.walk((child, i) => {
-        if (child.type === 'rule') {
-          return callback(child, i)
-        }
-      })
-    }
-    if (selector instanceof RegExp) {
-      return this.walk((child, i) => {
-        if (child.type === 'rule' && selector.test(child.selector)) {
-          return callback(child, i)
-        }
-      })
-    }
-    return this.walk((child, i) => {
-      if (child.type === 'rule' && child.selector === selector) {
-        return callback(child, i)
-      }
-    })
-  }
-
-  get first() {
-    if (!this.proxyOf.nodes) return undefined
-    return this.proxyOf.nodes[0]
-  }
-
-  get last() {
-    if (!this.proxyOf.nodes) return undefined
-    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]
-  }
-}
-
-Container.registerParse = dependant => {
-  parse = dependant
-}
-
-Container.registerRule = dependant => {
-  Rule = dependant
-}
-
-Container.registerAtRule = dependant => {
-  AtRule = dependant
-}
-
-Container.registerRoot = dependant => {
-  Root = dependant
-}
-
-module.exports = Container
-Container.default = Container
-
-/* c8 ignore start */
-Container.rebuild = node => {
-  if (node.type === 'atrule') {
-    Object.setPrototypeOf(node, AtRule.prototype)
-  } else if (node.type === 'rule') {
-    Object.setPrototypeOf(node, Rule.prototype)
-  } else if (node.type === 'decl') {
-    Object.setPrototypeOf(node, Declaration.prototype)
-  } else if (node.type === 'comment') {
-    Object.setPrototypeOf(node, Comment.prototype)
-  } else if (node.type === 'root') {
-    Object.setPrototypeOf(node, Root.prototype)
-  }
-
-  node[my] = true
-
-  if (node.nodes) {
-    node.nodes.forEach(child => {
-      Container.rebuild(child)
-    })
-  }
-}
-/* c8 ignore stop */
+const DEFAULT_RAW = {
+  after: '\n',
+  beforeClose: '\n',
+  beforeComment: '\n',
+  beforeDecl: '\n',
+  beforeOpen: ' ',
+  beforeRule: '\n',
+  colon: ': ',
+  commentLeft: ' ',
+  commentRight: ' ',
+  emptyBody: '',
+  indent: '    ',
+  semicolon: false
+}
+
+function capitalize(str) {
+  return str[0].toUpperCase() + str.slice(1)
+}
+
+class Stringifier {
+  constructor(builder) {
+    this.builder = builder
+  }
+
+  atrule(node, semicolon) {
+    let name = '@' + node.name
+    let params = node.params ? this.rawValue(node, 'params') : ''
+
+    if (typeof node.raws.afterName !== 'undefined') {
+      name += node.raws.afterName
+    } else if (params) {
+      name += ' '
+    }
+
+    if (node.nodes) {
+      this.block(node, name + params)
+    } else {
+      let end = (node.raws.between || '') + (semicolon ? ';' : '')
+      this.builder(name + params + end, node)
+    }
+  }
+
+  beforeAfter(node, detect) {
+    let value
+    if (node.type === 'decl') {
+      value = this.raw(node, null, 'beforeDecl')
+    } else if (node.type === 'comment') {
+      value = this.raw(node, null, 'beforeComment')
+    } else if (detect === 'before') {
+      value = this.raw(node, null, 'beforeRule')
+    } else {
+      value = this.raw(node, null, 'beforeClose')
+    }
+
+    let buf = node.parent
+    let depth = 0
+    while (buf && buf.type !== 'root') {
+      depth += 1
+      buf = buf.parent
+    }
+
+    if (value.includes('\n')) {
+      let indent = this.raw(node, null, 'indent')
+      if (indent.length) {
+        for (let step = 0; step < depth; step++) value += indent
+      }
+    }
+
+    return value
+  }
+
+  block(node, start) {
+    let between = this.raw(node, 'between', 'beforeOpen')
+    this.builder(start + between + '{', node, 'start')
+
+    let after
+    if (node.nodes && node.nodes.length) {
+      this.body(node)
+      after = this.raw(node, 'after')
+    } else {
+      after = this.raw(node, 'after', 'emptyBody')
+    }
+
+    if (after) this.builder(after)
+    this.builder('}', node, 'end')
+  }
+
+  body(node) {
+    let last = node.nodes.length - 1
+    while (last > 0) {
+      if (node.nodes[last].type !== 'comment') break
+      last -= 1
+    }
+
+    let semicolon = this.raw(node, 'semicolon')
+    for (let i = 0; i < node.nodes.length; i++) {
+      let child = node.nodes[i]
+      let before = this.raw(child, 'before')
+      if (before) this.builder(before)
+      this.stringify(child, last !== i || semicolon)
+    }
+  }
+
+  comment(node) {
+    let left = this.raw(node, 'left', 'commentLeft')
+    let right = this.raw(node, 'right', 'commentRight')
+    this.builder('/*' + left + node.text + right + '*/', node)
+  }
+
+  decl(node, semicolon) {
+    let between = this.raw(node, 'between', 'colon')
+    let string = node.prop + between + this.rawValue(node, 'value')
+
+    if (node.important) {
+      string += node.raws.important || ' !important'
+    }
+
+    if (semicolon) string += ';'
+    this.builder(string, node)
+  }
+
+  document(node) {
+    this.body(node)
+  }
+
+  raw(node, own, detect) {
+    let value
+    if (!detect) detect = own
+
+    // Already had
+    if (own) {
+      value = node.raws[own]
+      if (typeof value !== 'undefined') return value
+    }
+
+    let parent = node.parent
+
+    if (detect === 'before') {
+      // Hack for first rule in CSS
+      if (!parent || (parent.type === 'root' && parent.first === node)) {
+        return ''
+      }
+
+      // `root` nodes in `document` should use only their own raws
+      if (parent && parent.type === 'document') {
+        return ''
+      }
+    }
+
+    // Floating child without parent
+    if (!parent) return DEFAULT_RAW[detect]
+
+    // Detect style by other nodes
+    let root = node.root()
+    if (!root.rawCache) root.rawCache = {}
+    if (typeof root.rawCache[detect] !== 'undefined') {
+      return root.rawCache[detect]
+    }
+
+    if (detect === 'before' || detect === 'after') {
+      return this.beforeAfter(node, detect)
+    } else {
+      let method = 'raw' + capitalize(detect)
+      if (this[method]) {
+        value = this[method](root, node)
+      } else {
+        root.walk(i => {
+          value = i.raws[own]
+          if (typeof value !== 'undefined') return false
+        })
+      }
+    }
+
+    if (typeof value === 'undefined') value = DEFAULT_RAW[detect]
+
+    root.rawCache[detect] = value
+    return value
+  }
+
+  rawBeforeClose(root) {
+    let value
+    root.walk(i => {
+      if (i.nodes && i.nodes.length > 0) {
+        if (typeof i.raws.after !== 'undefined') {
+          value = i.raws.after
+          if (value.includes('\n')) {
+            value = value.replace(/[^\n]+$/, '')
+          }
+          return false
+        }
+      }
+    })
+    if (value) value = value.replace(/\S/g, '')
+    return value
+  }
+
+  rawBeforeComment(root, node) {
+    let value
+    root.walkComments(i => {
+      if (typeof i.raws.before !== 'undefined') {
+        value = i.raws.before
+        if (value.includes('\n')) {
+          value = value.replace(/[^\n]+$/, '')
+        }
+        return false
+      }
+    })
+    if (typeof value === 'undefined') {
+      value = this.raw(node, null, 'beforeDecl')
+    } else if (value) {
+      value = value.replace(/\S/g, '')
+    }
+    return value
+  }
+
+  rawBeforeDecl(root, node) {
+    let value
+    root.walkDecls(i => {
+      if (typeof i.raws.before !== 'undefined') {
+        value = i.raws.before
+        if (value.includes('\n')) {
+          value = value.replace(/[^\n]+$/, '')
+        }
+        return false
+      }
+    })
+    if (typeof value === 'undefined') {
+      value = this.raw(node, null, 'beforeRule')
+    } else if (value) {
+      value = value.replace(/\S/g, '')
+    }
+    return value
+  }
+
+  rawBeforeOpen(root) {
+    let value
+    root.walk(i => {
+      if (i.type !== 'decl') {
+        value = i.raws.between
+        if (typeof value !== 'undefined') return false
+      }
+    })
+    return value
+  }
+
+  rawBeforeRule(root) {
+    let value
+    root.walk(i => {
+      if (i.nodes && (i.parent !== root || root.first !== i)) {
+        if (typeof i.raws.before !== 'undefined') {
+          value = i.raws.before
+          if (value.includes('\n')) {
+            value = value.replace(/[^\n]+$/, '')
+          }
+          return false
+        }
+      }
+    })
+    if (value) value = value.replace(/\S/g, '')
+    return value
+  }
+
+  rawColon(root) {
+    let value
+    root.walkDecls(i => {
+      if (typeof i.raws.between !== 'undefined') {
+        value = i.raws.between.replace(/[^\s:]/g, '')
+        return false
+      }
+    })
+    return value
+  }
+
+  rawEmptyBody(root) {
+    let value
+    root.walk(i => {
+      if (i.nodes && i.nodes.length === 0) {
+        value = i.raws.after
+        if (typeof value !== 'undefined') return false
+      }
+    })
+    return value
+  }
+
+  rawIndent(root) {
+    if (root.raws.indent) return root.raws.indent
+    let value
+    root.walk(i => {
+      let p = i.parent
+      if (p && p !== root && p.parent && p.parent === root) {
+        if (typeof i.raws.before !== 'undefined') {
+          let parts = i.raws.before.split('\n')
+          value = parts[parts.length - 1]
+          value = value.replace(/\S/g, '')
+          return false
+        }
+      }
+    })
+    return value
+  }
+
+  rawSemicolon(root) {
+    let value
+    root.walk(i => {
+      if (i.nodes && i.nodes.length && i.last.type === 'decl') {
+        value = i.raws.semicolon
+        if (typeof value !== 'undefined') return false
+      }
+    })
+    return value
+  }
+
+  rawValue(node, prop) {
+    let value = node[prop]
+    let raw = node.raws[prop]
+    if (raw && raw.value === value) {
+      return raw.raw
+    }
+
+    return value
+  }
+
+  root(node) {
+    this.body(node)
+    if (node.raws.after) this.builder(node.raws.after)
+  }
+
+  rule(node) {
+    this.block(node, this.rawValue(node, 'selector'))
+    if (node.raws.ownSemicolon) {
+      this.builder(node.raws.ownSemicolon, node, 'end')
+    }
+  }
+
+  stringify(node, semicolon) {
+    /* c8 ignore start */
+    if (!this[node.type]) {
+      throw new Error(
+        'Unknown AST node type ' +
+          node.type +
+          '. ' +
+          'Maybe you need to change PostCSS stringifier.'
+      )
+    }
+    /* c8 ignore stop */
+    this[node.type](node, semicolon)
+  }
+}
+
+module.exports = Stringifier
+Stringifier.default = Stringifier
 
 
 /***/ }),
@@ -3035,37 +468,70 @@
 
     let css = this.source
     if (color == null) color = pico.isColorSupported
-    if (terminalHighlight) {
-      if (color) css = terminalHighlight(css)
+
+    let aside = text => text
+    let mark = text => text
+    let highlight = text => text
+    if (color) {
+      let { bold, gray, red } = pico.createColors(true)
+      mark = text => bold(red(text))
+      aside = text => gray(text)
+      if (terminalHighlight) {
+        highlight = text => terminalHighlight(text)
+      }
     }
 
     let lines = css.split(/\r?\n/)
     let start = Math.max(this.line - 3, 0)
     let end = Math.min(this.line + 2, lines.length)
-
     let maxWidth = String(end).length
 
-    let mark, aside
-    if (color) {
-      let { bold, gray, red } = pico.createColors(true)
-      mark = text => bold(red(text))
-      aside = text => gray(text)
-    } else {
-      mark = aside = str => str
-    }
-
     return lines
       .slice(start, end)
       .map((line, index) => {
         let number = start + 1 + index
         let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | '
         if (number === this.line) {
+          if (line.length > 160) {
+            let padding = 20
+            let subLineStart = Math.max(0, this.column - padding)
+            let subLineEnd = Math.max(
+              this.column + padding,
+              this.endColumn + padding
+            )
+            let subLine = line.slice(subLineStart, subLineEnd)
+
+            let spacing =
+              aside(gutter.replace(/\d/g, ' ')) +
+              line
+                .slice(0, Math.min(this.column - 1, padding - 1))
+                .replace(/[^\t]/g, ' ')
+
+            return (
+              mark('>') +
+              aside(gutter) +
+              highlight(subLine) +
+              '\n ' +
+              spacing +
+              mark('^')
+            )
+          }
+
           let spacing =
             aside(gutter.replace(/\d/g, ' ')) +
             line.slice(0, this.column - 1).replace(/[^\t]/g, ' ')
-          return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^')
-        }
-        return ' ' + aside(gutter) + line
+
+          return (
+            mark('>') +
+            aside(gutter) +
+            highlight(line) +
+            '\n ' +
+            spacing +
+            mark('^')
+          )
+        }
+
+        return ' ' + aside(gutter) + highlight(line)
       })
       .join('\n')
   }
@@ -3085,412 +551,21 @@
 
 /***/ }),
 
-/***/ 1516:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Node = __webpack_require__(7490)
-
-class Declaration extends Node {
-  constructor(defaults) {
-    if (
-      defaults &&
-      typeof defaults.value !== 'undefined' &&
-      typeof defaults.value !== 'string'
-    ) {
-      defaults = { ...defaults, value: String(defaults.value) }
-    }
-    super(defaults)
-    this.type = 'decl'
-  }
-
-  get variable() {
-    return this.prop.startsWith('--') || this.prop[0] === '$'
-  }
-}
-
-module.exports = Declaration
-Declaration.default = Declaration
-
-
-/***/ }),
-
-/***/ 271:
+/***/ 448:
 /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
 "use strict";
 
 
 let Container = __webpack_require__(683)
-
-let LazyResult, Processor
-
-class Document extends Container {
-  constructor(defaults) {
-    // type needs to be passed to super, otherwise child roots won't be normalized correctly
-    super({ type: 'document', ...defaults })
-
-    if (!this.nodes) {
-      this.nodes = []
-    }
-  }
-
-  toResult(opts = {}) {
-    let lazy = new LazyResult(new Processor(), this, opts)
-
-    return lazy.stringify()
-  }
-}
-
-Document.registerLazyResult = dependant => {
-  LazyResult = dependant
-}
-
-Document.registerProcessor = dependant => {
-  Processor = dependant
-}
-
-module.exports = Document
-Document.default = Document
-
-
-/***/ }),
-
-/***/ 8940:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Declaration = __webpack_require__(1516)
-let PreviousMap = __webpack_require__(5696)
-let Comment = __webpack_require__(6589)
-let AtRule = __webpack_require__(1326)
-let Input = __webpack_require__(5380)
+let Document = __webpack_require__(271)
+let MapGenerator = __webpack_require__(1670)
+let parse = __webpack_require__(4295)
+let Result = __webpack_require__(9055)
 let Root = __webpack_require__(9434)
-let Rule = __webpack_require__(4092)
-
-function fromJSON(json, inputs) {
-  if (Array.isArray(json)) return json.map(n => fromJSON(n))
-
-  let { inputs: ownInputs, ...defaults } = json
-  if (ownInputs) {
-    inputs = []
-    for (let input of ownInputs) {
-      let inputHydrated = { ...input, __proto__: Input.prototype }
-      if (inputHydrated.map) {
-        inputHydrated.map = {
-          ...inputHydrated.map,
-          __proto__: PreviousMap.prototype
-        }
-      }
-      inputs.push(inputHydrated)
-    }
-  }
-  if (defaults.nodes) {
-    defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))
-  }
-  if (defaults.source) {
-    let { inputId, ...source } = defaults.source
-    defaults.source = source
-    if (inputId != null) {
-      defaults.source.input = inputs[inputId]
-    }
-  }
-  if (defaults.type === 'root') {
-    return new Root(defaults)
-  } else if (defaults.type === 'decl') {
-    return new Declaration(defaults)
-  } else if (defaults.type === 'rule') {
-    return new Rule(defaults)
-  } else if (defaults.type === 'comment') {
-    return new Comment(defaults)
-  } else if (defaults.type === 'atrule') {
-    return new AtRule(defaults)
-  } else {
-    throw new Error('Unknown node type: ' + json.type)
-  }
-}
-
-module.exports = fromJSON
-fromJSON.default = fromJSON
-
-
-/***/ }),
-
-/***/ 5380:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(1866)
-let { fileURLToPath, pathToFileURL } = __webpack_require__(2739)
-let { isAbsolute, resolve } = __webpack_require__(197)
-let { nanoid } = __webpack_require__(5042)
-
-let terminalHighlight = __webpack_require__(9746)
-let CssSyntaxError = __webpack_require__(356)
-let PreviousMap = __webpack_require__(5696)
-
-let fromOffsetCache = Symbol('fromOffsetCache')
-
-let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
-let pathAvailable = Boolean(resolve && isAbsolute)
-
-class Input {
-  constructor(css, opts = {}) {
-    if (
-      css === null ||
-      typeof css === 'undefined' ||
-      (typeof css === 'object' && !css.toString)
-    ) {
-      throw new Error(`PostCSS received ${css} instead of CSS string`)
-    }
-
-    this.css = css.toString()
-
-    if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
-      this.hasBOM = true
-      this.css = this.css.slice(1)
-    } else {
-      this.hasBOM = false
-    }
-
-    if (opts.from) {
-      if (
-        !pathAvailable ||
-        /^\w+:\/\//.test(opts.from) ||
-        isAbsolute(opts.from)
-      ) {
-        this.file = opts.from
-      } else {
-        this.file = resolve(opts.from)
-      }
-    }
-
-    if (pathAvailable && sourceMapAvailable) {
-      let map = new PreviousMap(this.css, opts)
-      if (map.text) {
-        this.map = map
-        let file = map.consumer().file
-        if (!this.file && file) this.file = this.mapResolve(file)
-      }
-    }
-
-    if (!this.file) {
-      this.id = '<input css ' + nanoid(6) + '>'
-    }
-    if (this.map) this.map.file = this.from
-  }
-
-  error(message, line, column, opts = {}) {
-    let result, endLine, endColumn
-
-    if (line && typeof line === 'object') {
-      let start = line
-      let end = column
-      if (typeof start.offset === 'number') {
-        let pos = this.fromOffset(start.offset)
-        line = pos.line
-        column = pos.col
-      } else {
-        line = start.line
-        column = start.column
-      }
-      if (typeof end.offset === 'number') {
-        let pos = this.fromOffset(end.offset)
-        endLine = pos.line
-        endColumn = pos.col
-      } else {
-        endLine = end.line
-        endColumn = end.column
-      }
-    } else if (!column) {
-      let pos = this.fromOffset(line)
-      line = pos.line
-      column = pos.col
-    }
-
-    let origin = this.origin(line, column, endLine, endColumn)
-    if (origin) {
-      result = new CssSyntaxError(
-        message,
-        origin.endLine === undefined
-          ? origin.line
-          : { column: origin.column, line: origin.line },
-        origin.endLine === undefined
-          ? origin.column
-          : { column: origin.endColumn, line: origin.endLine },
-        origin.source,
-        origin.file,
-        opts.plugin
-      )
-    } else {
-      result = new CssSyntaxError(
-        message,
-        endLine === undefined ? line : { column, line },
-        endLine === undefined ? column : { column: endColumn, line: endLine },
-        this.css,
-        this.file,
-        opts.plugin
-      )
-    }
-
-    result.input = { column, endColumn, endLine, line, source: this.css }
-    if (this.file) {
-      if (pathToFileURL) {
-        result.input.url = pathToFileURL(this.file).toString()
-      }
-      result.input.file = this.file
-    }
-
-    return result
-  }
-
-  fromOffset(offset) {
-    let lastLine, lineToIndex
-    if (!this[fromOffsetCache]) {
-      let lines = this.css.split('\n')
-      lineToIndex = new Array(lines.length)
-      let prevIndex = 0
-
-      for (let i = 0, l = lines.length; i < l; i++) {
-        lineToIndex[i] = prevIndex
-        prevIndex += lines[i].length + 1
-      }
-
-      this[fromOffsetCache] = lineToIndex
-    } else {
-      lineToIndex = this[fromOffsetCache]
-    }
-    lastLine = lineToIndex[lineToIndex.length - 1]
-
-    let min = 0
-    if (offset >= lastLine) {
-      min = lineToIndex.length - 1
-    } else {
-      let max = lineToIndex.length - 2
-      let mid
-      while (min < max) {
-        mid = min + ((max - min) >> 1)
-        if (offset < lineToIndex[mid]) {
-          max = mid - 1
-        } else if (offset >= lineToIndex[mid + 1]) {
-          min = mid + 1
-        } else {
-          min = mid
-          break
-        }
-      }
-    }
-    return {
-      col: offset - lineToIndex[min] + 1,
-      line: min + 1
-    }
-  }
-
-  mapResolve(file) {
-    if (/^\w+:\/\//.test(file)) {
-      return file
-    }
-    return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)
-  }
-
-  origin(line, column, endLine, endColumn) {
-    if (!this.map) return false
-    let consumer = this.map.consumer()
-
-    let from = consumer.originalPositionFor({ column, line })
-    if (!from.source) return false
-
-    let to
-    if (typeof endLine === 'number') {
-      to = consumer.originalPositionFor({ column: endColumn, line: endLine })
-    }
-
-    let fromUrl
-
-    if (isAbsolute(from.source)) {
-      fromUrl = pathToFileURL(from.source)
-    } else {
-      fromUrl = new URL(
-        from.source,
-        this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)
-      )
-    }
-
-    let result = {
-      column: from.column,
-      endColumn: to && to.column,
-      endLine: to && to.line,
-      line: from.line,
-      url: fromUrl.toString()
-    }
-
-    if (fromUrl.protocol === 'file:') {
-      if (fileURLToPath) {
-        result.file = fileURLToPath(fromUrl)
-      } else {
-        /* c8 ignore next 2 */
-        throw new Error(`file: protocol is not available in this PostCSS build`)
-      }
-    }
-
-    let source = consumer.sourceContentFor(from.source)
-    if (source) result.source = source
-
-    return result
-  }
-
-  toJSON() {
-    let json = {}
-    for (let name of ['hasBOM', 'css', 'file', 'id']) {
-      if (this[name] != null) {
-        json[name] = this[name]
-      }
-    }
-    if (this.map) {
-      json.map = { ...this.map }
-      if (json.map.consumerCache) {
-        json.map.consumerCache = undefined
-      }
-    }
-    return json
-  }
-
-  get from() {
-    return this.file || this.id
-  }
-}
-
-module.exports = Input
-Input.default = Input
-
-if (terminalHighlight && terminalHighlight.registerInput) {
-  terminalHighlight.registerInput(Input)
-}
-
-
-/***/ }),
-
-/***/ 448:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
+let stringify = __webpack_require__(633)
 let { isClean, my } = __webpack_require__(1381)
-let MapGenerator = __webpack_require__(1670)
-let stringify = __webpack_require__(633)
-let Container = __webpack_require__(683)
-let Document = __webpack_require__(271)
 let warnOnce = __webpack_require__(3122)
-let Result = __webpack_require__(9055)
-let parse = __webpack_require__(4295)
-let Root = __webpack_require__(9434)
 
 const TYPE_TO_CLASS_NAME = {
   atrule: 'AtRule',
@@ -3587,6 +662,38 @@
 let postcss = {}
 
 class LazyResult {
+  get content() {
+    return this.stringify().content
+  }
+
+  get css() {
+    return this.stringify().css
+  }
+
+  get map() {
+    return this.stringify().map
+  }
+
+  get messages() {
+    return this.sync().messages
+  }
+
+  get opts() {
+    return this.result.opts
+  }
+
+  get processor() {
+    return this.result.processor
+  }
+
+  get root() {
+    return this.sync().root
+  }
+
+  get [Symbol.toStringTag]() {
+    return 'LazyResult'
+  }
+
   constructor(processor, css, opts) {
     this.stringified = false
     this.processed = false
@@ -3959,38 +1066,6 @@
   warnings() {
     return this.sync().warnings()
   }
-
-  get content() {
-    return this.stringify().content
-  }
-
-  get css() {
-    return this.stringify().css
-  }
-
-  get map() {
-    return this.stringify().map
-  }
-
-  get messages() {
-    return this.sync().messages
-  }
-
-  get opts() {
-    return this.result.opts
-  }
-
-  get processor() {
-    return this.result.processor
-  }
-
-  get root() {
-    return this.sync().root
-  }
-
-  get [Symbol.toStringTag]() {
-    return 'LazyResult'
-  }
 }
 
 LazyResult.registerPostcss = dependant => {
@@ -4006,69 +1081,1057 @@
 
 /***/ }),
 
-/***/ 7374:
+/***/ 461:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+// Load in dependencies
+var computedStyle = __webpack_require__(6109);
+
+/**
+ * Calculate the `line-height` of a given node
+ * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
+ * @returns {Number} `line-height` of the element in pixels
+ */
+function lineHeight(node) {
+  // Grab the line-height via style
+  var lnHeightStr = computedStyle(node, 'line-height');
+  var lnHeight = parseFloat(lnHeightStr, 10);
+
+  // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
+  if (lnHeightStr === lnHeight + '') {
+    // Save the old lineHeight style and update the em unit to the element
+    var _lnHeightStyle = node.style.lineHeight;
+    node.style.lineHeight = lnHeightStr + 'em';
+
+    // Calculate the em based height
+    lnHeightStr = computedStyle(node, 'line-height');
+    lnHeight = parseFloat(lnHeightStr, 10);
+
+    // Revert the lineHeight style
+    if (_lnHeightStyle) {
+      node.style.lineHeight = _lnHeightStyle;
+    } else {
+      delete node.style.lineHeight;
+    }
+  }
+
+  // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
+  // DEV: `em` units are converted to `pt` in IE6
+  // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
+  if (lnHeightStr.indexOf('pt') !== -1) {
+    lnHeight *= 4;
+    lnHeight /= 3;
+  // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
+  } else if (lnHeightStr.indexOf('mm') !== -1) {
+    lnHeight *= 96;
+    lnHeight /= 25.4;
+  // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
+  } else if (lnHeightStr.indexOf('cm') !== -1) {
+    lnHeight *= 96;
+    lnHeight /= 2.54;
+  // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
+  } else if (lnHeightStr.indexOf('in') !== -1) {
+    lnHeight *= 96;
+  // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
+  } else if (lnHeightStr.indexOf('pc') !== -1) {
+    lnHeight *= 16;
+  }
+
+  // Continue our computation
+  lnHeight = Math.round(lnHeight);
+
+  // If the line-height is "normal", calculate by font-size
+  if (lnHeightStr === 'normal') {
+    // Create a temporary node
+    var nodeName = node.nodeName;
+    var _node = document.createElement(nodeName);
+    _node.innerHTML = '&nbsp;';
+
+    // If we have a text area, reset it to only 1 row
+    // https://github.com/twolfson/line-height/issues/4
+    if (nodeName.toUpperCase() === 'TEXTAREA') {
+      _node.setAttribute('rows', '1');
+    }
+
+    // Set the font-size of the element
+    var fontSizeStr = computedStyle(node, 'font-size');
+    _node.style.fontSize = fontSizeStr;
+
+    // Remove default padding/border which can affect offset height
+    // https://github.com/twolfson/line-height/issues/4
+    // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
+    _node.style.padding = '0px';
+    _node.style.border = '0px';
+
+    // Append it to the body
+    var body = document.body;
+    body.appendChild(_node);
+
+    // Assume the line height of the element is the height
+    var height = _node.offsetHeight;
+    lnHeight = height;
+
+    // Remove our child from the DOM
+    body.removeChild(_node);
+  }
+
+  // Return the calculated height
+  return lnHeight;
+}
+
+// Export lineHeight
+module.exports = lineHeight;
+
+
+/***/ }),
+
+/***/ 628:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+
+
+var ReactPropTypesSecret = __webpack_require__(4067);
+
+function emptyFunction() {}
+function emptyFunctionWithReset() {}
+emptyFunctionWithReset.resetWarningCache = emptyFunction;
+
+module.exports = function() {
+  function shim(props, propName, componentName, location, propFullName, secret) {
+    if (secret === ReactPropTypesSecret) {
+      // It is still safe when called from React.
+      return;
+    }
+    var err = new Error(
+      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+      'Use PropTypes.checkPropTypes() to call them. ' +
+      'Read more at http://fb.me/use-check-prop-types'
+    );
+    err.name = 'Invariant Violation';
+    throw err;
+  };
+  shim.isRequired = shim;
+  function getShim() {
+    return shim;
+  };
+  // Important!
+  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
+  var ReactPropTypes = {
+    array: shim,
+    bigint: shim,
+    bool: shim,
+    func: shim,
+    number: shim,
+    object: shim,
+    string: shim,
+    symbol: shim,
+
+    any: shim,
+    arrayOf: getShim,
+    element: shim,
+    elementType: shim,
+    instanceOf: getShim,
+    node: shim,
+    objectOf: getShim,
+    oneOf: getShim,
+    oneOfType: getShim,
+    shape: getShim,
+    exact: getShim,
+
+    checkPropTypes: emptyFunctionWithReset,
+    resetWarningCache: emptyFunction
+  };
+
+  ReactPropTypes.PropTypes = ReactPropTypes;
+
+  return ReactPropTypes;
+};
+
+
+/***/ }),
+
+/***/ 633:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Stringifier = __webpack_require__(346)
+
+function stringify(node, builder) {
+  let str = new Stringifier(builder)
+  str.stringify(node)
+}
+
+module.exports = stringify
+stringify.default = stringify
+
+
+/***/ }),
+
+/***/ 683:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Comment = __webpack_require__(6589)
+let Declaration = __webpack_require__(1516)
+let Node = __webpack_require__(7490)
+let { isClean, my } = __webpack_require__(1381)
+
+let AtRule, parse, Root, Rule
+
+function cleanSource(nodes) {
+  return nodes.map(i => {
+    if (i.nodes) i.nodes = cleanSource(i.nodes)
+    delete i.source
+    return i
+  })
+}
+
+function markTreeDirty(node) {
+  node[isClean] = false
+  if (node.proxyOf.nodes) {
+    for (let i of node.proxyOf.nodes) {
+      markTreeDirty(i)
+    }
+  }
+}
+
+class Container extends Node {
+  get first() {
+    if (!this.proxyOf.nodes) return undefined
+    return this.proxyOf.nodes[0]
+  }
+
+  get last() {
+    if (!this.proxyOf.nodes) return undefined
+    return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]
+  }
+
+  append(...children) {
+    for (let child of children) {
+      let nodes = this.normalize(child, this.last)
+      for (let node of nodes) this.proxyOf.nodes.push(node)
+    }
+
+    this.markDirty()
+
+    return this
+  }
+
+  cleanRaws(keepBetween) {
+    super.cleanRaws(keepBetween)
+    if (this.nodes) {
+      for (let node of this.nodes) node.cleanRaws(keepBetween)
+    }
+  }
+
+  each(callback) {
+    if (!this.proxyOf.nodes) return undefined
+    let iterator = this.getIterator()
+
+    let index, result
+    while (this.indexes[iterator] < this.proxyOf.nodes.length) {
+      index = this.indexes[iterator]
+      result = callback(this.proxyOf.nodes[index], index)
+      if (result === false) break
+
+      this.indexes[iterator] += 1
+    }
+
+    delete this.indexes[iterator]
+    return result
+  }
+
+  every(condition) {
+    return this.nodes.every(condition)
+  }
+
+  getIterator() {
+    if (!this.lastEach) this.lastEach = 0
+    if (!this.indexes) this.indexes = {}
+
+    this.lastEach += 1
+    let iterator = this.lastEach
+    this.indexes[iterator] = 0
+
+    return iterator
+  }
+
+  getProxyProcessor() {
+    return {
+      get(node, prop) {
+        if (prop === 'proxyOf') {
+          return node
+        } else if (!node[prop]) {
+          return node[prop]
+        } else if (
+          prop === 'each' ||
+          (typeof prop === 'string' && prop.startsWith('walk'))
+        ) {
+          return (...args) => {
+            return node[prop](
+              ...args.map(i => {
+                if (typeof i === 'function') {
+                  return (child, index) => i(child.toProxy(), index)
+                } else {
+                  return i
+                }
+              })
+            )
+          }
+        } else if (prop === 'every' || prop === 'some') {
+          return cb => {
+            return node[prop]((child, ...other) =>
+              cb(child.toProxy(), ...other)
+            )
+          }
+        } else if (prop === 'root') {
+          return () => node.root().toProxy()
+        } else if (prop === 'nodes') {
+          return node.nodes.map(i => i.toProxy())
+        } else if (prop === 'first' || prop === 'last') {
+          return node[prop].toProxy()
+        } else {
+          return node[prop]
+        }
+      },
+
+      set(node, prop, value) {
+        if (node[prop] === value) return true
+        node[prop] = value
+        if (prop === 'name' || prop === 'params' || prop === 'selector') {
+          node.markDirty()
+        }
+        return true
+      }
+    }
+  }
+
+  index(child) {
+    if (typeof child === 'number') return child
+    if (child.proxyOf) child = child.proxyOf
+    return this.proxyOf.nodes.indexOf(child)
+  }
+
+  insertAfter(exist, add) {
+    let existIndex = this.index(exist)
+    let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
+    existIndex = this.index(exist)
+    for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
+
+    let index
+    for (let id in this.indexes) {
+      index = this.indexes[id]
+      if (existIndex < index) {
+        this.indexes[id] = index + nodes.length
+      }
+    }
+
+    this.markDirty()
+
+    return this
+  }
+
+  insertBefore(exist, add) {
+    let existIndex = this.index(exist)
+    let type = existIndex === 0 ? 'prepend' : false
+    let nodes = this.normalize(
+      add,
+      this.proxyOf.nodes[existIndex],
+      type
+    ).reverse()
+    existIndex = this.index(exist)
+    for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
+
+    let index
+    for (let id in this.indexes) {
+      index = this.indexes[id]
+      if (existIndex <= index) {
+        this.indexes[id] = index + nodes.length
+      }
+    }
+
+    this.markDirty()
+
+    return this
+  }
+
+  normalize(nodes, sample) {
+    if (typeof nodes === 'string') {
+      nodes = cleanSource(parse(nodes).nodes)
+    } else if (typeof nodes === 'undefined') {
+      nodes = []
+    } else if (Array.isArray(nodes)) {
+      nodes = nodes.slice(0)
+      for (let i of nodes) {
+        if (i.parent) i.parent.removeChild(i, 'ignore')
+      }
+    } else if (nodes.type === 'root' && this.type !== 'document') {
+      nodes = nodes.nodes.slice(0)
+      for (let i of nodes) {
+        if (i.parent) i.parent.removeChild(i, 'ignore')
+      }
+    } else if (nodes.type) {
+      nodes = [nodes]
+    } else if (nodes.prop) {
+      if (typeof nodes.value === 'undefined') {
+        throw new Error('Value field is missed in node creation')
+      } else if (typeof nodes.value !== 'string') {
+        nodes.value = String(nodes.value)
+      }
+      nodes = [new Declaration(nodes)]
+    } else if (nodes.selector || nodes.selectors) {
+      nodes = [new Rule(nodes)]
+    } else if (nodes.name) {
+      nodes = [new AtRule(nodes)]
+    } else if (nodes.text) {
+      nodes = [new Comment(nodes)]
+    } else {
+      throw new Error('Unknown node type in node creation')
+    }
+
+    let processed = nodes.map(i => {
+      /* c8 ignore next */
+      if (!i[my]) Container.rebuild(i)
+      i = i.proxyOf
+      if (i.parent) i.parent.removeChild(i)
+      if (i[isClean]) markTreeDirty(i)
+
+      if (!i.raws) i.raws = {}
+      if (typeof i.raws.before === 'undefined') {
+        if (sample && typeof sample.raws.before !== 'undefined') {
+          i.raws.before = sample.raws.before.replace(/\S/g, '')
+        }
+      }
+      i.parent = this.proxyOf
+      return i
+    })
+
+    return processed
+  }
+
+  prepend(...children) {
+    children = children.reverse()
+    for (let child of children) {
+      let nodes = this.normalize(child, this.first, 'prepend').reverse()
+      for (let node of nodes) this.proxyOf.nodes.unshift(node)
+      for (let id in this.indexes) {
+        this.indexes[id] = this.indexes[id] + nodes.length
+      }
+    }
+
+    this.markDirty()
+
+    return this
+  }
+
+  push(child) {
+    child.parent = this
+    this.proxyOf.nodes.push(child)
+    return this
+  }
+
+  removeAll() {
+    for (let node of this.proxyOf.nodes) node.parent = undefined
+    this.proxyOf.nodes = []
+
+    this.markDirty()
+
+    return this
+  }
+
+  removeChild(child) {
+    child = this.index(child)
+    this.proxyOf.nodes[child].parent = undefined
+    this.proxyOf.nodes.splice(child, 1)
+
+    let index
+    for (let id in this.indexes) {
+      index = this.indexes[id]
+      if (index >= child) {
+        this.indexes[id] = index - 1
+      }
+    }
+
+    this.markDirty()
+
+    return this
+  }
+
+  replaceValues(pattern, opts, callback) {
+    if (!callback) {
+      callback = opts
+      opts = {}
+    }
+
+    this.walkDecls(decl => {
+      if (opts.props && !opts.props.includes(decl.prop)) return
+      if (opts.fast && !decl.value.includes(opts.fast)) return
+
+      decl.value = decl.value.replace(pattern, callback)
+    })
+
+    this.markDirty()
+
+    return this
+  }
+
+  some(condition) {
+    return this.nodes.some(condition)
+  }
+
+  walk(callback) {
+    return this.each((child, i) => {
+      let result
+      try {
+        result = callback(child, i)
+      } catch (e) {
+        throw child.addToError(e)
+      }
+      if (result !== false && child.walk) {
+        result = child.walk(callback)
+      }
+
+      return result
+    })
+  }
+
+  walkAtRules(name, callback) {
+    if (!callback) {
+      callback = name
+      return this.walk((child, i) => {
+        if (child.type === 'atrule') {
+          return callback(child, i)
+        }
+      })
+    }
+    if (name instanceof RegExp) {
+      return this.walk((child, i) => {
+        if (child.type === 'atrule' && name.test(child.name)) {
+          return callback(child, i)
+        }
+      })
+    }
+    return this.walk((child, i) => {
+      if (child.type === 'atrule' && child.name === name) {
+        return callback(child, i)
+      }
+    })
+  }
+
+  walkComments(callback) {
+    return this.walk((child, i) => {
+      if (child.type === 'comment') {
+        return callback(child, i)
+      }
+    })
+  }
+
+  walkDecls(prop, callback) {
+    if (!callback) {
+      callback = prop
+      return this.walk((child, i) => {
+        if (child.type === 'decl') {
+          return callback(child, i)
+        }
+      })
+    }
+    if (prop instanceof RegExp) {
+      return this.walk((child, i) => {
+        if (child.type === 'decl' && prop.test(child.prop)) {
+          return callback(child, i)
+        }
+      })
+    }
+    return this.walk((child, i) => {
+      if (child.type === 'decl' && child.prop === prop) {
+        return callback(child, i)
+      }
+    })
+  }
+
+  walkRules(selector, callback) {
+    if (!callback) {
+      callback = selector
+
+      return this.walk((child, i) => {
+        if (child.type === 'rule') {
+          return callback(child, i)
+        }
+      })
+    }
+    if (selector instanceof RegExp) {
+      return this.walk((child, i) => {
+        if (child.type === 'rule' && selector.test(child.selector)) {
+          return callback(child, i)
+        }
+      })
+    }
+    return this.walk((child, i) => {
+      if (child.type === 'rule' && child.selector === selector) {
+        return callback(child, i)
+      }
+    })
+  }
+}
+
+Container.registerParse = dependant => {
+  parse = dependant
+}
+
+Container.registerRule = dependant => {
+  Rule = dependant
+}
+
+Container.registerAtRule = dependant => {
+  AtRule = dependant
+}
+
+Container.registerRoot = dependant => {
+  Root = dependant
+}
+
+module.exports = Container
+Container.default = Container
+
+/* c8 ignore start */
+Container.rebuild = node => {
+  if (node.type === 'atrule') {
+    Object.setPrototypeOf(node, AtRule.prototype)
+  } else if (node.type === 'rule') {
+    Object.setPrototypeOf(node, Rule.prototype)
+  } else if (node.type === 'decl') {
+    Object.setPrototypeOf(node, Declaration.prototype)
+  } else if (node.type === 'comment') {
+    Object.setPrototypeOf(node, Comment.prototype)
+  } else if (node.type === 'root') {
+    Object.setPrototypeOf(node, Root.prototype)
+  }
+
+  node[my] = true
+
+  if (node.nodes) {
+    node.nodes.forEach(child => {
+      Container.rebuild(child)
+    })
+  }
+}
+/* c8 ignore stop */
+
+
+/***/ }),
+
+/***/ 1087:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+/**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule isEventSupported
+ */
+
+
+
+var ExecutionEnvironment = __webpack_require__(8202);
+
+var useHasFeature;
+if (ExecutionEnvironment.canUseDOM) {
+  useHasFeature =
+    document.implementation &&
+    document.implementation.hasFeature &&
+    // always returns true in newer browsers as per the standard.
+    // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
+    document.implementation.hasFeature('', '') !== true;
+}
+
+/**
+ * Checks if an event is supported in the current execution environment.
+ *
+ * NOTE: This will not work correctly for non-generic events such as `change`,
+ * `reset`, `load`, `error`, and `select`.
+ *
+ * Borrows from Modernizr.
+ *
+ * @param {string} eventNameSuffix Event name, e.g. "click".
+ * @param {?boolean} capture Check if the capture phase is supported.
+ * @return {boolean} True if the event is supported.
+ * @internal
+ * @license Modernizr 3.0.0pre (Custom Build) | MIT
+ */
+function isEventSupported(eventNameSuffix, capture) {
+  if (!ExecutionEnvironment.canUseDOM ||
+      capture && !('addEventListener' in document)) {
+    return false;
+  }
+
+  var eventName = 'on' + eventNameSuffix;
+  var isSupported = eventName in document;
+
+  if (!isSupported) {
+    var element = document.createElement('div');
+    element.setAttribute(eventName, 'return;');
+    isSupported = typeof element[eventName] === 'function';
+  }
+
+  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
+    // This is the only way to test support for the `wheel` event in IE9+.
+    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
+  }
+
+  return isSupported;
+}
+
+module.exports = isEventSupported;
+
+
+/***/ }),
+
+/***/ 1326:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Container = __webpack_require__(683)
+
+class AtRule extends Container {
+  constructor(defaults) {
+    super(defaults)
+    this.type = 'atrule'
+  }
+
+  append(...children) {
+    if (!this.proxyOf.nodes) this.nodes = []
+    return super.append(...children)
+  }
+
+  prepend(...children) {
+    if (!this.proxyOf.nodes) this.nodes = []
+    return super.prepend(...children)
+  }
+}
+
+module.exports = AtRule
+AtRule.default = AtRule
+
+Container.registerAtRule(AtRule)
+
+
+/***/ }),
+
+/***/ 1381:
 /***/ ((module) => {
 
 "use strict";
 
 
-let list = {
-  comma(string) {
-    return list.split(string, [','], true)
-  },
-
-  space(string) {
-    let spaces = [' ', '\n', '\t']
-    return list.split(string, spaces)
-  },
-
-  split(string, separators, last) {
-    let array = []
-    let current = ''
-    let split = false
-
-    let func = 0
-    let inQuote = false
-    let prevQuote = ''
-    let escape = false
-
-    for (let letter of string) {
-      if (escape) {
-        escape = false
-      } else if (letter === '\\') {
-        escape = true
-      } else if (inQuote) {
-        if (letter === prevQuote) {
-          inQuote = false
-        }
-      } else if (letter === '"' || letter === "'") {
-        inQuote = true
-        prevQuote = letter
-      } else if (letter === '(') {
-        func += 1
-      } else if (letter === ')') {
-        if (func > 0) func -= 1
-      } else if (func === 0) {
-        if (separators.includes(letter)) split = true
-      }
-
-      if (split) {
-        if (current !== '') array.push(current.trim())
-        current = ''
-        split = false
-      } else {
-        current += letter
-      }
-    }
-
-    if (last || current !== '') array.push(current.trim())
-    return array
-  }
-}
-
-module.exports = list
-list.default = list
-
+module.exports.isClean = Symbol('isClean')
+
+module.exports.my = Symbol('my')
+
+
+/***/ }),
+
+/***/ 1443:
+/***/ ((module) => {
+
+module.exports = function postcssPrefixSelector(options) {
+  const prefix = options.prefix;
+  const prefixWithSpace = /\s+$/.test(prefix) ? prefix : `${prefix} `;
+  const ignoreFiles = options.ignoreFiles ? [].concat(options.ignoreFiles) : [];
+  const includeFiles = options.includeFiles
+    ? [].concat(options.includeFiles)
+    : [];
+
+  return function (root) {
+    if (
+      ignoreFiles.length &&
+      root.source.input.file &&
+      isFileInArray(root.source.input.file, ignoreFiles)
+    ) {
+      return;
+    }
+    if (
+      includeFiles.length &&
+      root.source.input.file &&
+      !isFileInArray(root.source.input.file, includeFiles)
+    ) {
+      return;
+    }
+
+    root.walkRules((rule) => {
+      const keyframeRules = [
+        'keyframes',
+        '-webkit-keyframes',
+        '-moz-keyframes',
+        '-o-keyframes',
+        '-ms-keyframes',
+      ];
+
+      if (rule.parent && keyframeRules.includes(rule.parent.name)) {
+        return;
+      }
+
+      rule.selectors = rule.selectors.map((selector) => {
+        if (options.exclude && excludeSelector(selector, options.exclude)) {
+          return selector;
+        }
+
+        if (options.transform) {
+          return options.transform(
+            prefix,
+            selector,
+            prefixWithSpace + selector,
+            root.source.input.file,
+            rule
+          );
+        }
+
+        return prefixWithSpace + selector;
+      });
+    });
+  };
+};
+
+function isFileInArray(file, arr) {
+  return arr.some((ruleOrString) => {
+    if (ruleOrString instanceof RegExp) {
+      return ruleOrString.test(file);
+    }
+
+    return file.includes(ruleOrString);
+  });
+}
+
+function excludeSelector(selector, excludeArr) {
+  return excludeArr.some((excludeRule) => {
+    if (excludeRule instanceof RegExp) {
+      return excludeRule.test(selector);
+    }
+
+    return selector === excludeRule;
+  });
+}
+
+
+/***/ }),
+
+/***/ 1516:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Node = __webpack_require__(7490)
+
+class Declaration extends Node {
+  get variable() {
+    return this.prop.startsWith('--') || this.prop[0] === '$'
+  }
+
+  constructor(defaults) {
+    if (
+      defaults &&
+      typeof defaults.value !== 'undefined' &&
+      typeof defaults.value !== 'string'
+    ) {
+      defaults = { ...defaults, value: String(defaults.value) }
+    }
+    super(defaults)
+    this.type = 'decl'
+  }
+}
+
+module.exports = Declaration
+Declaration.default = Declaration
+
+
+/***/ }),
+
+/***/ 1524:
+/***/ ((module) => {
+
+var minus = "-".charCodeAt(0);
+var plus = "+".charCodeAt(0);
+var dot = ".".charCodeAt(0);
+var exp = "e".charCodeAt(0);
+var EXP = "E".charCodeAt(0);
+
+// Check if three code points would start a number
+// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
+function likeNumber(value) {
+  var code = value.charCodeAt(0);
+  var nextCode;
+
+  if (code === plus || code === minus) {
+    nextCode = value.charCodeAt(1);
+
+    if (nextCode >= 48 && nextCode <= 57) {
+      return true;
+    }
+
+    var nextNextCode = value.charCodeAt(2);
+
+    if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
+      return true;
+    }
+
+    return false;
+  }
+
+  if (code === dot) {
+    nextCode = value.charCodeAt(1);
+
+    if (nextCode >= 48 && nextCode <= 57) {
+      return true;
+    }
+
+    return false;
+  }
+
+  if (code >= 48 && code <= 57) {
+    return true;
+  }
+
+  return false;
+}
+
+// Consume a number
+// https://www.w3.org/TR/css-syntax-3/#consume-number
+module.exports = function(value) {
+  var pos = 0;
+  var length = value.length;
+  var code;
+  var nextCode;
+  var nextNextCode;
+
+  if (length === 0 || !likeNumber(value)) {
+    return false;
+  }
+
+  code = value.charCodeAt(pos);
+
+  if (code === plus || code === minus) {
+    pos++;
+  }
+
+  while (pos < length) {
+    code = value.charCodeAt(pos);
+
+    if (code < 48 || code > 57) {
+      break;
+    }
+
+    pos += 1;
+  }
+
+  code = value.charCodeAt(pos);
+  nextCode = value.charCodeAt(pos + 1);
+
+  if (code === dot && nextCode >= 48 && nextCode <= 57) {
+    pos += 2;
+
+    while (pos < length) {
+      code = value.charCodeAt(pos);
+
+      if (code < 48 || code > 57) {
+        break;
+      }
+
+      pos += 1;
+    }
+  }
+
+  code = value.charCodeAt(pos);
+  nextCode = value.charCodeAt(pos + 1);
+  nextNextCode = value.charCodeAt(pos + 2);
+
+  if (
+    (code === exp || code === EXP) &&
+    ((nextCode >= 48 && nextCode <= 57) ||
+      ((nextCode === plus || nextCode === minus) &&
+        nextNextCode >= 48 &&
+        nextNextCode <= 57))
+  ) {
+    pos += nextCode === plus || nextCode === minus ? 3 : 2;
+
+    while (pos < length) {
+      code = value.charCodeAt(pos);
+
+      if (code < 48 || code > 57) {
+        break;
+      }
+
+      pos += 1;
+    }
+  }
+
+  return {
+    number: value.slice(0, pos),
+    unit: value.slice(pos)
+  };
+};
+
+
+/***/ }),
+
+/***/ 1544:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+var parse = __webpack_require__(8491);
+var walk = __webpack_require__(3815);
+var stringify = __webpack_require__(4725);
+
+function ValueParser(value) {
+  if (this instanceof ValueParser) {
+    this.nodes = parse(value);
+    return this;
+  }
+  return new ValueParser(value);
+}
+
+ValueParser.prototype.toString = function() {
+  return Array.isArray(this.nodes) ? stringify(this.nodes) : "";
+};
+
+ValueParser.prototype.walk = function(cb, bubble) {
+  walk(this.nodes, cb, bubble);
+  return this;
+};
+
+ValueParser.unit = __webpack_require__(1524);
+
+ValueParser.walk = walk;
+
+ValueParser.stringify = stringify;
+
+module.exports = ValueParser;
+
+
+/***/ }),
+
+/***/ 1609:
+/***/ ((module) => {
+
+"use strict";
+module.exports = window["React"];
 
 /***/ }),
 
@@ -4078,8 +2141,8 @@
 "use strict";
 
 
+let { dirname, relative, resolve, sep } = __webpack_require__(197)
 let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(1866)
-let { dirname, relative, resolve, sep } = __webpack_require__(197)
 let { pathToFileURL } = __webpack_require__(2739)
 
 let Input = __webpack_require__(5380)
@@ -4148,12 +2211,12 @@
       for (let i = this.root.nodes.length - 1; i >= 0; i--) {
         node = this.root.nodes[i]
         if (node.type !== 'comment') continue
-        if (node.text.indexOf('# sourceMappingURL=') === 0) {
+        if (node.text.startsWith('# sourceMappingURL=')) {
           this.root.removeChild(i)
         }
       }
     } else if (this.css) {
-      this.css = this.css.replace(/\n*?\/\*#[\S\s]*?\*\/$/gm, '')
+      this.css = this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm, '')
     }
   }
 
@@ -4221,7 +2284,7 @@
       source: ''
     }
 
-    let lines, last
+    let last, lines
     this.stringify(this.root, (str, node, type) => {
       this.css += str
 
@@ -4448,560 +2511,640 @@
 
 /***/ }),
 
-/***/ 7661:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let MapGenerator = __webpack_require__(1670)
-let stringify = __webpack_require__(633)
-let warnOnce = __webpack_require__(3122)
-let parse = __webpack_require__(4295)
-const Result = __webpack_require__(9055)
-
-class NoWorkResult {
-  constructor(processor, css, opts) {
-    css = css.toString()
-    this.stringified = false
-
-    this._processor = processor
-    this._css = css
-    this._opts = opts
-    this._map = undefined
-    let root
-
-    let str = stringify
-    this.result = new Result(this._processor, root, this._opts)
-    this.result.css = css
-
-    let self = this
-    Object.defineProperty(this.result, 'root', {
-      get() {
-        return self.root
-      }
-    })
-
-    let map = new MapGenerator(str, root, this._opts, css)
-    if (map.isMap()) {
-      let [generatedCSS, generatedMap] = map.generate()
-      if (generatedCSS) {
-        this.result.css = generatedCSS
-      }
-      if (generatedMap) {
-        this.result.map = generatedMap
-      }
-    } else {
-      map.clearAnnotation()
-      this.result.css = map.css
-    }
-  }
-
-  async() {
-    if (this.error) return Promise.reject(this.error)
-    return Promise.resolve(this.result)
-  }
-
-  catch(onRejected) {
-    return this.async().catch(onRejected)
-  }
-
-  finally(onFinally) {
-    return this.async().then(onFinally, onFinally)
-  }
-
-  sync() {
-    if (this.error) throw this.error
-    return this.result
-  }
-
-  then(onFulfilled, onRejected) {
-    if (false) {}
-
-    return this.async().then(onFulfilled, onRejected)
-  }
-
-  toString() {
-    return this._css
-  }
-
-  warnings() {
-    return []
-  }
-
-  get content() {
-    return this.result.css
-  }
-
-  get css() {
-    return this.result.css
-  }
-
-  get map() {
-    return this.result.map
-  }
-
-  get messages() {
-    return []
-  }
-
-  get opts() {
-    return this.result.opts
-  }
-
-  get processor() {
-    return this.result.processor
-  }
-
-  get root() {
-    if (this._root) {
-      return this._root
-    }
-
-    let root
-    let parser = parse
-
-    try {
-      root = parser(this._css, this._opts)
-    } catch (error) {
-      this.error = error
-    }
-
-    if (this.error) {
-      throw this.error
-    } else {
-      this._root = root
-      return root
-    }
-  }
-
-  get [Symbol.toStringTag]() {
-    return 'NoWorkResult'
-  }
-}
-
-module.exports = NoWorkResult
-NoWorkResult.default = NoWorkResult
+/***/ 1866:
+/***/ (() => {
+
+/* (ignored) */
+
+/***/ }),
+
+/***/ 2213:
+/***/ ((module) => {
+
+/**
+ * Copyright 2004-present Facebook. All Rights Reserved.
+ *
+ * @providesModule UserAgent_DEPRECATED
+ */
+
+/**
+ *  Provides entirely client-side User Agent and OS detection. You should prefer
+ *  the non-deprecated UserAgent module when possible, which exposes our
+ *  authoritative server-side PHP-based detection to the client.
+ *
+ *  Usage is straightforward:
+ *
+ *    if (UserAgent_DEPRECATED.ie()) {
+ *      //  IE
+ *    }
+ *
+ *  You can also do version checks:
+ *
+ *    if (UserAgent_DEPRECATED.ie() >= 7) {
+ *      //  IE7 or better
+ *    }
+ *
+ *  The browser functions will return NaN if the browser does not match, so
+ *  you can also do version compares the other way:
+ *
+ *    if (UserAgent_DEPRECATED.ie() < 7) {
+ *      //  IE6 or worse
+ *    }
+ *
+ *  Note that the version is a float and may include a minor version number,
+ *  so you should always use range operators to perform comparisons, not
+ *  strict equality.
+ *
+ *  **Note:** You should **strongly** prefer capability detection to browser
+ *  version detection where it's reasonable:
+ *
+ *    http://www.quirksmode.org/js/support.html
+ *
+ *  Further, we have a large number of mature wrapper functions and classes
+ *  which abstract away many browser irregularities. Check the documentation,
+ *  grep for things, or ask on javascript@lists.facebook.com before writing yet
+ *  another copy of "event || window.event".
+ *
+ */
+
+var _populated = false;
+
+// Browsers
+var _ie, _firefox, _opera, _webkit, _chrome;
+
+// Actual IE browser for compatibility mode
+var _ie_real_version;
+
+// Platforms
+var _osx, _windows, _linux, _android;
+
+// Architectures
+var _win64;
+
+// Devices
+var _iphone, _ipad, _native;
+
+var _mobile;
+
+function _populate() {
+  if (_populated) {
+    return;
+  }
+
+  _populated = true;
+
+  // To work around buggy JS libraries that can't handle multi-digit
+  // version numbers, Opera 10's user agent string claims it's Opera
+  // 9, then later includes a Version/X.Y field:
+  //
+  // Opera/9.80 (foo) Presto/2.2.15 Version/10.10
+  var uas = navigator.userAgent;
+  var agent = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(uas);
+  var os    = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);
+
+  _iphone = /\b(iPhone|iP[ao]d)/.exec(uas);
+  _ipad = /\b(iP[ao]d)/.exec(uas);
+  _android = /Android/i.exec(uas);
+  _native = /FBAN\/\w+;/i.exec(uas);
+  _mobile = /Mobile/i.exec(uas);
+
+  // Note that the IE team blog would have you believe you should be checking
+  // for 'Win64; x64'.  But MSDN then reveals that you can actually be coming
+  // from either x64 or ia64;  so ultimately, you should just check for Win64
+  // as in indicator of whether you're in 64-bit IE.  32-bit IE on 64-bit
+  // Windows will send 'WOW64' instead.
+  _win64 = !!(/Win64/.exec(uas));
+
+  if (agent) {
+    _ie = agent[1] ? parseFloat(agent[1]) : (
+          agent[5] ? parseFloat(agent[5]) : NaN);
+    // IE compatibility mode
+    if (_ie && document && document.documentMode) {
+      _ie = document.documentMode;
+    }
+    // grab the "true" ie version from the trident token if available
+    var trident = /(?:Trident\/(\d+.\d+))/.exec(uas);
+    _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;
+
+    _firefox = agent[2] ? parseFloat(agent[2]) : NaN;
+    _opera   = agent[3] ? parseFloat(agent[3]) : NaN;
+    _webkit  = agent[4] ? parseFloat(agent[4]) : NaN;
+    if (_webkit) {
+      // We do not add the regexp to the above test, because it will always
+      // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in
+      // the userAgent string.
+      agent = /(?:Chrome\/(\d+\.\d+))/.exec(uas);
+      _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;
+    } else {
+      _chrome = NaN;
+    }
+  } else {
+    _ie = _firefox = _opera = _chrome = _webkit = NaN;
+  }
+
+  if (os) {
+    if (os[1]) {
+      // Detect OS X version.  If no version number matches, set _osx to true.
+      // Version examples:  10, 10_6_1, 10.7
+      // Parses version number as a float, taking only first two sets of
+      // digits.  If only one set of digits is found, returns just the major
+      // version number.
+      var ver = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(uas);
+
+      _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;
+    } else {
+      _osx = false;
+    }
+    _windows = !!os[2];
+    _linux   = !!os[3];
+  } else {
+    _osx = _windows = _linux = false;
+  }
+}
+
+var UserAgent_DEPRECATED = {
+
+  /**
+   *  Check if the UA is Internet Explorer.
+   *
+   *
+   *  @return float|NaN Version number (if match) or NaN.
+   */
+  ie: function() {
+    return _populate() || _ie;
+  },
+
+  /**
+   * Check if we're in Internet Explorer compatibility mode.
+   *
+   * @return bool true if in compatibility mode, false if
+   * not compatibility mode or not ie
+   */
+  ieCompatibilityMode: function() {
+    return _populate() || (_ie_real_version > _ie);
+  },
+
+
+  /**
+   * Whether the browser is 64-bit IE.  Really, this is kind of weak sauce;  we
+   * only need this because Skype can't handle 64-bit IE yet.  We need to remove
+   * this when we don't need it -- tracked by #601957.
+   */
+  ie64: function() {
+    return UserAgent_DEPRECATED.ie() && _win64;
+  },
+
+  /**
+   *  Check if the UA is Firefox.
+   *
+   *
+   *  @return float|NaN Version number (if match) or NaN.
+   */
+  firefox: function() {
+    return _populate() || _firefox;
+  },
+
+
+  /**
+   *  Check if the UA is Opera.
+   *
+   *
+   *  @return float|NaN Version number (if match) or NaN.
+   */
+  opera: function() {
+    return _populate() || _opera;
+  },
+
+
+  /**
+   *  Check if the UA is WebKit.
+   *
+   *
+   *  @return float|NaN Version number (if match) or NaN.
+   */
+  webkit: function() {
+    return _populate() || _webkit;
+  },
+
+  /**
+   *  For Push
+   *  WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit
+   */
+  safari: function() {
+    return UserAgent_DEPRECATED.webkit();
+  },
+
+  /**
+   *  Check if the UA is a Chrome browser.
+   *
+   *
+   *  @return float|NaN Version number (if match) or NaN.
+   */
+  chrome : function() {
+    return _populate() || _chrome;
+  },
+
+
+  /**
+   *  Check if the user is running Windows.
+   *
+   *  @return bool `true' if the user's OS is Windows.
+   */
+  windows: function() {
+    return _populate() || _windows;
+  },
+
+
+  /**
+   *  Check if the user is running Mac OS X.
+   *
+   *  @return float|bool   Returns a float if a version number is detected,
+   *                       otherwise true/false.
+   */
+  osx: function() {
+    return _populate() || _osx;
+  },
+
+  /**
+   * Check if the user is running Linux.
+   *
+   * @return bool `true' if the user's OS is some flavor of Linux.
+   */
+  linux: function() {
+    return _populate() || _linux;
+  },
+
+  /**
+   * Check if the user is running on an iPhone or iPod platform.
+   *
+   * @return bool `true' if the user is running some flavor of the
+   *    iPhone OS.
+   */
+  iphone: function() {
+    return _populate() || _iphone;
+  },
+
+  mobile: function() {
+    return _populate() || (_iphone || _ipad || _android || _mobile);
+  },
+
+  nativeApp: function() {
+    // webviews inside of the native apps
+    return _populate() || _native;
+  },
+
+  android: function() {
+    return _populate() || _android;
+  },
+
+  ipad: function() {
+    return _populate() || _ipad;
+  }
+};
+
+module.exports = UserAgent_DEPRECATED;
 
 
 /***/ }),
 
-/***/ 7490:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+/***/ 2327:
+/***/ ((module) => {
 
 "use strict";
 
 
-let { isClean, my } = __webpack_require__(1381)
-let CssSyntaxError = __webpack_require__(356)
-let Stringifier = __webpack_require__(346)
-let stringify = __webpack_require__(633)
-
-function cloneNode(obj, parent) {
-  let cloned = new obj.constructor()
-
-  for (let i in obj) {
-    if (!Object.prototype.hasOwnProperty.call(obj, i)) {
-      /* c8 ignore next 2 */
-      continue
-    }
-    if (i === 'proxyCache') continue
-    let value = obj[i]
-    let type = typeof value
-
-    if (i === 'parent' && type === 'object') {
-      if (parent) cloned[i] = parent
-    } else if (i === 'source') {
-      cloned[i] = value
-    } else if (Array.isArray(value)) {
-      cloned[i] = value.map(j => cloneNode(j, cloned))
-    } else {
-      if (type === 'object' && value !== null) value = cloneNode(value)
-      cloned[i] = value
-    }
-  }
-
-  return cloned
-}
-
-class Node {
-  constructor(defaults = {}) {
-    this.raws = {}
-    this[isClean] = false
-    this[my] = true
-
-    for (let name in defaults) {
-      if (name === 'nodes') {
-        this.nodes = []
-        for (let node of defaults[name]) {
-          if (typeof node.clone === 'function') {
-            this.append(node.clone())
+const SINGLE_QUOTE = "'".charCodeAt(0)
+const DOUBLE_QUOTE = '"'.charCodeAt(0)
+const BACKSLASH = '\\'.charCodeAt(0)
+const SLASH = '/'.charCodeAt(0)
+const NEWLINE = '\n'.charCodeAt(0)
+const SPACE = ' '.charCodeAt(0)
+const FEED = '\f'.charCodeAt(0)
+const TAB = '\t'.charCodeAt(0)
+const CR = '\r'.charCodeAt(0)
+const OPEN_SQUARE = '['.charCodeAt(0)
+const CLOSE_SQUARE = ']'.charCodeAt(0)
+const OPEN_PARENTHESES = '('.charCodeAt(0)
+const CLOSE_PARENTHESES = ')'.charCodeAt(0)
+const OPEN_CURLY = '{'.charCodeAt(0)
+const CLOSE_CURLY = '}'.charCodeAt(0)
+const SEMICOLON = ';'.charCodeAt(0)
+const ASTERISK = '*'.charCodeAt(0)
+const COLON = ':'.charCodeAt(0)
+const AT = '@'.charCodeAt(0)
+
+const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g
+const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g
+const RE_BAD_BRACKET = /.[\r\n"'(/\\]/
+const RE_HEX_ESCAPE = /[\da-f]/i
+
+module.exports = function tokenizer(input, options = {}) {
+  let css = input.css.valueOf()
+  let ignore = options.ignoreErrors
+
+  let code, content, escape, next, quote
+  let currentToken, escaped, escapePos, n, prev
+
+  let length = css.length
+  let pos = 0
+  let buffer = []
+  let returned = []
+
+  function position() {
+    return pos
+  }
+
+  function unclosed(what) {
+    throw input.error('Unclosed ' + what, pos)
+  }
+
+  function endOfFile() {
+    return returned.length === 0 && pos >= length
+  }
+
+  function nextToken(opts) {
+    if (returned.length) return returned.pop()
+    if (pos >= length) return
+
+    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false
+
+    code = css.charCodeAt(pos)
+
+    switch (code) {
+      case NEWLINE:
+      case SPACE:
+      case TAB:
+      case CR:
+      case FEED: {
+        next = pos
+        do {
+          next += 1
+          code = css.charCodeAt(next)
+        } while (
+          code === SPACE ||
+          code === NEWLINE ||
+          code === TAB ||
+          code === CR ||
+          code === FEED
+        )
+
+        currentToken = ['space', css.slice(pos, next)]
+        pos = next - 1
+        break
+      }
+
+      case OPEN_SQUARE:
+      case CLOSE_SQUARE:
+      case OPEN_CURLY:
+      case CLOSE_CURLY:
+      case COLON:
+      case SEMICOLON:
+      case CLOSE_PARENTHESES: {
+        let controlChar = String.fromCharCode(code)
+        currentToken = [controlChar, controlChar, pos]
+        break
+      }
+
+      case OPEN_PARENTHESES: {
+        prev = buffer.length ? buffer.pop()[1] : ''
+        n = css.charCodeAt(pos + 1)
+        if (
+          prev === 'url' &&
+          n !== SINGLE_QUOTE &&
+          n !== DOUBLE_QUOTE &&
+          n !== SPACE &&
+          n !== NEWLINE &&
+          n !== TAB &&
+          n !== FEED &&
+          n !== CR
+        ) {
+          next = pos
+          do {
+            escaped = false
+            next = css.indexOf(')', next + 1)
+            if (next === -1) {
+              if (ignore || ignoreUnclosed) {
+                next = pos
+                break
+              } else {
+                unclosed('bracket')
+              }
+            }
+            escapePos = next
+            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+              escapePos -= 1
+              escaped = !escaped
+            }
+          } while (escaped)
+
+          currentToken = ['brackets', css.slice(pos, next + 1), pos, next]
+
+          pos = next
+        } else {
+          next = css.indexOf(')', pos + 1)
+          content = css.slice(pos, next + 1)
+
+          if (next === -1 || RE_BAD_BRACKET.test(content)) {
+            currentToken = ['(', '(', pos]
           } else {
-            this.append(node)
-          }
-        }
-      } else {
-        this[name] = defaults[name]
-      }
-    }
-  }
-
-  addToError(error) {
-    error.postcssNode = this
-    if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
-      let s = this.source
-      error.stack = error.stack.replace(
-        /\n\s{4}at /,
-        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`
-      )
-    }
-    return error
-  }
-
-  after(add) {
-    this.parent.insertAfter(this, add)
-    return this
-  }
-
-  assign(overrides = {}) {
-    for (let name in overrides) {
-      this[name] = overrides[name]
-    }
-    return this
-  }
-
-  before(add) {
-    this.parent.insertBefore(this, add)
-    return this
-  }
-
-  cleanRaws(keepBetween) {
-    delete this.raws.before
-    delete this.raws.after
-    if (!keepBetween) delete this.raws.between
-  }
-
-  clone(overrides = {}) {
-    let cloned = cloneNode(this)
-    for (let name in overrides) {
-      cloned[name] = overrides[name]
-    }
-    return cloned
-  }
-
-  cloneAfter(overrides = {}) {
-    let cloned = this.clone(overrides)
-    this.parent.insertAfter(this, cloned)
-    return cloned
-  }
-
-  cloneBefore(overrides = {}) {
-    let cloned = this.clone(overrides)
-    this.parent.insertBefore(this, cloned)
-    return cloned
-  }
-
-  error(message, opts = {}) {
-    if (this.source) {
-      let { end, start } = this.rangeBy(opts)
-      return this.source.input.error(
-        message,
-        { column: start.column, line: start.line },
-        { column: end.column, line: end.line },
-        opts
-      )
-    }
-    return new CssSyntaxError(message)
-  }
-
-  getProxyProcessor() {
-    return {
-      get(node, prop) {
-        if (prop === 'proxyOf') {
-          return node
-        } else if (prop === 'root') {
-          return () => node.root().toProxy()
+            currentToken = ['brackets', content, pos, next]
+            pos = next
+          }
+        }
+
+        break
+      }
+
+      case SINGLE_QUOTE:
+      case DOUBLE_QUOTE: {
+        quote = code === SINGLE_QUOTE ? "'" : '"'
+        next = pos
+        do {
+          escaped = false
+          next = css.indexOf(quote, next + 1)
+          if (next === -1) {
+            if (ignore || ignoreUnclosed) {
+              next = pos + 1
+              break
+            } else {
+              unclosed('string')
+            }
+          }
+          escapePos = next
+          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+            escapePos -= 1
+            escaped = !escaped
+          }
+        } while (escaped)
+
+        currentToken = ['string', css.slice(pos, next + 1), pos, next]
+        pos = next
+        break
+      }
+
+      case AT: {
+        RE_AT_END.lastIndex = pos + 1
+        RE_AT_END.test(css)
+        if (RE_AT_END.lastIndex === 0) {
+          next = css.length - 1
         } else {
-          return node[prop]
-        }
-      },
-
-      set(node, prop, value) {
-        if (node[prop] === value) return true
-        node[prop] = value
+          next = RE_AT_END.lastIndex - 2
+        }
+
+        currentToken = ['at-word', css.slice(pos, next + 1), pos, next]
+
+        pos = next
+        break
+      }
+
+      case BACKSLASH: {
+        next = pos
+        escape = true
+        while (css.charCodeAt(next + 1) === BACKSLASH) {
+          next += 1
+          escape = !escape
+        }
+        code = css.charCodeAt(next + 1)
         if (
-          prop === 'prop' ||
-          prop === 'value' ||
-          prop === 'name' ||
-          prop === 'params' ||
-          prop === 'important' ||
-          /* c8 ignore next */
-          prop === 'text'
+          escape &&
+          code !== SLASH &&
+          code !== SPACE &&
+          code !== NEWLINE &&
+          code !== TAB &&
+          code !== CR &&
+          code !== FEED
         ) {
-          node.markDirty()
-        }
-        return true
-      }
-    }
-  }
-
-  markDirty() {
-    if (this[isClean]) {
-      this[isClean] = false
-      let next = this
-      while ((next = next.parent)) {
-        next[isClean] = false
-      }
-    }
-  }
-
-  next() {
-    if (!this.parent) return undefined
-    let index = this.parent.index(this)
-    return this.parent.nodes[index + 1]
-  }
-
-  positionBy(opts, stringRepresentation) {
-    let pos = this.source.start
-    if (opts.index) {
-      pos = this.positionInside(opts.index, stringRepresentation)
-    } else if (opts.word) {
-      stringRepresentation = this.toString()
-      let index = stringRepresentation.indexOf(opts.word)
-      if (index !== -1) pos = this.positionInside(index, stringRepresentation)
-    }
-    return pos
-  }
-
-  positionInside(index, stringRepresentation) {
-    let string = stringRepresentation || this.toString()
-    let column = this.source.start.column
-    let line = this.source.start.line
-
-    for (let i = 0; i < index; i++) {
-      if (string[i] === '\n') {
-        column = 1
-        line += 1
-      } else {
-        column += 1
-      }
-    }
-
-    return { column, line }
-  }
-
-  prev() {
-    if (!this.parent) return undefined
-    let index = this.parent.index(this)
-    return this.parent.nodes[index - 1]
-  }
-
-  rangeBy(opts) {
-    let start = {
-      column: this.source.start.column,
-      line: this.source.start.line
-    }
-    let end = this.source.end
-      ? {
-        column: this.source.end.column + 1,
-        line: this.source.end.line
-      }
-      : {
-        column: start.column + 1,
-        line: start.line
-      }
-
-    if (opts.word) {
-      let stringRepresentation = this.toString()
-      let index = stringRepresentation.indexOf(opts.word)
-      if (index !== -1) {
-        start = this.positionInside(index, stringRepresentation)
-        end = this.positionInside(index + opts.word.length, stringRepresentation)
-      }
-    } else {
-      if (opts.start) {
-        start = {
-          column: opts.start.column,
-          line: opts.start.line
-        }
-      } else if (opts.index) {
-        start = this.positionInside(opts.index)
-      }
-
-      if (opts.end) {
-        end = {
-          column: opts.end.column,
-          line: opts.end.line
-        }
-      } else if (typeof opts.endIndex === 'number') {
-        end = this.positionInside(opts.endIndex)
-      } else if (opts.index) {
-        end = this.positionInside(opts.index + 1)
-      }
+          next += 1
+          if (RE_HEX_ESCAPE.test(css.charAt(next))) {
+            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
+              next += 1
+            }
+            if (css.charCodeAt(next + 1) === SPACE) {
+              next += 1
+            }
+          }
+        }
+
+        currentToken = ['word', css.slice(pos, next + 1), pos, next]
+
+        pos = next
+        break
+      }
+
+      default: {
+        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
+          next = css.indexOf('*/', pos + 2) + 1
+          if (next === 0) {
+            if (ignore || ignoreUnclosed) {
+              next = css.length
+            } else {
+              unclosed('comment')
+            }
+          }
+
+          currentToken = ['comment', css.slice(pos, next + 1), pos, next]
+          pos = next
+        } else {
+          RE_WORD_END.lastIndex = pos + 1
+          RE_WORD_END.test(css)
+          if (RE_WORD_END.lastIndex === 0) {
+            next = css.length - 1
+          } else {
+            next = RE_WORD_END.lastIndex - 2
+          }
+
+          currentToken = ['word', css.slice(pos, next + 1), pos, next]
+          buffer.push(currentToken)
+          pos = next
+        }
+
+        break
+      }
+    }
+
+    pos++
+    return currentToken
+  }
+
+  function back(token) {
+    returned.push(token)
+  }
+
+  return {
+    back,
+    endOfFile,
+    nextToken,
+    position
+  }
+}
+
+
+/***/ }),
+
+/***/ 2739:
+/***/ (() => {
+
+/* (ignored) */
+
+/***/ }),
+
+/***/ 2775:
+/***/ ((module) => {
+
+var x=String;
+var create=function() {return {isColorSupported:false,reset:x,bold:x,dim:x,italic:x,underline:x,inverse:x,hidden:x,strikethrough:x,black:x,red:x,green:x,yellow:x,blue:x,magenta:x,cyan:x,white:x,gray:x,bgBlack:x,bgRed:x,bgGreen:x,bgYellow:x,bgBlue:x,bgMagenta:x,bgCyan:x,bgWhite:x,blackBright:x,redBright:x,greenBright:x,yellowBright:x,blueBright:x,magentaBright:x,cyanBright:x,whiteBright:x,bgBlackBright:x,bgRedBright:x,bgGreenBright:x,bgYellowBright:x,bgBlueBright:x,bgMagentaBright:x,bgCyanBright:x,bgWhiteBright:x}};
+module.exports=create();
+module.exports.createColors = create;
+
+
+/***/ }),
+
+/***/ 3122:
+/***/ ((module) => {
+
+"use strict";
+/* eslint-disable no-console */
+
+
+let printed = {}
+
+module.exports = function warnOnce(message) {
+  if (printed[message]) return
+  printed[message] = true
+
+  if (typeof console !== 'undefined' && console.warn) {
+    console.warn(message)
+  }
+}
+
+
+/***/ }),
+
+/***/ 3815:
+/***/ ((module) => {
+
+module.exports = function walk(nodes, cb, bubble) {
+  var i, max, node, result;
+
+  for (i = 0, max = nodes.length; i < max; i += 1) {
+    node = nodes[i];
+    if (!bubble) {
+      result = cb(node, i, nodes);
     }
 
     if (
-      end.line < start.line ||
-      (end.line === start.line && end.column <= start.column)
+      result !== false &&
+      node.type === "function" &&
+      Array.isArray(node.nodes)
     ) {
-      end = { column: start.column + 1, line: start.line }
-    }
-
-    return { end, start }
-  }
-
-  raw(prop, defaultType) {
-    let str = new Stringifier()
-    return str.raw(this, prop, defaultType)
-  }
-
-  remove() {
-    if (this.parent) {
-      this.parent.removeChild(this)
-    }
-    this.parent = undefined
-    return this
-  }
-
-  replaceWith(...nodes) {
-    if (this.parent) {
-      let bookmark = this
-      let foundSelf = false
-      for (let node of nodes) {
-        if (node === this) {
-          foundSelf = true
-        } else if (foundSelf) {
-          this.parent.insertAfter(bookmark, node)
-          bookmark = node
-        } else {
-          this.parent.insertBefore(bookmark, node)
-        }
-      }
-
-      if (!foundSelf) {
-        this.remove()
-      }
-    }
-
-    return this
-  }
-
-  root() {
-    let result = this
-    while (result.parent && result.parent.type !== 'document') {
-      result = result.parent
-    }
-    return result
-  }
-
-  toJSON(_, inputs) {
-    let fixed = {}
-    let emitInputs = inputs == null
-    inputs = inputs || new Map()
-    let inputsNextIndex = 0
-
-    for (let name in this) {
-      if (!Object.prototype.hasOwnProperty.call(this, name)) {
-        /* c8 ignore next 2 */
-        continue
-      }
-      if (name === 'parent' || name === 'proxyCache') continue
-      let value = this[name]
-
-      if (Array.isArray(value)) {
-        fixed[name] = value.map(i => {
-          if (typeof i === 'object' && i.toJSON) {
-            return i.toJSON(null, inputs)
-          } else {
-            return i
-          }
-        })
-      } else if (typeof value === 'object' && value.toJSON) {
-        fixed[name] = value.toJSON(null, inputs)
-      } else if (name === 'source') {
-        let inputId = inputs.get(value.input)
-        if (inputId == null) {
-          inputId = inputsNextIndex
-          inputs.set(value.input, inputsNextIndex)
-          inputsNextIndex++
-        }
-        fixed[name] = {
-          end: value.end,
-          inputId,
-          start: value.start
-        }
-      } else {
-        fixed[name] = value
-      }
-    }
-
-    if (emitInputs) {
-      fixed.inputs = [...inputs.keys()].map(input => input.toJSON())
-    }
-
-    return fixed
-  }
-
-  toProxy() {
-    if (!this.proxyCache) {
-      this.proxyCache = new Proxy(this, this.getProxyProcessor())
-    }
-    return this.proxyCache
-  }
-
-  toString(stringifier = stringify) {
-    if (stringifier.stringify) stringifier = stringifier.stringify
-    let result = ''
-    stringifier(this, i => {
-      result += i
-    })
-    return result
-  }
-
-  warn(result, text, opts) {
-    let data = { node: this }
-    for (let i in opts) data[i] = opts[i]
-    return result.warn(text, data)
-  }
-
-  get proxyOf() {
-    return this
-  }
-}
-
-module.exports = Node
-Node.default = Node
-
-
-/***/ }),
-
-/***/ 4295:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Container = __webpack_require__(683)
-let Parser = __webpack_require__(3937)
-let Input = __webpack_require__(5380)
-
-function parse(css, opts) {
-  let input = new Input(css, opts)
-  let parser = new Parser(input)
-  try {
-    parser.parse()
-  } catch (e) {
-    if (false) {}
-    throw e
-  }
-
-  return parser.root
-}
-
-module.exports = parse
-parse.default = parse
-
-Container.registerParse(parse)
+      walk(node.nodes, cb, bubble);
+    }
+
+    if (bubble) {
+      cb(node, i, nodes);
+    }
+  }
+};
 
 
 /***/ }),
@@ -5012,12 +3155,12 @@
 "use strict";
 
 
+let AtRule = __webpack_require__(1326)
+let Comment = __webpack_require__(6589)
 let Declaration = __webpack_require__(1516)
-let tokenizer = __webpack_require__(2327)
-let Comment = __webpack_require__(6589)
-let AtRule = __webpack_require__(1326)
 let Root = __webpack_require__(9434)
 let Rule = __webpack_require__(4092)
+let tokenizer = __webpack_require__(2327)
 
 const SAFE_COMMENT_NEIGHBOR = {
   empty: true,
@@ -5155,7 +3298,7 @@
 
   colon(tokens) {
     let brackets = 0
-    let token, type, prev
+    let prev, token, type
     for (let [i, element] of tokens.entries()) {
       token = element
       type = token[0]
@@ -5279,12 +3422,12 @@
         let str = ''
         for (let j = i; j > 0; j--) {
           let type = cache[j][0]
-          if (str.trim().indexOf('!') === 0 && type !== 'space') {
+          if (str.trim().startsWith('!') && type !== 'space') {
             break
           }
           str = cache.pop()[1] + str
         }
-        if (str.trim().indexOf('!') === 0) {
+        if (str.trim().startsWith('!')) {
           node.important = true
           node.raws.important = str
           tokens = cache
@@ -5359,6 +3502,8 @@
       if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
         prev.raws.ownSemicolon = this.spaces
         this.spaces = ''
+        prev.source.end = this.getPosition(token[2])
+        prev.source.end.offset += prev.raws.ownSemicolon.length
       }
     }
   }
@@ -5603,7 +3748,7 @@
 
   unknownWord(tokens) {
     throw this.input.error(
-      'Unknown word',
+      'Unknown word ' + tokens[0][1],
       { offset: tokens[0][2] },
       { offset: tokens[0][2] + tokens[0][1].length }
     )
@@ -5623,1313 +3768,6 @@
 
 /***/ }),
 
-/***/ 4529:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let CssSyntaxError = __webpack_require__(356)
-let Declaration = __webpack_require__(1516)
-let LazyResult = __webpack_require__(448)
-let Container = __webpack_require__(683)
-let Processor = __webpack_require__(9656)
-let stringify = __webpack_require__(633)
-let fromJSON = __webpack_require__(8940)
-let Document = __webpack_require__(271)
-let Warning = __webpack_require__(5776)
-let Comment = __webpack_require__(6589)
-let AtRule = __webpack_require__(1326)
-let Result = __webpack_require__(9055)
-let Input = __webpack_require__(5380)
-let parse = __webpack_require__(4295)
-let list = __webpack_require__(7374)
-let Rule = __webpack_require__(4092)
-let Root = __webpack_require__(9434)
-let Node = __webpack_require__(7490)
-
-function postcss(...plugins) {
-  if (plugins.length === 1 && Array.isArray(plugins[0])) {
-    plugins = plugins[0]
-  }
-  return new Processor(plugins)
-}
-
-postcss.plugin = function plugin(name, initializer) {
-  let warningPrinted = false
-  function creator(...args) {
-    // eslint-disable-next-line no-console
-    if (console && console.warn && !warningPrinted) {
-      warningPrinted = true
-      // eslint-disable-next-line no-console
-      console.warn(
-        name +
-          ': postcss.plugin was deprecated. Migration guide:\n' +
-          'https://evilmartians.com/chronicles/postcss-8-plugin-migration'
-      )
-      if (process.env.LANG && process.env.LANG.startsWith('cn')) {
-        /* c8 ignore next 7 */
-        // eslint-disable-next-line no-console
-        console.warn(
-          name +
-            ': 里面 postcss.plugin 被弃用. 迁移指南:\n' +
-            'https://www.w3ctech.com/topic/2226'
-        )
-      }
-    }
-    let transformer = initializer(...args)
-    transformer.postcssPlugin = name
-    transformer.postcssVersion = new Processor().version
-    return transformer
-  }
-
-  let cache
-  Object.defineProperty(creator, 'postcss', {
-    get() {
-      if (!cache) cache = creator()
-      return cache
-    }
-  })
-
-  creator.process = function (css, processOpts, pluginOpts) {
-    return postcss([creator(pluginOpts)]).process(css, processOpts)
-  }
-
-  return creator
-}
-
-postcss.stringify = stringify
-postcss.parse = parse
-postcss.fromJSON = fromJSON
-postcss.list = list
-
-postcss.comment = defaults => new Comment(defaults)
-postcss.atRule = defaults => new AtRule(defaults)
-postcss.decl = defaults => new Declaration(defaults)
-postcss.rule = defaults => new Rule(defaults)
-postcss.root = defaults => new Root(defaults)
-postcss.document = defaults => new Document(defaults)
-
-postcss.CssSyntaxError = CssSyntaxError
-postcss.Declaration = Declaration
-postcss.Container = Container
-postcss.Processor = Processor
-postcss.Document = Document
-postcss.Comment = Comment
-postcss.Warning = Warning
-postcss.AtRule = AtRule
-postcss.Result = Result
-postcss.Input = Input
-postcss.Rule = Rule
-postcss.Root = Root
-postcss.Node = Node
-
-LazyResult.registerPostcss(postcss)
-
-module.exports = postcss
-postcss.default = postcss
-
-
-/***/ }),
-
-/***/ 5696:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(1866)
-let { existsSync, readFileSync } = __webpack_require__(9977)
-let { dirname, join } = __webpack_require__(197)
-
-function fromBase64(str) {
-  if (Buffer) {
-    return Buffer.from(str, 'base64').toString()
-  } else {
-    /* c8 ignore next 2 */
-    return window.atob(str)
-  }
-}
-
-class PreviousMap {
-  constructor(css, opts) {
-    if (opts.map === false) return
-    this.loadAnnotation(css)
-    this.inline = this.startWith(this.annotation, 'data:')
-
-    let prev = opts.map ? opts.map.prev : undefined
-    let text = this.loadMap(opts.from, prev)
-    if (!this.mapFile && opts.from) {
-      this.mapFile = opts.from
-    }
-    if (this.mapFile) this.root = dirname(this.mapFile)
-    if (text) this.text = text
-  }
-
-  consumer() {
-    if (!this.consumerCache) {
-      this.consumerCache = new SourceMapConsumer(this.text)
-    }
-    return this.consumerCache
-  }
-
-  decodeInline(text) {
-    let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/
-    let baseUri = /^data:application\/json;base64,/
-    let charsetUri = /^data:application\/json;charset=utf-?8,/
-    let uri = /^data:application\/json,/
-
-    if (charsetUri.test(text) || uri.test(text)) {
-      return decodeURIComponent(text.substr(RegExp.lastMatch.length))
-    }
-
-    if (baseCharsetUri.test(text) || baseUri.test(text)) {
-      return fromBase64(text.substr(RegExp.lastMatch.length))
-    }
-
-    let encoding = text.match(/data:application\/json;([^,]+),/)[1]
-    throw new Error('Unsupported source map encoding ' + encoding)
-  }
-
-  getAnnotationURL(sourceMapString) {
-    return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim()
-  }
-
-  isMap(map) {
-    if (typeof map !== 'object') return false
-    return (
-      typeof map.mappings === 'string' ||
-      typeof map._mappings === 'string' ||
-      Array.isArray(map.sections)
-    )
-  }
-
-  loadAnnotation(css) {
-    let comments = css.match(/\/\*\s*# sourceMappingURL=/gm)
-    if (!comments) return
-
-    // sourceMappingURLs from comments, strings, etc.
-    let start = css.lastIndexOf(comments.pop())
-    let end = css.indexOf('*/', start)
-
-    if (start > -1 && end > -1) {
-      // Locate the last sourceMappingURL to avoid pickin
-      this.annotation = this.getAnnotationURL(css.substring(start, end))
-    }
-  }
-
-  loadFile(path) {
-    this.root = dirname(path)
-    if (existsSync(path)) {
-      this.mapFile = path
-      return readFileSync(path, 'utf-8').toString().trim()
-    }
-  }
-
-  loadMap(file, prev) {
-    if (prev === false) return false
-
-    if (prev) {
-      if (typeof prev === 'string') {
-        return prev
-      } else if (typeof prev === 'function') {
-        let prevPath = prev(file)
-        if (prevPath) {
-          let map = this.loadFile(prevPath)
-          if (!map) {
-            throw new Error(
-              'Unable to load previous source map: ' + prevPath.toString()
-            )
-          }
-          return map
-        }
-      } else if (prev instanceof SourceMapConsumer) {
-        return SourceMapGenerator.fromSourceMap(prev).toString()
-      } else if (prev instanceof SourceMapGenerator) {
-        return prev.toString()
-      } else if (this.isMap(prev)) {
-        return JSON.stringify(prev)
-      } else {
-        throw new Error(
-          'Unsupported previous source map format: ' + prev.toString()
-        )
-      }
-    } else if (this.inline) {
-      return this.decodeInline(this.annotation)
-    } else if (this.annotation) {
-      let map = this.annotation
-      if (file) map = join(dirname(file), map)
-      return this.loadFile(map)
-    }
-  }
-
-  startWith(string, start) {
-    if (!string) return false
-    return string.substr(0, start.length) === start
-  }
-
-  withContent() {
-    return !!(
-      this.consumer().sourcesContent &&
-      this.consumer().sourcesContent.length > 0
-    )
-  }
-}
-
-module.exports = PreviousMap
-PreviousMap.default = PreviousMap
-
-
-/***/ }),
-
-/***/ 9656:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let NoWorkResult = __webpack_require__(7661)
-let LazyResult = __webpack_require__(448)
-let Document = __webpack_require__(271)
-let Root = __webpack_require__(9434)
-
-class Processor {
-  constructor(plugins = []) {
-    this.version = '8.4.38'
-    this.plugins = this.normalize(plugins)
-  }
-
-  normalize(plugins) {
-    let normalized = []
-    for (let i of plugins) {
-      if (i.postcss === true) {
-        i = i()
-      } else if (i.postcss) {
-        i = i.postcss
-      }
-
-      if (typeof i === 'object' && Array.isArray(i.plugins)) {
-        normalized = normalized.concat(i.plugins)
-      } else if (typeof i === 'object' && i.postcssPlugin) {
-        normalized.push(i)
-      } else if (typeof i === 'function') {
-        normalized.push(i)
-      } else if (typeof i === 'object' && (i.parse || i.stringify)) {
-        if (false) {}
-      } else {
-        throw new Error(i + ' is not a PostCSS plugin')
-      }
-    }
-    return normalized
-  }
-
-  process(css, opts = {}) {
-    if (
-      !this.plugins.length &&
-      !opts.parser &&
-      !opts.stringifier &&
-      !opts.syntax
-    ) {
-      return new NoWorkResult(this, css, opts)
-    } else {
-      return new LazyResult(this, css, opts)
-    }
-  }
-
-  use(plugin) {
-    this.plugins = this.plugins.concat(this.normalize([plugin]))
-    return this
-  }
-}
-
-module.exports = Processor
-Processor.default = Processor
-
-Root.registerProcessor(Processor)
-Document.registerProcessor(Processor)
-
-
-/***/ }),
-
-/***/ 9055:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Warning = __webpack_require__(5776)
-
-class Result {
-  constructor(processor, root, opts) {
-    this.processor = processor
-    this.messages = []
-    this.root = root
-    this.opts = opts
-    this.css = undefined
-    this.map = undefined
-  }
-
-  toString() {
-    return this.css
-  }
-
-  warn(text, opts = {}) {
-    if (!opts.plugin) {
-      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
-        opts.plugin = this.lastPlugin.postcssPlugin
-      }
-    }
-
-    let warning = new Warning(text, opts)
-    this.messages.push(warning)
-
-    return warning
-  }
-
-  warnings() {
-    return this.messages.filter(i => i.type === 'warning')
-  }
-
-  get content() {
-    return this.css
-  }
-}
-
-module.exports = Result
-Result.default = Result
-
-
-/***/ }),
-
-/***/ 9434:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Container = __webpack_require__(683)
-
-let LazyResult, Processor
-
-class Root extends Container {
-  constructor(defaults) {
-    super(defaults)
-    this.type = 'root'
-    if (!this.nodes) this.nodes = []
-  }
-
-  normalize(child, sample, type) {
-    let nodes = super.normalize(child)
-
-    if (sample) {
-      if (type === 'prepend') {
-        if (this.nodes.length > 1) {
-          sample.raws.before = this.nodes[1].raws.before
-        } else {
-          delete sample.raws.before
-        }
-      } else if (this.first !== sample) {
-        for (let node of nodes) {
-          node.raws.before = sample.raws.before
-        }
-      }
-    }
-
-    return nodes
-  }
-
-  removeChild(child, ignore) {
-    let index = this.index(child)
-
-    if (!ignore && index === 0 && this.nodes.length > 1) {
-      this.nodes[1].raws.before = this.nodes[index].raws.before
-    }
-
-    return super.removeChild(child)
-  }
-
-  toResult(opts = {}) {
-    let lazy = new LazyResult(new Processor(), this, opts)
-    return lazy.stringify()
-  }
-}
-
-Root.registerLazyResult = dependant => {
-  LazyResult = dependant
-}
-
-Root.registerProcessor = dependant => {
-  Processor = dependant
-}
-
-module.exports = Root
-Root.default = Root
-
-Container.registerRoot(Root)
-
-
-/***/ }),
-
-/***/ 4092:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Container = __webpack_require__(683)
-let list = __webpack_require__(7374)
-
-class Rule extends Container {
-  constructor(defaults) {
-    super(defaults)
-    this.type = 'rule'
-    if (!this.nodes) this.nodes = []
-  }
-
-  get selectors() {
-    return list.comma(this.selector)
-  }
-
-  set selectors(values) {
-    let match = this.selector ? this.selector.match(/,\s*/) : null
-    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')
-    this.selector = values.join(sep)
-  }
-}
-
-module.exports = Rule
-Rule.default = Rule
-
-Container.registerRule(Rule)
-
-
-/***/ }),
-
-/***/ 346:
-/***/ ((module) => {
-
-"use strict";
-
-
-const DEFAULT_RAW = {
-  after: '\n',
-  beforeClose: '\n',
-  beforeComment: '\n',
-  beforeDecl: '\n',
-  beforeOpen: ' ',
-  beforeRule: '\n',
-  colon: ': ',
-  commentLeft: ' ',
-  commentRight: ' ',
-  emptyBody: '',
-  indent: '    ',
-  semicolon: false
-}
-
-function capitalize(str) {
-  return str[0].toUpperCase() + str.slice(1)
-}
-
-class Stringifier {
-  constructor(builder) {
-    this.builder = builder
-  }
-
-  atrule(node, semicolon) {
-    let name = '@' + node.name
-    let params = node.params ? this.rawValue(node, 'params') : ''
-
-    if (typeof node.raws.afterName !== 'undefined') {
-      name += node.raws.afterName
-    } else if (params) {
-      name += ' '
-    }
-
-    if (node.nodes) {
-      this.block(node, name + params)
-    } else {
-      let end = (node.raws.between || '') + (semicolon ? ';' : '')
-      this.builder(name + params + end, node)
-    }
-  }
-
-  beforeAfter(node, detect) {
-    let value
-    if (node.type === 'decl') {
-      value = this.raw(node, null, 'beforeDecl')
-    } else if (node.type === 'comment') {
-      value = this.raw(node, null, 'beforeComment')
-    } else if (detect === 'before') {
-      value = this.raw(node, null, 'beforeRule')
-    } else {
-      value = this.raw(node, null, 'beforeClose')
-    }
-
-    let buf = node.parent
-    let depth = 0
-    while (buf && buf.type !== 'root') {
-      depth += 1
-      buf = buf.parent
-    }
-
-    if (value.includes('\n')) {
-      let indent = this.raw(node, null, 'indent')
-      if (indent.length) {
-        for (let step = 0; step < depth; step++) value += indent
-      }
-    }
-
-    return value
-  }
-
-  block(node, start) {
-    let between = this.raw(node, 'between', 'beforeOpen')
-    this.builder(start + between + '{', node, 'start')
-
-    let after
-    if (node.nodes && node.nodes.length) {
-      this.body(node)
-      after = this.raw(node, 'after')
-    } else {
-      after = this.raw(node, 'after', 'emptyBody')
-    }
-
-    if (after) this.builder(after)
-    this.builder('}', node, 'end')
-  }
-
-  body(node) {
-    let last = node.nodes.length - 1
-    while (last > 0) {
-      if (node.nodes[last].type !== 'comment') break
-      last -= 1
-    }
-
-    let semicolon = this.raw(node, 'semicolon')
-    for (let i = 0; i < node.nodes.length; i++) {
-      let child = node.nodes[i]
-      let before = this.raw(child, 'before')
-      if (before) this.builder(before)
-      this.stringify(child, last !== i || semicolon)
-    }
-  }
-
-  comment(node) {
-    let left = this.raw(node, 'left', 'commentLeft')
-    let right = this.raw(node, 'right', 'commentRight')
-    this.builder('/*' + left + node.text + right + '*/', node)
-  }
-
-  decl(node, semicolon) {
-    let between = this.raw(node, 'between', 'colon')
-    let string = node.prop + between + this.rawValue(node, 'value')
-
-    if (node.important) {
-      string += node.raws.important || ' !important'
-    }
-
-    if (semicolon) string += ';'
-    this.builder(string, node)
-  }
-
-  document(node) {
-    this.body(node)
-  }
-
-  raw(node, own, detect) {
-    let value
-    if (!detect) detect = own
-
-    // Already had
-    if (own) {
-      value = node.raws[own]
-      if (typeof value !== 'undefined') return value
-    }
-
-    let parent = node.parent
-
-    if (detect === 'before') {
-      // Hack for first rule in CSS
-      if (!parent || (parent.type === 'root' && parent.first === node)) {
-        return ''
-      }
-
-      // `root` nodes in `document` should use only their own raws
-      if (parent && parent.type === 'document') {
-        return ''
-      }
-    }
-
-    // Floating child without parent
-    if (!parent) return DEFAULT_RAW[detect]
-
-    // Detect style by other nodes
-    let root = node.root()
-    if (!root.rawCache) root.rawCache = {}
-    if (typeof root.rawCache[detect] !== 'undefined') {
-      return root.rawCache[detect]
-    }
-
-    if (detect === 'before' || detect === 'after') {
-      return this.beforeAfter(node, detect)
-    } else {
-      let method = 'raw' + capitalize(detect)
-      if (this[method]) {
-        value = this[method](root, node)
-      } else {
-        root.walk(i => {
-          value = i.raws[own]
-          if (typeof value !== 'undefined') return false
-        })
-      }
-    }
-
-    if (typeof value === 'undefined') value = DEFAULT_RAW[detect]
-
-    root.rawCache[detect] = value
-    return value
-  }
-
-  rawBeforeClose(root) {
-    let value
-    root.walk(i => {
-      if (i.nodes && i.nodes.length > 0) {
-        if (typeof i.raws.after !== 'undefined') {
-          value = i.raws.after
-          if (value.includes('\n')) {
-            value = value.replace(/[^\n]+$/, '')
-          }
-          return false
-        }
-      }
-    })
-    if (value) value = value.replace(/\S/g, '')
-    return value
-  }
-
-  rawBeforeComment(root, node) {
-    let value
-    root.walkComments(i => {
-      if (typeof i.raws.before !== 'undefined') {
-        value = i.raws.before
-        if (value.includes('\n')) {
-          value = value.replace(/[^\n]+$/, '')
-        }
-        return false
-      }
-    })
-    if (typeof value === 'undefined') {
-      value = this.raw(node, null, 'beforeDecl')
-    } else if (value) {
-      value = value.replace(/\S/g, '')
-    }
-    return value
-  }
-
-  rawBeforeDecl(root, node) {
-    let value
-    root.walkDecls(i => {
-      if (typeof i.raws.before !== 'undefined') {
-        value = i.raws.before
-        if (value.includes('\n')) {
-          value = value.replace(/[^\n]+$/, '')
-        }
-        return false
-      }
-    })
-    if (typeof value === 'undefined') {
-      value = this.raw(node, null, 'beforeRule')
-    } else if (value) {
-      value = value.replace(/\S/g, '')
-    }
-    return value
-  }
-
-  rawBeforeOpen(root) {
-    let value
-    root.walk(i => {
-      if (i.type !== 'decl') {
-        value = i.raws.between
-        if (typeof value !== 'undefined') return false
-      }
-    })
-    return value
-  }
-
-  rawBeforeRule(root) {
-    let value
-    root.walk(i => {
-      if (i.nodes && (i.parent !== root || root.first !== i)) {
-        if (typeof i.raws.before !== 'undefined') {
-          value = i.raws.before
-          if (value.includes('\n')) {
-            value = value.replace(/[^\n]+$/, '')
-          }
-          return false
-        }
-      }
-    })
-    if (value) value = value.replace(/\S/g, '')
-    return value
-  }
-
-  rawColon(root) {
-    let value
-    root.walkDecls(i => {
-      if (typeof i.raws.between !== 'undefined') {
-        value = i.raws.between.replace(/[^\s:]/g, '')
-        return false
-      }
-    })
-    return value
-  }
-
-  rawEmptyBody(root) {
-    let value
-    root.walk(i => {
-      if (i.nodes && i.nodes.length === 0) {
-        value = i.raws.after
-        if (typeof value !== 'undefined') return false
-      }
-    })
-    return value
-  }
-
-  rawIndent(root) {
-    if (root.raws.indent) return root.raws.indent
-    let value
-    root.walk(i => {
-      let p = i.parent
-      if (p && p !== root && p.parent && p.parent === root) {
-        if (typeof i.raws.before !== 'undefined') {
-          let parts = i.raws.before.split('\n')
-          value = parts[parts.length - 1]
-          value = value.replace(/\S/g, '')
-          return false
-        }
-      }
-    })
-    return value
-  }
-
-  rawSemicolon(root) {
-    let value
-    root.walk(i => {
-      if (i.nodes && i.nodes.length && i.last.type === 'decl') {
-        value = i.raws.semicolon
-        if (typeof value !== 'undefined') return false
-      }
-    })
-    return value
-  }
-
-  rawValue(node, prop) {
-    let value = node[prop]
-    let raw = node.raws[prop]
-    if (raw && raw.value === value) {
-      return raw.raw
-    }
-
-    return value
-  }
-
-  root(node) {
-    this.body(node)
-    if (node.raws.after) this.builder(node.raws.after)
-  }
-
-  rule(node) {
-    this.block(node, this.rawValue(node, 'selector'))
-    if (node.raws.ownSemicolon) {
-      this.builder(node.raws.ownSemicolon, node, 'end')
-    }
-  }
-
-  stringify(node, semicolon) {
-    /* c8 ignore start */
-    if (!this[node.type]) {
-      throw new Error(
-        'Unknown AST node type ' +
-          node.type +
-          '. ' +
-          'Maybe you need to change PostCSS stringifier.'
-      )
-    }
-    /* c8 ignore stop */
-    this[node.type](node, semicolon)
-  }
-}
-
-module.exports = Stringifier
-Stringifier.default = Stringifier
-
-
-/***/ }),
-
-/***/ 633:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-let Stringifier = __webpack_require__(346)
-
-function stringify(node, builder) {
-  let str = new Stringifier(builder)
-  str.stringify(node)
-}
-
-module.exports = stringify
-stringify.default = stringify
-
-
-/***/ }),
-
-/***/ 1381:
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports.isClean = Symbol('isClean')
-
-module.exports.my = Symbol('my')
-
-
-/***/ }),
-
-/***/ 2327:
-/***/ ((module) => {
-
-"use strict";
-
-
-const SINGLE_QUOTE = "'".charCodeAt(0)
-const DOUBLE_QUOTE = '"'.charCodeAt(0)
-const BACKSLASH = '\\'.charCodeAt(0)
-const SLASH = '/'.charCodeAt(0)
-const NEWLINE = '\n'.charCodeAt(0)
-const SPACE = ' '.charCodeAt(0)
-const FEED = '\f'.charCodeAt(0)
-const TAB = '\t'.charCodeAt(0)
-const CR = '\r'.charCodeAt(0)
-const OPEN_SQUARE = '['.charCodeAt(0)
-const CLOSE_SQUARE = ']'.charCodeAt(0)
-const OPEN_PARENTHESES = '('.charCodeAt(0)
-const CLOSE_PARENTHESES = ')'.charCodeAt(0)
-const OPEN_CURLY = '{'.charCodeAt(0)
-const CLOSE_CURLY = '}'.charCodeAt(0)
-const SEMICOLON = ';'.charCodeAt(0)
-const ASTERISK = '*'.charCodeAt(0)
-const COLON = ':'.charCodeAt(0)
-const AT = '@'.charCodeAt(0)
-
-const RE_AT_END = /[\t\n\f\r "#'()/;[\\\]{}]/g
-const RE_WORD_END = /[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g
-const RE_BAD_BRACKET = /.[\r\n"'(/\\]/
-const RE_HEX_ESCAPE = /[\da-f]/i
-
-module.exports = function tokenizer(input, options = {}) {
-  let css = input.css.valueOf()
-  let ignore = options.ignoreErrors
-
-  let code, next, quote, content, escape
-  let escaped, escapePos, prev, n, currentToken
-
-  let length = css.length
-  let pos = 0
-  let buffer = []
-  let returned = []
-
-  function position() {
-    return pos
-  }
-
-  function unclosed(what) {
-    throw input.error('Unclosed ' + what, pos)
-  }
-
-  function endOfFile() {
-    return returned.length === 0 && pos >= length
-  }
-
-  function nextToken(opts) {
-    if (returned.length) return returned.pop()
-    if (pos >= length) return
-
-    let ignoreUnclosed = opts ? opts.ignoreUnclosed : false
-
-    code = css.charCodeAt(pos)
-
-    switch (code) {
-      case NEWLINE:
-      case SPACE:
-      case TAB:
-      case CR:
-      case FEED: {
-        next = pos
-        do {
-          next += 1
-          code = css.charCodeAt(next)
-        } while (
-          code === SPACE ||
-          code === NEWLINE ||
-          code === TAB ||
-          code === CR ||
-          code === FEED
-        )
-
-        currentToken = ['space', css.slice(pos, next)]
-        pos = next - 1
-        break
-      }
-
-      case OPEN_SQUARE:
-      case CLOSE_SQUARE:
-      case OPEN_CURLY:
-      case CLOSE_CURLY:
-      case COLON:
-      case SEMICOLON:
-      case CLOSE_PARENTHESES: {
-        let controlChar = String.fromCharCode(code)
-        currentToken = [controlChar, controlChar, pos]
-        break
-      }
-
-      case OPEN_PARENTHESES: {
-        prev = buffer.length ? buffer.pop()[1] : ''
-        n = css.charCodeAt(pos + 1)
-        if (
-          prev === 'url' &&
-          n !== SINGLE_QUOTE &&
-          n !== DOUBLE_QUOTE &&
-          n !== SPACE &&
-          n !== NEWLINE &&
-          n !== TAB &&
-          n !== FEED &&
-          n !== CR
-        ) {
-          next = pos
-          do {
-            escaped = false
-            next = css.indexOf(')', next + 1)
-            if (next === -1) {
-              if (ignore || ignoreUnclosed) {
-                next = pos
-                break
-              } else {
-                unclosed('bracket')
-              }
-            }
-            escapePos = next
-            while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
-              escapePos -= 1
-              escaped = !escaped
-            }
-          } while (escaped)
-
-          currentToken = ['brackets', css.slice(pos, next + 1), pos, next]
-
-          pos = next
-        } else {
-          next = css.indexOf(')', pos + 1)
-          content = css.slice(pos, next + 1)
-
-          if (next === -1 || RE_BAD_BRACKET.test(content)) {
-            currentToken = ['(', '(', pos]
-          } else {
-            currentToken = ['brackets', content, pos, next]
-            pos = next
-          }
-        }
-
-        break
-      }
-
-      case SINGLE_QUOTE:
-      case DOUBLE_QUOTE: {
-        quote = code === SINGLE_QUOTE ? "'" : '"'
-        next = pos
-        do {
-          escaped = false
-          next = css.indexOf(quote, next + 1)
-          if (next === -1) {
-            if (ignore || ignoreUnclosed) {
-              next = pos + 1
-              break
-            } else {
-              unclosed('string')
-            }
-          }
-          escapePos = next
-          while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
-            escapePos -= 1
-            escaped = !escaped
-          }
-        } while (escaped)
-
-        currentToken = ['string', css.slice(pos, next + 1), pos, next]
-        pos = next
-        break
-      }
-
-      case AT: {
-        RE_AT_END.lastIndex = pos + 1
-        RE_AT_END.test(css)
-        if (RE_AT_END.lastIndex === 0) {
-          next = css.length - 1
-        } else {
-          next = RE_AT_END.lastIndex - 2
-        }
-
-        currentToken = ['at-word', css.slice(pos, next + 1), pos, next]
-
-        pos = next
-        break
-      }
-
-      case BACKSLASH: {
-        next = pos
-        escape = true
-        while (css.charCodeAt(next + 1) === BACKSLASH) {
-          next += 1
-          escape = !escape
-        }
-        code = css.charCodeAt(next + 1)
-        if (
-          escape &&
-          code !== SLASH &&
-          code !== SPACE &&
-          code !== NEWLINE &&
-          code !== TAB &&
-          code !== CR &&
-          code !== FEED
-        ) {
-          next += 1
-          if (RE_HEX_ESCAPE.test(css.charAt(next))) {
-            while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
-              next += 1
-            }
-            if (css.charCodeAt(next + 1) === SPACE) {
-              next += 1
-            }
-          }
-        }
-
-        currentToken = ['word', css.slice(pos, next + 1), pos, next]
-
-        pos = next
-        break
-      }
-
-      default: {
-        if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
-          next = css.indexOf('*/', pos + 2) + 1
-          if (next === 0) {
-            if (ignore || ignoreUnclosed) {
-              next = css.length
-            } else {
-              unclosed('comment')
-            }
-          }
-
-          currentToken = ['comment', css.slice(pos, next + 1), pos, next]
-          pos = next
-        } else {
-          RE_WORD_END.lastIndex = pos + 1
-          RE_WORD_END.test(css)
-          if (RE_WORD_END.lastIndex === 0) {
-            next = css.length - 1
-          } else {
-            next = RE_WORD_END.lastIndex - 2
-          }
-
-          currentToken = ['word', css.slice(pos, next + 1), pos, next]
-          buffer.push(currentToken)
-          pos = next
-        }
-
-        break
-      }
-    }
-
-    pos++
-    return currentToken
-  }
-
-  function back(token) {
-    returned.push(token)
-  }
-
-  return {
-    back,
-    endOfFile,
-    nextToken,
-    position
-  }
-}
-
-
-/***/ }),
-
-/***/ 3122:
-/***/ ((module) => {
-
-"use strict";
-/* eslint-disable no-console */
-
-
-let printed = {}
-
-module.exports = function warnOnce(message) {
-  if (printed[message]) return
-  printed[message] = true
-
-  if (typeof console !== 'undefined' && console.warn) {
-    console.warn(message)
-  }
-}
-
-
-/***/ }),
-
-/***/ 5776:
-/***/ ((module) => {
-
-"use strict";
-
-
-class Warning {
-  constructor(text, opts = {}) {
-    this.type = 'warning'
-    this.text = text
-
-    if (opts.node && opts.node.source) {
-      let range = opts.node.rangeBy(opts)
-      this.line = range.start.line
-      this.column = range.start.column
-      this.endLine = range.end.line
-      this.endColumn = range.end.column
-    }
-
-    for (let opt in opts) this[opt] = opts[opt]
-  }
-
-  toString() {
-    if (this.node) {
-      return this.node.error(this.text, {
-        index: this.index,
-        plugin: this.plugin,
-        word: this.word
-      }).message
-    }
-
-    if (this.plugin) {
-      return this.plugin + ': ' + this.text
-    }
-
-    return this.text
-  }
-}
-
-module.exports = Warning
-Warning.default = Warning
-
-
-/***/ }),
-
-/***/ 628:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-
-
-var ReactPropTypesSecret = __webpack_require__(4067);
-
-function emptyFunction() {}
-function emptyFunctionWithReset() {}
-emptyFunctionWithReset.resetWarningCache = emptyFunction;
-
-module.exports = function() {
-  function shim(props, propName, componentName, location, propFullName, secret) {
-    if (secret === ReactPropTypesSecret) {
-      // It is still safe when called from React.
-      return;
-    }
-    var err = new Error(
-      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
-      'Use PropTypes.checkPropTypes() to call them. ' +
-      'Read more at http://fb.me/use-check-prop-types'
-    );
-    err.name = 'Invariant Violation';
-    throw err;
-  };
-  shim.isRequired = shim;
-  function getShim() {
-    return shim;
-  };
-  // Important!
-  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
-  var ReactPropTypes = {
-    array: shim,
-    bigint: shim,
-    bool: shim,
-    func: shim,
-    number: shim,
-    object: shim,
-    string: shim,
-    symbol: shim,
-
-    any: shim,
-    arrayOf: getShim,
-    element: shim,
-    elementType: shim,
-    instanceOf: getShim,
-    node: shim,
-    objectOf: getShim,
-    oneOf: getShim,
-    oneOfType: getShim,
-    shape: getShim,
-    exact: getShim,
-
-    checkPropTypes: emptyFunctionWithReset,
-    resetWarningCache: emptyFunction
-  };
-
-  ReactPropTypes.PropTypes = ReactPropTypes;
-
-  return ReactPropTypes;
-};
-
-
-/***/ }),
-
-/***/ 5826:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-if (false) { var throwOnDirectAccess, ReactIs; } else {
-  // By explicitly using `prop-types` you are opting into new production behavior.
-  // http://fb.me/prop-types-in-prod
-  module.exports = __webpack_require__(628)();
-}
-
-
-/***/ }),
-
 /***/ 4067:
 /***/ ((module) => {
 
@@ -6950,6 +3788,374 @@
 
 /***/ }),
 
+/***/ 4092:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Container = __webpack_require__(683)
+let list = __webpack_require__(7374)
+
+class Rule extends Container {
+  get selectors() {
+    return list.comma(this.selector)
+  }
+
+  set selectors(values) {
+    let match = this.selector ? this.selector.match(/,\s*/) : null
+    let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen')
+    this.selector = values.join(sep)
+  }
+
+  constructor(defaults) {
+    super(defaults)
+    this.type = 'rule'
+    if (!this.nodes) this.nodes = []
+  }
+}
+
+module.exports = Rule
+Rule.default = Rule
+
+Container.registerRule(Rule)
+
+
+/***/ }),
+
+/***/ 4132:
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+"use strict";
+var __webpack_unused_export__;
+
+__webpack_unused_export__ = true;
+var TextareaAutosize_1 = __webpack_require__(4462);
+exports.A = TextareaAutosize_1.TextareaAutosize;
+
+
+/***/ }),
+
+/***/ 4295:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Container = __webpack_require__(683)
+let Input = __webpack_require__(5380)
+let Parser = __webpack_require__(3937)
+
+function parse(css, opts) {
+  let input = new Input(css, opts)
+  let parser = new Parser(input)
+  try {
+    parser.parse()
+  } catch (e) {
+    if (false) {}
+    throw e
+  }
+
+  return parser.root
+}
+
+module.exports = parse
+parse.default = parse
+
+Container.registerParse(parse)
+
+
+/***/ }),
+
+/***/ 4306:
+/***/ (function(module, exports) {
+
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
+	autosize 4.0.4
+	license: MIT
+	http://www.jacklmoore.com/autosize
+*/
+(function (global, factory) {
+	if (true) {
+		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
+		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	} else { var mod; }
+})(this, function (module, exports) {
+	'use strict';
+
+	var map = typeof Map === "function" ? new Map() : function () {
+		var keys = [];
+		var values = [];
+
+		return {
+			has: function has(key) {
+				return keys.indexOf(key) > -1;
+			},
+			get: function get(key) {
+				return values[keys.indexOf(key)];
+			},
+			set: function set(key, value) {
+				if (keys.indexOf(key) === -1) {
+					keys.push(key);
+					values.push(value);
+				}
+			},
+			delete: function _delete(key) {
+				var index = keys.indexOf(key);
+				if (index > -1) {
+					keys.splice(index, 1);
+					values.splice(index, 1);
+				}
+			}
+		};
+	}();
+
+	var createEvent = function createEvent(name) {
+		return new Event(name, { bubbles: true });
+	};
+	try {
+		new Event('test');
+	} catch (e) {
+		// IE does not support `new Event()`
+		createEvent = function createEvent(name) {
+			var evt = document.createEvent('Event');
+			evt.initEvent(name, true, false);
+			return evt;
+		};
+	}
+
+	function assign(ta) {
+		if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
+
+		var heightOffset = null;
+		var clientWidth = null;
+		var cachedHeight = null;
+
+		function init() {
+			var style = window.getComputedStyle(ta, null);
+
+			if (style.resize === 'vertical') {
+				ta.style.resize = 'none';
+			} else if (style.resize === 'both') {
+				ta.style.resize = 'horizontal';
+			}
+
+			if (style.boxSizing === 'content-box') {
+				heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
+			} else {
+				heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
+			}
+			// Fix when a textarea is not on document body and heightOffset is Not a Number
+			if (isNaN(heightOffset)) {
+				heightOffset = 0;
+			}
+
+			update();
+		}
+
+		function changeOverflow(value) {
+			{
+				// Chrome/Safari-specific fix:
+				// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
+				// made available by removing the scrollbar. The following forces the necessary text reflow.
+				var width = ta.style.width;
+				ta.style.width = '0px';
+				// Force reflow:
+				/* jshint ignore:start */
+				ta.offsetWidth;
+				/* jshint ignore:end */
+				ta.style.width = width;
+			}
+
+			ta.style.overflowY = value;
+		}
+
+		function getParentOverflows(el) {
+			var arr = [];
+
+			while (el && el.parentNode && el.parentNode instanceof Element) {
+				if (el.parentNode.scrollTop) {
+					arr.push({
+						node: el.parentNode,
+						scrollTop: el.parentNode.scrollTop
+					});
+				}
+				el = el.parentNode;
+			}
+
+			return arr;
+		}
+
+		function resize() {
+			if (ta.scrollHeight === 0) {
+				// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
+				return;
+			}
+
+			var overflows = getParentOverflows(ta);
+			var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
+
+			ta.style.height = '';
+			ta.style.height = ta.scrollHeight + heightOffset + 'px';
+
+			// used to check if an update is actually necessary on window.resize
+			clientWidth = ta.clientWidth;
+
+			// prevents scroll-position jumping
+			overflows.forEach(function (el) {
+				el.node.scrollTop = el.scrollTop;
+			});
+
+			if (docTop) {
+				document.documentElement.scrollTop = docTop;
+			}
+		}
+
+		function update() {
+			resize();
+
+			var styleHeight = Math.round(parseFloat(ta.style.height));
+			var computed = window.getComputedStyle(ta, null);
+
+			// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
+			var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
+
+			// The actual height not matching the style height (set via the resize method) indicates that 
+			// the max-height has been exceeded, in which case the overflow should be allowed.
+			if (actualHeight < styleHeight) {
+				if (computed.overflowY === 'hidden') {
+					changeOverflow('scroll');
+					resize();
+					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
+				}
+			} else {
+				// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
+				if (computed.overflowY !== 'hidden') {
+					changeOverflow('hidden');
+					resize();
+					actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
+				}
+			}
+
+			if (cachedHeight !== actualHeight) {
+				cachedHeight = actualHeight;
+				var evt = createEvent('autosize:resized');
+				try {
+					ta.dispatchEvent(evt);
+				} catch (err) {
+					// Firefox will throw an error on dispatchEvent for a detached element
+					// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
+				}
+			}
+		}
+
+		var pageResize = function pageResize() {
+			if (ta.clientWidth !== clientWidth) {
+				update();
+			}
+		};
+
+		var destroy = function (style) {
+			window.removeEventListener('resize', pageResize, false);
+			ta.removeEventListener('input', update, false);
+			ta.removeEventListener('keyup', update, false);
+			ta.removeEventListener('autosize:destroy', destroy, false);
+			ta.removeEventListener('autosize:update', update, false);
+
+			Object.keys(style).forEach(function (key) {
+				ta.style[key] = style[key];
+			});
+
+			map.delete(ta);
+		}.bind(ta, {
+			height: ta.style.height,
+			resize: ta.style.resize,
+			overflowY: ta.style.overflowY,
+			overflowX: ta.style.overflowX,
+			wordWrap: ta.style.wordWrap
+		});
+
+		ta.addEventListener('autosize:destroy', destroy, false);
+
+		// IE9 does not fire onpropertychange or oninput for deletions,
+		// so binding to onkeyup to catch most of those events.
+		// There is no way that I know of to detect something like 'cut' in IE9.
+		if ('onpropertychange' in ta && 'oninput' in ta) {
+			ta.addEventListener('keyup', update, false);
+		}
+
+		window.addEventListener('resize', pageResize, false);
+		ta.addEventListener('input', update, false);
+		ta.addEventListener('autosize:update', update, false);
+		ta.style.overflowX = 'hidden';
+		ta.style.wordWrap = 'break-word';
+
+		map.set(ta, {
+			destroy: destroy,
+			update: update
+		});
+
+		init();
+	}
+
+	function destroy(ta) {
+		var methods = map.get(ta);
+		if (methods) {
+			methods.destroy();
+		}
+	}
+
+	function update(ta) {
+		var methods = map.get(ta);
+		if (methods) {
+			methods.update();
+		}
+	}
+
+	var autosize = null;
+
+	// Do nothing in Node.js environment and IE8 (or lower)
+	if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
+		autosize = function autosize(el) {
+			return el;
+		};
+		autosize.destroy = function (el) {
+			return el;
+		};
+		autosize.update = function (el) {
+			return el;
+		};
+	} else {
+		autosize = function autosize(el, options) {
+			if (el) {
+				Array.prototype.forEach.call(el.length ? el : [el], function (x) {
+					return assign(x, options);
+				});
+			}
+			return el;
+		};
+		autosize.destroy = function (el) {
+			if (el) {
+				Array.prototype.forEach.call(el.length ? el : [el], destroy);
+			}
+			return el;
+		};
+		autosize.update = function (el) {
+			if (el) {
+				Array.prototype.forEach.call(el.length ? el : [el], update);
+			}
+			return el;
+		};
+	}
+
+	exports.default = autosize;
+	module.exports = exports['default'];
+});
+
+/***/ }),
+
 /***/ 4462:
 /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 
@@ -7084,15 +4290,2585 @@
 
 /***/ }),
 
-/***/ 4132:
+/***/ 4725:
+/***/ ((module) => {
+
+function stringifyNode(node, custom) {
+  var type = node.type;
+  var value = node.value;
+  var buf;
+  var customResult;
+
+  if (custom && (customResult = custom(node)) !== undefined) {
+    return customResult;
+  } else if (type === "word" || type === "space") {
+    return value;
+  } else if (type === "string") {
+    buf = node.quote || "";
+    return buf + value + (node.unclosed ? "" : buf);
+  } else if (type === "comment") {
+    return "/*" + value + (node.unclosed ? "" : "*/");
+  } else if (type === "div") {
+    return (node.before || "") + value + (node.after || "");
+  } else if (Array.isArray(node.nodes)) {
+    buf = stringify(node.nodes, custom);
+    if (type !== "function") {
+      return buf;
+    }
+    return (
+      value +
+      "(" +
+      (node.before || "") +
+      buf +
+      (node.after || "") +
+      (node.unclosed ? "" : ")")
+    );
+  }
+  return value;
+}
+
+function stringify(nodes, custom) {
+  var result, i;
+
+  if (Array.isArray(nodes)) {
+    result = "";
+    for (i = nodes.length - 1; ~i; i -= 1) {
+      result = stringifyNode(nodes[i], custom) + result;
+    }
+    return result;
+  }
+  return stringifyNode(nodes, custom);
+}
+
+module.exports = stringify;
+
+
+/***/ }),
+
+/***/ 5042:
+/***/ ((module) => {
+
+// This alphabet uses `A-Za-z0-9_-` symbols.
+// The order of characters is optimized for better gzip and brotli compression.
+// References to the same file (works both for gzip and brotli):
+// `'use`, `andom`, and `rict'`
+// References to the brotli default dictionary:
+// `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`
+let urlAlphabet =
+  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
+
+let customAlphabet = (alphabet, defaultSize = 21) => {
+  return (size = defaultSize) => {
+    let id = ''
+    // A compact alternative for `for (var i = 0; i < step; i++)`.
+    let i = size | 0
+    while (i--) {
+      // `| 0` is more compact and faster than `Math.floor()`.
+      id += alphabet[(Math.random() * alphabet.length) | 0]
+    }
+    return id
+  }
+}
+
+let nanoid = (size = 21) => {
+  let id = ''
+  // A compact alternative for `for (var i = 0; i < step; i++)`.
+  let i = size | 0
+  while (i--) {
+    // `| 0` is more compact and faster than `Math.floor()`.
+    id += urlAlphabet[(Math.random() * 64) | 0]
+  }
+  return id
+}
+
+module.exports = { nanoid, customAlphabet }
+
+
+/***/ }),
+
+/***/ 5215:
+/***/ ((module) => {
+
+"use strict";
+
+
+// do not edit .js files directly - edit src/index.jst
+
+
+
+module.exports = function equal(a, b) {
+  if (a === b) return true;
+
+  if (a && b && typeof a == 'object' && typeof b == 'object') {
+    if (a.constructor !== b.constructor) return false;
+
+    var length, i, keys;
+    if (Array.isArray(a)) {
+      length = a.length;
+      if (length != b.length) return false;
+      for (i = length; i-- !== 0;)
+        if (!equal(a[i], b[i])) return false;
+      return true;
+    }
+
+
+
+    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
+    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
+    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
+
+    keys = Object.keys(a);
+    length = keys.length;
+    if (length !== Object.keys(b).length) return false;
+
+    for (i = length; i-- !== 0;)
+      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
+
+    for (i = length; i-- !== 0;) {
+      var key = keys[i];
+
+      if (!equal(a[key], b[key])) return false;
+    }
+
+    return true;
+  }
+
+  // true if both NaN, false otherwise
+  return a!==a && b!==b;
+};
+
+
+/***/ }),
+
+/***/ 5380:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let { nanoid } = __webpack_require__(5042)
+let { isAbsolute, resolve } = __webpack_require__(197)
+let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(1866)
+let { fileURLToPath, pathToFileURL } = __webpack_require__(2739)
+
+let CssSyntaxError = __webpack_require__(356)
+let PreviousMap = __webpack_require__(5696)
+let terminalHighlight = __webpack_require__(9746)
+
+let fromOffsetCache = Symbol('fromOffsetCache')
+
+let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator)
+let pathAvailable = Boolean(resolve && isAbsolute)
+
+class Input {
+  get from() {
+    return this.file || this.id
+  }
+
+  constructor(css, opts = {}) {
+    if (
+      css === null ||
+      typeof css === 'undefined' ||
+      (typeof css === 'object' && !css.toString)
+    ) {
+      throw new Error(`PostCSS received ${css} instead of CSS string`)
+    }
+
+    this.css = css.toString()
+
+    if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
+      this.hasBOM = true
+      this.css = this.css.slice(1)
+    } else {
+      this.hasBOM = false
+    }
+
+    this.document = this.css
+    if (opts.document) this.document = opts.document.toString()
+
+    if (opts.from) {
+      if (
+        !pathAvailable ||
+        /^\w+:\/\//.test(opts.from) ||
+        isAbsolute(opts.from)
+      ) {
+        this.file = opts.from
+      } else {
+        this.file = resolve(opts.from)
+      }
+    }
+
+    if (pathAvailable && sourceMapAvailable) {
+      let map = new PreviousMap(this.css, opts)
+      if (map.text) {
+        this.map = map
+        let file = map.consumer().file
+        if (!this.file && file) this.file = this.mapResolve(file)
+      }
+    }
+
+    if (!this.file) {
+      this.id = '<input css ' + nanoid(6) + '>'
+    }
+    if (this.map) this.map.file = this.from
+  }
+
+  error(message, line, column, opts = {}) {
+    let endColumn, endLine, result
+
+    if (line && typeof line === 'object') {
+      let start = line
+      let end = column
+      if (typeof start.offset === 'number') {
+        let pos = this.fromOffset(start.offset)
+        line = pos.line
+        column = pos.col
+      } else {
+        line = start.line
+        column = start.column
+      }
+      if (typeof end.offset === 'number') {
+        let pos = this.fromOffset(end.offset)
+        endLine = pos.line
+        endColumn = pos.col
+      } else {
+        endLine = end.line
+        endColumn = end.column
+      }
+    } else if (!column) {
+      let pos = this.fromOffset(line)
+      line = pos.line
+      column = pos.col
+    }
+
+    let origin = this.origin(line, column, endLine, endColumn)
+    if (origin) {
+      result = new CssSyntaxError(
+        message,
+        origin.endLine === undefined
+          ? origin.line
+          : { column: origin.column, line: origin.line },
+        origin.endLine === undefined
+          ? origin.column
+          : { column: origin.endColumn, line: origin.endLine },
+        origin.source,
+        origin.file,
+        opts.plugin
+      )
+    } else {
+      result = new CssSyntaxError(
+        message,
+        endLine === undefined ? line : { column, line },
+        endLine === undefined ? column : { column: endColumn, line: endLine },
+        this.css,
+        this.file,
+        opts.plugin
+      )
+    }
+
+    result.input = { column, endColumn, endLine, line, source: this.css }
+    if (this.file) {
+      if (pathToFileURL) {
+        result.input.url = pathToFileURL(this.file).toString()
+      }
+      result.input.file = this.file
+    }
+
+    return result
+  }
+
+  fromOffset(offset) {
+    let lastLine, lineToIndex
+    if (!this[fromOffsetCache]) {
+      let lines = this.css.split('\n')
+      lineToIndex = new Array(lines.length)
+      let prevIndex = 0
+
+      for (let i = 0, l = lines.length; i < l; i++) {
+        lineToIndex[i] = prevIndex
+        prevIndex += lines[i].length + 1
+      }
+
+      this[fromOffsetCache] = lineToIndex
+    } else {
+      lineToIndex = this[fromOffsetCache]
+    }
+    lastLine = lineToIndex[lineToIndex.length - 1]
+
+    let min = 0
+    if (offset >= lastLine) {
+      min = lineToIndex.length - 1
+    } else {
+      let max = lineToIndex.length - 2
+      let mid
+      while (min < max) {
+        mid = min + ((max - min) >> 1)
+        if (offset < lineToIndex[mid]) {
+          max = mid - 1
+        } else if (offset >= lineToIndex[mid + 1]) {
+          min = mid + 1
+        } else {
+          min = mid
+          break
+        }
+      }
+    }
+    return {
+      col: offset - lineToIndex[min] + 1,
+      line: min + 1
+    }
+  }
+
+  mapResolve(file) {
+    if (/^\w+:\/\//.test(file)) {
+      return file
+    }
+    return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file)
+  }
+
+  origin(line, column, endLine, endColumn) {
+    if (!this.map) return false
+    let consumer = this.map.consumer()
+
+    let from = consumer.originalPositionFor({ column, line })
+    if (!from.source) return false
+
+    let to
+    if (typeof endLine === 'number') {
+      to = consumer.originalPositionFor({ column: endColumn, line: endLine })
+    }
+
+    let fromUrl
+
+    if (isAbsolute(from.source)) {
+      fromUrl = pathToFileURL(from.source)
+    } else {
+      fromUrl = new URL(
+        from.source,
+        this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile)
+      )
+    }
+
+    let result = {
+      column: from.column,
+      endColumn: to && to.column,
+      endLine: to && to.line,
+      line: from.line,
+      url: fromUrl.toString()
+    }
+
+    if (fromUrl.protocol === 'file:') {
+      if (fileURLToPath) {
+        result.file = fileURLToPath(fromUrl)
+      } else {
+        /* c8 ignore next 2 */
+        throw new Error(`file: protocol is not available in this PostCSS build`)
+      }
+    }
+
+    let source = consumer.sourceContentFor(from.source)
+    if (source) result.source = source
+
+    return result
+  }
+
+  toJSON() {
+    let json = {}
+    for (let name of ['hasBOM', 'css', 'file', 'id']) {
+      if (this[name] != null) {
+        json[name] = this[name]
+      }
+    }
+    if (this.map) {
+      json.map = { ...this.map }
+      if (json.map.consumerCache) {
+        json.map.consumerCache = undefined
+      }
+    }
+    return json
+  }
+}
+
+module.exports = Input
+Input.default = Input
+
+if (terminalHighlight && terminalHighlight.registerInput) {
+  terminalHighlight.registerInput(Input)
+}
+
+
+/***/ }),
+
+/***/ 5404:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+const CSSValueParser = __webpack_require__(1544)
+
+/**
+ * @type {import('postcss').PluginCreator}
+ */
+module.exports = (opts) => {
+
+  const DEFAULTS = {
+    skipHostRelativeUrls: true,
+  }
+  const config = Object.assign(DEFAULTS, opts)
+
+  return {
+    postcssPlugin: 'rebaseUrl',
+
+    Declaration(decl) {
+      // The faster way to find Declaration node
+      const parsedValue = CSSValueParser(decl.value)
+
+      let valueChanged = false
+      parsedValue.walk(node => {
+        if (node.type !== 'function' || node.value !== 'url') {
+          return
+        }
+
+        const urlVal = node.nodes[0].value
+
+        // bases relative URLs with rootUrl
+        const basedUrl = new URL(urlVal, opts.rootUrl)
+
+        // skip host-relative, already normalized URLs (e.g. `/images/image.jpg`, without `..`s)
+        if ((basedUrl.pathname === urlVal) && config.skipHostRelativeUrls) {
+          return false // skip this value
+        }
+
+        node.nodes[0].value = basedUrl.toString()
+        valueChanged = true
+
+        return false // do not walk deeper
+      })
+
+      if (valueChanged) {
+        decl.value = CSSValueParser.stringify(parsedValue)
+      }
+
+    }
+  }
+}
+
+module.exports.postcss = true
+
+
+/***/ }),
+
+/***/ 5417:
+/***/ ((__unused_webpack_module, exports) => {
+
+"use strict";
+/*istanbul ignore start*/
+
+
+Object.defineProperty(exports, "__esModule", ({
+  value: true
+}));
+exports["default"] = Diff;
+
+/*istanbul ignore end*/
+function Diff() {}
+
+Diff.prototype = {
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  diff: function diff(oldString, newString) {
+    /*istanbul ignore start*/
+    var
+    /*istanbul ignore end*/
+    options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+    var callback = options.callback;
+
+    if (typeof options === 'function') {
+      callback = options;
+      options = {};
+    }
+
+    this.options = options;
+    var self = this;
+
+    function done(value) {
+      if (callback) {
+        setTimeout(function () {
+          callback(undefined, value);
+        }, 0);
+        return true;
+      } else {
+        return value;
+      }
+    } // Allow subclasses to massage the input prior to running
+
+
+    oldString = this.castInput(oldString);
+    newString = this.castInput(newString);
+    oldString = this.removeEmpty(this.tokenize(oldString));
+    newString = this.removeEmpty(this.tokenize(newString));
+    var newLen = newString.length,
+        oldLen = oldString.length;
+    var editLength = 1;
+    var maxEditLength = newLen + oldLen;
+    var bestPath = [{
+      newPos: -1,
+      components: []
+    }]; // Seed editLength = 0, i.e. the content starts with the same values
+
+    var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+
+    if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+      // Identity per the equality and tokenizer
+      return done([{
+        value: this.join(newString),
+        count: newString.length
+      }]);
+    } // Main worker method. checks all permutations of a given edit length for acceptance.
+
+
+    function execEditLength() {
+      for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+        var basePath =
+        /*istanbul ignore start*/
+        void 0
+        /*istanbul ignore end*/
+        ;
+
+        var addPath = bestPath[diagonalPath - 1],
+            removePath = bestPath[diagonalPath + 1],
+            _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
+
+        if (addPath) {
+          // No one else is going to attempt to use this value, clear it
+          bestPath[diagonalPath - 1] = undefined;
+        }
+
+        var canAdd = addPath && addPath.newPos + 1 < newLen,
+            canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+
+        if (!canAdd && !canRemove) {
+          // If this path is a terminal then prune
+          bestPath[diagonalPath] = undefined;
+          continue;
+        } // Select the diagonal that we want to branch from. We select the prior
+        // path whose position in the new string is the farthest from the origin
+        // and does not pass the bounds of the diff graph
+
+
+        if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
+          basePath = clonePath(removePath);
+          self.pushComponent(basePath.components, undefined, true);
+        } else {
+          basePath = addPath; // No need to clone, we've pulled it from the list
+
+          basePath.newPos++;
+          self.pushComponent(basePath.components, true, undefined);
+        }
+
+        _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
+
+        if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
+          return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+        } else {
+          // Otherwise track this path as a potential candidate and continue.
+          bestPath[diagonalPath] = basePath;
+        }
+      }
+
+      editLength++;
+    } // Performs the length of edit iteration. Is a bit fugly as this has to support the
+    // sync and async mode which is never fun. Loops over execEditLength until a value
+    // is produced.
+
+
+    if (callback) {
+      (function exec() {
+        setTimeout(function () {
+          // This should not happen, but we want to be safe.
+
+          /* istanbul ignore next */
+          if (editLength > maxEditLength) {
+            return callback();
+          }
+
+          if (!execEditLength()) {
+            exec();
+          }
+        }, 0);
+      })();
+    } else {
+      while (editLength <= maxEditLength) {
+        var ret = execEditLength();
+
+        if (ret) {
+          return ret;
+        }
+      }
+    }
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  pushComponent: function pushComponent(components, added, removed) {
+    var last = components[components.length - 1];
+
+    if (last && last.added === added && last.removed === removed) {
+      // We need to clone here as the component clone operation is just
+      // as shallow array clone
+      components[components.length - 1] = {
+        count: last.count + 1,
+        added: added,
+        removed: removed
+      };
+    } else {
+      components.push({
+        count: 1,
+        added: added,
+        removed: removed
+      });
+    }
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
+    var newLen = newString.length,
+        oldLen = oldString.length,
+        newPos = basePath.newPos,
+        oldPos = newPos - diagonalPath,
+        commonCount = 0;
+
+    while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
+      newPos++;
+      oldPos++;
+      commonCount++;
+    }
+
+    if (commonCount) {
+      basePath.components.push({
+        count: commonCount
+      });
+    }
+
+    basePath.newPos = newPos;
+    return oldPos;
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  equals: function equals(left, right) {
+    if (this.options.comparator) {
+      return this.options.comparator(left, right);
+    } else {
+      return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
+    }
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  removeEmpty: function removeEmpty(array) {
+    var ret = [];
+
+    for (var i = 0; i < array.length; i++) {
+      if (array[i]) {
+        ret.push(array[i]);
+      }
+    }
+
+    return ret;
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  castInput: function castInput(value) {
+    return value;
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  tokenize: function tokenize(value) {
+    return value.split('');
+  },
+
+  /*istanbul ignore start*/
+
+  /*istanbul ignore end*/
+  join: function join(chars) {
+    return chars.join('');
+  }
+};
+
+function buildValues(diff, components, newString, oldString, useLongestToken) {
+  var componentPos = 0,
+      componentLen = components.length,
+      newPos = 0,
+      oldPos = 0;
+
+  for (; componentPos < componentLen; componentPos++) {
+    var component = components[componentPos];
+
+    if (!component.removed) {
+      if (!component.added && useLongestToken) {
+        var value = newString.slice(newPos, newPos + component.count);
+        value = value.map(function (value, i) {
+          var oldValue = oldString[oldPos + i];
+          return oldValue.length > value.length ? oldValue : value;
+        });
+        component.value = diff.join(value);
+      } else {
+        component.value = diff.join(newString.slice(newPos, newPos + component.count));
+      }
+
+      newPos += component.count; // Common case
+
+      if (!component.added) {
+        oldPos += component.count;
+      }
+    } else {
+      component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
+      oldPos += component.count; // Reverse add and remove so removes are output first to match common convention
+      // The diffing algorithm is tied to add then remove output and this is the simplest
+      // route to get the desired output with minimal overhead.
+
+      if (componentPos && components[componentPos - 1].added) {
+        var tmp = components[componentPos - 1];
+        components[componentPos - 1] = components[componentPos];
+        components[componentPos] = tmp;
+      }
+    }
+  } // Special case handle for when one terminal is ignored (i.e. whitespace).
+  // For this case we merge the terminal into the prior string and drop the change.
+  // This is only available for string mode.
+
+
+  var lastComponent = components[componentLen - 1];
+
+  if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
+    components[componentLen - 2].value += lastComponent.value;
+    components.pop();
+  }
+
+  return components;
+}
+
+function clonePath(path) {
+  return {
+    newPos: path.newPos,
+    components: path.components.slice(0)
+  };
+}
+
+
+/***/ }),
+
+/***/ 5696:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let { existsSync, readFileSync } = __webpack_require__(9977)
+let { dirname, join } = __webpack_require__(197)
+let { SourceMapConsumer, SourceMapGenerator } = __webpack_require__(1866)
+
+function fromBase64(str) {
+  if (Buffer) {
+    return Buffer.from(str, 'base64').toString()
+  } else {
+    /* c8 ignore next 2 */
+    return window.atob(str)
+  }
+}
+
+class PreviousMap {
+  constructor(css, opts) {
+    if (opts.map === false) return
+    this.loadAnnotation(css)
+    this.inline = this.startWith(this.annotation, 'data:')
+
+    let prev = opts.map ? opts.map.prev : undefined
+    let text = this.loadMap(opts.from, prev)
+    if (!this.mapFile && opts.from) {
+      this.mapFile = opts.from
+    }
+    if (this.mapFile) this.root = dirname(this.mapFile)
+    if (text) this.text = text
+  }
+
+  consumer() {
+    if (!this.consumerCache) {
+      this.consumerCache = new SourceMapConsumer(this.text)
+    }
+    return this.consumerCache
+  }
+
+  decodeInline(text) {
+    let baseCharsetUri = /^data:application\/json;charset=utf-?8;base64,/
+    let baseUri = /^data:application\/json;base64,/
+    let charsetUri = /^data:application\/json;charset=utf-?8,/
+    let uri = /^data:application\/json,/
+
+    let uriMatch = text.match(charsetUri) || text.match(uri)
+    if (uriMatch) {
+      return decodeURIComponent(text.substr(uriMatch[0].length))
+    }
+
+    let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri)
+    if (baseUriMatch) {
+      return fromBase64(text.substr(baseUriMatch[0].length))
+    }
+
+    let encoding = text.match(/data:application\/json;([^,]+),/)[1]
+    throw new Error('Unsupported source map encoding ' + encoding)
+  }
+
+  getAnnotationURL(sourceMapString) {
+    return sourceMapString.replace(/^\/\*\s*# sourceMappingURL=/, '').trim()
+  }
+
+  isMap(map) {
+    if (typeof map !== 'object') return false
+    return (
+      typeof map.mappings === 'string' ||
+      typeof map._mappings === 'string' ||
+      Array.isArray(map.sections)
+    )
+  }
+
+  loadAnnotation(css) {
+    let comments = css.match(/\/\*\s*# sourceMappingURL=/g)
+    if (!comments) return
+
+    // sourceMappingURLs from comments, strings, etc.
+    let start = css.lastIndexOf(comments.pop())
+    let end = css.indexOf('*/', start)
+
+    if (start > -1 && end > -1) {
+      // Locate the last sourceMappingURL to avoid pickin
+      this.annotation = this.getAnnotationURL(css.substring(start, end))
+    }
+  }
+
+  loadFile(path) {
+    this.root = dirname(path)
+    if (existsSync(path)) {
+      this.mapFile = path
+      return readFileSync(path, 'utf-8').toString().trim()
+    }
+  }
+
+  loadMap(file, prev) {
+    if (prev === false) return false
+
+    if (prev) {
+      if (typeof prev === 'string') {
+        return prev
+      } else if (typeof prev === 'function') {
+        let prevPath = prev(file)
+        if (prevPath) {
+          let map = this.loadFile(prevPath)
+          if (!map) {
+            throw new Error(
+              'Unable to load previous source map: ' + prevPath.toString()
+            )
+          }
+          return map
+        }
+      } else if (prev instanceof SourceMapConsumer) {
+        return SourceMapGenerator.fromSourceMap(prev).toString()
+      } else if (prev instanceof SourceMapGenerator) {
+        return prev.toString()
+      } else if (this.isMap(prev)) {
+        return JSON.stringify(prev)
+      } else {
+        throw new Error(
+          'Unsupported previous source map format: ' + prev.toString()
+        )
+      }
+    } else if (this.inline) {
+      return this.decodeInline(this.annotation)
+    } else if (this.annotation) {
+      let map = this.annotation
+      if (file) map = join(dirname(file), map)
+      return this.loadFile(map)
+    }
+  }
+
+  startWith(string, start) {
+    if (!string) return false
+    return string.substr(0, start.length) === start
+  }
+
+  withContent() {
+    return !!(
+      this.consumer().sourcesContent &&
+      this.consumer().sourcesContent.length > 0
+    )
+  }
+}
+
+module.exports = PreviousMap
+PreviousMap.default = PreviousMap
+
+
+/***/ }),
+
+/***/ 5776:
+/***/ ((module) => {
+
+"use strict";
+
+
+class Warning {
+  constructor(text, opts = {}) {
+    this.type = 'warning'
+    this.text = text
+
+    if (opts.node && opts.node.source) {
+      let range = opts.node.rangeBy(opts)
+      this.line = range.start.line
+      this.column = range.start.column
+      this.endLine = range.end.line
+      this.endColumn = range.end.column
+    }
+
+    for (let opt in opts) this[opt] = opts[opt]
+  }
+
+  toString() {
+    if (this.node) {
+      return this.node.error(this.text, {
+        index: this.index,
+        plugin: this.plugin,
+        word: this.word
+      }).message
+    }
+
+    if (this.plugin) {
+      return this.plugin + ': ' + this.text
+    }
+
+    return this.text
+  }
+}
+
+module.exports = Warning
+Warning.default = Warning
+
+
+/***/ }),
+
+/***/ 5826:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+if (false) { var throwOnDirectAccess, ReactIs; } else {
+  // By explicitly using `prop-types` you are opting into new production behavior.
+  // http://fb.me/prop-types-in-prod
+  module.exports = __webpack_require__(628)();
+}
+
+
+/***/ }),
+
+/***/ 6109:
+/***/ ((module) => {
+
+// This code has been refactored for 140 bytes
+// You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js
+var computedStyle = function (el, prop, getComputedStyle) {
+  getComputedStyle = window.getComputedStyle;
+
+  // In one fell swoop
+  return (
+    // If we have getComputedStyle
+    getComputedStyle ?
+      // Query it
+      // TODO: From CSS-Query notes, we might need (node, null) for FF
+      getComputedStyle(el) :
+
+    // Otherwise, we are in IE and use currentStyle
+      el.currentStyle
+  )[
+    // Switch to camelCase for CSSOM
+    // DEV: Grabbed from jQuery
+    // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
+    // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
+    prop.replace(/-(\w)/gi, function (word, letter) {
+      return letter.toUpperCase();
+    })
+  ];
+};
+
+module.exports = computedStyle;
+
+
+/***/ }),
+
+/***/ 6589:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Node = __webpack_require__(7490)
+
+class Comment extends Node {
+  constructor(defaults) {
+    super(defaults)
+    this.type = 'comment'
+  }
+}
+
+module.exports = Comment
+Comment.default = Comment
+
+
+/***/ }),
+
+/***/ 7191:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+/**
+ * Copyright (c) 2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule normalizeWheel
+ * @typechecks
+ */
+
+
+
+var UserAgent_DEPRECATED = __webpack_require__(2213);
+
+var isEventSupported = __webpack_require__(1087);
+
+
+// Reasonable defaults
+var PIXEL_STEP  = 10;
+var LINE_HEIGHT = 40;
+var PAGE_HEIGHT = 800;
+
+/**
+ * Mouse wheel (and 2-finger trackpad) support on the web sucks.  It is
+ * complicated, thus this doc is long and (hopefully) detailed enough to answer
+ * your questions.
+ *
+ * If you need to react to the mouse wheel in a predictable way, this code is
+ * like your bestest friend. * hugs *
+ *
+ * As of today, there are 4 DOM event types you can listen to:
+ *
+ *   'wheel'                -- Chrome(31+), FF(17+), IE(9+)
+ *   'mousewheel'           -- Chrome, IE(6+), Opera, Safari
+ *   'MozMousePixelScroll'  -- FF(3.5 only!) (2010-2013) -- don't bother!
+ *   'DOMMouseScroll'       -- FF(0.9.7+) since 2003
+ *
+ * So what to do?  The is the best:
+ *
+ *   normalizeWheel.getEventType();
+ *
+ * In your event callback, use this code to get sane interpretation of the
+ * deltas.  This code will return an object with properties:
+ *
+ *   spinX   -- normalized spin speed (use for zoom) - x plane
+ *   spinY   -- " - y plane
+ *   pixelX  -- normalized distance (to pixels) - x plane
+ *   pixelY  -- " - y plane
+ *
+ * Wheel values are provided by the browser assuming you are using the wheel to
+ * scroll a web page by a number of lines or pixels (or pages).  Values can vary
+ * significantly on different platforms and browsers, forgetting that you can
+ * scroll at different speeds.  Some devices (like trackpads) emit more events
+ * at smaller increments with fine granularity, and some emit massive jumps with
+ * linear speed or acceleration.
+ *
+ * This code does its best to normalize the deltas for you:
+ *
+ *   - spin is trying to normalize how far the wheel was spun (or trackpad
+ *     dragged).  This is super useful for zoom support where you want to
+ *     throw away the chunky scroll steps on the PC and make those equal to
+ *     the slow and smooth tiny steps on the Mac. Key data: This code tries to
+ *     resolve a single slow step on a wheel to 1.
+ *
+ *   - pixel is normalizing the desired scroll delta in pixel units.  You'll
+ *     get the crazy differences between browsers, but at least it'll be in
+ *     pixels!
+ *
+ *   - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT.  This
+ *     should translate to positive value zooming IN, negative zooming OUT.
+ *     This matches the newer 'wheel' event.
+ *
+ * Why are there spinX, spinY (or pixels)?
+ *
+ *   - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn
+ *     with a mouse.  It results in side-scrolling in the browser by default.
+ *
+ *   - spinY is what you expect -- it's the classic axis of a mouse wheel.
+ *
+ *   - I dropped spinZ/pixelZ.  It is supported by the DOM 3 'wheel' event and
+ *     probably is by browsers in conjunction with fancy 3D controllers .. but
+ *     you know.
+ *
+ * Implementation info:
+ *
+ * Examples of 'wheel' event if you scroll slowly (down) by one step with an
+ * average mouse:
+ *
+ *   OS X + Chrome  (mouse)     -    4   pixel delta  (wheelDelta -120)
+ *   OS X + Safari  (mouse)     -  N/A   pixel delta  (wheelDelta  -12)
+ *   OS X + Firefox (mouse)     -    0.1 line  delta  (wheelDelta  N/A)
+ *   Win8 + Chrome  (mouse)     -  100   pixel delta  (wheelDelta -120)
+ *   Win8 + Firefox (mouse)     -    3   line  delta  (wheelDelta -120)
+ *
+ * On the trackpad:
+ *
+ *   OS X + Chrome  (trackpad)  -    2   pixel delta  (wheelDelta   -6)
+ *   OS X + Firefox (trackpad)  -    1   pixel delta  (wheelDelta  N/A)
+ *
+ * On other/older browsers.. it's more complicated as there can be multiple and
+ * also missing delta values.
+ *
+ * The 'wheel' event is more standard:
+ *
+ * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
+ *
+ * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and
+ * deltaX, deltaY and deltaZ.  Some browsers provide other values to maintain
+ * backward compatibility with older events.  Those other values help us
+ * better normalize spin speed.  Example of what the browsers provide:
+ *
+ *                          | event.wheelDelta | event.detail
+ *        ------------------+------------------+--------------
+ *          Safari v5/OS X  |       -120       |       0
+ *          Safari v5/Win7  |       -120       |       0
+ *         Chrome v17/OS X  |       -120       |       0
+ *         Chrome v17/Win7  |       -120       |       0
+ *                IE9/Win7  |       -120       |   undefined
+ *         Firefox v4/OS X  |     undefined    |       1
+ *         Firefox v4/Win7  |     undefined    |       3
+ *
+ */
+function normalizeWheel(/*object*/ event) /*object*/ {
+  var sX = 0, sY = 0,       // spinX, spinY
+      pX = 0, pY = 0;       // pixelX, pixelY
+
+  // Legacy
+  if ('detail'      in event) { sY = event.detail; }
+  if ('wheelDelta'  in event) { sY = -event.wheelDelta / 120; }
+  if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }
+  if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }
+
+  // side scrolling on FF with DOMMouseScroll
+  if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
+    sX = sY;
+    sY = 0;
+  }
+
+  pX = sX * PIXEL_STEP;
+  pY = sY * PIXEL_STEP;
+
+  if ('deltaY' in event) { pY = event.deltaY; }
+  if ('deltaX' in event) { pX = event.deltaX; }
+
+  if ((pX || pY) && event.deltaMode) {
+    if (event.deltaMode == 1) {          // delta in LINE units
+      pX *= LINE_HEIGHT;
+      pY *= LINE_HEIGHT;
+    } else {                             // delta in PAGE units
+      pX *= PAGE_HEIGHT;
+      pY *= PAGE_HEIGHT;
+    }
+  }
+
+  // Fall-back if spin cannot be determined
+  if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }
+  if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }
+
+  return { spinX  : sX,
+           spinY  : sY,
+           pixelX : pX,
+           pixelY : pY };
+}
+
+
+/**
+ * The best combination if you prefer spinX + spinY normalization.  It favors
+ * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with
+ * 'wheel' event, making spin speed determination impossible.
+ */
+normalizeWheel.getEventType = function() /*string*/ {
+  return (UserAgent_DEPRECATED.firefox())
+           ? 'DOMMouseScroll'
+           : (isEventSupported('wheel'))
+               ? 'wheel'
+               : 'mousewheel';
+};
+
+module.exports = normalizeWheel;
+
+
+/***/ }),
+
+/***/ 7374:
+/***/ ((module) => {
+
+"use strict";
+
+
+let list = {
+  comma(string) {
+    return list.split(string, [','], true)
+  },
+
+  space(string) {
+    let spaces = [' ', '\n', '\t']
+    return list.split(string, spaces)
+  },
+
+  split(string, separators, last) {
+    let array = []
+    let current = ''
+    let split = false
+
+    let func = 0
+    let inQuote = false
+    let prevQuote = ''
+    let escape = false
+
+    for (let letter of string) {
+      if (escape) {
+        escape = false
+      } else if (letter === '\\') {
+        escape = true
+      } else if (inQuote) {
+        if (letter === prevQuote) {
+          inQuote = false
+        }
+      } else if (letter === '"' || letter === "'") {
+        inQuote = true
+        prevQuote = letter
+      } else if (letter === '(') {
+        func += 1
+      } else if (letter === ')') {
+        if (func > 0) func -= 1
+      } else if (func === 0) {
+        if (separators.includes(letter)) split = true
+      }
+
+      if (split) {
+        if (current !== '') array.push(current.trim())
+        current = ''
+        split = false
+      } else {
+        current += letter
+      }
+    }
+
+    if (last || current !== '') array.push(current.trim())
+    return array
+  }
+}
+
+module.exports = list
+list.default = list
+
+
+/***/ }),
+
+/***/ 7490:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let CssSyntaxError = __webpack_require__(356)
+let Stringifier = __webpack_require__(346)
+let stringify = __webpack_require__(633)
+let { isClean, my } = __webpack_require__(1381)
+
+function cloneNode(obj, parent) {
+  let cloned = new obj.constructor()
+
+  for (let i in obj) {
+    if (!Object.prototype.hasOwnProperty.call(obj, i)) {
+      /* c8 ignore next 2 */
+      continue
+    }
+    if (i === 'proxyCache') continue
+    let value = obj[i]
+    let type = typeof value
+
+    if (i === 'parent' && type === 'object') {
+      if (parent) cloned[i] = parent
+    } else if (i === 'source') {
+      cloned[i] = value
+    } else if (Array.isArray(value)) {
+      cloned[i] = value.map(j => cloneNode(j, cloned))
+    } else {
+      if (type === 'object' && value !== null) value = cloneNode(value)
+      cloned[i] = value
+    }
+  }
+
+  return cloned
+}
+
+function sourceOffset(inputCSS, position) {
+  // Not all custom syntaxes support `offset` in `source.start` and `source.end`
+  if (
+    position &&
+    typeof position.offset !== 'undefined'
+  ) {
+    return position.offset;
+  }
+
+  let column = 1
+  let line = 1
+  let offset = 0
+
+  for (let i = 0; i < inputCSS.length; i++) {
+    if (line === position.line && column === position.column) {
+      offset = i
+      break
+    }
+
+    if (inputCSS[i] === '\n') {
+      column = 1
+      line += 1
+    } else {
+      column += 1
+    }
+  }
+
+  return offset
+}
+
+class Node {
+  get proxyOf() {
+    return this
+  }
+
+  constructor(defaults = {}) {
+    this.raws = {}
+    this[isClean] = false
+    this[my] = true
+
+    for (let name in defaults) {
+      if (name === 'nodes') {
+        this.nodes = []
+        for (let node of defaults[name]) {
+          if (typeof node.clone === 'function') {
+            this.append(node.clone())
+          } else {
+            this.append(node)
+          }
+        }
+      } else {
+        this[name] = defaults[name]
+      }
+    }
+  }
+
+  addToError(error) {
+    error.postcssNode = this
+    if (error.stack && this.source && /\n\s{4}at /.test(error.stack)) {
+      let s = this.source
+      error.stack = error.stack.replace(
+        /\n\s{4}at /,
+        `$&${s.input.from}:${s.start.line}:${s.start.column}$&`
+      )
+    }
+    return error
+  }
+
+  after(add) {
+    this.parent.insertAfter(this, add)
+    return this
+  }
+
+  assign(overrides = {}) {
+    for (let name in overrides) {
+      this[name] = overrides[name]
+    }
+    return this
+  }
+
+  before(add) {
+    this.parent.insertBefore(this, add)
+    return this
+  }
+
+  cleanRaws(keepBetween) {
+    delete this.raws.before
+    delete this.raws.after
+    if (!keepBetween) delete this.raws.between
+  }
+
+  clone(overrides = {}) {
+    let cloned = cloneNode(this)
+    for (let name in overrides) {
+      cloned[name] = overrides[name]
+    }
+    return cloned
+  }
+
+  cloneAfter(overrides = {}) {
+    let cloned = this.clone(overrides)
+    this.parent.insertAfter(this, cloned)
+    return cloned
+  }
+
+  cloneBefore(overrides = {}) {
+    let cloned = this.clone(overrides)
+    this.parent.insertBefore(this, cloned)
+    return cloned
+  }
+
+  error(message, opts = {}) {
+    if (this.source) {
+      let { end, start } = this.rangeBy(opts)
+      return this.source.input.error(
+        message,
+        { column: start.column, line: start.line },
+        { column: end.column, line: end.line },
+        opts
+      )
+    }
+    return new CssSyntaxError(message)
+  }
+
+  getProxyProcessor() {
+    return {
+      get(node, prop) {
+        if (prop === 'proxyOf') {
+          return node
+        } else if (prop === 'root') {
+          return () => node.root().toProxy()
+        } else {
+          return node[prop]
+        }
+      },
+
+      set(node, prop, value) {
+        if (node[prop] === value) return true
+        node[prop] = value
+        if (
+          prop === 'prop' ||
+          prop === 'value' ||
+          prop === 'name' ||
+          prop === 'params' ||
+          prop === 'important' ||
+          /* c8 ignore next */
+          prop === 'text'
+        ) {
+          node.markDirty()
+        }
+        return true
+      }
+    }
+  }
+
+  /* c8 ignore next 3 */
+  markClean() {
+    this[isClean] = true
+  }
+
+  markDirty() {
+    if (this[isClean]) {
+      this[isClean] = false
+      let next = this
+      while ((next = next.parent)) {
+        next[isClean] = false
+      }
+    }
+  }
+
+  next() {
+    if (!this.parent) return undefined
+    let index = this.parent.index(this)
+    return this.parent.nodes[index + 1]
+  }
+
+  positionBy(opts) {
+    let pos = this.source.start
+    if (opts.index) {
+      pos = this.positionInside(opts.index)
+    } else if (opts.word) {
+      let inputString = ('document' in this.source.input)
+        ? this.source.input.document
+        : this.source.input.css
+      let stringRepresentation = inputString.slice(
+        sourceOffset(inputString, this.source.start),
+        sourceOffset(inputString, this.source.end)
+      )
+      let index = stringRepresentation.indexOf(opts.word)
+      if (index !== -1) pos = this.positionInside(index)
+    }
+    return pos
+  }
+
+  positionInside(index) {
+    let column = this.source.start.column
+    let line = this.source.start.line
+    let inputString = ('document' in this.source.input)
+      ? this.source.input.document
+      : this.source.input.css
+    let offset = sourceOffset(inputString, this.source.start)
+    let end = offset + index
+
+    for (let i = offset; i < end; i++) {
+      if (inputString[i] === '\n') {
+        column = 1
+        line += 1
+      } else {
+        column += 1
+      }
+    }
+
+    return { column, line }
+  }
+
+  prev() {
+    if (!this.parent) return undefined
+    let index = this.parent.index(this)
+    return this.parent.nodes[index - 1]
+  }
+
+  rangeBy(opts) {
+    let start = {
+      column: this.source.start.column,
+      line: this.source.start.line
+    }
+    let end = this.source.end
+      ? {
+          column: this.source.end.column + 1,
+          line: this.source.end.line
+        }
+      : {
+          column: start.column + 1,
+          line: start.line
+        }
+
+    if (opts.word) {
+      let inputString = ('document' in this.source.input)
+        ? this.source.input.document
+        : this.source.input.css
+      let stringRepresentation = inputString.slice(
+        sourceOffset(inputString, this.source.start),
+        sourceOffset(inputString, this.source.end)
+      )
+      let index = stringRepresentation.indexOf(opts.word)
+      if (index !== -1) {
+        start = this.positionInside(index)
+        end = this.positionInside(
+          index + opts.word.length,
+        )
+      }
+    } else {
+      if (opts.start) {
+        start = {
+          column: opts.start.column,
+          line: opts.start.line
+        }
+      } else if (opts.index) {
+        start = this.positionInside(opts.index)
+      }
+
+      if (opts.end) {
+        end = {
+          column: opts.end.column,
+          line: opts.end.line
+        }
+      } else if (typeof opts.endIndex === 'number') {
+        end = this.positionInside(opts.endIndex)
+      } else if (opts.index) {
+        end = this.positionInside(opts.index + 1)
+      }
+    }
+
+    if (
+      end.line < start.line ||
+      (end.line === start.line && end.column <= start.column)
+    ) {
+      end = { column: start.column + 1, line: start.line }
+    }
+
+    return { end, start }
+  }
+
+  raw(prop, defaultType) {
+    let str = new Stringifier()
+    return str.raw(this, prop, defaultType)
+  }
+
+  remove() {
+    if (this.parent) {
+      this.parent.removeChild(this)
+    }
+    this.parent = undefined
+    return this
+  }
+
+  replaceWith(...nodes) {
+    if (this.parent) {
+      let bookmark = this
+      let foundSelf = false
+      for (let node of nodes) {
+        if (node === this) {
+          foundSelf = true
+        } else if (foundSelf) {
+          this.parent.insertAfter(bookmark, node)
+          bookmark = node
+        } else {
+          this.parent.insertBefore(bookmark, node)
+        }
+      }
+
+      if (!foundSelf) {
+        this.remove()
+      }
+    }
+
+    return this
+  }
+
+  root() {
+    let result = this
+    while (result.parent && result.parent.type !== 'document') {
+      result = result.parent
+    }
+    return result
+  }
+
+  toJSON(_, inputs) {
+    let fixed = {}
+    let emitInputs = inputs == null
+    inputs = inputs || new Map()
+    let inputsNextIndex = 0
+
+    for (let name in this) {
+      if (!Object.prototype.hasOwnProperty.call(this, name)) {
+        /* c8 ignore next 2 */
+        continue
+      }
+      if (name === 'parent' || name === 'proxyCache') continue
+      let value = this[name]
+
+      if (Array.isArray(value)) {
+        fixed[name] = value.map(i => {
+          if (typeof i === 'object' && i.toJSON) {
+            return i.toJSON(null, inputs)
+          } else {
+            return i
+          }
+        })
+      } else if (typeof value === 'object' && value.toJSON) {
+        fixed[name] = value.toJSON(null, inputs)
+      } else if (name === 'source') {
+        let inputId = inputs.get(value.input)
+        if (inputId == null) {
+          inputId = inputsNextIndex
+          inputs.set(value.input, inputsNextIndex)
+          inputsNextIndex++
+        }
+        fixed[name] = {
+          end: value.end,
+          inputId,
+          start: value.start
+        }
+      } else {
+        fixed[name] = value
+      }
+    }
+
+    if (emitInputs) {
+      fixed.inputs = [...inputs.keys()].map(input => input.toJSON())
+    }
+
+    return fixed
+  }
+
+  toProxy() {
+    if (!this.proxyCache) {
+      this.proxyCache = new Proxy(this, this.getProxyProcessor())
+    }
+    return this.proxyCache
+  }
+
+  toString(stringifier = stringify) {
+    if (stringifier.stringify) stringifier = stringifier.stringify
+    let result = ''
+    stringifier(this, i => {
+      result += i
+    })
+    return result
+  }
+
+  warn(result, text, opts) {
+    let data = { node: this }
+    for (let i in opts) data[i] = opts[i]
+    return result.warn(text, data)
+  }
+}
+
+module.exports = Node
+Node.default = Node
+
+
+/***/ }),
+
+/***/ 7520:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+module.exports = __webpack_require__(7191);
+
+
+/***/ }),
+
+/***/ 7661:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let MapGenerator = __webpack_require__(1670)
+let parse = __webpack_require__(4295)
+const Result = __webpack_require__(9055)
+let stringify = __webpack_require__(633)
+let warnOnce = __webpack_require__(3122)
+
+class NoWorkResult {
+  get content() {
+    return this.result.css
+  }
+
+  get css() {
+    return this.result.css
+  }
+
+  get map() {
+    return this.result.map
+  }
+
+  get messages() {
+    return []
+  }
+
+  get opts() {
+    return this.result.opts
+  }
+
+  get processor() {
+    return this.result.processor
+  }
+
+  get root() {
+    if (this._root) {
+      return this._root
+    }
+
+    let root
+    let parser = parse
+
+    try {
+      root = parser(this._css, this._opts)
+    } catch (error) {
+      this.error = error
+    }
+
+    if (this.error) {
+      throw this.error
+    } else {
+      this._root = root
+      return root
+    }
+  }
+
+  get [Symbol.toStringTag]() {
+    return 'NoWorkResult'
+  }
+
+  constructor(processor, css, opts) {
+    css = css.toString()
+    this.stringified = false
+
+    this._processor = processor
+    this._css = css
+    this._opts = opts
+    this._map = undefined
+    let root
+
+    let str = stringify
+    this.result = new Result(this._processor, root, this._opts)
+    this.result.css = css
+
+    let self = this
+    Object.defineProperty(this.result, 'root', {
+      get() {
+        return self.root
+      }
+    })
+
+    let map = new MapGenerator(str, root, this._opts, css)
+    if (map.isMap()) {
+      let [generatedCSS, generatedMap] = map.generate()
+      if (generatedCSS) {
+        this.result.css = generatedCSS
+      }
+      if (generatedMap) {
+        this.result.map = generatedMap
+      }
+    } else {
+      map.clearAnnotation()
+      this.result.css = map.css
+    }
+  }
+
+  async() {
+    if (this.error) return Promise.reject(this.error)
+    return Promise.resolve(this.result)
+  }
+
+  catch(onRejected) {
+    return this.async().catch(onRejected)
+  }
+
+  finally(onFinally) {
+    return this.async().then(onFinally, onFinally)
+  }
+
+  sync() {
+    if (this.error) throw this.error
+    return this.result
+  }
+
+  then(onFulfilled, onRejected) {
+    if (false) {}
+
+    return this.async().then(onFulfilled, onRejected)
+  }
+
+  toString() {
+    return this._css
+  }
+
+  warnings() {
+    return []
+  }
+}
+
+module.exports = NoWorkResult
+NoWorkResult.default = NoWorkResult
+
+
+/***/ }),
+
+/***/ 7734:
+/***/ ((module) => {
+
+"use strict";
+
+
+// do not edit .js files directly - edit src/index.jst
+
+
+  var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';
+
+
+module.exports = function equal(a, b) {
+  if (a === b) return true;
+
+  if (a && b && typeof a == 'object' && typeof b == 'object') {
+    if (a.constructor !== b.constructor) return false;
+
+    var length, i, keys;
+    if (Array.isArray(a)) {
+      length = a.length;
+      if (length != b.length) return false;
+      for (i = length; i-- !== 0;)
+        if (!equal(a[i], b[i])) return false;
+      return true;
+    }
+
+
+    if ((a instanceof Map) && (b instanceof Map)) {
+      if (a.size !== b.size) return false;
+      for (i of a.entries())
+        if (!b.has(i[0])) return false;
+      for (i of a.entries())
+        if (!equal(i[1], b.get(i[0]))) return false;
+      return true;
+    }
+
+    if ((a instanceof Set) && (b instanceof Set)) {
+      if (a.size !== b.size) return false;
+      for (i of a.entries())
+        if (!b.has(i[0])) return false;
+      return true;
+    }
+
+    if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
+      length = a.length;
+      if (length != b.length) return false;
+      for (i = length; i-- !== 0;)
+        if (a[i] !== b[i]) return false;
+      return true;
+    }
+
+
+    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
+    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
+    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
+
+    keys = Object.keys(a);
+    length = keys.length;
+    if (length !== Object.keys(b).length) return false;
+
+    for (i = length; i-- !== 0;)
+      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
+
+    for (i = length; i-- !== 0;) {
+      var key = keys[i];
+
+      if (!equal(a[key], b[key])) return false;
+    }
+
+    return true;
+  }
+
+  // true if both NaN, false otherwise
+  return a!==a && b!==b;
+};
+
+
+/***/ }),
+
+/***/ 8021:
 /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
 "use strict";
 var __webpack_unused_export__;
-
-__webpack_unused_export__ = true;
-var TextareaAutosize_1 = __webpack_require__(4462);
-exports.A = TextareaAutosize_1.TextareaAutosize;
+/*istanbul ignore start*/
+
+
+__webpack_unused_export__ = ({
+  value: true
+});
+exports.JJ = diffChars;
+__webpack_unused_export__ = void 0;
+
+/*istanbul ignore end*/
+var
+/*istanbul ignore start*/
+_base = _interopRequireDefault(__webpack_require__(5417))
+/*istanbul ignore end*/
+;
+
+/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/*istanbul ignore end*/
+var characterDiff = new
+/*istanbul ignore start*/
+_base
+/*istanbul ignore end*/
+.
+/*istanbul ignore start*/
+default
+/*istanbul ignore end*/
+();
+
+/*istanbul ignore start*/
+__webpack_unused_export__ = characterDiff;
+
+/*istanbul ignore end*/
+function diffChars(oldStr, newStr, options) {
+  return characterDiff.diff(oldStr, newStr, options);
+}
+
+
+/***/ }),
+
+/***/ 8202:
+/***/ ((module) => {
+
+"use strict";
+/**
+ * Copyright (c) 2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ * @providesModule ExecutionEnvironment
+ */
+
+/*jslint evil: true */
+
+
+
+var canUseDOM = !!(
+  typeof window !== 'undefined' &&
+  window.document &&
+  window.document.createElement
+);
+
+/**
+ * Simple, lightweight module assisting with the detection and context of
+ * Worker. Helps avoid circular dependencies and allows code to reason about
+ * whether or not they are in a Worker, even if they never include the main
+ * `ReactWorker` dependency.
+ */
+var ExecutionEnvironment = {
+
+  canUseDOM: canUseDOM,
+
+  canUseWorkers: typeof Worker !== 'undefined',
+
+  canUseEventListeners:
+    canUseDOM && !!(window.addEventListener || window.attachEvent),
+
+  canUseViewport: canUseDOM && !!window.screen,
+
+  isInWorker: !canUseDOM // For now, this is true - might change in the future.
+
+};
+
+module.exports = ExecutionEnvironment;
+
+
+/***/ }),
+
+/***/ 8491:
+/***/ ((module) => {
+
+var openParentheses = "(".charCodeAt(0);
+var closeParentheses = ")".charCodeAt(0);
+var singleQuote = "'".charCodeAt(0);
+var doubleQuote = '"'.charCodeAt(0);
+var backslash = "\\".charCodeAt(0);
+var slash = "/".charCodeAt(0);
+var comma = ",".charCodeAt(0);
+var colon = ":".charCodeAt(0);
+var star = "*".charCodeAt(0);
+var uLower = "u".charCodeAt(0);
+var uUpper = "U".charCodeAt(0);
+var plus = "+".charCodeAt(0);
+var isUnicodeRange = /^[a-f0-9?-]+$/i;
+
+module.exports = function(input) {
+  var tokens = [];
+  var value = input;
+
+  var next,
+    quote,
+    prev,
+    token,
+    escape,
+    escapePos,
+    whitespacePos,
+    parenthesesOpenPos;
+  var pos = 0;
+  var code = value.charCodeAt(pos);
+  var max = value.length;
+  var stack = [{ nodes: tokens }];
+  var balanced = 0;
+  var parent;
+
+  var name = "";
+  var before = "";
+  var after = "";
+
+  while (pos < max) {
+    // Whitespaces
+    if (code <= 32) {
+      next = pos;
+      do {
+        next += 1;
+        code = value.charCodeAt(next);
+      } while (code <= 32);
+      token = value.slice(pos, next);
+
+      prev = tokens[tokens.length - 1];
+      if (code === closeParentheses && balanced) {
+        after = token;
+      } else if (prev && prev.type === "div") {
+        prev.after = token;
+        prev.sourceEndIndex += token.length;
+      } else if (
+        code === comma ||
+        code === colon ||
+        (code === slash &&
+          value.charCodeAt(next + 1) !== star &&
+          (!parent ||
+            (parent && parent.type === "function" && parent.value !== "calc")))
+      ) {
+        before = token;
+      } else {
+        tokens.push({
+          type: "space",
+          sourceIndex: pos,
+          sourceEndIndex: next,
+          value: token
+        });
+      }
+
+      pos = next;
+
+      // Quotes
+    } else if (code === singleQuote || code === doubleQuote) {
+      next = pos;
+      quote = code === singleQuote ? "'" : '"';
+      token = {
+        type: "string",
+        sourceIndex: pos,
+        quote: quote
+      };
+      do {
+        escape = false;
+        next = value.indexOf(quote, next + 1);
+        if (~next) {
+          escapePos = next;
+          while (value.charCodeAt(escapePos - 1) === backslash) {
+            escapePos -= 1;
+            escape = !escape;
+          }
+        } else {
+          value += quote;
+          next = value.length - 1;
+          token.unclosed = true;
+        }
+      } while (escape);
+      token.value = value.slice(pos + 1, next);
+      token.sourceEndIndex = token.unclosed ? next : next + 1;
+      tokens.push(token);
+      pos = next + 1;
+      code = value.charCodeAt(pos);
+
+      // Comments
+    } else if (code === slash && value.charCodeAt(pos + 1) === star) {
+      next = value.indexOf("*/", pos);
+
+      token = {
+        type: "comment",
+        sourceIndex: pos,
+        sourceEndIndex: next + 2
+      };
+
+      if (next === -1) {
+        token.unclosed = true;
+        next = value.length;
+        token.sourceEndIndex = next;
+      }
+
+      token.value = value.slice(pos + 2, next);
+      tokens.push(token);
+
+      pos = next + 2;
+      code = value.charCodeAt(pos);
+
+      // Operation within calc
+    } else if (
+      (code === slash || code === star) &&
+      parent &&
+      parent.type === "function" &&
+      parent.value === "calc"
+    ) {
+      token = value[pos];
+      tokens.push({
+        type: "word",
+        sourceIndex: pos - before.length,
+        sourceEndIndex: pos + token.length,
+        value: token
+      });
+      pos += 1;
+      code = value.charCodeAt(pos);
+
+      // Dividers
+    } else if (code === slash || code === comma || code === colon) {
+      token = value[pos];
+
+      tokens.push({
+        type: "div",
+        sourceIndex: pos - before.length,
+        sourceEndIndex: pos + token.length,
+        value: token,
+        before: before,
+        after: ""
+      });
+      before = "";
+
+      pos += 1;
+      code = value.charCodeAt(pos);
+
+      // Open parentheses
+    } else if (openParentheses === code) {
+      // Whitespaces after open parentheses
+      next = pos;
+      do {
+        next += 1;
+        code = value.charCodeAt(next);
+      } while (code <= 32);
+      parenthesesOpenPos = pos;
+      token = {
+        type: "function",
+        sourceIndex: pos - name.length,
+        value: name,
+        before: value.slice(parenthesesOpenPos + 1, next)
+      };
+      pos = next;
+
+      if (name === "url" && code !== singleQuote && code !== doubleQuote) {
+        next -= 1;
+        do {
+          escape = false;
+          next = value.indexOf(")", next + 1);
+          if (~next) {
+            escapePos = next;
+            while (value.charCodeAt(escapePos - 1) === backslash) {
+              escapePos -= 1;
+              escape = !escape;
+            }
+          } else {
+            value += ")";
+            next = value.length - 1;
+            token.unclosed = true;
+          }
+        } while (escape);
+        // Whitespaces before closed
+        whitespacePos = next;
+        do {
+          whitespacePos -= 1;
+          code = value.charCodeAt(whitespacePos);
+        } while (code <= 32);
+        if (parenthesesOpenPos < whitespacePos) {
+          if (pos !== whitespacePos + 1) {
+            token.nodes = [
+              {
+                type: "word",
+                sourceIndex: pos,
+                sourceEndIndex: whitespacePos + 1,
+                value: value.slice(pos, whitespacePos + 1)
+              }
+            ];
+          } else {
+            token.nodes = [];
+          }
+          if (token.unclosed && whitespacePos + 1 !== next) {
+            token.after = "";
+            token.nodes.push({
+              type: "space",
+              sourceIndex: whitespacePos + 1,
+              sourceEndIndex: next,
+              value: value.slice(whitespacePos + 1, next)
+            });
+          } else {
+            token.after = value.slice(whitespacePos + 1, next);
+            token.sourceEndIndex = next;
+          }
+        } else {
+          token.after = "";
+          token.nodes = [];
+        }
+        pos = next + 1;
+        token.sourceEndIndex = token.unclosed ? next : pos;
+        code = value.charCodeAt(pos);
+        tokens.push(token);
+      } else {
+        balanced += 1;
+        token.after = "";
+        token.sourceEndIndex = pos + 1;
+        tokens.push(token);
+        stack.push(token);
+        tokens = token.nodes = [];
+        parent = token;
+      }
+      name = "";
+
+      // Close parentheses
+    } else if (closeParentheses === code && balanced) {
+      pos += 1;
+      code = value.charCodeAt(pos);
+
+      parent.after = after;
+      parent.sourceEndIndex += after.length;
+      after = "";
+      balanced -= 1;
+      stack[stack.length - 1].sourceEndIndex = pos;
+      stack.pop();
+      parent = stack[balanced];
+      tokens = parent.nodes;
+
+      // Words
+    } else {
+      next = pos;
+      do {
+        if (code === backslash) {
+          next += 1;
+        }
+        next += 1;
+        code = value.charCodeAt(next);
+      } while (
+        next < max &&
+        !(
+          code <= 32 ||
+          code === singleQuote ||
+          code === doubleQuote ||
+          code === comma ||
+          code === colon ||
+          code === slash ||
+          code === openParentheses ||
+          (code === star &&
+            parent &&
+            parent.type === "function" &&
+            parent.value === "calc") ||
+          (code === slash &&
+            parent.type === "function" &&
+            parent.value === "calc") ||
+          (code === closeParentheses && balanced)
+        )
+      );
+      token = value.slice(pos, next);
+
+      if (openParentheses === code) {
+        name = token;
+      } else if (
+        (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
+        plus === token.charCodeAt(1) &&
+        isUnicodeRange.test(token.slice(2))
+      ) {
+        tokens.push({
+          type: "unicode-range",
+          sourceIndex: pos,
+          sourceEndIndex: next,
+          value: token
+        });
+      } else {
+        tokens.push({
+          type: "word",
+          sourceIndex: pos,
+          sourceEndIndex: next,
+          value: token
+        });
+      }
+
+      pos = next;
+    }
+  }
+
+  for (pos = stack.length - 1; pos; pos -= 1) {
+    stack[pos].unclosed = true;
+    stack[pos].sourceEndIndex = value.length;
+  }
+
+  return stack[0].nodes;
+};
+
+
+/***/ }),
+
+/***/ 9055:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Warning = __webpack_require__(5776)
+
+class Result {
+  get content() {
+    return this.css
+  }
+
+  constructor(processor, root, opts) {
+    this.processor = processor
+    this.messages = []
+    this.root = root
+    this.opts = opts
+    this.css = undefined
+    this.map = undefined
+  }
+
+  toString() {
+    return this.css
+  }
+
+  warn(text, opts = {}) {
+    if (!opts.plugin) {
+      if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
+        opts.plugin = this.lastPlugin.postcssPlugin
+      }
+    }
+
+    let warning = new Warning(text, opts)
+    this.messages.push(warning)
+
+    return warning
+  }
+
+  warnings() {
+    return this.messages.filter(i => i.type === 'warning')
+  }
+}
+
+module.exports = Result
+Result.default = Result
+
+
+/***/ }),
+
+/***/ 9434:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Container = __webpack_require__(683)
+
+let LazyResult, Processor
+
+class Root extends Container {
+  constructor(defaults) {
+    super(defaults)
+    this.type = 'root'
+    if (!this.nodes) this.nodes = []
+  }
+
+  normalize(child, sample, type) {
+    let nodes = super.normalize(child)
+
+    if (sample) {
+      if (type === 'prepend') {
+        if (this.nodes.length > 1) {
+          sample.raws.before = this.nodes[1].raws.before
+        } else {
+          delete sample.raws.before
+        }
+      } else if (this.first !== sample) {
+        for (let node of nodes) {
+          node.raws.before = sample.raws.before
+        }
+      }
+    }
+
+    return nodes
+  }
+
+  removeChild(child, ignore) {
+    let index = this.index(child)
+
+    if (!ignore && index === 0 && this.nodes.length > 1) {
+      this.nodes[1].raws.before = this.nodes[index].raws.before
+    }
+
+    return super.removeChild(child)
+  }
+
+  toResult(opts = {}) {
+    let lazy = new LazyResult(new Processor(), this, opts)
+    return lazy.stringify()
+  }
+}
+
+Root.registerLazyResult = dependant => {
+  LazyResult = dependant
+}
+
+Root.registerProcessor = dependant => {
+  Processor = dependant
+}
+
+module.exports = Root
+Root.default = Root
+
+Container.registerRoot(Root)
+
+
+/***/ }),
+
+/***/ 9656:
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+
+
+let Document = __webpack_require__(271)
+let LazyResult = __webpack_require__(448)
+let NoWorkResult = __webpack_require__(7661)
+let Root = __webpack_require__(9434)
+
+class Processor {
+  constructor(plugins = []) {
+    this.version = '8.5.3'
+    this.plugins = this.normalize(plugins)
+  }
+
+  normalize(plugins) {
+    let normalized = []
+    for (let i of plugins) {
+      if (i.postcss === true) {
+        i = i()
+      } else if (i.postcss) {
+        i = i.postcss
+      }
+
+      if (typeof i === 'object' && Array.isArray(i.plugins)) {
+        normalized = normalized.concat(i.plugins)
+      } else if (typeof i === 'object' && i.postcssPlugin) {
+        normalized.push(i)
+      } else if (typeof i === 'function') {
+        normalized.push(i)
+      } else if (typeof i === 'object' && (i.parse || i.stringify)) {
+        if (false) {}
+      } else {
+        throw new Error(i + ' is not a PostCSS plugin')
+      }
+    }
+    return normalized
+  }
+
+  process(css, opts = {}) {
+    if (
+      !this.plugins.length &&
+      !opts.parser &&
+      !opts.stringifier &&
+      !opts.syntax
+    ) {
+      return new NoWorkResult(this, css, opts)
+    } else {
+      return new LazyResult(this, css, opts)
+    }
+  }
+
+  use(plugin) {
+    this.plugins = this.plugins.concat(this.normalize([plugin]))
+    return this
+  }
+}
+
+module.exports = Processor
+Processor.default = Processor
+
+Root.registerProcessor(Processor)
+Document.registerProcessor(Processor)
 
 
 /***/ }),
@@ -7585,14 +7361,6 @@
 
 /***/ }),
 
-/***/ 1609:
-/***/ ((module) => {
-
-"use strict";
-module.exports = window["React"];
-
-/***/ }),
-
 /***/ 9746:
 /***/ (() => {
 
@@ -7605,55 +7373,6 @@
 
 /* (ignored) */
 
-/***/ }),
-
-/***/ 197:
-/***/ (() => {
-
-/* (ignored) */
-
-/***/ }),
-
-/***/ 1866:
-/***/ (() => {
-
-/* (ignored) */
-
-/***/ }),
-
-/***/ 2739:
-/***/ (() => {
-
-/* (ignored) */
-
-/***/ }),
-
-/***/ 5042:
-/***/ ((module) => {
-
-let urlAlphabet =
-  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
-let customAlphabet = (alphabet, defaultSize = 21) => {
-  return (size = defaultSize) => {
-    let id = ''
-    let i = size
-    while (i--) {
-      id += alphabet[(Math.random() * alphabet.length) | 0]
-    }
-    return id
-  }
-}
-let nanoid = (size = 21) => {
-  let id = ''
-  let i = size
-  while (i--) {
-    id += urlAlphabet[(Math.random() * 64) | 0]
-  }
-  return id
-}
-module.exports = { nanoid, customAlphabet }
-
-
 /***/ })
 
 /******/ 	});
@@ -7725,7 +7444,7 @@
 /******/ 	
 /************************************************************************/
 var __webpack_exports__ = {};
-// This entry need to be wrapped in an IIFE because it need to be in strict mode.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
 (() => {
 "use strict";
 // ESM COMPAT FLAG
@@ -7745,7 +7464,7 @@
   BlockControls: () => (/* reexport */ block_controls),
   BlockEdit: () => (/* reexport */ BlockEdit),
   BlockEditorKeyboardShortcuts: () => (/* reexport */ keyboard_shortcuts),
-  BlockEditorProvider: () => (/* reexport */ provider),
+  BlockEditorProvider: () => (/* reexport */ components_provider),
   BlockFormatControls: () => (/* reexport */ BlockFormatControls),
   BlockIcon: () => (/* reexport */ block_icon),
   BlockInspector: () => (/* reexport */ block_inspector),
@@ -7780,6 +7499,7 @@
   JustifyContentControl: () => (/* reexport */ JustifyContentControl),
   JustifyToolbar: () => (/* reexport */ JustifyToolbar),
   LineHeightControl: () => (/* reexport */ line_height_control),
+  LinkControl: () => (/* reexport */ link_control),
   MediaPlaceholder: () => (/* reexport */ media_placeholder),
   MediaReplaceFlow: () => (/* reexport */ media_replace_flow),
   MediaUpload: () => (/* reexport */ media_upload),
@@ -7790,7 +7510,6 @@
   PanelColorSettings: () => (/* reexport */ panel_color_settings),
   PlainText: () => (/* reexport */ plain_text),
   RecursionProvider: () => (/* reexport */ RecursionProvider),
-  ReusableBlocksRenameHint: () => (/* reexport */ ReusableBlocksRenameHint),
   RichText: () => (/* reexport */ rich_text),
   RichTextShortcut: () => (/* reexport */ RichTextShortcut),
   RichTextToolbarButton: () => (/* reexport */ RichTextToolbarButton),
@@ -7830,10 +7549,10 @@
   __experimentalInspectorPopoverHeader: () => (/* reexport */ InspectorPopoverHeader),
   __experimentalLetterSpacingControl: () => (/* reexport */ LetterSpacingControl),
   __experimentalLibrary: () => (/* reexport */ library),
-  __experimentalLinkControl: () => (/* reexport */ link_control),
-  __experimentalLinkControlSearchInput: () => (/* reexport */ search_input),
-  __experimentalLinkControlSearchItem: () => (/* reexport */ search_item),
-  __experimentalLinkControlSearchResults: () => (/* reexport */ LinkControlSearchResults),
+  __experimentalLinkControl: () => (/* reexport */ DeprecatedExperimentalLinkControl),
+  __experimentalLinkControlSearchInput: () => (/* reexport */ __experimentalLinkControlSearchInput),
+  __experimentalLinkControlSearchItem: () => (/* reexport */ __experimentalLinkControlSearchItem),
+  __experimentalLinkControlSearchResults: () => (/* reexport */ __experimentalLinkControlSearchResults),
   __experimentalListView: () => (/* reexport */ components_list_view),
   __experimentalPanelColorGradientSettings: () => (/* reexport */ panel_color_gradient_settings),
   __experimentalPreviewOptions: () => (/* reexport */ PreviewOptions),
@@ -7885,6 +7604,7 @@
   store: () => (/* reexport */ store),
   storeConfig: () => (/* reexport */ storeConfig),
   transformStyles: () => (/* reexport */ transform_styles),
+  useBlockBindingsUtils: () => (/* reexport */ useBlockBindingsUtils),
   useBlockCommands: () => (/* reexport */ useBlockCommands),
   useBlockDisplayInformation: () => (/* reexport */ useBlockDisplayInformation),
   useBlockEditContext: () => (/* reexport */ useBlockEditContext),
@@ -7895,7 +7615,7 @@
   useInnerBlocksProps: () => (/* reexport */ useInnerBlocksProps),
   useSetting: () => (/* reexport */ useSetting),
   useSettings: () => (/* reexport */ use_settings_useSettings),
-  useZoomOut: () => (/* reexport */ useZoomOut),
+  useStyleOverride: () => (/* reexport */ useStyleOverride),
   withColorContext: () => (/* reexport */ with_color_context),
   withColors: () => (/* reexport */ withColors),
   withFontSizes: () => (/* reexport */ with_font_sizes)
@@ -7908,27 +7628,35 @@
   getAllPatterns: () => (getAllPatterns),
   getBlockRemovalRules: () => (getBlockRemovalRules),
   getBlockSettings: () => (getBlockSettings),
+  getBlockStyles: () => (getBlockStyles),
   getBlockWithoutAttributes: () => (getBlockWithoutAttributes),
+  getClosestAllowedInsertionPoint: () => (getClosestAllowedInsertionPoint),
+  getClosestAllowedInsertionPointForPattern: () => (getClosestAllowedInsertionPointForPattern),
   getContentLockingParent: () => (getContentLockingParent),
   getEnabledBlockParents: () => (getEnabledBlockParents),
   getEnabledClientIdsTree: () => (getEnabledClientIdsTree),
   getExpandedBlock: () => (getExpandedBlock),
   getInserterMediaCategories: () => (getInserterMediaCategories),
+  getInsertionPoint: () => (getInsertionPoint),
   getLastFocus: () => (getLastFocus),
   getLastInsertedBlocksClientIds: () => (getLastInsertedBlocksClientIds),
   getOpenedBlockSettingsMenu: () => (getOpenedBlockSettingsMenu),
+  getParentSectionBlock: () => (getParentSectionBlock),
   getPatternBySlug: () => (getPatternBySlug),
   getRegisteredInserterMediaCategories: () => (getRegisteredInserterMediaCategories),
   getRemovalPromptData: () => (getRemovalPromptData),
   getReusableBlocks: () => (getReusableBlocks),
+  getSectionRootClientId: () => (getSectionRootClientId),
   getStyleOverrides: () => (getStyleOverrides),
   getTemporarilyEditingAsBlocks: () => (getTemporarilyEditingAsBlocks),
   getTemporarilyEditingFocusModeToRevert: () => (getTemporarilyEditingFocusModeToRevert),
+  getZoomLevel: () => (getZoomLevel),
   hasAllowedPatterns: () => (hasAllowedPatterns),
   isBlockInterfaceHidden: () => (private_selectors_isBlockInterfaceHidden),
   isBlockSubtreeDisabled: () => (isBlockSubtreeDisabled),
   isDragging: () => (private_selectors_isDragging),
-  isResolvingPatterns: () => (isResolvingPatterns)
+  isSectionBlock: () => (isSectionBlock),
+  isZoomOut: () => (isZoomOut)
 });
 
 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-editor/build-module/store/selectors.js
@@ -8001,6 +7729,7 @@
   getDraggedBlockClientIds: () => (getDraggedBlockClientIds),
   getFirstMultiSelectedBlockClientId: () => (getFirstMultiSelectedBlockClientId),
   getGlobalBlockCount: () => (getGlobalBlockCount),
+  getHoveredBlockClientId: () => (getHoveredBlockClientId),
   getInserterItems: () => (getInserterItems),
   getLastMultiSelectedBlockClientId: () => (getLastMultiSelectedBlockClientId),
   getLowestCommonAncestorWithSelectedBlock: () => (getLowestCommonAncestorWithSelectedBlock),
@@ -8021,7 +7750,7 @@
   getSettings: () => (getSettings),
   getTemplate: () => (getTemplate),
   getTemplateLock: () => (getTemplateLock),
-  hasBlockMovingClientId: () => (selectors_hasBlockMovingClientId),
+  hasBlockMovingClientId: () => (hasBlockMovingClientId),
   hasDraggedInnerBlock: () => (hasDraggedInnerBlock),
   hasInserterItems: () => (hasInserterItems),
   hasMultiSelection: () => (hasMultiSelection),
@@ -8063,15 +7792,17 @@
   hideBlockInterface: () => (hideBlockInterface),
   modifyContentLockBlock: () => (modifyContentLockBlock),
   privateRemoveBlocks: () => (privateRemoveBlocks),
+  resetZoomLevel: () => (resetZoomLevel),
   setBlockRemovalRules: () => (setBlockRemovalRules),
+  setInsertionPoint: () => (setInsertionPoint),
   setLastFocus: () => (setLastFocus),
   setOpenedBlockSettingsMenu: () => (setOpenedBlockSettingsMenu),
   setStyleOverride: () => (setStyleOverride),
+  setZoomLevel: () => (setZoomLevel),
   showBlockInterface: () => (showBlockInterface),
   startDragging: () => (startDragging),
   stopDragging: () => (stopDragging),
-  stopEditingAsBlocks: () => (stopEditingAsBlocks),
-  syncDerivedUpdates: () => (syncDerivedUpdates)
+  stopEditingAsBlocks: () => (stopEditingAsBlocks)
 });
 
 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-editor/build-module/store/actions.js
@@ -8093,6 +7824,7 @@
   exitFormattedText: () => (exitFormattedText),
   flashBlock: () => (flashBlock),
   hideInsertionPoint: () => (hideInsertionPoint),
+  hoverBlock: () => (hoverBlock),
   insertAfterBlock: () => (insertAfterBlock),
   insertBeforeBlock: () => (insertBeforeBlock),
   insertBlock: () => (insertBlock),
@@ -8142,12 +7874,60 @@
   validateBlocksToTemplate: () => (validateBlocksToTemplate)
 });
 
+// NAMESPACE OBJECT: ./node_modules/@wordpress/upload-media/build-module/store/selectors.js
+var store_selectors_namespaceObject = {};
+__webpack_require__.r(store_selectors_namespaceObject);
+__webpack_require__.d(store_selectors_namespaceObject, {
+  getItems: () => (getItems),
+  getSettings: () => (selectors_getSettings),
+  isUploading: () => (isUploading),
+  isUploadingById: () => (isUploadingById),
+  isUploadingByUrl: () => (isUploadingByUrl)
+});
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/upload-media/build-module/store/private-selectors.js
+var store_private_selectors_namespaceObject = {};
+__webpack_require__.r(store_private_selectors_namespaceObject);
+__webpack_require__.d(store_private_selectors_namespaceObject, {
+  getAllItems: () => (getAllItems),
+  getBlobUrls: () => (getBlobUrls),
+  getItem: () => (getItem),
+  getPausedUploadForPost: () => (getPausedUploadForPost),
+  isBatchUploaded: () => (isBatchUploaded),
+  isPaused: () => (isPaused),
+  isUploadingToPost: () => (isUploadingToPost)
+});
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/upload-media/build-module/store/actions.js
+var store_actions_namespaceObject = {};
+__webpack_require__.r(store_actions_namespaceObject);
+__webpack_require__.d(store_actions_namespaceObject, {
+  addItems: () => (addItems),
+  cancelItem: () => (cancelItem)
+});
+
+// NAMESPACE OBJECT: ./node_modules/@wordpress/upload-media/build-module/store/private-actions.js
+var store_private_actions_namespaceObject = {};
+__webpack_require__.r(store_private_actions_namespaceObject);
+__webpack_require__.d(store_private_actions_namespaceObject, {
+  addItem: () => (addItem),
+  finishOperation: () => (finishOperation),
+  pauseQueue: () => (pauseQueue),
+  prepareItem: () => (prepareItem),
+  processItem: () => (processItem),
+  removeItem: () => (removeItem),
+  resumeQueue: () => (resumeQueue),
+  revokeBlobUrls: () => (revokeBlobUrls),
+  updateSettings: () => (private_actions_updateSettings),
+  uploadItem: () => (uploadItem)
+});
+
 // NAMESPACE OBJECT: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/index.js
 var global_styles_namespaceObject = {};
 __webpack_require__.r(global_styles_namespaceObject);
 __webpack_require__.d(global_styles_namespaceObject, {
   AdvancedPanel: () => (AdvancedPanel),
-  BackgroundPanel: () => (BackgroundPanel),
+  BackgroundPanel: () => (background_panel_BackgroundImagePanel),
   BorderPanel: () => (BorderPanel),
   ColorPanel: () => (ColorPanel),
   DimensionsPanel: () => (DimensionsPanel),
@@ -8163,7 +7943,6 @@
   toStyles: () => (toStyles),
   useGlobalSetting: () => (useGlobalSetting),
   useGlobalStyle: () => (useGlobalStyle),
-  useGlobalStyleLinks: () => (useGlobalStyleLinks),
   useGlobalStylesOutput: () => (useGlobalStylesOutput),
   useGlobalStylesOutputWithConfig: () => (useGlobalStylesOutputWithConfig),
   useGlobalStylesReset: () => (useGlobalStylesReset),
@@ -8178,17 +7957,17 @@
   useSettingsForBlockElement: () => (useSettingsForBlockElement)
 });
 
-;// CONCATENATED MODULE: external ["wp","blocks"]
+;// external ["wp","blocks"]
 const external_wp_blocks_namespaceObject = window["wp"]["blocks"];
-;// CONCATENATED MODULE: external ["wp","element"]
+;// external ["wp","element"]
 const external_wp_element_namespaceObject = window["wp"]["element"];
-;// CONCATENATED MODULE: external ["wp","data"]
+;// external ["wp","data"]
 const external_wp_data_namespaceObject = window["wp"]["data"];
-;// CONCATENATED MODULE: external ["wp","compose"]
+;// external ["wp","compose"]
 const external_wp_compose_namespaceObject = window["wp"]["compose"];
-;// CONCATENATED MODULE: external ["wp","hooks"]
+;// external ["wp","hooks"]
 const external_wp_hooks_namespaceObject = window["wp"]["hooks"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-edit/context.js
 /**
  * WordPress dependencies
  */
@@ -8217,15 +7996,15 @@
   return (0,external_wp_element_namespaceObject.useContext)(Context);
 }
 
-;// CONCATENATED MODULE: external ["wp","deprecated"]
+;// external ["wp","deprecated"]
 const external_wp_deprecated_namespaceObject = window["wp"]["deprecated"];
 var external_wp_deprecated_default = /*#__PURE__*/__webpack_require__.n(external_wp_deprecated_namespaceObject);
 // EXTERNAL MODULE: ./node_modules/fast-deep-equal/es6/index.js
 var es6 = __webpack_require__(7734);
 var es6_default = /*#__PURE__*/__webpack_require__.n(es6);
-;// CONCATENATED MODULE: external ["wp","i18n"]
+;// external ["wp","i18n"]
 const external_wp_i18n_namespaceObject = window["wp"]["i18n"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/defaults.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/defaults.js
 /**
  * WordPress dependencies
  */
@@ -8260,7 +8039,6 @@
  * @property {boolean}       __experimentalBlockDirectory           Whether the user has enabled the Block Directory
  * @property {Array}         __experimentalBlockPatterns            Array of objects representing the block patterns
  * @property {Array}         __experimentalBlockPatternCategories   Array of objects representing the block pattern categories
- * @property {boolean}       __unstableGalleryWithImageBlocks       Whether the user has enabled the refactored gallery block which uses InnerBlocks
  */
 const SETTINGS_DEFAULTS = {
   alignWide: false,
@@ -8375,8 +8153,7 @@
   __mobileEnablePageTemplates: false,
   __experimentalBlockPatterns: [],
   __experimentalBlockPatternCategories: [],
-  __unstableGalleryWithImageBlocks: false,
-  __unstableIsPreviewMode: false,
+  isPreviewMode: false,
   // These settings will be completely revamped in the future.
   // The goal is to evolve this into an API which will instruct
   // the block inspector to animate transitions between what it
@@ -8474,7 +8251,7 @@
   }
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/array.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/array.js
 /**
  * Insert one or multiple elements into a given position of an array.
  *
@@ -8504,23 +8281,49 @@
   return insertAt(withoutMovedElements, array.slice(from, from + count), to);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/reducer.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/store/private-keys.js
+const globalStylesDataKey = Symbol('globalStylesDataKey');
+const globalStylesLinksDataKey = Symbol('globalStylesLinks');
+const selectBlockPatternsKey = Symbol('selectBlockPatternsKey');
+const reusableBlocksSelectKey = Symbol('reusableBlocksSelect');
+const sectionRootClientIdKey = Symbol('sectionRootClientIdKey');
+
+;// external ["wp","privateApis"]
+const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
+;// ./node_modules/@wordpress/block-editor/build-module/lock-unlock.js
+/**
+ * WordPress dependencies
+ */
+
+const {
+  lock,
+  unlock
+} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/block-editor');
+
+;// ./node_modules/@wordpress/block-editor/build-module/store/reducer.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const {
+  isContentBlock
+} = unlock(external_wp_blocks_namespaceObject.privateApis);
 const identity = x => x;
 
 /**
@@ -9905,7 +9708,7 @@
  *
  * @return {Object} Updated state.
  */
-function insertionPoint(state = null, action) {
+function insertionCue(state = null, action) {
   switch (action.type) {
     case 'SHOW_INSERTION_POINT':
       {
@@ -9965,16 +9768,25 @@
 function settings(state = SETTINGS_DEFAULTS, action) {
   switch (action.type) {
     case 'UPDATE_SETTINGS':
-      if (action.reset) {
-        return {
+      {
+        const updatedSettings = action.reset ? {
           ...SETTINGS_DEFAULTS,
           ...action.settings
+        } : {
+          ...state,
+          ...action.settings
         };
-      }
-      return {
-        ...state,
-        ...action.settings
-      };
+        Object.defineProperty(updatedSettings, '__unstableIsPreviewMode', {
+          get() {
+            external_wp_deprecated_default()('__unstableIsPreviewMode', {
+              since: '6.8',
+              alternative: 'isPreviewMode'
+            });
+            return this.isPreviewMode;
+          }
+        });
+        return updatedSettings;
+      }
   }
   return state;
 }
@@ -10077,43 +9889,6 @@
 };
 
 /**
- * Reducer returning which mode is enabled.
- *
- * @param {string} state  Current state.
- * @param {Object} action Dispatched action.
- *
- * @return {string} Updated state.
- */
-function editorMode(state = 'edit', action) {
-  // Let inserting block in navigation mode always trigger Edit mode.
-  if (action.type === 'INSERT_BLOCKS' && state === 'navigation') {
-    return 'edit';
-  }
-  if (action.type === 'SET_EDITOR_MODE') {
-    return action.mode;
-  }
-  return state;
-}
-
-/**
- * Reducer returning whether the block moving mode is enabled or not.
- *
- * @param {string|null} state  Current state.
- * @param {Object}      action Dispatched action.
- *
- * @return {string|null} Updated state.
- */
-function hasBlockMovingClientId(state = null, action) {
-  if (action.type === 'SET_BLOCK_MOVING_MODE') {
-    return action.hasBlockMovingClientId;
-  }
-  if (action.type === 'SET_EDITOR_MODE') {
-    return null;
-  }
-  return state;
-}
-
-/**
  * Reducer return an updated state representing the most recent block attribute
  * update. The state is structured as an object where the keys represent the
  * client IDs of blocks, the values a subset of attributes from the most recent
@@ -10262,9 +10037,15 @@
 function blockEditingModes(state = new Map(), action) {
   switch (action.type) {
     case 'SET_BLOCK_EDITING_MODE':
+      if (state.get(action.clientId) === action.mode) {
+        return state;
+      }
       return new Map(state).set(action.clientId, action.mode);
     case 'UNSET_BLOCK_EDITING_MODE':
       {
+        if (!state.has(action.clientId)) {
+          return state;
+        }
         const newState = new Map(state);
         newState.delete(action.clientId);
         return newState;
@@ -10346,6 +10127,58 @@
   }
   return state;
 }
+
+/**
+ * Reducer setting currently hovered block.
+ *
+ * @param {boolean} state  Current state.
+ * @param {Object}  action Dispatched action.
+ *
+ * @return {boolean} Updated state.
+ */
+function hoveredBlockClientId(state = false, action) {
+  switch (action.type) {
+    case 'HOVER_BLOCK':
+      return action.clientId;
+  }
+  return state;
+}
+
+/**
+ * Reducer setting zoom out state.
+ *
+ * @param {boolean} state  Current state.
+ * @param {Object}  action Dispatched action.
+ *
+ * @return {number} Updated state.
+ */
+function zoomLevel(state = 100, action) {
+  switch (action.type) {
+    case 'SET_ZOOM_LEVEL':
+      return action.zoom;
+    case 'RESET_ZOOM_LEVEL':
+      return 100;
+  }
+  return state;
+}
+
+/**
+ * Reducer setting the insertion point
+ *
+ * @param {boolean} state  Current state.
+ * @param {Object}  action Dispatched action.
+ *
+ * @return {Object} Updated state.
+ */
+function insertionPoint(state = null, action) {
+  switch (action.type) {
+    case 'SET_INSERTION_POINT':
+      return action.value;
+    case 'SELECT_BLOCK':
+      return null;
+  }
+  return state;
+}
 const combinedReducers = (0,external_wp_data_namespaceObject.combineReducers)({
   blocks,
   isDragging,
@@ -10359,13 +10192,12 @@
   blocksMode,
   blockListSettings,
   insertionPoint,
+  insertionCue,
   template,
   settings,
   preferences,
   lastBlockAttributesChange,
   lastFocus,
-  editorMode,
-  hasBlockMovingClientId,
   expandedBlock,
   highlightedBlock,
   lastBlockInserted,
@@ -10377,8 +10209,556 @@
   removalPromptData,
   blockRemovalRules,
   openedBlockSettingsMenu,
-  registeredInserterMediaCategories
-});
+  registeredInserterMediaCategories,
+  hoveredBlockClientId,
+  zoomLevel
+});
+
+/**
+ * Retrieves a block's tree structure, handling both controlled and uncontrolled inner blocks.
+ *
+ * @param {Object} state    The current state object.
+ * @param {string} clientId The client ID of the block to retrieve.
+ *
+ * @return {Object|undefined} The block tree object, or undefined if not found. For controlled blocks,
+ *                           returns a merged tree with controlled inner blocks.
+ */
+function getBlockTreeBlock(state, clientId) {
+  if (clientId === '') {
+    const rootBlock = state.blocks.tree.get(clientId);
+    if (!rootBlock) {
+      return;
+    }
+
+    // Patch the root block to have a clientId property.
+    // TODO - consider updating the blocks reducer so that the root block has this property.
+    return {
+      clientId: '',
+      ...rootBlock
+    };
+  }
+  if (!state.blocks.controlledInnerBlocks[clientId]) {
+    return state.blocks.tree.get(clientId);
+  }
+  const controlledTree = state.blocks.tree.get(`controlled||${clientId}`);
+  const regularTree = state.blocks.tree.get(clientId);
+  return {
+    ...regularTree,
+    innerBlocks: controlledTree?.innerBlocks
+  };
+}
+
+/**
+ * Recursively traverses through a block tree of a given block and executes a callback for each block.
+ *
+ * @param {Object}   state    The store state.
+ * @param {string}   clientId The clientId of the block to start traversing from.
+ * @param {Function} callback Function to execute for each block encountered during traversal.
+ *                            The callback receives the current block as its argument.
+ */
+function traverseBlockTree(state, clientId, callback) {
+  const tree = getBlockTreeBlock(state, clientId);
+  if (!tree) {
+    return;
+  }
+  callback(tree);
+  if (!tree?.innerBlocks?.length) {
+    return;
+  }
+  for (const innerBlock of tree?.innerBlocks) {
+    traverseBlockTree(state, innerBlock.clientId, callback);
+  }
+}
+
+/**
+ * Checks if a block has a parent in a list of client IDs, and if so returns the client ID of the parent.
+ *
+ * @param {Object} state     The current state object.
+ * @param {string} clientId  The client ID of the block to search the parents of.
+ * @param {Array}  clientIds The client IDs of the blocks to check.
+ *
+ * @return {string|undefined} The client ID of the parent block if found, undefined otherwise.
+ */
+function findParentInClientIdsList(state, clientId, clientIds) {
+  if (!clientIds.length) {
+    return;
+  }
+  let parent = state.blocks.parents.get(clientId);
+  while (parent !== undefined) {
+    if (clientIds.includes(parent)) {
+      return parent;
+    }
+    parent = state.blocks.parents.get(parent);
+  }
+}
+
+/**
+ * Checks if a block has any bindings in its metadata attributes.
+ *
+ * @param {Object} block The block object to check for bindings.
+ * @return {boolean}    True if the block has bindings, false otherwise.
+ */
+function hasBindings(block) {
+  return block?.attributes?.metadata?.bindings && Object.keys(block?.attributes?.metadata?.bindings).length;
+}
+
+/**
+ * Computes and returns derived block editing modes for a given block tree.
+ *
+ * This function calculates the editing modes for each block in the tree, taking into account
+ * various factors such as zoom level, navigation mode, sections, and synced patterns.
+ *
+ * @param {Object}  state        The current state object.
+ * @param {boolean} isNavMode    Whether the navigation mode is active.
+ * @param {string}  treeClientId The client ID of the root block for the tree. Defaults to an empty string.
+ * @return {Map} A Map containing the derived block editing modes, keyed by block client ID.
+ */
+function getDerivedBlockEditingModesForTree(state, isNavMode = false, treeClientId = '') {
+  const isZoomedOut = state?.zoomLevel < 100 || state?.zoomLevel === 'auto-scaled';
+  const derivedBlockEditingModes = new Map();
+
+  // When there are sections, the majority of blocks are disabled,
+  // so the default block editing mode is set to disabled.
+  const sectionRootClientId = state.settings?.[sectionRootClientIdKey];
+  const sectionClientIds = state.blocks.order.get(sectionRootClientId);
+  const hasDisabledBlocks = Array.from(state.blockEditingModes).some(([, mode]) => mode === 'disabled');
+  const templatePartClientIds = [];
+  const syncedPatternClientIds = [];
+  Object.keys(state.blocks.controlledInnerBlocks).forEach(clientId => {
+    const block = state.blocks.byClientId?.get(clientId);
+    if (block?.name === 'core/template-part') {
+      templatePartClientIds.push(clientId);
+    }
+    if (block?.name === 'core/block') {
+      syncedPatternClientIds.push(clientId);
+    }
+  });
+  traverseBlockTree(state, treeClientId, block => {
+    const {
+      clientId,
+      name: blockName
+    } = block;
+
+    // If the block already has an explicit block editing mode set,
+    // don't override it.
+    if (state.blockEditingModes.has(clientId)) {
+      return;
+    }
+
+    // Disabled explicit block editing modes are inherited by children.
+    // It's an expensive calculation, so only do it if there are disabled blocks.
+    if (hasDisabledBlocks) {
+      // Look through parents to find one with an explicit block editing mode.
+      let ancestorBlockEditingMode;
+      let parent = state.blocks.parents.get(clientId);
+      while (parent !== undefined) {
+        // There's a chance we only just calculated this for the parent,
+        // if so we can return that value for a faster lookup.
+        if (derivedBlockEditingModes.has(parent)) {
+          ancestorBlockEditingMode = derivedBlockEditingModes.get(parent);
+        } else if (state.blockEditingModes.has(parent)) {
+          // Checking the explicit block editing mode will be slower,
+          // as the block editing mode is more likely to be set on a
+          // distant ancestor.
+          ancestorBlockEditingMode = state.blockEditingModes.get(parent);
+        }
+        if (ancestorBlockEditingMode) {
+          break;
+        }
+        parent = state.blocks.parents.get(parent);
+      }
+
+      // If the ancestor block editing mode is disabled, it's inherited by the child.
+      if (ancestorBlockEditingMode === 'disabled') {
+        derivedBlockEditingModes.set(clientId, 'disabled');
+        return;
+      }
+    }
+    if (isZoomedOut || isNavMode) {
+      // If the root block is the section root set its editing mode to contentOnly.
+      if (clientId === sectionRootClientId) {
+        derivedBlockEditingModes.set(clientId, 'contentOnly');
+        return;
+      }
+
+      // There are no sections, so everything else is disabled.
+      if (!sectionClientIds?.length) {
+        derivedBlockEditingModes.set(clientId, 'disabled');
+        return;
+      }
+      if (sectionClientIds.includes(clientId)) {
+        derivedBlockEditingModes.set(clientId, 'contentOnly');
+        return;
+      }
+
+      // If zoomed out, all blocks that aren't sections or the section root are
+      // disabled.
+      if (isZoomedOut) {
+        derivedBlockEditingModes.set(clientId, 'disabled');
+        return;
+      }
+      const isInSection = !!findParentInClientIdsList(state, clientId, sectionClientIds);
+      if (!isInSection) {
+        if (clientId === '') {
+          derivedBlockEditingModes.set(clientId, 'disabled');
+          return;
+        }
+
+        // Allow selection of template parts outside of sections.
+        if (blockName === 'core/template-part') {
+          derivedBlockEditingModes.set(clientId, 'contentOnly');
+          return;
+        }
+        const isInTemplatePart = !!findParentInClientIdsList(state, clientId, templatePartClientIds);
+        // Allow contentOnly blocks in template parts outside of sections
+        // to be editable. Only disable blocks that don't fit this criteria.
+        if (!isInTemplatePart && !isContentBlock(blockName)) {
+          derivedBlockEditingModes.set(clientId, 'disabled');
+          return;
+        }
+      }
+
+      // Handle synced pattern content so the inner blocks of a synced pattern are
+      // properly disabled.
+      if (syncedPatternClientIds.length) {
+        const parentPatternClientId = findParentInClientIdsList(state, clientId, syncedPatternClientIds);
+        if (parentPatternClientId) {
+          // This is a pattern nested in another pattern, it should be disabled.
+          if (findParentInClientIdsList(state, parentPatternClientId, syncedPatternClientIds)) {
+            derivedBlockEditingModes.set(clientId, 'disabled');
+            return;
+          }
+          if (hasBindings(block)) {
+            derivedBlockEditingModes.set(clientId, 'contentOnly');
+            return;
+          }
+
+          // Synced pattern content without a binding isn't editable
+          // from the instance, the user has to edit the pattern source,
+          // so return 'disabled'.
+          derivedBlockEditingModes.set(clientId, 'disabled');
+          return;
+        }
+      }
+      if (blockName && isContentBlock(blockName)) {
+        derivedBlockEditingModes.set(clientId, 'contentOnly');
+        return;
+      }
+      derivedBlockEditingModes.set(clientId, 'disabled');
+      return;
+    }
+    if (syncedPatternClientIds.length) {
+      // Synced pattern blocks (core/block).
+      if (syncedPatternClientIds.includes(clientId)) {
+        // This is a pattern nested in another pattern, it should be disabled.
+        if (findParentInClientIdsList(state, clientId, syncedPatternClientIds)) {
+          derivedBlockEditingModes.set(clientId, 'disabled');
+          return;
+        }
+
+        // Else do nothing, use the default block editing mode.
+        return;
+      }
+
+      // Inner blocks of synced patterns.
+      const parentPatternClientId = findParentInClientIdsList(state, clientId, syncedPatternClientIds);
+      if (parentPatternClientId) {
+        // This is a pattern nested in another pattern, it should be disabled.
+        if (findParentInClientIdsList(state, parentPatternClientId, syncedPatternClientIds)) {
+          derivedBlockEditingModes.set(clientId, 'disabled');
+          return;
+        }
+        if (hasBindings(block)) {
+          derivedBlockEditingModes.set(clientId, 'contentOnly');
+          return;
+        }
+
+        // Synced pattern content without a binding isn't editable
+        // from the instance, the user has to edit the pattern source,
+        // so return 'disabled'.
+        derivedBlockEditingModes.set(clientId, 'disabled');
+      }
+    }
+  });
+  return derivedBlockEditingModes;
+}
+
+/**
+ * Updates the derived block editing modes based on added and removed blocks.
+ *
+ * This function handles the updating of block editing modes when blocks are added,
+ * removed, or moved within the editor.
+ *
+ * It only returns a value when modifications are made to the block editing modes.
+ *
+ * @param {Object}  options                    The options for updating derived block editing modes.
+ * @param {Object}  options.prevState          The previous state object.
+ * @param {Object}  options.nextState          The next state object.
+ * @param {Array}   [options.addedBlocks]      An array of blocks that were added.
+ * @param {Array}   [options.removedClientIds] An array of client IDs of blocks that were removed.
+ * @param {boolean} [options.isNavMode]        Whether the navigation mode is active.
+ * @return {Map|undefined} The updated derived block editing modes, or undefined if no changes were made.
+ */
+function getDerivedBlockEditingModesUpdates({
+  prevState,
+  nextState,
+  addedBlocks,
+  removedClientIds,
+  isNavMode = false
+}) {
+  const prevDerivedBlockEditingModes = isNavMode ? prevState.derivedNavModeBlockEditingModes : prevState.derivedBlockEditingModes;
+  let nextDerivedBlockEditingModes;
+
+  // Perform removals before additions to handle cases like the `MOVE_BLOCKS_TO_POSITION` action.
+  // That action removes a set of clientIds, but adds the same blocks back in a different location.
+  // If removals were performed after additions, those moved clientIds would be removed incorrectly.
+  removedClientIds?.forEach(clientId => {
+    // The actions only receive parent block IDs for removal.
+    // Recurse through the block tree to ensure all blocks are removed.
+    // Specifically use the previous state, before the blocks were removed.
+    traverseBlockTree(prevState, clientId, block => {
+      if (prevDerivedBlockEditingModes.has(block.clientId)) {
+        if (!nextDerivedBlockEditingModes) {
+          nextDerivedBlockEditingModes = new Map(prevDerivedBlockEditingModes);
+        }
+        nextDerivedBlockEditingModes.delete(block.clientId);
+      }
+    });
+  });
+  addedBlocks?.forEach(addedBlock => {
+    traverseBlockTree(nextState, addedBlock.clientId, block => {
+      const updates = getDerivedBlockEditingModesForTree(nextState, isNavMode, block.clientId);
+      if (updates.size) {
+        if (!nextDerivedBlockEditingModes) {
+          nextDerivedBlockEditingModes = new Map([...(prevDerivedBlockEditingModes?.size ? prevDerivedBlockEditingModes : []), ...updates]);
+        } else {
+          nextDerivedBlockEditingModes = new Map([...(nextDerivedBlockEditingModes?.size ? nextDerivedBlockEditingModes : []), ...updates]);
+        }
+      }
+    });
+  });
+  return nextDerivedBlockEditingModes;
+}
+
+/**
+ * Higher-order reducer that adds derived block editing modes to the state.
+ *
+ * This function wraps a reducer and enhances it to handle actions that affect
+ * block editing modes. It updates the derivedBlockEditingModes in the state
+ * based on various actions such as adding, removing, or moving blocks, or changing
+ * the editor mode.
+ *
+ * @param {Function} reducer The original reducer function to be wrapped.
+ * @return {Function} A new reducer function that includes derived block editing modes handling.
+ */
+function withDerivedBlockEditingModes(reducer) {
+  return (state, action) => {
+    var _state$derivedBlockEd, _state$derivedNavMode;
+    const nextState = reducer(state, action);
+
+    // An exception is needed here to still recompute the block editing modes when
+    // the editor mode changes since the editor mode isn't stored within the
+    // block editor state and changing it won't trigger an altered new state.
+    if (action.type !== 'SET_EDITOR_MODE' && nextState === state) {
+      return state;
+    }
+    switch (action.type) {
+      case 'REMOVE_BLOCKS':
+        {
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            removedClientIds: action.clientIds,
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            removedClientIds: action.clientIds,
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'RECEIVE_BLOCKS':
+      case 'INSERT_BLOCKS':
+        {
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'SET_BLOCK_EDITING_MODE':
+      case 'UNSET_BLOCK_EDITING_MODE':
+      case 'SET_HAS_CONTROLLED_INNER_BLOCKS':
+        {
+          const updatedBlock = getBlockTreeBlock(nextState, action.clientId);
+
+          // The block might have been removed in which case it'll be
+          // handled by the `REMOVE_BLOCKS` action.
+          if (!updatedBlock) {
+            break;
+          }
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            removedClientIds: [action.clientId],
+            addedBlocks: [updatedBlock],
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            removedClientIds: [action.clientId],
+            addedBlocks: [updatedBlock],
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'REPLACE_BLOCKS':
+        {
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            removedClientIds: action.clientIds,
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            removedClientIds: action.clientIds,
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'REPLACE_INNER_BLOCKS':
+        {
+          // Get the clientIds of the blocks that are being replaced
+          // from the old state, before they were removed.
+          const removedClientIds = state.blocks.order.get(action.rootClientId);
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            removedClientIds,
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks: action.blocks,
+            removedClientIds,
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'MOVE_BLOCKS_TO_POSITION':
+        {
+          const addedBlocks = action.clientIds.map(clientId => {
+            return nextState.blocks.byClientId.get(clientId);
+          });
+          const nextDerivedBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks,
+            removedClientIds: action.clientIds,
+            isNavMode: false
+          });
+          const nextDerivedNavModeBlockEditingModes = getDerivedBlockEditingModesUpdates({
+            prevState: state,
+            nextState,
+            addedBlocks,
+            removedClientIds: action.clientIds,
+            isNavMode: true
+          });
+          if (nextDerivedBlockEditingModes || nextDerivedNavModeBlockEditingModes) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: nextDerivedBlockEditingModes !== null && nextDerivedBlockEditingModes !== void 0 ? nextDerivedBlockEditingModes : state.derivedBlockEditingModes,
+              derivedNavModeBlockEditingModes: nextDerivedNavModeBlockEditingModes !== null && nextDerivedNavModeBlockEditingModes !== void 0 ? nextDerivedNavModeBlockEditingModes : state.derivedNavModeBlockEditingModes
+            };
+          }
+          break;
+        }
+      case 'UPDATE_SETTINGS':
+        {
+          // Recompute the entire tree if the section root changes.
+          if (state?.settings?.[sectionRootClientIdKey] !== nextState?.settings?.[sectionRootClientIdKey]) {
+            return {
+              ...nextState,
+              derivedBlockEditingModes: getDerivedBlockEditingModesForTree(nextState, false /* Nav mode off */),
+              derivedNavModeBlockEditingModes: getDerivedBlockEditingModesForTree(nextState, true /* Nav mode on */)
+            };
+          }
+          break;
+        }
+      case 'RESET_BLOCKS':
+      case 'SET_EDITOR_MODE':
+      case 'RESET_ZOOM_LEVEL':
+      case 'SET_ZOOM_LEVEL':
+        {
+          // Recompute the entire tree if the editor mode or zoom level changes,
+          // or if all the blocks are reset.
+          return {
+            ...nextState,
+            derivedBlockEditingModes: getDerivedBlockEditingModesForTree(nextState, false /* Nav mode off */),
+            derivedNavModeBlockEditingModes: getDerivedBlockEditingModesForTree(nextState, true /* Nav mode on */)
+          };
+        }
+    }
+
+    // If there's no change, the derivedBlockEditingModes from the previous
+    // state need to be preserved.
+    nextState.derivedBlockEditingModes = (_state$derivedBlockEd = state?.derivedBlockEditingModes) !== null && _state$derivedBlockEd !== void 0 ? _state$derivedBlockEd : new Map();
+    nextState.derivedNavModeBlockEditingModes = (_state$derivedNavMode = state?.derivedNavModeBlockEditingModes) !== null && _state$derivedNavMode !== void 0 ? _state$derivedNavMode : new Map();
+    return nextState;
+  };
+}
 function withAutomaticChangeReset(reducer) {
   return (state, action) => {
     const nextState = reducer(state, action);
@@ -10419,13 +10799,13 @@
     };
   };
 }
-/* harmony default export */ const reducer = (withAutomaticChangeReset(combinedReducers));
-
-;// CONCATENATED MODULE: external ["wp","primitives"]
+/* harmony default export */ const reducer = ((0,external_wp_compose_namespaceObject.pipe)(withDerivedBlockEditingModes, withAutomaticChangeReset)(combinedReducers));
+
+;// external ["wp","primitives"]
 const external_wp_primitives_namespaceObject = window["wp"]["primitives"];
-;// CONCATENATED MODULE: external "ReactJSXRuntime"
+;// external "ReactJSXRuntime"
 const external_ReactJSXRuntime_namespaceObject = window["ReactJSXRuntime"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/symbol.js
+;// ./node_modules/@wordpress/icons/build-module/library/symbol.js
 /**
  * WordPress dependencies
  */
@@ -10440,163 +10820,16 @@
 });
 /* harmony default export */ const library_symbol = (symbol);
 
-;// CONCATENATED MODULE: external ["wp","richText"]
+;// external ["wp","richText"]
 const external_wp_richText_namespaceObject = window["wp"]["richText"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/private-keys.js
-const globalStylesDataKey = Symbol('globalStylesDataKey');
-const selectBlockPatternsKey = Symbol('selectBlockPatternsKey');
-const reusableBlocksSelectKey = Symbol('reusableBlocksSelect');
-
-;// CONCATENATED MODULE: external ["wp","privateApis"]
-const external_wp_privateApis_namespaceObject = window["wp"]["privateApis"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/lock-unlock.js
-/**
- * WordPress dependencies
- */
-
-const {
-  lock,
-  unlock
-} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/block-editor');
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/constants.js
+;// external ["wp","preferences"]
+const external_wp_preferences_namespaceObject = window["wp"]["preferences"];
+;// external ["wp","blockSerializationDefaultParser"]
+const external_wp_blockSerializationDefaultParser_namespaceObject = window["wp"]["blockSerializationDefaultParser"];
+;// ./node_modules/@wordpress/block-editor/build-module/store/constants.js
 const STORE_NAME = 'core/block-editor';
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/utils.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const withRootClientIdOptionKey = Symbol('withRootClientId');
-const parsedPatternCache = new WeakMap();
-function parsePattern(pattern) {
-  const blocks = (0,external_wp_blocks_namespaceObject.parse)(pattern.content, {
-    __unstableSkipMigrationLogs: true
-  });
-  if (blocks.length === 1) {
-    blocks[0].attributes = {
-      ...blocks[0].attributes,
-      metadata: {
-        ...(blocks[0].attributes.metadata || {}),
-        categories: pattern.categories,
-        patternName: pattern.name,
-        name: blocks[0].attributes.metadata?.name || pattern.title
-      }
-    };
-  }
-  return {
-    ...pattern,
-    blocks
-  };
-}
-function getParsedPattern(pattern) {
-  let parsedPattern = parsedPatternCache.get(pattern);
-  if (parsedPattern) {
-    return parsedPattern;
-  }
-  parsedPattern = parsePattern(pattern);
-  parsedPatternCache.set(pattern, parsedPattern);
-  return parsedPattern;
-}
-const checkAllowList = (list, item, defaultResult = null) => {
-  if (typeof list === 'boolean') {
-    return list;
-  }
-  if (Array.isArray(list)) {
-    // TODO: when there is a canonical way to detect that we are editing a post
-    // the following check should be changed to something like:
-    // if ( list.includes( 'core/post-content' ) && getEditorMode() === 'post-content' && item === null )
-    if (list.includes('core/post-content') && item === null) {
-      return true;
-    }
-    return list.includes(item);
-  }
-  return defaultResult;
-};
-const checkAllowListRecursive = (blocks, allowedBlockTypes) => {
-  if (typeof allowedBlockTypes === 'boolean') {
-    return allowedBlockTypes;
-  }
-  const blocksQueue = [...blocks];
-  while (blocksQueue.length > 0) {
-    const block = blocksQueue.shift();
-    const isAllowed = checkAllowList(allowedBlockTypes, block.name || block.blockName, true);
-    if (!isAllowed) {
-      return false;
-    }
-    block.innerBlocks?.forEach(innerBlock => {
-      blocksQueue.push(innerBlock);
-    });
-  }
-  return true;
-};
-const getAllPatternsDependants = select => state => {
-  return [state.settings.__experimentalBlockPatterns, state.settings.__experimentalUserPatternCategories, state.settings.__experimentalReusableBlocks, state.settings[selectBlockPatternsKey]?.(select), state.blockPatterns, unlock(select(STORE_NAME)).getReusableBlocks()];
-};
-function getInsertBlockTypeDependants(state, rootClientId) {
-  return [state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId), state.settings.allowedBlockTypes, state.settings.templateLock, state.blockEditingModes];
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/sorting.js
-/**
- * Recursive stable sorting comparator function.
- *
- * @param {string|Function} field Field to sort by.
- * @param {Array}           items Items to sort.
- * @param {string}          order Order, 'asc' or 'desc'.
- * @return {Function} Comparison function to be used in a `.sort()`.
- */
-const comparator = (field, items, order) => {
-  return (a, b) => {
-    let cmpA, cmpB;
-    if (typeof field === 'function') {
-      cmpA = field(a);
-      cmpB = field(b);
-    } else {
-      cmpA = a[field];
-      cmpB = b[field];
-    }
-    if (cmpA > cmpB) {
-      return order === 'asc' ? 1 : -1;
-    } else if (cmpB > cmpA) {
-      return order === 'asc' ? -1 : 1;
-    }
-    const orderA = items.findIndex(item => item === a);
-    const orderB = items.findIndex(item => item === b);
-
-    // Stable sort: maintaining original array order
-    if (orderA > orderB) {
-      return 1;
-    } else if (orderB > orderA) {
-      return -1;
-    }
-    return 0;
-  };
-};
-
-/**
- * Order items by a certain key.
- * Supports decorator functions that allow complex picking of a comparison field.
- * Sorts in ascending order by default, but supports descending as well.
- * Stable sort - maintains original order of equal items.
- *
- * @param {Array}           items Items to order.
- * @param {string|Function} field Field to order by.
- * @param {string}          order Sorting order, `asc` or `desc`.
- * @return {Array} Sorted items.
- */
-function orderBy(items, field, order = 'asc') {
-  return items.concat().sort(comparator(field, items, order));
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/utils.js
 /**
  * WordPress dependencies
  */
@@ -10619,6 +10852,10 @@
   name: 'myPatterns',
   label: (0,external_wp_i18n_namespaceObject.__)('My patterns')
 };
+const starterPatternsCategory = {
+  name: 'core/starter-content',
+  label: (0,external_wp_i18n_namespaceObject.__)('Starter content')
+};
 function isPatternFiltered(pattern, sourceFilter, syncFilter) {
   const isUserPattern = pattern.name.startsWith('core/block');
   const isDirectoryPattern = pattern.source === 'core' || pattern.source?.startsWith('pattern-directory');
@@ -10650,7 +10887,7 @@
   return false;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/object.js
+;// ./node_modules/@wordpress/block-editor/build-module/utils/object.js
 /**
  * Immutably sets a value inside an object. Like `lodash#set`, but returning a
  * new object. Treats nullish initial values as empty objects. Clones any
@@ -10721,7 +10958,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/get-block-settings.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/get-block-settings.js
 /**
  * WordPress dependencies
  */
@@ -10861,7 +11098,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/private-selectors.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/private-selectors.js
 /**
  * WordPress dependencies
  */
@@ -10943,7 +11180,7 @@
  *
  * @return {Object[]} Tree of block objects with only clientID and innerBlocks set.
  */
-const getEnabledClientIdsTree = (0,external_wp_data_namespaceObject.createSelector)(getEnabledClientIdsTreeUnmemoized, state => [state.blocks.order, state.blockEditingModes, state.settings.templateLock, state.blockListSettings]);
+const getEnabledClientIdsTree = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)(getEnabledClientIdsTreeUnmemoized, state => [state.blocks.order, state.derivedBlockEditingModes, state.derivedNavModeBlockEditingModes, state.blockEditingModes, state.settings.templateLock, state.blockListSettings, select(STORE_NAME).__unstableGetEditorMode(state)]));
 
 /**
  * Returns a list of a given block's ancestors, from top to bottom. Blocks with
@@ -11102,21 +11339,19 @@
     if (!inserter) {
       return false;
     }
-    const {
-      blocks
-    } = getParsedPattern(pattern);
-    return checkAllowListRecursive(blocks, allowedBlockTypes) && blocks.every(({
+    const grammar = getGrammar(pattern);
+    return checkAllowListRecursive(grammar, allowedBlockTypes) && grammar.every(({
       name: blockName
     }) => canInsertBlockType(state, blockName, rootClientId));
   });
-}, (state, rootClientId) => [...getAllPatternsDependants(select)(state), ...getInsertBlockTypeDependants(state, rootClientId)]));
+}, (state, rootClientId) => [...getAllPatternsDependants(select)(state), ...getInsertBlockTypeDependants(select)(state, rootClientId)]));
 function mapUserPattern(userPattern, __experimentalUserPatternCategories = []) {
   return {
     name: `core/block/${userPattern.id}`,
     id: userPattern.id,
     type: INSERTER_PATTERN_TYPES.user,
     title: userPattern.title.raw,
-    categories: userPattern.wp_pattern_category.map(catId => {
+    categories: userPattern.wp_pattern_category?.map(catId => {
       const category = __experimentalUserPatternCategories.find(({
         id
       }) => id === catId);
@@ -11152,16 +11387,11 @@
   // This setting is left for back compat.
   ...((_state$settings$__exp2 = state.settings.__experimentalBlockPatterns) !== null && _state$settings$__exp2 !== void 0 ? _state$settings$__exp2 : []), ...((_state$settings$selec2 = state.settings[selectBlockPatternsKey]?.(select)) !== null && _state$settings$selec2 !== void 0 ? _state$settings$selec2 : [])].filter((x, index, arr) => index === arr.findIndex(y => x.name === y.name));
 }, getAllPatternsDependants(select)));
-const isResolvingPatterns = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)(state => {
-  const blockPatternsSelect = state.settings[selectBlockPatternsKey];
-  const reusableBlocksSelect = state.settings[reusableBlocksSelectKey];
-  return (blockPatternsSelect ? blockPatternsSelect(select) === undefined : false) || (reusableBlocksSelect ? reusableBlocksSelect(select) === undefined : false);
-}, getAllPatternsDependants(select)));
 const EMPTY_ARRAY = [];
 const getReusableBlocks = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
-  var _state$settings$__exp3;
+  var _ref;
   const reusableBlocksSelect = state.settings[reusableBlocksSelectKey];
-  return reusableBlocksSelect ? reusableBlocksSelect(select) : (_state$settings$__exp3 = state.settings.__experimentalReusableBlocks) !== null && _state$settings$__exp3 !== void 0 ? _state$settings$__exp3 : EMPTY_ARRAY;
+  return (_ref = reusableBlocksSelect ? reusableBlocksSelect(select) : state.settings.__experimentalReusableBlocks) !== null && _ref !== void 0 ? _ref : EMPTY_ARRAY;
 });
 
 /**
@@ -11204,20 +11434,63 @@
  * with the provided client ID.
  *
  * @param {Object} state    Global application state.
- * @param {Object} clientId Client Id of the block.
+ * @param {string} clientId Client Id of the block.
  *
  * @return {?string} Client ID of the ancestor block that is content locking the block.
  */
-const getContentLockingParent = (0,external_wp_data_namespaceObject.createSelector)((state, clientId) => {
+const getContentLockingParent = (state, clientId) => {
   let current = clientId;
   let result;
-  while (current = state.blocks.parents.get(current)) {
-    if (getBlockName(state, current) === 'core/block' || getTemplateLock(state, current) === 'contentOnly') {
+  while (!result && (current = state.blocks.parents.get(current))) {
+    if (getTemplateLock(state, current) === 'contentOnly') {
       result = current;
     }
   }
   return result;
-}, state => [state.blocks.parents, state.blockListSettings]);
+};
+
+/**
+ * Retrieves the client ID of the parent section block.
+ *
+ * @param {Object} state    Global application state.
+ * @param {string} clientId Client Id of the block.
+ *
+ * @return {?string} Client ID of the ancestor block that is content locking the block.
+ */
+const getParentSectionBlock = (state, clientId) => {
+  let current = clientId;
+  let result;
+  while (!result && (current = state.blocks.parents.get(current))) {
+    if (isSectionBlock(state, current)) {
+      result = current;
+    }
+  }
+  return result;
+};
+
+/**
+ * Retrieves the client ID is a content locking parent
+ *
+ * @param {Object} state    Global application state.
+ * @param {string} clientId Client Id of the block.
+ *
+ * @return {boolean} Whether the block is a content locking parent.
+ */
+function isSectionBlock(state, clientId) {
+  const blockName = getBlockName(state, clientId);
+  if (blockName === 'core/block' || getTemplateLock(state, clientId) === 'contentOnly') {
+    return true;
+  }
+
+  // Template parts become sections in navigation mode.
+  const _isNavigationMode = isNavigationMode(state);
+  if (_isNavigationMode && blockName === 'core/template-part') {
+    return true;
+  }
+  const sectionRootClientId = getSectionRootClientId(state);
+  const sectionClientIds = getBlockOrder(state, sectionRootClientId);
+  return _isNavigationMode && sectionClientIds.includes(clientId);
+}
 
 /**
  * Retrieves the client ID of the block that is content locked but is
@@ -11243,10 +11516,261 @@
   return state.temporarilyEditingFocusModeRevert;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/selectors.js
-/**
- * WordPress dependencies
- */
+/**
+ * Returns the style attributes of multiple blocks.
+ *
+ * @param {Object}   state     Global application state.
+ * @param {string[]} clientIds An array of block client IDs.
+ *
+ * @return {Object} An object where keys are client IDs and values are the corresponding block styles or undefined.
+ */
+const getBlockStyles = (0,external_wp_data_namespaceObject.createSelector)((state, clientIds) => clientIds.reduce((styles, clientId) => {
+  styles[clientId] = state.blocks.attributes.get(clientId)?.style;
+  return styles;
+}, {}), (state, clientIds) => [...clientIds.map(clientId => state.blocks.attributes.get(clientId)?.style)]);
+
+/**
+ * Retrieves the client ID of the block which contains the blocks
+ * acting as "sections" in the editor. This is typically the "main content"
+ * of the template/post.
+ *
+ * @param {Object} state Editor state.
+ *
+ * @return {string|undefined} The section root client ID or undefined if not set.
+ */
+function getSectionRootClientId(state) {
+  return state.settings?.[sectionRootClientIdKey];
+}
+
+/**
+ * Returns whether the editor is considered zoomed out.
+ *
+ * @param {Object} state Global application state.
+ * @return {boolean} Whether the editor is zoomed.
+ */
+function isZoomOut(state) {
+  return state.zoomLevel === 'auto-scaled' || state.zoomLevel < 100;
+}
+
+/**
+ * Returns whether the zoom level.
+ *
+ * @param {Object} state Global application state.
+ * @return {number|"auto-scaled"} Zoom level.
+ */
+function getZoomLevel(state) {
+  return state.zoomLevel;
+}
+
+/**
+ * Finds the closest block where the block is allowed to be inserted.
+ *
+ * @param {Object}            state    Editor state.
+ * @param {string[] | string} name     Block name or names.
+ * @param {string}            clientId Default insertion point.
+ *
+ * @return {string} clientID of the closest container when the block name can be inserted.
+ */
+function getClosestAllowedInsertionPoint(state, name, clientId = '') {
+  const blockNames = Array.isArray(name) ? name : [name];
+  const areBlockNamesAllowedInClientId = id => blockNames.every(currentName => canInsertBlockType(state, currentName, id));
+
+  // If we're trying to insert at the root level and it's not allowed
+  // Try the section root instead.
+  if (!clientId) {
+    if (areBlockNamesAllowedInClientId(clientId)) {
+      return clientId;
+    }
+    const sectionRootClientId = getSectionRootClientId(state);
+    if (sectionRootClientId && areBlockNamesAllowedInClientId(sectionRootClientId)) {
+      return sectionRootClientId;
+    }
+    return null;
+  }
+
+  // Traverse the block tree up until we find a place where we can insert.
+  let current = clientId;
+  while (current !== null && !areBlockNamesAllowedInClientId(current)) {
+    const parentClientId = getBlockRootClientId(state, current);
+    current = parentClientId;
+  }
+  return current;
+}
+function getClosestAllowedInsertionPointForPattern(state, pattern, clientId) {
+  const {
+    allowedBlockTypes
+  } = getSettings(state);
+  const isAllowed = checkAllowListRecursive(getGrammar(pattern), allowedBlockTypes);
+  if (!isAllowed) {
+    return null;
+  }
+  const names = getGrammar(pattern).map(({
+    blockName: name
+  }) => name);
+  return getClosestAllowedInsertionPoint(state, names, clientId);
+}
+
+/**
+ * Where the point where the next block will be inserted into.
+ *
+ * @param {Object} state
+ * @return {Object} where the insertion point in the block editor is or null if none is set.
+ */
+function getInsertionPoint(state) {
+  return state.insertionPoint;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/store/utils.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const isFiltered = Symbol('isFiltered');
+const parsedPatternCache = new WeakMap();
+const grammarMapCache = new WeakMap();
+function parsePattern(pattern) {
+  const blocks = (0,external_wp_blocks_namespaceObject.parse)(pattern.content, {
+    __unstableSkipMigrationLogs: true
+  });
+  if (blocks.length === 1) {
+    blocks[0].attributes = {
+      ...blocks[0].attributes,
+      metadata: {
+        ...(blocks[0].attributes.metadata || {}),
+        categories: pattern.categories,
+        patternName: pattern.name,
+        name: blocks[0].attributes.metadata?.name || pattern.title
+      }
+    };
+  }
+  return {
+    ...pattern,
+    blocks
+  };
+}
+function getParsedPattern(pattern) {
+  let parsedPattern = parsedPatternCache.get(pattern);
+  if (!parsedPattern) {
+    parsedPattern = parsePattern(pattern);
+    parsedPatternCache.set(pattern, parsedPattern);
+  }
+  return parsedPattern;
+}
+function getGrammar(pattern) {
+  let grammarMap = grammarMapCache.get(pattern);
+  if (!grammarMap) {
+    grammarMap = (0,external_wp_blockSerializationDefaultParser_namespaceObject.parse)(pattern.content);
+    // Block names are null only at the top level for whitespace.
+    grammarMap = grammarMap.filter(block => block.blockName !== null);
+    grammarMapCache.set(pattern, grammarMap);
+  }
+  return grammarMap;
+}
+const checkAllowList = (list, item, defaultResult = null) => {
+  if (typeof list === 'boolean') {
+    return list;
+  }
+  if (Array.isArray(list)) {
+    // TODO: when there is a canonical way to detect that we are editing a post
+    // the following check should be changed to something like:
+    // if ( list.includes( 'core/post-content' ) && getEditorMode() === 'post-content' && item === null )
+    if (list.includes('core/post-content') && item === null) {
+      return true;
+    }
+    return list.includes(item);
+  }
+  return defaultResult;
+};
+const checkAllowListRecursive = (blocks, allowedBlockTypes) => {
+  if (typeof allowedBlockTypes === 'boolean') {
+    return allowedBlockTypes;
+  }
+  const blocksQueue = [...blocks];
+  while (blocksQueue.length > 0) {
+    const block = blocksQueue.shift();
+    const isAllowed = checkAllowList(allowedBlockTypes, block.name || block.blockName, true);
+    if (!isAllowed) {
+      return false;
+    }
+    block.innerBlocks?.forEach(innerBlock => {
+      blocksQueue.push(innerBlock);
+    });
+  }
+  return true;
+};
+const getAllPatternsDependants = select => state => {
+  return [state.settings.__experimentalBlockPatterns, state.settings.__experimentalUserPatternCategories, state.settings.__experimentalReusableBlocks, state.settings[selectBlockPatternsKey]?.(select), state.blockPatterns, unlock(select(STORE_NAME)).getReusableBlocks()];
+};
+const getInsertBlockTypeDependants = select => (state, rootClientId) => {
+  return [state.blockListSettings[rootClientId], state.blocks.byClientId.get(rootClientId), state.settings.allowedBlockTypes, state.settings.templateLock, state.blockEditingModes, select(STORE_NAME).__unstableGetEditorMode(state), getSectionRootClientId(state)];
+};
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/sorting.js
+/**
+ * Recursive stable sorting comparator function.
+ *
+ * @param {string|Function} field Field to sort by.
+ * @param {Array}           items Items to sort.
+ * @param {string}          order Order, 'asc' or 'desc'.
+ * @return {Function} Comparison function to be used in a `.sort()`.
+ */
+const comparator = (field, items, order) => {
+  return (a, b) => {
+    let cmpA, cmpB;
+    if (typeof field === 'function') {
+      cmpA = field(a);
+      cmpB = field(b);
+    } else {
+      cmpA = a[field];
+      cmpB = b[field];
+    }
+    if (cmpA > cmpB) {
+      return order === 'asc' ? 1 : -1;
+    } else if (cmpB > cmpA) {
+      return order === 'asc' ? -1 : 1;
+    }
+    const orderA = items.findIndex(item => item === a);
+    const orderB = items.findIndex(item => item === b);
+
+    // Stable sort: maintaining original array order
+    if (orderA > orderB) {
+      return 1;
+    } else if (orderB > orderA) {
+      return -1;
+    }
+    return 0;
+  };
+};
+
+/**
+ * Order items by a certain key.
+ * Supports decorator functions that allow complex picking of a comparison field.
+ * Sorts in ascending order by default, but supports descending as well.
+ * Stable sort - maintains original order of equal items.
+ *
+ * @param {Array}           items Items to order.
+ * @param {string|Function} field Field to order by.
+ * @param {string}          order Sorting order, `asc` or `desc`.
+ * @return {Array} Sorted items.
+ */
+function orderBy(items, field, order = 'asc') {
+  return items.concat().sort(comparator(field, items, order));
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/store/selectors.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -11301,7 +11825,9 @@
  * @type {Set}
  */
 const EMPTY_SET = new Set();
-const EMPTY_OBJECT = {};
+const DEFAULT_INSERTER_OPTIONS = {
+  [isFiltered]: true
+};
 
 /**
  * Returns a block's name given its client ID, or null if no block exists with
@@ -11345,7 +11871,7 @@
  * @param {Object} state    Editor state.
  * @param {string} clientId Block client ID.
  *
- * @return {Object?} Block attributes.
+ * @return {?Object} Block attributes.
  */
 function getBlockAttributes(state, clientId) {
   const block = state.blocks.byClientId.get(clientId);
@@ -11523,8 +12049,8 @@
 /**
  * Returns all blocks that match a blockName. Results include nested blocks.
  *
- * @param {Object}  state     Global application state.
- * @param {?string} blockName Optional block name, if not specified, returns an empty array.
+ * @param {Object}   state     Global application state.
+ * @param {string[]} blockName Block name(s) for which clientIds are to be returned.
  *
  * @return {Array} Array of clientIds of blocks with name equal to blockName.
  */
@@ -11546,8 +12072,8 @@
  *
  * @deprecated
  *
- * @param {Object}  state     Global application state.
- * @param {?string} blockName Optional block name, if not specified, returns an empty array.
+ * @param {Object}   state     Global application state.
+ * @param {string[]} blockName Block name(s) for which clientIds are to be returned.
  *
  * @return {Array} Array of clientIds of blocks with name equal to blockName.
  */
@@ -11700,6 +12226,39 @@
  *
  * @param {Object} state Global application state.
  *
+ * @example
+ *
+ *```js
+ * import { select } from '@wordpress/data'
+ * import { store as blockEditorStore } from '@wordpress/block-editor'
+ *
+ * // Set initial active block client ID
+ * let activeBlockClientId = null
+ *
+ * const getActiveBlockData = () => {
+ * 	const activeBlock = select(blockEditorStore).getSelectedBlock()
+ *
+ * 	if (activeBlock && activeBlock.clientId !== activeBlockClientId) {
+ * 		activeBlockClientId = activeBlock.clientId
+ *
+ * 		// Get active block name and attributes
+ * 		const activeBlockName = activeBlock.name
+ * 		const activeBlockAttributes = activeBlock.attributes
+ *
+ * 		// Log active block name and attributes
+ * 		console.log(activeBlockName, activeBlockAttributes)
+ * 		}
+ * 	}
+ *
+ * 	// Subscribe to changes in the editor
+ * 	// wp.data.subscribe(() => {
+ * 		// getActiveBlockData()
+ * 	// })
+ *
+ * 	// Update active block data on click
+ * 	// onclick="getActiveBlockData()"
+ *```
+ *
  * @return {?Object} Selected block.
  */
 function getSelectedBlock(state) {
@@ -12501,8 +13060,7 @@
 }
 
 /**
- * Returns the insertion point, the index at which the new inserted block would
- * be placed. Defaults to the last index.
+ * Returns the location of the insertion cue. Defaults to the last index.
  *
  * @param {Object} state Editor state.
  *
@@ -12511,13 +13069,13 @@
 const getBlockInsertionPoint = (0,external_wp_data_namespaceObject.createSelector)(state => {
   let rootClientId, index;
   const {
-    insertionPoint,
+    insertionCue,
     selection: {
       selectionEnd
     }
   } = state;
-  if (insertionPoint !== null) {
-    return insertionPoint;
+  if (insertionCue !== null) {
+    return insertionCue;
   }
   const {
     clientId
@@ -12532,17 +13090,17 @@
     rootClientId,
     index
   };
-}, state => [state.insertionPoint, state.selection.selectionEnd.clientId, state.blocks.parents, state.blocks.order]);
-
-/**
- * Returns true if we should show the block insertion point.
+}, state => [state.insertionCue, state.selection.selectionEnd.clientId, state.blocks.parents, state.blocks.order]);
+
+/**
+ * Returns true if the block insertion point is visible.
  *
  * @param {Object} state Global application state.
  *
  * @return {?boolean} Whether the insertion point is visible or not.
  */
 function isBlockInsertionPointVisible(state) {
-  return state.insertionPoint !== null;
+  return state.insertionCue !== null;
 }
 
 /**
@@ -12585,6 +13143,64 @@
 }
 
 /**
+ * Determines if the given block type is visible in the inserter.
+ * Note that this is different than whether a block is allowed to be inserted.
+ * In some cases, the block is not allowed in a given position but
+ * it should still be visible in the inserter to be able to add it
+ * to a different position.
+ *
+ * @param {Object}        state           Editor state.
+ * @param {string|Object} blockNameOrType The block type object, e.g., the response
+ *                                        from the block directory; or a string name of
+ *                                        an installed block type, e.g.' core/paragraph'.
+ * @param {?string}       rootClientId    Optional root client ID of block list.
+ *
+ * @return {boolean} Whether the given block type is allowed to be inserted.
+ */
+const isBlockVisibleInTheInserter = (state, blockNameOrType, rootClientId = null) => {
+  let blockType;
+  let blockName;
+  if (blockNameOrType && 'object' === typeof blockNameOrType) {
+    blockType = blockNameOrType;
+    blockName = blockNameOrType.name;
+  } else {
+    blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockNameOrType);
+    blockName = blockNameOrType;
+  }
+  if (!blockType) {
+    return false;
+  }
+  const {
+    allowedBlockTypes
+  } = getSettings(state);
+  const isBlockAllowedInEditor = checkAllowList(allowedBlockTypes, blockName, true);
+  if (!isBlockAllowedInEditor) {
+    return false;
+  }
+
+  // If parent blocks are not visible, child blocks should be hidden too.
+  const parents = (Array.isArray(blockType.parent) ? blockType.parent : []).concat(Array.isArray(blockType.ancestor) ? blockType.ancestor : []);
+  if (parents.length > 0) {
+    // This is an exception to the rule that says that all blocks are visible in the inserter.
+    // Blocks that require a given parent or ancestor are only visible if we're within that parent.
+    if (parents.includes('core/post-content')) {
+      return true;
+    }
+    let current = rootClientId;
+    let hasParent = false;
+    do {
+      if (parents.includes(getBlockName(state, current))) {
+        hasParent = true;
+        break;
+      }
+      current = state.blocks.parents.get(current);
+    } while (current);
+    return hasParent;
+  }
+  return true;
+};
+
+/**
  * Determines if the given block type is allowed to be inserted into the block list.
  * This function is not exported and not memoized because using a memoized selector
  * inside another memoized selector is just a waste of time.
@@ -12598,6 +13214,9 @@
  * @return {boolean} Whether the given block type is allowed to be inserted.
  */
 const canInsertBlockTypeUnmemoized = (state, blockName, rootClientId = null) => {
+  if (!isBlockVisibleInTheInserter(state, blockName, rootClientId)) {
+    return false;
+  }
   let blockType;
   if (blockName && 'object' === typeof blockName) {
     blockType = blockName;
@@ -12605,20 +13224,14 @@
   } else {
     blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName);
   }
-  if (!blockType) {
-    return false;
-  }
-  const {
-    allowedBlockTypes
-  } = getSettings(state);
-  const isBlockAllowedInEditor = checkAllowList(allowedBlockTypes, blockName, true);
-  if (!isBlockAllowedInEditor) {
-    return false;
-  }
   const isLocked = !!getTemplateLock(state, rootClientId);
   if (isLocked) {
     return false;
   }
+  const _isSectionBlock = !!isSectionBlock(state, rootClientId);
+  if (_isSectionBlock) {
+    return false;
+  }
   if (getBlockEditingMode(state, rootClientId !== null && rootClientId !== void 0 ? rootClientId : '') === 'disabled') {
     return false;
   }
@@ -12688,7 +13301,7 @@
  *
  * @return {boolean} Whether the given block type is allowed to be inserted.
  */
-const canInsertBlockType = (0,external_wp_data_namespaceObject.createSelector)(canInsertBlockTypeUnmemoized, (state, blockName, rootClientId) => getInsertBlockTypeDependants(state, rootClientId));
+const canInsertBlockType = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)(canInsertBlockTypeUnmemoized, (state, blockName, rootClientId) => getInsertBlockTypeDependants(select)(state, rootClientId)));
 
 /**
  * Determines if the given blocks are allowed to be inserted into the block
@@ -12724,6 +13337,10 @@
   if (getTemplateLock(state, rootClientId)) {
     return false;
   }
+  const isBlockWithinSection = !!getParentSectionBlock(state, clientId);
+  if (isBlockWithinSection) {
+    return false;
+  }
   return getBlockEditingMode(state, rootClientId) !== 'disabled';
 }
 
@@ -12745,7 +13362,7 @@
  * @param {Object} state    Editor state.
  * @param {string} clientId The block client Id.
  *
- * @return {boolean | undefined} Whether the given block is allowed to be moved.
+ * @return {boolean} Whether the given block is allowed to be moved.
  */
 function canMoveBlock(state, clientId) {
   const attributes = getBlockAttributes(state, clientId);
@@ -12844,7 +13461,7 @@
 };
 
 /**
- * Return a function to be used to tranform a block variation to an inserter item
+ * Return a function to be used to transform a block variation to an inserter item
  *
  * @param {Object} state Global State
  * @param {Object} item  Denormalized inserter item
@@ -12879,7 +13496,7 @@
  * Returns the calculated frecency.
  *
  * 'frecency' is a heuristic (https://en.wikipedia.org/wiki/Frecency)
- * that combines block usage frequenty and recency.
+ * that combines block usage frequency and recency.
  *
  * @param {number} time  When the last insert occurred as a UNIX epoch
  * @param {number} count The number of inserts that have occurred.
@@ -12908,7 +13525,7 @@
 /**
  * Returns a function that accepts a block type and builds an item to be shown
  * in a specific context. It's used for building items for Inserter and available
- * block Transfroms list.
+ * block Transforms list.
  *
  * @param {Object} state              Editor state.
  * @param {Object} options            Options object for handling the building of a block type.
@@ -12947,6 +13564,8 @@
     description: blockType.description,
     category: blockType.category,
     keywords: blockType.keywords,
+    parent: blockType.parent,
+    ancestor: blockType.ancestor,
     variations: inserterVariations,
     example: blockType.example,
     utility: 1 // Deprecated.
@@ -12961,7 +13580,7 @@
  * inserter and handle its selection.
  *
  * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)
- * that combines block usage frequenty and recency.
+ * that combines block usage frequency and recency.
  *
  * Items are returned ordered descendingly by their 'utility' and 'frecency'.
  *
@@ -12982,7 +13601,7 @@
  *                                        this item.
  * @property {number}   frecency          Heuristic that combines frequency and recency.
  */
-const getInserterItems = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)((state, rootClientId = null, options = EMPTY_OBJECT) => {
+const getInserterItems = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)((state, rootClientId = null, options = DEFAULT_INSERTER_OPTIONS) => {
   const buildReusableBlockInserterItem = reusableBlock => {
     const icon = !reusableBlock.wp_pattern_sync_status ? {
       src: library_symbol,
@@ -13017,35 +13636,13 @@
     buildScope: 'inserter'
   });
   let blockTypeInserterItems = (0,external_wp_blocks_namespaceObject.getBlockTypes)().filter(blockType => (0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockType, 'inserter', true)).map(buildBlockTypeInserterItem);
-  if (options[withRootClientIdOptionKey]) {
-    blockTypeInserterItems = blockTypeInserterItems.reduce((accumulator, item) => {
-      item.rootClientId = rootClientId !== null && rootClientId !== void 0 ? rootClientId : '';
-      while (!canInsertBlockTypeUnmemoized(state, item.name, item.rootClientId)) {
-        if (!item.rootClientId) {
-          let sectionRootClientId;
-          try {
-            sectionRootClientId = unlock(getSettings(state)).sectionRootClientId;
-          } catch (e) {}
-          if (sectionRootClientId && canInsertBlockTypeUnmemoized(state, item.name, sectionRootClientId)) {
-            item.rootClientId = sectionRootClientId;
-          } else {
-            delete item.rootClientId;
-          }
-          break;
-        } else {
-          const parentClientId = getBlockRootClientId(state, item.rootClientId);
-          item.rootClientId = parentClientId;
-        }
-      }
-
-      // We could also add non insertable items and gray them out.
-      if (item.hasOwnProperty('rootClientId')) {
-        accumulator.push(item);
-      }
-      return accumulator;
-    }, []);
+  if (options[isFiltered] !== false) {
+    blockTypeInserterItems = blockTypeInserterItems.filter(blockType => canIncludeBlockTypeInInserter(state, blockType, rootClientId));
   } else {
-    blockTypeInserterItems = blockTypeInserterItems.filter(blockType => canIncludeBlockTypeInInserter(state, blockType, rootClientId));
+    blockTypeInserterItems = blockTypeInserterItems.filter(blockType => isBlockVisibleInTheInserter(state, blockType, rootClientId)).map(blockType => ({
+      ...blockType,
+      isAllowedInCurrentRoot: canIncludeBlockTypeInInserter(state, blockType, rootClientId)
+    }));
   }
   const items = blockTypeInserterItems.reduce((accumulator, item) => {
     const {
@@ -13087,7 +13684,7 @@
   });
   const sortedBlockTypes = [...coreItems, ...nonCoreItems];
   return [...sortedBlockTypes, ...syncedPatternInserterItems];
-}, (state, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), unlock(select(STORE_NAME)).getReusableBlocks(), state.blocks.order, state.preferences.insertUsage, ...getInsertBlockTypeDependants(state, rootClientId)]));
+}, (state, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), unlock(select(STORE_NAME)).getReusableBlocks(), state.blocks.order, state.preferences.insertUsage, ...getInsertBlockTypeDependants(select)(state, rootClientId)]));
 
 /**
  * Determines the items that appear in the available block transforms list.
@@ -13096,7 +13693,7 @@
  * transform list and handle its selection.
  *
  * The 'frecency' property is a heuristic (https://en.wikipedia.org/wiki/Frecency)
- * that combines block usage frequenty and recency.
+ * that combines block usage frequency and recency.
  *
  * Items are returned ordered descendingly by their 'frecency'.
  *
@@ -13115,7 +13712,7 @@
  *                                          this item.
  * @property {number}          frecency     Heuristic that combines frequency and recency.
  */
-const getBlockTransformItems = (0,external_wp_data_namespaceObject.createSelector)((state, blocks, rootClientId = null) => {
+const getBlockTransformItems = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => (0,external_wp_data_namespaceObject.createSelector)((state, blocks, rootClientId = null) => {
   const normalizedBlocks = Array.isArray(blocks) ? blocks : [blocks];
   const buildBlockTypeTransformItem = buildBlockTypeItem(state, {
     buildScope: 'transform'
@@ -13129,7 +13726,7 @@
     return accumulator;
   }, []);
   return orderBy(possibleTransforms, block => itemsByName[block.name].frecency, 'desc');
-}, (state, blocks, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), state.preferences.insertUsage, ...getInsertBlockTypeDependants(state, rootClientId)]);
+}, (state, blocks, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), state.preferences.insertUsage, ...getInsertBlockTypeDependants(select)(state, rootClientId)]));
 
 /**
  * Determines whether there are items to show in the inserter.
@@ -13166,7 +13763,7 @@
     blockTypes.push('core/block');
   }
   return blockTypes;
-}, (state, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), unlock(select(STORE_NAME)).getReusableBlocks(), ...getInsertBlockTypeDependants(state, rootClientId)]));
+}, (state, rootClientId) => [(0,external_wp_blocks_namespaceObject.getBlockTypes)(), unlock(select(STORE_NAME)).getReusableBlocks(), ...getInsertBlockTypeDependants(select)(state, rootClientId)]));
 const __experimentalGetAllowedBlocks = (0,external_wp_data_namespaceObject.createSelector)((state, rootClientId = null) => {
   external_wp_deprecated_default()('wp.data.select( "core/block-editor" ).__experimentalGetAllowedBlocks', {
     alternative: 'wp.data.select( "core/block-editor" ).getAllowedBlocks',
@@ -13187,7 +13784,7 @@
  * @typedef {Object} WPDirectInsertBlock
  * @property {string}         name             The type of block.
  * @property {?Object}        attributes       Attributes to pass to the newly created block.
- * @property {?Array<string>} attributesToCopy Attributes to be copied from adjecent blocks when inserted.
+ * @property {?Array<string>} attributesToCopy Attributes to be copied from adjacent blocks when inserted.
  */
 function getDirectInsertBlock(state, rootClientId = null) {
   var _state$blockListSetti;
@@ -13215,7 +13812,21 @@
   const pattern = unlock(select(STORE_NAME)).getPatternBySlug(patternName);
   return pattern ? getParsedPattern(pattern) : null;
 });
-const getAllowedPatternsDependants = select => (state, rootClientId) => [...getAllPatternsDependants(select)(state), ...getInsertBlockTypeDependants(state, rootClientId)];
+const getAllowedPatternsDependants = select => (state, rootClientId) => [...getAllPatternsDependants(select)(state), ...getInsertBlockTypeDependants(select)(state, rootClientId)];
+const patternsWithParsedBlocks = new WeakMap();
+function enhancePatternWithParsedBlocks(pattern) {
+  let enhancedPattern = patternsWithParsedBlocks.get(pattern);
+  if (!enhancedPattern) {
+    enhancedPattern = {
+      ...pattern,
+      get blocks() {
+        return getParsedPattern(pattern).blocks;
+      }
+    };
+    patternsWithParsedBlocks.set(pattern, enhancedPattern);
+  }
+  return enhancedPattern;
+}
 
 /**
  * Returns the list of allowed patterns for inner blocks children.
@@ -13226,7 +13837,7 @@
  * @return {Array?} The list of allowed patterns.
  */
 const __experimentalGetAllowedPatterns = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => {
-  return (0,external_wp_data_namespaceObject.createSelector)((state, rootClientId = null) => {
+  return (0,external_wp_data_namespaceObject.createSelector)((state, rootClientId = null, options = DEFAULT_INSERTER_OPTIONS) => {
     const {
       getAllPatterns
     } = unlock(select(STORE_NAME));
@@ -13236,15 +13847,11 @@
     } = getSettings(state);
     const parsedPatterns = patterns.filter(({
       inserter = true
-    }) => !!inserter).map(getParsedPattern);
-    const availableParsedPatterns = parsedPatterns.filter(({
-      blocks
-    }) => checkAllowListRecursive(blocks, allowedBlockTypes));
-    const patternsAllowed = availableParsedPatterns.filter(({
-      blocks
-    }) => blocks.every(({
-      name
-    }) => canInsertBlockType(state, name, rootClientId)));
+    }) => !!inserter).map(enhancePatternWithParsedBlocks);
+    const availableParsedPatterns = parsedPatterns.filter(pattern => checkAllowListRecursive(getGrammar(pattern), allowedBlockTypes));
+    const patternsAllowed = availableParsedPatterns.filter(pattern => getGrammar(pattern).every(({
+      blockName: name
+    }) => options[isFiltered] !== false ? canInsertBlockType(state, name, rootClientId) : isBlockVisibleInTheInserter(state, name, rootClientId)));
     return patternsAllowed;
   }, getAllowedPatternsDependants(select));
 });
@@ -13257,7 +13864,7 @@
  * or blocks transformations.
  *
  * @param {Object}          state        Editor state.
- * @param {string|string[]} blockNames   Block's name or array of block names to find matching pattens.
+ * @param {string|string[]} blockNames   Block's name or array of block names to find matching patterns.
  * @param {?string}         rootClientId Optional target root client ID.
  *
  * @return {Array} The list of matched block patterns based on declared `blockTypes` and block name.
@@ -13287,7 +13894,7 @@
  * Determines the items that appear in the available pattern transforms list.
  *
  * For now we only handle blocks without InnerBlocks and take into account
- * the `__experimentalRole` property of blocks' attributes for the transformation.
+ * the `role` property of blocks' attributes for the transformation.
  *
  * We return the first set of possible eligible block patterns,
  * by checking the `blockTypes` property. We still have to recurse through
@@ -13306,7 +13913,7 @@
   }
   /**
    * For now we only handle blocks without InnerBlocks and take into account
-   * the `__experimentalRole` property of blocks' attributes for the transformation.
+   * the `role` property of blocks' attributes for the transformation.
    * Note that the blocks have been retrieved through `getBlock`, which doesn't
    * return the inner blocks of an inner block controller, so we still need
    * to check for this case too.
@@ -13447,7 +14054,7 @@
  * @return {boolean} Is navigation mode enabled.
  */
 function isNavigationMode(state) {
-  return state.editorMode === 'navigation';
+  return __unstableGetEditorMode(state) === 'navigation';
 }
 
 /**
@@ -13457,19 +14064,25 @@
  *
  * @return {string} the editor mode.
  */
-function __unstableGetEditorMode(state) {
-  return state.editorMode;
-}
+const __unstableGetEditorMode = (0,external_wp_data_namespaceObject.createRegistrySelector)(select => state => {
+  var _state$settings$edito;
+  if (!window?.__experimentalEditorWriteMode) {
+    return 'edit';
+  }
+  return (_state$settings$edito = state.settings.editorTool) !== null && _state$settings$edito !== void 0 ? _state$settings$edito : select(external_wp_preferences_namespaceObject.store).get('core', 'editorTool');
+});
 
 /**
  * Returns whether block moving mode is enabled.
  *
- * @param {Object} state Editor state.
- *
- * @return {string} Client Id of moving block.
- */
-function selectors_hasBlockMovingClientId(state) {
-  return state.hasBlockMovingClientId;
+ * @deprecated
+ */
+function hasBlockMovingClientId() {
+  external_wp_deprecated_default()('wp.data.select( "core/block-editor" ).hasBlockMovingClientId', {
+    since: '6.7',
+    hint: 'Block moving mode feature has been removed'
+  });
+  return false;
 }
 
 /**
@@ -13564,6 +14177,16 @@
 }
 
 /**
+ * Returns the currently hovered block.
+ *
+ * @param {Object} state Global application state.
+ * @return {Object} Client Id of the hovered block.
+ */
+function getHoveredBlockClientId(state) {
+  return state.hoveredBlockClientId;
+}
+
+/**
  * Returns the list of all hidden blocks.
  *
  * @param {Object} state Global application state.
@@ -13577,7 +14200,7 @@
   return visibleBlocks;
 }, state => [state.blockVisibility]);
 function __unstableHasActiveBlockOverlayActive(state, clientId) {
-  // Prevent overlay on blocks with a non-default editing mode. If the mdoe is
+  // Prevent overlay on blocks with a non-default editing mode. If the mode is
   // 'disabled' then the overlay is redundant since the block can't be
   // selected. If the mode is 'contentOnly' then the overlay is redundant
   // since there will be no controls to interact with once selected.
@@ -13589,13 +14212,10 @@
   if (!canEditBlock(state, clientId)) {
     return true;
   }
-  const editorMode = __unstableGetEditorMode(state);
 
   // In zoom-out mode, the block overlay is always active for section level blocks.
-  if (editorMode === 'zoom-out') {
-    const {
-      sectionRootClientId
-    } = unlock(getSettings(state));
+  if (isZoomOut(state)) {
+    const sectionRootClientId = getSectionRootClientId(state);
     if (sectionRootClientId) {
       const sectionClientIds = getBlockOrder(state, sectionRootClientId);
       if (sectionClientIds?.includes(clientId)) {
@@ -13612,7 +14232,7 @@
   // (reusable block, template part, navigation), unless explicitly disabled
   // with `supports.__experimentalDisableBlockOverlay`.
   const blockSupportDisable = (0,external_wp_blocks_namespaceObject.hasBlockSupport)(getBlockName(state, clientId), '__experimentalDisableBlockOverlay', false);
-  const shouldEnableIfUnselected = editorMode === 'navigation' || (blockSupportDisable ? false : areInnerBlocksControlled(state, clientId));
+  const shouldEnableIfUnselected = blockSupportDisable ? false : areInnerBlocksControlled(state, clientId);
   return shouldEnableIfUnselected && !isBlockSelected(state, clientId) && !hasSelectedInnerBlock(state, clientId, true);
 }
 function __unstableIsWithinBlockOverlay(state, clientId) {
@@ -13664,41 +14284,44 @@
   if (clientId === null) {
     clientId = '';
   }
-  // In zoom-out mode, override the behavior set by
-  // __unstableSetBlockEditingMode to only allow editing the top-level
-  // sections.
-  const editorMode = __unstableGetEditorMode(state);
-  if (editorMode === 'zoom-out') {
-    const {
-      sectionRootClientId
-    } = unlock(getSettings(state));
-    if (clientId === '' /* ROOT_CONTAINER_CLIENT_ID */) {
-      return sectionRootClientId ? 'disabled' : 'contentOnly';
-    }
-    if (clientId === sectionRootClientId) {
-      return 'contentOnly';
-    }
-    const sectionsClientIds = getBlockOrder(state, sectionRootClientId);
-    if (!sectionsClientIds?.includes(clientId)) {
-      return 'disabled';
-    }
-  }
+  const isNavMode = isNavigationMode(state);
+
+  // If the editor is currently not in navigation mode, check if the clientId
+  // has an editing mode set in the regular derived map.
+  // There may be an editing mode set here for synced patterns or in zoomed out
+  // mode.
+  if (!isNavMode && state.derivedBlockEditingModes?.has(clientId)) {
+    return state.derivedBlockEditingModes.get(clientId);
+  }
+
+  // If the editor *is* in navigation mode, the block editing mode states
+  // are stored in the derivedNavModeBlockEditingModes map.
+  if (isNavMode && state.derivedNavModeBlockEditingModes?.has(clientId)) {
+    return state.derivedNavModeBlockEditingModes.get(clientId);
+  }
+
+  // In normal mode, consider that an explicitly set editing mode takes over.
   const blockEditingMode = state.blockEditingModes.get(clientId);
   if (blockEditingMode) {
     return blockEditingMode;
   }
-  if (!clientId) {
+
+  // In normal mode, top level is default mode.
+  if (clientId === '') {
     return 'default';
   }
   const rootClientId = getBlockRootClientId(state, clientId);
   const templateLock = getTemplateLock(state, rootClientId);
+  // If the parent of the block is contentOnly locked, check whether it's a content block.
   if (templateLock === 'contentOnly') {
     const name = getBlockName(state, clientId);
-    const isContent = select(external_wp_blocks_namespaceObject.store).__experimentalHasContentRoleAttribute(name);
+    const {
+      hasContentRoleAttribute
+    } = unlock(select(external_wp_blocks_namespaceObject.store));
+    const isContent = hasContentRoleAttribute(name);
     return isContent ? 'contentOnly' : 'disabled';
   }
-  const parentMode = getBlockEditingMode(state, rootClientId);
-  return parentMode === 'contentOnly' ? 'default' : parentMode;
+  return 'default';
 });
 
 /**
@@ -13802,22 +14425,20 @@
   return getTemporarilyEditingFocusModeToRevert(state);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/undo-ignore.js
-// Keep track of the blocks that should not be pushing an additional
-// undo stack when editing the entity.
-// See the implementation of `syncDerivedUpdates` and `useBlockSync`.
-const undoIgnoreBlocks = new WeakSet();
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/private-actions.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
+;// external ["wp","a11y"]
+const external_wp_a11y_namespaceObject = window["wp"]["a11y"];
+;// ./node_modules/@wordpress/block-editor/build-module/store/private-actions.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const castArray = maybeArray => Array.isArray(maybeArray) ? maybeArray : [maybeArray];
@@ -13830,7 +14451,7 @@
  *
  * @see https://github.com/WordPress/gutenberg/pull/46131
  */
-const privateSettings = ['inserterMediaCategories', 'blockInspectorAnimation'];
+const privateSettings = ['inserterMediaCategories', 'blockInspectorAnimation', 'mediaSideload'];
 
 /**
  * Action that updates the block editor settings and
@@ -13846,14 +14467,27 @@
   stripExperimentalSettings = false,
   reset = false
 } = {}) {
-  let cleanSettings = settings;
+  let incomingSettings = settings;
+  if (Object.hasOwn(incomingSettings, '__unstableIsPreviewMode')) {
+    external_wp_deprecated_default()("__unstableIsPreviewMode argument in wp.data.dispatch('core/block-editor').updateSettings", {
+      since: '6.8',
+      alternative: 'isPreviewMode'
+    });
+    incomingSettings = {
+      ...incomingSettings
+    };
+    incomingSettings.isPreviewMode = incomingSettings.__unstableIsPreviewMode;
+    delete incomingSettings.__unstableIsPreviewMode;
+  }
+  let cleanSettings = incomingSettings;
+
   // There are no plugins in the mobile apps, so there is no
   // need to strip the experimental settings:
   if (stripExperimentalSettings && external_wp_element_namespaceObject.Platform.OS === 'web') {
     cleanSettings = {};
-    for (const key in settings) {
+    for (const key in incomingSettings) {
       if (!privateSettings.includes(key)) {
-        cleanSettings[key] = settings[key];
+        cleanSettings[key] = incomingSettings[key];
       }
     }
   }
@@ -14092,38 +14726,6 @@
 }
 
 /**
- * A higher-order action that mark every change inside a callback as "non-persistent"
- * and ignore pushing to the undo history stack. It's primarily used for synchronized
- * derived updates from the block editor without affecting the undo history.
- *
- * @param {() => void} callback The synchronous callback to derive updates.
- */
-function syncDerivedUpdates(callback) {
-  return ({
-    dispatch,
-    select,
-    registry
-  }) => {
-    registry.batch(() => {
-      // Mark every change in the `callback` as non-persistent.
-      dispatch({
-        type: 'SET_EXPLICIT_PERSISTENT',
-        isPersistentChange: false
-      });
-      callback();
-      dispatch({
-        type: 'SET_EXPLICIT_PERSISTENT',
-        isPersistentChange: undefined
-      });
-
-      // Ignore pushing undo stack for the updated blocks.
-      const updatedBlocks = select.getBlocks();
-      undoIgnoreBlocks.add(updatedBlocks);
-    });
-  };
-}
-
-/**
  * Action that sets the element that had focus when focus leaves the editor canvas.
  *
  * @param {Object} lastFocus The last focused element.
@@ -14200,6 +14802,20 @@
 }
 
 /**
+ * @param {Object} value
+ * @param {string} value.rootClientId The root client ID to insert at.
+ * @param {number} value.index        The index to insert at.
+ *
+ * @return {Object} Action object.
+ */
+function setInsertionPoint(value) {
+  return {
+    type: 'SET_INSERTION_POINT',
+    value
+  };
+}
+
+/**
  * Temporarily modify/unlock the content-only block for editions.
  *
  * @param {string} clientId The client id of the block.
@@ -14208,6 +14824,7 @@
   select,
   dispatch
 }) => {
+  dispatch.selectBlock(clientId);
   dispatch.__unstableMarkNextChangeAsNotPersistent();
   dispatch.updateBlockAttributes(clientId, {
     templateLock: undefined
@@ -14223,11 +14840,63 @@
   dispatch.__unstableSetTemporarilyEditingAsBlocks(clientId, focusModeToRevert);
 };
 
-;// CONCATENATED MODULE: external ["wp","a11y"]
-const external_wp_a11y_namespaceObject = window["wp"]["a11y"];
-;// CONCATENATED MODULE: external ["wp","notices"]
+/**
+ * Sets the zoom level.
+ *
+ * @param {number} zoom the new zoom level
+ * @return {Object} Action object.
+ */
+const setZoomLevel = (zoom = 100) => ({
+  select,
+  dispatch
+}) => {
+  // When switching to zoom-out mode, we need to select the parent section
+  if (zoom !== 100) {
+    const firstSelectedClientId = select.getBlockSelectionStart();
+    const sectionRootClientId = select.getSectionRootClientId();
+    if (firstSelectedClientId) {
+      let sectionClientId;
+      if (sectionRootClientId) {
+        const sectionClientIds = select.getBlockOrder(sectionRootClientId);
+
+        // If the selected block is a section block, use it.
+        if (sectionClientIds?.includes(firstSelectedClientId)) {
+          sectionClientId = firstSelectedClientId;
+        } else {
+          // If the selected block is not a section block, find
+          // the parent section that contains the selected block.
+          sectionClientId = select.getBlockParents(firstSelectedClientId).find(parent => sectionClientIds.includes(parent));
+        }
+      } else {
+        sectionClientId = select.getBlockHierarchyRootClientId(firstSelectedClientId);
+      }
+      if (sectionClientId) {
+        dispatch.selectBlock(sectionClientId);
+      } else {
+        dispatch.clearSelectedBlock();
+      }
+      (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in zoom-out mode.'));
+    }
+  }
+  dispatch({
+    type: 'SET_ZOOM_LEVEL',
+    zoom
+  });
+};
+
+/**
+ * Resets the Zoom state.
+ * @return {Object} Action object.
+ */
+function resetZoomLevel() {
+  return {
+    type: 'RESET_ZOOM_LEVEL'
+  };
+}
+
+;// external ["wp","notices"]
 const external_wp_notices_namespaceObject = window["wp"]["notices"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/selection.js
+;// ./node_modules/@wordpress/block-editor/build-module/utils/selection.js
 /**
  * WordPress dependencies
  */
@@ -14266,7 +14935,7 @@
   }
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/actions.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/actions.js
 /* eslint no-console: [ 'error', { allow: [ 'error', 'warn' ] } ] */
 /**
  * WordPress dependencies
@@ -14278,11 +14947,10 @@
 
 
 
-/**
- * Internal dependencies
- */
-
-
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -14453,6 +15121,21 @@
 }
 
 /**
+ * Returns an action object used in signalling that the block with the
+ * specified client ID has been hovered.
+ *
+ * @param {string} clientId Block client ID.
+ *
+ * @return {Object} Action object.
+ */
+function hoverBlock(clientId) {
+  return {
+    type: 'HOVER_BLOCK',
+    clientId
+  };
+}
+
+/**
  * Yields action objects used in signalling that the block preceding the given
  * clientId (or optionally, its first parent from bottom to top)
  * should be selected.
@@ -14538,7 +15221,7 @@
     initialPosition: __experimentalInitialPosition
   });
   const blockCount = select.getSelectedBlockCount();
-  (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: number of selected blocks */
+  (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: number of selected blocks */
   (0,external_wp_i18n_namespaceObject._n)('%s block selected.', '%s blocks selected.', blockCount), blockCount), 'assertive');
 };
 
@@ -15288,7 +15971,7 @@
   const canRestoreTextSelection = (clientId === clientIdA || clientId === clientIdB) && attributeKey !== undefined && offset !== undefined &&
   // We cannot restore text selection if the RichText identifier
   // is not a defined block attribute key. This can be the case if the
-  // fallback intance ID is used to store selection (and no RichText
+  // fallback instance ID is used to store selection (and no RichText
   // identifier is set), or when the identifier is wrong.
   !!attributeDefinition;
   if (!attributeDefinition) {
@@ -15656,60 +16339,32 @@
  * @param {string} mode Editor mode
  */
 const __unstableSetEditorMode = mode => ({
-  dispatch,
-  select,
   registry
 }) => {
-  // When switching to zoom-out mode, we need to select the parent section
-  if (mode === 'zoom-out') {
-    const firstSelectedClientId = select.getBlockSelectionStart();
-    const {
-      sectionRootClientId
-    } = unlock(registry.select(STORE_NAME).getSettings());
-    if (firstSelectedClientId) {
-      let sectionClientId;
-      if (sectionRootClientId) {
-        const sectionClientIds = select.getBlockOrder(sectionRootClientId);
-        sectionClientId = select.getBlockParents(firstSelectedClientId).find(parent => sectionClientIds.includes(parent));
-      } else {
-        sectionClientId = select.getBlockHierarchyRootClientId(firstSelectedClientId);
-      }
-      if (sectionClientId) {
-        dispatch.selectBlock(sectionClientId);
-      } else {
-        dispatch.clearSelectedBlock();
-      }
-    }
-  }
-  dispatch({
-    type: 'SET_EDITOR_MODE',
-    mode
-  });
+  registry.dispatch(external_wp_preferences_namespaceObject.store).set('core', 'editorTool', mode);
   if (mode === 'navigation') {
-    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.'));
+    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in Write mode.'));
   } else if (mode === 'edit') {
-    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in edit mode. To return to the navigation mode, press Escape.'));
-  } else if (mode === 'zoom-out') {
-    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in zoom-out mode.'));
-  }
-};
-
-/**
- * Action that enables or disables the block moving mode.
- *
- * @param {string|null} hasBlockMovingClientId Enable/Disable block moving mode.
- */
-const setBlockMovingClientId = (hasBlockMovingClientId = null) => ({
-  dispatch
-}) => {
-  dispatch({
-    type: 'SET_BLOCK_MOVING_MODE',
-    hasBlockMovingClientId
-  });
-  if (hasBlockMovingClientId) {
-    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('Use the Tab key and Arrow keys to choose new block location. Use Left and Right Arrow keys to move between nesting levels. Once location is selected press Enter or Space to move the block.'));
-  }
-};
+    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.__)('You are currently in Design mode.'));
+  }
+};
+
+/**
+ * Set the block moving client ID.
+ *
+ * @deprecated
+ *
+ * @return {Object} Action object.
+ */
+function setBlockMovingClientId() {
+  external_wp_deprecated_default()('wp.data.dispatch( "core/block-editor" ).setBlockMovingClientId', {
+    since: '6.7',
+    hint: 'Block moving mode feature has been removed'
+  });
+  return {
+    type: 'DO_NOTHING'
+  };
+}
 
 /**
  * Action that duplicates a list of blocks.
@@ -16107,7 +16762,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/store/index.js
 /**
  * WordPress dependencies
  */
@@ -16164,7 +16819,7 @@
 unlock(store).registerPrivateActions(private_actions_namespaceObject);
 unlock(store).registerPrivateSelectors(private_selectors_namespaceObject);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-settings/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-settings/index.js
 /**
  * WordPress dependencies
  */
@@ -16195,9 +16850,7 @@
   const {
     clientId = null
   } = useBlockEditContext();
-  return (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getBlockSettings(clientId, ...paths),
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  [clientId, ...paths]);
+  return (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getBlockSettings(clientId, ...paths), [clientId, ...paths]);
 }
 
 /**
@@ -16206,9 +16859,10 @@
  * It looks up the setting first in the block instance hierarchy.
  * If none is found, it'll look it up in the block editor settings.
  *
+ * @deprecated 6.5.0 Use useSettings instead.
+ *
  * @param {string} path The path to the setting.
  * @return {any} Returns the value defined for the setting.
- * @deprecated 6.5.0 Use useSettings instead.
  * @example
  * ```js
  * const isEnabled = useSetting( 'typography.dropCap' );
@@ -16224,7 +16878,9 @@
   return value;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/fluid-utils.js
+;// external ["wp","styleEngine"]
+const external_wp_styleEngine_namespaceObject = window["wp"]["styleEngine"];
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/fluid-utils.js
 /**
  * The fluid utilities must match the backend equivalent.
  * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php
@@ -16470,7 +17126,271 @@
   return Number.isFinite(value) ? parseFloat(Math.round(value * base) / base) : undefined;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/typography-utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/utils/format-font-style.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Formats font styles to human readable names.
+ *
+ * @param {string} fontStyle font style string
+ * @return {Object} new object with formatted font style
+ */
+function formatFontStyle(fontStyle) {
+  if (!fontStyle) {
+    return {};
+  }
+  if (typeof fontStyle === 'object') {
+    return fontStyle;
+  }
+  let name;
+  switch (fontStyle) {
+    case 'normal':
+      name = (0,external_wp_i18n_namespaceObject._x)('Regular', 'font style');
+      break;
+    case 'italic':
+      name = (0,external_wp_i18n_namespaceObject._x)('Italic', 'font style');
+      break;
+    case 'oblique':
+      name = (0,external_wp_i18n_namespaceObject._x)('Oblique', 'font style');
+      break;
+    default:
+      name = fontStyle;
+      break;
+  }
+  return {
+    name,
+    value: fontStyle
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/format-font-weight.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Formats font weights to human readable names.
+ *
+ * @param {string} fontWeight font weight string
+ * @return {Object} new object with formatted font weight
+ */
+function formatFontWeight(fontWeight) {
+  if (!fontWeight) {
+    return {};
+  }
+  if (typeof fontWeight === 'object') {
+    return fontWeight;
+  }
+  let name;
+  switch (fontWeight) {
+    case 'normal':
+    case '400':
+      name = (0,external_wp_i18n_namespaceObject._x)('Regular', 'font weight');
+      break;
+    case 'bold':
+    case '700':
+      name = (0,external_wp_i18n_namespaceObject._x)('Bold', 'font weight');
+      break;
+    case '100':
+      name = (0,external_wp_i18n_namespaceObject._x)('Thin', 'font weight');
+      break;
+    case '200':
+      name = (0,external_wp_i18n_namespaceObject._x)('Extra Light', 'font weight');
+      break;
+    case '300':
+      name = (0,external_wp_i18n_namespaceObject._x)('Light', 'font weight');
+      break;
+    case '500':
+      name = (0,external_wp_i18n_namespaceObject._x)('Medium', 'font weight');
+      break;
+    case '600':
+      name = (0,external_wp_i18n_namespaceObject._x)('Semi Bold', 'font weight');
+      break;
+    case '800':
+      name = (0,external_wp_i18n_namespaceObject._x)('Extra Bold', 'font weight');
+      break;
+    case '900':
+      name = (0,external_wp_i18n_namespaceObject._x)('Black', 'font weight');
+      break;
+    case '1000':
+      name = (0,external_wp_i18n_namespaceObject._x)('Extra Black', 'font weight');
+      break;
+    default:
+      name = fontWeight;
+      break;
+  }
+  return {
+    name,
+    value: fontWeight
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/get-font-styles-and-weights.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+const FONT_STYLES = [{
+  name: (0,external_wp_i18n_namespaceObject._x)('Regular', 'font style'),
+  value: 'normal'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Italic', 'font style'),
+  value: 'italic'
+}];
+const FONT_WEIGHTS = [{
+  name: (0,external_wp_i18n_namespaceObject._x)('Thin', 'font weight'),
+  value: '100'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Extra Light', 'font weight'),
+  value: '200'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Light', 'font weight'),
+  value: '300'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Regular', 'font weight'),
+  value: '400'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Medium', 'font weight'),
+  value: '500'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Semi Bold', 'font weight'),
+  value: '600'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Bold', 'font weight'),
+  value: '700'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Extra Bold', 'font weight'),
+  value: '800'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Black', 'font weight'),
+  value: '900'
+}, {
+  name: (0,external_wp_i18n_namespaceObject._x)('Extra Black', 'font weight'),
+  value: '1000'
+}];
+
+/**
+ * Builds a list of font style and weight options based on font family faces.
+ * Defaults to the standard font styles and weights if no font family faces are provided.
+ *
+ * @param {Array} fontFamilyFaces font family faces array
+ * @return {Object} new object with combined and separated font style and weight properties
+ */
+function getFontStylesAndWeights(fontFamilyFaces) {
+  let fontStyles = [];
+  let fontWeights = [];
+  const combinedStyleAndWeightOptions = [];
+  const isSystemFont = !fontFamilyFaces || fontFamilyFaces?.length === 0;
+  let isVariableFont = false;
+  fontFamilyFaces?.forEach(face => {
+    // Check for variable font by looking for a space in the font weight value. e.g. "100 900"
+    if ('string' === typeof face.fontWeight && /\s/.test(face.fontWeight.trim())) {
+      isVariableFont = true;
+
+      // Find font weight start and end values.
+      let [startValue, endValue] = face.fontWeight.split(' ');
+      startValue = parseInt(startValue.slice(0, 1));
+      if (endValue === '1000') {
+        endValue = 10;
+      } else {
+        endValue = parseInt(endValue.slice(0, 1));
+      }
+
+      // Create font weight options for available variable weights.
+      for (let i = startValue; i <= endValue; i++) {
+        const fontWeightValue = `${i.toString()}00`;
+        if (!fontWeights.some(weight => weight.value === fontWeightValue)) {
+          fontWeights.push(formatFontWeight(fontWeightValue));
+        }
+      }
+    }
+
+    // Format font style and weight values.
+    const fontWeight = formatFontWeight('number' === typeof face.fontWeight ? face.fontWeight.toString() : face.fontWeight);
+    const fontStyle = formatFontStyle(face.fontStyle);
+
+    // Create font style and font weight lists without duplicates.
+    if (fontStyle && Object.keys(fontStyle).length) {
+      if (!fontStyles.some(style => style.value === fontStyle.value)) {
+        fontStyles.push(fontStyle);
+      }
+    }
+    if (fontWeight && Object.keys(fontWeight).length) {
+      if (!fontWeights.some(weight => weight.value === fontWeight.value)) {
+        if (!isVariableFont) {
+          fontWeights.push(fontWeight);
+        }
+      }
+    }
+  });
+
+  // If there is no font weight of 600 or above, then include faux bold as an option.
+  if (!fontWeights.some(weight => weight.value >= '600')) {
+    fontWeights.push({
+      name: (0,external_wp_i18n_namespaceObject._x)('Bold', 'font weight'),
+      value: '700'
+    });
+  }
+
+  // If there is no italic font style, then include faux italic as an option.
+  if (!fontStyles.some(style => style.value === 'italic')) {
+    fontStyles.push({
+      name: (0,external_wp_i18n_namespaceObject._x)('Italic', 'font style'),
+      value: 'italic'
+    });
+  }
+
+  // Use default font styles and weights for system fonts.
+  if (isSystemFont) {
+    fontStyles = FONT_STYLES;
+    fontWeights = FONT_WEIGHTS;
+  }
+
+  // Use default styles and weights if there are no available styles or weights from the provided font faces.
+  fontStyles = fontStyles.length === 0 ? FONT_STYLES : fontStyles;
+  fontWeights = fontWeights.length === 0 ? FONT_WEIGHTS : fontWeights;
+
+  // Generate combined font style and weight options for available fonts.
+  fontStyles.forEach(({
+    name: styleName,
+    value: styleValue
+  }) => {
+    fontWeights.forEach(({
+      name: weightName,
+      value: weightValue
+    }) => {
+      const optionName = styleValue === 'normal' ? weightName : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: Font weight name. 2: Font style name. */
+      (0,external_wp_i18n_namespaceObject._x)('%1$s %2$s', 'font'), weightName, styleName);
+      combinedStyleAndWeightOptions.push({
+        key: `${styleValue}-${weightValue}`,
+        name: optionName,
+        style: {
+          fontStyle: styleValue,
+          fontWeight: weightValue
+        }
+      });
+    });
+  });
+  return {
+    fontStyles,
+    fontWeights,
+    combinedStyleAndWeightOptions,
+    isSystemFont,
+    isVariableFont
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/typography-utils.js
 /**
  * The fluid utilities must match the backend equivalent.
  * See: gutenberg_get_typography_font_size_value() in lib/block-supports/typography.php
@@ -16482,6 +17402,7 @@
  */
 
 
+
 /**
  * @typedef {Object} FluidPreset
  * @property {string|undefined}  max A maximum font size value.
@@ -16509,10 +17430,12 @@
  * Returns a font-size value based on a given font-size preset.
  * Takes into account fluid typography parameters and attempts to return a css formula depending on available, valid values.
  *
+ * The Core PHP equivalent is wp_get_typography_font_size_value().
+ *
  * @param {Preset}                     preset
  * @param {Object}                     settings
  * @param {boolean|TypographySettings} settings.typography.fluid  Whether fluid typography is enabled, and, optionally, fluid font size options.
- * @param {Object?}                    settings.typography.layout Layout options.
+ * @param {?Object}                    settings.typography.layout Layout options.
  *
  * @return {string|*} A font-size value or the value of preset.size.
  */
@@ -16520,17 +17443,25 @@
   const {
     size: defaultSize
   } = preset;
-  if (!isFluidTypographyEnabled(settings?.typography)) {
-    return defaultSize;
-  }
+
   /*
-   * Checks whether a font size has explicitly bypassed fluid calculations.
-   * Also catches falsy values and 0/'0'.
-   * Fluid calculations cannot be performed on `0`.
+   * Catch falsy values and 0/'0'. Fluid calculations cannot be performed on `0`.
+   * Also return early when a preset font size explicitly disables fluid typography with `false`.
    */
   if (!defaultSize || '0' === defaultSize || false === preset?.fluid) {
     return defaultSize;
   }
+
+  /*
+   * Return early when fluid typography is disabled in the settings, and there
+   * are no local settings to enable it for the individual preset.
+   *
+   * If this condition isn't met, either the settings or individual preset settings
+   * have enabled fluid typography.
+   */
+  if (!isFluidTypographyEnabled(settings?.typography) && !isFluidTypographyEnabled(preset)) {
+    return defaultSize;
+  }
   let fluidTypographySettings = getFluidTypographyOptionsFromSettings(settings);
   fluidTypographySettings = typeof fluidTypographySettings?.fluid === 'object' ? fluidTypographySettings?.fluid : {};
   const fluidFontSizeValue = getComputedFluidTypographyValue({
@@ -16573,15 +17504,133 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/utils.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
+/**
+ * Returns an object of merged font families and the font faces from the selected font family
+ * based on the theme.json settings object and the currently selected font family.
+ *
+ * @param {Object} settings           Theme.json settings.
+ * @param {string} selectedFontFamily Decoded font family string.
+ * @return {Object} Merged font families and font faces from the selected font family.
+ */
+function getMergedFontFamiliesAndFontFamilyFaces(settings, selectedFontFamily) {
+  var _fontFamilies$find$fo;
+  const fontFamiliesFromSettings = settings?.typography?.fontFamilies;
+  const fontFamilies = ['default', 'theme', 'custom'].flatMap(key => {
+    var _fontFamiliesFromSett;
+    return (_fontFamiliesFromSett = fontFamiliesFromSettings?.[key]) !== null && _fontFamiliesFromSett !== void 0 ? _fontFamiliesFromSett : [];
+  });
+  const fontFamilyFaces = (_fontFamilies$find$fo = fontFamilies.find(family => family.fontFamily === selectedFontFamily)?.fontFace) !== null && _fontFamilies$find$fo !== void 0 ? _fontFamilies$find$fo : [];
+  return {
+    fontFamilies,
+    fontFamilyFaces
+  };
+}
+
+/**
+ * Returns the nearest font weight value from the available font weight list based on the new font weight.
+ * The nearest font weight is the one with the smallest difference from the new font weight.
+ *
+ * @param {Array}  availableFontWeights Array of available font weights.
+ * @param {string} newFontWeightValue   New font weight value.
+ * @return {string} Nearest font weight.
+ */
+function findNearestFontWeight(availableFontWeights, newFontWeightValue) {
+  newFontWeightValue = 'number' === typeof newFontWeightValue ? newFontWeightValue.toString() : newFontWeightValue;
+  if (!newFontWeightValue || typeof newFontWeightValue !== 'string') {
+    return '';
+  }
+  if (!availableFontWeights || availableFontWeights.length === 0) {
+    return newFontWeightValue;
+  }
+  const nearestFontWeight = availableFontWeights?.reduce((nearest, {
+    value: fw
+  }) => {
+    const currentDiff = Math.abs(parseInt(fw) - parseInt(newFontWeightValue));
+    const nearestDiff = Math.abs(parseInt(nearest) - parseInt(newFontWeightValue));
+    return currentDiff < nearestDiff ? fw : nearest;
+  }, availableFontWeights[0]?.value);
+  return nearestFontWeight;
+}
+
+/**
+ * Returns the nearest font style based on the new font style.
+ * Defaults to an empty string if the new font style is not valid or available.
+ *
+ * @param {Array}  availableFontStyles Array of available font weights.
+ * @param {string} newFontStyleValue   New font style value.
+ * @return {string} Nearest font style or an empty string.
+ */
+function findNearestFontStyle(availableFontStyles, newFontStyleValue) {
+  if (typeof newFontStyleValue !== 'string' || !newFontStyleValue) {
+    return '';
+  }
+  const validStyles = ['normal', 'italic', 'oblique'];
+  if (!validStyles.includes(newFontStyleValue)) {
+    return '';
+  }
+  if (!availableFontStyles || availableFontStyles.length === 0 || availableFontStyles.find(style => style.value === newFontStyleValue)) {
+    return newFontStyleValue;
+  }
+  if (newFontStyleValue === 'oblique' && !availableFontStyles.find(style => style.value === 'oblique')) {
+    return 'italic';
+  }
+  return '';
+}
+
+/**
+ * Returns the nearest font style and weight based on the available font family faces and the new font style and weight.
+ *
+ * @param {Array}  fontFamilyFaces Array of available font family faces.
+ * @param {string} fontStyle       New font style. Defaults to previous value.
+ * @param {string} fontWeight      New font weight. Defaults to previous value.
+ * @return {Object} Nearest font style and font weight.
+ */
+function findNearestStyleAndWeight(fontFamilyFaces, fontStyle, fontWeight) {
+  let nearestFontStyle = fontStyle;
+  let nearestFontWeight = fontWeight;
+  const {
+    fontStyles,
+    fontWeights,
+    combinedStyleAndWeightOptions
+  } = getFontStylesAndWeights(fontFamilyFaces);
+
+  // Check if the new font style and weight are available in the font family faces.
+  const hasFontStyle = fontStyles?.some(({
+    value: fs
+  }) => fs === fontStyle);
+  const hasFontWeight = fontWeights?.some(({
+    value: fw
+  }) => fw?.toString() === fontWeight?.toString());
+  if (!hasFontStyle) {
+    /*
+     * Default to italic if oblique is not available.
+     * Or find the nearest font style based on the nearest font weight.
+     */
+    nearestFontStyle = fontStyle ? findNearestFontStyle(fontStyles, fontStyle) : combinedStyleAndWeightOptions?.find(option => option.style.fontWeight === findNearestFontWeight(fontWeights, fontWeight))?.style?.fontStyle;
+  }
+  if (!hasFontWeight) {
+    /*
+     * Find the nearest font weight based on available weights.
+     * Or find the nearest font weight based on the nearest font style.
+     */
+    nearestFontWeight = fontWeight ? findNearestFontWeight(fontWeights, fontWeight) : combinedStyleAndWeightOptions?.find(option => option.style.fontStyle === (nearestFontStyle || fontStyle))?.style?.fontWeight;
+  }
+  return {
+    nearestFontStyle,
+    nearestFontWeight
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/utils.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
 
 
 /**
@@ -16805,9 +17854,8 @@
  */
 function getValueFromVariable(features, blockName, variable) {
   if (!variable || typeof variable !== 'string') {
-    if (variable?.ref && typeof variable?.ref === 'string') {
-      const refPath = variable.ref.split('.');
-      variable = getValueFromObjectPath(features, refPath);
+    if (typeof variable?.ref === 'string') {
+      variable = getValueFromObjectPath(features, variable.ref);
       // Presence of another ref indicates a reference to another dynamic value.
       // Pointing to another dynamic value is not supported.
       if (!variable || !!variable?.ref) {
@@ -16986,7 +18034,82 @@
   return result.join(',');
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/context.js
+/**
+ * Looks up a theme file URI based on a relative path.
+ *
+ * @param {string}        file          A relative path.
+ * @param {Array<Object>} themeFileURIs A collection of absolute theme file URIs and their corresponding file paths.
+ * @return {string} A resolved theme file URI, if one is found in the themeFileURIs collection.
+ */
+function getResolvedThemeFilePath(file, themeFileURIs) {
+  if (!file || !themeFileURIs || !Array.isArray(themeFileURIs)) {
+    return file;
+  }
+  const uri = themeFileURIs.find(themeFileUri => themeFileUri?.name === file);
+  if (!uri?.href) {
+    return file;
+  }
+  return uri?.href;
+}
+
+/**
+ * Resolves ref values in theme JSON.
+ *
+ * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.
+ * @param {Object}        tree      A theme.json object.
+ * @return {*} The resolved value or incoming ruleValue.
+ */
+function getResolvedRefValue(ruleValue, tree) {
+  if (!ruleValue || !tree) {
+    return ruleValue;
+  }
+
+  /*
+   * Where the rule value is an object with a 'ref' property pointing
+   * to a path, this converts that path into the value at that path.
+   * For example: { "ref": "style.color.background" } => "#fff".
+   */
+  if (typeof ruleValue !== 'string' && ruleValue?.ref) {
+    const resolvedRuleValue = (0,external_wp_styleEngine_namespaceObject.getCSSValueFromRawStyle)(getValueFromObjectPath(tree, ruleValue.ref));
+
+    /*
+     * Presence of another ref indicates a reference to another dynamic value.
+     * Pointing to another dynamic value is not supported.
+     */
+    if (resolvedRuleValue?.ref) {
+      return undefined;
+    }
+    if (resolvedRuleValue === undefined) {
+      return ruleValue;
+    }
+    return resolvedRuleValue;
+  }
+  return ruleValue;
+}
+
+/**
+ * Resolves ref and relative path values in theme JSON.
+ *
+ * @param {Object|string} ruleValue A block style value that may contain a reference to a theme.json value.
+ * @param {Object}        tree      A theme.json object.
+ * @return {*} The resolved value or incoming ruleValue.
+ */
+function getResolvedValue(ruleValue, tree) {
+  if (!ruleValue || !tree) {
+    return ruleValue;
+  }
+
+  // Resolve ref values.
+  const resolvedValue = getResolvedRefValue(ruleValue, tree);
+
+  // Resolve relative paths.
+  if (resolvedValue?.url) {
+    resolvedValue.url = getResolvedThemeFilePath(resolvedValue.url, tree?._links?.['wp:theme-file']);
+  }
+  return resolvedValue;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/context.js
 /**
  * WordPress dependencies
  */
@@ -16999,7 +18122,7 @@
 };
 const GlobalStylesContext = (0,external_wp_element_namespaceObject.createContext)(DEFAULT_GLOBAL_STYLES_CONTEXT);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/hooks.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/hooks.js
 /**
  * External dependencies
  */
@@ -17104,12 +18227,6 @@
   }
   return [result, setStyle];
 }
-function useGlobalStyleLinks() {
-  const {
-    merged: mergedConfig
-  } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext);
-  return mergedConfig?._links;
-}
 
 /**
  * React hook that overrides a global settings object with block and element specific settings.
@@ -17230,6 +18347,14 @@
         };
       }
     });
+    ['backgroundImage', 'backgroundSize'].forEach(key => {
+      if (!supportedStyles.includes(key)) {
+        updatedSettings.background = {
+          ...updatedSettings.background,
+          [key]: false
+        };
+      }
+    });
     updatedSettings.shadow = supportedStyles.includes('shadow') ? updatedSettings.shadow : false;
 
     // Text alignment is only available for blocks.
@@ -17296,9 +18421,9 @@
   }, [customGradients, themeGradients, defaultGradients, shouldDisplayDefaultGradients]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/clsx/dist/clsx.mjs
+;// ./node_modules/clsx/dist/clsx.mjs
 function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const dist_clsx = (clsx);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/utils.js
 /**
  * WordPress dependencies
  */
@@ -17397,8 +18522,27 @@
   return skipSerialization;
 }
 const pendingStyleOverrides = new WeakMap();
+
+/**
+ * Override a block editor settings style. Leave the ID blank to create a new
+ * style.
+ *
+ * @param {Object}  override     Override object.
+ * @param {?string} override.id  Id of the style override, leave blank to create
+ *                               a new style.
+ * @param {string}  override.css CSS to apply.
+ */
 function useStyleOverride({
   id,
+  css
+}) {
+  return usePrivateStyleOverride({
+    id,
+    css
+  });
+}
+function usePrivateStyleOverride({
+  id,
   css,
   assets,
   __unstableType,
@@ -17606,11 +18750,11 @@
 }
 function BlockProps({
   index,
-  useBlockProps,
+  useBlockProps: hook,
   setAllWrapperProps,
   ...props
 }) {
-  const wrapperProps = useBlockProps(props);
+  const wrapperProps = hook(props);
   const setWrapperProps = next => setAllWrapperProps(prev => {
     const nextAll = [...prev];
     nextAll[index] = next;
@@ -17720,7 +18864,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/compat.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/compat.js
 /**
  * WordPress dependencies
  */
@@ -17737,9 +18881,9 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/compat/migrateLightBlockWrapper', migrateLightBlockWrapper);
 
-;// CONCATENATED MODULE: external ["wp","components"]
+;// external ["wp","components"]
 const external_wp_components_namespaceObject = window["wp"]["components"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/groups.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-controls/groups.js
 /**
  * WordPress dependencies
  */
@@ -17758,7 +18902,7 @@
 };
 /* harmony default export */ const block_controls_groups = (groups);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/hook.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-controls/hook.js
 /**
  * WordPress dependencies
  */
@@ -17779,17 +18923,15 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/fill.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-controls/fill.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function BlockControlsFill({
@@ -17825,10 +18967,10 @@
   });
 }
 
-;// CONCATENATED MODULE: external ["wp","warning"]
+;// external ["wp","warning"]
 const external_wp_warning_namespaceObject = window["wp"]["warning"];
 var external_wp_warning_default = /*#__PURE__*/__webpack_require__.n(external_wp_warning_namespaceObject);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/slot.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-controls/slot.js
 /**
  * WordPress dependencies
  */
@@ -17858,15 +19000,18 @@
       value: contextState
     }]]
   }), [toolbarState, contextState]);
-  const Slot = block_controls_groups[group]?.Slot;
-  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(Slot?.__unstableName);
-  if (!Slot) {
+  const slotFill = block_controls_groups[group];
+  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(slotFill.name);
+  if (!slotFill) {
      true ? external_wp_warning_default()(`Unknown BlockControls group "${group}" provided.`) : 0;
     return null;
   }
   if (!fills?.length) {
     return null;
   }
+  const {
+    Slot
+  } = slotFill;
   const slot = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Slot, {
     ...props,
     bubblesVirtually: true,
@@ -17880,7 +19025,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-controls/index.js
 /**
  * Internal dependencies
  */
@@ -17905,7 +19050,7 @@
 };
 /* harmony default export */ const block_controls = (BlockControls);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/justify-left.js
+;// ./node_modules/@wordpress/icons/build-module/library/justify-left.js
 /**
  * WordPress dependencies
  */
@@ -17920,7 +19065,7 @@
 });
 /* harmony default export */ const justify_left = (justifyLeft);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/justify-center.js
+;// ./node_modules/@wordpress/icons/build-module/library/justify-center.js
 /**
  * WordPress dependencies
  */
@@ -17935,7 +19080,7 @@
 });
 /* harmony default export */ const justify_center = (justifyCenter);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/justify-right.js
+;// ./node_modules/@wordpress/icons/build-module/library/justify-right.js
 /**
  * WordPress dependencies
  */
@@ -17950,7 +19095,7 @@
 });
 /* harmony default export */ const justify_right = (justifyRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/justify-space-between.js
+;// ./node_modules/@wordpress/icons/build-module/library/justify-space-between.js
 /**
  * WordPress dependencies
  */
@@ -17965,7 +19110,7 @@
 });
 /* harmony default export */ const justify_space_between = (justifySpaceBetween);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/justify-stretch.js
+;// ./node_modules/@wordpress/icons/build-module/library/justify-stretch.js
 /**
  * WordPress dependencies
  */
@@ -17980,7 +19125,7 @@
 });
 /* harmony default export */ const justify_stretch = (justifyStretch);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-right.js
+;// ./node_modules/@wordpress/icons/build-module/library/arrow-right.js
 /**
  * WordPress dependencies
  */
@@ -17995,7 +19140,7 @@
 });
 /* harmony default export */ const arrow_right = (arrowRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-down.js
+;// ./node_modules/@wordpress/icons/build-module/library/arrow-down.js
 /**
  * WordPress dependencies
  */
@@ -18010,7 +19155,7 @@
 });
 /* harmony default export */ const arrow_down = (arrowDown);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/definitions.js
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/definitions.js
 // Layout definitions keyed by layout type.
 // Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type.
 // If making changes or additions to layout definitions, be sure to update the corresponding PHP definitions in
@@ -18160,7 +19305,7 @@
   }
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/utils.js
 /**
  * WordPress dependencies
  */
@@ -18180,13 +19325,7 @@
  * @return {string} - CSS selector.
  */
 function appendSelectors(selectors, append = '') {
-  // Ideally we shouldn't need the `.editor-styles-wrapper` increased specificity here
-  // The problem though is that we have a `.editor-styles-wrapper p { margin: reset; }` style
-  // it's used to reset the default margin added by wp-admin to paragraphs
-  // so we need this to be higher speficity otherwise, it won't be applied to paragraphs inside containers
-  // When the post editor is fully iframed, this extra classname could be removed.
-
-  return selectors.split(',').map(subselector => `.editor-styles-wrapper ${subselector}${append ? ` ${append}` : ''}`).join(',');
+  return selectors.split(',').map(subselector => `${subselector}${append ? ` ${append}` : ''}`).join(',');
 }
 
 /**
@@ -18245,7 +19384,7 @@
   return alignmentInfo;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-all.js
+;// ./node_modules/@wordpress/icons/build-module/library/sides-all.js
 /**
  * WordPress dependencies
  */
@@ -18260,11 +19399,10 @@
 });
 /* harmony default export */ const sides_all = (sidesAll);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-horizontal.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-horizontal.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesHorizontal = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18283,11 +19421,10 @@
 });
 /* harmony default export */ const sides_horizontal = (sidesHorizontal);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-vertical.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-vertical.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesVertical = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18306,11 +19443,10 @@
 });
 /* harmony default export */ const sides_vertical = (sidesVertical);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-top.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-top.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesTop = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18327,11 +19463,10 @@
 });
 /* harmony default export */ const sides_top = (sidesTop);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-right.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-right.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18348,11 +19483,10 @@
 });
 /* harmony default export */ const sides_right = (sidesRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-bottom.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-bottom.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesBottom = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18364,19 +19498,15 @@
       opacity: 0.25
     }
   }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "m16.5 19.5h-9v-1.5h9z",
-    style: {
-      fill: '#1e1e1e'
-    }
+    d: "m16.5 19.5h-9v-1.5h9z"
   })]
 });
 /* harmony default export */ const sides_bottom = (sidesBottom);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/sides-left.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/sides-left.js
+/**
+ * WordPress dependencies
+ */
 
 
 const sidesLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -18393,7 +19523,7 @@
 });
 /* harmony default export */ const sides_left = (sidesLeft);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/utils.js
 /**
  * WordPress dependencies
  */
@@ -18549,54 +19679,6 @@
 }
 
 /**
- * Gets an items with the most occurrence within an array
- * https://stackoverflow.com/a/20762713
- *
- * @param {Array<any>} arr Array of items to check.
- * @return {any} The item with the most occurrences.
- */
-function mode(arr) {
-  return arr.sort((a, b) => arr.filter(v => v === a).length - arr.filter(v => v === b).length).pop();
-}
-
-/**
- * Gets the 'all' input value from values data.
- *
- * @param {Object} values Box spacing values
- *
- * @return {string} The most common value from all sides of box.
- */
-function getAllRawValue(values = {}) {
-  return mode(Object.values(values));
-}
-
-/**
- * Checks to determine if values are mixed.
- *
- * @param {Object} values Box values.
- * @param {Array}  sides  Sides that values relate to.
- *
- * @return {boolean} Whether values are mixed.
- */
-function isValuesMixed(values = {}, sides = ALL_SIDES) {
-  return Object.values(values).length >= 1 && Object.values(values).length < sides.length || new Set(Object.values(values)).size > 1;
-}
-
-/**
- * Checks to determine if values are defined.
- *
- * @param {Object} values Box values.
- *
- * @return {boolean} Whether values are defined.
- */
-function isValuesDefined(values) {
-  if (values === undefined || values === null) {
-    return false;
-  }
-  return Object.values(values).filter(value => !!value).length > 0;
-}
-
-/**
  * Determines whether a particular axis has support. If no axis is
  * specified, this function checks if either axis is supported.
  *
@@ -18621,62 +19703,6 @@
 }
 
 /**
- * Determines which menu options should be included in the SidePicker.
- *
- * @param {Array} sides Supported sides.
- *
- * @return {Object} Menu options with each option containing label & icon.
- */
-function getSupportedMenuItems(sides) {
-  if (!sides || !sides.length) {
-    return {};
-  }
-  const menuItems = {};
-
-  // Determine the primary "side" menu options.
-  const hasHorizontalSupport = hasAxisSupport(sides, 'horizontal');
-  const hasVerticalSupport = hasAxisSupport(sides, 'vertical');
-  if (hasHorizontalSupport && hasVerticalSupport) {
-    menuItems.axial = {
-      label: LABELS.axial,
-      icon: ICONS.axial
-    };
-  } else if (hasHorizontalSupport) {
-    menuItems.axial = {
-      label: LABELS.horizontal,
-      icon: ICONS.horizontal
-    };
-  } else if (hasVerticalSupport) {
-    menuItems.axial = {
-      label: LABELS.vertical,
-      icon: ICONS.vertical
-    };
-  }
-
-  // Track whether we have any individual sides so we can omit the custom
-  // option if required.
-  let numberOfIndividualSides = 0;
-  ALL_SIDES.forEach(side => {
-    if (sides.includes(side)) {
-      numberOfIndividualSides += 1;
-      menuItems[side] = {
-        label: LABELS[side],
-        icon: ICONS[side]
-      };
-    }
-  });
-
-  // Add custom item if there are enough sides to warrant a separated view.
-  if (numberOfIndividualSides > 1) {
-    menuItems.custom = {
-      label: LABELS.custom,
-      icon: ICONS.custom
-    };
-  }
-  return menuItems;
-}
-
-/**
  * Checks if the supported sides are balanced for each axis.
  * - Horizontal - both left and right sides are supported.
  * - Vertical - both top and bottom are supported.
@@ -18720,13 +19746,14 @@
   // - Has no values and the supported sides are balanced
   const hasMatchingAxialValues = top === bottom && left === right && (!!top || !!left);
   const hasNoValuesAndBalancedSides = !sideValues.length && hasBalancedSidesSupport(sides);
+  const hasOnlyAxialSides = sides?.includes('horizontal') && sides?.includes('vertical') && sides?.length === 2;
   if (hasAxisSupport(sides) && (hasMatchingAxialValues || hasNoValuesAndBalancedSides)) {
     return VIEWS.axial;
   }
 
-  // Single side.
+  // Only axial sides are supported and single value defined.
   // - Ensure the side returned is the first side that has a value.
-  if (sideValues.length === 1) {
+  if (hasOnlyAxialSides && sideValues.length === 1) {
     let side;
     Object.entries(values).some(([key, value]) => {
       side = key;
@@ -18744,7 +19771,7 @@
   return VIEWS.custom;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/gap.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/gap.js
 /**
  * Internal dependencies
  */
@@ -18755,7 +19782,7 @@
  * The string check is for backwards compatibility before Gutenberg supported
  * split gap values (row and column) and the value was a string n + unit.
  *
- * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.
+ * @param {?string | ?Object} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.
  * @return {Object|null}                    A value to pass to the BoxControl component.
  */
 function getGapBoxControlValueFromStyle(blockGapValue) {
@@ -18772,8 +19799,8 @@
 /**
  * Returns a CSS value for the `gap` property from a given blockGap style.
  *
- * @param {string? | Object?} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.
- * @param {string?}           defaultValue  A default gap value.
+ * @param {?string | ?Object} blockGapValue A block gap string or axial object value, e.g., '10px' or { top: '10px', left: '10px'}.
+ * @param {?string}           defaultValue  A default gap value.
  * @return {string|null}                    The concatenated gap value (row and column).
  */
 function getGapCSSValue(blockGapValue, defaultValue = '0') {
@@ -18786,79 +19813,108 @@
   return row === column ? row : `${row} ${column}`;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-control/icons.js
-/**
- * WordPress dependencies
- */
-
-
-const alignBottom = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
-    d: "M15 4H9v11h6V4zM4 18.5V20h16v-1.5H4z"
-  })
-});
-const alignCenter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
-    d: "M20 11h-5V4H9v7H4v1.5h5V20h6v-7.5h5z"
-  })
-});
-const alignTop = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
+;// ./node_modules/@wordpress/icons/build-module/library/justify-top.js
+/**
+ * WordPress dependencies
+ */
+
+
+const justifyTop = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
     d: "M9 20h6V9H9v11zM4 4v1.5h16V4H4z"
   })
 });
-const alignStretch = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
+/* harmony default export */ const justify_top = (justifyTop);
+
+;// ./node_modules/@wordpress/icons/build-module/library/justify-center-vertical.js
+/**
+ * WordPress dependencies
+ */
+
+
+const justifyCenterVertical = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M20 11h-5V4H9v7H4v1.5h5V20h6v-7.5h5z"
+  })
+});
+/* harmony default export */ const justify_center_vertical = (justifyCenterVertical);
+
+;// ./node_modules/@wordpress/icons/build-module/library/justify-bottom.js
+/**
+ * WordPress dependencies
+ */
+
+
+const justifyBottom = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M15 4H9v11h6V4zM4 18.5V20h16v-1.5H4z"
+  })
+});
+/* harmony default export */ const justify_bottom = (justifyBottom);
+
+;// ./node_modules/@wordpress/icons/build-module/library/justify-stretch-vertical.js
+/**
+ * WordPress dependencies
+ */
+
+
+const justifyStretchVertical = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
     d: "M4 4L20 4L20 5.5L4 5.5L4 4ZM10 7L14 7L14 17L10 17L10 7ZM20 18.5L4 18.5L4 20L20 20L20 18.5Z"
   })
 });
-const spaceBetween = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
+/* harmony default export */ const justify_stretch_vertical = (justifyStretchVertical);
+
+;// ./node_modules/@wordpress/icons/build-module/library/justify-space-between-vertical.js
+/**
+ * WordPress dependencies
+ */
+
+
+const justifySpaceBetweenVertical = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
     d: "M7 4H17V8L7 8V4ZM7 16L17 16V20L7 20V16ZM20 11.25H4V12.75H20V11.25Z"
   })
 });
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-control/ui.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
+/* harmony default export */ const justify_space_between_vertical = (justifySpaceBetweenVertical);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-control/ui.js
+/**
+ * WordPress dependencies
+ */
+
+
 
 
 const BLOCK_ALIGNMENTS_CONTROLS = {
   top: {
-    icon: alignTop,
+    icon: justify_top,
     title: (0,external_wp_i18n_namespaceObject._x)('Align top', 'Block vertical alignment setting')
   },
   center: {
-    icon: alignCenter,
+    icon: justify_center_vertical,
     title: (0,external_wp_i18n_namespaceObject._x)('Align middle', 'Block vertical alignment setting')
   },
   bottom: {
-    icon: alignBottom,
+    icon: justify_bottom,
     title: (0,external_wp_i18n_namespaceObject._x)('Align bottom', 'Block vertical alignment setting')
   },
   stretch: {
-    icon: alignStretch,
+    icon: justify_stretch_vertical,
     title: (0,external_wp_i18n_namespaceObject._x)('Stretch to fill', 'Block vertical alignment setting')
   },
   'space-between': {
-    icon: spaceBetween,
+    icon: justify_space_between_vertical,
     title: (0,external_wp_i18n_namespaceObject._x)('Space between', 'Block vertical alignment setting')
   }
 };
@@ -18900,7 +19956,7 @@
  */
 /* harmony default export */ const ui = (BlockVerticalAlignmentUI);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-control/index.js
 /**
  * Internal dependencies
  */
@@ -18924,7 +19980,7 @@
  */
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/justify-content-control/ui.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/justify-content-control/ui.js
 /**
  * WordPress dependencies
  */
@@ -19003,7 +20059,7 @@
 }
 /* harmony default export */ const justify_content_control_ui = (JustifyContentUI);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/justify-content-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/justify-content-control/index.js
 /**
  * Internal dependencies
  */
@@ -19027,7 +20083,7 @@
  */
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/flex.js
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/flex.js
 /**
  * WordPress dependencies
  */
@@ -19046,8 +20102,6 @@
 
 // Used with the default, horizontal flex orientation.
 
-
-
 const justifyContentMap = {
   left: 'flex-start',
   right: 'flex-end',
@@ -19079,17 +20133,18 @@
     layoutBlockSupport = {}
   }) {
     const {
-      allowOrientation = true
+      allowOrientation = true,
+      allowJustification = true
     } = layoutBlockSupport;
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+        children: [allowJustification && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FlexLayoutJustifyContentControl, {
             layout: layout,
             onChange: onChange
           })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: allowOrientation && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(OrientationControl, {
+        }), allowOrientation && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(OrientationControl, {
             layout: layout,
             onChange: onChange
           })
@@ -19105,23 +20160,23 @@
     onChange,
     layoutBlockSupport
   }) {
-    if (layoutBlockSupport?.allowSwitching) {
+    const {
+      allowVerticalAlignment = true,
+      allowJustification = true
+    } = layoutBlockSupport;
+    if (!allowJustification && !allowVerticalAlignment) {
       return null;
     }
-    const {
-      allowVerticalAlignment = true
-    } = layoutBlockSupport;
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_controls, {
       group: "block",
       __experimentalShareWithChildBlocks: true,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FlexLayoutJustifyContentControl, {
+      children: [allowJustification && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FlexLayoutJustifyContentControl, {
         layout: layout,
         onChange: onChange,
         isToolbar: true
       }), allowVerticalAlignment && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FlexLayoutVerticalAlignmentControl, {
         layout: layout,
-        onChange: onChange,
-        isToolbar: true
+        onChange: onChange
       })]
     });
   },
@@ -19187,8 +20242,7 @@
 });
 function FlexLayoutVerticalAlignmentControl({
   layout,
-  onChange,
-  isToolbar = false
+  onChange
 }) {
   const {
     orientation = 'horizontal'
@@ -19203,37 +20257,10 @@
       verticalAlignment: value
     });
   };
-  if (isToolbar) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockVerticalAlignmentControl, {
-      onChange: onVerticalAlignmentChange,
-      value: verticalAlignment,
-      controls: orientation === 'horizontal' ? ['top', 'center', 'bottom', 'stretch'] : ['top', 'center', 'bottom', 'space-between']
-    });
-  }
-  const verticalAlignmentOptions = [{
-    value: 'flex-start',
-    label: (0,external_wp_i18n_namespaceObject.__)('Align items top')
-  }, {
-    value: 'center',
-    label: (0,external_wp_i18n_namespaceObject.__)('Align items center')
-  }, {
-    value: 'flex-end',
-    label: (0,external_wp_i18n_namespaceObject.__)('Align items bottom')
-  }];
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
-    className: "block-editor-hooks__flex-layout-vertical-alignment-control",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("legend", {
-      children: (0,external_wp_i18n_namespaceObject.__)('Vertical alignment')
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      children: verticalAlignmentOptions.map((value, icon, label) => {
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          label: label,
-          icon: icon,
-          isPressed: verticalAlignment === value,
-          onClick: () => onVerticalAlignmentChange(value)
-        }, value);
-      })
-    })]
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockVerticalAlignmentControl, {
+    onChange: onVerticalAlignmentChange,
+    value: verticalAlignment,
+    controls: orientation === 'horizontal' ? ['top', 'center', 'bottom', 'stretch'] : ['top', 'center', 'bottom', 'space-between']
   });
 }
 const POPOVER_PROPS = {
@@ -19295,6 +20322,7 @@
     });
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    __next40pxDefaultSize: true,
     __nextHasNoMarginBottom: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Justification'),
     value: justifyContent,
@@ -19342,6 +20370,7 @@
     justifyContent
   } = layout;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    __next40pxDefaultSize: true,
     __nextHasNoMarginBottom: true,
     className: "block-editor-hooks__flex-layout-orientation-controls",
     label: (0,external_wp_i18n_namespaceObject.__)('Orientation'),
@@ -19384,7 +20413,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/flow.js
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/flow.js
 /**
  * WordPress dependencies
  */
@@ -19482,7 +20511,7 @@
   }
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/icon/index.js
+;// ./node_modules/@wordpress/icons/build-module/icon/index.js
 /**
  * WordPress dependencies
  */
@@ -19494,7 +20523,7 @@
  * Return an SVG icon.
  *
  * @param {IconProps}                                 props icon is the SVG component to render
- *                                                          size is a number specifiying the icon size in pixels
+ *                                                          size is a number specifying the icon size in pixels
  *                                                          Other props will be passed to wrapped SVG component
  * @param {import('react').ForwardedRef<HTMLElement>} ref   The forwarded ref to the SVG element.
  *
@@ -19514,22 +20543,22 @@
 }
 /* harmony default export */ const build_module_icon = ((0,external_wp_element_namespaceObject.forwardRef)(Icon));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/position-center.js
-/**
- * WordPress dependencies
- */
-
-
-const positionCenter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M19 5.5H5V4h14v1.5ZM19 20H5v-1.5h14V20ZM7 9h10v6H7V9Z"
-  })
-});
-/* harmony default export */ const position_center = (positionCenter);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/stretch-wide.js
+;// ./node_modules/@wordpress/icons/build-module/library/align-none.js
+/**
+ * WordPress dependencies
+ */
+
+
+const alignNone = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M19 5.5H5V4h14v1.5ZM19 20H5v-1.5h14V20ZM5 9h14v6H5V9Z"
+  })
+});
+/* harmony default export */ const align_none = (alignNone);
+
+;// ./node_modules/@wordpress/icons/build-module/library/stretch-wide.js
 /**
  * WordPress dependencies
  */
@@ -19544,21 +20573,18 @@
 });
 /* harmony default export */ const stretch_wide = (stretchWide);
 
-;// CONCATENATED MODULE: external ["wp","styleEngine"]
-const external_wp_styleEngine_namespaceObject = window["wp"]["styleEngine"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/constrained.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/constrained.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -19606,54 +20632,54 @@
     const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({
       availableUnits: availableUnits || ['%', 'px', 'em', 'rem', 'vw']
     });
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+      spacing: 4,
+      className: "block-editor-hooks__layout-constrained",
       children: [allowCustomContentAndWideSize && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-          className: "block-editor-hooks__layout-controls",
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-            className: "block-editor-hooks__layout-controls-unit",
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
-              className: "block-editor-hooks__layout-controls-unit-input",
-              label: (0,external_wp_i18n_namespaceObject.__)('Content'),
-              labelPosition: "top",
-              __unstableInputWidth: "80px",
-              value: contentSize || wideSize || '',
-              onChange: nextWidth => {
-                nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
-                onChange({
-                  ...layout,
-                  contentSize: nextWidth
-                });
-              },
-              units: units
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-              icon: position_center
-            })]
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-            className: "block-editor-hooks__layout-controls-unit",
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
-              className: "block-editor-hooks__layout-controls-unit-input",
-              label: (0,external_wp_i18n_namespaceObject.__)('Wide'),
-              labelPosition: "top",
-              __unstableInputWidth: "80px",
-              value: wideSize || contentSize || '',
-              onChange: nextWidth => {
-                nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
-                onChange({
-                  ...layout,
-                  wideSize: nextWidth
-                });
-              },
-              units: units
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+          __next40pxDefaultSize: true,
+          label: (0,external_wp_i18n_namespaceObject.__)('Content width'),
+          labelPosition: "top",
+          value: contentSize || wideSize || '',
+          onChange: nextWidth => {
+            nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
+            onChange({
+              ...layout,
+              contentSize: nextWidth
+            });
+          },
+          units: units,
+          prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlPrefixWrapper, {
+            variant: "icon",
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+              icon: align_none
+            })
+          })
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+          __next40pxDefaultSize: true,
+          label: (0,external_wp_i18n_namespaceObject.__)('Wide width'),
+          labelPosition: "top",
+          value: wideSize || contentSize || '',
+          onChange: nextWidth => {
+            nextWidth = 0 > parseFloat(nextWidth) ? '0' : nextWidth;
+            onChange({
+              ...layout,
+              wideSize: nextWidth
+            });
+          },
+          units: units,
+          prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlPrefixWrapper, {
+            variant: "icon",
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
               icon: stretch_wide
-            })]
-          })]
+            })
+          })
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-          className: "block-editor-hooks__layout-controls-helptext",
+          className: "block-editor-hooks__layout-constrained-helptext",
           children: (0,external_wp_i18n_namespaceObject.__)('Customize the width for all elements that are assigned to the center or wide columns.')
         })]
       }), allowJustification && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+        __next40pxDefaultSize: true,
         __nextHasNoMarginBottom: true,
         label: (0,external_wp_i18n_namespaceObject.__)('Justification'),
         value: justifyContent,
@@ -19672,8 +20698,25 @@
       })]
     });
   },
-  toolBarControls: function DefaultLayoutToolbarControls() {
-    return null;
+  toolBarControls: function DefaultLayoutToolbarControls({
+    layout = {},
+    onChange,
+    layoutBlockSupport
+  }) {
+    const {
+      allowJustification = true
+    } = layoutBlockSupport;
+    if (!allowJustification) {
+      return null;
+    }
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_controls, {
+      group: "block",
+      __experimentalShareWithChildBlocks: true,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultLayoutJustifyContentControl, {
+        layout: layout,
+        onChange: onChange
+      })
+    });
   },
   getLayoutStyle: function getLayoutStyle({
     selector,
@@ -19798,451 +20841,42 @@
     return alignments;
   }
 });
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/block-refs-provider.js
-/**
- * WordPress dependencies
- */
-
-
-
-const BlockRefs = (0,external_wp_element_namespaceObject.createContext)({
-  refsMap: (0,external_wp_compose_namespaceObject.observableMap)()
-});
-function BlockRefsProvider({
-  children
-}) {
-  const value = (0,external_wp_element_namespaceObject.useMemo)(() => ({
-    refsMap: (0,external_wp_compose_namespaceObject.observableMap)()
-  }), []);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRefs.Provider, {
-    value: value,
-    children: children
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-block-refs.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/** @typedef {import('@wordpress/element').RefCallback} RefCallback */
-/** @typedef {import('@wordpress/element').RefObject} RefObject */
-
-/**
- * Provides a ref to the BlockRefs context.
- *
- * @param {string} clientId The client ID of the element ref.
- *
- * @return {RefCallback} Ref callback.
- */
-function useBlockRefProvider(clientId) {
-  const {
-    refsMap
-  } = (0,external_wp_element_namespaceObject.useContext)(BlockRefs);
-  return (0,external_wp_compose_namespaceObject.useRefEffect)(element => {
-    refsMap.set(clientId, element);
-    return () => refsMap.delete(clientId);
-  }, [clientId]);
-}
-
-/**
- * Gets a ref pointing to the current block element. Continues to return the same
- * stable ref object even if the `clientId` argument changes. This hook is not
- * reactive, i.e., it won't trigger a rerender of the calling component if the
- * ref value changes. For reactive use cases there is the `useBlockElement` hook.
- *
- * @param {string} clientId The client ID to get a ref for.
- *
- * @return {RefObject} A ref containing the element.
- */
-function useBlockRef(clientId) {
-  const {
-    refsMap
-  } = (0,external_wp_element_namespaceObject.useContext)(BlockRefs);
-  const latestClientId = (0,external_wp_element_namespaceObject.useRef)();
-  latestClientId.current = clientId;
-
-  // Always return an object, even if no ref exists for a given client ID, so
-  // that `current` works at a later point.
-  return (0,external_wp_element_namespaceObject.useMemo)(() => ({
-    get current() {
-      var _refsMap$get;
-      return (_refsMap$get = refsMap.get(latestClientId.current)) !== null && _refsMap$get !== void 0 ? _refsMap$get : null;
-    }
-  }), [refsMap]);
-}
-
-/**
- * Return the element for a given client ID. Updates whenever the element
- * changes, becomes available, or disappears.
- *
- * @param {string} clientId The client ID to an element for.
- *
- * @return {Element|null} The block's wrapper element.
- */
-function useBlockElement(clientId) {
-  const {
-    refsMap
-  } = (0,external_wp_element_namespaceObject.useContext)(BlockRefs);
-  const [blockElement, setBlockElement] = (0,external_wp_element_namespaceObject.useState)(null);
-  // Delay setting the resulting `blockElement` until an effect. If the block element
-  // changes (i.e., the block is unmounted and re-mounted), this allows enough time
-  // for the ref callbacks to clean up the old element and set the new one.
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    setBlockElement(refsMap.get(clientId));
-    return refsMap.subscribe(clientId, () => setBlockElement(refsMap.get(clientId)));
-  }, [refsMap, clientId]);
-  return blockElement;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-popover/use-popover-scroll.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Allow scrolling "through" popovers over the canvas. This is only called for
- * as long as the pointer is over a popover. Do not use React events because it
- * will bubble through portals.
- *
- * @param {Object} scrollableRef
- */
-function usePopoverScroll(scrollableRef) {
-  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    if (!scrollableRef) {
-      return;
-    }
-    function onWheel(event) {
-      const {
-        deltaX,
-        deltaY
-      } = event;
-      scrollableRef.current.scrollBy(deltaX, deltaY);
-    }
-    // Tell the browser that we do not call event.preventDefault
-    // See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners
-    const options = {
-      passive: true
-    };
-    node.addEventListener('wheel', onWheel, options);
-    return () => {
-      node.removeEventListener('wheel', onWheel, options);
-    };
-  }, [scrollableRef]);
-}
-/* harmony default export */ const use_popover_scroll = (usePopoverScroll);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-popover/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;
-function BlockPopover({
-  clientId,
-  bottomClientId,
-  children,
-  __unstablePopoverSlot,
-  __unstableContentRef,
-  shift = true,
-  ...props
-}, ref) {
-  const selectedElement = useBlockElement(clientId);
-  const lastSelectedElement = useBlockElement(bottomClientId !== null && bottomClientId !== void 0 ? bottomClientId : clientId);
-  const mergedRefs = (0,external_wp_compose_namespaceObject.useMergeRefs)([ref, use_popover_scroll(__unstableContentRef)]);
-  const [popoverDimensionsRecomputeCounter, forceRecomputePopoverDimensions] = (0,external_wp_element_namespaceObject.useReducer)(
-  // Module is there to make sure that the counter doesn't overflow.
-  s => (s + 1) % MAX_POPOVER_RECOMPUTE_COUNTER, 0);
-
-  // When blocks are moved up/down, they are animated to their new position by
-  // updating the `transform` property manually (i.e. without using CSS
-  // transitions or animations). The animation, which can also scroll the block
-  // editor, can sometimes cause the position of the Popover to get out of sync.
-  // A MutationObserver is therefore used to make sure that changes to the
-  // selectedElement's attribute (i.e. `transform`) can be tracked and used to
-  // trigger the Popover to rerender.
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    if (!selectedElement) {
-      return;
-    }
-    const observer = new window.MutationObserver(forceRecomputePopoverDimensions);
-    observer.observe(selectedElement, {
-      attributes: true
-    });
-    return () => {
-      observer.disconnect();
-    };
-  }, [selectedElement]);
-  const popoverAnchor = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    if (
-    // popoverDimensionsRecomputeCounter is by definition always equal or greater
-    // than 0. This check is only there to satisfy the correctness of the
-    // exhaustive-deps rule for the `useMemo` hook.
-    popoverDimensionsRecomputeCounter < 0 || !selectedElement || bottomClientId && !lastSelectedElement) {
-      return undefined;
-    }
-    return {
-      getBoundingClientRect() {
-        var _lastSelectedBCR$left, _lastSelectedBCR$top, _lastSelectedBCR$righ, _lastSelectedBCR$bott;
-        const selectedBCR = selectedElement.getBoundingClientRect();
-        const lastSelectedBCR = lastSelectedElement?.getBoundingClientRect();
-
-        // Get the biggest rectangle that encompasses completely the currently
-        // selected element and the last selected element:
-        // - for top/left coordinates, use the smaller numbers
-        // - for the bottom/right coordinates, use the largest numbers
-        const left = Math.min(selectedBCR.left, (_lastSelectedBCR$left = lastSelectedBCR?.left) !== null && _lastSelectedBCR$left !== void 0 ? _lastSelectedBCR$left : Infinity);
-        const top = Math.min(selectedBCR.top, (_lastSelectedBCR$top = lastSelectedBCR?.top) !== null && _lastSelectedBCR$top !== void 0 ? _lastSelectedBCR$top : Infinity);
-        const right = Math.max(selectedBCR.right, (_lastSelectedBCR$righ = lastSelectedBCR.right) !== null && _lastSelectedBCR$righ !== void 0 ? _lastSelectedBCR$righ : -Infinity);
-        const bottom = Math.max(selectedBCR.bottom, (_lastSelectedBCR$bott = lastSelectedBCR.bottom) !== null && _lastSelectedBCR$bott !== void 0 ? _lastSelectedBCR$bott : -Infinity);
-        const width = right - left;
-        const height = bottom - top;
-        return new window.DOMRect(left, top, width, height);
-      },
-      contextElement: selectedElement
-    };
-  }, [bottomClientId, lastSelectedElement, selectedElement, popoverDimensionsRecomputeCounter]);
-  if (!selectedElement || bottomClientId && !lastSelectedElement) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
-    ref: mergedRefs,
-    animate: false,
-    focusOnMount: false,
-    anchor: popoverAnchor
-    // Render in the old slot if needed for backward compatibility,
-    // otherwise render in place (not in the default popover slot).
-    ,
-    __unstableSlotName: __unstablePopoverSlot,
-    inline: !__unstablePopoverSlot,
-    placement: "top-start",
-    resize: false,
-    flip: false,
-    shift: shift,
-    ...props,
-    className: dist_clsx('block-editor-block-popover', props.className),
-    variant: "unstyled",
-    children: children
-  });
-}
-const PrivateBlockPopover = (0,external_wp_element_namespaceObject.forwardRef)(BlockPopover);
-const PublicBlockPopover = ({
-  clientId,
-  bottomClientId,
-  children,
-  ...props
-}, ref) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
-  ...props,
-  bottomClientId: bottomClientId,
-  clientId: clientId,
-  __unstableContentRef: undefined,
-  __unstablePopoverSlot: undefined,
-  ref: ref,
-  children: children
-});
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md
- */
-/* harmony default export */ const block_popover = ((0,external_wp_element_namespaceObject.forwardRef)(PublicBlockPopover));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-popover/cover.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function BlockPopoverCover({
-  clientId,
-  bottomClientId,
-  children,
-  shift = false,
-  additionalStyles,
-  ...props
-}, ref) {
-  var _bottomClientId;
-  (_bottomClientId = bottomClientId) !== null && _bottomClientId !== void 0 ? _bottomClientId : bottomClientId = clientId;
-  const selectedElement = useBlockElement(clientId);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
-    ref: ref,
-    clientId: clientId,
-    bottomClientId: bottomClientId,
-    shift: shift,
-    ...props,
-    children: selectedElement && clientId === bottomClientId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CoverContainer, {
-      selectedElement: selectedElement,
-      additionalStyles: additionalStyles,
-      children: children
-    }) : children
-  });
-}
-function CoverContainer({
-  selectedElement,
-  additionalStyles = {},
-  children
-}) {
-  const [width, setWidth] = (0,external_wp_element_namespaceObject.useState)(selectedElement.offsetWidth);
-  const [height, setHeight] = (0,external_wp_element_namespaceObject.useState)(selectedElement.offsetHeight);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    const observer = new window.ResizeObserver(() => {
-      setWidth(selectedElement.offsetWidth);
-      setHeight(selectedElement.offsetHeight);
-    });
-    observer.observe(selectedElement, {
-      box: 'border-box'
-    });
-    return () => observer.disconnect();
-  }, [selectedElement]);
-  const style = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    return {
-      position: 'absolute',
-      width,
-      height,
-      ...additionalStyles
-    };
-  }, [width, height, additionalStyles]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    style: style,
-    children: children
-  });
-}
-/* harmony default export */ const cover = ((0,external_wp_element_namespaceObject.forwardRef)(BlockPopoverCover));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/grid-visualizer/utils.js
-function getComputedCSS(element, property) {
-  return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/grid-visualizer/grid-visualizer.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-function GridVisualizer({
-  clientId,
-  contentRef
-}) {
-  const isDistractionFree = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings().isDistractionFree, []);
-  const blockElement = useBlockElement(clientId);
-  if (isDistractionFree || !blockElement) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
-    className: "block-editor-grid-visualizer",
-    clientId: clientId,
-    __unstablePopoverSlot: "block-toolbar",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerGrid, {
-      ref: contentRef,
-      blockElement: blockElement
-    })
-  });
-}
-const GridVisualizerGrid = (0,external_wp_element_namespaceObject.forwardRef)(({
-  blockElement
-}, ref) => {
-  const [gridInfo, setGridInfo] = (0,external_wp_element_namespaceObject.useState)(() => getGridInfo(blockElement));
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    const observers = [];
-    for (const element of [blockElement, ...blockElement.children]) {
-      const observer = new window.ResizeObserver(() => {
-        setGridInfo(getGridInfo(blockElement));
-      });
-      observer.observe(element);
-      observers.push(observer);
-    }
-    return () => {
-      for (const observer of observers) {
-        observer.disconnect();
-      }
-    };
-  }, [blockElement]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    ref: ref,
-    className: "block-editor-grid-visualizer__grid",
-    style: gridInfo.style,
-    children: Array.from({
-      length: gridInfo.numItems
-    }, (_, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-grid-visualizer__item",
-      style: {
-        boxShadow: `inset 0 0 0 1px color-mix(in srgb, ${gridInfo.currentColor} 20%, #0000)`
-      }
-    }, i))
-  });
-});
-function getGridInfo(blockElement) {
-  const gridTemplateColumns = getComputedCSS(blockElement, 'grid-template-columns');
-  const gridTemplateRows = getComputedCSS(blockElement, 'grid-template-rows');
-  const numColumns = gridTemplateColumns.split(' ').length;
-  const numRows = gridTemplateRows.split(' ').length;
-  const numItems = numColumns * numRows;
-  return {
-    numItems,
-    currentColor: getComputedCSS(blockElement, 'color'),
-    style: {
-      gridTemplateColumns,
-      gridTemplateRows,
-      gap: getComputedCSS(blockElement, 'gap'),
-      padding: getComputedCSS(blockElement, 'padding')
-    }
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/grid.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
+const constrained_POPOVER_PROPS = {
+  placement: 'bottom-start'
+};
+function DefaultLayoutJustifyContentControl({
+  layout,
+  onChange
+}) {
+  const {
+    justifyContent = 'center'
+  } = layout;
+  const onJustificationChange = value => {
+    onChange({
+      ...layout,
+      justifyContent: value
+    });
+  };
+  const allowedControls = ['left', 'center', 'right'];
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(JustifyContentControl, {
+    allowedControls: allowedControls,
+    value: justifyContent,
+    onChange: onJustificationChange,
+    popoverProps: constrained_POPOVER_PROPS
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/grid.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -20302,26 +20936,30 @@
     const {
       allowSizingOnChildren = false
     } = layoutBlockSupport;
+
+    // In the experiment we want to also show column control in Auto mode, and
+    // the minimum width control in Manual mode.
+    const showColumnsControl = window.__experimentalEnableGridInteractivity || !!layout?.columnCount;
+    const showMinWidthControl = window.__experimentalEnableGridInteractivity || !layout?.columnCount;
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutTypeControl, {
         layout: layout,
         onChange: onChange
-      }), layout?.columnCount ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutColumnsAndRowsControl, {
-        layout: layout,
-        onChange: onChange,
-        allowSizingOnChildren: allowSizingOnChildren
-      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutMinimumWidthControl, {
-        layout: layout,
-        onChange: onChange
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+        spacing: 4,
+        children: [showColumnsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutColumnsAndRowsControl, {
+          layout: layout,
+          onChange: onChange,
+          allowSizingOnChildren: allowSizingOnChildren
+        }), showMinWidthControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutMinimumWidthControl, {
+          layout: layout,
+          onChange: onChange
+        })]
       })]
     });
   },
-  toolBarControls: function GridLayoutToolbarControls({
-    clientId
-  }) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizer, {
-      clientId: clientId
-    });
+  toolBarControls: function GridLayoutToolbarControls() {
+    return null;
   },
   getLayoutStyle: function getLayoutStyle({
     selector,
@@ -20332,23 +20970,33 @@
     layoutDefinitions = LAYOUT_DEFINITIONS
   }) {
     const {
-      minimumColumnWidth = '12rem',
+      minimumColumnWidth = null,
       columnCount = null,
       rowCount = null
     } = layout;
 
+    // Check that the grid layout attributes are of the correct type, so that we don't accidentally
+    // write code that stores a string attribute instead of a number.
+    if (false) {}
+
     // If a block's block.json skips serialization for spacing or spacing.blockGap,
     // don't apply the user-defined value to the styles.
     const blockGapValue = style?.spacing?.blockGap && !shouldSkipSerialization(blockName, 'spacing', 'blockGap') ? getGapCSSValue(style?.spacing?.blockGap, '0.5em') : undefined;
     let output = '';
     const rules = [];
-    if (columnCount) {
+    if (minimumColumnWidth && columnCount > 0) {
+      const maxValue = `max(${minimumColumnWidth}, ( 100% - (${blockGapValue || '1.2rem'}*${columnCount - 1}) ) / ${columnCount})`;
+      rules.push(`grid-template-columns: repeat(auto-fill, minmax(${maxValue}, 1fr))`, `container-type: inline-size`);
+      if (rowCount) {
+        rules.push(`grid-template-rows: repeat(${rowCount}, minmax(1rem, auto))`);
+      }
+    } else if (columnCount) {
       rules.push(`grid-template-columns: repeat(${columnCount}, minmax(0, 1fr))`);
       if (rowCount) {
-        rules.push(`grid-template-rows: repeat(${rowCount}, minmax(0, 1fr))`);
-      }
-    } else if (minimumColumnWidth) {
-      rules.push(`grid-template-columns: repeat(auto-fill, minmax(min(${minimumColumnWidth}, 100%), 1fr))`, 'container-type: inline-size');
+        rules.push(`grid-template-rows: repeat(${rowCount}, minmax(1rem, auto))`);
+      }
+    } else {
+      rules.push(`grid-template-columns: repeat(auto-fill, minmax(min(${minimumColumnWidth || '12rem'}, 100%), 1fr))`, 'container-type: inline-size');
     }
     if (rules.length) {
       // Reason to disable: the extra line breaks added by prettier mess with the unit tests.
@@ -20376,9 +21024,13 @@
   onChange
 }) {
   const {
-    minimumColumnWidth: value = '12rem'
+    minimumColumnWidth,
+    columnCount,
+    isManualPlacement
   } = layout;
-  const [quantity, unit] = (0,external_wp_components_namespaceObject.__experimentalParseQuantityAndUnitFromRawValue)(value);
+  const defaultValue = isManualPlacement || columnCount ? null : '12rem';
+  const value = minimumColumnWidth || defaultValue;
+  const [quantity, unit = 'rem'] = (0,external_wp_components_namespaceObject.__experimentalParseQuantityAndUnitFromRawValue)(value);
   const handleSliderChange = next => {
     onChange({
       ...layout,
@@ -20416,7 +21068,7 @@
           onChange: newValue => {
             onChange({
               ...layout,
-              minimumColumnWidth: newValue
+              minimumColumnWidth: newValue === '' ? undefined : newValue
             });
           },
           onUnitChange: handleUnitChange,
@@ -20429,8 +21081,10 @@
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
         isBlock: true,
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+          __next40pxDefaultSize: true,
+          __nextHasNoMarginBottom: true,
           onChange: handleSliderChange,
-          value: quantity,
+          value: quantity || 0,
           min: 0,
           max: RANGE_CONTROL_MAX_VALUES[unit] || 600,
           withInputField: false,
@@ -20448,13 +21102,16 @@
   onChange,
   allowSizingOnChildren
 }) {
-  const {
-    columnCount = 3,
-    rowCount
+  // If the grid interactivity experiment is enabled, allow unsetting the column count.
+  const defaultColumnCount = window.__experimentalEnableGridInteractivity ? undefined : 3;
+  const {
+    columnCount = defaultColumnCount,
+    rowCount,
+    isManualPlacement
   } = layout;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
+      children: [(!window.__experimentalEnableGridInteractivity || !isManualPlacement) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
         as: "legend",
         children: (0,external_wp_i18n_namespaceObject.__)('Columns')
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
@@ -20464,29 +21121,50 @@
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
             size: "__unstable-large",
             onChange: value => {
-              /**
-               * If the input is cleared, avoid switching
-               * back to "Auto" by setting a value of "1".
-               */
-              const validValue = value !== '' ? value : '1';
-              onChange({
-                ...layout,
-                columnCount: validValue
-              });
+              if (window.__experimentalEnableGridInteractivity) {
+                // Allow unsetting the column count when in auto mode.
+                const defaultNewColumnCount = isManualPlacement ? 1 : undefined;
+                const newColumnCount = value === '' || value === '0' ? defaultNewColumnCount : parseInt(value, 10);
+                onChange({
+                  ...layout,
+                  columnCount: newColumnCount
+                });
+              } else {
+                // Don't allow unsetting the column count.
+                const newColumnCount = value === '' || value === '0' ? 1 : parseInt(value, 10);
+                onChange({
+                  ...layout,
+                  columnCount: newColumnCount
+                });
+              }
             },
             value: columnCount,
             min: 1,
             label: (0,external_wp_i18n_namespaceObject.__)('Columns'),
-            hideLabelFromVision: true
+            hideLabelFromVision: !window.__experimentalEnableGridInteractivity || !isManualPlacement
           })
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
           isBlock: true,
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
-            value: parseInt(columnCount, 10) // RangeControl can't deal with strings.
-            ,
+          children: window.__experimentalEnableGridInteractivity && allowSizingOnChildren && isManualPlacement ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
+            size: "__unstable-large",
+            onChange: value => {
+              // Don't allow unsetting the row count.
+              const newRowCount = value === '' || value === '0' ? 1 : parseInt(value, 10);
+              onChange({
+                ...layout,
+                rowCount: newRowCount
+              });
+            },
+            value: rowCount,
+            min: 1,
+            label: (0,external_wp_i18n_namespaceObject.__)('Rows')
+          }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+            __next40pxDefaultSize: true,
+            __nextHasNoMarginBottom: true,
+            value: columnCount !== null && columnCount !== void 0 ? columnCount : 1,
             onChange: value => onChange({
               ...layout,
-              columnCount: value
+              columnCount: value === '' || value === '0' ? 1 : value
             }),
             min: 1,
             max: 16,
@@ -20496,45 +21174,7 @@
           })
         })]
       })]
-    }), allowSizingOnChildren && window.__experimentalEnableGridInteractivity && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
-        as: "legend",
-        children: (0,external_wp_i18n_namespaceObject.__)('Rows')
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-        gap: 4,
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          isBlock: true,
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
-            size: "__unstable-large",
-            onChange: value => {
-              onChange({
-                ...layout,
-                rowCount: value
-              });
-            },
-            value: rowCount,
-            min: 1,
-            label: (0,external_wp_i18n_namespaceObject.__)('Rows'),
-            hideLabelFromVision: true
-          })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          isBlock: true,
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
-            value: parseInt(rowCount, 10) // RangeControl can't deal with strings.
-            ,
-            onChange: value => onChange({
-              ...layout,
-              rowCount: value
-            }),
-            min: 1,
-            max: 16,
-            withInputField: false,
-            label: (0,external_wp_i18n_namespaceObject.__)('Rows'),
-            hideLabelFromVision: true
-          })
-        })]
-      })]
-    })]
+    })
   });
 }
 
@@ -20545,7 +21185,9 @@
 }) {
   const {
     columnCount,
-    minimumColumnWidth
+    rowCount,
+    minimumColumnWidth,
+    isManualPlacement
   } = layout;
 
   /**
@@ -20553,26 +21195,33 @@
    * previous type so we can switch back without loss.
    */
   const [tempColumnCount, setTempColumnCount] = (0,external_wp_element_namespaceObject.useState)(columnCount || 3);
+  const [tempRowCount, setTempRowCount] = (0,external_wp_element_namespaceObject.useState)(rowCount);
   const [tempMinimumColumnWidth, setTempMinimumColumnWidth] = (0,external_wp_element_namespaceObject.useState)(minimumColumnWidth || '12rem');
-  const isManual = !!columnCount ? 'manual' : 'auto';
+  const gridPlacement = isManualPlacement || !!columnCount && !window.__experimentalEnableGridInteractivity ? 'manual' : 'auto';
   const onChangeType = value => {
     if (value === 'manual') {
       setTempMinimumColumnWidth(minimumColumnWidth || '12rem');
     } else {
       setTempColumnCount(columnCount || 3);
+      setTempRowCount(rowCount);
     }
     onChange({
       ...layout,
       columnCount: value === 'manual' ? tempColumnCount : null,
+      rowCount: value === 'manual' && window.__experimentalEnableGridInteractivity ? tempRowCount : undefined,
+      isManualPlacement: value === 'manual' && window.__experimentalEnableGridInteractivity ? true : undefined,
       minimumColumnWidth: value === 'auto' ? tempMinimumColumnWidth : null
     });
   };
+  const helpText = gridPlacement === 'manual' ? (0,external_wp_i18n_namespaceObject.__)('Grid items can be manually placed in any position on the grid.') : (0,external_wp_i18n_namespaceObject.__)('Grid items are placed automatically depending on their order.');
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    __next40pxDefaultSize: true,
     __nextHasNoMarginBottom: true,
-    label: (0,external_wp_i18n_namespaceObject.__)('Type'),
-    value: isManual,
+    label: (0,external_wp_i18n_namespaceObject.__)('Grid item position'),
+    value: gridPlacement,
     onChange: onChangeType,
     isBlock: true,
+    help: window.__experimentalEnableGridInteractivity ? helpText : undefined,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
       value: "auto",
       label: (0,external_wp_i18n_namespaceObject.__)('Auto')
@@ -20583,7 +21232,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/layouts/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/layouts/index.js
 /**
  * Internal dependencies
  */
@@ -20612,7 +21261,7 @@
   return layoutTypes;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/layout.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/layout.js
 /**
  * WordPress dependencies
  */
@@ -20668,7 +21317,7 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/use-available-alignments.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/use-available-alignments.js
 /**
  * WordPress dependencies
  */
@@ -20741,22 +21390,7 @@
   return alignments;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-none.js
-/**
- * WordPress dependencies
- */
-
-
-const alignNone = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M19 5.5H5V4h14v1.5ZM19 20H5v-1.5h14V20ZM5 9h14v6H5V9Z"
-  })
-});
-/* harmony default export */ const align_none = (alignNone);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/position-left.js
+;// ./node_modules/@wordpress/icons/build-module/library/position-left.js
 /**
  * WordPress dependencies
  */
@@ -20771,7 +21405,22 @@
 });
 /* harmony default export */ const position_left = (positionLeft);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/position-right.js
+;// ./node_modules/@wordpress/icons/build-module/library/position-center.js
+/**
+ * WordPress dependencies
+ */
+
+
+const positionCenter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M19 5.5H5V4h14v1.5ZM19 20H5v-1.5h14V20ZM7 9h10v6H7V9Z"
+  })
+});
+/* harmony default export */ const position_center = (positionCenter);
+
+;// ./node_modules/@wordpress/icons/build-module/library/position-right.js
 /**
  * WordPress dependencies
  */
@@ -20786,7 +21435,7 @@
 });
 /* harmony default export */ const position_right = (positionRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/stretch-full-width.js
+;// ./node_modules/@wordpress/icons/build-module/library/stretch-full-width.js
 /**
  * WordPress dependencies
  */
@@ -20801,7 +21450,7 @@
 });
 /* harmony default export */ const stretch_full_width = (stretchFullWidth);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/constants.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/constants.js
 /**
  * WordPress dependencies
  */
@@ -20835,22 +21484,21 @@
 };
 const constants_DEFAULT_CONTROL = 'none';
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/ui.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/ui.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -20890,7 +21538,7 @@
     })
   } : {
     toggleProps: {
-      describedBy: (0,external_wp_i18n_namespaceObject.__)('Change alignment')
+      description: (0,external_wp_i18n_namespaceObject.__)('Change alignment')
     },
     children: ({
       onClose
@@ -20935,7 +21583,7 @@
 }
 /* harmony default export */ const block_alignment_control_ui = (BlockAlignmentUI);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-control/index.js
 /**
  * Internal dependencies
  */
@@ -20959,7 +21607,7 @@
  */
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-editing-mode/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-editing-mode/index.js
 /**
  * WordPress dependencies
  */
@@ -21031,7 +21679,7 @@
   return clientId ? context[blockEditingModeKey] : globalBlockEditingMode;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/align.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/align.js
 /**
  * External dependencies
  */
@@ -21215,13 +21863,14 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/align/addAttribute', addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/groups.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/groups.js
 /**
  * WordPress dependencies
  */
 
 const InspectorControlsDefault = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorControls');
 const InspectorControlsAdvanced = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorAdvancedControls');
+const InspectorControlsBindings = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorControlsBindings');
 const InspectorControlsBackground = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorControlsBackground');
 const InspectorControlsBorder = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorControlsBorder');
 const InspectorControlsColor = (0,external_wp_components_namespaceObject.createSlotFill)('InspectorControlsColor');
@@ -21236,6 +21885,7 @@
   default: InspectorControlsDefault,
   advanced: InspectorControlsAdvanced,
   background: InspectorControlsBackground,
+  bindings: InspectorControlsBindings,
   border: InspectorControlsBorder,
   color: InspectorControlsColor,
   dimensions: InspectorControlsDimensions,
@@ -21250,7 +21900,7 @@
 };
 /* harmony default export */ const inspector_controls_groups = (groups_groups);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/fill.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/fill.js
 /**
  * WordPress dependencies
  */
@@ -21344,7 +21994,7 @@
   }), innerMarkup);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/block-support-tools-panel.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/block-support-tools-panel.js
 /**
  * WordPress dependencies
  */
@@ -21416,7 +22066,7 @@
   }, panelId);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/block-support-slot-container.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/block-support-slot-container.js
 /**
  * WordPress dependencies
  */
@@ -21446,11 +22096,10 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/slot.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/slot.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -21477,44 +22126,37 @@
     });
     group = __experimentalGroup;
   }
-  const Slot = inspector_controls_groups[group]?.Slot;
-  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(Slot?.__unstableName);
-  const motionContextValue = (0,external_wp_element_namespaceObject.useContext)(external_wp_components_namespaceObject.__unstableMotionContext);
-  const computedFillProps = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    var _fillProps$forwardedC;
-    return {
-      ...(fillProps !== null && fillProps !== void 0 ? fillProps : {}),
-      forwardedContext: [...((_fillProps$forwardedC = fillProps?.forwardedContext) !== null && _fillProps$forwardedC !== void 0 ? _fillProps$forwardedC : []), [external_wp_components_namespaceObject.__unstableMotionContext.Provider, {
-        value: motionContextValue
-      }]]
-    };
-  }, [motionContextValue, fillProps]);
-  if (!Slot) {
+  const slotFill = inspector_controls_groups[group];
+  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(slotFill?.name);
+  if (!slotFill) {
      true ? external_wp_warning_default()(`Unknown InspectorControls group "${group}" provided.`) : 0;
     return null;
   }
   if (!fills?.length) {
     return null;
   }
+  const {
+    Slot
+  } = slotFill;
   if (label) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockSupportToolsPanel, {
       group: group,
       label: label,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockSupportSlotContainer, {
         ...props,
-        fillProps: computedFillProps,
+        fillProps: fillProps,
         Slot: Slot
       })
     });
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Slot, {
     ...props,
-    fillProps: computedFillProps,
+    fillProps: fillProps,
     bubblesVirtually: true
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls/index.js
 /**
  * Internal dependencies
  */
@@ -21544,19 +22186,18 @@
  */
 /* harmony default export */ const inspector_controls = (InspectorControls);
 
-;// CONCATENATED MODULE: external ["wp","url"]
+;// external ["wp","url"]
 const external_wp_url_namespaceObject = window["wp"]["url"];
-;// CONCATENATED MODULE: external ["wp","dom"]
+;// external ["wp","dom"]
 const external_wp_dom_namespaceObject = window["wp"]["dom"];
-;// CONCATENATED MODULE: external ["wp","blob"]
+;// external ["wp","blob"]
 const external_wp_blob_namespaceObject = window["wp"]["blob"];
-;// CONCATENATED MODULE: external ["wp","keycodes"]
+;// external ["wp","keycodes"]
 const external_wp_keycodes_namespaceObject = window["wp"]["keycodes"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/media.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/media.js
+/**
+ * WordPress dependencies
+ */
 
 
 const media = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -21572,7 +22213,7 @@
 });
 /* harmony default export */ const library_media = (media);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/upload.js
+;// ./node_modules/@wordpress/icons/build-module/library/upload.js
 /**
  * WordPress dependencies
  */
@@ -21587,7 +22228,7 @@
 });
 /* harmony default export */ const library_upload = (upload);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/post-featured-image.js
+;// ./node_modules/@wordpress/icons/build-module/library/post-featured-image.js
 /**
  * WordPress dependencies
  */
@@ -21602,7 +22243,7 @@
 });
 /* harmony default export */ const post_featured_image = (postFeaturedImage);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-upload/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/media-upload/index.js
 /**
  * WordPress dependencies
  */
@@ -21622,7 +22263,7 @@
  */
 /* harmony default export */ const media_upload = ((0,external_wp_components_namespaceObject.withFilters)('editor.MediaUpload')(MediaUpload));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-upload/check.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/media-upload/check.js
 /**
  * WordPress dependencies
  */
@@ -21650,12 +22291,10 @@
  */
 /* harmony default export */ const check = (MediaUploadCheck);
 
-;// CONCATENATED MODULE: external ["wp","isShallowEqual"]
+;// external ["wp","isShallowEqual"]
 const external_wp_isShallowEqual_namespaceObject = window["wp"]["isShallowEqual"];
 var external_wp_isShallowEqual_default = /*#__PURE__*/__webpack_require__.n(external_wp_isShallowEqual_namespaceObject);
-;// CONCATENATED MODULE: external ["wp","preferences"]
-const external_wp_preferences_namespaceObject = window["wp"]["preferences"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/keyboard-return.js
+;// ./node_modules/@wordpress/icons/build-module/library/keyboard-return.js
 /**
  * WordPress dependencies
  */
@@ -21663,13 +22302,14 @@
 
 const keyboardReturn = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
   xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
   children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
     d: "m6.734 16.106 2.176-2.38-1.093-1.028-3.846 4.158 3.846 4.158 1.093-1.028-2.176-2.38h2.811c1.125 0 2.25.03 3.374 0 1.428-.001 3.362-.25 4.963-1.277 1.66-1.065 2.868-2.906 2.868-5.859 0-2.479-1.327-4.896-3.65-5.93-1.82-.813-3.044-.8-4.806-.788l-.567.002v1.5c.184 0 .368 0 .553-.002 1.82-.007 2.704-.014 4.21.657 1.854.827 2.76 2.657 2.76 4.561 0 2.472-.973 3.824-2.178 4.596-1.258.807-2.864 1.04-4.163 1.04h-.02c-1.115.03-2.229 0-3.344 0H6.734Z"
   })
 });
 /* harmony default export */ const keyboard_return = (keyboardReturn);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-left-small.js
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-left-small.js
 /**
  * WordPress dependencies
  */
@@ -21684,7 +22324,7 @@
 });
 /* harmony default export */ const chevron_left_small = (chevronLeftSmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-right-small.js
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-right-small.js
 /**
  * WordPress dependencies
  */
@@ -21699,12 +22339,10 @@
 });
 /* harmony default export */ const chevron_right_small = (chevronRightSmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/settings-drawer.js
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/settings-drawer.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -21723,6 +22361,7 @@
   const settingsDrawerId = `link-control-settings-drawer-${id}`;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       className: "block-editor-link-control__drawer-toggle",
       "aria-expanded": settingsOpen,
       onClick: () => setSettingsOpen(!settingsOpen),
@@ -21762,16 +22401,15 @@
 
 // EXTERNAL MODULE: external "React"
 var external_React_ = __webpack_require__(1609);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-input/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-input/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -21793,8 +22431,6 @@
  */
 
 
-
-
 function isFunction(maybeFunc) {
   return typeof maybeFunc === 'function';
 }
@@ -21927,7 +22563,7 @@
         showSuggestions: !!suggestions.length
       });
       if (!!suggestions.length) {
-        this.props.debouncedSpeak((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: number of results. */
+        this.props.debouncedSpeak((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of results. */
         (0,external_wp_i18n_namespaceObject._n)('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', suggestions.length), suggestions.length), 'assertive');
       } else {
         this.props.debouncedSpeak((0,external_wp_i18n_namespaceObject.__)('No results.'), 'assertive');
@@ -21951,8 +22587,8 @@
     // as a Promise always resolves on the next tick of the event loop.
     this.suggestionsRequest = request;
   }
-  onChange(event) {
-    this.props.onChange(event.target.value);
+  onChange(newValue) {
+    this.props.onChange(newValue);
   }
   onFocus() {
     const {
@@ -22111,8 +22747,6 @@
   }
   renderControl() {
     const {
-      /** Start opting into the new margin-free styles that will become the default in a future version. */
-      __nextHasNoMarginBottom = false,
       label = null,
       className,
       isFullWidth,
@@ -22143,7 +22777,6 @@
       id: inputId,
       value,
       required: true,
-      className: 'block-editor-url-input__input',
       type: 'text',
       onChange: this.onChange,
       onFocus: this.onFocus,
@@ -22156,23 +22789,18 @@
       'aria-autocomplete': 'list',
       'aria-owns': suggestionsListboxId,
       'aria-activedescendant': selectedSuggestion !== null ? `${suggestionOptionIdPrefix}-${selectedSuggestion}` : undefined,
-      ref: this.inputRef
+      ref: this.inputRef,
+      suffix: this.props.suffix
     };
     if (renderControl) {
       return renderControl(controlProps, inputProps, loading);
     }
-    if (!__nextHasNoMarginBottom) {
-      external_wp_deprecated_default()('Bottom margin styles for wp.blockEditor.URLInput', {
-        since: '6.2',
-        version: '6.5',
-        hint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version'
-      });
-    }
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.BaseControl, {
-      __nextHasNoMarginBottom: __nextHasNoMarginBottom,
+      __nextHasNoMarginBottom: true,
       ...controlProps,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("input", {
-        ...inputProps
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
+        ...inputProps,
+        __next40pxDefaultSize: true
       }), loading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})]
     });
   }
@@ -22224,8 +22852,11 @@
       focusOnMount: false,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         ...suggestionsListProps,
-        className: dist_clsx('block-editor-url-input__suggestions', `${className}__suggestions`),
+        className: dist_clsx('block-editor-url-input__suggestions', {
+          [`${className}__suggestions`]: className
+        }),
         children: suggestions.map((suggestion, index) => /*#__PURE__*/(0,external_React_.createElement)(external_wp_components_namespaceObject.Button, {
+          __next40pxDefaultSize: true,
           ...buildSuggestionItemProps(suggestion, index),
           key: suggestion.id,
           className: dist_clsx('block-editor-url-input__suggestion', {
@@ -22255,7 +22886,7 @@
   };
 }))(URLInput));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/plus.js
+;// ./node_modules/@wordpress/icons/build-module/library/plus.js
 /**
  * WordPress dependencies
  */
@@ -22270,7 +22901,7 @@
 });
 /* harmony default export */ const library_plus = (plus);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-create-button.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-create-button.js
 /**
  * WordPress dependencies
  */
@@ -22292,7 +22923,7 @@
   if (buttonText) {
     text = typeof buttonText === 'function' ? buttonText(searchTerm) : buttonText;
   } else {
-    text = (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: search term. */
+    text = (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: search term. */
     (0,external_wp_i18n_namespaceObject.__)('Create: <mark>%s</mark>'), searchTerm), {
       mark: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("mark", {})
     });
@@ -22308,7 +22939,7 @@
 };
 /* harmony default export */ const search_create_button = (LinkControlSearchCreate);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/post-list.js
+;// ./node_modules/@wordpress/icons/build-module/library/post-list.js
 /**
  * WordPress dependencies
  */
@@ -22323,11 +22954,10 @@
 });
 /* harmony default export */ const post_list = (postList);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/page.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/icons/build-module/library/page.js
+/**
+ * WordPress dependencies
+ */
 
 
 const page = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -22341,7 +22971,7 @@
 });
 /* harmony default export */ const library_page = (page);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/tag.js
+;// ./node_modules/@wordpress/icons/build-module/library/tag.js
 /**
  * WordPress dependencies
  */
@@ -22356,7 +22986,7 @@
 });
 /* harmony default export */ const library_tag = (tag);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/category.js
+;// ./node_modules/@wordpress/icons/build-module/library/category.js
 /**
  * WordPress dependencies
  */
@@ -22373,7 +23003,7 @@
 });
 /* harmony default export */ const library_category = (category);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/file.js
+;// ./node_modules/@wordpress/icons/build-module/library/file.js
 /**
  * WordPress dependencies
  */
@@ -22390,7 +23020,7 @@
 });
 /* harmony default export */ const library_file = (file);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/globe.js
+;// ./node_modules/@wordpress/icons/build-module/library/globe.js
 /**
  * WordPress dependencies
  */
@@ -22405,7 +23035,7 @@
 });
 /* harmony default export */ const library_globe = (globe);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/home.js
+;// ./node_modules/@wordpress/icons/build-module/library/home.js
 /**
  * WordPress dependencies
  */
@@ -22420,7 +23050,7 @@
 });
 /* harmony default export */ const library_home = (home);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/verse.js
+;// ./node_modules/@wordpress/icons/build-module/library/verse.js
 /**
  * WordPress dependencies
  */
@@ -22435,10 +23065,11 @@
 });
 /* harmony default export */ const library_verse = (verse);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-item.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-item.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -22559,8 +23190,16 @@
   return suggestion.type === 'post_tag' ? 'tag' : suggestion.type;
 }
 /* harmony default export */ const search_item = (LinkControlSearchItem);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/constants.js
+const __experimentalLinkControlSearchItem = props => {
+  external_wp_deprecated_default()('wp.blockEditor.__experimentalLinkControlSearchItem', {
+    since: '6.8'
+  });
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LinkControlSearchItem, {
+    ...props
+  });
+};
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/constants.js
 /**
  * WordPress dependencies
  */
@@ -22580,7 +23219,7 @@
   title: (0,external_wp_i18n_namespaceObject.__)('Open in new tab')
 }];
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-results.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-results.js
 /**
  * WordPress dependencies
  */
@@ -22601,7 +23240,6 @@
 
 
 function LinkControlSearchResults({
-  instanceId,
   withCreateSuggestion,
   currentInputValue,
   handleSuggestionClick,
@@ -22621,23 +23259,14 @@
   const shouldShowCreateSuggestion = withCreateSuggestion && !isSingleDirectEntryResult && !isInitialSuggestions;
   // If the query has a specified type, then we can skip showing them in the result. See #24839.
   const shouldShowSuggestionsTypes = !suggestionsQuery?.type;
-
-  // According to guidelines aria-label should be added if the label
-  // itself is not visible.
-  // See: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listbox_role
-  const searchResultsLabelId = `block-editor-link-control-search-results-label-${instanceId}`;
-  const labelText = isInitialSuggestions ? (0,external_wp_i18n_namespaceObject.__)('Suggestions') : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: search term. */
+  const labelText = isInitialSuggestions ? (0,external_wp_i18n_namespaceObject.__)('Suggestions') : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: search term. */
   (0,external_wp_i18n_namespaceObject.__)('Search results for "%s"'), currentInputValue);
-  const searchResultsLabel = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
-    id: searchResultsLabelId,
-    children: labelText
-  });
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: "block-editor-link-control__search-results-wrapper",
-    children: [searchResultsLabel, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       ...suggestionsListProps,
       className: resultsListClasses,
-      "aria-labelledby": searchResultsLabelId,
+      "aria-label": labelText,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
         children: suggestions.map((suggestion, index) => {
           if (shouldShowCreateSuggestion && CREATE_TYPE === suggestion.type) {
@@ -22676,11 +23305,20 @@
           }, `${suggestion.id}-${suggestion.type}`);
         })
       })
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/is-url-like.js
+    })
+  });
+}
+/* harmony default export */ const search_results = (LinkControlSearchResults);
+const __experimentalLinkControlSearchResults = props => {
+  external_wp_deprecated_default()('wp.blockEditor.__experimentalLinkControlSearchResults', {
+    since: '6.8'
+  });
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LinkControlSearchResults, {
+    ...props
+  });
+};
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/is-url-like.js
 /**
  * WordPress dependencies
  */
@@ -22730,7 +23368,7 @@
   return regex.test(cleanedURL);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-search-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-search-handler.js
 /**
  * WordPress dependencies
  */
@@ -22802,7 +23440,7 @@
   // when creating the suggestion. Similarly `url` is used when using keyboard to select
   // the suggestion (the <form> `onSubmit` handler falls-back to `url`).
   return isURLLike(val) || !withCreateSuggestion ? results : results.concat({
-    // the `id` prop is intentionally ommitted here because it
+    // the `id` prop is intentionally omitted here because it
     // is never exposed as part of the component's public API.
     // see: https://github.com/WordPress/gutenberg/pull/19775#discussion_r378931316.
     title: val,
@@ -22840,17 +23478,17 @@
   }, [directEntryHandler, fetchSearchSuggestions, pageOnFront, pageForPosts, suggestionsQuery, withCreateSuggestion]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-input.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/search-input.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -22860,7 +23498,6 @@
 // to the fetchLinkSuggestions passed in block editor settings
 // which will cause an unintended http request.
 
-
 const noopSearchHandler = () => Promise.resolve([]);
 const noop = () => {};
 const LinkControlSearchInput = (0,external_wp_element_namespaceObject.forwardRef)(({
@@ -22874,7 +23511,7 @@
   onChange = noop,
   onSelect = noop,
   showSuggestions = true,
-  renderSuggestions = props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LinkControlSearchResults, {
+  renderSuggestions = props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(search_results, {
     ...props
   }),
   fetchSuggestions = null,
@@ -22883,11 +23520,11 @@
   suggestionsQuery = {},
   withURLSuggestion = true,
   createSuggestionButtonText,
-  hideLabelFromVision = false
+  hideLabelFromVision = false,
+  suffix
 }, ref) => {
   const genericSearchHandler = useSearchHandler(suggestionsQuery, allowDirectEntry, withCreateSuggestion, withURLSuggestion);
   const searchHandler = showSuggestions ? fetchSuggestions || genericSearchHandler : noopSearchHandler;
-  const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(LinkControlSearchInput);
   const [focusedSuggestion, setFocusedSuggestion] = (0,external_wp_element_namespaceObject.useState)();
 
   /**
@@ -22903,7 +23540,6 @@
   };
   const handleRenderSuggestions = props => renderSuggestions({
     ...props,
-    instanceId,
     withCreateSuggestion,
     createSuggestionButtonText,
     suggestionsQuery,
@@ -22944,7 +23580,6 @@
     className: "block-editor-link-control__search-input-container",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(url_input, {
       disableSuggestions: currentLink?.url === value,
-      __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Link'),
       hideLabelFromVision: hideLabelFromVision,
       className: className,
@@ -22968,28 +23603,39 @@
           });
         }
       },
-      ref: ref
+      ref: ref,
+      suffix: suffix
     }), children]
   });
 });
 /* harmony default export */ const search_input = (LinkControlSearchInput);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/info.js
+const __experimentalLinkControlSearchInput = props => {
+  external_wp_deprecated_default()('wp.blockEditor.__experimentalLinkControlSearchInput', {
+    since: '6.8'
+  });
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LinkControlSearchInput, {
+    ...props
+  });
+};
+
+;// ./node_modules/@wordpress/icons/build-module/library/info.js
 /**
  * WordPress dependencies
  */
 
 
 const info = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M12 3.2c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8 0-4.8-4-8.8-8.8-8.8zm0 16c-4 0-7.2-3.3-7.2-7.2C4.8 8 8 4.8 12 4.8s7.2 3.3 7.2 7.2c0 4-3.2 7.2-7.2 7.2zM11 17h2v-6h-2v6zm0-8h2V7h-2v2z"
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    fillRule: "evenodd",
+    clipRule: "evenodd",
+    d: "M5.5 12a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0ZM12 4a8 8 0 1 0 0 16 8 8 0 0 0 0-16Zm.75 4v1.5h-1.5V8h1.5Zm0 8v-5h-1.5v5h1.5Z"
   })
 });
 /* harmony default export */ const library_info = (info);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/pencil.js
+;// ./node_modules/@wordpress/icons/build-module/library/pencil.js
 /**
  * WordPress dependencies
  */
@@ -23004,7 +23650,7 @@
 });
 /* harmony default export */ const library_pencil = (pencil);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/edit.js
+;// ./node_modules/@wordpress/icons/build-module/library/edit.js
 /**
  * Internal dependencies
  */
@@ -23012,7 +23658,7 @@
 
 /* harmony default export */ const edit = (library_pencil);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/link-off.js
+;// ./node_modules/@wordpress/icons/build-module/library/link-off.js
 /**
  * WordPress dependencies
  */
@@ -23027,7 +23673,7 @@
 });
 /* harmony default export */ const link_off = (linkOff);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/copy-small.js
+;// ./node_modules/@wordpress/icons/build-module/library/copy-small.js
 /**
  * WordPress dependencies
  */
@@ -23044,7 +23690,7 @@
 });
 /* harmony default export */ const copy_small = (copySmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/viewer-slot.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/viewer-slot.js
 /**
  * WordPress dependencies
  */
@@ -23056,7 +23702,7 @@
 
 /* harmony default export */ const viewer_slot = ((/* unused pure expression or super */ null && (ViewerSlot)));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-rich-url-data.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-rich-url-data.js
 /**
  * Internal dependencies
  */
@@ -23140,33 +23786,43 @@
 }
 /* harmony default export */ const use_rich_url_data = (useRemoteUrlData);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/link-preview.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/link-preview.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Filters the title for display. Removes the protocol and www prefix.
+ *
+ * @param {string} title The title to be filtered.
+ *
+ * @return {string} The filtered title.
+ */
+
+function filterTitleForDisplay(title) {
+  // Derived from `filterURLForDisplay` in `@wordpress/url`.
+  return title.replace(/^[a-z\-.\+]+[0-9]*:(\/\/)?/i, '').replace(/^www\./i, '');
+}
 function LinkPreview({
   value,
   onEditClick,
@@ -23190,6 +23846,7 @@
   // url can be undefined if the href attribute is unset
   const isEmptyURL = !value?.url?.length;
   const displayTitle = !isEmptyURL && (0,external_wp_dom_namespaceObject.__unstableStripHTML)(richData?.title || value?.title || displayURL);
+  const isUrlRedundant = !value?.url || filterTitleForDisplay(displayTitle) === displayURL;
   let icon;
   if (richData?.icon) {
     icon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("img", {
@@ -23216,7 +23873,8 @@
     });
   });
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Currently selected'),
+    role: "group",
+    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Manage link'),
     className: dist_clsx('block-editor-link-control__search-item', {
       'is-current': true,
       'is-rich': hasRichData,
@@ -23229,6 +23887,9 @@
       className: "block-editor-link-control__search-item-top",
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("span", {
         className: "block-editor-link-control__search-item-header",
+        role: "figure",
+        "aria-label": /* translators: Accessibility text for the link preview when editing a link. */
+        (0,external_wp_i18n_namespaceObject.__)('Link information'),
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
           className: dist_clsx('block-editor-link-control__search-item-icon', {
             'is-image': richData?.icon
@@ -23244,7 +23905,7 @@
                 numberOfLines: 1,
                 children: displayTitle
               })
-            }), value?.url && displayTitle !== displayURL && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+            }), !isUrlRedundant && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
               className: "block-editor-link-control__search-item-info",
               children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalTruncate, {
                 numberOfLines: 1,
@@ -23260,23 +23921,22 @@
         icon: edit,
         label: (0,external_wp_i18n_namespaceObject.__)('Edit link'),
         onClick: onEditClick,
-        size: "compact"
+        size: "compact",
+        showTooltip: !showIconLabels
       }), hasUnlinkControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
         icon: link_off,
         label: (0,external_wp_i18n_namespaceObject.__)('Remove link'),
         onClick: onRemove,
-        size: "compact"
+        size: "compact",
+        showTooltip: !showIconLabels
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
         icon: copy_small,
-        label: (0,external_wp_i18n_namespaceObject.sprintf)(
-        // Translators: %s is a placeholder for the link URL and an optional colon, (if a Link URL is present).
-        (0,external_wp_i18n_namespaceObject.__)('Copy link%s'),
-        // Ends up looking like "Copy link: https://example.com".
-        isEmptyURL || showIconLabels ? '' : ': ' + value.url),
+        label: (0,external_wp_i18n_namespaceObject.__)('Copy link'),
         ref: ref,
-        __experimentalIsFocusable: true,
+        accessibleWhenDisabled: true,
         disabled: isEmptyURL,
-        size: "compact"
+        size: "compact",
+        showTooltip: !showIconLabels
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ViewerSlot, {
         fillProps: value
       })]
@@ -23284,11 +23944,10 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/settings.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/settings.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -23325,7 +23984,7 @@
 };
 /* harmony default export */ const link_control_settings = (LinkControlSettings);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-create-page.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-create-page.js
 /**
  * WordPress dependencies
  */
@@ -23402,7 +24061,7 @@
 // EXTERNAL MODULE: ./node_modules/fast-deep-equal/index.js
 var fast_deep_equal = __webpack_require__(5215);
 var fast_deep_equal_default = /*#__PURE__*/__webpack_require__.n(fast_deep_equal);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-internal-value.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/use-internal-value.js
 /**
  * WordPress dependencies
  */
@@ -23452,28 +24111,29 @@
   return [internalValue, setInternalValue, setInternalURLInputValue, setInternalTextInputValue, createSetInternalSettingValueHandler];
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/link-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/link-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -23557,8 +24217,6 @@
  * @property {Function}                   renderControlBottom        Optional controls to be rendered at the bottom of the component.
  */
 
-
-
 const link_control_noop = () => {};
 const PREFERENCE_SCOPE = 'core/block-editor';
 const PREFERENCE_KEY = 'linkControlSettingsDrawer';
@@ -23629,10 +24287,10 @@
   // which may not have these preferences setup.
   // Therefore a local state is used as a fallback.
   const isSettingsOpen = advancedSettingsPreference || settingsOpen;
-  const isMounting = (0,external_wp_element_namespaceObject.useRef)(true);
+  const isMountingRef = (0,external_wp_element_namespaceObject.useRef)(true);
   const wrapperNode = (0,external_wp_element_namespaceObject.useRef)();
   const textInputRef = (0,external_wp_element_namespaceObject.useRef)();
-  const isEndingEditWithFocus = (0,external_wp_element_namespaceObject.useRef)(false);
+  const isEndingEditWithFocusRef = (0,external_wp_element_namespaceObject.useRef)(false);
   const settingsKeys = settings.map(({
     id
   }) => id);
@@ -23654,7 +24312,7 @@
     // We don't auto focus into the Link UI on mount
     // because otherwise using the keyboard to select text
     // *within* the link format is not possible.
-    if (isMounting.current) {
+    if (isMountingRef.current) {
       return;
     }
 
@@ -23665,15 +24323,15 @@
     // and to ensure focus is *within* the Link UI.
     const nextFocusTarget = external_wp_dom_namespaceObject.focus.focusable.find(wrapperNode.current)[0] || wrapperNode.current;
     nextFocusTarget.focus();
-    isEndingEditWithFocus.current = false;
+    isEndingEditWithFocusRef.current = false;
   }, [isEditingLink, isCreatingPage]);
 
   // The component mounting reference is maintained separately
   // to correctly reset values in `StrictMode`.
   (0,external_wp_element_namespaceObject.useEffect)(() => {
-    isMounting.current = false;
+    isMountingRef.current = false;
     return () => {
-      isMounting.current = true;
+      isMountingRef.current = true;
     };
   }, []);
   const hasLinkValue = value?.url?.trim()?.length > 0;
@@ -23683,12 +24341,12 @@
    * the next render, if focus was within the wrapper when editing finished.
    */
   const stopEditing = () => {
-    isEndingEditWithFocus.current = !!wrapperNode.current?.contains(wrapperNode.current.ownerDocument.activeElement);
+    isEndingEditWithFocusRef.current = !!wrapperNode.current?.contains(wrapperNode.current.ownerDocument.activeElement);
     setIsEditingLink(false);
   };
   const handleSelectSuggestion = updatedValue => {
     // Suggestions may contains "settings" values (e.g. `opensInNewTab`)
-    // which should not overide any existing settings values set by the
+    // which should not override any existing settings values set by the
     // user. This filters out any settings values from the suggestion.
     const nonSettingsChanges = Object.keys(updatedValue).reduce((acc, key) => {
       if (!settingsKeys.includes(key)) {
@@ -23780,7 +24438,7 @@
           value: internalControlValue?.title,
           onChange: setInternalTextInputValue,
           onKeyDown: handleSubmitWithEnter,
-          size: "__unstable-large"
+          __next40pxDefaultSize: true
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(search_input, {
           currentLink: value,
           className: "block-editor-link-control__field block-editor-link-control__search-input",
@@ -23796,15 +24454,17 @@
           suggestionsQuery: suggestionsQuery,
           withURLSuggestion: !noURLSuggestion,
           createSuggestionButtonText: createSuggestionButtonText,
-          hideLabelFromVision: !showTextControl
-        }), !showActions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-          className: "block-editor-link-control__search-enter",
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            onClick: isDisabled ? link_control_noop : handleSubmit,
-            label: (0,external_wp_i18n_namespaceObject.__)('Submit'),
-            icon: keyboard_return,
-            className: "block-editor-link-control__search-submit",
-            "aria-disabled": isDisabled
+          hideLabelFromVision: !showTextControl,
+          suffix: showActions ? undefined : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlSuffixWrapper, {
+            variant: "control",
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+              onClick: isDisabled ? link_control_noop : handleSubmit,
+              label: (0,external_wp_i18n_namespaceObject.__)('Submit'),
+              icon: keyboard_return,
+              className: "block-editor-link-control__search-submit",
+              "aria-disabled": isDisabled,
+              size: "small"
+            })
           })
         })]
       }), errorMessage && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Notice, {
@@ -23838,10 +24498,12 @@
       justify: "right",
       className: "block-editor-link-control__search-actions",
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         variant: "tertiary",
         onClick: handleCancel,
         children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         variant: "primary",
         onClick: isDisabled ? link_control_noop : handleSubmit,
         className: "block-editor-link-control__search-submit",
@@ -23853,33 +24515,37 @@
 }
 LinkControl.ViewerFill = ViewerFill;
 LinkControl.DEFAULT_LINK_SETTINGS = DEFAULT_LINK_SETTINGS;
+const DeprecatedExperimentalLinkControl = props => {
+  external_wp_deprecated_default()('wp.blockEditor.__experimentalLinkControl', {
+    since: '6.8',
+    alternative: 'wp.blockEditor.LinkControl'
+  });
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LinkControl, {
+    ...props
+  });
+};
+DeprecatedExperimentalLinkControl.ViewerFill = LinkControl.ViewerFill;
+DeprecatedExperimentalLinkControl.DEFAULT_LINK_SETTINGS = LinkControl.DEFAULT_LINK_SETTINGS;
+
 /* harmony default export */ const link_control = (LinkControl);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-replace-flow/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/media-replace-flow/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -23896,6 +24562,7 @@
   onError,
   onSelect,
   onSelectURL,
+  onReset,
   onToggleFeaturedImage,
   useFeaturedImage,
   onFilesUpload = media_replace_flow_noop,
@@ -23906,13 +24573,12 @@
   multiple = false,
   addToGallery,
   handleUpload = true,
-  popoverProps
+  popoverProps,
+  renderToggle
 }) => {
-  const mediaUpload = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    return select(store).getSettings().mediaUpload;
-  }, []);
-  const canUpload = !!mediaUpload;
-  const editMediaButtonRef = (0,external_wp_element_namespaceObject.useRef)();
+  const {
+    getSettings
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const errorNoticeID = `block-editor/media-replace-flow/error-notice/${++uniqueId}`;
   const onUploadError = message => {
     const safeMessage = (0,external_wp_dom_namespaceObject.__unstableStripHTML)(message);
@@ -23922,7 +24588,7 @@
     }
     // We need to set a timeout for showing the notice
     // so that VoiceOver and possibly other screen readers
-    // can announce the error afer the toolbar button
+    // can announce the error after the toolbar button
     // regains focus once the upload dialog closes.
     // Otherwise VO simply skips over the notice and announces
     // the focused element and the open menu.
@@ -23951,7 +24617,7 @@
       return onSelect(files);
     }
     onFilesUpload(files);
-    mediaUpload({
+    getSettings().mediaUpload({
       allowedTypes,
       filesList: files,
       onFileChange: ([media]) => {
@@ -23979,14 +24645,24 @@
     renderToggle: ({
       isOpen,
       onToggle
-    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-      ref: editMediaButtonRef,
-      "aria-expanded": isOpen,
-      "aria-haspopup": "true",
-      onClick: onToggle,
-      onKeyDown: openOnArrowDown,
-      children: name
-    }),
+    }) => {
+      if (renderToggle) {
+        return renderToggle({
+          'aria-expanded': isOpen,
+          'aria-haspopup': 'true',
+          onClick: onToggle,
+          onKeyDown: openOnArrowDown,
+          children: name
+        });
+      }
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+        "aria-expanded": isOpen,
+        "aria-haspopup": "true",
+        onClick: onToggle,
+        onKeyDown: openOnArrowDown,
+        children: name
+      });
+    },
     renderContent: ({
       onClose
     }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
@@ -24021,7 +24697,7 @@
                 onClick: () => {
                   openFileDialog();
                 },
-                children: (0,external_wp_i18n_namespaceObject.__)('Upload')
+                children: (0,external_wp_i18n_namespaceObject._x)('Upload', 'verb')
               });
             }
           })]
@@ -24030,14 +24706,20 @@
           onClick: onToggleFeaturedImage,
           isPressed: useFeaturedImage,
           children: (0,external_wp_i18n_namespaceObject.__)('Use featured image')
-        }), children]
+        }), mediaURL && onReset && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+          onClick: () => {
+            onReset();
+            onClose();
+          },
+          children: (0,external_wp_i18n_namespaceObject.__)('Reset')
+        }), typeof children === 'function' ? children({
+          onClose
+        }) : children]
       }), onSelectURL &&
       /*#__PURE__*/
       // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
       (0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
-        className: dist_clsx('block-editor-media-flow__url-input', {
-          'has-siblings': canUpload || onToggleFeaturedImage
-        }),
+        className: "block-editor-media-flow__url-input",
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
           className: "block-editor-media-replace-flow__image-url-label",
           children: (0,external_wp_i18n_namespaceObject.__)('Current media URL:')
@@ -24051,7 +24733,6 @@
             url
           }) => {
             onSelectURL(url);
-            editMediaButtonRef.current.focus();
           }
         })]
       })]
@@ -24073,81 +24754,7 @@
   };
 }), (0,external_wp_components_namespaceObject.withFilters)('editor.MediaReplaceFlow')])(MediaReplaceFlow));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/theme-file-uri-utils.js
-/**
- * Internal dependencies
- */
-
-
-/**
- * Looks up a theme file URI based on a relative path.
- *
- * @param {string}        file          A relative path.
- * @param {Array<Object>} themeFileURIs A collection of absolute theme file URIs and their corresponding file paths.
- * @return {string?} A resolved theme file URI, if one is found in the themeFileURIs collection.
- */
-function getResolvedThemeFilePath(file, themeFileURIs = []) {
-  const uri = themeFileURIs.find(themeFileUri => themeFileUri.name === file);
-  if (!uri?.href) {
-    return file;
-  }
-  return uri?.href;
-}
-
-/**
- * Mutates an object by settings a value at the provided path.
- *
- * @param {Object}              object Object to set a value in.
- * @param {number|string|Array} path   Path in the object to modify.
- * @param {*}                   value  New value to set.
- * @return {Object} Object with the new value set.
- */
-function setMutably(object, path, value) {
-  path = path.split('.');
-  const finalValueKey = path.pop();
-  let prev = object;
-  for (const key of path) {
-    const current = prev[key];
-    prev = current;
-  }
-  prev[finalValueKey] = value;
-  return object;
-}
-
-/**
- * Resolves any relative paths if a corresponding theme file URI is available.
- * Note: this function mutates the object and is specifically to be used in
- * an async styles build context in useGlobalStylesOutput
- *
- * @param {Object}        themeJson     Theme.json/Global styles tree.
- * @param {Array<Object>} themeFileURIs A collection of absolute theme file URIs and their corresponding file paths.
- * @return {Object} Returns mutated object.
- */
-function setThemeFileUris(themeJson, themeFileURIs) {
-  if (!themeJson?.styles || !themeFileURIs) {
-    return themeJson;
-  }
-  themeFileURIs.forEach(({
-    name,
-    href,
-    target
-  }) => {
-    const value = getValueFromObjectPath(themeJson, target);
-    if (value === name) {
-      /*
-       * The object must not be updated immutably here because the
-       * themeJson is a reference to the global styles tree used as a dependency in the
-       * useGlobalStylesOutputWithConfig() hook. If we don't mutate the object,
-       * the hook will detect the change and re-render the component, resulting
-       * in a maximum depth exceeded error.
-       */
-      themeJson = setMutably(themeJson, target, href);
-    }
-  });
-  return themeJson;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/background-panel.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/background-image-control/index.js
 /**
  * External dependencies
  */
@@ -24176,47 +24783,13 @@
 
 
 const IMAGE_BACKGROUND_TYPE = 'image';
-const background_panel_DEFAULT_CONTROLS = {
-  backgroundImage: true,
-  backgroundSize: false
-};
-
-/**
- * Checks site settings to see if the background panel may be used.
- * `settings.background.backgroundSize` exists also,
- * but can only be used if settings?.background?.backgroundImage is `true`.
- *
- * @param {Object} settings Site settings
- * @return {boolean}        Whether site settings has activated background panel.
- */
-function useHasBackgroundPanel(settings) {
-  return external_wp_element_namespaceObject.Platform.OS === 'web' && settings?.background?.backgroundImage;
-}
-
-/**
- * Checks if there is a current value in the background size block support
- * attributes. Background size values include background size as well
- * as background position.
- *
- * @param {Object} style Style attribute.
- * @return {boolean}     Whether the block has a background size value set.
- */
-function hasBackgroundSizeValue(style) {
-  return style?.background?.backgroundPosition !== undefined || style?.background?.backgroundSize !== undefined;
-}
-
-/**
- * Checks if there is a current value in the background image block support
- * attributes.
- *
- * @param {Object} style Style attribute.
- * @return {boolean}     Whether the block has a background image value set.
- */
-function hasBackgroundImageValue(style) {
-  return !!style?.background?.backgroundImage?.id ||
-  // Supports url() string values in theme.json.
-  'string' === typeof style?.background?.backgroundImage || !!style?.background?.backgroundImage?.url;
-}
+const BACKGROUND_POPOVER_PROPS = {
+  placement: 'left-start',
+  offset: 36,
+  shift: true,
+  className: 'block-editor-global-styles-background-panel__popover'
+};
+const background_image_control_noop = () => {};
 
 /**
  * Get the help text for the background size control.
@@ -24271,21 +24844,30 @@
     y
   };
 };
-function InspectorImagePreview({
-  label,
+function InspectorImagePreviewItem({
+  as = 'span',
+  imgUrl,
+  toggleProps = {},
   filename,
-  url: imgUrl
-}) {
-  const imgLabel = label || (0,external_wp_url_namespaceObject.getFilename)(imgUrl) || (0,external_wp_i18n_namespaceObject.__)('Add background image');
+  label,
+  className,
+  onToggleCallback = background_image_control_noop
+}) {
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (typeof toggleProps?.isOpen !== 'undefined') {
+      onToggleCallback(toggleProps?.isOpen);
+    }
+  }, [toggleProps?.isOpen, onToggleCallback]);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
-    as: "span",
+    as: as,
+    className: className,
+    ...toggleProps,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-      justify: imgUrl ? 'flex-start' : 'center',
+      justify: "flex-start",
       as: "span",
+      className: "block-editor-global-styles-background-panel__inspector-preview-inner",
       children: [imgUrl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-        className: dist_clsx('block-editor-global-styles-background-panel__inspector-image-indicator-wrapper', {
-          'has-image': imgUrl
-        }),
+        className: "block-editor-global-styles-background-panel__inspector-image-indicator-wrapper",
         "aria-hidden": true,
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
           className: "block-editor-global-styles-background-panel__inspector-image-indicator",
@@ -24295,28 +24877,82 @@
         })
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.FlexItem, {
         as: "span",
+        style: imgUrl ? {} : {
+          flexGrow: 1
+        },
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalTruncate, {
           numberOfLines: 1,
           className: "block-editor-global-styles-background-panel__inspector-media-replace-title",
-          children: imgLabel
+          children: label
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
           as: "span",
-          children: imgUrl ? (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: file name */
-          (0,external_wp_i18n_namespaceObject.__)('Background image: %s'), filename || imgLabel) : (0,external_wp_i18n_namespaceObject.__)('No background image selected')
+          children: imgUrl ? (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: file name */
+          (0,external_wp_i18n_namespaceObject.__)('Background image: %s'), filename || label) : (0,external_wp_i18n_namespaceObject.__)('No background image selected')
         })]
       })]
     })
   });
 }
-function BackgroundImageToolsPanelItem({
-  panelId,
-  isShownByDefault,
+function BackgroundControlsPanel({
+  label,
+  filename,
+  url: imgUrl,
+  children,
+  onToggle: onToggleCallback = background_image_control_noop,
+  hasImageValue
+}) {
+  if (!hasImageValue) {
+    return;
+  }
+  const imgLabel = label || (0,external_wp_url_namespaceObject.getFilename)(imgUrl) || (0,external_wp_i18n_namespaceObject.__)('Add background image');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
+    popoverProps: BACKGROUND_POPOVER_PROPS,
+    renderToggle: ({
+      onToggle,
+      isOpen
+    }) => {
+      const toggleProps = {
+        onClick: onToggle,
+        className: 'block-editor-global-styles-background-panel__dropdown-toggle',
+        'aria-expanded': isOpen,
+        'aria-label': (0,external_wp_i18n_namespaceObject.__)('Background size, position and repeat options.'),
+        isOpen
+      };
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorImagePreviewItem, {
+        imgUrl: imgUrl,
+        filename: filename,
+        label: imgLabel,
+        toggleProps: toggleProps,
+        as: "button",
+        onToggleCallback: onToggleCallback
+      });
+    },
+    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
+      className: "block-editor-global-styles-background-panel__dropdown-content-wrapper",
+      paddingSize: "medium",
+      children: children
+    })
+  });
+}
+function LoadingSpinner() {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Placeholder, {
+    className: "block-editor-global-styles-background-panel__loading",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
+  });
+}
+function BackgroundImageControls({
   onChange,
   style,
   inheritedValue,
-  themeFileURIs
-}) {
-  const mediaUpload = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings().mediaUpload, []);
+  onRemoveImage = background_image_control_noop,
+  onResetImage = background_image_control_noop,
+  displayInPanel,
+  defaultValues
+}) {
+  const [isUploading, setIsUploading] = (0,external_wp_element_namespaceObject.useState)(false);
+  const {
+    getSettings
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const {
     id,
     title,
@@ -24332,14 +24968,17 @@
     createErrorNotice(message, {
       type: 'snackbar'
     });
+    setIsUploading(false);
   };
   const resetBackgroundImage = () => onChange(setImmutably(style, ['background', 'backgroundImage'], undefined));
   const onSelectMedia = media => {
     if (!media || !media.url) {
       resetBackgroundImage();
+      setIsUploading(false);
       return;
     }
     if ((0,external_wp_blob_namespaceObject.isBlobURL)(media.url)) {
+      setIsUploading(true);
       return;
     }
 
@@ -24348,7 +24987,7 @@
       onUploadError((0,external_wp_i18n_namespaceObject.__)('Only images can be used as a background image.'));
       return;
     }
-    const sizeValue = style?.background?.backgroundSize;
+    const sizeValue = style?.background?.backgroundSize || defaultValues?.backgroundSize;
     const positionValue = style?.background?.backgroundPosition;
     onChange(setImmutably(style, ['background'], {
       ...style?.background,
@@ -24358,31 +24997,31 @@
         source: 'file',
         title: media.title || undefined
       },
-      backgroundPosition: !positionValue && ('auto' === sizeValue || !sizeValue) ? '50% 0' : positionValue
+      backgroundPosition:
+      /*
+       * A background image uploaded and set in the editor receives a default background position of '50% 0',
+       * when the background image size is the equivalent of "Tile".
+       * This is to increase the chance that the image's focus point is visible.
+       * This is in-editor only to assist with the user experience.
+       */
+      !positionValue && ('auto' === sizeValue || !sizeValue) ? '50% 0' : positionValue,
+      backgroundSize: sizeValue
     }));
-  };
+    setIsUploading(false);
+  };
+
+  // Drag and drop callback, restricting image to one.
   const onFilesDrop = filesList => {
-    mediaUpload({
+    getSettings().mediaUpload({
       allowedTypes: [IMAGE_BACKGROUND_TYPE],
       filesList,
       onFileChange([image]) {
-        if ((0,external_wp_blob_namespaceObject.isBlobURL)(image?.url)) {
-          return;
-        }
         onSelectMedia(image);
       },
-      onError: onUploadError
-    });
-  };
-  const resetAllFilter = (0,external_wp_element_namespaceObject.useCallback)(previousValue => {
-    return {
-      ...previousValue,
-      style: {
-        ...previousValue.style,
-        background: undefined
-      }
-    };
-  }, []);
+      onError: onUploadError,
+      multiple: false
+    });
+  };
   const hasValue = hasBackgroundImageValue(style);
   const closeAndFocus = () => {
     const [toggleButton] = external_wp_dom_namespaceObject.focus.tabbable.find(replaceContainerRef.current);
@@ -24392,94 +25031,85 @@
     toggleButton?.focus();
     toggleButton?.click();
   };
-  const onRemove = () => onChange(setImmutably(style, ['background', 'backgroundImage'], 'none'));
+  const onRemove = () => onChange(setImmutably(style, ['background'], {
+    backgroundImage: 'none'
+  }));
   const canRemove = !hasValue && hasBackgroundImageValue(inheritedValue);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
-    className: "single-column",
-    hasValue: () => hasValue,
-    label: (0,external_wp_i18n_namespaceObject.__)('Background image'),
-    onDeselect: resetBackgroundImage,
-    isShownByDefault: isShownByDefault,
-    resetAllFilter: resetAllFilter,
-    panelId: panelId,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-      className: "block-editor-global-styles-background-panel__inspector-media-replace-container",
-      ref: replaceContainerRef,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(media_replace_flow, {
-        mediaId: id,
-        mediaURL: url,
-        allowedTypes: [IMAGE_BACKGROUND_TYPE],
-        accept: "image/*",
-        onSelect: onSelectMedia,
-        name: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorImagePreview, {
-          label: title,
-          filename: title,
-          url: getResolvedThemeFilePath(url, themeFileURIs)
-        }),
-        variant: "secondary",
-        children: [canRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-          onClick: () => {
-            closeAndFocus();
-            onRemove();
-          },
-          children: (0,external_wp_i18n_namespaceObject.__)('Remove')
-        }), hasValue && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-          onClick: () => {
-            closeAndFocus();
-            resetBackgroundImage();
-          },
-          children: (0,external_wp_i18n_namespaceObject.__)('Reset ')
-        })]
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropZone, {
-        onFilesDrop: onFilesDrop,
-        label: (0,external_wp_i18n_namespaceObject.__)('Drop to upload')
-      })]
-    })
-  });
-}
-function BackgroundSizeToolsPanelItem({
-  panelId,
-  isShownByDefault,
+  const imgLabel = title || (0,external_wp_url_namespaceObject.getFilename)(url) || (0,external_wp_i18n_namespaceObject.__)('Add background image');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    ref: replaceContainerRef,
+    className: "block-editor-global-styles-background-panel__image-tools-panel-item",
+    children: [isUploading && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LoadingSpinner, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(media_replace_flow, {
+      mediaId: id,
+      mediaURL: url,
+      allowedTypes: [IMAGE_BACKGROUND_TYPE],
+      accept: "image/*",
+      onSelect: onSelectMedia,
+      popoverProps: {
+        className: dist_clsx({
+          'block-editor-global-styles-background-panel__media-replace-popover': displayInPanel
+        })
+      },
+      name: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorImagePreviewItem, {
+        className: "block-editor-global-styles-background-panel__image-preview",
+        imgUrl: url,
+        filename: title,
+        label: imgLabel
+      }),
+      renderToggle: props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        ...props,
+        __next40pxDefaultSize: true
+      }),
+      onError: onUploadError,
+      onReset: () => {
+        closeAndFocus();
+        onResetImage();
+      },
+      children: canRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+        onClick: () => {
+          closeAndFocus();
+          onRemove();
+          onRemoveImage();
+        },
+        children: (0,external_wp_i18n_namespaceObject.__)('Remove')
+      })
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropZone, {
+      onFilesDrop: onFilesDrop,
+      label: (0,external_wp_i18n_namespaceObject.__)('Drop to upload')
+    })]
+  });
+}
+function BackgroundSizeControls({
   onChange,
   style,
   inheritedValue,
-  defaultValues,
-  themeFileURIs
+  defaultValues
 }) {
   const sizeValue = style?.background?.backgroundSize || inheritedValue?.background?.backgroundSize;
   const repeatValue = style?.background?.backgroundRepeat || inheritedValue?.background?.backgroundRepeat;
   const imageValue = style?.background?.backgroundImage?.url || inheritedValue?.background?.backgroundImage?.url;
+  const isUploadedImage = style?.background?.backgroundImage?.id;
   const positionValue = style?.background?.backgroundPosition || inheritedValue?.background?.backgroundPosition;
+  const attachmentValue = style?.background?.backgroundAttachment || inheritedValue?.background?.backgroundAttachment;
 
   /*
-   * An `undefined` value is replaced with any supplied
-   * default control value for the toggle group control.
-   * An empty string is treated as `auto` - this allows a user
-   * to select "Size" and then enter a custom value, with an
-   * empty value being treated as `auto`.
+   * Set default values for uploaded images.
+   * The default values are passed by the consumer.
+   * Block-level controls may have different defaults to root-level controls.
+   * A falsy value is treated by default as `auto` (Tile).
    */
-  const currentValueForToggle = sizeValue !== undefined && sizeValue !== 'cover' && sizeValue !== 'contain' || sizeValue === '' ? 'auto' : sizeValue || defaultValues?.backgroundSize;
-
+  let currentValueForToggle = !sizeValue && isUploadedImage ? defaultValues?.backgroundSize : sizeValue || 'auto';
+  /*
+   * The incoming value could be a value + unit, e.g. '20px'.
+   * In this case set the value to 'tile'.
+   */
+  currentValueForToggle = !['cover', 'contain', 'auto'].includes(currentValueForToggle) ? 'auto' : currentValueForToggle;
   /*
    * If the current value is `cover` and the repeat value is `undefined`, then
    * the toggle should be unchecked as the default state. Otherwise, the toggle
    * should reflect the current repeat value.
    */
   const repeatCheckedValue = !(repeatValue === 'no-repeat' || currentValueForToggle === 'cover' && repeatValue === undefined);
-  const hasValue = hasBackgroundSizeValue(style);
-  const resetAllFilter = (0,external_wp_element_namespaceObject.useCallback)(previousValue => {
-    return {
-      ...previousValue,
-      style: {
-        ...previousValue.style,
-        background: {
-          ...previousValue.style?.background,
-          backgroundRepeat: undefined,
-          backgroundSize: undefined
-        }
-      }
-    };
-  }, []);
   const updateBackgroundSize = next => {
     // When switching to 'contain' toggle the repeat off.
     let nextRepeat = repeatValue;
@@ -24499,6 +25129,7 @@
        * receives a default background position of '50% 0',
        * when the toggle switches to "Tile". This is to increase the chance that
        * the image's focus point is visible.
+       * This is in-editor only to assist with the user experience.
        */
       if (!!style?.background?.backgroundImage?.id) {
         nextPosition = '50% 0';
@@ -24523,29 +25154,26 @@
     onChange(setImmutably(style, ['background', 'backgroundPosition'], coordsToBackgroundPosition(next)));
   };
   const toggleIsRepeated = () => onChange(setImmutably(style, ['background', 'backgroundRepeat'], repeatCheckedValue === true ? 'no-repeat' : 'repeat'));
-  const resetBackgroundSize = () => onChange(setImmutably(style, ['background'], {
-    ...style?.background,
-    backgroundPosition: undefined,
-    backgroundRepeat: undefined,
-    backgroundSize: undefined
-  }));
+  const toggleScrollWithPage = () => onChange(setImmutably(style, ['background', 'backgroundAttachment'], attachmentValue === 'fixed' ? 'scroll' : 'fixed'));
+
+  // Set a default background position for non-site-wide, uploaded images with a size of 'contain'.
+  const backgroundPositionValue = !positionValue && isUploadedImage && 'contain' === sizeValue ? defaultValues?.backgroundPosition : positionValue;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
-    as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
-    spacing: 2,
+    spacing: 3,
     className: "single-column",
-    hasValue: () => hasValue,
-    label: (0,external_wp_i18n_namespaceObject.__)('Size'),
-    onDeselect: resetBackgroundSize,
-    isShownByDefault: isShownByDefault,
-    resetAllFilter: resetAllFilter,
-    panelId: panelId,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FocalPointPicker, {
-      __next40pxDefaultSize: true,
-      label: (0,external_wp_i18n_namespaceObject.__)('Position'),
-      url: getResolvedThemeFilePath(imageValue, themeFileURIs),
-      value: backgroundPositionToCoords(positionValue),
+      __nextHasNoMarginBottom: true,
+      label: (0,external_wp_i18n_namespaceObject.__)('Focal point'),
+      url: imageValue,
+      value: backgroundPositionToCoords(backgroundPositionValue),
       onChange: updateBackgroundPosition
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
+      __nextHasNoMarginBottom: true,
+      label: (0,external_wp_i18n_namespaceObject.__)('Fixed background'),
+      checked: attachmentValue === 'fixed',
+      onChange: toggleScrollWithPage
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+      __nextHasNoMarginBottom: true,
       size: "__unstable-large",
       label: (0,external_wp_i18n_namespaceObject.__)('Size'),
       value: currentValueForToggle,
@@ -24566,22 +25194,176 @@
       justify: "flex-start",
       spacing: 2,
       as: "span",
-      children: [currentValueForToggle !== undefined && currentValueForToggle !== 'cover' && currentValueForToggle !== 'contain' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
         "aria-label": (0,external_wp_i18n_namespaceObject.__)('Background image width'),
         onChange: updateBackgroundSize,
         value: sizeValue,
         size: "__unstable-large",
         __unstableInputWidth: "100px",
         min: 0,
-        placeholder: (0,external_wp_i18n_namespaceObject.__)('Auto')
-      }) : null, currentValueForToggle !== 'cover' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
+        placeholder: (0,external_wp_i18n_namespaceObject.__)('Auto'),
+        disabled: currentValueForToggle !== 'auto' || currentValueForToggle === undefined
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
+        __nextHasNoMarginBottom: true,
         label: (0,external_wp_i18n_namespaceObject.__)('Repeat'),
         checked: repeatCheckedValue,
-        onChange: toggleIsRepeated
+        onChange: toggleIsRepeated,
+        disabled: currentValueForToggle === 'cover'
       })]
     })]
   });
 }
+function BackgroundImagePanel({
+  value,
+  onChange,
+  inheritedValue = value,
+  settings,
+  defaultValues = {}
+}) {
+  /*
+   * Resolve any inherited "ref" pointers.
+   * Should the block editor need resolved, inherited values
+   * across all controls, this could be abstracted into a hook,
+   * e.g., useResolveGlobalStyle
+   */
+  const {
+    globalStyles,
+    _links
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getSettings
+    } = select(store);
+    const _settings = getSettings();
+    return {
+      globalStyles: _settings[globalStylesDataKey],
+      _links: _settings[globalStylesLinksDataKey]
+    };
+  }, []);
+  const resolvedInheritedValue = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    const resolvedValues = {
+      background: {}
+    };
+    if (!inheritedValue?.background) {
+      return inheritedValue;
+    }
+    Object.entries(inheritedValue?.background).forEach(([key, backgroundValue]) => {
+      resolvedValues.background[key] = getResolvedValue(backgroundValue, {
+        styles: globalStyles,
+        _links
+      });
+    });
+    return resolvedValues;
+  }, [globalStyles, _links, inheritedValue]);
+  const resetBackground = () => onChange(setImmutably(value, ['background'], {}));
+  const {
+    title,
+    url
+  } = value?.background?.backgroundImage || {
+    ...resolvedInheritedValue?.background?.backgroundImage
+  };
+  const hasImageValue = hasBackgroundImageValue(value) || hasBackgroundImageValue(resolvedInheritedValue);
+  const imageValue = value?.background?.backgroundImage || inheritedValue?.background?.backgroundImage;
+  const shouldShowBackgroundImageControls = hasImageValue && 'none' !== imageValue && (settings?.background?.backgroundSize || settings?.background?.backgroundPosition || settings?.background?.backgroundRepeat);
+  const [isDropDownOpen, setIsDropDownOpen] = (0,external_wp_element_namespaceObject.useState)(false);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    className: dist_clsx('block-editor-global-styles-background-panel__inspector-media-replace-container', {
+      'is-open': isDropDownOpen
+    }),
+    children: shouldShowBackgroundImageControls ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundControlsPanel, {
+      label: title,
+      filename: title,
+      url: url,
+      onToggle: setIsDropDownOpen,
+      hasImageValue: hasImageValue,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+        spacing: 3,
+        className: "single-column",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundImageControls, {
+          onChange: onChange,
+          style: value,
+          inheritedValue: resolvedInheritedValue,
+          displayInPanel: true,
+          onResetImage: () => {
+            setIsDropDownOpen(false);
+            resetBackground();
+          },
+          onRemoveImage: () => setIsDropDownOpen(false),
+          defaultValues: defaultValues
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundSizeControls, {
+          onChange: onChange,
+          style: value,
+          defaultValues: defaultValues,
+          inheritedValue: resolvedInheritedValue
+        })]
+      })
+    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundImageControls, {
+      onChange: onChange,
+      style: value,
+      inheritedValue: resolvedInheritedValue,
+      defaultValues: defaultValues,
+      onResetImage: () => {
+        setIsDropDownOpen(false);
+        resetBackground();
+      },
+      onRemoveImage: () => setIsDropDownOpen(false)
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/background-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+const background_panel_DEFAULT_CONTROLS = {
+  backgroundImage: true
+};
+
+/**
+ * Checks site settings to see if the background panel may be used.
+ * `settings.background.backgroundSize` exists also,
+ * but can only be used if settings?.background?.backgroundImage is `true`.
+ *
+ * @param {Object} settings Site settings
+ * @return {boolean}        Whether site settings has activated background panel.
+ */
+function useHasBackgroundPanel(settings) {
+  return external_wp_element_namespaceObject.Platform.OS === 'web' && settings?.background?.backgroundImage;
+}
+
+/**
+ * Checks if there is a current value in the background size block support
+ * attributes. Background size values include background size as well
+ * as background position.
+ *
+ * @param {Object} style Style attribute.
+ * @return {boolean}     Whether the block has a background size value set.
+ */
+function hasBackgroundSizeValue(style) {
+  return style?.background?.backgroundPosition !== undefined || style?.background?.backgroundSize !== undefined;
+}
+
+/**
+ * Checks if there is a current value in the background image block support
+ * attributes.
+ *
+ * @param {Object} style Style attribute.
+ * @return {boolean}     Whether the block has a background image value set.
+ */
+function hasBackgroundImageValue(style) {
+  return !!style?.background?.backgroundImage?.id ||
+  // Supports url() string values in theme.json.
+  'string' === typeof style?.background?.backgroundImage || !!style?.background?.backgroundImage?.url;
+}
 function BackgroundToolsPanel({
   resetAllFilter,
   onChange,
@@ -24595,9 +25377,7 @@
     const updatedValue = resetAllFilter(value);
     onChange(updatedValue);
   };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
-    as: external_wp_components_namespaceObject.__experimentalToolsPanel,
-    spacing: 4,
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanel, {
     label: headerLabel,
     resetAll: resetAll,
     panelId: panelId,
@@ -24605,61 +25385,61 @@
     children: children
   });
 }
-function BackgroundPanel({
+function background_panel_BackgroundImagePanel({
   as: Wrapper = BackgroundToolsPanel,
   value,
   onChange,
-  inheritedValue = value,
+  inheritedValue,
   settings,
   panelId,
   defaultControls = background_panel_DEFAULT_CONTROLS,
   defaultValues = {},
-  headerLabel = (0,external_wp_i18n_namespaceObject.__)('Background image'),
-  themeFileURIs
-}) {
+  headerLabel = (0,external_wp_i18n_namespaceObject.__)('Background image')
+}) {
+  const showBackgroundImageControl = useHasBackgroundPanel(settings);
+  const resetBackground = () => onChange(setImmutably(value, ['background'], {}));
   const resetAllFilter = (0,external_wp_element_namespaceObject.useCallback)(previousValue => {
     return {
       ...previousValue,
       background: {}
     };
   }, []);
-  const shouldShowBackgroundSizeControls = settings?.background?.backgroundSize;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Wrapper, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Wrapper, {
     resetAllFilter: resetAllFilter,
     value: value,
     onChange: onChange,
     panelId: panelId,
     headerLabel: headerLabel,
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundImageToolsPanelItem, {
-      onChange: onChange,
-      panelId: panelId,
+    children: showBackgroundImageControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
+      hasValue: () => !!value?.background,
+      label: (0,external_wp_i18n_namespaceObject.__)('Image'),
+      onDeselect: resetBackground,
       isShownByDefault: defaultControls.backgroundImage,
-      style: value,
-      inheritedValue: inheritedValue,
-      themeFileURIs: themeFileURIs
-    }), shouldShowBackgroundSizeControls && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundSizeToolsPanelItem, {
-      onChange: onChange,
       panelId: panelId,
-      isShownByDefault: defaultControls.backgroundSize,
-      style: value,
-      inheritedValue: inheritedValue,
-      defaultValues: defaultValues,
-      themeFileURIs: themeFileURIs
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/background.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundImagePanel, {
+        value: value,
+        onChange: onChange,
+        settings: settings,
+        inheritedValue: inheritedValue,
+        defaultControls: defaultControls,
+        defaultValues: defaultValues
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/background.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -24667,9 +25447,10 @@
 
 const BACKGROUND_SUPPORT_KEY = 'background';
 
-// Initial control values where no block style is set.
-const BACKGROUND_DEFAULT_VALUES = {
-  backgroundSize: 'cover'
+// Initial control values.
+const BACKGROUND_BLOCK_DEFAULT_VALUES = {
+  backgroundSize: 'cover',
+  backgroundPosition: '50% 50%' // used only when backgroundSize is 'contain'.
 };
 
 /**
@@ -24691,24 +25472,21 @@
   return !!support?.[feature];
 }
 function setBackgroundStyleDefaults(backgroundStyle) {
-  if (!backgroundStyle) {
-    return;
-  }
-  const backgroundImage = backgroundStyle?.backgroundImage;
+  if (!backgroundStyle || !backgroundStyle?.backgroundImage?.url) {
+    return;
+  }
   let backgroundStylesWithDefaults;
 
   // Set block background defaults.
-  if (!!backgroundImage?.url) {
-    if (!backgroundStyle?.backgroundSize) {
-      backgroundStylesWithDefaults = {
-        backgroundSize: 'cover'
-      };
-    }
-    if ('contain' === backgroundStyle?.backgroundSize && !backgroundStyle?.backgroundPosition) {
-      backgroundStylesWithDefaults = {
-        backgroundPosition: 'center'
-      };
-    }
+  if (!backgroundStyle?.backgroundSize) {
+    backgroundStylesWithDefaults = {
+      backgroundSize: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundSize
+    };
+  }
+  if ('contain' === backgroundStyle?.backgroundSize && !backgroundStyle?.backgroundPosition) {
+    backgroundStylesWithDefaults = {
+      backgroundPosition: BACKGROUND_BLOCK_DEFAULT_VALUES.backgroundPosition
+    };
   }
   return backgroundStylesWithDefaults;
 }
@@ -24758,17 +25536,36 @@
     children: children
   });
 }
-function BackgroundImagePanel({
+function background_BackgroundImagePanel({
   clientId,
   name,
   setAttributes,
   settings
 }) {
-  const style = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getBlockAttributes(clientId)?.style, [clientId]);
+  const {
+    style,
+    inheritedValue
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockAttributes,
+      getSettings
+    } = select(store);
+    const _settings = getSettings();
+    return {
+      style: getBlockAttributes(clientId)?.style,
+      /*
+       * To ensure we pass down the right inherited values:
+       * @TODO 1. Pass inherited value down to all block style controls,
+       *   See: packages/block-editor/src/hooks/style.js
+       * @TODO 2. Add support for block style variations,
+       *   See implementation: packages/block-editor/src/hooks/block-style-variation.js
+       */
+      inheritedValue: _settings[globalStylesDataKey]?.blocks?.[name]
+    };
+  }, [clientId, name]);
   if (!useHasBackgroundPanel(settings) || !hasBackgroundSupport(name, 'backgroundImage')) {
     return null;
   }
-  const defaultControls = (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, [BACKGROUND_SUPPORT_KEY, '__experimentalDefaultControls']);
   const onChange = newStyle => {
     setAttributes({
       style: utils_cleanEmptyObject(newStyle)
@@ -24781,13 +25578,15 @@
       backgroundSize: settings?.background?.backgroundSize && hasBackgroundSupport(name, 'backgroundSize')
     }
   };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundPanel, {
+  const defaultControls = (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, [BACKGROUND_SUPPORT_KEY, 'defaultControls']);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(background_panel_BackgroundImagePanel, {
+    inheritedValue: inheritedValue,
     as: BackgroundInspectorControl,
     panelId: clientId,
-    defaultControls: defaultControls,
-    defaultValues: BACKGROUND_DEFAULT_VALUES,
+    defaultValues: BACKGROUND_BLOCK_DEFAULT_VALUES,
     settings: updatedSettings,
     onChange: onChange,
+    defaultControls: defaultControls,
     value: style
   });
 }
@@ -24797,7 +25596,7 @@
   hasSupport: hasBackgroundSupport
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/lock.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/lock.js
 /**
  * WordPress dependencies
  */
@@ -24827,7 +25626,7 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/lock/addAttribute', lock_addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/anchor.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/anchor.js
 /**
  * WordPress dependencies
  */
@@ -24849,8 +25648,6 @@
  * @type {RegExp}
  */
 
-
-
 const ANCHOR_REGEX = /[\s#]/g;
 const ANCHOR_SCHEMA = {
   type: 'string',
@@ -24947,18 +25744,12 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/anchor/attribute', anchor_addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/aria-label.js
-/**
- * WordPress dependencies
- */
-
-
-const ARIA_LABEL_SCHEMA = {
-  type: 'string',
-  source: 'attribute',
-  attribute: 'aria-label',
-  selector: '*'
-};
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/aria-label.js
+/**
+ * WordPress dependencies
+ */
+
+
 
 /**
  * Filters registered block settings, extending attributes with ariaLabel using aria-label
@@ -24977,7 +25768,9 @@
     // Gracefully handle if settings.attributes is undefined.
     settings.attributes = {
       ...settings.attributes,
-      ariaLabel: ARIA_LABEL_SCHEMA
+      ariaLabel: {
+        type: 'string'
+      }
     };
   }
   return settings;
@@ -25009,7 +25802,7 @@
 });
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/ariaLabel/attribute', aria_label_addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/custom-class-name.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/custom-class-name.js
 /**
  * External dependencies
  */
@@ -25123,7 +25916,8 @@
   // if source N does not exists we do nothing.
   if (source[index]) {
     const originClassName = source[index]?.attributes.className;
-    if (originClassName) {
+    // Avoid overriding classes if the transformed block already includes them.
+    if (originClassName && result.attributes.className === undefined) {
       return {
         ...result,
         attributes: {
@@ -25138,7 +25932,7 @@
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/custom-class-name/attribute', custom_class_name_addAttribute);
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.switchToBlockType.transformedBlock', 'core/color/addTransforms', addTransforms);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/generated-class-name.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/generated-class-name.js
 /**
  * WordPress dependencies
  */
@@ -25173,16 +25967,16 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.getSaveContent.extraProps', 'core/generated-class-name/save-props', addGeneratedClassName);
 
-;// CONCATENATED MODULE: ./node_modules/colord/index.mjs
+;// ./node_modules/colord/index.mjs
 var colord_r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return"string"==typeof r?r.length>0:"number"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?"0"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,p=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,v=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,m=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u="deg"),Number(e)*(colord_r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},"hsl"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},"rgb"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},"hsl"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},"hsv"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return"string"==typeof r?N(r.trim(),y.string):"object"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},colord_j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):"","#"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?"rgba("+t+", "+n+", "+e+", "+u+")":"rgb("+t+", "+n+", "+e+")";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?"hsla("+t+", "+n+"%, "+e+"%, "+u+")":"hsl("+t+", "+n+"%, "+e+"%)";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return"number"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return"number"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof colord_j?r:new colord_j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(colord_j,y),S.push(r))})},E=function(){return new colord_j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};
 
-;// CONCATENATED MODULE: ./node_modules/colord/plugins/names.mjs
+;// ./node_modules/colord/plugins/names.mjs
 /* harmony default export */ function names(e,f){var a={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b="black";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u<t&&(t=u,b=g)}return b}};f.string.push([function(f){var r=f.toLowerCase(),d="transparent"===r?"#0000":a[r];return d?new e(d).toRgb():null},"name"])}
 
-;// CONCATENATED MODULE: ./node_modules/colord/plugins/a11y.mjs
+;// ./node_modules/colord/plugins/a11y.mjs
 var a11y_o=function(o){var t=o/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},a11y_t=function(t){return.2126*a11y_o(t.r)+.7152*a11y_o(t.g)+.0722*a11y_o(t.b)};/* harmony default export */ function a11y(o){o.prototype.luminance=function(){return o=a11y_t(this.rgba),void 0===(r=2)&&(r=0),void 0===n&&(n=Math.pow(10,r)),Math.round(n*o)/n+0;var o,r,n},o.prototype.contrast=function(r){void 0===r&&(r="#FFF");var n,a,i,e,v,u,d,c=r instanceof o?r:new o(r);return e=this.rgba,v=c.toRgb(),u=a11y_t(e),d=a11y_t(v),n=u>d?(u+.05)/(d+.05):(d+.05)/(u+.05),void 0===(a=2)&&(a=0),void 0===i&&(i=Math.pow(10,a)),Math.floor(i*n)/i+0},o.prototype.isReadable=function(o,t){return void 0===o&&(o="#FFF"),void 0===t&&(t={}),this.contrast(o)>=(e=void 0===(i=(r=t).size)?"normal":i,"AAA"===(a=void 0===(n=r.level)?"AA":n)&&"normal"===e?7:"AA"===a&&"large"===e?3:4.5);var r,n,a,i,e}}
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors/utils.js
 /**
  * External dependencies
  */
@@ -25274,7 +26068,7 @@
   return colors.find(color => getColorContrast(color) === maxContrast).color;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js
 /**
  * WordPress dependencies
  */
@@ -25305,18 +26099,21 @@
     if (themeColors && themeColors.length) {
       result.push({
         name: (0,external_wp_i18n_namespaceObject._x)('Theme', 'Indicates this palette comes from the theme.'),
+        slug: 'theme',
         colors: themeColors
       });
     }
     if (shouldDisplayDefaultColors && defaultColors && defaultColors.length) {
       result.push({
         name: (0,external_wp_i18n_namespaceObject._x)('Default', 'Indicates this palette comes from WordPress.'),
+        slug: 'default',
         colors: defaultColors
       });
     }
     if (customColors && customColors.length) {
       result.push({
-        name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates this palette comes from the theme.'),
+        name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates this palette is created by the user.'),
+        slug: 'custom',
         colors: customColors
       });
     }
@@ -25327,18 +26124,21 @@
     if (themeGradients && themeGradients.length) {
       result.push({
         name: (0,external_wp_i18n_namespaceObject._x)('Theme', 'Indicates this palette comes from the theme.'),
+        slug: 'theme',
         gradients: themeGradients
       });
     }
     if (shouldDisplayDefaultGradients && defaultGradients && defaultGradients.length) {
       result.push({
         name: (0,external_wp_i18n_namespaceObject._x)('Default', 'Indicates this palette comes from WordPress.'),
+        slug: 'default',
         gradients: defaultGradients
       });
     }
     if (customGradients && customGradients.length) {
       result.push({
         name: (0,external_wp_i18n_namespaceObject._x)('Custom', 'Indicates this palette is created by the user.'),
+        slug: 'custom',
         gradients: customGradients
       });
     }
@@ -25348,7 +26148,7 @@
   return colorGradientSettings;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/utils.js
 /**
  * WordPress dependencies
  */
@@ -25367,7 +26167,7 @@
  * @param {Array<any>} inputArray Array of items to check.
  * @return {any}                  The item with the most occurrences.
  */
-function utils_mode(inputArray) {
+function mode(inputArray) {
   const arr = [...inputArray];
   return arr.sort((a, b) => inputArray.filter(v => v === b).length - inputArray.filter(v => v === a).length).shift();
 }
@@ -25387,7 +26187,7 @@
     flat,
     ...cornerUnits
   } = selectedUnits;
-  return flat || utils_mode(Object.values(cornerUnits).filter(Boolean)) || 'px';
+  return flat || mode(Object.values(cornerUnits).filter(Boolean)) || 'px';
 }
 
 /**
@@ -25412,7 +26212,7 @@
   });
   const allUnits = parsedQuantitiesAndUnits.map(value => value[1]);
   const value = allValues.every(v => v === allValues[0]) ? allValues[0] : '';
-  const unit = utils_mode(allUnits);
+  const unit = mode(allUnits);
   const allValue = value === 0 || value ? `${value}${unit}` : undefined;
   return allValue;
 }
@@ -25453,7 +26253,7 @@
   return !!filteredValues.length;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/all-input-control.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/all-input-control.js
 /**
  * WordPress dependencies
  */
@@ -25512,7 +26312,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/input-controls.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/input-controls.js
 /**
  * WordPress dependencies
  */
@@ -25588,7 +26388,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/link.js
+;// ./node_modules/@wordpress/icons/build-module/library/link.js
 /**
  * WordPress dependencies
  */
@@ -25603,7 +26403,7 @@
 });
 /* harmony default export */ const library_link = (link_link);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/linked-button.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/linked-button.js
 /**
  * WordPress dependencies
  */
@@ -25616,32 +26416,27 @@
   ...props
 }) {
   const label = isLinked ? (0,external_wp_i18n_namespaceObject.__)('Unlink radii') : (0,external_wp_i18n_namespaceObject.__)('Link radii');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
-    text: label,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      ...props,
-      className: "component-border-radius-control__linked-button",
-      size: "small",
-      icon: isLinked ? library_link : link_off,
-      iconSize: 24,
-      "aria-label": label
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    ...props,
+    className: "component-border-radius-control__linked-button",
+    size: "small",
+    icon: isLinked ? library_link : link_off,
+    iconSize: 24,
+    label: label
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/border-radius-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -25715,6 +26510,7 @@
           setSelectedUnits: setSelectedUnits,
           units: units
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+          __next40pxDefaultSize: true,
           label: (0,external_wp_i18n_namespaceObject.__)('Border radius'),
           hideLabelFromVision: true,
           className: "components-border-radius-control__range-control",
@@ -25742,7 +26538,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/check.js
+;// ./node_modules/@wordpress/icons/build-module/library/check.js
 /**
  * WordPress dependencies
  */
@@ -25757,7 +26553,7 @@
 });
 /* harmony default export */ const library_check = (check_check);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/shadow.js
+;// ./node_modules/@wordpress/icons/build-module/library/shadow.js
 /**
  * WordPress dependencies
  */
@@ -25772,22 +26568,32 @@
 });
 /* harmony default export */ const library_shadow = (shadow);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/shadow-panel-components.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * External dependencies
- */
-
-
-/**
- * Internal dependencies
+;// ./node_modules/@wordpress/icons/build-module/library/reset.js
+/**
+ * WordPress dependencies
+ */
+
+
+const reset_reset = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M7 11.5h10V13H7z"
+  })
+});
+/* harmony default export */ const library_reset = (reset_reset);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/shadow-panel-components.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * External dependencies
  */
 
 
@@ -25798,13 +26604,7 @@
  * @type {Array}
  */
 
-
 const shadow_panel_components_EMPTY_ARRAY = [];
-const {
-  CompositeItemV2: CompositeItem,
-  CompositeV2: Composite,
-  useCompositeStoreV2: useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
 function ShadowPopoverContainer({
   shadow,
   onShadowChange,
@@ -25825,8 +26625,11 @@
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         className: "block-editor-global-styles__clear-shadow",
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+          __next40pxDefaultSize: true,
           variant: "tertiary",
           onClick: () => onShadowChange(undefined),
+          disabled: !shadow,
+          accessibleWhenDisabled: true,
           children: (0,external_wp_i18n_namespaceObject.__)('Clear')
         })
       })]
@@ -25838,9 +26641,7 @@
   activeShadow,
   onSelect
 }) {
-  const compositeStore = useCompositeStore();
-  return !presets ? null : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Composite, {
-    store: compositeStore,
+  return !presets ? null : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
     role: "listbox",
     className: "block-editor-global-styles__shadow__list",
     "aria-label": (0,external_wp_i18n_namespaceObject.__)('Drop shadows'),
@@ -25864,25 +26665,27 @@
   onSelect,
   shadow
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CompositeItem, {
-    role: "option",
-    "aria-label": label,
-    "aria-selected": isActive,
-    className: dist_clsx('block-editor-global-styles__shadow__item', {
-      'is-active': isActive
-    }),
-    render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      className: dist_clsx('block-editor-global-styles__shadow-indicator', {
-        unset: type === 'unset'
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
+    text: label,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
+      role: "option",
+      "aria-label": label,
+      "aria-selected": isActive,
+      className: dist_clsx('block-editor-global-styles__shadow__item', {
+        'is-active': isActive
       }),
-      onClick: onSelect,
-      label: label,
-      style: {
-        boxShadow: shadow
-      },
-      showTooltip: true,
-      children: isActive && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-        icon: library_check
+      render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("button", {
+        className: dist_clsx('block-editor-global-styles__shadow-indicator', {
+          unset: type === 'unset'
+        }),
+        onClick: onSelect,
+        style: {
+          boxShadow: shadow
+        },
+        "aria-label": label,
+        children: isActive && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+          icon: library_check
+        })
       })
     })
   });
@@ -25900,7 +26703,7 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
     popoverProps: popoverProps,
     className: "block-editor-global-styles__shadow-dropdown",
-    renderToggle: renderShadowToggle(),
+    renderToggle: renderShadowToggle(shadow, onShadowChange),
     renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
       paddingSize: "medium",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ShadowPopoverContainer, {
@@ -25911,30 +26714,54 @@
     })
   });
 }
-function renderShadowToggle() {
+function renderShadowToggle(shadow, onShadowChange) {
   return ({
     onToggle,
     isOpen
   }) => {
+    const shadowButtonRef = (0,external_wp_element_namespaceObject.useRef)(undefined);
     const toggleProps = {
       onClick: onToggle,
       className: dist_clsx({
         'is-open': isOpen
       }),
-      'aria-expanded': isOpen
-    };
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      ...toggleProps,
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-        justify: "flex-start",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-          className: "block-editor-global-styles__toggle-icon",
-          icon: library_shadow,
-          size: 24
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: (0,external_wp_i18n_namespaceObject.__)('Drop shadow')
-        })]
-      })
+      'aria-expanded': isOpen,
+      ref: shadowButtonRef
+    };
+    const removeButtonProps = {
+      onClick: () => {
+        if (isOpen) {
+          onToggle();
+        }
+        onShadowChange(undefined);
+        // Return focus to parent button.
+        shadowButtonRef.current?.focus();
+      },
+      className: dist_clsx('block-editor-global-styles__shadow-editor__remove-button', {
+        'is-open': isOpen
+      }),
+      label: (0,external_wp_i18n_namespaceObject.__)('Remove')
+    };
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
+        ...toggleProps,
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
+          justify: "flex-start",
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+            className: "block-editor-global-styles__toggle-icon",
+            icon: library_shadow,
+            size: 24
+          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+            children: (0,external_wp_i18n_namespaceObject.__)('Drop shadow')
+          })]
+        })
+      }), !!shadow && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
+        size: "small",
+        icon: library_reset,
+        ...removeButtonProps
+      })]
     });
   };
 }
@@ -25963,18 +26790,17 @@
   }, [settings]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/border-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/border-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -26178,7 +27004,7 @@
       onDeselect: () => resetBorder(),
       isShownByDefault: showBorderByDefault,
       panelId: panelId,
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalBorderBoxControl, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BorderBoxControl, {
         colors: colors,
         enableAlpha: true,
         enableStyle: showBorderStyle,
@@ -26225,7 +27051,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/border.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/border.js
 /**
  * External dependencies
  */
@@ -26603,7 +27429,7 @@
 });
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/border/addAttributes', addAttributes);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/gradients/use-gradient.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/gradients/use-gradient.js
 /**
  * WordPress dependencies
  */
@@ -26704,22 +27530,21 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/control.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/control.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -26848,7 +27673,7 @@
 }
 /* harmony default export */ const control = (ColorGradientControl);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/color-panel.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/color-panel.js
 /**
  * External dependencies
  */
@@ -26873,7 +27698,7 @@
 
 function useHasColorPanel(settings) {
   const hasTextPanel = useHasTextPanel(settings);
-  const hasBackgroundPanel = color_panel_useHasBackgroundPanel(settings);
+  const hasBackgroundPanel = useHasBackgroundColorPanel(settings);
   const hasLinkPanel = useHasLinkPanel(settings);
   const hasHeadingPanel = useHasHeadingPanel(settings);
   const hasButtonPanel = useHasButtonPanel(settings);
@@ -26902,7 +27727,7 @@
   const gradients = useGradientsPerOrigin(settings);
   return settings?.color?.button && (colors?.length > 0 || settings?.color?.custom || gradients?.length > 0 || settings?.color?.customGradient);
 }
-function color_panel_useHasBackgroundPanel(settings) {
+function useHasBackgroundColorPanel(settings) {
   const colors = useColorsPerOrigin(settings);
   const gradients = useGradientsPerOrigin(settings);
   return settings?.color?.background && (colors?.length > 0 || settings?.color?.custom || gradients?.length > 0 || settings?.color?.customGradient);
@@ -26967,7 +27792,6 @@
     }, index))
   }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
     className: "block-editor-panel-color-gradient-settings__color-name",
-    title: label,
     children: label
   })]
 });
@@ -27007,6 +27831,7 @@
     key: firstTabKey,
     ...firstTab
   } = (_tabs$ = tabs[0]) !== null && _tabs$ !== void 0 ? _tabs$ : {};
+  const colorGradientDropdownButtonRef = (0,external_wp_element_namespaceObject.useRef)(undefined);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
     className: "block-editor-tools-panel-color-gradient-settings__item",
     hasValue: hasValue,
@@ -27027,15 +27852,31 @@
             'is-open': isOpen
           }),
           'aria-expanded': isOpen,
-          'aria-label': (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s is the type of color property, e.g., "background" */
-          (0,external_wp_i18n_namespaceObject.__)('Color %s styles'), label)
+          ref: colorGradientDropdownButtonRef
         };
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          ...toggleProps,
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LabeledColorIndicators, {
-            indicators: indicators,
-            label: label
-          })
+        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            ...toggleProps,
+            __next40pxDefaultSize: true,
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LabeledColorIndicators, {
+              indicators: indicators,
+              label: label
+            })
+          }), hasValue() && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
+            label: (0,external_wp_i18n_namespaceObject.__)('Reset'),
+            className: "block-editor-panel-color-gradient-settings__reset",
+            size: "small",
+            icon: library_reset,
+            onClick: () => {
+              resetValue();
+              if (isOpen) {
+                onToggle();
+              }
+              // Return focus to parent button
+              colorGradientDropdownButtonRef.current?.focus();
+            }
+          })]
         });
       },
       renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
@@ -27111,7 +27952,7 @@
   };
 
   // BackgroundColor
-  const showBackgroundPanel = color_panel_useHasBackgroundPanel(settings);
+  const showBackgroundPanel = useHasBackgroundColorPanel(settings);
   const backgroundColor = decodeValue(inheritedValue?.color?.background);
   const userBackgroundColor = decodeValue(value?.color?.background);
   const gradient = decodeValue(inheritedValue?.color?.gradient);
@@ -27376,7 +28217,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/contrast-checker/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/contrast-checker/index.js
 /**
  * External dependencies
  */
@@ -27491,58 +28332,171 @@
  */
 /* harmony default export */ const contrast_checker = (ContrastChecker);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/contrast-checker.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function getComputedStyle(node) {
-  return node.ownerDocument.defaultView.getComputedStyle(node);
+;// ./node_modules/@wordpress/block-editor/build-module/components/provider/block-refs-provider.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+const BlockRefs = (0,external_wp_element_namespaceObject.createContext)({
+  refsMap: (0,external_wp_compose_namespaceObject.observableMap)()
+});
+function BlockRefsProvider({
+  children
+}) {
+  const value = (0,external_wp_element_namespaceObject.useMemo)(() => ({
+    refsMap: (0,external_wp_compose_namespaceObject.observableMap)()
+  }), []);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRefs.Provider, {
+    value: value,
+    children: children
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-block-refs.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/** @typedef {import('@wordpress/element').RefCallback} RefCallback */
+/** @typedef {import('@wordpress/element').Ref} Ref */
+
+/**
+ * Provides a ref to the BlockRefs context.
+ *
+ * @param {string} clientId The client ID of the element ref.
+ *
+ * @return {RefCallback} Ref callback.
+ */
+function useBlockRefProvider(clientId) {
+  const {
+    refsMap
+  } = (0,external_wp_element_namespaceObject.useContext)(BlockRefs);
+  return (0,external_wp_compose_namespaceObject.useRefEffect)(element => {
+    refsMap.set(clientId, element);
+    return () => refsMap.delete(clientId);
+  }, [clientId]);
+}
+function assignRef(ref, value) {
+  if (typeof ref === 'function') {
+    ref(value);
+  } else if (ref) {
+    ref.current = value;
+  }
+}
+
+/**
+ * Tracks the DOM element for the block identified by `clientId` and assigns it to the `ref`
+ * whenever it changes.
+ *
+ * @param {string} clientId The client ID to track.
+ * @param {Ref}    ref      The ref object/callback to assign to.
+ */
+function useBlockElementRef(clientId, ref) {
+  const {
+    refsMap
+  } = (0,external_wp_element_namespaceObject.useContext)(BlockRefs);
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    assignRef(ref, refsMap.get(clientId));
+    const unsubscribe = refsMap.subscribe(clientId, () => assignRef(ref, refsMap.get(clientId)));
+    return () => {
+      unsubscribe();
+      assignRef(ref, null);
+    };
+  }, [refsMap, clientId, ref]);
+}
+
+/**
+ * Return the element for a given client ID. Updates whenever the element
+ * changes, becomes available, or disappears.
+ *
+ * @param {string} clientId The client ID to an element for.
+ *
+ * @return {Element|null} The block's wrapper element.
+ */
+function useBlockElement(clientId) {
+  const [blockElement, setBlockElement] = (0,external_wp_element_namespaceObject.useState)(null);
+  useBlockElementRef(clientId, setBlockElement);
+  return blockElement;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/contrast-checker.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function getComputedValue(node, property) {
+  return node.ownerDocument.defaultView.getComputedStyle(node).getPropertyValue(property);
+}
+function getBlockElementColors(blockEl) {
+  if (!blockEl) {
+    return {};
+  }
+  const firstLinkElement = blockEl.querySelector('a');
+  const linkColor = !!firstLinkElement?.innerText ? getComputedValue(firstLinkElement, 'color') : undefined;
+  const textColor = getComputedValue(blockEl, 'color');
+  let backgroundColorNode = blockEl;
+  let backgroundColor = getComputedValue(backgroundColorNode, 'background-color');
+  while (backgroundColor === 'rgba(0, 0, 0, 0)' && backgroundColorNode.parentNode && backgroundColorNode.parentNode.nodeType === backgroundColorNode.parentNode.ELEMENT_NODE) {
+    backgroundColorNode = backgroundColorNode.parentNode;
+    backgroundColor = getComputedValue(backgroundColorNode, 'background-color');
+  }
+  return {
+    textColor,
+    backgroundColor,
+    linkColor
+  };
+}
+function contrast_checker_reducer(prevColors, newColors) {
+  const hasChanged = Object.keys(newColors).some(key => prevColors[key] !== newColors[key]);
+
+  // Do not re-render if the colors have not changed.
+  return hasChanged ? newColors : prevColors;
 }
 function BlockColorContrastChecker({
   clientId
 }) {
-  const [detectedBackgroundColor, setDetectedBackgroundColor] = (0,external_wp_element_namespaceObject.useState)();
-  const [detectedColor, setDetectedColor] = (0,external_wp_element_namespaceObject.useState)();
-  const [detectedLinkColor, setDetectedLinkColor] = (0,external_wp_element_namespaceObject.useState)();
-  const ref = useBlockRef(clientId);
+  const blockEl = useBlockElement(clientId);
+  const [colors, setColors] = (0,external_wp_element_namespaceObject.useReducer)(contrast_checker_reducer, {});
 
   // There are so many things that can change the color of a block
   // So we perform this check on every render.
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!ref.current) {
-      return;
-    }
-    setDetectedColor(getComputedStyle(ref.current).color);
-    const firstLinkElement = ref.current?.querySelector('a');
-    if (firstLinkElement && !!firstLinkElement.innerText) {
-      setDetectedLinkColor(getComputedStyle(firstLinkElement).color);
-    }
-    let backgroundColorNode = ref.current;
-    let backgroundColor = getComputedStyle(backgroundColorNode).backgroundColor;
-    while (backgroundColor === 'rgba(0, 0, 0, 0)' && backgroundColorNode.parentNode && backgroundColorNode.parentNode.nodeType === backgroundColorNode.parentNode.ELEMENT_NODE) {
-      backgroundColorNode = backgroundColorNode.parentNode;
-      backgroundColor = getComputedStyle(backgroundColorNode).backgroundColor;
-    }
-    setDetectedBackgroundColor(backgroundColor);
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    if (!blockEl) {
+      return;
+    }
+    function updateColors() {
+      setColors(getBlockElementColors(blockEl));
+    }
+
+    // Combine `useLayoutEffect` and two rAF calls to ensure that values are read
+    // after the current paint but before the next paint.
+    window.requestAnimationFrame(() => window.requestAnimationFrame(updateColors));
   });
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(contrast_checker, {
-    backgroundColor: detectedBackgroundColor,
-    textColor: detectedColor,
-    enableAlphaChecker: true,
-    linkColor: detectedLinkColor
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/color.js
+    backgroundColor: colors.backgroundColor,
+    textColor: colors.textColor,
+    linkColor: colors.linkColor,
+    enableAlphaChecker: true
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/color.js
 /**
  * External dependencies
  */
@@ -27846,10 +28800,16 @@
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/color/addAttribute', color_addAttributes);
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.switchToBlockType.transformedBlock', 'core/color/addTransforms', color_addTransforms);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-family/index.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-family/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -27859,11 +28819,17 @@
 
 
 function FontFamilyControl({
+  /** Start opting into the larger default height that will become the default size in a future version. */
+  __next40pxDefaultSize = false,
+  /** Start opting into the new margin-free styles that will become the default in a future version. */
+  __nextHasNoMarginBottom = false,
   value = '',
   onChange,
   fontFamilies,
+  className,
   ...props
 }) {
+  var _options$find;
   const [blockLevelFontFamilies] = use_settings_useSettings('typography.fontFamilies');
   if (!fontFamilies) {
     fontFamilies = blockLevelFontFamilies;
@@ -27872,70 +28838,62 @@
     return null;
   }
   const options = [{
-    value: '',
-    label: (0,external_wp_i18n_namespaceObject.__)('Default')
+    key: '',
+    name: (0,external_wp_i18n_namespaceObject.__)('Default')
   }, ...fontFamilies.map(({
     fontFamily,
     name
-  }) => {
-    return {
-      value: fontFamily,
-      label: name || fontFamily
-    };
-  })];
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
+  }) => ({
+    key: fontFamily,
+    name: name || fontFamily,
+    style: {
+      fontFamily
+    }
+  }))];
+  if (!__nextHasNoMarginBottom) {
+    external_wp_deprecated_default()('Bottom margin styles for wp.blockEditor.FontFamilyControl', {
+      since: '6.7',
+      version: '7.0',
+      hint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version'
+    });
+  }
+  if (!__next40pxDefaultSize && (props.size === undefined || props.size === 'default')) {
+    external_wp_deprecated_default()(`36px default size for wp.blockEditor.__experimentalFontFamilyControl`, {
+      since: '6.8',
+      version: '7.1',
+      hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.'
+    });
+  }
+  const selectedValue = (_options$find = options.find(option => option.key === value)) !== null && _options$find !== void 0 ? _options$find : '';
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CustomSelectControl, {
+    __next40pxDefaultSize: __next40pxDefaultSize,
+    __shouldNotWarnDeprecated36pxSize: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Font'),
+    value: selectedValue,
+    onChange: ({
+      selectedItem
+    }) => onChange(selectedItem.key),
     options: options,
-    value: value,
-    onChange: onChange,
-    labelPosition: "top",
+    className: dist_clsx('block-editor-font-family-control', className, {
+      'is-next-has-no-margin-bottom': __nextHasNoMarginBottom
+    }),
     ...props
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-appearance-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-const FONT_STYLES = [{
-  name: (0,external_wp_i18n_namespaceObject._x)('Regular', 'font style'),
-  value: 'normal'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Italic', 'font style'),
-  value: 'italic'
-}];
-const FONT_WEIGHTS = [{
-  name: (0,external_wp_i18n_namespaceObject._x)('Thin', 'font weight'),
-  value: '100'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Extra Light', 'font weight'),
-  value: '200'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Light', 'font weight'),
-  value: '300'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Regular', 'font weight'),
-  value: '400'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Medium', 'font weight'),
-  value: '500'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Semi Bold', 'font weight'),
-  value: '600'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Bold', 'font weight'),
-  value: '700'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Extra Bold', 'font weight'),
-  value: '800'
-}, {
-  name: (0,external_wp_i18n_namespaceObject._x)('Black', 'font weight'),
-  value: '900'
-}];
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-appearance-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 /**
  * Adjusts font appearance field label in case either font styles or weights
@@ -27945,6 +28903,7 @@
  * @param {boolean} hasFontWeights Whether font weights are enabled and present.
  * @return {string} A label representing what font appearance is being edited.
  */
+
 const getFontAppearanceLabel = (hasFontStyles, hasFontWeights) => {
   if (!hasFontStyles) {
     return (0,external_wp_i18n_namespaceObject.__)('Font weight');
@@ -27956,7 +28915,7 @@
 };
 
 /**
- * Control to display unified font style and weight options.
+ * Control to display font style and weight options of the active font.
  *
  * @param {Object} props Component props.
  *
@@ -27964,9 +28923,12 @@
  */
 function FontAppearanceControl(props) {
   const {
+    /** Start opting into the larger default height that will become the default size in a future version. */
+    __next40pxDefaultSize = false,
     onChange,
     hasFontStyles = true,
     hasFontWeights = true,
+    fontFamilyFaces,
     value: {
       fontStyle,
       fontWeight
@@ -27983,37 +28945,25 @@
       fontWeight: undefined
     }
   };
-
-  // Combines both font style and weight options into a single dropdown.
+  const {
+    fontStyles,
+    fontWeights,
+    combinedStyleAndWeightOptions
+  } = getFontStylesAndWeights(fontFamilyFaces);
+
+  // Generates select options for combined font styles and weights.
   const combineOptions = () => {
     const combinedOptions = [defaultOption];
-    FONT_STYLES.forEach(({
-      name: styleName,
-      value: styleValue
-    }) => {
-      FONT_WEIGHTS.forEach(({
-        name: weightName,
-        value: weightValue
-      }) => {
-        const optionName = styleValue === 'normal' ? weightName : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1: Font weight name. 2: Font style name. */
-        (0,external_wp_i18n_namespaceObject.__)('%1$s %2$s'), weightName, styleName);
-        combinedOptions.push({
-          key: `${styleValue}-${weightValue}`,
-          name: optionName,
-          style: {
-            fontStyle: styleValue,
-            fontWeight: weightValue
-          }
-        });
-      });
-    });
+    if (combinedStyleAndWeightOptions) {
+      combinedOptions.push(...combinedStyleAndWeightOptions);
+    }
     return combinedOptions;
   };
 
   // Generates select options for font styles only.
   const styleOptions = () => {
     const combinedOptions = [defaultOption];
-    FONT_STYLES.forEach(({
+    fontStyles.forEach(({
       name,
       value
     }) => {
@@ -28032,7 +28982,7 @@
   // Generates select options for font weights only.
   const weightOptions = () => {
     const combinedOptions = [defaultOption];
-    FONT_WEIGHTS.forEach(({
+    fontWeights.forEach(({
       name,
       value
     }) => {
@@ -28050,11 +29000,14 @@
 
   // Map font styles and weights to select options.
   const selectOptions = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    // Display combined available font style and weight options.
     if (hasFontStyles && hasFontWeights) {
       return combineOptions();
     }
+
+    // Display only font style options or font weight options.
     return hasFontStyles ? styleOptions() : weightOptions();
-  }, [props.options]);
+  }, [props.options, fontStyles, fontWeights, combinedStyleAndWeightOptions]);
 
   // Find current selection by comparing font style & weight against options,
   // and fall back to the Default option if there is no matching option.
@@ -28079,9 +29032,18 @@
     // translators: %s: Currently selected font appearance.
     (0,external_wp_i18n_namespaceObject.__)('Currently selected font appearance: %s'), currentSelection.name);
   };
+  if (!__next40pxDefaultSize && (otherProps.size === undefined || otherProps.size === 'default')) {
+    external_wp_deprecated_default()(`36px default size for wp.blockEditor.__experimentalFontAppearanceControl`, {
+      since: '6.8',
+      version: '7.1',
+      hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.'
+    });
+  }
   return hasStylesOrWeights && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CustomSelectControl, {
     ...otherProps,
     className: "components-font-appearance-control",
+    __next40pxDefaultSize: __next40pxDefaultSize,
+    __shouldNotWarnDeprecated36pxSize: true,
     label: label,
     describedBy: getDescribedBy(),
     options: selectOptions,
@@ -28092,7 +29054,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/line-height-control/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/line-height-control/utils.js
 const BASE_DEFAULT_VALUE = 1.5;
 const STEP = 0.01;
 /**
@@ -28123,7 +29085,7 @@
   return lineHeight !== undefined && lineHeight !== RESET_VALUE;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/line-height-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/line-height-control/index.js
 /**
  * WordPress dependencies
  */
@@ -28137,10 +29099,10 @@
 
 
 const line_height_control_LineHeightControl = ({
+  /** Start opting into the larger default height that will become the default size in a future version. */
+  __next40pxDefaultSize = false,
   value: lineHeight,
   onChange,
-  /** Start opting into the new margin-free styles that will become the default in a future version. */
-  __nextHasNoMarginBottom = false,
   __unstableInputWidth = '60px',
   ...otherProps
 }) => {
@@ -28194,16 +29156,6 @@
     };
   };
   const value = isDefined ? lineHeight : RESET_VALUE;
-  if (!__nextHasNoMarginBottom) {
-    external_wp_deprecated_default()('Bottom margin styles for wp.blockEditor.LineHeightControl', {
-      since: '6.0',
-      version: '6.4',
-      hint: 'Set the `__nextHasNoMarginBottom` prop to true to start opting into the new styles, which will become the default in a future version'
-    });
-  }
-  const deprecatedStyles = __nextHasNoMarginBottom ? undefined : {
-    marginBottom: 24
-  };
   const handleOnChange = (nextValue, {
     event
   }) => {
@@ -28217,11 +29169,19 @@
     }
     onChange(`${nextValue}`);
   };
+  if (!__next40pxDefaultSize && (otherProps.size === undefined || otherProps.size === 'default')) {
+    external_wp_deprecated_default()(`36px default size for wp.blockEditor.LineHeightControl`, {
+      since: '6.8',
+      version: '7.1',
+      hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.'
+    });
+  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: "block-editor-line-height-control",
-    style: deprecatedStyles,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNumberControl, {
       ...otherProps,
+      __shouldNotWarnDeprecated36pxSize: true,
+      __next40pxDefaultSize: __next40pxDefaultSize,
       __unstableInputWidth: __unstableInputWidth,
       __unstableStateReducer: stateReducer,
       onChange: handleOnChange,
@@ -28241,10 +29201,11 @@
  */
 /* harmony default export */ const line_height_control = (line_height_control_LineHeightControl);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/letter-spacing-control/index.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/letter-spacing-control/index.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -28256,15 +29217,17 @@
 /**
  * Control for letter-spacing.
  *
- * @param {Object}                  props                      Component props.
- * @param {string}                  props.value                Currently selected letter-spacing.
- * @param {Function}                props.onChange             Handles change in letter-spacing selection.
- * @param {string|number|undefined} props.__unstableInputWidth Input width to pass through to inner UnitControl. Should be a valid CSS value.
+ * @param {Object}                  props                       Component props.
+ * @param {boolean}                 props.__next40pxDefaultSize Start opting into the larger default height that will become the default size in a future version.
+ * @param {string}                  props.value                 Currently selected letter-spacing.
+ * @param {Function}                props.onChange              Handles change in letter-spacing selection.
+ * @param {string|number|undefined} props.__unstableInputWidth  Input width to pass through to inner UnitControl. Should be a valid CSS value.
  *
  * @return {Element} Letter-spacing control.
  */
 
 function LetterSpacingControl({
+  __next40pxDefaultSize = false,
   value,
   onChange,
   __unstableInputWidth = '60px',
@@ -28279,7 +29242,16 @@
       rem: 0.2
     }
   });
+  if (!__next40pxDefaultSize && (otherProps.size === undefined || otherProps.size === 'default')) {
+    external_wp_deprecated_default()(`36px default size for wp.blockEditor.__experimentalLetterSpacingControl`, {
+      since: '6.8',
+      version: '7.1',
+      hint: 'Set the `__next40pxDefaultSize` prop to true to start opting into the new default size, which will become the default in a future version.'
+    });
+  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+    __next40pxDefaultSize: __next40pxDefaultSize,
+    __shouldNotWarnDeprecated36pxSize: true,
     ...otherProps,
     label: (0,external_wp_i18n_namespaceObject.__)('Letter spacing'),
     value: value,
@@ -28289,7 +29261,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-left.js
+;// ./node_modules/@wordpress/icons/build-module/library/align-left.js
 /**
  * WordPress dependencies
  */
@@ -28304,22 +29276,22 @@
 });
 /* harmony default export */ const align_left = (alignLeft);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-center.js
-/**
- * WordPress dependencies
- */
-
-
-const align_center_alignCenter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+;// ./node_modules/@wordpress/icons/build-module/library/align-center.js
+/**
+ * WordPress dependencies
+ */
+
+
+const alignCenter = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
   xmlns: "http://www.w3.org/2000/svg",
   viewBox: "0 0 24 24",
   children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
     d: "M7.5 5.5h9V4h-9v1.5Zm-3.5 7h16V11H4v1.5Zm3.5 7h9V18h-9v1.5Z"
   })
 });
-/* harmony default export */ const align_center = (align_center_alignCenter);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-right.js
+/* harmony default export */ const align_center = (alignCenter);
+
+;// ./node_modules/@wordpress/icons/build-module/library/align-right.js
 /**
  * WordPress dependencies
  */
@@ -28334,7 +29306,7 @@
 });
 /* harmony default export */ const align_right = (alignRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/align-justify.js
+;// ./node_modules/@wordpress/icons/build-module/library/align-justify.js
 /**
  * WordPress dependencies
  */
@@ -28349,81 +29321,18 @@
 });
 /* harmony default export */ const align_justify = (alignJustify);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/segmented-text-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-/**
- * @typedef {Object} Option
- * @property {string} label The label of the option.
- * @property {string} value The value of the option.
- * @property {string} icon  The icon of the option.
- */
-
-/**
- * Control to facilitate selecting a text style from a set of options.
- *
- * @param {Object}   props           Component props.
- * @param {string}   props.label     A label for the option.
- * @param {string}   props.value     Currently selected value.
- * @param {Function} props.onChange  Callback to handle onChange.
- * @param {Option[]} props.options   Array of options to display.
- * @param {string}   props.className Additional class name to apply.
- *
- * @return {Element} Element to render.
- */
-
-
-function SegmentedTextControl({
-  label,
-  value,
-  options,
-  onChange,
-  className
-}) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
-    className: dist_clsx('block-editor-segmented-text-control', className),
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl.VisualLabel, {
-      as: "legend",
-      children: label
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-segmented-text-control__buttons",
-      children: options.map(option => {
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          size: "compact",
-          icon: option.icon,
-          label: option.label,
-          isPressed: option.value === value,
-          onClick: () => onChange(option.value)
-        }, option.value);
-      })
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/text-alignment-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/text-alignment-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
 
 
 const TEXT_ALIGNMENT_OPTIONS = [{
@@ -28466,33 +29375,27 @@
   if (!validOptions.length) {
     return null;
   }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SegmentedTextControl, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    isDeselectable: true,
+    __nextHasNoMarginBottom: true,
+    __next40pxDefaultSize: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Text alignment'),
-    options: validOptions,
     className: dist_clsx('block-editor-text-alignment-control', className),
     value: value,
     onChange: newValue => {
       onChange(newValue === value ? undefined : newValue);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/reset.js
-/**
- * WordPress dependencies
- */
-
-
-const reset_reset = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M7 11.5h10V13H7z"
-  })
-});
-/* harmony default export */ const library_reset = (reset_reset);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-uppercase.js
+    },
+    children: validOptions.map(option => {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOptionIcon, {
+        value: option.value,
+        icon: option.icon,
+        label: option.label
+      }, option.value);
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/format-uppercase.js
 /**
  * WordPress dependencies
  */
@@ -28507,7 +29410,7 @@
 });
 /* harmony default export */ const format_uppercase = (formatUppercase);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-lowercase.js
+;// ./node_modules/@wordpress/icons/build-module/library/format-lowercase.js
 /**
  * WordPress dependencies
  */
@@ -28522,7 +29425,7 @@
 });
 /* harmony default export */ const format_lowercase = (formatLowercase);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-capitalize.js
+;// ./node_modules/@wordpress/icons/build-module/library/format-capitalize.js
 /**
  * WordPress dependencies
  */
@@ -28537,21 +29440,17 @@
 });
 /* harmony default export */ const format_capitalize = (formatCapitalize);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/text-transform-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/text-transform-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
 
 
 const TEXT_TRANSFORMS = [{
@@ -28587,18 +29486,27 @@
   value,
   onChange
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SegmentedTextControl, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    isDeselectable: true,
+    __nextHasNoMarginBottom: true,
+    __next40pxDefaultSize: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Letter case'),
-    options: TEXT_TRANSFORMS,
     className: dist_clsx('block-editor-text-transform-control', className),
     value: value,
     onChange: newValue => {
       onChange(newValue === value ? undefined : newValue);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-underline.js
+    },
+    children: TEXT_TRANSFORMS.map(option => {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOptionIcon, {
+        value: option.value,
+        icon: option.icon,
+        label: option.label
+      }, option.value);
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/format-underline.js
 /**
  * WordPress dependencies
  */
@@ -28613,7 +29521,7 @@
 });
 /* harmony default export */ const format_underline = (formatUnderline);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/format-strikethrough.js
+;// ./node_modules/@wordpress/icons/build-module/library/format-strikethrough.js
 /**
  * WordPress dependencies
  */
@@ -28628,21 +29536,17 @@
 });
 /* harmony default export */ const format_strikethrough = (formatStrikethrough);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/text-decoration-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/text-decoration-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
 
 
 const TEXT_DECORATIONS = [{
@@ -28674,18 +29578,27 @@
   onChange,
   className
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SegmentedTextControl, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    isDeselectable: true,
+    __nextHasNoMarginBottom: true,
+    __next40pxDefaultSize: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Decoration'),
-    options: TEXT_DECORATIONS,
     className: dist_clsx('block-editor-text-decoration-control', className),
     value: value,
     onChange: newValue => {
       onChange(newValue === value ? undefined : newValue);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/text-horizontal.js
+    },
+    children: TEXT_DECORATIONS.map(option => {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOptionIcon, {
+        value: option.value,
+        icon: option.icon,
+        label: option.label
+      }, option.value);
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/text-horizontal.js
 /**
  * WordPress dependencies
  */
@@ -28700,7 +29613,7 @@
 });
 /* harmony default export */ const text_horizontal = (textHorizontal);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/text-vertical.js
+;// ./node_modules/@wordpress/icons/build-module/library/text-vertical.js
 /**
  * WordPress dependencies
  */
@@ -28715,21 +29628,17 @@
 });
 /* harmony default export */ const text_vertical = (textVertical);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-mode-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-mode-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
 
 
 const WRITING_MODES = [{
@@ -28757,18 +29666,27 @@
   value,
   onChange
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SegmentedTextControl, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    isDeselectable: true,
+    __nextHasNoMarginBottom: true,
+    __next40pxDefaultSize: true,
     label: (0,external_wp_i18n_namespaceObject.__)('Orientation'),
-    options: WRITING_MODES,
     className: dist_clsx('block-editor-writing-mode-control', className),
     value: value,
     onChange: newValue => {
       onChange(newValue === value ? undefined : newValue);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/typography-panel.js
+    },
+    children: WRITING_MODES.map(option => {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOptionIcon, {
+        value: option.value,
+        icon: option.icon,
+        label: option.label
+      }, option.value);
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/typography-panel.js
 /**
  * WordPress dependencies
  */
@@ -28906,16 +29824,15 @@
 
   // Font Family
   const hasFontFamilyEnabled = useHasFontFamilyControl(settings);
-  const fontFamilies = settings?.typography?.fontFamilies;
-  const mergedFontFamilies = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    return ['default', 'theme', 'custom'].flatMap(key => {
-      var _fontFamilies$key;
-      return (_fontFamilies$key = fontFamilies?.[key]) !== null && _fontFamilies$key !== void 0 ? _fontFamilies$key : [];
-    });
-  }, [fontFamilies]);
   const fontFamily = decodeValue(inheritedValue?.typography?.fontFamily);
+  const {
+    fontFamilies,
+    fontFamilyFaces
+  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    return getMergedFontFamiliesAndFontFamilyFaces(settings, fontFamily);
+  }, [settings, fontFamily]);
   const setFontFamily = newValue => {
-    const slug = mergedFontFamilies?.find(({
+    const slug = fontFamilies?.find(({
       fontFamily: f
     }) => f === newValue)?.slug;
     onChange(setImmutably(value, ['typography', 'fontFamily'], slug ? `var:preset|font-family|${slug}` : newValue || undefined));
@@ -28942,23 +29859,43 @@
   const hasFontWeights = settings?.typography?.fontWeight;
   const fontStyle = decodeValue(inheritedValue?.typography?.fontStyle);
   const fontWeight = decodeValue(inheritedValue?.typography?.fontWeight);
-  const setFontAppearance = ({
+  const {
+    nearestFontStyle,
+    nearestFontWeight
+  } = findNearestStyleAndWeight(fontFamilyFaces, fontStyle, fontWeight);
+  const setFontAppearance = (0,external_wp_element_namespaceObject.useCallback)(({
     fontStyle: newFontStyle,
     fontWeight: newFontWeight
   }) => {
-    onChange({
-      ...value,
-      typography: {
-        ...value?.typography,
-        fontStyle: newFontStyle || undefined,
-        fontWeight: newFontWeight || undefined
-      }
-    });
-  };
+    // Only update the font style and weight if they have changed.
+    if (newFontStyle !== fontStyle || newFontWeight !== fontWeight) {
+      onChange({
+        ...value,
+        typography: {
+          ...value?.typography,
+          fontStyle: newFontStyle || undefined,
+          fontWeight: newFontWeight || undefined
+        }
+      });
+    }
+  }, [fontStyle, fontWeight, onChange, value]);
   const hasFontAppearance = () => !!value?.typography?.fontStyle || !!value?.typography?.fontWeight;
-  const resetFontAppearance = () => {
+  const resetFontAppearance = (0,external_wp_element_namespaceObject.useCallback)(() => {
     setFontAppearance({});
-  };
+  }, [setFontAppearance]);
+
+  // Check if previous font style and weight values are available in the new font family.
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (nearestFontStyle && nearestFontWeight) {
+      setFontAppearance({
+        fontStyle: nearestFontStyle,
+        fontWeight: nearestFontWeight
+      });
+    } else {
+      // Reset font appearance if there are no available styles or weights.
+      resetFontAppearance();
+    }
+  }, [nearestFontStyle, nearestFontWeight, resetFontAppearance, setFontAppearance]);
 
   // Line Height
   const hasLineHeightEnabled = useHasLineHeightControl(settings);
@@ -29040,7 +29977,7 @@
       isShownByDefault: defaultControls.fontFamily,
       panelId: panelId,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FontFamilyControl, {
-        fontFamilies: mergedFontFamilies,
+        fontFamilies: fontFamilies,
         value: fontFamily,
         onChange: setFontFamily,
         size: "__unstable-large",
@@ -29076,8 +30013,8 @@
         onChange: setFontAppearance,
         hasFontStyles: hasFontStyles,
         hasFontWeights: hasFontWeights,
-        size: "__unstable-large",
-        __nextHasNoMarginBottom: true
+        fontFamilyFaces: fontFamilyFaces,
+        size: "__unstable-large"
       })
     }), hasLineHeightEnabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
       className: "single-column",
@@ -29087,7 +30024,6 @@
       isShownByDefault: defaultControls.lineHeight,
       panelId: panelId,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(line_height_control, {
-        __nextHasNoMarginBottom: true,
         __unstableInputWidth: "auto",
         value: lineHeight,
         onChange: setLineHeight,
@@ -29179,7 +30115,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/line-height.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/line-height.js
 /**
  * WordPress dependencies
  */
@@ -29222,7 +30158,6 @@
   };
   return /*#__PURE__*/_jsx(LineHeightControl, {
     __unstableInputWidth: "100%",
-    __nextHasNoMarginBottom: true,
     value: style?.typography?.lineHeight,
     onChange: onChange,
     size: "__unstable-large"
@@ -29242,10 +30177,10 @@
   return !isEnabled || !hasBlockSupport(blockName, LINE_HEIGHT_SUPPORT_KEY);
 }
 
-;// CONCATENATED MODULE: external ["wp","tokenList"]
+;// external ["wp","tokenList"]
 const external_wp_tokenList_namespaceObject = window["wp"]["tokenList"];
 var external_wp_tokenList_default = /*#__PURE__*/__webpack_require__.n(external_wp_tokenList_namespaceObject);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/font-family.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/font-family.js
 /**
  * WordPress dependencies
  */
@@ -29348,7 +30283,7 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/fontFamily/addAttribute', font_family_addAttributes);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/utils.js
 /**
  * WordPress dependencies
  */
@@ -29422,7 +30357,7 @@
   return `has-${utils_kebabCase(fontSizeSlug)}-font-size`;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/font-size.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/font-size.js
 /**
  * WordPress dependencies
  */
@@ -29608,7 +30543,7 @@
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/font/addAttribute', font_size_addAttributes);
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.switchToBlockType.transformedBlock', 'core/font-size/addTransforms', font_size_addTransforms);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/alignment-control/ui.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/alignment-control/ui.js
 /**
  * WordPress dependencies
  */
@@ -29637,7 +30572,7 @@
   onChange,
   alignmentControls = DEFAULT_ALIGNMENT_CONTROLS,
   label = (0,external_wp_i18n_namespaceObject.__)('Align text'),
-  describedBy = (0,external_wp_i18n_namespaceObject.__)('Change text alignment'),
+  description = (0,external_wp_i18n_namespaceObject.__)('Change text alignment'),
   isCollapsed = true,
   isToolbar
 }) {
@@ -29656,7 +30591,7 @@
     isCollapsed
   } : {
     toggleProps: {
-      describedBy
+      description
     },
     popoverProps: ui_POPOVER_PROPS
   };
@@ -29680,7 +30615,7 @@
 }
 /* harmony default export */ const alignment_control_ui = (AlignmentUI);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/alignment-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/alignment-control/index.js
 /**
  * Internal dependencies
  */
@@ -29704,7 +30639,7 @@
  */
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/text-align.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/text-align.js
 /**
  * External dependencies
  */
@@ -29851,7 +30786,7 @@
   return props;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/typography.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/typography.js
 /**
  * WordPress dependencies
  */
@@ -29978,11 +30913,52 @@
   return TYPOGRAPHY_SUPPORT_KEYS.some(key => hasBlockSupport(blockName, key));
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/settings.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+const use_spacing_sizes_EMPTY_ARRAY = [];
+const compare = new Intl.Collator('und', {
+  numeric: true
+}).compare;
+function useSpacingSizes() {
+  const [customSpacingSizes, themeSpacingSizes, defaultSpacingSizes, defaultSpacingSizesEnabled] = use_settings_useSettings('spacing.spacingSizes.custom', 'spacing.spacingSizes.theme', 'spacing.spacingSizes.default', 'spacing.defaultSpacingSizes');
+  const customSizes = customSpacingSizes !== null && customSpacingSizes !== void 0 ? customSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
+  const themeSizes = themeSpacingSizes !== null && themeSpacingSizes !== void 0 ? themeSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
+  const defaultSizes = defaultSpacingSizes && defaultSpacingSizesEnabled !== false ? defaultSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
+  return (0,external_wp_element_namespaceObject.useMemo)(() => {
+    const sizes = [{
+      name: (0,external_wp_i18n_namespaceObject.__)('None'),
+      slug: '0',
+      size: 0
+    }, ...customSizes, ...themeSizes, ...defaultSizes];
+
+    // Using numeric slugs opts-in to sorting by slug.
+    if (sizes.every(({
+      slug
+    }) => /^[0-9]/.test(slug))) {
+      sizes.sort((a, b) => compare(a.slug, b.slug));
+    }
+    return sizes.length > RANGE_CONTROL_MAX_SIZE ? [{
+      name: (0,external_wp_i18n_namespaceObject.__)('Default'),
+      slug: 'default',
+      size: undefined
+    }, ...sizes] : sizes;
+  }, [customSizes, themeSizes, defaultSizes]);
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/settings.js
+/**
+ * WordPress dependencies
+ */
 
 
 const settings_settings = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_primitives_namespaceObject.SVG, {
@@ -29996,22 +30972,20 @@
 });
 /* harmony default export */ const library_settings = (settings_settings);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/spacing-input-control.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -30167,7 +31141,7 @@
   if (showCustomValueInSelectList) {
     selectListSizes = [...spacingSizes, {
       name: !isMixed ?
-      // translators: A custom measurement, eg. a number followed by a unit like 12px.
+      // translators: %s: A custom measurement, e.g. a number followed by a unit like 12px.
       (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Custom (%s)'), value) : (0,external_wp_i18n_namespaceObject.__)('Mixed'),
       slug: 'custom',
       size: value
@@ -30211,15 +31185,15 @@
     key: index,
     name: size.name
   }));
-  const marks = spacingSizes.map((_newValue, index) => ({
-    value: index,
+  const marks = spacingSizes.slice(1, spacingSizes.length - 1).map((_newValue, index) => ({
+    value: index + 1,
     label: undefined
   }));
   const sideLabel = ALL_SIDES.includes(side) && showSideInLabel ? LABELS[side] : '';
   const typeLabel = showSideInLabel ? type?.toLowerCase() : type;
   const ariaLabel = (0,external_wp_i18n_namespaceObject.sprintf)(
-  // translators: 1: The side of the block being modified (top, bottom, left, All sides etc.). 2. Type of spacing being modified (Padding, margin, etc)
-  (0,external_wp_i18n_namespaceObject.__)('%1$s %2$s'), sideLabel, typeLabel).trim();
+  // translators: 1: The side of the block being modified (top, bottom, left etc.). 2. Type of spacing being modified (padding, margin, etc).
+  (0,external_wp_i18n_namespaceObject._x)('%1$s %2$s', 'spacing'), sideLabel, typeLabel).trim();
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
     className: "spacing-sizes-control__wrapper",
     children: [icon && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
@@ -30256,6 +31230,7 @@
           setMinValue(minimumCustomValue);
         }
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+        __next40pxDefaultSize: true,
         onMouseOver: onMouseOver,
         onMouseOut: onMouseOut,
         onFocus: onMouseOver,
@@ -30267,9 +31242,12 @@
         withInputField: false,
         onChange: handleCustomValueSliderChange,
         className: "spacing-sizes-control__custom-value-range",
-        __nextHasNoMarginBottom: true
+        __nextHasNoMarginBottom: true,
+        label: ariaLabel,
+        hideLabelFromVision: true
       })]
     }), showRangeControl && !showCustomValueControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+      __next40pxDefaultSize: true,
       onMouseOver: onMouseOver,
       onMouseOut: onMouseOut,
       className: "spacing-sizes-control__range-control",
@@ -30296,8 +31274,10 @@
       onBlur: onMouseOut
     }), !showRangeControl && !showCustomValueControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CustomSelectControl, {
       className: "spacing-sizes-control__custom-select-control",
-      value: options.find(option => option.key === currentValue) || '' // passing undefined here causes a downshift controlled/uncontrolled warning
-      ,
+      value:
+      // passing empty string as a fallback to continue using the
+      // component in controlled mode
+      options.find(option => option.key === currentValue) || '',
       onChange: selection => {
         onChange(getNewPresetValue(selection.selectedItem.key, 'selectList'));
       },
@@ -30323,11 +31303,10 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/axial.js
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/axial.js
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -30387,11 +31366,10 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/separated.js
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/separated.js
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -30437,7 +31415,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/single.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/input-controls/single.js
 /**
  * Internal dependencies
  */
@@ -30481,148 +31459,89 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/sides-dropdown/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const checkIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
-  icon: library_check,
-  size: 24
-});
-function SidesDropdown({
-  label: labelProp,
-  onChange,
-  sides,
-  value
-}) {
-  if (!sides || !sides.length) {
-    return;
-  }
-  const supportedItems = getSupportedMenuItems(sides);
-  const sideIcon = supportedItems[value].icon;
-  const {
-    custom: customItem,
-    ...menuItems
-  } = supportedItems;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
-    icon: sideIcon,
-    label: labelProp,
-    className: "spacing-sizes-control__dropdown",
-    toggleProps: {
-      size: 'small'
-    },
-    children: ({
-      onClose
-    }) => {
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
-          children: Object.entries(menuItems).map(([slug, {
-            label,
-            icon
-          }]) => {
-            const isSelected = value === slug;
-            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-              icon: icon,
-              iconPosition: "left",
-              isSelected: isSelected,
-              role: "menuitemradio",
-              onClick: () => {
-                onChange(slug);
-                onClose();
-              },
-              suffix: isSelected ? checkIcon : undefined,
-              children: label
-            }, slug);
-          })
-        }), !!customItem && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-            icon: customItem.icon,
-            iconPosition: "left",
-            isSelected: value === VIEWS.custom,
-            role: "menuitemradio",
-            onClick: () => {
-              onChange(VIEWS.custom);
-              onClose();
-            },
-            suffix: value === VIEWS.custom ? checkIcon : undefined,
-            children: customItem.label
-          })
-        })]
-      });
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/hooks/use-spacing-sizes.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const use_spacing_sizes_EMPTY_ARRAY = [];
-const compare = new Intl.Collator('und', {
-  numeric: true
-}).compare;
-function useSpacingSizes() {
-  const [customSpacingSizes, themeSpacingSizes, defaultSpacingSizes, defaultSpacingSizesEnabled] = use_settings_useSettings('spacing.spacingSizes.custom', 'spacing.spacingSizes.theme', 'spacing.spacingSizes.default', 'spacing.defaultSpacingSizes');
-  const customSizes = customSpacingSizes !== null && customSpacingSizes !== void 0 ? customSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
-  const themeSizes = themeSpacingSizes !== null && themeSpacingSizes !== void 0 ? themeSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
-  const defaultSizes = defaultSpacingSizes && defaultSpacingSizesEnabled !== false ? defaultSpacingSizes : use_spacing_sizes_EMPTY_ARRAY;
-  return (0,external_wp_element_namespaceObject.useMemo)(() => {
-    const sizes = [{
-      name: (0,external_wp_i18n_namespaceObject.__)('None'),
-      slug: '0',
-      size: 0
-    }, ...customSizes, ...themeSizes, ...defaultSizes];
-
-    // Using numeric slugs opts-in to sorting by slug.
-    if (sizes.every(({
-      slug
-    }) => /^[0-9]/.test(slug))) {
-      sizes.sort((a, b) => compare(a.slug, b.slug));
-    }
-    return sizes.length > RANGE_CONTROL_MAX_SIZE ? [{
-      name: (0,external_wp_i18n_namespaceObject.__)('Default'),
-      slug: 'default',
-      size: undefined
-    }, ...sizes] : sizes;
-  }, [customSizes, themeSizes, defaultSizes]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/linked-button.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+function linked_button_LinkedButton({
+  isLinked,
+  ...props
+}) {
+  const label = isLinked ? (0,external_wp_i18n_namespaceObject.__)('Unlink sides') : (0,external_wp_i18n_namespaceObject.__)('Link sides');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    ...props,
+    size: "small",
+    icon: isLinked ? library_link : link_off,
+    iconSize: 24,
+    label: label
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/spacing-sizes-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * A flexible control for managing spacing values in the block editor. Supports single, axial,
+ * and separated input controls for different spacing configurations with automatic view selection
+ * based on current values and available sides.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/spacing-sizes-control/README.md
+ *
+ * @example
+ * ```jsx
+ * import { __experimentalSpacingSizesControl as SpacingSizesControl } from '@wordpress/block-editor';
+ * import { useState } from '@wordpress/element';
+ *
+ * function Example() {
+ *   const [ sides, setSides ] = useState( {
+ *     top: '0px',
+ *     right: '0px',
+ *     bottom: '0px',
+ *     left: '0px',
+ *   } );
+ *
+ *   return (
+ *     <SpacingSizesControl
+ *       values={ sides }
+ *       onChange={ setSides }
+ *       label="Sides"
+ *     />
+ *   );
+ * }
+ * ```
+ *
+ * @param {Object}   props                    Component props.
+ * @param {Object}   props.inputProps         Additional props for input controls.
+ * @param {string}   props.label              Label for the control.
+ * @param {number}   props.minimumCustomValue Minimum value for custom input.
+ * @param {Function} props.onChange           Called when spacing values change.
+ * @param {Function} props.onMouseOut         Called when mouse leaves the control.
+ * @param {Function} props.onMouseOver        Called when mouse enters the control.
+ * @param {boolean}  props.showSideInLabel    Show side in control label.
+ * @param {Array}    props.sides              Available sides for control.
+ * @param {boolean}  props.useSelect          Use select control for predefined values.
+ * @param {Object}   props.values             Current spacing values.
+ * @return {Element}                         Spacing sizes control component.
+ */
 
 function SpacingSizesControl({
   inputProps,
@@ -30641,6 +31560,9 @@
   const hasOneSide = sides?.length === 1;
   const hasOnlyAxialSides = sides?.includes('horizontal') && sides?.includes('vertical') && sides?.length === 2;
   const [view, setView] = (0,external_wp_element_namespaceObject.useState)(getInitialView(inputValues, sides));
+  const toggleLinked = () => {
+    setView(view === VIEWS.axial ? VIEWS.custom : VIEWS.axial);
+  };
   const handleOnChange = nextValue => {
     const newValues = {
       ...values,
@@ -30679,11 +31601,8 @@
   };
   const sideLabel = ALL_SIDES.includes(view) && showSideInLabel ? LABELS[view] : '';
   const label = (0,external_wp_i18n_namespaceObject.sprintf)(
-  // translators: 2. Type of spacing being modified (Padding, margin, etc). 1: The side of the block being modified (top, bottom, left etc.).
-  (0,external_wp_i18n_namespaceObject.__)('%1$s %2$s'), labelProp, sideLabel).trim();
-  const dropdownLabelText = (0,external_wp_i18n_namespaceObject.sprintf)(
-  // translators: %s: The current spacing property e.g. "Padding", "Margin".
-  (0,external_wp_i18n_namespaceObject._x)('%s options', 'Button label to reveal side configuration options'), labelProp);
+  // translators: 1: The side of the block being modified (top, bottom, left etc.). 2. Type of spacing being modified (padding, margin, etc).
+  (0,external_wp_i18n_namespaceObject._x)('%1$s %2$s', 'spacing'), labelProp, sideLabel).trim();
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
     className: "spacing-sizes-control",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
@@ -30692,11 +31611,10 @@
         as: "legend",
         className: "spacing-sizes-control__label",
         children: label
-      }), !hasOneSide && !hasOnlyAxialSides && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SidesDropdown, {
-        label: dropdownLabelText,
-        onChange: setView,
-        sides: sides,
-        value: view
+      }), !hasOneSide && !hasOnlyAxialSides && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(linked_button_LinkedButton, {
+        label: labelProp,
+        onClick: toggleLinked,
+        isLinked: view === VIEWS.axial
       })]
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
       spacing: 0.5,
@@ -30705,18 +31623,17 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/height-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/height-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const RANGE_CONTROL_CUSTOM_SETTINGS = {
@@ -30900,6 +31817,7 @@
           marginX: 2,
           marginBottom: 0,
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+            __next40pxDefaultSize: true,
             value: customRangeValue,
             min: 0,
             max: (_RANGE_CONTROL_CUSTOM = RANGE_CONTROL_CUSTOM_SETTINGS[selectedUnit]?.max) !== null && _RANGE_CONTROL_CUSTOM !== void 0 ? _RANGE_CONTROL_CUSTOM : 100,
@@ -30916,12 +31834,52 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/child-layout-control/index.js
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/use-get-number-of-blocks-before-cell.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+function useGetNumberOfBlocksBeforeCell(gridClientId, numColumns) {
+  const {
+    getBlockOrder,
+    getBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const getNumberOfBlocksBeforeCell = (column, row) => {
+    const targetIndex = (row - 1) * numColumns + column - 1;
+    let count = 0;
+    for (const clientId of getBlockOrder(gridClientId)) {
+      var _getBlockAttributes$s;
+      const {
+        columnStart,
+        rowStart
+      } = (_getBlockAttributes$s = getBlockAttributes(clientId).style?.layout) !== null && _getBlockAttributes$s !== void 0 ? _getBlockAttributes$s : {};
+      const cellIndex = (rowStart - 1) * numColumns + columnStart - 1;
+      if (cellIndex < targetIndex) {
+        count++;
+      }
+    }
+    return count;
+  };
+  return getNumberOfBlocksBeforeCell;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/child-layout-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -30961,29 +31919,141 @@
   panelId
 }) {
   const {
+    type: parentType,
+    default: {
+      type: defaultParentType = 'default'
+    } = {}
+  } = parentLayout !== null && parentLayout !== void 0 ? parentLayout : {};
+  const parentLayoutType = parentType || defaultParentType;
+  if (parentLayoutType === 'flex') {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(FlexControls, {
+      childLayout: childLayout,
+      onChange: onChange,
+      parentLayout: parentLayout,
+      isShownByDefault: isShownByDefault,
+      panelId: panelId
+    });
+  } else if (parentLayoutType === 'grid') {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridControls, {
+      childLayout: childLayout,
+      onChange: onChange,
+      parentLayout: parentLayout,
+      isShownByDefault: isShownByDefault,
+      panelId: panelId
+    });
+  }
+  return null;
+}
+function FlexControls({
+  childLayout,
+  onChange,
+  parentLayout,
+  isShownByDefault,
+  panelId
+}) {
+  const {
     selfStretch,
-    flexSize,
+    flexSize
+  } = childLayout;
+  const {
+    orientation = 'horizontal'
+  } = parentLayout !== null && parentLayout !== void 0 ? parentLayout : {};
+  const hasFlexValue = () => !!selfStretch;
+  const flexResetLabel = orientation === 'horizontal' ? (0,external_wp_i18n_namespaceObject.__)('Width') : (0,external_wp_i18n_namespaceObject.__)('Height');
+  const [availableUnits] = use_settings_useSettings('spacing.units');
+  const units = (0,external_wp_components_namespaceObject.__experimentalUseCustomUnits)({
+    availableUnits: availableUnits || ['%', 'px', 'em', 'rem', 'vh', 'vw']
+  });
+  const resetFlex = () => {
+    onChange({
+      selfStretch: undefined,
+      flexSize: undefined
+    });
+  };
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (selfStretch === 'fixed' && !flexSize) {
+      onChange({
+        ...childLayout,
+        selfStretch: 'fit'
+      });
+    }
+  }, []);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+    as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
+    spacing: 2,
+    hasValue: hasFlexValue,
+    label: flexResetLabel,
+    onDeselect: resetFlex,
+    isShownByDefault: isShownByDefault,
+    panelId: panelId,
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+      __nextHasNoMarginBottom: true,
+      size: "__unstable-large",
+      label: childLayoutOrientation(parentLayout),
+      value: selfStretch || 'fit',
+      help: helpText(selfStretch, parentLayout),
+      onChange: value => {
+        const newFlexSize = value !== 'fixed' ? null : flexSize;
+        onChange({
+          selfStretch: value,
+          flexSize: newFlexSize
+        });
+      },
+      isBlock: true,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
+        value: "fit",
+        label: (0,external_wp_i18n_namespaceObject._x)('Fit', 'Intrinsic block width in flex layout')
+      }, "fit"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
+        value: "fill",
+        label: (0,external_wp_i18n_namespaceObject._x)('Grow', 'Block with expanding width in flex layout')
+      }, "fill"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
+        value: "fixed",
+        label: (0,external_wp_i18n_namespaceObject._x)('Fixed', 'Block with fixed width in flex layout')
+      }, "fixed")]
+    }), selfStretch === 'fixed' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+      size: "__unstable-large",
+      units: units,
+      onChange: value => {
+        onChange({
+          selfStretch,
+          flexSize: value
+        });
+      },
+      value: flexSize,
+      label: flexResetLabel,
+      hideLabelFromVision: true
+    })]
+  });
+}
+function childLayoutOrientation(parentLayout) {
+  const {
+    orientation = 'horizontal'
+  } = parentLayout;
+  return orientation === 'horizontal' ? (0,external_wp_i18n_namespaceObject.__)('Width') : (0,external_wp_i18n_namespaceObject.__)('Height');
+}
+function GridControls({
+  childLayout,
+  onChange,
+  parentLayout,
+  isShownByDefault,
+  panelId
+}) {
+  const {
     columnStart,
     rowStart,
     columnSpan,
     rowSpan
   } = childLayout;
   const {
-    type: parentType,
-    default: {
-      type: defaultParentType = 'default'
-    } = {},
-    orientation = 'horizontal'
+    columnCount = 3,
+    rowCount
   } = parentLayout !== null && parentLayout !== void 0 ? parentLayout : {};
-  const parentLayoutType = parentType || defaultParentType;
-  const hasFlexValue = () => !!selfStretch;
-  const flexResetLabel = orientation === 'horizontal' ? (0,external_wp_i18n_namespaceObject.__)('Width') : (0,external_wp_i18n_namespaceObject.__)('Height');
-  const resetFlex = () => {
-    onChange({
-      selfStretch: undefined,
-      flexSize: undefined
-    });
-  };
+  const rootClientId = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getBlockRootClientId(panelId));
+  const {
+    moveBlocksToPosition,
+    __unstableMarkNextChangeAsNotPersistent
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(rootClientId, columnCount);
   const hasStartValue = () => !!columnStart || !!rowStart;
   const hasSpanValue = () => !!columnSpan || !!rowSpan;
   const resetGridStarts = () => {
@@ -30998,159 +32068,113 @@
       rowSpan: undefined
     });
   };
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (selfStretch === 'fixed' && !flexSize) {
-      onChange({
-        ...childLayout,
-        selfStretch: 'fit'
-      });
-    }
-  }, []);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [parentLayoutType === 'flex' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
       as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
-      spacing: 2,
-      hasValue: hasFlexValue,
-      label: flexResetLabel,
-      onDeselect: resetFlex,
+      hasValue: hasSpanValue,
+      label: (0,external_wp_i18n_namespaceObject.__)('Grid span'),
+      onDeselect: resetGridSpans,
       isShownByDefault: isShownByDefault,
       panelId: panelId,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
-        __nextHasNoMarginBottom: true,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
         size: "__unstable-large",
-        label: childLayoutOrientation(parentLayout),
-        value: selfStretch || 'fit',
-        help: helpText(selfStretch, parentLayout),
+        label: (0,external_wp_i18n_namespaceObject.__)('Column span'),
+        type: "number",
         onChange: value => {
-          const newFlexSize = value !== 'fixed' ? null : flexSize;
+          // Don't allow unsetting.
+          const newColumnSpan = value === '' ? 1 : parseInt(value, 10);
           onChange({
-            selfStretch: value,
-            flexSize: newFlexSize
+            columnStart,
+            rowStart,
+            rowSpan,
+            columnSpan: newColumnSpan
+          });
+        },
+        value: columnSpan !== null && columnSpan !== void 0 ? columnSpan : 1,
+        min: 1
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
+        size: "__unstable-large",
+        label: (0,external_wp_i18n_namespaceObject.__)('Row span'),
+        type: "number",
+        onChange: value => {
+          // Don't allow unsetting.
+          const newRowSpan = value === '' ? 1 : parseInt(value, 10);
+          onChange({
+            columnStart,
+            rowStart,
+            columnSpan,
+            rowSpan: newRowSpan
           });
         },
-        isBlock: true,
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
-          value: "fit",
-          label: (0,external_wp_i18n_namespaceObject.__)('Fit')
-        }, "fit"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
-          value: "fill",
-          label: (0,external_wp_i18n_namespaceObject.__)('Fill')
-        }, "fill"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
-          value: "fixed",
-          label: (0,external_wp_i18n_namespaceObject.__)('Fixed')
-        }, "fixed")]
-      }), selfStretch === 'fixed' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
-        size: "__unstable-large",
-        onChange: value => {
-          onChange({
-            selfStretch,
-            flexSize: value
-          });
+        value: rowSpan !== null && rowSpan !== void 0 ? rowSpan : 1,
+        min: 1
+      })]
+    }), window.__experimentalEnableGridInteractivity && columnCount &&
+    /*#__PURE__*/
+    // Use Flex with an explicit width on the FlexItem instead of HStack to
+    // work around an issue in webkit where inputs with a max attribute are
+    // sized incorrectly.
+    (0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
+      as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
+      hasValue: hasStartValue,
+      label: (0,external_wp_i18n_namespaceObject.__)('Grid placement'),
+      onDeselect: resetGridStarts,
+      isShownByDefault: false,
+      panelId: panelId,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+        style: {
+          width: '50%'
         },
-        value: flexSize
-      })]
-    }), parentLayoutType === 'grid' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-        as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
-        hasValue: hasSpanValue,
-        label: (0,external_wp_i18n_namespaceObject.__)('Grid span'),
-        onDeselect: resetGridSpans,
-        isShownByDefault: isShownByDefault,
-        panelId: panelId,
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
           size: "__unstable-large",
-          label: (0,external_wp_i18n_namespaceObject.__)('Column span'),
+          label: (0,external_wp_i18n_namespaceObject.__)('Column'),
           type: "number",
           onChange: value => {
+            // Don't allow unsetting.
+            const newColumnStart = value === '' ? 1 : parseInt(value, 10);
+            onChange({
+              columnStart: newColumnStart,
+              rowStart,
+              columnSpan,
+              rowSpan
+            });
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([panelId], rootClientId, rootClientId, getNumberOfBlocksBeforeCell(newColumnStart, rowStart));
+          },
+          value: columnStart !== null && columnStart !== void 0 ? columnStart : 1,
+          min: 1,
+          max: columnCount ? columnCount - (columnSpan !== null && columnSpan !== void 0 ? columnSpan : 1) + 1 : undefined
+        })
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+        style: {
+          width: '50%'
+        },
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
+          size: "__unstable-large",
+          label: (0,external_wp_i18n_namespaceObject.__)('Row'),
+          type: "number",
+          onChange: value => {
+            // Don't allow unsetting.
+            const newRowStart = value === '' ? 1 : parseInt(value, 10);
             onChange({
               columnStart,
-              rowStart,
-              rowSpan,
-              columnSpan: value
-            });
-          },
-          value: columnSpan,
-          min: 1
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
-          size: "__unstable-large",
-          label: (0,external_wp_i18n_namespaceObject.__)('Row span'),
-          type: "number",
-          onChange: value => {
-            onChange({
-              columnStart,
-              rowStart,
+              rowStart: newRowStart,
               columnSpan,
-              rowSpan: value
+              rowSpan
             });
-          },
-          value: rowSpan,
-          min: 1
-        })]
-      }), window.__experimentalEnableGridInteractivity &&
-      /*#__PURE__*/
-      // Use Flex with an explicit width on the FlexItem instead of HStack to
-      // work around an issue in webkit where inputs with a max attribute are
-      // sized incorrectly.
-      (0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-        as: external_wp_components_namespaceObject.__experimentalToolsPanelItem,
-        hasValue: hasStartValue,
-        label: (0,external_wp_i18n_namespaceObject.__)('Grid placement'),
-        onDeselect: resetGridStarts,
-        isShownByDefault: false,
-        panelId: panelId,
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          style: {
-            width: '50%'
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([panelId], rootClientId, rootClientId, getNumberOfBlocksBeforeCell(columnStart, newRowStart));
           },
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
-            size: "__unstable-large",
-            label: (0,external_wp_i18n_namespaceObject.__)('Column'),
-            type: "number",
-            onChange: value => {
-              onChange({
-                columnStart: value,
-                rowStart,
-                columnSpan,
-                rowSpan
-              });
-            },
-            value: columnStart,
-            min: 1,
-            max: parentLayout?.columnCount ? parentLayout.columnCount - (columnSpan !== null && columnSpan !== void 0 ? columnSpan : 1) + 1 : undefined
-          })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          style: {
-            width: '50%'
-          },
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
-            size: "__unstable-large",
-            label: (0,external_wp_i18n_namespaceObject.__)('Row'),
-            type: "number",
-            onChange: value => {
-              onChange({
-                columnStart,
-                rowStart: value,
-                columnSpan,
-                rowSpan
-              });
-            },
-            value: rowStart,
-            min: 1,
-            max: parentLayout?.rowCount ? parentLayout.rowCount - (rowSpan !== null && rowSpan !== void 0 ? rowSpan : 1) + 1 : undefined
-          })
-        })]
+          value: rowStart !== null && rowStart !== void 0 ? rowStart : 1,
+          min: 1,
+          max: rowCount ? rowCount - (rowSpan !== null && rowSpan !== void 0 ? rowSpan : 1) + 1 : undefined
+        })
       })]
     })]
   });
 }
-function childLayoutOrientation(parentLayout) {
-  const {
-    orientation = 'horizontal'
-  } = parentLayout;
-  return orientation === 'horizontal' ? (0,external_wp_i18n_namespaceObject.__)('Width') : (0,external_wp_i18n_namespaceObject.__)('Height');
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/aspect-ratio-tool.js
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/aspect-ratio-tool.js
 /**
  * WordPress dependencies
  */
@@ -31233,24 +32257,23 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/dimensions-panel.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/dimensions-panel.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -31346,22 +32369,34 @@
   }
   return value;
 }
-function splitGapValue(value) {
+function splitGapValue(value, isAxialGap) {
+  if (!value) {
+    return value;
+  }
+
   // Check for shorthand value (a string value).
-  if (value && typeof value === 'string') {
-    // If the value is a string, treat it as a single side (top) for the spacing controls.
-    return {
+  if (typeof value === 'string') {
+    /*
+     * Map the string value to appropriate sides for the spacing control depending
+     * on whether the current block has axial gap support or not.
+     *
+     * Note: The axial value pairs must match for the spacing control to display
+     * the appropriate horizontal/vertical sliders.
+     */
+    return isAxialGap ? {
+      top: value,
+      right: value,
+      bottom: value,
+      left: value
+    } : {
       top: value
     };
   }
-  if (value) {
-    return {
-      ...value,
-      right: value?.left,
-      bottom: value?.top
-    };
-  }
-  return value;
+  return {
+    ...value,
+    right: value?.left,
+    bottom: value?.top
+  };
 }
 function DimensionsToolsPanel({
   resetAllFilter,
@@ -31439,7 +32474,7 @@
   const minimumMargin = -Infinity;
   const [minMarginValue, setMinMarginValue] = (0,external_wp_element_namespaceObject.useState)(minimumMargin);
 
-  // Content Size
+  // Content Width
   const showContentSizeControl = useHasContentSize(settings) && includeLayoutControls;
   const contentSizeValue = decodeValue(inheritedValue?.layout?.contentSize);
   const setContentSizeValue = newValue => {
@@ -31448,7 +32483,7 @@
   const hasUserSetContentSizeValue = () => !!value?.layout?.contentSize;
   const resetContentSizeValue = () => setContentSizeValue(undefined);
 
-  // Wide Size
+  // Wide Width
   const showWideSizeControl = useHasWideSize(settings) && includeLayoutControls;
   const wideSizeValue = decodeValue(inheritedValue?.layout?.wideSize);
   const setWideSizeValue = newValue => {
@@ -31487,10 +32522,10 @@
 
   // Block Gap
   const showGapControl = useHasGap(settings);
-  const gapValue = decodeValue(inheritedValue?.spacing?.blockGap);
-  const gapValues = splitGapValue(gapValue);
   const gapSides = Array.isArray(settings?.spacing?.blockGap) ? settings?.spacing?.blockGap : settings?.spacing?.blockGap?.sides;
   const isAxialGap = gapSides && gapSides.some(side => AXIAL_SIDES.includes(side));
+  const gapValue = decodeValue(inheritedValue?.spacing?.blockGap);
+  const gapValues = splitGapValue(gapValue, isAxialGap);
   const setGapValue = newGapValue => {
     onChange(setImmutably(value, ['spacing', 'blockGap'], newGapValue));
   };
@@ -31573,16 +32608,6 @@
     };
   }, []);
   const onMouseLeaveControls = () => onVisualize(false);
-  const inputProps = {
-    min: minMarginValue,
-    onDragStart: () => {
-      //Reset to 0 in case the value was negative.
-      setMinMarginValue(0);
-    },
-    onDragEnd: () => {
-      setMinMarginValue(minimumMargin);
-    }
-  };
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Wrapper, {
     resetAllFilter: resetAllFilter,
     value: value,
@@ -31592,54 +32617,48 @@
       className: "span-columns",
       children: (0,external_wp_i18n_namespaceObject.__)('Set the width of the main content area.')
     }), showContentSizeControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
-      className: "single-column",
-      label: (0,external_wp_i18n_namespaceObject.__)('Content size'),
+      label: (0,external_wp_i18n_namespaceObject.__)('Content width'),
       hasValue: hasUserSetContentSizeValue,
       onDeselect: resetContentSizeValue,
       isShownByDefault: (_defaultControls$cont = defaultControls.contentSize) !== null && _defaultControls$cont !== void 0 ? _defaultControls$cont : dimensions_panel_DEFAULT_CONTROLS.contentSize,
       panelId: panelId,
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-        alignment: "flex-end",
-        justify: "flex-start",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
-          label: (0,external_wp_i18n_namespaceObject.__)('Content'),
-          labelPosition: "top",
-          __unstableInputWidth: "80px",
-          value: contentSizeValue || '',
-          onChange: nextContentSize => {
-            setContentSizeValue(nextContentSize);
-          },
-          units: units
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalView, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+        __next40pxDefaultSize: true,
+        label: (0,external_wp_i18n_namespaceObject.__)('Content width'),
+        labelPosition: "top",
+        value: contentSizeValue || '',
+        onChange: nextContentSize => {
+          setContentSizeValue(nextContentSize);
+        },
+        units: units,
+        prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlPrefixWrapper, {
+          variant: "icon",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-            icon: position_center
+            icon: align_none
           })
-        })]
+        })
       })
     }), showWideSizeControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
-      className: "single-column",
-      label: (0,external_wp_i18n_namespaceObject.__)('Wide size'),
+      label: (0,external_wp_i18n_namespaceObject.__)('Wide width'),
       hasValue: hasUserSetWideSizeValue,
       onDeselect: resetWideSizeValue,
       isShownByDefault: (_defaultControls$wide = defaultControls.wideSize) !== null && _defaultControls$wide !== void 0 ? _defaultControls$wide : dimensions_panel_DEFAULT_CONTROLS.wideSize,
       panelId: panelId,
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-        alignment: "flex-end",
-        justify: "flex-start",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
-          label: (0,external_wp_i18n_namespaceObject.__)('Wide'),
-          labelPosition: "top",
-          __unstableInputWidth: "80px",
-          value: wideSizeValue || '',
-          onChange: nextWideSize => {
-            setWideSizeValue(nextWideSize);
-          },
-          units: units
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalView, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+        __next40pxDefaultSize: true,
+        label: (0,external_wp_i18n_namespaceObject.__)('Wide width'),
+        labelPosition: "top",
+        value: wideSizeValue || '',
+        onChange: nextWideSize => {
+          setWideSizeValue(nextWideSize);
+        },
+        units: units,
+        prefix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlPrefixWrapper, {
+          variant: "icon",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
             icon: stretch_wide
           })
-        })]
+        })
       })
     }), showPaddingControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
       hasValue: hasPaddingValue,
@@ -31650,7 +32669,8 @@
         'tools-panel-item-spacing': showSpacingPresetsControl
       }),
       panelId: panelId,
-      children: [!showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalBoxControl, {
+      children: [!showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BoxControl, {
+        __next40pxDefaultSize: true,
         values: paddingValues,
         onChange: setPaddingValues,
         label: (0,external_wp_i18n_namespaceObject.__)('Padding'),
@@ -31658,8 +32678,10 @@
         units: units,
         allowReset: false,
         splitOnAxis: isAxialPadding,
-        onMouseOver: onMouseOverPadding,
-        onMouseOut: onMouseLeaveControls
+        inputProps: {
+          onMouseOver: onMouseOverPadding,
+          onMouseOut: onMouseLeaveControls
+        }
       }), showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SpacingSizesControl, {
         values: paddingValues,
         onChange: setPaddingValues,
@@ -31679,17 +32701,27 @@
         'tools-panel-item-spacing': showSpacingPresetsControl
       }),
       panelId: panelId,
-      children: [!showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalBoxControl, {
+      children: [!showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BoxControl, {
+        __next40pxDefaultSize: true,
         values: marginValues,
         onChange: setMarginValues,
-        inputProps: inputProps,
+        inputProps: {
+          min: minMarginValue,
+          onDragStart: () => {
+            // Reset to 0 in case the value was negative.
+            setMinMarginValue(0);
+          },
+          onDragEnd: () => {
+            setMinMarginValue(minimumMargin);
+          },
+          onMouseOver: onMouseOverMargin,
+          onMouseOut: onMouseLeaveControls
+        },
         label: (0,external_wp_i18n_namespaceObject.__)('Margin'),
         sides: marginSides,
         units: units,
         allowReset: false,
-        splitOnAxis: isAxialMargin,
-        onMouseOver: onMouseOverMargin,
-        onMouseOut: onMouseLeaveControls
+        splitOnAxis: isAxialMargin
       }), showSpacingPresetsControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SpacingSizesControl, {
         values: marginValues,
         onChange: setMarginValues,
@@ -31707,10 +32739,14 @@
       onDeselect: resetGapValue,
       isShownByDefault: (_defaultControls$bloc = defaultControls.blockGap) !== null && _defaultControls$bloc !== void 0 ? _defaultControls$bloc : dimensions_panel_DEFAULT_CONTROLS.blockGap,
       className: dist_clsx({
-        'tools-panel-item-spacing': showSpacingPresetsControl
+        'tools-panel-item-spacing': showSpacingPresetsControl,
+        'single-column':
+        // If UnitControl is used, should be single-column.
+        !showSpacingPresetsControl && !isAxialGap
       }),
       panelId: panelId,
-      children: [!showSpacingPresetsControl && (isAxialGap ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalBoxControl, {
+      children: [!showSpacingPresetsControl && (isAxialGap ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BoxControl, {
+        __next40pxDefaultSize: true,
         label: (0,external_wp_i18n_namespaceObject.__)('Block spacing'),
         min: 0,
         onChange: setGapValues,
@@ -31720,8 +32756,8 @@
         allowReset: false,
         splitOnAxis: isAxialGap
       }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalUnitControl, {
+        __next40pxDefaultSize: true,
         label: (0,external_wp_i18n_namespaceObject.__)('Block spacing'),
-        __unstableInputWidth: "80px",
         min: 0,
         onChange: setGapValue,
         units: units,
@@ -31763,7 +32799,407 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/spacing-visualizer.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-popover/use-popover-scroll.js
+/**
+ * WordPress dependencies
+ */
+
+
+const scrollContainerCache = new WeakMap();
+
+/**
+ * Allow scrolling "through" popovers over the canvas. This is only called for
+ * as long as the pointer is over a popover. Do not use React events because it
+ * will bubble through portals.
+ *
+ * @param {Object} contentRef
+ */
+function usePopoverScroll(contentRef) {
+  const effect = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
+    function onWheel(event) {
+      const {
+        deltaX,
+        deltaY
+      } = event;
+      const contentEl = contentRef.current;
+      let scrollContainer = scrollContainerCache.get(contentEl);
+      if (!scrollContainer) {
+        scrollContainer = (0,external_wp_dom_namespaceObject.getScrollContainer)(contentEl);
+        scrollContainerCache.set(contentEl, scrollContainer);
+      }
+      scrollContainer.scrollBy(deltaX, deltaY);
+    }
+    // Tell the browser that we do not call event.preventDefault
+    // See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners
+    const options = {
+      passive: true
+    };
+    node.addEventListener('wheel', onWheel, options);
+    return () => {
+      node.removeEventListener('wheel', onWheel, options);
+    };
+  }, [contentRef]);
+  return contentRef ? effect : null;
+}
+/* harmony default export */ const use_popover_scroll = (usePopoverScroll);
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/dom.js
+const BLOCK_SELECTOR = '.block-editor-block-list__block';
+const APPENDER_SELECTOR = '.block-list-appender';
+const BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';
+
+/**
+ * Returns true if two elements are contained within the same block.
+ *
+ * @param {Element} a First element.
+ * @param {Element} b Second element.
+ *
+ * @return {boolean} Whether elements are in the same block.
+ */
+function isInSameBlock(a, b) {
+  return a.closest(BLOCK_SELECTOR) === b.closest(BLOCK_SELECTOR);
+}
+
+/**
+ * Returns true if an element is considered part of the block and not its inner
+ * blocks or appender.
+ *
+ * @param {Element} blockElement Block container element.
+ * @param {Element} element      Element.
+ *
+ * @return {boolean} Whether an element is considered part of the block and not
+ *                   its inner blocks or appender.
+ */
+function isInsideRootBlock(blockElement, element) {
+  const parentBlock = element.closest([BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS].join(','));
+  return parentBlock === blockElement;
+}
+
+/**
+ * Finds the block client ID given any DOM node inside the block.
+ *
+ * @param {Node?} node DOM node.
+ *
+ * @return {string|undefined} Client ID or undefined if the node is not part of
+ *                            a block.
+ */
+function getBlockClientId(node) {
+  while (node && node.nodeType !== node.ELEMENT_NODE) {
+    node = node.parentNode;
+  }
+  if (!node) {
+    return;
+  }
+  const elementNode = /** @type {Element} */node;
+  const blockNode = elementNode.closest(BLOCK_SELECTOR);
+  if (!blockNode) {
+    return;
+  }
+  return blockNode.id.slice('block-'.length);
+}
+
+/**
+ * Calculates the union of two rectangles.
+ *
+ * @param {DOMRect} rect1 First rectangle.
+ * @param {DOMRect} rect2 Second rectangle.
+ * @return {DOMRect} Union of the two rectangles.
+ */
+function rectUnion(rect1, rect2) {
+  const left = Math.min(rect1.left, rect2.left);
+  const right = Math.max(rect1.right, rect2.right);
+  const bottom = Math.max(rect1.bottom, rect2.bottom);
+  const top = Math.min(rect1.top, rect2.top);
+  return new window.DOMRectReadOnly(left, top, right - left, bottom - top);
+}
+
+/**
+ * Returns whether an element is visible.
+ *
+ * @param {Element} element Element.
+ * @return {boolean} Whether the element is visible.
+ */
+function isElementVisible(element) {
+  const viewport = element.ownerDocument.defaultView;
+  if (!viewport) {
+    return false;
+  }
+
+  // Check for <VisuallyHidden> component.
+  if (element.classList.contains('components-visually-hidden')) {
+    return false;
+  }
+  const bounds = element.getBoundingClientRect();
+  if (bounds.width === 0 || bounds.height === 0) {
+    return false;
+  }
+
+  // Older browsers, e.g. Safari < 17.4 may not support the `checkVisibility` method.
+  if (element.checkVisibility) {
+    return element.checkVisibility?.({
+      opacityProperty: true,
+      contentVisibilityAuto: true,
+      visibilityProperty: true
+    });
+  }
+  const style = viewport.getComputedStyle(element);
+  if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {
+    return false;
+  }
+  return true;
+}
+
+/**
+ * Checks if the element is scrollable.
+ *
+ * @param {Element} element Element.
+ * @return {boolean} True if the element is scrollable.
+ */
+function isScrollable(element) {
+  const style = window.getComputedStyle(element);
+  return style.overflowX === 'auto' || style.overflowX === 'scroll' || style.overflowY === 'auto' || style.overflowY === 'scroll';
+}
+const WITH_OVERFLOW_ELEMENT_BLOCKS = ['core/navigation'];
+/**
+ * Returns the bounding rectangle of an element, with special handling for blocks
+ * that have visible overflowing children (defined in WITH_OVERFLOW_ELEMENT_BLOCKS).
+ *
+ * For blocks like Navigation that can have overflowing elements (e.g. submenus),
+ * this function calculates the combined bounds of both the parent and its visible
+ * children. The returned rect may extend beyond the viewport.
+ * The returned rect represents the full extent of the element and its visible
+ * children, which may extend beyond the viewport.
+ *
+ * @param {Element} element Element.
+ * @return {DOMRect} Bounding client rect of the element and its visible children.
+ */
+function getElementBounds(element) {
+  const viewport = element.ownerDocument.defaultView;
+  if (!viewport) {
+    return new window.DOMRectReadOnly();
+  }
+  let bounds = element.getBoundingClientRect();
+  const dataType = element.getAttribute('data-type');
+
+  /*
+   * For blocks with overflowing elements (like Navigation), include the bounds
+   * of visible children that extend beyond the parent container.
+   */
+  if (dataType && WITH_OVERFLOW_ELEMENT_BLOCKS.includes(dataType)) {
+    const stack = [element];
+    let currentElement;
+    while (currentElement = stack.pop()) {
+      // Children won’t affect bounds unless the element is not scrollable.
+      if (!isScrollable(currentElement)) {
+        for (const child of currentElement.children) {
+          if (isElementVisible(child)) {
+            const childBounds = child.getBoundingClientRect();
+            bounds = rectUnion(bounds, childBounds);
+            stack.push(child);
+          }
+        }
+      }
+    }
+  }
+
+  /*
+   * Take into account the outer horizontal limits of the container in which
+   * an element is supposed to be "visible". For example, if an element is
+   * positioned -10px to the left of the window x value (0), this function
+   * discounts the negative overhang because it's not visible and therefore
+   * not to be counted in the visibility calculations. Top and bottom values
+   * are not accounted for to accommodate vertical scroll.
+   */
+  const left = Math.max(bounds.left, 0);
+  const right = Math.min(bounds.right, viewport.innerWidth);
+  bounds = new window.DOMRectReadOnly(left, bounds.top, right - left, bounds.height);
+  return bounds;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-popover/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;
+function BlockPopover({
+  clientId,
+  bottomClientId,
+  children,
+  __unstablePopoverSlot,
+  __unstableContentRef,
+  shift = true,
+  ...props
+}, ref) {
+  const selectedElement = useBlockElement(clientId);
+  const lastSelectedElement = useBlockElement(bottomClientId !== null && bottomClientId !== void 0 ? bottomClientId : clientId);
+  const mergedRefs = (0,external_wp_compose_namespaceObject.useMergeRefs)([ref, use_popover_scroll(__unstableContentRef)]);
+  const [popoverDimensionsRecomputeCounter, forceRecomputePopoverDimensions] = (0,external_wp_element_namespaceObject.useReducer)(
+  // Module is there to make sure that the counter doesn't overflow.
+  s => (s + 1) % MAX_POPOVER_RECOMPUTE_COUNTER, 0);
+
+  // When blocks are moved up/down, they are animated to their new position by
+  // updating the `transform` property manually (i.e. without using CSS
+  // transitions or animations). The animation, which can also scroll the block
+  // editor, can sometimes cause the position of the Popover to get out of sync.
+  // A MutationObserver is therefore used to make sure that changes to the
+  // selectedElement's attribute (i.e. `transform`) can be tracked and used to
+  // trigger the Popover to rerender.
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    if (!selectedElement) {
+      return;
+    }
+    const observer = new window.MutationObserver(forceRecomputePopoverDimensions);
+    observer.observe(selectedElement, {
+      attributes: true
+    });
+    return () => {
+      observer.disconnect();
+    };
+  }, [selectedElement]);
+  const popoverAnchor = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    if (
+    // popoverDimensionsRecomputeCounter is by definition always equal or greater
+    // than 0. This check is only there to satisfy the correctness of the
+    // exhaustive-deps rule for the `useMemo` hook.
+    popoverDimensionsRecomputeCounter < 0 || !selectedElement || bottomClientId && !lastSelectedElement) {
+      return undefined;
+    }
+    return {
+      getBoundingClientRect() {
+        return lastSelectedElement ? rectUnion(getElementBounds(selectedElement), getElementBounds(lastSelectedElement)) : getElementBounds(selectedElement);
+      },
+      contextElement: selectedElement
+    };
+  }, [popoverDimensionsRecomputeCounter, selectedElement, bottomClientId, lastSelectedElement]);
+  if (!selectedElement || bottomClientId && !lastSelectedElement) {
+    return null;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
+    ref: mergedRefs,
+    animate: false,
+    focusOnMount: false,
+    anchor: popoverAnchor
+    // Render in the old slot if needed for backward compatibility,
+    // otherwise render in place (not in the default popover slot).
+    ,
+    __unstableSlotName: __unstablePopoverSlot,
+    inline: !__unstablePopoverSlot,
+    placement: "top-start",
+    resize: false,
+    flip: false,
+    shift: shift,
+    ...props,
+    className: dist_clsx('block-editor-block-popover', props.className),
+    variant: "unstyled",
+    children: children
+  });
+}
+const PrivateBlockPopover = (0,external_wp_element_namespaceObject.forwardRef)(BlockPopover);
+const PublicBlockPopover = ({
+  clientId,
+  bottomClientId,
+  children,
+  ...props
+}, ref) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
+  ...props,
+  bottomClientId: bottomClientId,
+  clientId: clientId,
+  __unstableContentRef: undefined,
+  __unstablePopoverSlot: undefined,
+  ref: ref,
+  children: children
+});
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-popover/README.md
+ */
+/* harmony default export */ const block_popover = ((0,external_wp_element_namespaceObject.forwardRef)(PublicBlockPopover));
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-popover/cover.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function BlockPopoverCover({
+  clientId,
+  bottomClientId,
+  children,
+  shift = false,
+  additionalStyles,
+  ...props
+}, ref) {
+  var _bottomClientId;
+  (_bottomClientId = bottomClientId) !== null && _bottomClientId !== void 0 ? _bottomClientId : bottomClientId = clientId;
+  const selectedElement = useBlockElement(clientId);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
+    ref: ref,
+    clientId: clientId,
+    bottomClientId: bottomClientId,
+    shift: shift,
+    ...props,
+    children: selectedElement && clientId === bottomClientId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CoverContainer, {
+      selectedElement: selectedElement,
+      additionalStyles: additionalStyles,
+      children: children
+    }) : children
+  });
+}
+function CoverContainer({
+  selectedElement,
+  additionalStyles = {},
+  children
+}) {
+  const [width, setWidth] = (0,external_wp_element_namespaceObject.useState)(selectedElement.offsetWidth);
+  const [height, setHeight] = (0,external_wp_element_namespaceObject.useState)(selectedElement.offsetHeight);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const observer = new window.ResizeObserver(() => {
+      setWidth(selectedElement.offsetWidth);
+      setHeight(selectedElement.offsetHeight);
+    });
+    observer.observe(selectedElement, {
+      box: 'border-box'
+    });
+    return () => observer.disconnect();
+  }, [selectedElement]);
+  const style = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    return {
+      position: 'absolute',
+      width,
+      height,
+      ...additionalStyles
+    };
+  }, [width, height, additionalStyles]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    style: style,
+    children: children
+  });
+}
+/* harmony default export */ const cover = ((0,external_wp_element_namespaceObject.forwardRef)(BlockPopoverCover));
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/spacing-visualizer.js
 /**
  * WordPress dependencies
  */
@@ -31795,14 +33231,14 @@
     // See https://github.com/WordPress/gutenberg/pull/59227.
     window.requestAnimationFrame(() => window.requestAnimationFrame(updateStyle));
   }, [blockElement, value]);
-  const previousValue = (0,external_wp_element_namespaceObject.useRef)(value);
+  const previousValueRef = (0,external_wp_element_namespaceObject.useRef)(value);
   const [isActive, setIsActive] = (0,external_wp_element_namespaceObject.useState)(false);
   (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (external_wp_isShallowEqual_default()(value, previousValue.current) || forceShow) {
+    if (external_wp_isShallowEqual_default()(value, previousValueRef.current) || forceShow) {
       return;
     }
     setIsActive(true);
-    previousValue.current = value;
+    previousValueRef.current = value;
     const timeout = setTimeout(() => {
       setIsActive(false);
     }, 400);
@@ -31823,7 +33259,7 @@
     })
   });
 }
-function spacing_visualizer_getComputedCSS(element, property) {
+function getComputedCSS(element, property) {
   return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property);
 }
 function MarginVisualizer({
@@ -31835,10 +33271,10 @@
     clientId: clientId,
     value: value?.spacing?.margin,
     computeStyle: blockElement => {
-      const top = spacing_visualizer_getComputedCSS(blockElement, 'margin-top');
-      const right = spacing_visualizer_getComputedCSS(blockElement, 'margin-right');
-      const bottom = spacing_visualizer_getComputedCSS(blockElement, 'margin-bottom');
-      const left = spacing_visualizer_getComputedCSS(blockElement, 'margin-left');
+      const top = getComputedCSS(blockElement, 'margin-top');
+      const right = getComputedCSS(blockElement, 'margin-right');
+      const bottom = getComputedCSS(blockElement, 'margin-bottom');
+      const left = getComputedCSS(blockElement, 'margin-left');
       return {
         borderTopWidth: top,
         borderRightWidth: right,
@@ -31862,34 +33298,32 @@
     clientId: clientId,
     value: value?.spacing?.padding,
     computeStyle: blockElement => ({
-      borderTopWidth: spacing_visualizer_getComputedCSS(blockElement, 'padding-top'),
-      borderRightWidth: spacing_visualizer_getComputedCSS(blockElement, 'padding-right'),
-      borderBottomWidth: spacing_visualizer_getComputedCSS(blockElement, 'padding-bottom'),
-      borderLeftWidth: spacing_visualizer_getComputedCSS(blockElement, 'padding-left')
+      borderTopWidth: getComputedCSS(blockElement, 'padding-top'),
+      borderRightWidth: getComputedCSS(blockElement, 'padding-right'),
+      borderBottomWidth: getComputedCSS(blockElement, 'padding-bottom'),
+      borderLeftWidth: getComputedCSS(blockElement, 'padding-left')
     }),
     forceShow: forceShow
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/dimensions.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/dimensions.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -32051,21 +33485,19 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/style.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/style.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -32350,7 +33782,7 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ColorEdit, {
       ...passedProps
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BackgroundImagePanel, {
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(background_BackgroundImagePanel, {
       ...passedProps
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(typography_TypographyPanel, {
       ...passedProps
@@ -32381,16 +33813,15 @@
   elementType: 'heading',
   elements: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
 }];
+
+// Used for generating the instance ID
+const STYLE_BLOCK_PROPS_REFERENCE = {};
 function style_useBlockProps({
   name,
   style
 }) {
-  const blockElementsContainerIdentifier = `wp-elements-${(0,external_wp_compose_namespaceObject.useInstanceId)(style_useBlockProps)}`;
-
-  // The .editor-styles-wrapper selector is required on elements styles. As it is
-  // added to all other editor styles, not providing it causes reset and global
-  // styles to override element styles because of higher specificity.
-  const baseElementSelector = `.editor-styles-wrapper .${blockElementsContainerIdentifier}`;
+  const blockElementsContainerIdentifier = (0,external_wp_compose_namespaceObject.useInstanceId)(STYLE_BLOCK_PROPS_REFERENCE, 'wp-elements');
+  const baseElementSelector = `.${blockElementsContainerIdentifier}`;
   const blockElementStyles = style?.elements;
   const styles = (0,external_wp_element_namespaceObject.useMemo)(() => {
     if (!blockElementStyles) {
@@ -32451,7 +33882,7 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/style/addAttribute', style_addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/settings.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/settings.js
 /**
  * WordPress dependencies
  */
@@ -32476,7 +33907,7 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/settings/addAttribute', settings_addAttribute);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/filter.js
+;// ./node_modules/@wordpress/icons/build-module/library/filter.js
 /**
  * WordPress dependencies
  */
@@ -32491,11 +33922,10 @@
 });
 /* harmony default export */ const library_filter = (filter);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/duotone-control/index.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/duotone-control/index.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -32572,7 +34002,7 @@
 }
 /* harmony default export */ const duotone_control = (DuotoneControl);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/duotone/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/duotone/utils.js
 /**
  * External dependencies
  */
@@ -32667,7 +34097,7 @@
 </svg>`;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/get-block-css-selector.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/get-block-css-selector.js
 /**
  * Internal dependencies
  */
@@ -32775,23 +34205,23 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/filters-panel.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/filters-panel.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -32863,6 +34293,46 @@
     children: label
   })]
 });
+const renderToggle = (duotone, resetDuotone) => ({
+  onToggle,
+  isOpen
+}) => {
+  const duotoneButtonRef = (0,external_wp_element_namespaceObject.useRef)(undefined);
+  const toggleProps = {
+    onClick: onToggle,
+    className: dist_clsx({
+      'is-open': isOpen
+    }),
+    'aria-expanded': isOpen,
+    ref: duotoneButtonRef
+  };
+  const removeButtonProps = {
+    onClick: () => {
+      if (isOpen) {
+        onToggle();
+      }
+      resetDuotone();
+      // Return focus to parent button.
+      duotoneButtonRef.current?.focus();
+    },
+    className: 'block-editor-panel-duotone-settings__reset',
+    label: (0,external_wp_i18n_namespaceObject.__)('Reset')
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
+      ...toggleProps,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LabeledColorIndicator, {
+        indicator: duotone,
+        label: (0,external_wp_i18n_namespaceObject.__)('Duotone')
+      })
+    }), duotone && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      size: "small",
+      icon: library_reset,
+      ...removeButtonProps
+    })]
+  });
+};
 function FiltersPanel({
   as: Wrapper = FiltersToolsPanel,
   value,
@@ -32893,8 +34363,8 @@
     }) => {
       return colors === newValue;
     });
-    const settedValue = duotonePreset ? `var:preset|duotone|${duotonePreset.slug}` : newValue;
-    onChange(setImmutably(value, ['filter', 'duotone'], settedValue));
+    const duotoneValue = duotonePreset ? `var:preset|duotone|${duotonePreset.slug}` : newValue;
+    onChange(setImmutably(value, ['filter', 'duotone'], duotoneValue));
   };
   const hasDuotone = () => !!value?.filter?.duotone;
   const resetDuotone = () => setDuotone(undefined);
@@ -32921,29 +34391,7 @@
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
         popoverProps: filters_panel_popoverProps,
         className: "block-editor-global-styles-filters-panel__dropdown",
-        renderToggle: ({
-          onToggle,
-          isOpen
-        }) => {
-          const toggleProps = {
-            onClick: onToggle,
-            className: dist_clsx({
-              'is-open': isOpen
-            }),
-            'aria-expanded': isOpen
-          };
-          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
-            isBordered: true,
-            isSeparated: true,
-            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-              ...toggleProps,
-              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LabeledColorIndicator, {
-                indicator: duotone,
-                label: (0,external_wp_i18n_namespaceObject.__)('Duotone')
-              })
-            })
-          });
-        },
+        renderToggle: renderToggle(duotone, resetDuotone),
         renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
           paddingSize: "small",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
@@ -32967,26 +34415,24 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/duotone.js
-/**
- * External dependencies
- */
-
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/duotone.js
+/**
+ * External dependencies
+ */
+
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -33178,10 +34624,6 @@
   // Build the CSS selectors to which the filter will be applied.
   const selectors = duotoneSelector.split(',');
   const selectorsScoped = selectors.map(selectorPart => {
-    // Extra .editor-styles-wrapper specificity is needed in the editor
-    // since we're not using inline styles to apply the filter. We need to
-    // override duotone applied by global styles and theme.json.
-
     // Assuming the selector part is a subclass selector (not a tag name)
     // so we can prepend the filter id class. If we want to support elements
     // such as `img` or namespaces, we'll need to add a case for that here.
@@ -33189,11 +34631,11 @@
   });
   const selector = selectorsScoped.join(', ');
   const isValidFilter = Array.isArray(colors) || colors === 'unset';
-  useStyleOverride(isValidFilter ? {
+  usePrivateStyleOverride(isValidFilter ? {
     css: colors !== 'unset' ? getDuotoneStylesheet(selector, filterId) : getDuotoneUnsetStylesheet(selector),
     __unstableType: 'presets'
   } : undefined);
-  useStyleOverride(isValidFilter ? {
+  usePrivateStyleOverride(isValidFilter ? {
     assets: colors !== 'unset' ? getDuotoneFilter(filterId, colors) : '',
     __unstableType: 'svgs'
   } : undefined);
@@ -33214,23 +34656,26 @@
       // `inline-block` is used instead of `none` to ensure that scroll
       // position is not affected, as `none` results in the editor
       // scrolling to the top of the block.
-      blockElement.style.display = 'inline-block';
+      blockElement.style.setProperty('display', 'inline-block');
       // Simply accessing el.offsetHeight flushes layout and style changes
       // in WebKit without having to wait for setTimeout.
       // eslint-disable-next-line no-unused-expressions
       blockElement.offsetHeight;
-      blockElement.style.display = display;
+      blockElement.style.setProperty('display', display);
     }
     // `colors` must be a dependency so this effect runs when the colors
     // change in Safari.
   }, [isValidFilter, blockElement, colors]);
 }
+
+// Used for generating the instance ID
+const DUOTONE_BLOCK_PROPS_REFERENCE = {};
 function duotone_useBlockProps({
   clientId,
   name,
   style
 }) {
-  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(duotone_useBlockProps);
+  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(DUOTONE_BLOCK_PROPS_REFERENCE);
   const selector = (0,external_wp_element_namespaceObject.useMemo)(() => {
     const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name);
     if (blockType) {
@@ -33273,7 +34718,7 @@
 }
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/duotone/add-attributes', addDuotoneAttributes);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-block-display-information/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-block-display-information/index.js
 /**
  * WordPress dependencies
  */
@@ -33383,56 +34828,48 @@
   }, [clientId]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/position.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-const {
-  CustomSelectControl
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/position.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
 const POSITION_SUPPORT_KEY = 'position';
-const OPTION_CLASSNAME = 'block-editor-hooks__position-selection__select-control__option';
 const DEFAULT_OPTION = {
   key: 'default',
   value: '',
-  name: (0,external_wp_i18n_namespaceObject.__)('Default'),
-  className: OPTION_CLASSNAME
+  name: (0,external_wp_i18n_namespaceObject.__)('Default')
 };
 const STICKY_OPTION = {
   key: 'sticky',
   value: 'sticky',
   name: (0,external_wp_i18n_namespaceObject._x)('Sticky', 'Name for the value of the CSS position property'),
-  className: OPTION_CLASSNAME,
-  __experimentalHint: (0,external_wp_i18n_namespaceObject.__)('The block will stick to the top of the window instead of scrolling.')
+  hint: (0,external_wp_i18n_namespaceObject.__)('The block will stick to the top of the window instead of scrolling.')
 };
 const FIXED_OPTION = {
   key: 'fixed',
   value: 'fixed',
   name: (0,external_wp_i18n_namespaceObject._x)('Fixed', 'Name for the value of the CSS position property'),
-  className: OPTION_CLASSNAME,
-  __experimentalHint: (0,external_wp_i18n_namespaceObject.__)('The block will not move when the page is scrolled.')
+  hint: (0,external_wp_i18n_namespaceObject.__)('The block will not move when the page is scrolled.')
 };
 const POSITION_SIDES = ['top', 'right', 'bottom', 'left'];
 const VALID_POSITION_TYPES = ['sticky', 'fixed'];
@@ -33602,7 +35039,7 @@
     };
   }, [clientId]);
   const blockInformation = useBlockDisplayInformation(firstParentClientId);
-  const stickyHelpText = allowSticky && value === STICKY_OPTION.value && blockInformation ? (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: the name of the parent block. */
+  const stickyHelpText = allowSticky && value === STICKY_OPTION.value && blockInformation ? (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: the name of the parent block. */
   (0,external_wp_i18n_namespaceObject.__)('The block will stick to the scrollable area of the parent %s block.'), blockInformation.title) : null;
   const options = (0,external_wp_element_namespaceObject.useMemo)(() => {
     const availableOptions = [DEFAULT_OPTION];
@@ -33640,12 +35077,10 @@
     web: options.length > 1 ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls, {
       group: "position",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl, {
-        className: "block-editor-hooks__position-selection",
         __nextHasNoMarginBottom: true,
         help: stickyHelpText,
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomSelectControl, {
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CustomSelectControl, {
           __next40pxDefaultSize: true,
-          className: "block-editor-hooks__position-selection__select-control",
           label: (0,external_wp_i18n_namespaceObject.__)('Position'),
           hideLabelFromVision: true,
           describedBy: (0,external_wp_i18n_namespaceObject.sprintf)(
@@ -33653,7 +35088,6 @@
           (0,external_wp_i18n_namespaceObject.__)('Currently selected position: %s'), selectedOption.name),
           options: options,
           value: selectedOption,
-          __experimentalShowSelectedHint: true,
           onChange: ({
             selectedItem
           }) => {
@@ -33682,6 +35116,9 @@
     return (0,external_wp_blocks_namespaceObject.hasBlockSupport)(name, POSITION_SUPPORT_KEY);
   }
 });
+
+// Used for generating the instance ID
+const POSITION_BLOCK_PROPS_REFERENCE = {};
 function position_useBlockProps({
   name,
   style
@@ -33691,7 +35128,7 @@
     name
   });
   const allowPositionStyles = hasPositionBlockSupport && !isPositionDisabled;
-  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(position_useBlockProps);
+  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(POSITION_BLOCK_PROPS_REFERENCE);
 
   // Higher specificity to override defaults in editor UI.
   const positionSelector = `.wp-container-${id}.wp-container-${id}`;
@@ -33719,7 +35156,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/use-global-styles-output.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/use-global-styles-output.js
 /**
  * WordPress dependencies
  */
@@ -33762,16 +35199,6 @@
 const {
   kebabCase: use_global_styles_output_kebabCase
 } = unlock(external_wp_components_namespaceObject.privateApis);
-function compileStyleValue(uncompiledValue) {
-  const VARIABLE_REFERENCE_PREFIX = 'var:';
-  const VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE = '|';
-  const VARIABLE_PATH_SEPARATOR_TOKEN_STYLE = '--';
-  if (uncompiledValue?.startsWith?.(VARIABLE_REFERENCE_PREFIX)) {
-    const variable = uncompiledValue.slice(VARIABLE_REFERENCE_PREFIX.length).split(VARIABLE_PATH_SEPARATOR_TOKEN_ATTRIBUTE).join(VARIABLE_PATH_SEPARATOR_TOKEN_STYLE);
-    return `var(--wp--${variable})`;
-  }
-  return uncompiledValue;
-}
 
 /**
  * Transform given preset tree into a set of style declarations.
@@ -33997,17 +35424,46 @@
           return;
         }
         const cssProperty = name.startsWith('--') ? name : use_global_styles_output_kebabCase(name);
-        declarations.push(`${cssProperty}: ${compileStyleValue(getValueFromObjectPath(styleValue, [prop]))}`);
+        declarations.push(`${cssProperty}: ${(0,external_wp_styleEngine_namespaceObject.getCSSValueFromRawStyle)(getValueFromObjectPath(styleValue, [prop]))}`);
       });
     } else if (getValueFromObjectPath(blockStyles, pathToValue, false)) {
       const cssProperty = key.startsWith('--') ? key : use_global_styles_output_kebabCase(key);
-      declarations.push(`${cssProperty}: ${compileStyleValue(getValueFromObjectPath(blockStyles, pathToValue))}`);
+      declarations.push(`${cssProperty}: ${(0,external_wp_styleEngine_namespaceObject.getCSSValueFromRawStyle)(getValueFromObjectPath(blockStyles, pathToValue))}`);
     }
     return declarations;
   }, []);
 
-  // The goal is to move everything to server side generated engine styles
-  // This is temporary as we absorb more and more styles into the engine.
+  /*
+   * Preprocess background image values.
+   *
+   * Note: As we absorb more and more styles into the engine, we could simplify this function.
+   * A refactor is for the style engine to handle ref resolution (and possibly defaults)
+   * via a public util used internally and externally. Theme.json tree and defaults could be passed
+   * as options.
+   */
+  if (!!blockStyles.background) {
+    /*
+     * Resolve dynamic values before they are compiled by the style engine,
+     * which doesn't (yet) resolve dynamic values.
+     */
+    if (blockStyles.background?.backgroundImage) {
+      blockStyles.background.backgroundImage = getResolvedValue(blockStyles.background.backgroundImage, tree);
+    }
+
+    /*
+     * Set default values for block background styles.
+     * Top-level styles are an exception as they are applied to the body.
+     */
+    if (!isRoot && !!blockStyles.background?.backgroundImage?.id) {
+      blockStyles = {
+        ...blockStyles,
+        background: {
+          ...blockStyles.background,
+          ...setBackgroundStyleDefaults(blockStyles.background)
+        }
+      };
+    }
+  }
   const extraRules = (0,external_wp_styleEngine_namespaceObject.getCSSRules)(blockStyles);
   extraRules.forEach(rule => {
     // Don't output padding properties if padding variables are set or if we're not editing a full template.
@@ -34015,16 +35471,7 @@
       return;
     }
     const cssProperty = rule.key.startsWith('--') ? rule.key : use_global_styles_output_kebabCase(rule.key);
-    let ruleValue = rule.value;
-    if (typeof ruleValue !== 'string' && ruleValue?.ref) {
-      const refPath = ruleValue.ref.split('.');
-      ruleValue = compileStyleValue(getValueFromObjectPath(tree, refPath));
-      // Presence of another ref indicates a reference to another dynamic value.
-      // Pointing to another dynamic value is not supported.
-      if (!ruleValue || ruleValue?.ref) {
-        return;
-      }
-    }
+    let ruleValue = getResolvedValue(rule.value, tree, null);
 
     // Calculate fluid typography rules where available.
     if (cssProperty === 'font-size') {
@@ -34642,11 +36089,11 @@
       processedCSS += `:root :where(${blockSelector}){${part.trim()}}`;
     } else {
       // If the part contains braces, it's a nested CSS rule.
-      const splittedPart = part.replace('}', '').split('{');
-      if (splittedPart.length !== 2) {
-        return;
-      }
-      const [nestedSelector, cssValue] = splittedPart;
+      const splitPart = part.replace('}', '').split('{');
+      if (splitPart.length !== 2) {
+        return;
+      }
+      const [nestedSelector, cssValue] = splitPart;
 
       // Handle pseudo elements such as ::before, ::after, etc. Regex will also
       // capture any leading combinator such as >, +, or ~, as well as spaces.
@@ -34687,7 +36134,6 @@
  */
 function useGlobalStylesOutputWithConfig(mergedConfig = {}, disableRootPadding) {
   const [blockGap] = useGlobalSetting('spacing.blockGap');
-  mergedConfig = setThemeFileUris(mergedConfig, mergedConfig?._links?.['wp:theme-file']);
   const hasBlockGapSupport = blockGap !== null;
   const hasFallbackGapSupport = !hasBlockGapSupport; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback styles support.
   const disableLayoutStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
@@ -34756,18 +36202,17 @@
   return useGlobalStylesOutputWithConfig(mergedConfig, disableRootPadding);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/block-style-variation.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/block-style-variation.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -34818,7 +36263,7 @@
 function OverrideStyles({
   override
 }) {
-  useStyleOverride(override);
+  usePrivateStyleOverride(override);
 }
 
 /**
@@ -35052,7 +36497,7 @@
       variationStyles: true
     });
   }, [variation, settings, styles, getBlockStyles, clientId]);
-  useStyleOverride({
+  usePrivateStyleOverride({
     id: `variation-${clientId}`,
     css: variationStyles,
     __unstableType: 'variation',
@@ -35075,27 +36520,25 @@
   useBlockProps: block_style_variation_useBlockProps
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/layout.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/layout.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -35281,7 +36724,6 @@
         children: [showInheritToggle && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
             __nextHasNoMarginBottom: true,
-            className: "block-editor-hooks__toggle-control",
             label: (0,external_wp_i18n_namespaceObject.__)('Inner blocks use content width'),
             checked: layoutType?.name === 'constrained' || hasContentSizeOrLegacySettings,
             onChange: () => setAttributes({
@@ -35289,7 +36731,7 @@
                 type: layoutType?.name === 'constrained' || hasContentSizeOrLegacySettings ? 'default' : 'constrained'
               }
             }),
-            help: layoutType?.name === 'constrained' || hasContentSizeOrLegacySettings ? (0,external_wp_i18n_namespaceObject.__)('Nested blocks use content width with options for full and wide widths.') : (0,external_wp_i18n_namespaceObject.__)('Nested blocks will fill the width of this container. Toggle to constrain.')
+            help: layoutType?.name === 'constrained' || hasContentSizeOrLegacySettings ? (0,external_wp_i18n_namespaceObject.__)('Nested blocks use content width with options for full and wide widths.') : (0,external_wp_i18n_namespaceObject.__)('Nested blocks will fill the width of this container.')
           })
         }), !inherit && allowSwitching && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(LayoutTypeSwitcher, {
           type: blockLayoutType,
@@ -35329,15 +36771,22 @@
   type,
   onChange
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ButtonGroup, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+    __next40pxDefaultSize: true,
+    isBlock: true,
+    label: (0,external_wp_i18n_namespaceObject.__)('Layout type'),
+    __nextHasNoMarginBottom: true,
+    hideLabelFromVision: true,
+    isAdaptiveWidth: true,
+    value: type,
+    onChange: onChange,
     children: getLayoutTypes().map(({
       name,
       label
     }) => {
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-        isPressed: type === name,
-        onClick: () => onChange(name),
-        children: label
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
+        value: name,
+        label: label
       }, name);
     })
   });
@@ -35466,146 +36915,52 @@
 (0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/layout/addAttribute', layout_addAttribute);
 (0,external_wp_hooks_namespaceObject.addFilter)('editor.BlockListBlock', 'core/editor/layout/with-layout-styles', withLayoutStyles);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/grid-visualizer/grid-item-resizer.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-function GridItemResizer({
-  clientId,
-  bounds,
-  onChange
-}) {
-  const blockElement = useBlockElement(clientId);
-  const rootBlockElement = blockElement?.parentElement;
-  if (!blockElement || !rootBlockElement) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemResizerInner, {
-    clientId: clientId,
-    bounds: bounds,
-    blockElement: blockElement,
-    rootBlockElement: rootBlockElement,
-    onChange: onChange
-  });
-}
-function GridItemResizerInner({
-  clientId,
-  bounds,
-  blockElement,
-  rootBlockElement,
-  onChange
-}) {
-  const [resizeDirection, setResizeDirection] = (0,external_wp_element_namespaceObject.useState)(null);
-  const [enableSide, setEnableSide] = (0,external_wp_element_namespaceObject.useState)({
-    top: false,
-    bottom: false,
-    left: false,
-    right: false
-  });
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    const observer = new window.ResizeObserver(() => {
-      const blockClientRect = blockElement.getBoundingClientRect();
-      const rootBlockClientRect = rootBlockElement.getBoundingClientRect();
-      setEnableSide({
-        top: blockClientRect.top > rootBlockClientRect.top,
-        bottom: blockClientRect.bottom < rootBlockClientRect.bottom,
-        left: blockClientRect.left > rootBlockClientRect.left,
-        right: blockClientRect.right < rootBlockClientRect.right
-      });
-    });
-    observer.observe(blockElement);
-    return () => observer.disconnect();
-  }, [blockElement, rootBlockElement]);
-  const justification = {
-    right: 'flex-start',
-    left: 'flex-end'
-  };
-  const alignment = {
-    top: 'flex-end',
-    bottom: 'flex-start'
-  };
-  const styles = {
-    display: 'flex',
-    justifyContent: 'center',
-    alignItems: 'center',
-    ...(justification[resizeDirection] && {
-      justifyContent: justification[resizeDirection]
-    }),
-    ...(alignment[resizeDirection] && {
-      alignItems: alignment[resizeDirection]
-    })
-  };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
-    className: "block-editor-grid-item-resizer",
-    clientId: clientId,
-    __unstablePopoverSlot: "block-toolbar",
-    additionalStyles: styles,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ResizableBox, {
-      className: "block-editor-grid-item-resizer__box",
-      size: {
-        width: '100%',
-        height: '100%'
-      },
-      enable: {
-        bottom: enableSide.bottom,
-        bottomLeft: false,
-        bottomRight: false,
-        left: enableSide.left,
-        right: enableSide.right,
-        top: enableSide.top,
-        topLeft: false,
-        topRight: false
-      },
-      bounds: bounds,
-      boundsByDirection: true,
-      onResizeStart: (event, direction) => {
-        /*
-         * The container justification and alignment need to be set
-         * according to the direction the resizer is being dragged in,
-         * so that it resizes in the right direction.
-         */
-        setResizeDirection(direction);
-
-        /*
-         * The mouseup event on the resize handle doesn't trigger if the mouse
-         * isn't directly above the handle, so we try to detect if it happens
-         * outside the grid and dispatch a mouseup event on the handle.
-         */
-        blockElement.ownerDocument.addEventListener('mouseup', () => {
-          event.target.dispatchEvent(new Event('mouseup', {
-            bubbles: true
-          }));
-        }, {
-          once: true
-        });
-      },
-      onResizeStop: (event, direction, boxElement) => {
-        const columnGap = parseFloat(getComputedCSS(rootBlockElement, 'column-gap'));
-        const rowGap = parseFloat(getComputedCSS(rootBlockElement, 'row-gap'));
-        const gridColumnTracks = getGridTracks(getComputedCSS(rootBlockElement, 'grid-template-columns'), columnGap);
-        const gridRowTracks = getGridTracks(getComputedCSS(rootBlockElement, 'grid-template-rows'), rowGap);
-        const rect = new window.DOMRect(blockElement.offsetLeft + boxElement.offsetLeft, blockElement.offsetTop + boxElement.offsetTop, boxElement.offsetWidth, boxElement.offsetHeight);
-        const columnStart = getClosestTrack(gridColumnTracks, rect.left) + 1;
-        const rowStart = getClosestTrack(gridRowTracks, rect.top) + 1;
-        const columnEnd = getClosestTrack(gridColumnTracks, rect.right, 'end') + 1;
-        const rowEnd = getClosestTrack(gridRowTracks, rect.bottom, 'end') + 1;
-        onChange({
-          columnSpan: columnEnd - columnStart + 1,
-          rowSpan: rowEnd - rowStart + 1
-        });
-      }
-    })
-  });
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/utils.js
+function range(start, length) {
+  return Array.from({
+    length
+  }, (_, i) => start + i);
+}
+class GridRect {
+  constructor({
+    columnStart,
+    rowStart,
+    columnEnd,
+    rowEnd,
+    columnSpan,
+    rowSpan
+  } = {}) {
+    this.columnStart = columnStart !== null && columnStart !== void 0 ? columnStart : 1;
+    this.rowStart = rowStart !== null && rowStart !== void 0 ? rowStart : 1;
+    if (columnSpan !== undefined) {
+      this.columnEnd = this.columnStart + columnSpan - 1;
+    } else {
+      this.columnEnd = columnEnd !== null && columnEnd !== void 0 ? columnEnd : this.columnStart;
+    }
+    if (rowSpan !== undefined) {
+      this.rowEnd = this.rowStart + rowSpan - 1;
+    } else {
+      this.rowEnd = rowEnd !== null && rowEnd !== void 0 ? rowEnd : this.rowStart;
+    }
+  }
+  get columnSpan() {
+    return this.columnEnd - this.columnStart + 1;
+  }
+  get rowSpan() {
+    return this.rowEnd - this.rowStart + 1;
+  }
+  contains(column, row) {
+    return column >= this.columnStart && column <= this.columnEnd && row >= this.rowStart && row <= this.rowEnd;
+  }
+  containsRect(rect) {
+    return this.contains(rect.columnStart, rect.rowStart) && this.contains(rect.columnEnd, rect.rowEnd);
+  }
+  intersectsRect(rect) {
+    return this.columnStart <= rect.columnEnd && this.columnEnd >= rect.columnStart && this.rowStart <= rect.rowEnd && this.rowEnd >= rect.rowStart;
+  }
+}
+function utils_getComputedCSS(element, property) {
+  return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property);
 }
 
 /**
@@ -35653,1117 +37008,115 @@
 function getClosestTrack(tracks, position, edge = 'start') {
   return tracks.reduce((closest, track, index) => Math.abs(track[edge] - position) < Math.abs(tracks[closest][edge] - position) ? index : closest, 0);
 }
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/layout-child.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-function useBlockPropsChildLayoutStyles({
-  style
-}) {
-  var _style$layout;
-  const shouldRenderChildLayoutStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    return !select(store).getSettings().disableLayoutStyles;
-  });
-  const layout = (_style$layout = style?.layout) !== null && _style$layout !== void 0 ? _style$layout : {};
-  const {
-    selfStretch,
-    flexSize,
+function getGridRect(gridElement, rect) {
+  const columnGap = parseFloat(utils_getComputedCSS(gridElement, 'column-gap'));
+  const rowGap = parseFloat(utils_getComputedCSS(gridElement, 'row-gap'));
+  const gridColumnTracks = getGridTracks(utils_getComputedCSS(gridElement, 'grid-template-columns'), columnGap);
+  const gridRowTracks = getGridTracks(utils_getComputedCSS(gridElement, 'grid-template-rows'), rowGap);
+  const columnStart = getClosestTrack(gridColumnTracks, rect.left) + 1;
+  const rowStart = getClosestTrack(gridRowTracks, rect.top) + 1;
+  const columnEnd = getClosestTrack(gridColumnTracks, rect.right, 'end') + 1;
+  const rowEnd = getClosestTrack(gridRowTracks, rect.bottom, 'end') + 1;
+  return new GridRect({
     columnStart,
+    columnEnd,
     rowStart,
-    columnSpan,
-    rowSpan
-  } = layout;
-  const parentLayout = useLayout() || {};
-  const {
-    columnCount,
-    minimumColumnWidth
-  } = parentLayout;
-  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(useBlockPropsChildLayoutStyles);
-  const selector = `.wp-container-content-${id}`;
-  let css = '';
-  if (shouldRenderChildLayoutStyles) {
-    if (selfStretch === 'fixed' && flexSize) {
-      css = `${selector} {
-				flex-basis: ${flexSize};
-				box-sizing: border-box;
-			}`;
-    } else if (selfStretch === 'fill') {
-      css = `${selector} {
-				flex-grow: 1;
-			}`;
-    } else if (columnStart && columnSpan) {
-      css = `${selector} {
-				grid-column: ${columnStart} / span ${columnSpan};
-			}`;
-    } else if (columnStart) {
-      css = `${selector} {
-				grid-column: ${columnStart};
-			}`;
-    } else if (columnSpan) {
-      css = `${selector} {
-				grid-column: span ${columnSpan};
-			}`;
-    }
-    /**
-     * If minimumColumnWidth is set on the parent, or if no
-     * columnCount is set, the grid is responsive so a
-     * container query is needed for the span to resize.
-     */
-    if ((columnSpan || columnStart) && (minimumColumnWidth || !columnCount)) {
-      // Check if columnSpan and columnStart are numbers so Math.max doesn't break.
-      const columnSpanNumber = columnSpan ? parseInt(columnSpan) : null;
-      const columnStartNumber = columnStart ? parseInt(columnStart) : null;
-      const highestNumber = Math.max(columnSpanNumber, columnStartNumber);
-      let parentColumnValue = parseFloat(minimumColumnWidth);
-      /**
-       * 12rem is the default minimumColumnWidth value.
-       * If parentColumnValue is not a number, default to 12.
-       */
-      if (isNaN(parentColumnValue)) {
-        parentColumnValue = 12;
-      }
-      let parentColumnUnit = minimumColumnWidth?.replace(parentColumnValue, '');
-      /**
-       * Check that parent column unit is either 'px', 'rem' or 'em'.
-       * If not, default to 'rem'.
-       */
-      if (!['px', 'rem', 'em'].includes(parentColumnUnit)) {
-        parentColumnUnit = 'rem';
-      }
-      const defaultGapValue = parentColumnUnit === 'px' ? 24 : 1.5;
-      const containerQueryValue = highestNumber * parentColumnValue + (highestNumber - 1) * defaultGapValue;
-      // If a span is set we want to preserve it as long as possible, otherwise we just reset the value.
-      const gridColumnValue = columnSpan ? '1/-1' : 'auto';
-      css += `@container (max-width: ${containerQueryValue}${parentColumnUnit}) {
-				${selector} {
-					grid-column: ${gridColumnValue};
-				}
-			}`;
-    }
-    if (rowStart && rowSpan) {
-      css += `${selector} {
-				grid-row: ${rowStart} / span ${rowSpan};
-			}`;
-    } else if (rowStart) {
-      css += `${selector} {
-				grid-row: ${rowStart};
-			}`;
-    } else if (rowSpan) {
-      css += `${selector} {
-				grid-row: span ${rowSpan};
-			}`;
-    }
-  }
-  useStyleOverride({
-    css
-  });
-
-  // Only attach a container class if there is generated CSS to be attached.
-  if (!css) {
-    return;
-  }
-
-  // Attach a `wp-container-content` id-based classname.
-  return {
-    className: `wp-container-content-${id}`
-  };
-}
-function ChildLayoutControlsPure({
-  clientId,
-  style,
-  setAttributes
-}) {
-  const {
-    type: parentLayoutType = 'default',
-    allowSizingOnChildren = false
-  } = useLayout() || {};
-  const rootClientId = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    return select(store).getBlockRootClientId(clientId);
-  }, [clientId]);
-
-  // Use useState() instead of useRef() so that GridItemResizer updates when ref is set.
-  const [resizerBounds, setResizerBounds] = (0,external_wp_element_namespaceObject.useState)();
-  if (parentLayoutType !== 'grid') {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizer, {
-      clientId: rootClientId,
-      contentRef: setResizerBounds
-    }), allowSizingOnChildren && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemResizer, {
-      clientId: clientId
-      // Don't allow resizing beyond the grid visualizer.
-      ,
-      bounds: resizerBounds,
-      onChange: ({
-        columnSpan,
-        rowSpan
-      }) => {
-        setAttributes({
-          style: {
-            ...style,
-            layout: {
-              ...style?.layout,
-              columnSpan,
-              rowSpan
-            }
-          }
-        });
-      }
-    })]
-  });
-}
-/* harmony default export */ const layout_child = ({
-  useBlockProps: useBlockPropsChildLayoutStyles,
-  edit: ChildLayoutControlsPure,
-  attributeKeys: ['style'],
-  hasSupport() {
-    return true;
-  }
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Contains the properties `ConvertToGroupButton` component needs.
- *
- * @typedef {Object} ConvertToGroupButtonProps
- * @property {string[]}  clientIds         An array of the selected client ids.
- * @property {boolean}   isGroupable       Indicates if the selected blocks can be grouped.
- * @property {boolean}   isUngroupable     Indicates if the selected blocks can be ungrouped.
- * @property {WPBlock[]} blocksSelection   An array of the selected blocks.
- * @property {string}    groupingBlockName The name of block used for handling grouping interactions.
- */
-
-/**
- * Returns the properties `ConvertToGroupButton` component needs to work properly.
- * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`
- * should be rendered, to avoid ending up with an empty MenuGroup.
- *
- * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks
- *                                      from the block editor store are used if this is not provided.
- *
- * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.
- */
-function useConvertToGroupButtonProps(selectedClientIds) {
-  return (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlocksByClientId,
-      getSelectedBlockClientIds,
-      isUngroupable,
-      isGroupable
-    } = select(store);
-    const {
-      getGroupingBlockName,
-      getBlockType
-    } = select(external_wp_blocks_namespaceObject.store);
-    const clientIds = selectedClientIds?.length ? selectedClientIds : getSelectedBlockClientIds();
-    const blocksSelection = getBlocksByClientId(clientIds);
-    const [firstSelectedBlock] = blocksSelection;
-    const _isUngroupable = clientIds.length === 1 && isUngroupable(clientIds[0]);
-    return {
-      clientIds,
-      isGroupable: isGroupable(clientIds),
-      isUngroupable: _isUngroupable,
-      blocksSelection,
-      groupingBlockName: getGroupingBlockName(),
-      onUngroup: _isUngroupable && getBlockType(firstSelectedBlock.name)?.transforms?.ungroup
-    };
-  }, [selectedClientIds]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-function ConvertToGroupButton({
-  clientIds,
-  isGroupable,
-  isUngroupable,
-  onUngroup,
-  blocksSelection,
-  groupingBlockName,
-  onClose = () => {}
-}) {
-  const {
-    getSelectedBlockClientIds
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    replaceBlocks
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const onConvertToGroup = () => {
-    // Activate the `transform` on the Grouping Block which does the conversion.
-    const newBlocks = (0,external_wp_blocks_namespaceObject.switchToBlockType)(blocksSelection, groupingBlockName);
-    if (newBlocks) {
-      replaceBlocks(clientIds, newBlocks);
-    }
-  };
-  const onConvertFromGroup = () => {
-    let innerBlocks = blocksSelection[0].innerBlocks;
-    if (!innerBlocks.length) {
-      return;
-    }
-    if (onUngroup) {
-      innerBlocks = onUngroup(blocksSelection[0].attributes, blocksSelection[0].innerBlocks);
-    }
-    replaceBlocks(clientIds, innerBlocks);
-  };
-  if (!isGroupable && !isUngroupable) {
-    return null;
-  }
-  const selectedBlockClientIds = getSelectedBlockClientIds();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [isGroupable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-      shortcut: selectedBlockClientIds.length > 1 ? external_wp_keycodes_namespaceObject.displayShortcut.primary('g') : undefined,
-      onClick: () => {
-        onConvertToGroup();
-        onClose();
-      },
-      children: (0,external_wp_i18n_namespaceObject._x)('Group', 'verb')
-    }), isUngroupable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-      onClick: () => {
-        onConvertFromGroup();
-        onClose();
-      },
-      children: (0,external_wp_i18n_namespaceObject._x)('Ungroup', 'Ungrouping blocks from within a grouping block back into individual blocks within the Editor ')
-    })]
-  });
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-lock/use-block-lock.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Return details about the block lock status.
- *
- * @param {string} clientId The block client Id.
- *
- * @return {Object} Block lock status
- */
-function useBlockLock(clientId) {
-  return (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      canEditBlock,
-      canMoveBlock,
-      canRemoveBlock,
-      canLockBlockType,
-      getBlockName,
-      getTemplateLock
-    } = select(store);
-    const canEdit = canEditBlock(clientId);
-    const canMove = canMoveBlock(clientId);
-    const canRemove = canRemoveBlock(clientId);
-    return {
-      canEdit,
-      canMove,
-      canRemove,
-      canLock: canLockBlockType(getBlockName(clientId)),
-      isContentLocked: getTemplateLock(clientId) === 'contentOnly',
-      isLocked: !canEdit || !canMove || !canRemove
-    };
-  }, [clientId]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/unlock.js
-/**
- * WordPress dependencies
- */
-
-
-const unlock_unlock = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/svg",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8h1.5c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1z"
-  })
-});
-/* harmony default export */ const library_unlock = (unlock_unlock);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/lock-outline.js
-/**
- * WordPress dependencies
- */
-
-
-const lockOutline = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/svg",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zM9.8 7c0-1.2 1-2.2 2.2-2.2 1.2 0 2.2 1 2.2 2.2v3H9.8V7zm6.7 11.5h-9v-7h9v7z"
-  })
-});
-/* harmony default export */ const lock_outline = (lockOutline);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/lock.js
-/**
- * WordPress dependencies
- */
-
-
-const lock_lock = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/svg",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"
-  })
-});
-/* harmony default export */ const library_lock = (lock_lock);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-lock/modal.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-// Entity based blocks which allow edit locking
-
-
-const ALLOWS_EDIT_LOCKING = ['core/block', 'core/navigation'];
-function getTemplateLockValue(lock) {
-  // Prevents all operations.
-  if (lock.remove && lock.move) {
-    return 'all';
-  }
-
-  // Prevents inserting or removing blocks, but allows moving existing blocks.
-  if (lock.remove && !lock.move) {
-    return 'insert';
-  }
-  return false;
-}
-function BlockLockModal({
-  clientId,
-  onClose
-}) {
-  const [lock, setLock] = (0,external_wp_element_namespaceObject.useState)({
-    move: false,
-    remove: false
-  });
-  const {
-    canEdit,
-    canMove,
-    canRemove
-  } = useBlockLock(clientId);
-  const {
-    allowsEditLocking,
-    templateLock,
-    hasTemplateLock
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockName,
-      getBlockAttributes
-    } = select(store);
-    const blockName = getBlockName(clientId);
-    const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName);
-    return {
-      allowsEditLocking: ALLOWS_EDIT_LOCKING.includes(blockName),
-      templateLock: getBlockAttributes(clientId)?.templateLock,
-      hasTemplateLock: !!blockType?.attributes?.templateLock
-    };
-  }, [clientId]);
-  const [applyTemplateLock, setApplyTemplateLock] = (0,external_wp_element_namespaceObject.useState)(!!templateLock);
-  const {
-    updateBlockAttributes
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const blockInformation = useBlockDisplayInformation(clientId);
-  const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(BlockLockModal, 'block-editor-block-lock-modal__options-title');
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    setLock({
-      move: !canMove,
-      remove: !canRemove,
-      ...(allowsEditLocking ? {
-        edit: !canEdit
-      } : {})
-    });
-  }, [canEdit, canMove, canRemove, allowsEditLocking]);
-  const isAllChecked = Object.values(lock).every(Boolean);
-  const isMixed = Object.values(lock).some(Boolean) && !isAllChecked;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Modal, {
-    title: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Name of the block. */
-    (0,external_wp_i18n_namespaceObject.__)('Lock %s'), blockInformation.title),
-    overlayClassName: "block-editor-block-lock-modal",
-    onRequestClose: onClose,
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-      children: (0,external_wp_i18n_namespaceObject.__)('Choose specific attributes to restrict or lock all available options.')
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
-      onSubmit: event => {
-        event.preventDefault();
-        updateBlockAttributes([clientId], {
-          lock,
-          templateLock: applyTemplateLock ? getTemplateLockValue(lock) : undefined
-        });
-        onClose();
-      },
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-        role: "group",
-        "aria-labelledby": instanceId,
-        className: "block-editor-block-lock-modal__options",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
-          __nextHasNoMarginBottom: true,
-          className: "block-editor-block-lock-modal__options-title",
-          label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-            id: instanceId,
-            children: (0,external_wp_i18n_namespaceObject.__)('Lock all')
-          }),
-          checked: isAllChecked,
-          indeterminate: isMixed,
-          onChange: newValue => setLock({
-            move: newValue,
-            remove: newValue,
-            ...(allowsEditLocking ? {
-              edit: newValue
-            } : {})
-          })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("ul", {
-          className: "block-editor-block-lock-modal__checklist",
-          children: [allowsEditLocking && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
-            className: "block-editor-block-lock-modal__checklist-item",
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
-              __nextHasNoMarginBottom: true,
-              label: (0,external_wp_i18n_namespaceObject.__)('Restrict editing'),
-              checked: !!lock.edit,
-              onChange: edit => setLock(prevLock => ({
-                ...prevLock,
-                edit
-              }))
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
-              className: "block-editor-block-lock-modal__lock-icon",
-              icon: lock.edit ? library_lock : library_unlock
-            })]
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
-            className: "block-editor-block-lock-modal__checklist-item",
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
-              __nextHasNoMarginBottom: true,
-              label: (0,external_wp_i18n_namespaceObject.__)('Disable movement'),
-              checked: lock.move,
-              onChange: move => setLock(prevLock => ({
-                ...prevLock,
-                move
-              }))
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
-              className: "block-editor-block-lock-modal__lock-icon",
-              icon: lock.move ? library_lock : library_unlock
-            })]
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
-            className: "block-editor-block-lock-modal__checklist-item",
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
-              __nextHasNoMarginBottom: true,
-              label: (0,external_wp_i18n_namespaceObject.__)('Prevent removal'),
-              checked: lock.remove,
-              onChange: remove => setLock(prevLock => ({
-                ...prevLock,
-                remove
-              }))
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
-              className: "block-editor-block-lock-modal__lock-icon",
-              icon: lock.remove ? library_lock : library_unlock
-            })]
-          })]
-        }), hasTemplateLock && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
-          __nextHasNoMarginBottom: true,
-          className: "block-editor-block-lock-modal__template-lock",
-          label: (0,external_wp_i18n_namespaceObject.__)('Apply to all blocks inside'),
-          checked: applyTemplateLock,
-          disabled: lock.move && !lock.remove,
-          onChange: () => setApplyTemplateLock(!applyTemplateLock)
-        })]
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-        className: "block-editor-block-lock-modal__actions",
-        justify: "flex-end",
-        expanded: false,
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            variant: "tertiary",
-            onClick: onClose,
-            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
-          })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            variant: "primary",
-            type: "submit",
-            children: (0,external_wp_i18n_namespaceObject.__)('Apply')
-          })
-        })]
-      })]
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-lock/menu-item.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-function BlockLockMenuItem({
-  clientId
-}) {
-  const {
-    canLock,
-    isLocked
-  } = useBlockLock(clientId);
-  const [isModalOpen, toggleModal] = (0,external_wp_element_namespaceObject.useReducer)(isActive => !isActive, false);
-  if (!canLock) {
-    return null;
-  }
-  const label = isLocked ? (0,external_wp_i18n_namespaceObject.__)('Unlock') : (0,external_wp_i18n_namespaceObject.__)('Lock');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-      icon: isLocked ? library_unlock : lock_outline,
-      onClick: toggleModal,
-      "aria-expanded": isModalOpen,
-      "aria-haspopup": "dialog",
-      children: label
-    }), isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockModal, {
-      clientId: clientId,
-      onClose: toggleModal
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-mode-toggle.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const block_mode_toggle_noop = () => {};
-function BlockModeToggle({
-  blockType,
-  mode,
-  onToggleMode,
-  small = false,
-  isCodeEditingEnabled = true
-}) {
-  if (!blockType || !(0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockType, 'html', true) || !isCodeEditingEnabled) {
-    return null;
-  }
-  const label = mode === 'visual' ? (0,external_wp_i18n_namespaceObject.__)('Edit as HTML') : (0,external_wp_i18n_namespaceObject.__)('Edit visually');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-    onClick: onToggleMode,
-    children: !small && label
-  });
-}
-/* harmony default export */ const block_mode_toggle = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, {
-  clientId
-}) => {
-  const {
-    getBlock,
-    getBlockMode,
-    getSettings
-  } = select(store);
-  const block = getBlock(clientId);
-  const isCodeEditingEnabled = getSettings().codeEditingEnabled;
-  return {
-    mode: getBlockMode(clientId),
-    blockType: block ? (0,external_wp_blocks_namespaceObject.getBlockType)(block.name) : null,
-    isCodeEditingEnabled
-  };
-}), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, {
-  onToggle = block_mode_toggle_noop,
-  clientId
-}) => ({
-  onToggleMode() {
-    dispatch(store).toggleBlockMode(clientId);
-    onToggle();
-  }
-}))])(BlockModeToggle));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-rename/use-block-rename.js
-/**
- * WordPress dependencies
- */
-
-function useBlockRename(name) {
-  return {
-    canRename: (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, 'renaming', true)
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-rename/is-empty-string.js
-function isEmptyString(testString) {
-  return testString?.trim()?.length === 0;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-rename/modal.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function BlockRenameModal({
-  blockName,
-  originalBlockName,
-  onClose,
-  onSave,
-  // Pattern Overrides is a WordPress-only feature but it also uses the Block Binding API.
-  // Ideally this should not be inside the block editor package, but we keep it here for simplicity.
-  hasOverridesWarning
-}) {
-  const [editedBlockName, setEditedBlockName] = (0,external_wp_element_namespaceObject.useState)(blockName);
-  const descriptionId = (0,external_wp_element_namespaceObject.useId)();
-  const nameHasChanged = editedBlockName !== blockName;
-  const nameIsOriginal = editedBlockName === originalBlockName;
-  const nameIsEmpty = isEmptyString(editedBlockName);
-  const isNameValid = nameHasChanged || nameIsOriginal;
-  const autoSelectInputText = event => event.target.select();
-  const handleSubmit = () => {
-    const message = nameIsOriginal || nameIsEmpty ? (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: new name/label for the block */
-    (0,external_wp_i18n_namespaceObject.__)('Block name reset to: "%s".'), editedBlockName) : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: new name/label for the block */
-    (0,external_wp_i18n_namespaceObject.__)('Block name changed to: "%s".'), editedBlockName);
-
-    // Must be assertive to immediately announce change.
-    (0,external_wp_a11y_namespaceObject.speak)(message, 'assertive');
-    onSave(editedBlockName);
-
-    // Immediate close avoids ability to hit save multiple times.
-    onClose();
-  };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
-    title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
-    onRequestClose: onClose,
-    overlayClassName: "block-editor-block-rename-modal",
-    focusOnMount: "firstContentElement",
-    aria: {
-      describedby: descriptionId
-    },
-    size: "small",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
-      onSubmit: e => {
-        e.preventDefault();
-        if (!isNameValid) {
-          return;
-        }
-        handleSubmit();
-      },
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-        id: descriptionId,
-        children: (0,external_wp_i18n_namespaceObject.__)('Enter a custom name for this block.')
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
-        spacing: "3",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
-          __nextHasNoMarginBottom: true,
-          __next40pxDefaultSize: true,
-          value: editedBlockName,
-          label: (0,external_wp_i18n_namespaceObject.__)('Block name'),
-          hideLabelFromVision: true,
-          help: hasOverridesWarning ? (0,external_wp_i18n_namespaceObject.__)('This block allows overrides. Changing the name can cause problems with content entered into instances of this pattern.') : undefined,
-          placeholder: originalBlockName,
-          onChange: setEditedBlockName,
-          onFocus: autoSelectInputText
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-          justify: "right",
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            __next40pxDefaultSize: true,
-            variant: "tertiary",
-            onClick: onClose,
-            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            __next40pxDefaultSize: true,
-            "aria-disabled": !isNameValid,
-            variant: "primary",
-            type: "submit",
-            children: (0,external_wp_i18n_namespaceObject.__)('Save')
-          })]
-        })]
-      })]
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-rename/rename-control.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-function BlockRenameControl({
-  clientId
-}) {
-  const [renamingBlock, setRenamingBlock] = (0,external_wp_element_namespaceObject.useState)(false);
-  const {
-    metadata
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockAttributes
-    } = select(store);
-    const _metadata = getBlockAttributes(clientId)?.metadata;
-    return {
-      metadata: _metadata
-    };
-  }, [clientId]);
-  const {
-    updateBlockAttributes
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const customName = metadata?.name;
-  const hasPatternOverrides = !!customName && !!metadata?.bindings && Object.values(metadata.bindings).some(binding => binding.source === 'core/pattern-overrides');
-  function onChange(newName) {
-    updateBlockAttributes([clientId], {
-      metadata: {
-        ...metadata,
-        name: newName
-      }
-    });
-  }
-  const blockInformation = useBlockDisplayInformation(clientId);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-      onClick: () => {
-        setRenamingBlock(true);
-      },
-      "aria-expanded": renamingBlock,
-      "aria-haspopup": "dialog",
-      children: (0,external_wp_i18n_namespaceObject.__)('Rename')
-    }), renamingBlock && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRenameModal, {
-      blockName: customName || '',
-      originalBlockName: blockInformation?.title,
-      hasOverridesWarning: hasPatternOverrides,
-      onClose: () => setRenamingBlock(false),
-      onSave: newName => {
-        // If the new value is the block's original name (e.g. `Group`)
-        // or it is an empty string then assume the intent is to reset
-        // the value. Therefore reset the metadata.
-        if (newName === blockInformation?.title || isEmptyString(newName)) {
-          newName = undefined;
-        }
-        onChange(newName);
-      }
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu-controls/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-const {
-  Fill,
-  Slot
-} = (0,external_wp_components_namespaceObject.createSlotFill)('BlockSettingsMenuControls');
-const BlockSettingsMenuControlsSlot = ({
-  fillProps,
-  clientIds = null
-}) => {
-  const {
-    selectedBlocks,
-    selectedClientIds,
-    isContentOnly
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockNamesByClientId,
-      getSelectedBlockClientIds,
-      getBlockEditingMode
-    } = select(store);
-    const ids = clientIds !== null ? clientIds : getSelectedBlockClientIds();
-    return {
-      selectedBlocks: getBlockNamesByClientId(ids),
-      selectedClientIds: ids,
-      isContentOnly: getBlockEditingMode(ids[0]) === 'contentOnly'
-    };
-  }, [clientIds]);
-  const {
-    canLock
-  } = useBlockLock(selectedClientIds[0]);
-  const {
-    canRename
-  } = useBlockRename(selectedBlocks[0]);
-  const showLockButton = selectedClientIds.length === 1 && canLock && !isContentOnly;
-  const showRenameButton = selectedClientIds.length === 1 && canRename && !isContentOnly;
-
-  // Check if current selection of blocks is Groupable or Ungroupable
-  // and pass this props down to ConvertToGroupButton.
-  const convertToGroupButtonProps = useConvertToGroupButtonProps(selectedClientIds);
-  const {
-    isGroupable,
-    isUngroupable
-  } = convertToGroupButtonProps;
-  const showConvertToGroupButton = isGroupable || isUngroupable;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Slot, {
-    fillProps: {
-      ...fillProps,
-      selectedBlocks,
-      selectedClientIds
-    },
-    children: fills => {
-      if (!fills?.length > 0 && !showConvertToGroupButton && !showLockButton) {
-        return null;
-      }
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
-        children: [showConvertToGroupButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConvertToGroupButton, {
-          ...convertToGroupButtonProps,
-          onClose: fillProps?.onClose
-        }), showLockButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockMenuItem, {
-          clientId: selectedClientIds[0]
-        }), showRenameButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRenameControl, {
-          clientId: selectedClientIds[0]
-        }), fills, fillProps?.canMove && !fillProps?.onlyBlock && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-          onClick: (0,external_wp_compose_namespaceObject.pipe)(fillProps?.onClose, fillProps?.onMoveTo),
-          children: (0,external_wp_i18n_namespaceObject.__)('Move to')
-        }), fillProps?.count === 1 && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_mode_toggle, {
-          clientId: fillProps?.firstBlockClientId,
-          onToggle: fillProps?.onClose
-        })]
-      });
-    }
-  });
-};
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md
- *
- * @param {Object} props Fill props.
- * @return {Element} Element.
- */
-function BlockSettingsMenuControls({
-  ...props
-}) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalStyleProvider, {
-    document: document,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Fill, {
-      ...props
-    })
-  });
-}
-BlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;
-/* harmony default export */ const block_settings_menu_controls = (BlockSettingsMenuControls);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/content-lock-ui.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-// The implementation of content locking is mainly in this file, although the mechanism
-// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect
-// at block-editor/src/components/block-list/index.js.
-// Besides the components on this file and the file referenced above the implementation
-// also includes artifacts on the store (actions, reducers, and selector).
-
-
-
-function ContentLockControlsPure({
-  clientId,
-  isSelected
-}) {
-  const {
-    templateLock,
-    isLockedByParent,
-    isEditingAsBlocks
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getContentLockingParent,
-      getTemplateLock,
-      getTemporarilyEditingAsBlocks
-    } = unlock(select(store));
-    return {
-      templateLock: getTemplateLock(clientId),
-      isLockedByParent: !!getContentLockingParent(clientId),
-      isEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId
-    };
-  }, [clientId]);
-  const {
-    stopEditingAsBlocks,
-    modifyContentLockBlock
-  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
-  const isContentLocked = !isLockedByParent && templateLock === 'contentOnly';
-  const stopEditingAsBlockCallback = (0,external_wp_element_namespaceObject.useCallback)(() => {
-    stopEditingAsBlocks(clientId);
-  }, [clientId, stopEditingAsBlocks]);
-  if (!isContentLocked && !isEditingAsBlocks) {
-    return null;
-  }
-  const showStopEditingAsBlocks = isEditingAsBlocks && !isContentLocked;
-  const showStartEditingAsBlocks = !isEditingAsBlocks && isContentLocked && isSelected;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [showStopEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_controls, {
-        group: "other",
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-          onClick: stopEditingAsBlockCallback,
-          children: (0,external_wp_i18n_namespaceObject.__)('Done')
-        })
-      })
-    }), showStartEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_controls, {
-      children: ({
-        selectedClientIds,
-        onClose
-      }) => selectedClientIds.length === 1 && selectedClientIds[0] === clientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-        onClick: () => {
-          modifyContentLockBlock(clientId);
-          onClose();
-        },
-        children: (0,external_wp_i18n_namespaceObject.__)('Modify')
-      })
-    })]
-  });
-}
-/* harmony default export */ const content_lock_ui = ({
-  edit: ContentLockControlsPure,
-  hasSupport() {
-    return true;
-  }
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/metadata.js
-/**
- * WordPress dependencies
- */
-
-const META_ATTRIBUTE_NAME = 'metadata';
-
-/**
- * Filters registered block settings, extending attributes to include `metadata`.
- *
- * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012
- *
- * @param {Object} blockTypeSettings Original block settings.
- * @return {Object} Filtered block settings.
- */
-function addMetaAttribute(blockTypeSettings) {
-  // Allow blocks to specify their own attribute definition with default values if needed.
-  if (blockTypeSettings?.attributes?.[META_ATTRIBUTE_NAME]?.type) {
-    return blockTypeSettings;
-  }
-  blockTypeSettings.attributes = {
-    ...blockTypeSettings.attributes,
-    [META_ATTRIBUTE_NAME]: {
-      type: 'object'
-    }
-  };
-  return blockTypeSettings;
-}
-(0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/metadata/addMetaAttribute', addMetaAttribute);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/block-default.js
+    rowEnd
+  });
+}
+function getGridItemRect(gridItemElement) {
+  return getGridRect(gridItemElement.parentElement, new window.DOMRect(gridItemElement.offsetLeft, gridItemElement.offsetTop, gridItemElement.offsetWidth, gridItemElement.offsetHeight));
+}
+function getGridInfo(gridElement) {
+  const gridTemplateColumns = utils_getComputedCSS(gridElement, 'grid-template-columns');
+  const gridTemplateRows = utils_getComputedCSS(gridElement, 'grid-template-rows');
+  const borderTopWidth = utils_getComputedCSS(gridElement, 'border-top-width');
+  const borderRightWidth = utils_getComputedCSS(gridElement, 'border-right-width');
+  const borderBottomWidth = utils_getComputedCSS(gridElement, 'border-bottom-width');
+  const borderLeftWidth = utils_getComputedCSS(gridElement, 'border-left-width');
+  const paddingTop = utils_getComputedCSS(gridElement, 'padding-top');
+  const paddingRight = utils_getComputedCSS(gridElement, 'padding-right');
+  const paddingBottom = utils_getComputedCSS(gridElement, 'padding-bottom');
+  const paddingLeft = utils_getComputedCSS(gridElement, 'padding-left');
+  const numColumns = gridTemplateColumns.split(' ').length;
+  const numRows = gridTemplateRows.split(' ').length;
+  const numItems = numColumns * numRows;
+  return {
+    numColumns,
+    numRows,
+    numItems,
+    currentColor: utils_getComputedCSS(gridElement, 'color'),
+    style: {
+      gridTemplateColumns,
+      gridTemplateRows,
+      gap: utils_getComputedCSS(gridElement, 'gap'),
+      inset: `
+				calc(${paddingTop} + ${borderTopWidth})
+				calc(${paddingRight} + ${borderRightWidth})
+				calc(${paddingBottom} + ${borderBottomWidth})
+				calc(${paddingLeft} + ${borderLeftWidth})
+			`
+    }
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/tips.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+const globalTips = [(0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('While writing, you can press <kbd>/</kbd> to quickly insert new blocks.'), {
+  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
+}), (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Indent a list by pressing <kbd>space</kbd> at the beginning of a line.'), {
+  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
+}), (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Outdent a list by pressing <kbd>backspace</kbd> at the beginning of a line.'), {
+  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
+}), (0,external_wp_i18n_namespaceObject.__)('Drag files into the editor to automatically insert media blocks.'), (0,external_wp_i18n_namespaceObject.__)("Change a block's type by pressing the block icon on the toolbar.")];
+function Tips() {
+  const [randomIndex] = (0,external_wp_element_namespaceObject.useState)(
+  // Disable Reason: I'm not generating an HTML id.
+  // eslint-disable-next-line no-restricted-syntax
+  Math.floor(Math.random() * globalTips.length));
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tip, {
+    children: globalTips[randomIndex]
+  });
+}
+/* harmony default export */ const tips = (Tips);
+
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-right.js
+/**
+ * WordPress dependencies
+ */
+
+
+const chevronRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"
+  })
+});
+/* harmony default export */ const chevron_right = (chevronRight);
+
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-left.js
+/**
+ * WordPress dependencies
+ */
+
+
+const chevronLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"
+  })
+});
+/* harmony default export */ const chevron_left = (chevronLeft);
+
+;// ./node_modules/@wordpress/icons/build-module/library/block-default.js
 /**
  * WordPress dependencies
  */
@@ -36778,7 +37131,7 @@
 });
 /* harmony default export */ const block_default = (blockDefault);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-icon/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-icon/index.js
 /**
  * External dependencies
  */
@@ -36824,958 +37177,17 @@
  */
 /* harmony default export */ const block_icon = ((0,external_wp_element_namespaceObject.memo)(BlockIcon));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/block-hooks.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const block_hooks_EMPTY_OBJECT = {};
-function BlockHooksControlPure({
-  name,
-  clientId,
-  metadata: {
-    ignoredHookedBlocks = []
-  } = {}
-}) {
-  const blockTypes = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blocks_namespaceObject.store).getBlockTypes(), []);
-
-  // A hooked block added via a filter will not be exposed through a block
-  // type's `blockHooks` property; however, if the containing layout has been
-  // modified, it will be present in the anchor block's `ignoredHookedBlocks`
-  // metadata.
-  const hookedBlocksForCurrentBlock = (0,external_wp_element_namespaceObject.useMemo)(() => blockTypes?.filter(({
-    name: blockName,
-    blockHooks
-  }) => blockHooks && name in blockHooks || ignoredHookedBlocks.includes(blockName)), [blockTypes, name, ignoredHookedBlocks]);
-  const {
-    blockIndex,
-    rootClientId,
-    innerBlocksLength
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlocks,
-      getBlockIndex,
-      getBlockRootClientId
-    } = select(store);
-    return {
-      blockIndex: getBlockIndex(clientId),
-      innerBlocksLength: getBlocks(clientId)?.length,
-      rootClientId: getBlockRootClientId(clientId)
-    };
-  }, [clientId]);
-  const hookedBlockClientIds = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlocks,
-      getGlobalBlockCount
-    } = select(store);
-    const _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce((clientIds, block) => {
-      // If the block doesn't exist anywhere in the block tree,
-      // we know that we have to set the toggle to disabled.
-      if (getGlobalBlockCount(block.name) === 0) {
-        return clientIds;
-      }
-      const relativePosition = block?.blockHooks?.[name];
-      let candidates;
-      switch (relativePosition) {
-        case 'before':
-        case 'after':
-          // Any of the current block's siblings (with the right block type) qualifies
-          // as a hooked block (inserted `before` or `after` the current one), as the block
-          // might've been automatically inserted and then moved around a bit by the user.
-          candidates = getBlocks(rootClientId);
-          break;
-        case 'first_child':
-        case 'last_child':
-          // Any of the current block's child blocks (with the right block type) qualifies
-          // as a hooked first or last child block, as the block might've been automatically
-          // inserted and then moved around a bit by the user.
-          candidates = getBlocks(clientId);
-          break;
-        case undefined:
-          // If we haven't found a blockHooks field with a relative position for the hooked
-          // block, it means that it was added by a filter. In this case, we look for the block
-          // both among the current block's siblings and its children.
-          candidates = [...getBlocks(rootClientId), ...getBlocks(clientId)];
-          break;
-      }
-      const hookedBlock = candidates?.find(candidate => candidate.name === block.name);
-
-      // If the block exists in the designated location, we consider it hooked
-      // and show the toggle as enabled.
-      if (hookedBlock) {
-        return {
-          ...clientIds,
-          [block.name]: hookedBlock.clientId
-        };
-      }
-
-      // If no hooked block was found in any of its designated locations,
-      // we set the toggle to disabled.
-      return clientIds;
-    }, {});
-    if (Object.values(_hookedBlockClientIds).length > 0) {
-      return _hookedBlockClientIds;
-    }
-    return block_hooks_EMPTY_OBJECT;
-  }, [hookedBlocksForCurrentBlock, name, clientId, rootClientId]);
-  const {
-    insertBlock,
-    removeBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  if (!hookedBlocksForCurrentBlock.length) {
-    return null;
-  }
-
-  // Group by block namespace (i.e. prefix before the slash).
-  const groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce((groups, block) => {
-    const [namespace] = block.name.split('/');
-    if (!groups[namespace]) {
-      groups[namespace] = [];
-    }
-    groups[namespace].push(block);
-    return groups;
-  }, {});
-  const insertBlockIntoDesignatedLocation = (block, relativePosition) => {
-    switch (relativePosition) {
-      case 'before':
-      case 'after':
-        insertBlock(block, relativePosition === 'after' ? blockIndex + 1 : blockIndex, rootClientId,
-        // Insert as a child of the current block's parent
-        false);
-        break;
-      case 'first_child':
-      case 'last_child':
-        insertBlock(block,
-        // TODO: It'd be great if insertBlock() would accept negative indices for insertion.
-        relativePosition === 'first_child' ? 0 : innerBlocksLength, clientId,
-        // Insert as a child of the current block.
-        false);
-        break;
-      case undefined:
-        // If we do not know the relative position, it is because the block was
-        // added via a filter. In this case, we default to inserting it after the
-        // current block.
-        insertBlock(block, blockIndex + 1, rootClientId,
-        // Insert as a child of the current block's parent
-        false);
-        break;
-    }
-  };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls, {
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.PanelBody, {
-      className: "block-editor-hooks__block-hooks",
-      title: (0,external_wp_i18n_namespaceObject.__)('Plugins'),
-      initialOpen: true,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-        className: "block-editor-hooks__block-hooks-helptext",
-        children: (0,external_wp_i18n_namespaceObject.__)('Manage the inclusion of blocks added automatically by plugins.')
-      }), Object.keys(groupedHookedBlocks).map(vendor => {
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_element_namespaceObject.Fragment, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
-            children: vendor
-          }), groupedHookedBlocks[vendor].map(block => {
-            const checked = (block.name in hookedBlockClientIds);
-            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
-              checked: checked,
-              label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-                justify: "flex-start",
-                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-                  icon: block.icon
-                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-                  children: block.title
-                })]
-              }),
-              onChange: () => {
-                if (!checked) {
-                  // Create and insert block.
-                  const relativePosition = block.blockHooks[name];
-                  insertBlockIntoDesignatedLocation((0,external_wp_blocks_namespaceObject.createBlock)(block.name), relativePosition);
-                  return;
-                }
-
-                // Remove block.
-                removeBlock(hookedBlockClientIds[block.name], false);
-              }
-            }, block.title);
-          })]
-        }, vendor);
-      })]
-    })
-  });
-}
-/* harmony default export */ const block_hooks = ({
-  edit: BlockHooksControlPure,
-  attributeKeys: ['metadata'],
-  hasSupport() {
-    return true;
-  }
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-bindings-attributes.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */
-/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */
-
-/**
- * Given a binding of block attributes, returns a higher order component that
- * overrides its `attributes` and `setAttributes` props to sync any changes needed.
- *
- * @return {WPHigherOrderComponent} Higher-order component.
- */
-
-
-const BLOCK_BINDINGS_ALLOWED_BLOCKS = {
-  'core/paragraph': ['content'],
-  'core/heading': ['content'],
-  'core/image': ['id', 'url', 'title', 'alt'],
-  'core/button': ['url', 'text', 'linkTarget', 'rel']
-};
-const DEFAULT_ATTRIBUTE = '__default';
-
-/**
- * Returns the bindings with the `__default` binding for pattern overrides
- * replaced with the full-set of supported attributes. e.g.:
- *
- * bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`
- * bindings returned: `{ content: { source: 'core/pattern-overrides' } }`
- *
- * @param {string} blockName The block name (e.g. 'core/paragraph').
- * @param {Object} bindings  A block's bindings from the metadata attribute.
- *
- * @return {Object} The bindings with default replaced for pattern overrides.
- */
-function replacePatternOverrideDefaultBindings(blockName, bindings) {
-  // The `__default` binding currently only works for pattern overrides.
-  if (bindings?.[DEFAULT_ATTRIBUTE]?.source === 'core/pattern-overrides') {
-    const supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName];
-    const bindingsWithDefaults = {};
-    for (const attributeName of supportedAttributes) {
-      // If the block has mixed binding sources, retain any non pattern override bindings.
-      const bindingSource = bindings[attributeName] ? bindings[attributeName] : {
-        source: 'core/pattern-overrides'
-      };
-      bindingsWithDefaults[attributeName] = bindingSource;
-    }
-    return bindingsWithDefaults;
-  }
-  return bindings;
-}
-
-/**
- * Based on the given block name,
- * check if it is possible to bind the block.
- *
- * @param {string} blockName - The block name.
- * @return {boolean} Whether it is possible to bind the block to sources.
- */
-function canBindBlock(blockName) {
-  return blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;
-}
-
-/**
- * Based on the given block name and attribute name,
- * check if it is possible to bind the block attribute.
- *
- * @param {string} blockName     - The block name.
- * @param {string} attributeName - The attribute name.
- * @return {boolean} Whether it is possible to bind the block attribute.
- */
-function canBindAttribute(blockName, attributeName) {
-  return canBindBlock(blockName) && BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName].includes(attributeName);
-}
-const withBlockBindingSupport = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => props => {
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const sources = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(external_wp_blocks_namespaceObject.store)).getAllBlockBindingsSources());
-  const {
-    name,
-    clientId,
-    context
-  } = props;
-  const hasParentPattern = !!props.context['pattern/overrides'];
-  const hasPatternOverridesDefaultBinding = props.attributes.metadata?.bindings?.[DEFAULT_ATTRIBUTE]?.source === 'core/pattern-overrides';
-  const bindings = (0,external_wp_element_namespaceObject.useMemo)(() => replacePatternOverrideDefaultBindings(name, props.attributes.metadata?.bindings), [props.attributes.metadata?.bindings, name]);
-  const boundAttributes = (0,external_wp_data_namespaceObject.useSelect)(() => {
-    if (!bindings) {
-      return;
-    }
-    const attributes = {};
-    for (const [attributeName, boundAttribute] of Object.entries(bindings)) {
-      const source = sources[boundAttribute.source];
-      if (!source?.getValue || !canBindAttribute(name, attributeName)) {
-        continue;
-      }
-      const args = {
-        registry,
-        context,
-        clientId,
-        attributeName,
-        args: boundAttribute.args
-      };
-      attributes[attributeName] = source.getValue(args);
-      if (attributes[attributeName] === undefined) {
-        if (attributeName === 'url') {
-          attributes[attributeName] = null;
-        } else {
-          attributes[attributeName] = source.getPlaceholder?.(args);
-        }
-      }
-    }
-    return attributes;
-  }, [bindings, name, clientId, context, registry, sources]);
-  const {
-    setAttributes
-  } = props;
-  const _setAttributes = (0,external_wp_element_namespaceObject.useCallback)(nextAttributes => {
-    registry.batch(() => {
-      if (!bindings) {
-        setAttributes(nextAttributes);
-        return;
-      }
-      const keptAttributes = {
-        ...nextAttributes
-      };
-      const updatesBySource = new Map();
-
-      // Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.
-      for (const [attributeName, newValue] of Object.entries(keptAttributes)) {
-        if (!bindings[attributeName] || !canBindAttribute(name, attributeName)) {
-          continue;
-        }
-        const binding = bindings[attributeName];
-        const source = sources[binding?.source];
-        if (!source?.setValue && !source?.setValues) {
-          continue;
-        }
-        updatesBySource.set(source, {
-          ...updatesBySource.get(source),
-          [attributeName]: newValue
-        });
-        delete keptAttributes[attributeName];
-      }
-      if (updatesBySource.size) {
-        for (const [source, attributes] of updatesBySource) {
-          if (source.setValues) {
-            source.setValues({
-              registry,
-              context,
-              clientId,
-              attributes
-            });
-          } else {
-            for (const [attributeName, value] of Object.entries(attributes)) {
-              const binding = bindings[attributeName];
-              source.setValue({
-                registry,
-                context,
-                clientId,
-                attributeName,
-                args: binding.args,
-                value
-              });
-            }
-          }
-        }
-      }
-      if (
-      // Don't update non-connected attributes if the block is using pattern overrides
-      // and the editing is happening while overriding the pattern (not editing the original).
-      !(hasPatternOverridesDefaultBinding && hasParentPattern) && Object.keys(keptAttributes).length) {
-        // Don't update caption and href until they are supported.
-        if (hasPatternOverridesDefaultBinding) {
-          delete keptAttributes?.caption;
-          delete keptAttributes?.href;
-        }
-        setAttributes(keptAttributes);
-      }
-    });
-  }, [registry, bindings, name, clientId, context, setAttributes, sources, hasPatternOverridesDefaultBinding, hasParentPattern]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEdit, {
-      ...props,
-      attributes: {
-        ...props.attributes,
-        ...boundAttributes
-      },
-      setAttributes: _setAttributes
-    })
-  });
-}, 'withBlockBindingSupport');
-
-/**
- * Filters a registered block's settings to enhance a block's `edit` component
- * to upgrade bound attributes.
- *
- * @param {WPBlockSettings} settings - Registered block settings.
- * @param {string}          name     - Block name.
- * @return {WPBlockSettings} Filtered block settings.
- */
-function shimAttributeSource(settings, name) {
-  if (!canBindBlock(name)) {
-    return settings;
-  }
-  return {
-    ...settings,
-    edit: withBlockBindingSupport(settings.edit)
-  };
-}
-(0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/editor/custom-sources-backwards-compatibility/shim-attribute-source', shimAttributeSource);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/block-bindings.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-const BlockBindingsPanel = ({
-  name,
-  metadata
-}) => {
-  const {
-    bindings
-  } = metadata || {};
-  const {
-    sources
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const _sources = unlock(select(external_wp_blocks_namespaceObject.store)).getAllBlockBindingsSources();
-    return {
-      sources: _sources
-    };
-  }, []);
-  if (!bindings) {
-    return null;
-  }
-
-  // Don't show not allowed attributes.
-  // Don't show the bindings connected to pattern overrides in the inspectors panel.
-  // TODO: Explore if this should be abstracted to let other sources decide.
-  const filteredBindings = {
-    ...bindings
-  };
-  Object.keys(filteredBindings).forEach(key => {
-    if (!canBindAttribute(name, key) || filteredBindings[key].source === 'core/pattern-overrides') {
-      delete filteredBindings[key];
-    }
-  });
-  if (Object.keys(filteredBindings).length === 0) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls, {
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
-      title: (0,external_wp_i18n_namespaceObject.__)('Attributes'),
-      className: "components-panel__block-bindings-panel",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.BaseControl, {
-        help: (0,external_wp_i18n_namespaceObject.__)('Attributes connected to various sources.'),
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
-          isBordered: true,
-          isSeparated: true,
-          size: "large",
-          children: Object.keys(filteredBindings).map(key => {
-            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
-              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-                  children: key
-                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-                  className: "components-item__block-bindings-source",
-                  children: sources[filteredBindings[key].source] ? sources[filteredBindings[key].source].label : filteredBindings[key].source
-                })]
-              })
-            }, key);
-          })
-        })
-      })
-    })
-  });
-};
-/* harmony default export */ const block_bindings = ({
-  edit: BlockBindingsPanel,
-  attributeKeys: ['metadata'],
-  hasSupport() {
-    return true;
-  }
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/block-renaming.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.
- *
- * @param {Object} settings Original block settings.
- *
- * @return {Object} Filtered block settings.
- */
-function addLabelCallback(settings) {
-  // If blocks provide their own label callback, do not override it.
-  if (settings.__experimentalLabel) {
-    return settings;
-  }
-  const supportsBlockNaming = (0,external_wp_blocks_namespaceObject.hasBlockSupport)(settings, 'renaming', true // default value
-  );
-
-  // Check whether block metadata is supported before using it.
-  if (supportsBlockNaming) {
-    settings.__experimentalLabel = (attributes, {
-      context
-    }) => {
-      const {
-        metadata
-      } = attributes;
-
-      // In the list view, use the block's name attribute as the label.
-      if (context === 'list-view' && metadata?.name) {
-        return metadata.name;
-      }
-    };
-  }
-  return settings;
-}
-(0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/metadata/addLabelCallback', addLabelCallback);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-border-props.js
-/**
- * Internal dependencies
- */
-
-
-
-
-// This utility is intended to assist where the serialization of the border
-// block support is being skipped for a block but the border related CSS classes
-// & styles still need to be generated so they can be applied to inner elements.
-
-/**
- * Provides the CSS class names and inline styles for a block's border support
- * attributes.
- *
- * @param {Object} attributes Block attributes.
- * @return {Object} Border block support derived CSS classes & styles.
- */
-function getBorderClassesAndStyles(attributes) {
-  const border = attributes.style?.border || {};
-  const className = getBorderClasses(attributes);
-  return {
-    className: className || undefined,
-    style: getInlineStyles({
-      border
-    })
-  };
-}
-
-/**
- * Derives the border related props for a block from its border block support
- * attributes.
- *
- * Inline styles are forced for named colors to ensure these selections are
- * reflected when themes do not load their color stylesheets in the editor.
- *
- * @param {Object} attributes Block attributes.
- *
- * @return {Object} ClassName & style props from border block support.
- */
-function useBorderProps(attributes) {
-  const {
-    colors
-  } = useMultipleOriginColorsAndGradients();
-  const borderProps = getBorderClassesAndStyles(attributes);
-  const {
-    borderColor
-  } = attributes;
-
-  // Force inline styles to apply named border colors when themes do not load
-  // their color stylesheets in the editor.
-  if (borderColor) {
-    const borderColorObject = getMultiOriginColor({
-      colors,
-      namedColor: borderColor
-    });
-    borderProps.style.borderColor = borderColorObject.color;
-  }
-  return borderProps;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-shadow-props.js
-/**
- * Internal dependencies
- */
-
-
-// This utility is intended to assist where the serialization of the shadow
-// block support is being skipped for a block but the shadow related CSS classes
-// & styles still need to be generated so they can be applied to inner elements.
-
-/**
- * Provides the CSS class names and inline styles for a block's shadow support
- * attributes.
- *
- * @param {Object} attributes Block attributes.
- * @return {Object} Shadow block support derived CSS classes & styles.
- */
-function getShadowClassesAndStyles(attributes) {
-  const shadow = attributes.style?.shadow || '';
-  return {
-    style: getInlineStyles({
-      shadow
-    })
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-color-props.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-// The code in this file has largely been lifted from the color block support
-// hook.
-//
-// This utility is intended to assist where the serialization of the colors
-// block support is being skipped for a block but the color related CSS classes
-// & styles still need to be generated so they can be applied to inner elements.
-
-/**
- * Provides the CSS class names and inline styles for a block's color support
- * attributes.
- *
- * @param {Object} attributes Block attributes.
- *
- * @return {Object} Color block support derived CSS classes & styles.
- */
-function getColorClassesAndStyles(attributes) {
-  const {
-    backgroundColor,
-    textColor,
-    gradient,
-    style
-  } = attributes;
-
-  // Collect color CSS classes.
-  const backgroundClass = getColorClassName('background-color', backgroundColor);
-  const textClass = getColorClassName('color', textColor);
-  const gradientClass = __experimentalGetGradientClass(gradient);
-  const hasGradient = gradientClass || style?.color?.gradient;
-
-  // Determine color CSS class name list.
-  const className = dist_clsx(textClass, gradientClass, {
-    // Don't apply the background class if there's a gradient.
-    [backgroundClass]: !hasGradient && !!backgroundClass,
-    'has-text-color': textColor || style?.color?.text,
-    'has-background': backgroundColor || style?.color?.background || gradient || style?.color?.gradient,
-    'has-link-color': style?.elements?.link?.color
-  });
-
-  // Collect inline styles for colors.
-  const colorStyles = style?.color || {};
-  const styleProp = getInlineStyles({
-    color: colorStyles
-  });
-  return {
-    className: className || undefined,
-    style: styleProp
-  };
-}
-
-/**
- * Determines the color related props for a block derived from its color block
- * support attributes.
- *
- * Inline styles are forced for named colors to ensure these selections are
- * reflected when themes do not load their color stylesheets in the editor.
- *
- * @param {Object} attributes Block attributes.
- *
- * @return {Object} ClassName & style props from colors block support.
- */
-function useColorProps(attributes) {
-  const {
-    backgroundColor,
-    textColor,
-    gradient
-  } = attributes;
-  const [userPalette, themePalette, defaultPalette, userGradients, themeGradients, defaultGradients] = use_settings_useSettings('color.palette.custom', 'color.palette.theme', 'color.palette.default', 'color.gradients.custom', 'color.gradients.theme', 'color.gradients.default');
-  const colors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userPalette || []), ...(themePalette || []), ...(defaultPalette || [])], [userPalette, themePalette, defaultPalette]);
-  const gradients = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userGradients || []), ...(themeGradients || []), ...(defaultGradients || [])], [userGradients, themeGradients, defaultGradients]);
-  const colorProps = getColorClassesAndStyles(attributes);
-
-  // Force inline styles to apply colors when themes do not load their color
-  // stylesheets in the editor.
-  if (backgroundColor) {
-    const backgroundColorObject = getColorObjectByAttributeValues(colors, backgroundColor);
-    colorProps.style.backgroundColor = backgroundColorObject.color;
-  }
-  if (gradient) {
-    colorProps.style.background = getGradientValueBySlug(gradients, gradient);
-  }
-  if (textColor) {
-    const textColorObject = getColorObjectByAttributeValues(colors, textColor);
-    colorProps.style.color = textColorObject.color;
-  }
-  return colorProps;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-spacing-props.js
-/**
- * Internal dependencies
- */
-
-
-// This utility is intended to assist where the serialization of the spacing
-// block support is being skipped for a block but the spacing related CSS
-// styles still need to be generated so they can be applied to inner elements.
-
-/**
- * Provides the CSS class names and inline styles for a block's spacing support
- * attributes.
- *
- * @param {Object} attributes Block attributes.
- *
- * @return {Object} Spacing block support derived CSS classes & styles.
- */
-function getSpacingClassesAndStyles(attributes) {
-  const {
-    style
-  } = attributes;
-
-  // Collect inline styles for spacing.
-  const spacingStyles = style?.spacing || {};
-  const styleProp = getInlineStyles({
-    spacing: spacingStyles
-  });
-  return {
-    style: styleProp
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-typography-props.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const {
-  kebabCase: use_typography_props_kebabCase
-} = unlock(external_wp_components_namespaceObject.privateApis);
-
-/*
- * This utility is intended to assist where the serialization of the typography
- * block support is being skipped for a block but the typography related CSS
- * styles still need to be generated so they can be applied to inner elements.
- */
-/**
- * Provides the CSS class names and inline styles for a block's typography support
- * attributes.
- *
- * @param {Object}         attributes Block attributes.
- * @param {Object|boolean} settings   Merged theme.json settings
- *
- * @return {Object} Typography block support derived CSS classes & styles.
- */
-function getTypographyClassesAndStyles(attributes, settings) {
-  let typographyStyles = attributes?.style?.typography || {};
-  typographyStyles = {
-    ...typographyStyles,
-    fontSize: getTypographyFontSizeValue({
-      size: attributes?.style?.typography?.fontSize
-    }, settings)
-  };
-  const style = getInlineStyles({
-    typography: typographyStyles
-  });
-  const fontFamilyClassName = !!attributes?.fontFamily ? `has-${use_typography_props_kebabCase(attributes.fontFamily)}-font-family` : '';
-  const textAlignClassName = !!attributes?.style?.typography?.textAlign ? `has-text-align-${attributes?.style?.typography?.textAlign}` : '';
-  const className = dist_clsx(fontFamilyClassName, textAlignClassName, getFontSizeClass(attributes?.fontSize));
-  return {
-    className,
-    style
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-cached-truthy.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Keeps an up-to-date copy of the passed value and returns it. If value becomes falsy, it will return the last truthy copy.
- *
- * @param {any} value
- * @return {any} value
- */
-function useCachedTruthy(value) {
-  const [cachedValue, setCachedValue] = (0,external_wp_element_namespaceObject.useState)(value);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (value) {
-      setCachedValue(value);
-    }
-  }, [value]);
-  return cachedValue;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/use-zoom-out.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * A hook used to set the editor mode to zoomed out mode, invoking the hook sets the mode.
- *
- * @param {boolean} zoomOut If we should enter into zoomOut mode or not
- */
-function useZoomOut(zoomOut = true) {
-  const {
-    __unstableSetEditorMode
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const {
-    __unstableGetEditorMode
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const originalEditingMode = (0,external_wp_element_namespaceObject.useRef)(null);
-  const mode = __unstableGetEditorMode();
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    // Only set this on mount so we know what to return to when we unmount.
-    if (!originalEditingMode.current) {
-      originalEditingMode.current = mode;
-    }
-    return () => {
-      // We need to use  __unstableGetEditorMode() here and not `mode`, as mode may not update on unmount
-      if (__unstableGetEditorMode() === 'zoom-out' && __unstableGetEditorMode() !== originalEditingMode.current) {
-        __unstableSetEditorMode(originalEditingMode.current);
-      }
-    };
-  }, []);
-
-  // The effect opens the zoom-out view if we want it open and it's not currently in zoom-out mode.
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (zoomOut && mode !== 'zoom-out') {
-      __unstableSetEditorMode('zoom-out');
-    } else if (!zoomOut && __unstableGetEditorMode() === 'zoom-out' && originalEditingMode.current !== mode) {
-      __unstableSetEditorMode(originalEditingMode.current);
-    }
-  }, [__unstableSetEditorMode, zoomOut, mode]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/index.js
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-createBlockEditFilter([block_bindings, align, text_align, hooks_anchor, custom_class_name, style, duotone, position, layout, content_lock_ui, block_hooks, layout_child].filter(Boolean));
-createBlockListBlockFilter([align, text_align, background, style, color, dimensions, duotone, font_family, font_size, border, position, block_style_variation, layout_child]);
-createBlockSaveFilter([align, text_align, hooks_anchor, aria_label, custom_class_name, border, color, style, font_family, font_size]);
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/with-colors.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-card/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
 
 
 
@@ -37788,1273 +37200,2000 @@
 
 
 const {
-  kebabCase: with_colors_kebabCase
+  Badge
 } = unlock(external_wp_components_namespaceObject.privateApis);
 
 /**
- * Capitalizes the first letter in a string.
- *
- * @param {string} str The string whose first letter the function will capitalize.
- *
- * @return {string} Capitalized string.
- */
-const upperFirst = ([firstLetter, ...rest]) => firstLetter.toUpperCase() + rest.join('');
-
-/**
- * Higher order component factory for injecting the `colorsArray` argument as
- * the colors prop in the `withCustomColors` HOC.
- *
- * @param {Array} colorsArray An array of color objects.
- *
- * @return {Function} The higher order component.
- */
-const withCustomColorPalette = colorsArray => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-  ...props,
-  colors: colorsArray
-}), 'withCustomColorPalette');
-
-/**
- * Higher order component factory for injecting the editor colors as the
- * `colors` prop in the `withColors` HOC.
- *
- * @return {Function} The higher order component.
- */
-const withEditorColorPalette = () => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => {
-  const [userPalette, themePalette, defaultPalette] = use_settings_useSettings('color.palette.custom', 'color.palette.theme', 'color.palette.default');
-  const allColors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userPalette || []), ...(themePalette || []), ...(defaultPalette || [])], [userPalette, themePalette, defaultPalette]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-    ...props,
-    colors: allColors
-  });
-}, 'withEditorColorPalette');
-
-/**
- * Helper function used with `createHigherOrderComponent` to create
- * higher order components for managing color logic.
- *
- * @param {Array}    colorTypes       An array of color types (e.g. 'backgroundColor, borderColor).
- * @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.
- *
- * @return {Component} The component that can be used as a HOC.
- */
-function createColorHOC(colorTypes, withColorPalette) {
-  const colorMap = colorTypes.reduce((colorObject, colorType) => {
-    return {
-      ...colorObject,
-      ...(typeof colorType === 'string' ? {
-        [colorType]: with_colors_kebabCase(colorType)
-      } : colorType)
-    };
-  }, {});
-  return (0,external_wp_compose_namespaceObject.compose)([withColorPalette, WrappedComponent => {
-    return class extends external_wp_element_namespaceObject.Component {
-      constructor(props) {
-        super(props);
-        this.setters = this.createSetters();
-        this.colorUtils = {
-          getMostReadableColor: this.getMostReadableColor.bind(this)
-        };
-        this.state = {};
-      }
-      getMostReadableColor(colorValue) {
-        const {
-          colors
-        } = this.props;
-        return getMostReadableColor(colors, colorValue);
-      }
-      createSetters() {
-        return Object.keys(colorMap).reduce((settersAccumulator, colorAttributeName) => {
-          const upperFirstColorAttributeName = upperFirst(colorAttributeName);
-          const customColorAttributeName = `custom${upperFirstColorAttributeName}`;
-          settersAccumulator[`set${upperFirstColorAttributeName}`] = this.createSetColor(colorAttributeName, customColorAttributeName);
-          return settersAccumulator;
-        }, {});
-      }
-      createSetColor(colorAttributeName, customColorAttributeName) {
-        return colorValue => {
-          const colorObject = getColorObjectByColorValue(this.props.colors, colorValue);
-          this.props.setAttributes({
-            [colorAttributeName]: colorObject && colorObject.slug ? colorObject.slug : undefined,
-            [customColorAttributeName]: colorObject && colorObject.slug ? undefined : colorValue
-          });
-        };
-      }
-      static getDerivedStateFromProps({
-        attributes,
-        colors
-      }, previousState) {
-        return Object.entries(colorMap).reduce((newState, [colorAttributeName, colorContext]) => {
-          const colorObject = getColorObjectByAttributeValues(colors, attributes[colorAttributeName], attributes[`custom${upperFirst(colorAttributeName)}`]);
-          const previousColorObject = previousState[colorAttributeName];
-          const previousColor = previousColorObject?.color;
-          /**
-           * The "and previousColorObject" condition checks that a previous color object was already computed.
-           * At the start previousColorObject and colorValue are both equal to undefined
-           * bus as previousColorObject does not exist we should compute the object.
-           */
-          if (previousColor === colorObject.color && previousColorObject) {
-            newState[colorAttributeName] = previousColorObject;
-          } else {
-            newState[colorAttributeName] = {
-              ...colorObject,
-              class: getColorClassName(colorContext, colorObject.slug)
-            };
-          }
-          return newState;
-        }, {});
-      }
-      render() {
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-          ...this.props,
-          colors: undefined,
-          ...this.state,
-          ...this.setters,
-          colorUtils: this.colorUtils
-        });
-      }
-    };
-  }]);
-}
-
-/**
- * A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic
- * for class generation color value, retrieval and color attribute setting.
- *
- * Use this higher-order component to work with a custom set of colors.
- *
- * @example
- *
- * ```jsx
- * const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];
- * const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );
- * // ...
- * export default compose(
- *     withCustomColors( 'backgroundColor', 'borderColor' ),
- *     MyColorfulComponent,
- * );
- * ```
- *
- * @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).
- *
- * @return {Function} Higher-order component.
- */
-function createCustomColorsHOC(colorsArray) {
-  return (...colorTypes) => {
-    const withColorPalette = withCustomColorPalette(colorsArray);
-    return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(createColorHOC(colorTypes, withColorPalette), 'withCustomColors');
-  };
-}
-
-/**
- * A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.
- *
- * For use with the default editor/theme color palette.
+ * A card component that displays block information including title, icon, and description.
+ * Can be used to show block metadata and navigation controls for parent blocks.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-card/README.md
  *
  * @example
- *
  * ```jsx
- * export default compose(
- *     withColors( 'backgroundColor', { textColor: 'color' } ),
- *     MyColorfulComponent,
- * );
+ * function Example() {
+ *   return (
+ *     <BlockCard
+ *       title="My Block"
+ *       icon="smiley"
+ *       description="A simple block example"
+ *       name="Custom Block"
+ *     />
+ *   );
+ * }
  * ```
  *
- * @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,
- *                                        it should contain the color attribute name as key and the color context as value.
- *                                        If the argument is a string the value should be the color attribute name,
- *                                        the color context is computed by applying a kebab case transform to the value.
- *                                        Color context represents the context/place where the color is going to be used.
- *                                        The class name of the color is generated using 'has' followed by the color name
- *                                        and ending with the color context all in kebab case e.g: has-green-background-color.
- *
- * @return {Function} Higher-order component.
- */
-function withColors(...colorTypes) {
-  const withColorPalette = withEditorColorPalette();
-  return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(createColorHOC(colorTypes, withColorPalette), 'withColors');
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/index.js
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/gradients/index.js
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/font-size-picker.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-function font_size_picker_FontSizePicker(props) {
-  const [fontSizes, customFontSize] = use_settings_useSettings('typography.fontSizes', 'typography.customFontSize');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FontSizePicker, {
-    ...props,
-    fontSizes: fontSizes,
-    disableCustomFontSizes: !customFontSize
-  });
-}
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/font-sizes/README.md
- */
-/* harmony default export */ const font_size_picker = (font_size_picker_FontSizePicker);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/with-font-sizes.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const DEFAULT_FONT_SIZES = [];
-
-/**
- * Capitalizes the first letter in a string.
- *
- * @param {string} str The string whose first letter the function will capitalize.
- *
- * @return {string} Capitalized string.
- */
-const with_font_sizes_upperFirst = ([firstLetter, ...rest]) => firstLetter.toUpperCase() + rest.join('');
-
-/**
- * Higher-order component, which handles font size logic for class generation,
- * font size value retrieval, and font size change handling.
- *
- * @param {...(Object|string)} fontSizeNames The arguments should all be strings.
- *                                           Each string contains the font size
- *                                           attribute name e.g: 'fontSize'.
- *
- * @return {Function} Higher-order component.
- */
-/* harmony default export */ const with_font_sizes = ((...fontSizeNames) => {
-  /*
-   * Computes an object whose key is the font size attribute name as passed in the array,
-   * and the value is the custom font size attribute name.
-   * Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.
-   */
-  const fontSizeAttributeNames = fontSizeNames.reduce((fontSizeAttributeNamesAccumulator, fontSizeAttributeName) => {
-    fontSizeAttributeNamesAccumulator[fontSizeAttributeName] = `custom${with_font_sizes_upperFirst(fontSizeAttributeName)}`;
-    return fontSizeAttributeNamesAccumulator;
-  }, {});
-  return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => {
-    const [fontSizes] = use_settings_useSettings('typography.fontSizes');
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-      ...props,
-      fontSizes: fontSizes || DEFAULT_FONT_SIZES
-    });
-  }, 'withFontSizes'), WrappedComponent => {
-    return class extends external_wp_element_namespaceObject.Component {
-      constructor(props) {
-        super(props);
-        this.setters = this.createSetters();
-        this.state = {};
-      }
-      createSetters() {
-        return Object.entries(fontSizeAttributeNames).reduce((settersAccumulator, [fontSizeAttributeName, customFontSizeAttributeName]) => {
-          const upperFirstFontSizeAttributeName = with_font_sizes_upperFirst(fontSizeAttributeName);
-          settersAccumulator[`set${upperFirstFontSizeAttributeName}`] = this.createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName);
-          return settersAccumulator;
-        }, {});
-      }
-      createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName) {
-        return fontSizeValue => {
-          const fontSizeObject = this.props.fontSizes?.find(({
-            size
-          }) => size === Number(fontSizeValue));
-          this.props.setAttributes({
-            [fontSizeAttributeName]: fontSizeObject && fontSizeObject.slug ? fontSizeObject.slug : undefined,
-            [customFontSizeAttributeName]: fontSizeObject && fontSizeObject.slug ? undefined : fontSizeValue
-          });
-        };
-      }
-      static getDerivedStateFromProps({
-        attributes,
-        fontSizes
-      }, previousState) {
-        const didAttributesChange = (customFontSizeAttributeName, fontSizeAttributeName) => {
-          if (previousState[fontSizeAttributeName]) {
-            // If new font size is name compare with the previous slug.
-            if (attributes[fontSizeAttributeName]) {
-              return attributes[fontSizeAttributeName] !== previousState[fontSizeAttributeName].slug;
-            }
-            // If font size is not named, update when the font size value changes.
-            return previousState[fontSizeAttributeName].size !== attributes[customFontSizeAttributeName];
-          }
-          // In this case we need to build the font size object.
-          return true;
-        };
-        if (!Object.values(fontSizeAttributeNames).some(didAttributesChange)) {
-          return null;
-        }
-        const newState = Object.entries(fontSizeAttributeNames).filter(([key, value]) => didAttributesChange(value, key)).reduce((newStateAccumulator, [fontSizeAttributeName, customFontSizeAttributeName]) => {
-          const fontSizeAttributeValue = attributes[fontSizeAttributeName];
-          const fontSizeObject = utils_getFontSize(fontSizes, fontSizeAttributeValue, attributes[customFontSizeAttributeName]);
-          newStateAccumulator[fontSizeAttributeName] = {
-            ...fontSizeObject,
-            class: getFontSizeClass(fontSizeAttributeValue)
-          };
-          return newStateAccumulator;
-        }, {});
-        return {
-          ...previousState,
-          ...newState
-        };
-      }
-      render() {
-        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-          ...this.props,
-          fontSizes: undefined,
-          ...this.state,
-          ...this.setters
-        });
-      }
-    };
-  }]), 'withFontSizes');
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/index.js
-
-
-
-
-
-// EXTERNAL MODULE: ./node_modules/remove-accents/index.js
-var remove_accents = __webpack_require__(9681);
-var remove_accents_default = /*#__PURE__*/__webpack_require__.n(remove_accents);
-;// CONCATENATED MODULE: ./node_modules/lower-case/dist.es2015/index.js
-/**
- * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
- */
-var SUPPORTED_LOCALE = {
-    tr: {
-        regexp: /\u0130|\u0049|\u0049\u0307/g,
-        map: {
-            İ: "\u0069",
-            I: "\u0131",
-            İ: "\u0069",
-        },
-    },
-    az: {
-        regexp: /\u0130/g,
-        map: {
-            İ: "\u0069",
-            I: "\u0131",
-            İ: "\u0069",
-        },
-    },
-    lt: {
-        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
-        map: {
-            I: "\u0069\u0307",
-            J: "\u006A\u0307",
-            Į: "\u012F\u0307",
-            Ì: "\u0069\u0307\u0300",
-            Í: "\u0069\u0307\u0301",
-            Ĩ: "\u0069\u0307\u0303",
-        },
-    },
-};
-/**
- * Localized lower case.
- */
-function localeLowerCase(str, locale) {
-    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
-    if (lang)
-        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
-    return lowerCase(str);
-}
-/**
- * Lower case as a function.
- */
-function lowerCase(str) {
-    return str.toLowerCase();
-}
-
-;// CONCATENATED MODULE: ./node_modules/no-case/dist.es2015/index.js
-
-// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
-var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
-// Remove all non-word characters.
-var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
-/**
- * Normalize the string into something other libraries can manipulate easier.
- */
-function noCase(input, options) {
-    if (options === void 0) { options = {}; }
-    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
-    var result = dist_es2015_replace(dist_es2015_replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
-    var start = 0;
-    var end = result.length;
-    // Trim the delimiter from around the output string.
-    while (result.charAt(start) === "\0")
-        start++;
-    while (result.charAt(end - 1) === "\0")
-        end--;
-    // Transform each token independently.
-    return result.slice(start, end).split("\0").map(transform).join(delimiter);
-}
-/**
- * Replace `re` in the input string with the replacement value.
- */
-function dist_es2015_replace(input, re, value) {
-    if (re instanceof RegExp)
-        return input.replace(re, value);
-    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/search-items.js
-/**
- * External dependencies
- */
-
-
-
-// Default search helpers.
-const defaultGetName = item => item.name || '';
-const defaultGetTitle = item => item.title;
-const defaultGetDescription = item => item.description || '';
-const defaultGetKeywords = item => item.keywords || [];
-const defaultGetCategory = item => item.category;
-const defaultGetCollection = () => null;
-
-// Normalization regexes
-const splitRegexp = [/([\p{Ll}\p{Lo}\p{N}])([\p{Lu}\p{Lt}])/gu,
-// One lowercase or digit, followed by one uppercase.
-/([\p{Lu}\p{Lt}])([\p{Lu}\p{Lt}][\p{Ll}\p{Lo}])/gu // One uppercase followed by one uppercase and one lowercase.
-];
-const stripRegexp = /(\p{C}|\p{P}|\p{S})+/giu; // Anything that's not a punctuation, symbol or control/format character.
-
-// Normalization cache
-const extractedWords = new Map();
-const normalizedStrings = new Map();
-
-/**
- * Extracts words from an input string.
- *
- * @param {string} input The input string.
- *
- * @return {Array} Words, extracted from the input string.
- */
-function extractWords(input = '') {
-  if (extractedWords.has(input)) {
-    return extractedWords.get(input);
-  }
-  const result = noCase(input, {
-    splitRegexp,
-    stripRegexp
-  }).split(' ').filter(Boolean);
-  extractedWords.set(input, result);
-  return result;
-}
-
-/**
- * Sanitizes the search input string.
- *
- * @param {string} input The search input to normalize.
- *
- * @return {string} The normalized search input.
- */
-function normalizeString(input = '') {
-  if (normalizedStrings.has(input)) {
-    return normalizedStrings.get(input);
-  }
-
-  // Disregard diacritics.
-  //  Input: "média"
-  let result = remove_accents_default()(input);
-
-  // Accommodate leading slash, matching autocomplete expectations.
-  //  Input: "/media"
-  result = result.replace(/^\//, '');
-
-  // Lowercase.
-  //  Input: "MEDIA"
-  result = result.toLowerCase();
-  normalizedStrings.set(input, result);
-  return result;
-}
-
-/**
- * Converts the search term into a list of normalized terms.
- *
- * @param {string} input The search term to normalize.
- *
- * @return {string[]} The normalized list of search terms.
- */
-const getNormalizedSearchTerms = (input = '') => {
-  return extractWords(normalizeString(input));
-};
-const removeMatchingTerms = (unmatchedTerms, unprocessedTerms) => {
-  return unmatchedTerms.filter(term => !getNormalizedSearchTerms(unprocessedTerms).some(unprocessedTerm => unprocessedTerm.includes(term)));
-};
-const searchBlockItems = (items, categories, collections, searchInput) => {
-  const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);
-  if (normalizedSearchTerms.length === 0) {
-    return items;
-  }
-  const config = {
-    getCategory: item => categories.find(({
-      slug
-    }) => slug === item.category)?.title,
-    getCollection: item => collections[item.name.split('/')[0]]?.title
-  };
-  return searchItems(items, searchInput, config);
-};
-
-/**
- * Filters an item list given a search term.
- *
- * @param {Array}  items       Item list
- * @param {string} searchInput Search input.
- * @param {Object} config      Search Config.
- *
- * @return {Array} Filtered item list.
- */
-const searchItems = (items = [], searchInput = '', config = {}) => {
-  const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);
-  if (normalizedSearchTerms.length === 0) {
-    return items;
-  }
-  const rankedItems = items.map(item => {
-    return [item, getItemSearchRank(item, searchInput, config)];
-  }).filter(([, rank]) => rank > 0);
-  rankedItems.sort(([, rank1], [, rank2]) => rank2 - rank1);
-  return rankedItems.map(([item]) => item);
-};
-
-/**
- * Get the search rank for a given item and a specific search term.
- * The better the match, the higher the rank.
- * If the rank equals 0, it should be excluded from the results.
- *
- * @param {Object} item       Item to filter.
- * @param {string} searchTerm Search term.
- * @param {Object} config     Search Config.
- *
- * @return {number} Search Rank.
- */
-function getItemSearchRank(item, searchTerm, config = {}) {
-  const {
-    getName = defaultGetName,
-    getTitle = defaultGetTitle,
-    getDescription = defaultGetDescription,
-    getKeywords = defaultGetKeywords,
-    getCategory = defaultGetCategory,
-    getCollection = defaultGetCollection
-  } = config;
-  const name = getName(item);
-  const title = getTitle(item);
-  const description = getDescription(item);
-  const keywords = getKeywords(item);
-  const category = getCategory(item);
-  const collection = getCollection(item);
-  const normalizedSearchInput = normalizeString(searchTerm);
-  const normalizedTitle = normalizeString(title);
-  let rank = 0;
-
-  // Prefers exact matches
-  // Then prefers if the beginning of the title matches the search term
-  // name, keywords, categories, collection, variations match come later.
-  if (normalizedSearchInput === normalizedTitle) {
-    rank += 30;
-  } else if (normalizedTitle.startsWith(normalizedSearchInput)) {
-    rank += 20;
-  } else {
-    const terms = [name, title, description, ...keywords, category, collection].join(' ');
-    const normalizedSearchTerms = extractWords(normalizedSearchInput);
-    const unmatchedTerms = removeMatchingTerms(normalizedSearchTerms, terms);
-    if (unmatchedTerms.length === 0) {
-      rank += 10;
-    }
-  }
-
-  // Give a better rank to "core" namespaced items.
-  if (rank !== 0 && name.startsWith('core/')) {
-    const isCoreBlockVariation = name !== item.id;
-    // Give a bit better rank to "core" blocks over "core" block variations.
-    rank += isCoreBlockVariation ? 1 : 2;
-  }
-  return rank;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-block-types-state.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-/**
- * Retrieves the block types inserter state.
- *
- * @param {string=}  rootClientId Insertion's root client ID.
- * @param {Function} onInsert     function called when inserter a list of blocks.
- * @param {boolean}  isQuick
- * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)
- */
-const useBlockTypesState = (rootClientId, onInsert, isQuick) => {
-  const options = (0,external_wp_element_namespaceObject.useMemo)(() => ({
-    [withRootClientIdOptionKey]: !isQuick
-  }), [isQuick]);
-  const [items] = (0,external_wp_data_namespaceObject.useSelect)(select => [select(store).getInserterItems(rootClientId, options)], [rootClientId, options]);
-  const [categories, collections] = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getCategories,
-      getCollections
-    } = select(external_wp_blocks_namespaceObject.store);
-    return [getCategories(), getCollections()];
-  }, []);
-  const onSelectItem = (0,external_wp_element_namespaceObject.useCallback)(({
-    name,
-    initialAttributes,
-    innerBlocks,
-    syncStatus,
-    content,
-    rootClientId: _rootClientId
-  }, shouldFocusBlock) => {
-    const insertedBlock = syncStatus === 'unsynced' ? (0,external_wp_blocks_namespaceObject.parse)(content, {
-      __unstableSkipMigrationLogs: true
-    }) : (0,external_wp_blocks_namespaceObject.createBlock)(name, initialAttributes, (0,external_wp_blocks_namespaceObject.createBlocksFromInnerBlocksTemplate)(innerBlocks));
-    onInsert(insertedBlock, undefined, shouldFocusBlock, _rootClientId);
-  }, [onInsert]);
-  return [items, categories, collections, onSelectItem];
-};
-/* harmony default export */ const use_block_types_state = (useBlockTypesState);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/order-inserter-block-items.js
-/** @typedef {import('../store/selectors').WPEditorInserterItem} WPEditorInserterItem */
-
-/**
- * Helper function to order inserter block items according to a provided array of prioritized blocks.
- *
- * @param {WPEditorInserterItem[]} items    The array of editor inserter block items to be sorted.
- * @param {string[]}               priority The array of block names to be prioritized.
- * @return {WPEditorInserterItem[]} The sorted array of editor inserter block items.
- */
-const orderInserterBlockItems = (items, priority) => {
-  if (!priority) {
-    return items;
-  }
-  items.sort(({
-    id: aName
-  }, {
-    id: bName
-  }) => {
-    // Sort block items according to `priority`.
-    let aIndex = priority.indexOf(aName);
-    let bIndex = priority.indexOf(bName);
-    // All other block items should come after that.
-    if (aIndex < 0) {
-      aIndex = priority.length;
-    }
-    if (bIndex < 0) {
-      bIndex = priority.length;
-    }
-    return aIndex - bIndex;
-  });
-  return items;
-};
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/autocompleters/block.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-const block_noop = () => {};
-const SHOWN_BLOCK_TYPES = 9;
-
-/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */
-
-/**
- * Creates a blocks repeater for replacing the current block with a selected block type.
- *
- * @return {WPCompleter} A blocks completer.
- */
-function createBlockCompleter() {
-  return {
-    name: 'blocks',
-    className: 'block-editor-autocompleters__block',
-    triggerPrefix: '/',
-    useItems(filterValue) {
-      const {
-        rootClientId,
-        selectedBlockName,
-        prioritizedBlocks
-      } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-        const {
-          getSelectedBlockClientId,
-          getBlockName,
-          getBlockListSettings,
-          getBlockRootClientId
-        } = select(store);
-        const selectedBlockClientId = getSelectedBlockClientId();
-        const _rootClientId = getBlockRootClientId(selectedBlockClientId);
-        return {
-          selectedBlockName: selectedBlockClientId ? getBlockName(selectedBlockClientId) : null,
-          rootClientId: _rootClientId,
-          prioritizedBlocks: getBlockListSettings(_rootClientId)?.prioritizedInserterBlocks
-        };
-      }, []);
-      const [items, categories, collections] = use_block_types_state(rootClientId, block_noop, true);
-      const filteredItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
-        const initialFilteredItems = !!filterValue.trim() ? searchBlockItems(items, categories, collections, filterValue) : orderInserterBlockItems(orderBy(items, 'frecency', 'desc'), prioritizedBlocks);
-        return initialFilteredItems.filter(item => item.name !== selectedBlockName).slice(0, SHOWN_BLOCK_TYPES);
-      }, [filterValue, selectedBlockName, items, categories, collections, prioritizedBlocks]);
-      const options = (0,external_wp_element_namespaceObject.useMemo)(() => filteredItems.map(blockItem => {
-        const {
-          title,
-          icon,
-          isDisabled
-        } = blockItem;
-        return {
-          key: `block-${blockItem.id}`,
-          value: blockItem,
-          label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-              icon: icon,
-              showColors: true
-            }, "icon"), title]
-          }),
-          isDisabled
-        };
-      }), [filteredItems]);
-      return [options];
-    },
-    allowContext(before, after) {
-      return !(/\S/.test(before) || /\S/.test(after));
-    },
-    getOptionCompletion(inserterItem) {
-      const {
-        name,
-        initialAttributes,
-        innerBlocks,
-        syncStatus,
-        content
-      } = inserterItem;
-      return {
-        action: 'replace',
-        value: syncStatus === 'unsynced' ? (0,external_wp_blocks_namespaceObject.parse)(content, {
-          __unstableSkipMigrationLogs: true
-        }) : (0,external_wp_blocks_namespaceObject.createBlock)(name, initialAttributes, (0,external_wp_blocks_namespaceObject.createBlocksFromInnerBlocksTemplate)(innerBlocks))
-      };
-    }
-  };
-}
-
-/**
- * Creates a blocks repeater for replacing the current block with a selected block type.
- *
- * @return {WPCompleter} A blocks completer.
- */
-/* harmony default export */ const block = (createBlockCompleter());
-
-;// CONCATENATED MODULE: external ["wp","apiFetch"]
-const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
-var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/post.js
-/**
- * WordPress dependencies
- */
-
-
-const post = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "m7.3 9.7 1.4 1.4c.2-.2.3-.3.4-.5 0 0 0-.1.1-.1.3-.5.4-1.1.3-1.6L12 7 9 4 7.2 6.5c-.6-.1-1.1 0-1.6.3 0 0-.1 0-.1.1-.3.1-.4.2-.6.4l1.4 1.4L4 11v1h1l2.3-2.3zM4 20h9v-1.5H4V20zm0-5.5V16h16v-1.5H4z"
-  })
-});
-/* harmony default export */ const library_post = (post);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/autocompleters/link.js
-/**
- * WordPress dependencies
- */
-// Disable Reason: Needs to be refactored.
-// eslint-disable-next-line no-restricted-imports
-
-
-
-
-
-
-const SHOWN_SUGGESTIONS = 10;
-
-/** @typedef {import('@wordpress/components').WPCompleter} WPCompleter */
-
-/**
- * Creates a suggestion list for links to posts or pages.
- *
- * @return {WPCompleter} A links completer.
- */
-function createLinkCompleter() {
-  return {
-    name: 'links',
-    className: 'block-editor-autocompleters__link',
-    triggerPrefix: '[[',
-    options: async letters => {
-      let options = await external_wp_apiFetch_default()({
-        path: (0,external_wp_url_namespaceObject.addQueryArgs)('/wp/v2/search', {
-          per_page: SHOWN_SUGGESTIONS,
-          search: letters,
-          type: 'post',
-          order_by: 'menu_order'
-        })
-      });
-      options = options.filter(option => option.title !== '');
-      return options;
-    },
-    getOptionKeywords(item) {
-      const expansionWords = item.title.split(/\s+/);
-      return [...expansionWords];
-    },
-    getOptionLabel(item) {
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-          icon: item.subtype === 'page' ? library_page : library_post
-        }, "icon"), item.title]
-      });
-    },
-    getOptionCompletion(item) {
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("a", {
-        href: item.url,
-        children: item.title
-      });
-    }
-  };
-}
-
-/**
- * Creates a suggestion list for links to posts or pages..
- *
- * @return {WPCompleter} A link completer.
- */
-/* harmony default export */ const autocompleters_link = (createLinkCompleter());
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/autocomplete/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-/**
- * Shared reference to an empty array for cases where it is important to avoid
- * returning a new array reference on every invocation.
- *
- * @type {Array}
- */
-
-const autocomplete_EMPTY_ARRAY = [];
-function useCompleters({
-  completers = autocomplete_EMPTY_ARRAY
-}) {
-  const {
-    name
-  } = useBlockEditContext();
-  return (0,external_wp_element_namespaceObject.useMemo)(() => {
-    let filteredCompleters = [...completers, autocompleters_link];
-    if (name === (0,external_wp_blocks_namespaceObject.getDefaultBlockName)() || (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, '__experimentalSlashInserter', false)) {
-      filteredCompleters = [...filteredCompleters, block];
-    }
-    if ((0,external_wp_hooks_namespaceObject.hasFilter)('editor.Autocomplete.completers')) {
-      // Provide copies so filters may directly modify them.
-      if (filteredCompleters === completers) {
-        filteredCompleters = filteredCompleters.map(completer => ({
-          ...completer
-        }));
-      }
-      filteredCompleters = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.Autocomplete.completers', filteredCompleters, name);
-    }
-    return filteredCompleters;
-  }, [completers, name]);
-}
-function useBlockEditorAutocompleteProps(props) {
-  return (0,external_wp_components_namespaceObject.__unstableUseAutocompleteProps)({
-    ...props,
-    completers: useCompleters(props)
-  });
-}
-
-/**
- * Wrap the default Autocomplete component with one that supports a filter hook
- * for customizing its list of autocompleters.
- *
- * @type {import('react').FC}
- */
-function BlockEditorAutocomplete(props) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Autocomplete, {
-    ...props,
-    completers: useCompleters(props)
-  });
-}
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/autocomplete/README.md
- */
-/* harmony default export */ const autocomplete = (BlockEditorAutocomplete);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/fullscreen.js
-/**
- * WordPress dependencies
- */
-
-
-const fullscreen = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M6 4a2 2 0 0 0-2 2v3h1.5V6a.5.5 0 0 1 .5-.5h3V4H6Zm3 14.5H6a.5.5 0 0 1-.5-.5v-3H4v3a2 2 0 0 0 2 2h3v-1.5Zm6 1.5v-1.5h3a.5.5 0 0 0 .5-.5v-3H20v3a2 2 0 0 1-2 2h-3Zm3-16a2 2 0 0 1 2 2v3h-1.5V6a.5.5 0 0 0-.5-.5h-3V4h3Z"
-  })
-});
-/* harmony default export */ const library_fullscreen = (fullscreen);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-full-height-alignment-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-function BlockFullHeightAlignmentControl({
-  isActive,
-  label = (0,external_wp_i18n_namespaceObject.__)('Toggle full height'),
-  onToggle,
-  isDisabled
-}) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-    isActive: isActive,
-    icon: library_fullscreen,
-    label: label,
-    onClick: () => onToggle(!isActive),
-    disabled: isDisabled
-  });
-}
-/* harmony default export */ const block_full_height_alignment_control = (BlockFullHeightAlignmentControl);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-matrix-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-const block_alignment_matrix_control_noop = () => {};
-function BlockAlignmentMatrixControl(props) {
-  const {
-    label = (0,external_wp_i18n_namespaceObject.__)('Change matrix alignment'),
-    onChange = block_alignment_matrix_control_noop,
-    value = 'center',
-    isDisabled
-  } = props;
-  const icon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalAlignmentMatrixControl.Icon, {
-    value: value
-  });
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
-    popoverProps: {
-      placement: 'bottom-start'
-    },
-    renderToggle: ({
-      onToggle,
-      isOpen
-    }) => {
-      const openOnArrowDown = event => {
-        if (!isOpen && event.keyCode === external_wp_keycodes_namespaceObject.DOWN) {
-          event.preventDefault();
-          onToggle();
-        }
-      };
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-        onClick: onToggle,
-        "aria-haspopup": "true",
-        "aria-expanded": isOpen,
-        onKeyDown: openOnArrowDown,
-        label: label,
-        icon: icon,
-        showTooltip: true,
-        disabled: isDisabled
-      });
-    },
-    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalAlignmentMatrixControl, {
-      hasFocusBorder: false,
-      onChange: onChange,
-      value: value
-    })
-  });
-}
-/* harmony default export */ const block_alignment_matrix_control = (BlockAlignmentMatrixControl);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-title/use-block-display-title.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Returns the block's configured title as a string, or empty if the title
- * cannot be determined.
- *
- * @example
- *
- * ```js
- * useBlockDisplayTitle( { clientId: 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', maximumLength: 17 } );
- * ```
- *
- * @param {Object}           props
- * @param {string}           props.clientId      Client ID of block.
- * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
- * @param {string|undefined} props.context       The context to pass to `getBlockLabel`.
- * @return {?string} Block title.
- */
-function useBlockDisplayTitle({
-  clientId,
-  maximumLength,
-  context
-}) {
-  const blockTitle = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    if (!clientId) {
-      return null;
-    }
-    const {
-      getBlockName,
-      getBlockAttributes
+ * @param {Object}        props             Component props.
+ * @param {string}        props.title       The title of the block.
+ * @param {string|Object} props.icon        The icon of the block. This can be any of [WordPress' Dashicons](https://developer.wordpress.org/resource/dashicons/), or a custom `svg` element.
+ * @param {string}        props.description The description of the block.
+ * @param {Object}        [props.blockType] Deprecated: Object containing block type data.
+ * @param {string}        [props.className] Additional classes to apply to the card.
+ * @param {string}        [props.name]      Custom block name to display before the title.
+ * @return {Element}                        Block card component.
+ */
+function BlockCard({
+  title,
+  icon,
+  description,
+  blockType,
+  className,
+  name
+}) {
+  if (blockType) {
+    external_wp_deprecated_default()('`blockType` property in `BlockCard component`', {
+      since: '5.7',
+      alternative: '`title, icon and description` properties'
+    });
+    ({
+      title,
+      icon,
+      description
+    } = blockType);
+  }
+  const {
+    parentNavBlockClientId
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getSelectedBlockClientId,
+      getBlockParentsByBlockName
     } = select(store);
-    const {
-      getBlockType,
-      getActiveBlockVariation
-    } = select(external_wp_blocks_namespaceObject.store);
-    const blockName = getBlockName(clientId);
-    const blockType = getBlockType(blockName);
-    if (!blockType) {
-      return null;
-    }
-    const attributes = getBlockAttributes(clientId);
-    const label = (0,external_wp_blocks_namespaceObject.__experimentalGetBlockLabel)(blockType, attributes, context);
-    // If the label is defined we prioritize it over a possible block variation title match.
-    if (label !== blockType.title) {
-      return label;
-    }
-    const match = getActiveBlockVariation(blockName, attributes);
-    // Label will fallback to the title if no label is defined for the current label context.
-    return match?.title || blockType.title;
-  }, [clientId, context]);
-  if (!blockTitle) {
-    return null;
-  }
-  if (maximumLength && maximumLength > 0 && blockTitle.length > maximumLength) {
-    const omission = '...';
-    return blockTitle.slice(0, maximumLength - omission.length) + omission;
-  }
-  return blockTitle;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-title/index.js
-/**
- * Internal dependencies
- */
-
-
-
-/**
- * Renders the block's configured title as a string, or empty if the title
- * cannot be determined.
- *
- * @example
- *
- * ```jsx
- * <BlockTitle clientId="afd1cb17-2c08-4e7a-91be-007ba7ddc3a1" maximumLength={ 17 }/>
- * ```
- *
- * @param {Object}           props
- * @param {string}           props.clientId      Client ID of block.
- * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
- * @param {string|undefined} props.context       The context to pass to `getBlockLabel`.
- *
- * @return {JSX.Element} Block title.
- */
-function BlockTitle({
-  clientId,
-  maximumLength,
-  context
-}) {
-  return useBlockDisplayTitle({
-    clientId,
-    maximumLength,
-    context
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-breadcrumb/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-/**
- * Block breadcrumb component, displaying the hierarchy of the current block selection as a breadcrumb.
- *
- * @param {Object} props               Component props.
- * @param {string} props.rootLabelText Translated label for the root element of the breadcrumb trail.
- * @return {Element}                   Block Breadcrumb.
- */
-
-
-function BlockBreadcrumb({
-  rootLabelText
-}) {
-  const {
-    selectBlock,
-    clearSelectedBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const {
-    clientId,
-    parents,
-    hasSelection
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getSelectionStart,
-      getSelectedBlockClientId,
-      getEnabledBlockParents
-    } = unlock(select(store));
-    const selectedBlockClientId = getSelectedBlockClientId();
-    return {
-      parents: getEnabledBlockParents(selectedBlockClientId),
-      clientId: selectedBlockClientId,
-      hasSelection: !!getSelectionStart().clientId
+    const _selectedBlockClientId = getSelectedBlockClientId();
+    return {
+      parentNavBlockClientId: getBlockParentsByBlockName(_selectedBlockClientId, 'core/navigation', true)[0]
     };
   }, []);
-  const rootLabel = rootLabelText || (0,external_wp_i18n_namespaceObject.__)('Document');
-
-  /*
-   * Disable reason: The `list` ARIA role is redundant but
-   * Safari+VoiceOver won't announce the list otherwise.
-   */
-  /* eslint-disable jsx-a11y/no-redundant-roles */
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("ul", {
-    className: "block-editor-block-breadcrumb",
-    role: "list",
-    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Block breadcrumb'),
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
-      className: !hasSelection ? 'block-editor-block-breadcrumb__current' : undefined,
-      "aria-current": !hasSelection ? 'true' : undefined,
-      children: [hasSelection && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-        className: "block-editor-block-breadcrumb__button",
-        variant: "tertiary",
-        onClick: clearSelectedBlock,
-        children: rootLabel
-      }), !hasSelection && rootLabel, !!clientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-        icon: chevron_right_small,
-        className: "block-editor-block-breadcrumb__separator"
+  const {
+    selectBlock
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    className: dist_clsx('block-editor-block-card', className),
+    children: [parentNavBlockClientId &&
+    /*#__PURE__*/
+    // This is only used by the Navigation block for now. It's not ideal having Navigation block specific code here.
+    (0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      onClick: () => selectBlock(parentNavBlockClientId),
+      label: (0,external_wp_i18n_namespaceObject.__)('Go to parent Navigation block'),
+      style:
+      // TODO: This style override is also used in ToolsPanelHeader.
+      // It should be supported out-of-the-box by Button.
+      {
+        minWidth: 24,
+        padding: 0
+      },
+      icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
+      size: "small"
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+      icon: icon,
+      showColors: true
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+      spacing: 1,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("h2", {
+        className: "block-editor-block-card__title",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+          className: "block-editor-block-card__name",
+          children: !!name?.length ? name : title
+        }), !!name?.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Badge, {
+          children: title
+        })]
+      }), description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
+        className: "block-editor-block-card__description",
+        children: description
       })]
-    }), parents.map(parentClientId => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-        className: "block-editor-block-breadcrumb__button",
-        variant: "tertiary",
-        onClick: () => selectBlock(parentClientId),
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
-          clientId: parentClientId,
-          maximumLength: 35
-        })
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-        icon: chevron_right_small,
-        className: "block-editor-block-breadcrumb__separator"
-      })]
-    }, parentClientId)), !!clientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
-      className: "block-editor-block-breadcrumb__current",
-      "aria-current": "true",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
-        clientId: clientId,
-        maximumLength: 35
-      })
-    })]
-  })
-  /* eslint-enable jsx-a11y/no-redundant-roles */;
-}
-/* harmony default export */ const block_breadcrumb = (BlockBreadcrumb);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-content-overlay/index.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-function useBlockOverlayActive(clientId) {
-  return (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      __unstableHasActiveBlockOverlayActive
-    } = select(store);
-    return __unstableHasActiveBlockOverlayActive(clientId);
+    })]
+  });
+}
+/* harmony default export */ const block_card = (BlockCard);
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/types.js
+let Type = /*#__PURE__*/function (Type) {
+  Type["Unknown"] = "REDUX_UNKNOWN";
+  Type["Add"] = "ADD_ITEM";
+  Type["Prepare"] = "PREPARE_ITEM";
+  Type["Cancel"] = "CANCEL_ITEM";
+  Type["Remove"] = "REMOVE_ITEM";
+  Type["PauseItem"] = "PAUSE_ITEM";
+  Type["ResumeItem"] = "RESUME_ITEM";
+  Type["PauseQueue"] = "PAUSE_QUEUE";
+  Type["ResumeQueue"] = "RESUME_QUEUE";
+  Type["OperationStart"] = "OPERATION_START";
+  Type["OperationFinish"] = "OPERATION_FINISH";
+  Type["AddOperations"] = "ADD_OPERATIONS";
+  Type["CacheBlobUrl"] = "CACHE_BLOB_URL";
+  Type["RevokeBlobUrls"] = "REVOKE_BLOB_URLS";
+  Type["UpdateSettings"] = "UPDATE_SETTINGS";
+  return Type;
+}({});
+
+// Must match the Attachment type from the media-utils package.
+
+let ItemStatus = /*#__PURE__*/function (ItemStatus) {
+  ItemStatus["Processing"] = "PROCESSING";
+  ItemStatus["Paused"] = "PAUSED";
+  return ItemStatus;
+}({});
+let OperationType = /*#__PURE__*/function (OperationType) {
+  OperationType["Prepare"] = "PREPARE";
+  OperationType["Upload"] = "UPLOAD";
+  return OperationType;
+}({});
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/reducer.js
+/**
+ * Internal dependencies
+ */
+
+const reducer_noop = () => {};
+const DEFAULT_STATE = {
+  queue: [],
+  queueStatus: 'active',
+  blobUrls: {},
+  settings: {
+    mediaUpload: reducer_noop
+  }
+};
+function reducer_reducer(state = DEFAULT_STATE, action = {
+  type: Type.Unknown
+}) {
+  switch (action.type) {
+    case Type.PauseQueue:
+      {
+        return {
+          ...state,
+          queueStatus: 'paused'
+        };
+      }
+    case Type.ResumeQueue:
+      {
+        return {
+          ...state,
+          queueStatus: 'active'
+        };
+      }
+    case Type.Add:
+      return {
+        ...state,
+        queue: [...state.queue, action.item]
+      };
+    case Type.Cancel:
+      return {
+        ...state,
+        queue: state.queue.map(item => item.id === action.id ? {
+          ...item,
+          error: action.error
+        } : item)
+      };
+    case Type.Remove:
+      return {
+        ...state,
+        queue: state.queue.filter(item => item.id !== action.id)
+      };
+    case Type.OperationStart:
+      {
+        return {
+          ...state,
+          queue: state.queue.map(item => item.id === action.id ? {
+            ...item,
+            currentOperation: action.operation
+          } : item)
+        };
+      }
+    case Type.AddOperations:
+      return {
+        ...state,
+        queue: state.queue.map(item => {
+          if (item.id !== action.id) {
+            return item;
+          }
+          return {
+            ...item,
+            operations: [...(item.operations || []), ...action.operations]
+          };
+        })
+      };
+    case Type.OperationFinish:
+      return {
+        ...state,
+        queue: state.queue.map(item => {
+          if (item.id !== action.id) {
+            return item;
+          }
+          const operations = item.operations ? item.operations.slice(1) : [];
+
+          // Prevent an empty object if there's no attachment data.
+          const attachment = item.attachment || action.item.attachment ? {
+            ...item.attachment,
+            ...action.item.attachment
+          } : undefined;
+          return {
+            ...item,
+            currentOperation: undefined,
+            operations,
+            ...action.item,
+            attachment,
+            additionalData: {
+              ...item.additionalData,
+              ...action.item.additionalData
+            }
+          };
+        })
+      };
+    case Type.CacheBlobUrl:
+      {
+        const blobUrls = state.blobUrls[action.id] || [];
+        return {
+          ...state,
+          blobUrls: {
+            ...state.blobUrls,
+            [action.id]: [...blobUrls, action.blobUrl]
+          }
+        };
+      }
+    case Type.RevokeBlobUrls:
+      {
+        const newBlobUrls = {
+          ...state.blobUrls
+        };
+        delete newBlobUrls[action.id];
+        return {
+          ...state,
+          blobUrls: newBlobUrls
+        };
+      }
+    case Type.UpdateSettings:
+      {
+        return {
+          ...state,
+          settings: {
+            ...state.settings,
+            ...action.settings
+          }
+        };
+      }
+  }
+  return state;
+}
+/* harmony default export */ const store_reducer = (reducer_reducer);
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/selectors.js
+/**
+ * Internal dependencies
+ */
+
+/**
+ * Returns all items currently being uploaded.
+ *
+ * @param state Upload state.
+ *
+ * @return Queue items.
+ */
+function getItems(state) {
+  return state.queue;
+}
+
+/**
+ * Determines whether any upload is currently in progress.
+ *
+ * @param state Upload state.
+ *
+ * @return Whether any upload is currently in progress.
+ */
+function isUploading(state) {
+  return state.queue.length >= 1;
+}
+
+/**
+ * Determines whether an upload is currently in progress given an attachment URL.
+ *
+ * @param state Upload state.
+ * @param url   Attachment URL.
+ *
+ * @return Whether upload is currently in progress for the given attachment.
+ */
+function isUploadingByUrl(state, url) {
+  return state.queue.some(item => item.attachment?.url === url || item.sourceUrl === url);
+}
+
+/**
+ * Determines whether an upload is currently in progress given an attachment ID.
+ *
+ * @param state        Upload state.
+ * @param attachmentId Attachment ID.
+ *
+ * @return Whether upload is currently in progress for the given attachment.
+ */
+function isUploadingById(state, attachmentId) {
+  return state.queue.some(item => item.attachment?.id === attachmentId || item.sourceAttachmentId === attachmentId);
+}
+
+/**
+ * Returns the media upload settings.
+ *
+ * @param state Upload state.
+ *
+ * @return Settings
+ */
+function selectors_getSettings(state) {
+  return state.settings;
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/private-selectors.js
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Returns all items currently being uploaded.
+ *
+ * @param state Upload state.
+ *
+ * @return Queue items.
+ */
+function getAllItems(state) {
+  return state.queue;
+}
+
+/**
+ * Returns a specific item given its unique ID.
+ *
+ * @param state Upload state.
+ * @param id    Item ID.
+ *
+ * @return Queue item.
+ */
+function getItem(state, id) {
+  return state.queue.find(item => item.id === id);
+}
+
+/**
+ * Determines whether a batch has been successfully uploaded, given its unique ID.
+ *
+ * @param state   Upload state.
+ * @param batchId Batch ID.
+ *
+ * @return Whether a batch has been uploaded.
+ */
+function isBatchUploaded(state, batchId) {
+  const batchItems = state.queue.filter(item => batchId === item.batchId);
+  return batchItems.length === 0;
+}
+
+/**
+ * Determines whether an upload is currently in progress given a post or attachment ID.
+ *
+ * @param state              Upload state.
+ * @param postOrAttachmentId Post ID or attachment ID.
+ *
+ * @return Whether upload is currently in progress for the given post or attachment.
+ */
+function isUploadingToPost(state, postOrAttachmentId) {
+  return state.queue.some(item => item.currentOperation === OperationType.Upload && item.additionalData.post === postOrAttachmentId);
+}
+
+/**
+ * Returns the next paused upload for a given post or attachment ID.
+ *
+ * @param state              Upload state.
+ * @param postOrAttachmentId Post ID or attachment ID.
+ *
+ * @return Paused item.
+ */
+function getPausedUploadForPost(state, postOrAttachmentId) {
+  return state.queue.find(item => item.status === ItemStatus.Paused && item.additionalData.post === postOrAttachmentId);
+}
+
+/**
+ * Determines whether uploading is currently paused.
+ *
+ * @param state Upload state.
+ *
+ * @return Whether uploading is currently paused.
+ */
+function isPaused(state) {
+  return state.queueStatus === 'paused';
+}
+
+/**
+ * Returns all cached blob URLs for a given item ID.
+ *
+ * @param state Upload state.
+ * @param id    Item ID
+ *
+ * @return List of blob URLs.
+ */
+function getBlobUrls(state, id) {
+  return state.blobUrls[id] || [];
+}
+
+;// ./node_modules/@wordpress/upload-media/node_modules/uuid/dist/esm-browser/native.js
+const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
+/* harmony default export */ const esm_browser_native = ({
+  randomUUID
+});
+;// ./node_modules/@wordpress/upload-media/node_modules/uuid/dist/esm-browser/rng.js
+// Unique ID creation requires a high quality random # generator. In the browser we therefore
+// require the crypto API and do not support built-in fallback to lower quality random number
+// generators (like Math.random()).
+let getRandomValues;
+const rnds8 = new Uint8Array(16);
+function rng() {
+  // lazy load so that environments that need to polyfill have a chance to do so
+  if (!getRandomValues) {
+    // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
+    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
+
+    if (!getRandomValues) {
+      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
+    }
+  }
+
+  return getRandomValues(rnds8);
+}
+;// ./node_modules/@wordpress/upload-media/node_modules/uuid/dist/esm-browser/stringify.js
+
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+
+const byteToHex = [];
+
+for (let i = 0; i < 256; ++i) {
+  byteToHex.push((i + 0x100).toString(16).slice(1));
+}
+
+function unsafeStringify(arr, offset = 0) {
+  // Note: Be careful editing this code!  It's been tuned for performance
+  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
+  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
+}
+
+function stringify(arr, offset = 0) {
+  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one
+  // of the following:
+  // - One or more input array values don't map to a hex octet (leading to
+  // "undefined" in the uuid)
+  // - Invalid input values for the RFC `version` or `variant` fields
+
+  if (!validate(uuid)) {
+    throw TypeError('Stringified UUID is invalid');
+  }
+
+  return uuid;
+}
+
+/* harmony default export */ const esm_browser_stringify = ((/* unused pure expression or super */ null && (stringify)));
+;// ./node_modules/@wordpress/upload-media/node_modules/uuid/dist/esm-browser/v4.js
+
+
+
+
+function v4(options, buf, offset) {
+  if (esm_browser_native.randomUUID && !buf && !options) {
+    return esm_browser_native.randomUUID();
+  }
+
+  options = options || {};
+  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+
+  rnds[6] = rnds[6] & 0x0f | 0x40;
+  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+
+  if (buf) {
+    offset = offset || 0;
+
+    for (let i = 0; i < 16; ++i) {
+      buf[offset + i] = rnds[i];
+    }
+
+    return buf;
+  }
+
+  return unsafeStringify(rnds);
+}
+
+/* harmony default export */ const esm_browser_v4 = (v4);
+;// ./node_modules/@wordpress/upload-media/build-module/upload-error.js
+/**
+ * MediaError class.
+ *
+ * Small wrapper around the `Error` class
+ * to hold an error code and a reference to a file object.
+ */
+class UploadError extends Error {
+  constructor({
+    code,
+    message,
+    file,
+    cause
+  }) {
+    super(message, {
+      cause
+    });
+    Object.setPrototypeOf(this, new.target.prototype);
+    this.code = code;
+    this.file = file;
+  }
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/validate-mime-type.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Verifies if the caller (e.g. a block) supports this mime type.
+ *
+ * @param file         File object.
+ * @param allowedTypes List of allowed mime types.
+ */
+function validateMimeType(file, allowedTypes) {
+  if (!allowedTypes) {
+    return;
+  }
+
+  // Allowed type specified by consumer.
+  const isAllowedType = allowedTypes.some(allowedType => {
+    // If a complete mimetype is specified verify if it matches exactly the mime type of the file.
+    if (allowedType.includes('/')) {
+      return allowedType === file.type;
+    }
+    // Otherwise a general mime type is used, and we should verify if the file mimetype starts with it.
+    return file.type.startsWith(`${allowedType}/`);
+  });
+  if (file.type && !isAllowedType) {
+    throw new UploadError({
+      code: 'MIME_TYPE_NOT_SUPPORTED',
+      message: (0,external_wp_i18n_namespaceObject.sprintf)(
+      // translators: %s: file name.
+      (0,external_wp_i18n_namespaceObject.__)('%s: Sorry, this file type is not supported here.'), file.name),
+      file
+    });
+  }
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/get-mime-types-array.js
+/**
+ * Browsers may use unexpected mime types, and they differ from browser to browser.
+ * This function computes a flexible array of mime types from the mime type structured provided by the server.
+ * Converts { jpg|jpeg|jpe: "image/jpeg" } into [ "image/jpeg", "image/jpg", "image/jpeg", "image/jpe" ]
+ *
+ * @param {?Object} wpMimeTypesObject Mime type object received from the server.
+ *                                    Extensions are keys separated by '|' and values are mime types associated with an extension.
+ *
+ * @return An array of mime types or null
+ */
+function getMimeTypesArray(wpMimeTypesObject) {
+  if (!wpMimeTypesObject) {
+    return null;
+  }
+  return Object.entries(wpMimeTypesObject).flatMap(([extensionsString, mime]) => {
+    const [type] = mime.split('/');
+    const extensions = extensionsString.split('|');
+    return [mime, ...extensions.map(extension => `${type}/${extension}`)];
+  });
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/validate-mime-type-for-user.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Verifies if the user is allowed to upload this mime type.
+ *
+ * @param file               File object.
+ * @param wpAllowedMimeTypes List of allowed mime types and file extensions.
+ */
+function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
+  // Allowed types for the current WP_User.
+  const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
+  if (!allowedMimeTypesForUser) {
+    return;
+  }
+  const isAllowedMimeTypeForUser = allowedMimeTypesForUser.includes(file.type);
+  if (file.type && !isAllowedMimeTypeForUser) {
+    throw new UploadError({
+      code: 'MIME_TYPE_NOT_ALLOWED_FOR_USER',
+      message: (0,external_wp_i18n_namespaceObject.sprintf)(
+      // translators: %s: file name.
+      (0,external_wp_i18n_namespaceObject.__)('%s: Sorry, you are not allowed to upload this file type.'), file.name),
+      file
+    });
+  }
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/validate-file-size.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Verifies whether the file is within the file upload size limits for the site.
+ *
+ * @param file              File object.
+ * @param maxUploadFileSize Maximum upload size in bytes allowed for the site.
+ */
+function validateFileSize(file, maxUploadFileSize) {
+  // Don't allow empty files to be uploaded.
+  if (file.size <= 0) {
+    throw new UploadError({
+      code: 'EMPTY_FILE',
+      message: (0,external_wp_i18n_namespaceObject.sprintf)(
+      // translators: %s: file name.
+      (0,external_wp_i18n_namespaceObject.__)('%s: This file is empty.'), file.name),
+      file
+    });
+  }
+  if (maxUploadFileSize && file.size > maxUploadFileSize) {
+    throw new UploadError({
+      code: 'SIZE_ABOVE_LIMIT',
+      message: (0,external_wp_i18n_namespaceObject.sprintf)(
+      // translators: %s: file name.
+      (0,external_wp_i18n_namespaceObject.__)('%s: This file exceeds the maximum upload size for this site.'), file.name),
+      file
+    });
+  }
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/actions.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+/**
+ * Adds a new item to the upload queue.
+ *
+ * @param $0
+ * @param $0.files            Files
+ * @param [$0.onChange]       Function called each time a file or a temporary representation of the file is available.
+ * @param [$0.onSuccess]      Function called after the file is uploaded.
+ * @param [$0.onBatchSuccess] Function called after a batch of files is uploaded.
+ * @param [$0.onError]        Function called when an error happens.
+ * @param [$0.additionalData] Additional data to include in the request.
+ * @param [$0.allowedTypes]   Array with the types of media that can be uploaded, if unset all types are allowed.
+ */
+function addItems({
+  files,
+  onChange,
+  onSuccess,
+  onError,
+  onBatchSuccess,
+  additionalData,
+  allowedTypes
+}) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    const batchId = esm_browser_v4();
+    for (const file of files) {
+      /*
+       Check if the caller (e.g. a block) supports this mime type.
+       Special case for file types such as HEIC which will be converted before upload anyway.
+       Another check will be done before upload.
+      */
+      try {
+        validateMimeType(file, allowedTypes);
+        validateMimeTypeForUser(file, select.getSettings().allowedMimeTypes);
+      } catch (error) {
+        onError?.(error);
+        continue;
+      }
+      try {
+        validateFileSize(file, select.getSettings().maxUploadFileSize);
+      } catch (error) {
+        onError?.(error);
+        continue;
+      }
+      dispatch.addItem({
+        file,
+        batchId,
+        onChange,
+        onSuccess,
+        onBatchSuccess,
+        onError,
+        additionalData
+      });
+    }
+  };
+}
+
+/**
+ * Cancels an item in the queue based on an error.
+ *
+ * @param id     Item ID.
+ * @param error  Error instance.
+ * @param silent Whether to cancel the item silently,
+ *               without invoking its `onError` callback.
+ */
+function cancelItem(id, error, silent = false) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    const item = select.getItem(id);
+    if (!item) {
+      /*
+       * Do nothing if item has already been removed.
+       * This can happen if an upload is cancelled manually
+       * while transcoding with vips is still in progress.
+       * Then, cancelItem() is once invoked manually and once
+       * by the error handler in optimizeImageItem().
+       */
+      return;
+    }
+    item.abortController?.abort();
+    if (!silent) {
+      const {
+        onError
+      } = item;
+      onError?.(error !== null && error !== void 0 ? error : new Error('Upload cancelled'));
+      if (!onError && error) {
+        // TODO: Find better way to surface errors with sideloads etc.
+        // eslint-disable-next-line no-console -- Deliberately log errors here.
+        console.error('Upload cancelled', error);
+      }
+    }
+    dispatch({
+      type: Type.Cancel,
+      id,
+      error
+    });
+    dispatch.removeItem(id);
+    dispatch.revokeBlobUrls(id);
+
+    // All items of this batch were cancelled or finished.
+    if (item.batchId && select.isBatchUploaded(item.batchId)) {
+      item.onBatchSuccess?.();
+    }
+  };
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/utils.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Converts a Blob to a File with a default name like "image.png".
+ *
+ * If it is already a File object, it is returned unchanged.
+ *
+ * @param fileOrBlob Blob object.
+ * @return File object.
+ */
+function convertBlobToFile(fileOrBlob) {
+  if (fileOrBlob instanceof File) {
+    return fileOrBlob;
+  }
+
+  // Extension is only an approximation.
+  // The server will override it if incorrect.
+  const ext = fileOrBlob.type.split('/')[1];
+  const mediaType = 'application/pdf' === fileOrBlob.type ? 'document' : fileOrBlob.type.split('/')[0];
+  return new File([fileOrBlob], `${mediaType}.${ext}`, {
+    type: fileOrBlob.type
+  });
+}
+
+/**
+ * Renames a given file and returns a new file.
+ *
+ * Copies over the last modified time.
+ *
+ * @param file File object.
+ * @param name File name.
+ * @return Renamed file object.
+ */
+function renameFile(file, name) {
+  return new File([file], name, {
+    type: file.type,
+    lastModified: file.lastModified
+  });
+}
+
+/**
+ * Clones a given file object.
+ *
+ * @param file File object.
+ * @return New file object.
+ */
+function cloneFile(file) {
+  return renameFile(file, file.name);
+}
+
+/**
+ * Returns the file extension from a given file name or URL.
+ *
+ * @param file File URL.
+ * @return File extension or null if it does not have one.
+ */
+function getFileExtension(file) {
+  return file.includes('.') ? file.split('.').pop() || null : null;
+}
+
+/**
+ * Returns file basename without extension.
+ *
+ * For example, turns "my-awesome-file.jpeg" into "my-awesome-file".
+ *
+ * @param name File name.
+ * @return File basename.
+ */
+function getFileBasename(name) {
+  return name.includes('.') ? name.split('.').slice(0, -1).join('.') : name;
+}
+
+/**
+ * Returns the file name including extension from a URL.
+ *
+ * @param url File URL.
+ * @return File name.
+ */
+function getFileNameFromUrl(url) {
+  return getFilename(url) || _x('unnamed', 'file name');
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/stub-file.js
+class StubFile extends File {
+  constructor(fileName = 'stub-file') {
+    super([], fileName);
+  }
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/private-actions.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Adds a new item to the upload queue.
+ *
+ * @param $0
+ * @param $0.file                 File
+ * @param [$0.batchId]            Batch ID.
+ * @param [$0.onChange]           Function called each time a file or a temporary representation of the file is available.
+ * @param [$0.onSuccess]          Function called after the file is uploaded.
+ * @param [$0.onBatchSuccess]     Function called after a batch of files is uploaded.
+ * @param [$0.onError]            Function called when an error happens.
+ * @param [$0.additionalData]     Additional data to include in the request.
+ * @param [$0.sourceUrl]          Source URL. Used when importing a file from a URL or optimizing an existing file.
+ * @param [$0.sourceAttachmentId] Source attachment ID. Used when optimizing an existing file for example.
+ * @param [$0.abortController]    Abort controller for upload cancellation.
+ * @param [$0.operations]         List of operations to perform. Defaults to automatically determined list, based on the file.
+ */
+function addItem({
+  file: fileOrBlob,
+  batchId,
+  onChange,
+  onSuccess,
+  onBatchSuccess,
+  onError,
+  additionalData = {},
+  sourceUrl,
+  sourceAttachmentId,
+  abortController,
+  operations
+}) {
+  return async ({
+    dispatch
+  }) => {
+    const itemId = esm_browser_v4();
+
+    // Hardening in case a Blob is passed instead of a File.
+    // See https://github.com/WordPress/gutenberg/pull/65693 for an example.
+    const file = convertBlobToFile(fileOrBlob);
+    let blobUrl;
+
+    // StubFile could be coming from addItemFromUrl().
+    if (!(file instanceof StubFile)) {
+      blobUrl = (0,external_wp_blob_namespaceObject.createBlobURL)(file);
+      dispatch({
+        type: Type.CacheBlobUrl,
+        id: itemId,
+        blobUrl
+      });
+    }
+    dispatch({
+      type: Type.Add,
+      item: {
+        id: itemId,
+        batchId,
+        status: ItemStatus.Processing,
+        sourceFile: cloneFile(file),
+        file,
+        attachment: {
+          url: blobUrl
+        },
+        additionalData: {
+          convert_format: false,
+          ...additionalData
+        },
+        onChange,
+        onSuccess,
+        onBatchSuccess,
+        onError,
+        sourceUrl,
+        sourceAttachmentId,
+        abortController: abortController || new AbortController(),
+        operations: Array.isArray(operations) ? operations : [OperationType.Prepare]
+      }
+    });
+    dispatch.processItem(itemId);
+  };
+}
+
+/**
+ * Processes a single item in the queue.
+ *
+ * Runs the next operation in line and invokes any callbacks.
+ *
+ * @param id Item ID.
+ */
+function processItem(id) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    if (select.isPaused()) {
+      return;
+    }
+    const item = select.getItem(id);
+    const {
+      attachment,
+      onChange,
+      onSuccess,
+      onBatchSuccess,
+      batchId
+    } = item;
+    const operation = Array.isArray(item.operations?.[0]) ? item.operations[0][0] : item.operations?.[0];
+    if (attachment) {
+      onChange?.([attachment]);
+    }
+
+    /*
+     If there are no more operations, the item can be removed from the queue,
+     but only if there are no thumbnails still being side-loaded,
+     or if itself is a side-loaded item.
+    */
+
+    if (!operation) {
+      if (attachment) {
+        onSuccess?.([attachment]);
+      }
+
+      // dispatch.removeItem( id );
+      dispatch.revokeBlobUrls(id);
+      if (batchId && select.isBatchUploaded(batchId)) {
+        onBatchSuccess?.();
+      }
+
+      /*
+       At this point we are dealing with a parent whose children haven't fully uploaded yet.
+       Do nothing and let the removal happen once the last side-loaded item finishes.
+       */
+
+      return;
+    }
+    if (!operation) {
+      // This shouldn't really happen.
+      return;
+    }
+    dispatch({
+      type: Type.OperationStart,
+      id,
+      operation
+    });
+    switch (operation) {
+      case OperationType.Prepare:
+        dispatch.prepareItem(item.id);
+        break;
+      case OperationType.Upload:
+        dispatch.uploadItem(id);
+        break;
+    }
+  };
+}
+
+/**
+ * Returns an action object that pauses all processing in the queue.
+ *
+ * Useful for testing purposes.
+ *
+ * @return Action object.
+ */
+function pauseQueue() {
+  return {
+    type: Type.PauseQueue
+  };
+}
+
+/**
+ * Resumes all processing in the queue.
+ *
+ * Dispatches an action object for resuming the queue itself,
+ * and triggers processing for each remaining item in the queue individually.
+ */
+function resumeQueue() {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    dispatch({
+      type: Type.ResumeQueue
+    });
+    for (const item of select.getAllItems()) {
+      dispatch.processItem(item.id);
+    }
+  };
+}
+
+/**
+ * Removes a specific item from the queue.
+ *
+ * @param id Item ID.
+ */
+function removeItem(id) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    const item = select.getItem(id);
+    if (!item) {
+      return;
+    }
+    dispatch({
+      type: Type.Remove,
+      id
+    });
+  };
+}
+
+/**
+ * Finishes an operation for a given item ID and immediately triggers processing the next one.
+ *
+ * @param id      Item ID.
+ * @param updates Updated item data.
+ */
+function finishOperation(id, updates) {
+  return async ({
+    dispatch
+  }) => {
+    dispatch({
+      type: Type.OperationFinish,
+      id,
+      item: updates
+    });
+    dispatch.processItem(id);
+  };
+}
+
+/**
+ * Prepares an item for initial processing.
+ *
+ * Determines the list of operations to perform for a given image,
+ * depending on its media type.
+ *
+ * For example, HEIF images first need to be converted, resized,
+ * compressed, and then uploaded.
+ *
+ * Or videos need to be compressed, and then need poster generation
+ * before upload.
+ *
+ * @param id Item ID.
+ */
+function prepareItem(id) {
+  return async ({
+    dispatch
+  }) => {
+    const operations = [OperationType.Upload];
+    dispatch({
+      type: Type.AddOperations,
+      id,
+      operations
+    });
+    dispatch.finishOperation(id, {});
+  };
+}
+
+/**
+ * Uploads an item to the server.
+ *
+ * @param id Item ID.
+ */
+function uploadItem(id) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    const item = select.getItem(id);
+    select.getSettings().mediaUpload({
+      filesList: [item.file],
+      additionalData: item.additionalData,
+      signal: item.abortController?.signal,
+      onFileChange: ([attachment]) => {
+        if (!(0,external_wp_blob_namespaceObject.isBlobURL)(attachment.url)) {
+          dispatch.finishOperation(id, {
+            attachment
+          });
+        }
+      },
+      onSuccess: ([attachment]) => {
+        dispatch.finishOperation(id, {
+          attachment
+        });
+      },
+      onError: error => {
+        dispatch.cancelItem(id, error);
+      }
+    });
+  };
+}
+
+/**
+ * Revokes all blob URLs for a given item, freeing up memory.
+ *
+ * @param id Item ID.
+ */
+function revokeBlobUrls(id) {
+  return async ({
+    select,
+    dispatch
+  }) => {
+    const blobUrls = select.getBlobUrls(id);
+    for (const blobUrl of blobUrls) {
+      (0,external_wp_blob_namespaceObject.revokeBlobURL)(blobUrl);
+    }
+    dispatch({
+      type: Type.RevokeBlobUrls,
+      id
+    });
+  };
+}
+
+/**
+ * Returns an action object that pauses all processing in the queue.
+ *
+ * Useful for testing purposes.
+ *
+ * @param settings
+ * @return Action object.
+ */
+function private_actions_updateSettings(settings) {
+  return {
+    type: Type.UpdateSettings,
+    settings
+  };
+}
+
+;// ./node_modules/@wordpress/upload-media/build-module/lock-unlock.js
+/**
+ * WordPress dependencies
+ */
+
+const {
+  lock: lock_unlock_lock,
+  unlock: lock_unlock_unlock
+} = (0,external_wp_privateApis_namespaceObject.__dangerousOptInToUnstableAPIsOnlyForCoreModules)('I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.', '@wordpress/upload-media');
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/constants.js
+const constants_STORE_NAME = 'core/upload-media';
+
+;// ./node_modules/@wordpress/upload-media/build-module/store/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+/**
+ * Media upload data store configuration.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#registerStore
+ */
+const store_storeConfig = {
+  reducer: store_reducer,
+  selectors: store_selectors_namespaceObject,
+  actions: store_actions_namespaceObject
+};
+
+/**
+ * Store definition for the media upload namespace.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/data/README.md#createReduxStore
+ */
+const store_store = (0,external_wp_data_namespaceObject.createReduxStore)(constants_STORE_NAME, {
+  reducer: store_reducer,
+  selectors: store_selectors_namespaceObject,
+  actions: store_actions_namespaceObject
+});
+(0,external_wp_data_namespaceObject.register)(store_store);
+// @ts-ignore
+lock_unlock_unlock(store_store).registerPrivateActions(store_private_actions_namespaceObject);
+// @ts-ignore
+lock_unlock_unlock(store_store).registerPrivateSelectors(store_private_selectors_namespaceObject);
+
+;// ./node_modules/@wordpress/upload-media/build-module/components/provider/with-registry-provider.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function getSubRegistry(subRegistries, registry, useSubRegistry) {
+  if (!useSubRegistry) {
+    return registry;
+  }
+  let subRegistry = subRegistries.get(registry);
+  if (!subRegistry) {
+    subRegistry = (0,external_wp_data_namespaceObject.createRegistry)({}, registry);
+    subRegistry.registerStore(constants_STORE_NAME, store_storeConfig);
+    subRegistries.set(registry, subRegistry);
+  }
+  return subRegistry;
+}
+const withRegistryProvider = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => ({
+  useSubRegistry = true,
+  ...props
+}) => {
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const [subRegistries] = (0,external_wp_element_namespaceObject.useState)(() => new WeakMap());
+  const subRegistry = getSubRegistry(subRegistries, registry, useSubRegistry);
+  if (subRegistry === registry) {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+      registry: registry,
+      ...props
+    });
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.RegistryProvider, {
+    value: subRegistry,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+      registry: subRegistry,
+      ...props
+    })
+  });
+}, 'withRegistryProvider');
+/* harmony default export */ const with_registry_provider = (withRegistryProvider);
+
+;// ./node_modules/@wordpress/upload-media/build-module/components/provider/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const MediaUploadProvider = with_registry_provider(props => {
+  const {
+    children,
+    settings
+  } = props;
+  const {
+    updateSettings
+  } = lock_unlock_unlock((0,external_wp_data_namespaceObject.useDispatch)(store_store));
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    updateSettings(settings);
+  }, [settings, updateSettings]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: children
+  });
+});
+/* harmony default export */ const provider = (MediaUploadProvider);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/provider/with-registry-provider.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function with_registry_provider_getSubRegistry(subRegistries, registry, useSubRegistry) {
+  if (!useSubRegistry) {
+    return registry;
+  }
+  let subRegistry = subRegistries.get(registry);
+  if (!subRegistry) {
+    subRegistry = (0,external_wp_data_namespaceObject.createRegistry)({}, registry);
+    subRegistry.registerStore(STORE_NAME, storeConfig);
+    subRegistries.set(registry, subRegistry);
+  }
+  return subRegistry;
+}
+const with_registry_provider_withRegistryProvider = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => ({
+  useSubRegistry = true,
+  ...props
+}) => {
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const [subRegistries] = (0,external_wp_element_namespaceObject.useState)(() => new WeakMap());
+  const subRegistry = with_registry_provider_getSubRegistry(subRegistries, registry, useSubRegistry);
+  if (subRegistry === registry) {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+      registry: registry,
+      ...props
+    });
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.RegistryProvider, {
+    value: subRegistry,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+      registry: subRegistry,
+      ...props
+    })
+  });
+}, 'withRegistryProvider');
+/* harmony default export */ const provider_with_registry_provider = (with_registry_provider_withRegistryProvider);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/provider/use-block-sync.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+const use_block_sync_noop = () => {};
+
+/**
+ * A function to call when the block value has been updated in the block-editor
+ * store.
+ *
+ * @callback onBlockUpdate
+ * @param {Object[]} blocks  The updated blocks.
+ * @param {Object}   options The updated block options, such as selectionStart
+ *                           and selectionEnd.
+ */
+
+/**
+ * useBlockSync is a side effect which handles bidirectional sync between the
+ * block-editor store and a controlling data source which provides blocks. This
+ * is most commonly used by the BlockEditorProvider to synchronize the contents
+ * of the block-editor store with the root entity, like a post.
+ *
+ * Another example would be the template part block, which provides blocks from
+ * a separate entity data source than a root entity. This hook syncs edits to
+ * the template part in the block editor back to the entity and vice-versa.
+ *
+ * Here are some of its basic functions:
+ * - Initializes the block-editor store for the given clientID to the blocks
+ *   given via props.
+ * - Adds incoming changes (like undo) to the block-editor store.
+ * - Adds outgoing changes (like editing content) to the controlling entity,
+ *   determining if a change should be considered persistent or not.
+ * - Handles edge cases and race conditions which occur in those operations.
+ * - Ignores changes which happen to other entities (like nested inner block
+ *   controllers.
+ * - Passes selection state from the block-editor store to the controlling entity.
+ *
+ * @param {Object}        props           Props for the block sync hook
+ * @param {string}        props.clientId  The client ID of the inner block controller.
+ *                                        If none is passed, then it is assumed to be a
+ *                                        root controller rather than an inner block
+ *                                        controller.
+ * @param {Object[]}      props.value     The control value for the blocks. This value
+ *                                        is used to initialize the block-editor store
+ *                                        and for resetting the blocks to incoming
+ *                                        changes like undo.
+ * @param {Object}        props.selection The selection state responsible to restore the selection on undo/redo.
+ * @param {onBlockUpdate} props.onChange  Function to call when a persistent
+ *                                        change has been made in the block-editor blocks
+ *                                        for the given clientId. For example, after
+ *                                        this function is called, an entity is marked
+ *                                        dirty because it has changes to save.
+ * @param {onBlockUpdate} props.onInput   Function to call when a non-persistent
+ *                                        change has been made in the block-editor blocks
+ *                                        for the given clientId. When this is called,
+ *                                        controlling sources do not become dirty.
+ */
+function useBlockSync({
+  clientId = null,
+  value: controlledBlocks,
+  selection: controlledSelection,
+  onChange = use_block_sync_noop,
+  onInput = use_block_sync_noop
+}) {
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const {
+    resetBlocks,
+    resetSelection,
+    replaceInnerBlocks,
+    setHasControlledInnerBlocks,
+    __unstableMarkNextChangeAsNotPersistent
+  } = registry.dispatch(store);
+  const {
+    getBlockName,
+    getBlocks,
+    getSelectionStart,
+    getSelectionEnd
+  } = registry.select(store);
+  const isControlled = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    return !clientId || select(store).areInnerBlocksControlled(clientId);
   }, [clientId]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-context/index.js
+  const pendingChangesRef = (0,external_wp_element_namespaceObject.useRef)({
+    incoming: null,
+    outgoing: []
+  });
+  const subscribedRef = (0,external_wp_element_namespaceObject.useRef)(false);
+  const setControlledBlocks = () => {
+    if (!controlledBlocks) {
+      return;
+    }
+
+    // We don't need to persist this change because we only replace
+    // controlled inner blocks when the change was caused by an entity,
+    // and so it would already be persisted.
+    __unstableMarkNextChangeAsNotPersistent();
+    if (clientId) {
+      // It is important to batch here because otherwise,
+      // as soon as `setHasControlledInnerBlocks` is called
+      // the effect to restore might be triggered
+      // before the actual blocks get set properly in state.
+      registry.batch(() => {
+        setHasControlledInnerBlocks(clientId, true);
+        const storeBlocks = controlledBlocks.map(block => (0,external_wp_blocks_namespaceObject.cloneBlock)(block));
+        if (subscribedRef.current) {
+          pendingChangesRef.current.incoming = storeBlocks;
+        }
+        __unstableMarkNextChangeAsNotPersistent();
+        replaceInnerBlocks(clientId, storeBlocks);
+      });
+    } else {
+      if (subscribedRef.current) {
+        pendingChangesRef.current.incoming = controlledBlocks;
+      }
+      resetBlocks(controlledBlocks);
+    }
+  };
+
+  // Clean up the changes made by setControlledBlocks() when the component
+  // containing useBlockSync() unmounts.
+  const unsetControlledBlocks = () => {
+    __unstableMarkNextChangeAsNotPersistent();
+    if (clientId) {
+      setHasControlledInnerBlocks(clientId, false);
+      __unstableMarkNextChangeAsNotPersistent();
+      replaceInnerBlocks(clientId, []);
+    } else {
+      resetBlocks([]);
+    }
+  };
+
+  // Add a subscription to the block-editor registry to detect when changes
+  // have been made. This lets us inform the data source of changes. This
+  // is an effect so that the subscriber can run synchronously without
+  // waiting for React renders for changes.
+  const onInputRef = (0,external_wp_element_namespaceObject.useRef)(onInput);
+  const onChangeRef = (0,external_wp_element_namespaceObject.useRef)(onChange);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    onInputRef.current = onInput;
+    onChangeRef.current = onChange;
+  }, [onInput, onChange]);
+
+  // Determine if blocks need to be reset when they change.
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (pendingChangesRef.current.outgoing.includes(controlledBlocks)) {
+      // Skip block reset if the value matches expected outbound sync
+      // triggered by this component by a preceding change detection.
+      // Only skip if the value matches expectation, since a reset should
+      // still occur if the value is modified (not equal by reference),
+      // to allow that the consumer may apply modifications to reflect
+      // back on the editor.
+      if (pendingChangesRef.current.outgoing[pendingChangesRef.current.outgoing.length - 1] === controlledBlocks) {
+        pendingChangesRef.current.outgoing = [];
+      }
+    } else if (getBlocks(clientId) !== controlledBlocks) {
+      // Reset changing value in all other cases than the sync described
+      // above. Since this can be reached in an update following an out-
+      // bound sync, unset the outbound value to avoid considering it in
+      // subsequent renders.
+      pendingChangesRef.current.outgoing = [];
+      setControlledBlocks();
+      if (controlledSelection) {
+        resetSelection(controlledSelection.selectionStart, controlledSelection.selectionEnd, controlledSelection.initialPosition);
+      }
+    }
+  }, [controlledBlocks, clientId]);
+  const isMountedRef = (0,external_wp_element_namespaceObject.useRef)(false);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    // On mount, controlled blocks are already set in the effect above.
+    if (!isMountedRef.current) {
+      isMountedRef.current = true;
+      return;
+    }
+
+    // When the block becomes uncontrolled, it means its inner state has been reset
+    // we need to take the blocks again from the external value property.
+    if (!isControlled) {
+      pendingChangesRef.current.outgoing = [];
+      setControlledBlocks();
+    }
+  }, [isControlled]);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const {
+      getSelectedBlocksInitialCaretPosition,
+      isLastBlockChangePersistent,
+      __unstableIsLastBlockChangeIgnored,
+      areInnerBlocksControlled
+    } = registry.select(store);
+    let blocks = getBlocks(clientId);
+    let isPersistent = isLastBlockChangePersistent();
+    let previousAreBlocksDifferent = false;
+    subscribedRef.current = true;
+    const unsubscribe = registry.subscribe(() => {
+      // Sometimes, when changing block lists, lingering subscriptions
+      // might trigger before they are cleaned up. If the block for which
+      // the subscription runs is no longer in the store, this would clear
+      // its parent entity's block list. To avoid this, we bail out if
+      // the subscription is triggering for a block (`clientId !== null`)
+      // and its block name can't be found because it's not on the list.
+      // (`getBlockName( clientId ) === null`).
+      if (clientId !== null && getBlockName(clientId) === null) {
+        return;
+      }
+
+      // When RESET_BLOCKS on parent blocks get called, the controlled blocks
+      // can reset to uncontrolled, in these situations, it means we need to populate
+      // the blocks again from the external blocks (the value property here)
+      // and we should stop triggering onChange
+      const isStillControlled = !clientId || areInnerBlocksControlled(clientId);
+      if (!isStillControlled) {
+        return;
+      }
+      const newIsPersistent = isLastBlockChangePersistent();
+      const newBlocks = getBlocks(clientId);
+      const areBlocksDifferent = newBlocks !== blocks;
+      blocks = newBlocks;
+      if (areBlocksDifferent && (pendingChangesRef.current.incoming || __unstableIsLastBlockChangeIgnored())) {
+        pendingChangesRef.current.incoming = null;
+        isPersistent = newIsPersistent;
+        return;
+      }
+
+      // Since we often dispatch an action to mark the previous action as
+      // persistent, we need to make sure that the blocks changed on the
+      // previous action before committing the change.
+      const didPersistenceChange = previousAreBlocksDifferent && !areBlocksDifferent && newIsPersistent && !isPersistent;
+      if (areBlocksDifferent || didPersistenceChange) {
+        isPersistent = newIsPersistent;
+        // We know that onChange/onInput will update controlledBlocks.
+        // We need to be aware that it was caused by an outgoing change
+        // so that we do not treat it as an incoming change later on,
+        // which would cause a block reset.
+        pendingChangesRef.current.outgoing.push(blocks);
+
+        // Inform the controlling entity that changes have been made to
+        // the block-editor store they should be aware about.
+        const updateParent = isPersistent ? onChangeRef.current : onInputRef.current;
+        updateParent(blocks, {
+          selection: {
+            selectionStart: getSelectionStart(),
+            selectionEnd: getSelectionEnd(),
+            initialPosition: getSelectedBlocksInitialCaretPosition()
+          }
+        });
+      }
+      previousAreBlocksDifferent = areBlocksDifferent;
+    }, store);
+    return () => {
+      subscribedRef.current = false;
+      unsubscribe();
+    };
+  }, [registry, clientId]);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    return () => {
+      unsetControlledBlocks();
+    };
+  }, []);
+}
+
+;// external ["wp","keyboardShortcuts"]
+const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
+;// ./node_modules/@wordpress/block-editor/build-module/components/keyboard-shortcuts/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+function KeyboardShortcuts() {
+  return null;
+}
+function KeyboardShortcutsRegister() {
+  // Registering the shortcuts.
+  const {
+    registerShortcut
+  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    registerShortcut({
+      name: 'core/block-editor/copy',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Copy the selected block(s).'),
+      keyCombination: {
+        modifier: 'primary',
+        character: 'c'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/cut',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Cut the selected block(s).'),
+      keyCombination: {
+        modifier: 'primary',
+        character: 'x'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/paste',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Paste the selected block(s).'),
+      keyCombination: {
+        modifier: 'primary',
+        character: 'v'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/duplicate',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Duplicate the selected block(s).'),
+      keyCombination: {
+        modifier: 'primaryShift',
+        character: 'd'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/remove',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Remove the selected block(s).'),
+      keyCombination: {
+        modifier: 'access',
+        character: 'z'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/insert-before',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Insert a new block before the selected block(s).'),
+      keyCombination: {
+        modifier: 'primaryAlt',
+        character: 't'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/insert-after',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Insert a new block after the selected block(s).'),
+      keyCombination: {
+        modifier: 'primaryAlt',
+        character: 'y'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/delete-multi-selection',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Delete selection.'),
+      keyCombination: {
+        character: 'del'
+      },
+      aliases: [{
+        character: 'backspace'
+      }]
+    });
+    registerShortcut({
+      name: 'core/block-editor/select-all',
+      category: 'selection',
+      description: (0,external_wp_i18n_namespaceObject.__)('Select all text when typing. Press again to select all blocks.'),
+      keyCombination: {
+        modifier: 'primary',
+        character: 'a'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/unselect',
+      category: 'selection',
+      description: (0,external_wp_i18n_namespaceObject.__)('Clear selection.'),
+      keyCombination: {
+        character: 'escape'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/multi-text-selection',
+      category: 'selection',
+      description: (0,external_wp_i18n_namespaceObject.__)('Select text across multiple blocks.'),
+      keyCombination: {
+        modifier: 'shift',
+        character: 'arrow'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/focus-toolbar',
+      category: 'global',
+      description: (0,external_wp_i18n_namespaceObject.__)('Navigate to the nearest toolbar.'),
+      keyCombination: {
+        modifier: 'alt',
+        character: 'F10'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/move-up',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Move the selected block(s) up.'),
+      keyCombination: {
+        modifier: 'secondary',
+        character: 't'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/move-down',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Move the selected block(s) down.'),
+      keyCombination: {
+        modifier: 'secondary',
+        character: 'y'
+      }
+    });
+
+    // List view shortcuts.
+    registerShortcut({
+      name: 'core/block-editor/collapse-list-view',
+      category: 'list-view',
+      description: (0,external_wp_i18n_namespaceObject.__)('Collapse all other items.'),
+      keyCombination: {
+        modifier: 'alt',
+        character: 'l'
+      }
+    });
+    registerShortcut({
+      name: 'core/block-editor/group',
+      category: 'block',
+      description: (0,external_wp_i18n_namespaceObject.__)('Create a group block from the selected multiple blocks.'),
+      keyCombination: {
+        modifier: 'primary',
+        character: 'g'
+      }
+    });
+  }, [registerShortcut]);
+  return null;
+}
+KeyboardShortcuts.Register = KeyboardShortcutsRegister;
+/* harmony default export */ const keyboard_shortcuts = (KeyboardShortcuts);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/provider/use-media-upload-settings.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * React hook used to compute the media upload settings to use in the post editor.
+ *
+ * @param {Object} settings Media upload settings prop.
+ *
+ * @return {Object} Media upload settings.
+ */
+function useMediaUploadSettings(settings = {}) {
+  return (0,external_wp_element_namespaceObject.useMemo)(() => ({
+    mediaUpload: settings.mediaUpload,
+    mediaSideload: settings.mediaSideload,
+    maxUploadFileSize: settings.maxUploadFileSize,
+    allowedMimeTypes: settings.allowedMimeTypes
+  }), [settings]);
+}
+/* harmony default export */ const use_media_upload_settings = (useMediaUploadSettings);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/provider/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+/** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */
+
+const provider_noop = () => {};
+
+/**
+ * Upload a media file when the file upload button is activated
+ * or when adding a file to the editor via drag & drop.
+ *
+ * @param {WPDataRegistry} registry
+ * @param {Object}         $3                Parameters object passed to the function.
+ * @param {Array}          $3.allowedTypes   Array with the types of media that can be uploaded, if unset all types are allowed.
+ * @param {Object}         $3.additionalData Additional data to include in the request.
+ * @param {Array<File>}    $3.filesList      List of files.
+ * @param {Function}       $3.onError        Function called when an error happens.
+ * @param {Function}       $3.onFileChange   Function called each time a file or a temporary representation of the file is available.
+ * @param {Function}       $3.onSuccess      Function called once a file has completely finished uploading, including thumbnails.
+ * @param {Function}       $3.onBatchSuccess Function called once all files in a group have completely finished uploading, including thumbnails.
+ */
+function mediaUpload(registry, {
+  allowedTypes,
+  additionalData = {},
+  filesList,
+  onError = provider_noop,
+  onFileChange,
+  onSuccess,
+  onBatchSuccess
+}) {
+  void registry.dispatch(store_store).addItems({
+    files: filesList,
+    onChange: onFileChange,
+    onSuccess,
+    onBatchSuccess,
+    onError: ({
+      message
+    }) => onError(message),
+    additionalData,
+    allowedTypes
+  });
+}
+const ExperimentalBlockEditorProvider = provider_with_registry_provider(props => {
+  const {
+    settings: _settings,
+    registry,
+    stripExperimentalSettings = false
+  } = props;
+  const mediaUploadSettings = use_media_upload_settings(_settings);
+  let settings = _settings;
+  if (window.__experimentalMediaProcessing && _settings.mediaUpload) {
+    // Create a new variable so that the original props.settings.mediaUpload is not modified.
+    settings = (0,external_wp_element_namespaceObject.useMemo)(() => ({
+      ..._settings,
+      mediaUpload: mediaUpload.bind(null, registry)
+    }), [_settings, registry]);
+  }
+  const {
+    __experimentalUpdateSettings
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    __experimentalUpdateSettings({
+      ...settings,
+      __internalIsInitialized: true
+    }, {
+      stripExperimentalSettings,
+      reset: true
+    });
+  }, [settings, stripExperimentalSettings, __experimentalUpdateSettings]);
+
+  // Syncs the entity provider with changes in the block-editor store.
+  useBlockSync(props);
+  const children = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.SlotFillProvider, {
+    passthrough: true,
+    children: [!settings?.isPreviewMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(keyboard_shortcuts.Register, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRefsProvider, {
+      children: props.children
+    })]
+  });
+  if (window.__experimentalMediaProcessing) {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(provider, {
+      settings: mediaUploadSettings,
+      useSubRegistry: false,
+      children: children
+    });
+  }
+  return children;
+});
+const BlockEditorProvider = props => {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ExperimentalBlockEditorProvider, {
+    ...props,
+    stripExperimentalSettings: true,
+    children: props.children
+  });
+};
+/* harmony default export */ const components_provider = (BlockEditorProvider);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-context/index.js
 /**
  * WordPress dependencies
  */
@@ -39097,22 +39236,280 @@
 }
 /* harmony default export */ const block_context = (block_context_Context);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/edit.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/utils/block-bindings.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+const DEFAULT_ATTRIBUTE = '__default';
+const PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';
+const BLOCK_BINDINGS_ALLOWED_BLOCKS = {
+  'core/paragraph': ['content'],
+  'core/heading': ['content'],
+  'core/image': ['id', 'url', 'title', 'alt'],
+  'core/button': ['url', 'text', 'linkTarget', 'rel']
+};
+
+/**
+ * Checks if the given object is empty.
+ *
+ * @param {?Object} object The object to check.
+ *
+ * @return {boolean} Whether the object is empty.
+ */
+function isObjectEmpty(object) {
+  return !object || Object.keys(object).length === 0;
+}
+
+/**
+ * Based on the given block name, checks if it is possible to bind the block.
+ *
+ * @param {string} blockName The name of the block.
+ *
+ * @return {boolean} Whether it is possible to bind the block to sources.
+ */
+function canBindBlock(blockName) {
+  return blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;
+}
+
+/**
+ * Based on the given block name and attribute name, checks if it is possible to bind the block attribute.
+ *
+ * @param {string} blockName     The name of the block.
+ * @param {string} attributeName The name of attribute.
+ *
+ * @return {boolean} Whether it is possible to bind the block attribute.
+ */
+function canBindAttribute(blockName, attributeName) {
+  return canBindBlock(blockName) && BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName].includes(attributeName);
+}
+
+/**
+ * Gets the bindable attributes for a given block.
+ *
+ * @param {string} blockName The name of the block.
+ *
+ * @return {string[]} The bindable attributes for the block.
+ */
+function getBindableAttributes(blockName) {
+  return BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName];
+}
+
+/**
+ * Checks if the block has the `__default` binding for pattern overrides.
+ *
+ * @param {?Record<string, object>} bindings A block's bindings from the metadata attribute.
+ *
+ * @return {boolean} Whether the block has the `__default` binding for pattern overrides.
+ */
+function hasPatternOverridesDefaultBinding(bindings) {
+  return bindings?.[DEFAULT_ATTRIBUTE]?.source === PATTERN_OVERRIDES_SOURCE;
+}
+
+/**
+ * Returns the bindings with the `__default` binding for pattern overrides
+ * replaced with the full-set of supported attributes. e.g.:
+ *
+ * - bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`
+ * - bindings returned: `{ content: { source: 'core/pattern-overrides' } }`
+ *
+ * @param {string}                  blockName The block name (e.g. 'core/paragraph').
+ * @param {?Record<string, object>} bindings  A block's bindings from the metadata attribute.
+ *
+ * @return {Object} The bindings with default replaced for pattern overrides.
+ */
+function replacePatternOverridesDefaultBinding(blockName, bindings) {
+  // The `__default` binding currently only works for pattern overrides.
+  if (hasPatternOverridesDefaultBinding(bindings)) {
+    const supportedAttributes = BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName];
+    const bindingsWithDefaults = {};
+    for (const attributeName of supportedAttributes) {
+      // If the block has mixed binding sources, retain any non pattern override bindings.
+      const bindingSource = bindings[attributeName] ? bindings[attributeName] : {
+        source: PATTERN_OVERRIDES_SOURCE
+      };
+      bindingsWithDefaults[attributeName] = bindingSource;
+    }
+    return bindingsWithDefaults;
+  }
+  return bindings;
+}
+
+/**
+ * Contains utils to update the block `bindings` metadata.
+ *
+ * @typedef {Object} WPBlockBindingsUtils
+ *
+ * @property {Function} updateBlockBindings    Updates the value of the bindings connected to block attributes.
+ * @property {Function} removeAllBlockBindings Removes the bindings property of the `metadata` attribute.
+ */
+
+/**
+ * Retrieves the existing utils needed to update the block `bindings` metadata.
+ * They can be used to create, modify, or remove connections from the existing block attributes.
+ *
+ * It contains the following utils:
+ * - `updateBlockBindings`: Updates the value of the bindings connected to block attributes. It can be used to remove a specific binding by setting the value to `undefined`.
+ * - `removeAllBlockBindings`: Removes the bindings property of the `metadata` attribute.
+ *
+ * @since 6.7.0 Introduced in WordPress core.
+ *
+ * @param {?string} clientId Optional block client ID. If not set, it will use the current block client ID from the context.
+ *
+ * @return {?WPBlockBindingsUtils} Object containing the block bindings utils.
+ *
+ * @example
+ * ```js
+ * import { useBlockBindingsUtils } from '@wordpress/block-editor'
+ * const { updateBlockBindings, removeAllBlockBindings } = useBlockBindingsUtils();
+ *
+ * // Update url and alt attributes.
+ * updateBlockBindings( {
+ *     url: {
+ *         source: 'core/post-meta',
+ *         args: {
+ *             key: 'url_custom_field',
+ *         },
+ *     },
+ *     alt: {
+ *         source: 'core/post-meta',
+ *         args: {
+ *             key: 'text_custom_field',
+ *         },
+ *     },
+ * } );
+ *
+ * // Remove binding from url attribute.
+ * updateBlockBindings( { url: undefined } );
+ *
+ * // Remove bindings from all attributes.
+ * removeAllBlockBindings();
+ * ```
+ */
+function useBlockBindingsUtils(clientId) {
+  const {
+    clientId: contextClientId
+  } = useBlockEditContext();
+  const blockClientId = clientId || contextClientId;
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const {
+    getBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useRegistry)().select(store);
+
+  /**
+   * Updates the value of the bindings connected to block attributes.
+   * It removes the binding when the new value is `undefined`.
+   *
+   * @param {Object} bindings        Bindings including the attributes to update and the new object.
+   * @param {string} bindings.source The source name to connect to.
+   * @param {Object} [bindings.args] Object containing the arguments needed by the source.
+   *
+   * @example
+   * ```js
+   * import { useBlockBindingsUtils } from '@wordpress/block-editor'
+   *
+   * const { updateBlockBindings } = useBlockBindingsUtils();
+   * updateBlockBindings( {
+   *     url: {
+   *         source: 'core/post-meta',
+   *         args: {
+   *             key: 'url_custom_field',
+   *         },
+   * 	   },
+   *     alt: {
+   *         source: 'core/post-meta',
+   *         args: {
+   *             key: 'text_custom_field',
+   *         },
+   * 	   }
+   * } );
+   * ```
+   */
+  const updateBlockBindings = bindings => {
+    const {
+      metadata: {
+        bindings: currentBindings,
+        ...metadata
+      } = {}
+    } = getBlockAttributes(blockClientId);
+    const newBindings = {
+      ...currentBindings
+    };
+    Object.entries(bindings).forEach(([attribute, binding]) => {
+      if (!binding && newBindings[attribute]) {
+        delete newBindings[attribute];
+        return;
+      }
+      newBindings[attribute] = binding;
+    });
+    const newMetadata = {
+      ...metadata,
+      bindings: newBindings
+    };
+    if (isObjectEmpty(newMetadata.bindings)) {
+      delete newMetadata.bindings;
+    }
+    updateBlockAttributes(blockClientId, {
+      metadata: isObjectEmpty(newMetadata) ? undefined : newMetadata
+    });
+  };
+
+  /**
+   * Removes the bindings property of the `metadata` attribute.
+   *
+   * @example
+   * ```js
+   * import { useBlockBindingsUtils } from '@wordpress/block-editor'
+   *
+   * const { removeAllBlockBindings } = useBlockBindingsUtils();
+   * removeAllBlockBindings();
+   * ```
+   */
+  const removeAllBlockBindings = () => {
+    const {
+      metadata: {
+        bindings,
+        ...metadata
+      } = {}
+    } = getBlockAttributes(blockClientId);
+    updateBlockAttributes(blockClientId, {
+      metadata: isObjectEmpty(metadata) ? undefined : metadata
+    });
+  };
+  return {
+    updateBlockBindings,
+    removeAllBlockBindings
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-edit/edit.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
 
 
 /**
@@ -39145,38 +39542,171 @@
 const EditWithFilters = (0,external_wp_components_namespaceObject.withFilters)('editor.BlockEdit')(Edit);
 const EditWithGeneratedProps = props => {
   const {
-    attributes = {},
-    name
+    name,
+    clientId,
+    attributes,
+    setAttributes
   } = props;
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
   const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name);
   const blockContext = (0,external_wp_element_namespaceObject.useContext)(block_context);
-
-  // Assign context values using the block type's declared context needs.
-  const context = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    return blockType && blockType.usesContext ? Object.fromEntries(Object.entries(blockContext).filter(([key]) => blockType.usesContext.includes(key))) : DEFAULT_BLOCK_CONTEXT;
-  }, [blockType, blockContext]);
+  const registeredSources = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(external_wp_blocks_namespaceObject.store)).getAllBlockBindingsSources(), []);
+  const {
+    blockBindings,
+    context,
+    hasPatternOverrides
+  } = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    // Assign context values using the block type's declared context needs.
+    const computedContext = blockType?.usesContext ? Object.fromEntries(Object.entries(blockContext).filter(([key]) => blockType.usesContext.includes(key))) : DEFAULT_BLOCK_CONTEXT;
+    // Add context requested by Block Bindings sources.
+    if (attributes?.metadata?.bindings) {
+      Object.values(attributes?.metadata?.bindings || {}).forEach(binding => {
+        registeredSources[binding?.source]?.usesContext?.forEach(key => {
+          computedContext[key] = blockContext[key];
+        });
+      });
+    }
+    return {
+      blockBindings: replacePatternOverridesDefaultBinding(name, attributes?.metadata?.bindings),
+      context: computedContext,
+      hasPatternOverrides: hasPatternOverridesDefaultBinding(attributes?.metadata?.bindings)
+    };
+  }, [name, blockType?.usesContext, blockContext, attributes?.metadata?.bindings, registeredSources]);
+  const computedAttributes = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    if (!blockBindings) {
+      return attributes;
+    }
+    const attributesFromSources = {};
+    const blockBindingsBySource = new Map();
+    for (const [attributeName, binding] of Object.entries(blockBindings)) {
+      const {
+        source: sourceName,
+        args: sourceArgs
+      } = binding;
+      const source = registeredSources[sourceName];
+      if (!source || !canBindAttribute(name, attributeName)) {
+        continue;
+      }
+      blockBindingsBySource.set(source, {
+        ...blockBindingsBySource.get(source),
+        [attributeName]: {
+          args: sourceArgs
+        }
+      });
+    }
+    if (blockBindingsBySource.size) {
+      for (const [source, bindings] of blockBindingsBySource) {
+        // Get values in batch if the source supports it.
+        let values = {};
+        if (!source.getValues) {
+          Object.keys(bindings).forEach(attr => {
+            // Default to the the source label when `getValues` doesn't exist.
+            values[attr] = source.label;
+          });
+        } else {
+          values = source.getValues({
+            select,
+            context,
+            clientId,
+            bindings
+          });
+        }
+        for (const [attributeName, value] of Object.entries(values)) {
+          if (attributeName === 'url' && (!value || !isURLLike(value))) {
+            // Return null if value is not a valid URL.
+            attributesFromSources[attributeName] = null;
+          } else {
+            attributesFromSources[attributeName] = value;
+          }
+        }
+      }
+    }
+    return {
+      ...attributes,
+      ...attributesFromSources
+    };
+  }, [attributes, blockBindings, clientId, context, name, registeredSources]);
+  const setBoundAttributes = (0,external_wp_element_namespaceObject.useCallback)(nextAttributes => {
+    if (!blockBindings) {
+      setAttributes(nextAttributes);
+      return;
+    }
+    registry.batch(() => {
+      const keptAttributes = {
+        ...nextAttributes
+      };
+      const blockBindingsBySource = new Map();
+
+      // Loop only over the updated attributes to avoid modifying the bound ones that haven't changed.
+      for (const [attributeName, newValue] of Object.entries(keptAttributes)) {
+        if (!blockBindings[attributeName] || !canBindAttribute(name, attributeName)) {
+          continue;
+        }
+        const binding = blockBindings[attributeName];
+        const source = registeredSources[binding?.source];
+        if (!source?.setValues) {
+          continue;
+        }
+        blockBindingsBySource.set(source, {
+          ...blockBindingsBySource.get(source),
+          [attributeName]: {
+            args: binding.args,
+            newValue
+          }
+        });
+        delete keptAttributes[attributeName];
+      }
+      if (blockBindingsBySource.size) {
+        for (const [source, bindings] of blockBindingsBySource) {
+          source.setValues({
+            select: registry.select,
+            dispatch: registry.dispatch,
+            context,
+            clientId,
+            bindings
+          });
+        }
+      }
+      const hasParentPattern = !!context['pattern/overrides'];
+      if (
+      // Don't update non-connected attributes if the block is using pattern overrides
+      // and the editing is happening while overriding the pattern (not editing the original).
+      !(hasPatternOverrides && hasParentPattern) && Object.keys(keptAttributes).length) {
+        // Don't update caption and href until they are supported.
+        if (hasPatternOverrides) {
+          delete keptAttributes.caption;
+          delete keptAttributes.href;
+        }
+        setAttributes(keptAttributes);
+      }
+    });
+  }, [blockBindings, clientId, context, hasPatternOverrides, setAttributes, registeredSources, name, registry]);
   if (!blockType) {
     return null;
   }
   if (blockType.apiVersion > 1) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditWithFilters, {
       ...props,
-      context: context
+      attributes: computedAttributes,
+      context: context,
+      setAttributes: setBoundAttributes
     });
   }
 
   // Generate a class name for the block's editable form.
   const generatedClassName = (0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockType, 'className', true) ? (0,external_wp_blocks_namespaceObject.getBlockDefaultClassName)(name) : null;
-  const className = dist_clsx(generatedClassName, attributes.className, props.className);
+  const className = dist_clsx(generatedClassName, attributes?.className, props.className);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditWithFilters, {
     ...props,
+    attributes: computedAttributes,
+    className: className,
     context: context,
-    className: className
+    setAttributes: setBoundAttributes
   });
 };
 /* harmony default export */ const block_edit_edit = (EditWithGeneratedProps);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/more-vertical.js
+;// ./node_modules/@wordpress/icons/build-module/library/more-vertical.js
 /**
  * WordPress dependencies
  */
@@ -39191,17 +39721,15 @@
 });
 /* harmony default export */ const more_vertical = (moreVertical);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/warning/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/warning/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -39224,9 +39752,9 @@
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
           className: "block-editor-warning__message",
           children: children
-        }), (external_wp_element_namespaceObject.Children.count(actions) > 0 || secondaryActions) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+        }), (actions?.length > 0 || secondaryActions) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
           className: "block-editor-warning__actions",
-          children: [external_wp_element_namespaceObject.Children.count(actions) > 0 && external_wp_element_namespaceObject.Children.map(actions, (action, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+          children: [actions?.length > 0 && actions.map((action, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
             className: "block-editor-warning__action",
             children: action
           }, i)), secondaryActions && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
@@ -39256,19 +39784,18 @@
  */
 /* harmony default export */ const warning = (Warning);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/multiple-usage-warning.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-edit/multiple-usage-warning.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -39283,10 +39810,12 @@
   const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(name);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(warning, {
     actions: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       variant: "secondary",
       onClick: () => selectBlock(originalBlockClientId),
       children: (0,external_wp_i18n_namespaceObject.__)('Find original')
     }, "find-original"), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       variant: "secondary",
       onClick: () => onReplace([]),
       children: (0,external_wp_i18n_namespaceObject.__)('Remove')
@@ -39297,14 +39826,14 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/private-block-context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/private-block-context.js
 /**
  * WordPress dependencies
  */
 
 const PrivateBlockContext = (0,external_wp_element_namespaceObject.createContext)({});
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-edit/index.js
 /**
  * WordPress dependencies
  */
@@ -39329,7 +39858,6 @@
  */
 
 
-
 function BlockEdit({
   mayDisplayControls,
   mayDisplayParentControls,
@@ -39388,11 +39916,10 @@
 
 // EXTERNAL MODULE: ./node_modules/diff/lib/diff/character.js
 var character = __webpack_require__(8021);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-compare/block-view.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-compare/block-view.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -39424,6 +39951,7 @@
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-block-compare__action",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         variant: "secondary",
         tabIndex: "0",
         onClick: action,
@@ -39433,7 +39961,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-compare/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-compare/index.js
 /**
  * External dependencies
  */
@@ -39453,7 +39981,6 @@
  */
 
 
-
 function BlockCompare({
   block,
   onKeep,
@@ -39505,21 +40032,19 @@
 }
 /* harmony default export */ const block_compare = (BlockCompare);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-invalid-warning.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-invalid-warning.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -39588,12 +40113,13 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(warning, {
       actions: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         onClick: convert.toRecoveredBlock,
         variant: "primary",
-        children: (0,external_wp_i18n_namespaceObject.__)('Attempt Block Recovery')
+        children: (0,external_wp_i18n_namespaceObject.__)('Attempt recovery')
       }, "recover")],
       secondaryActions: secondaryActions,
-      children: (0,external_wp_i18n_namespaceObject.__)('This block contains unexpected or invalid content.')
+      children: (0,external_wp_i18n_namespaceObject.__)('Block contains unexpected or invalid content.')
     }), compare && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
       title:
       // translators: Dialog title to fix block content
@@ -39611,7 +40137,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-warning.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-warning.js
 /**
  * WordPress dependencies
  */
@@ -39628,7 +40154,7 @@
 });
 /* harmony default export */ const block_crash_warning = (() => block_crash_warning_warning);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-boundary.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-crash-boundary.js
 /**
  * WordPress dependencies
  */
@@ -39656,7 +40182,7 @@
 
 // EXTERNAL MODULE: ./node_modules/react-autosize-textarea/lib/index.js
 var lib = __webpack_require__(4132);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-html.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/block-html.js
 /**
  * External dependencies
  */
@@ -39719,24 +40245,24 @@
 }
 /* harmony default export */ const block_html = (BlockHTML);
 
-;// CONCATENATED MODULE: ./node_modules/@react-spring/rafz/dist/esm/index.js
+;// ./node_modules/@react-spring/rafz/dist/esm/index.js
 var esm_f=esm_l(),esm_n=e=>esm_c(e,esm_f),esm_m=esm_l();esm_n.write=e=>esm_c(e,esm_m);var esm_d=esm_l();esm_n.onStart=e=>esm_c(e,esm_d);var esm_h=esm_l();esm_n.onFrame=e=>esm_c(e,esm_h);var esm_p=esm_l();esm_n.onFinish=e=>esm_c(e,esm_p);var esm_i=[];esm_n.setTimeout=(e,t)=>{let a=esm_n.now()+t,o=()=>{let F=esm_i.findIndex(z=>z.cancel==o);~F&&esm_i.splice(F,1),esm_u-=~F?1:0},s={time:a,handler:e,cancel:o};return esm_i.splice(esm_w(a),0,s),esm_u+=1,esm_v(),s};var esm_w=e=>~(~esm_i.findIndex(t=>t.time>e)||~esm_i.length);esm_n.cancel=e=>{esm_d.delete(e),esm_h.delete(e),esm_p.delete(e),esm_f.delete(e),esm_m.delete(e)};esm_n.sync=e=>{T=!0,esm_n.batchedUpdates(e),T=!1};esm_n.throttle=e=>{let t;function a(){try{e(...t)}finally{t=null}}function o(...s){t=s,esm_n.onStart(a)}return o.handler=e,o.cancel=()=>{esm_d.delete(a),t=null},o};var esm_y=typeof window<"u"?window.requestAnimationFrame:()=>{};esm_n.use=e=>esm_y=e;esm_n.now=typeof performance<"u"?()=>performance.now():Date.now;esm_n.batchedUpdates=e=>e();esm_n.catch=console.error;esm_n.frameLoop="always";esm_n.advance=()=>{esm_n.frameLoop!=="demand"?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):esm_x()};var esm_r=-1,esm_u=0,T=!1;function esm_c(e,t){T?(t.delete(e),e(0)):(t.add(e),esm_v())}function esm_v(){esm_r<0&&(esm_r=0,esm_n.frameLoop!=="demand"&&esm_y(esm_b))}function esm_R(){esm_r=-1}function esm_b(){~esm_r&&(esm_y(esm_b),esm_n.batchedUpdates(esm_x))}function esm_x(){let e=esm_r;esm_r=esm_n.now();let t=esm_w(esm_r);if(t&&(Q(esm_i.splice(0,t),a=>a.handler()),esm_u-=t),!esm_u){esm_R();return}esm_d.flush(),esm_f.flush(e?Math.min(64,esm_r-e):16.667),esm_h.flush(),esm_m.flush(),esm_p.flush()}function esm_l(){let e=new Set,t=e;return{add(a){esm_u+=t==e&&!e.has(a)?1:0,e.add(a)},delete(a){return esm_u-=t==e&&e.has(a)?1:0,e.delete(a)},flush(a){t.size&&(e=new Set,esm_u-=t.size,Q(t,o=>o(a)&&e.add(o)),esm_u+=e.size,t=e)}}}function Q(e,t){e.forEach(a=>{try{t(a)}catch(o){esm_n.catch(o)}})}var esm_S={count(){return esm_u},isRunning(){return esm_r>=0},clear(){esm_r=-1,esm_i=[],esm_d=esm_l(),esm_f=esm_l(),esm_h=esm_l(),esm_m=esm_l(),esm_p=esm_l(),esm_u=0}};
 
-;// CONCATENATED MODULE: ./node_modules/@react-spring/shared/dist/esm/index.js
+;// ./node_modules/@react-spring/shared/dist/esm/index.js
 var ze=Object.defineProperty;var Le=(e,t)=>{for(var r in t)ze(e,r,{get:t[r],enumerable:!0})};var dist_esm_p={};Le(dist_esm_p,{assign:()=>U,colors:()=>dist_esm_c,createStringInterpolator:()=>esm_k,skipAnimation:()=>ee,to:()=>J,willAdvance:()=>dist_esm_S});function Y(){}var mt=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0}),dist_esm_l={arr:Array.isArray,obj:e=>!!e&&e.constructor.name==="Object",fun:e=>typeof e=="function",str:e=>typeof e=="string",num:e=>typeof e=="number",und:e=>e===void 0};function bt(e,t){if(dist_esm_l.arr(e)){if(!dist_esm_l.arr(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}return e===t}var esm_Ve=(e,t)=>e.forEach(t);function xt(e,t,r){if(dist_esm_l.arr(e)){for(let n=0;n<e.length;n++)t.call(r,e[n],`${n}`);return}for(let n in e)e.hasOwnProperty(n)&&t.call(r,e[n],n)}var ht=e=>dist_esm_l.und(e)?[]:dist_esm_l.arr(e)?e:[e];function Pe(e,t){if(e.size){let r=Array.from(e);e.clear(),esm_Ve(r,t)}}var yt=(e,...t)=>Pe(e,r=>r(...t)),dist_esm_h=()=>typeof window>"u"||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);var esm_k,J,dist_esm_c=null,ee=!1,dist_esm_S=Y,U=e=>{e.to&&(J=e.to),e.now&&(esm_n.now=e.now),e.colors!==void 0&&(dist_esm_c=e.colors),e.skipAnimation!=null&&(ee=e.skipAnimation),e.createStringInterpolator&&(esm_k=e.createStringInterpolator),e.requestAnimationFrame&&esm_n.use(e.requestAnimationFrame),e.batchedUpdates&&(esm_n.batchedUpdates=e.batchedUpdates),e.willAdvance&&(dist_esm_S=e.willAdvance),e.frameLoop&&(esm_n.frameLoop=e.frameLoop)};var esm_E=new Set,dist_esm_u=[],esm_H=[],A=0,qe={get idle(){return!esm_E.size&&!dist_esm_u.length},start(e){A>e.priority?(esm_E.add(e),esm_n.onStart($e)):(te(e),esm_n(B))},advance:B,sort(e){if(A)esm_n.onFrame(()=>qe.sort(e));else{let t=dist_esm_u.indexOf(e);~t&&(dist_esm_u.splice(t,1),re(e))}},clear(){dist_esm_u=[],esm_E.clear()}};function $e(){esm_E.forEach(te),esm_E.clear(),esm_n(B)}function te(e){dist_esm_u.includes(e)||re(e)}function re(e){dist_esm_u.splice(Ge(dist_esm_u,t=>t.priority>e.priority),0,e)}function B(e){let t=esm_H;for(let r=0;r<dist_esm_u.length;r++){let n=dist_esm_u[r];A=n.priority,n.idle||(dist_esm_S(n),n.advance(e),n.idle||t.push(n))}return A=0,esm_H=dist_esm_u,esm_H.length=0,dist_esm_u=t,dist_esm_u.length>0}function Ge(e,t){let r=e.findIndex(t);return r<0?e.length:r}var ne=(e,t,r)=>Math.min(Math.max(r,e),t);var It={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};var dist_esm_d="[-+]?\\d*\\.?\\d+",esm_M=dist_esm_d+"%";function C(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}var oe=new RegExp("rgb"+C(dist_esm_d,dist_esm_d,dist_esm_d)),fe=new RegExp("rgba"+C(dist_esm_d,dist_esm_d,dist_esm_d,dist_esm_d)),ae=new RegExp("hsl"+C(dist_esm_d,esm_M,esm_M)),ie=new RegExp("hsla"+C(dist_esm_d,esm_M,esm_M,dist_esm_d)),se=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,ue=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,le=/^#([0-9a-fA-F]{6})$/,esm_ce=/^#([0-9a-fA-F]{8})$/;function be(e){let t;return typeof e=="number"?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=le.exec(e))?parseInt(t[1]+"ff",16)>>>0:dist_esm_c&&dist_esm_c[e]!==void 0?dist_esm_c[e]:(t=oe.exec(e))?(dist_esm_y(t[1])<<24|dist_esm_y(t[2])<<16|dist_esm_y(t[3])<<8|255)>>>0:(t=fe.exec(e))?(dist_esm_y(t[1])<<24|dist_esm_y(t[2])<<16|dist_esm_y(t[3])<<8|me(t[4]))>>>0:(t=se.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=esm_ce.exec(e))?parseInt(t[1],16)>>>0:(t=ue.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=ae.exec(e))?(de(esm_pe(t[1]),esm_z(t[2]),esm_z(t[3]))|255)>>>0:(t=ie.exec(e))?(de(esm_pe(t[1]),esm_z(t[2]),esm_z(t[3]))|me(t[4]))>>>0:null}function esm_j(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function de(e,t,r){let n=r<.5?r*(1+t):r+t-r*t,f=2*r-n,o=esm_j(f,n,e+1/3),i=esm_j(f,n,e),s=esm_j(f,n,e-1/3);return Math.round(o*255)<<24|Math.round(i*255)<<16|Math.round(s*255)<<8}function dist_esm_y(e){let t=parseInt(e,10);return t<0?0:t>255?255:t}function esm_pe(e){return(parseFloat(e)%360+360)%360/360}function me(e){let t=parseFloat(e);return t<0?0:t>1?255:Math.round(t*255)}function esm_z(e){let t=parseFloat(e);return t<0?0:t>100?1:t/100}function D(e){let t=be(e);if(t===null)return e;t=t||0;let r=(t&4278190080)>>>24,n=(t&16711680)>>>16,f=(t&65280)>>>8,o=(t&255)/255;return`rgba(${r}, ${n}, ${f}, ${o})`}var W=(e,t,r)=>{if(dist_esm_l.fun(e))return e;if(dist_esm_l.arr(e))return W({range:e,output:t,extrapolate:r});if(dist_esm_l.str(e.output[0]))return esm_k(e);let n=e,f=n.output,o=n.range||[0,1],i=n.extrapolateLeft||n.extrapolate||"extend",s=n.extrapolateRight||n.extrapolate||"extend",x=n.easing||(a=>a);return a=>{let F=He(a,o);return Ue(a,o[F],o[F+1],f[F],f[F+1],x,i,s,n.map)}};function Ue(e,t,r,n,f,o,i,s,x){let a=x?x(e):e;if(a<t){if(i==="identity")return a;i==="clamp"&&(a=t)}if(a>r){if(s==="identity")return a;s==="clamp"&&(a=r)}return n===f?n:t===r?e<=t?n:f:(t===-1/0?a=-a:r===1/0?a=a-t:a=(a-t)/(r-t),a=o(a),n===-1/0?a=-a:f===1/0?a=a+n:a=a*(f-n)+n,a)}function He(e,t){for(var r=1;r<t.length-1&&!(t[r]>=e);++r);return r-1}var Be=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);let n=r*e,f=t==="end"?Math.floor(n):Math.ceil(n);return ne(0,1,f/e)},P=1.70158,L=P*1.525,xe=P+1,he=2*Math.PI/3,ye=2*Math.PI/4.5,V=e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,Lt={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>1-(1-e)*(1-e),easeInOutQuad:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,easeInCubic:e=>e*e*e,easeOutCubic:e=>1-Math.pow(1-e,3),easeInOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1-Math.pow(1-e,4),easeInOutQuart:e=>e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1-Math.pow(1-e,5),easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2,easeInSine:e=>1-Math.cos(e*Math.PI/2),easeOutSine:e=>Math.sin(e*Math.PI/2),easeInOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,easeInExpo:e=>e===0?0:Math.pow(2,10*e-10),easeOutExpo:e=>e===1?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>e===0?0:e===1?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2,easeInCirc:e=>1-Math.sqrt(1-Math.pow(e,2)),easeOutCirc:e=>Math.sqrt(1-Math.pow(e-1,2)),easeInOutCirc:e=>e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2,easeInBack:e=>xe*e*e*e-P*e*e,easeOutBack:e=>1+xe*Math.pow(e-1,3)+P*Math.pow(e-1,2),easeInOutBack:e=>e<.5?Math.pow(2*e,2)*((L+1)*2*e-L)/2:(Math.pow(2*e-2,2)*((L+1)*(e*2-2)+L)+2)/2,easeInElastic:e=>e===0?0:e===1?1:-Math.pow(2,10*e-10)*Math.sin((e*10-10.75)*he),easeOutElastic:e=>e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*he)+1,easeInOutElastic:e=>e===0?0:e===1?1:e<.5?-(Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*ye))/2:Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*ye)/2+1,easeInBounce:e=>1-V(1-e),easeOutBounce:V,easeInOutBounce:e=>e<.5?(1-V(1-2*e))/2:(1+V(2*e-1))/2,steps:Be};var esm_g=Symbol.for("FluidValue.get"),dist_esm_m=Symbol.for("FluidValue.observers");var Pt=e=>Boolean(e&&e[esm_g]),ve=e=>e&&e[esm_g]?e[esm_g]():e,esm_qt=e=>e[dist_esm_m]||null;function je(e,t){e.eventObserved?e.eventObserved(t):e(t)}function $t(e,t){let r=e[dist_esm_m];r&&r.forEach(n=>{je(n,t)})}var esm_ge=class{[esm_g];[dist_esm_m];constructor(t){if(!t&&!(t=this.get))throw Error("Unknown getter");De(this,t)}},De=(e,t)=>Ee(e,esm_g,t);function Gt(e,t){if(e[esm_g]){let r=e[dist_esm_m];r||Ee(e,dist_esm_m,r=new Set),r.has(t)||(r.add(t),e.observerAdded&&e.observerAdded(r.size,t))}return t}function Qt(e,t){let r=e[dist_esm_m];if(r&&r.has(t)){let n=r.size-1;n?r.delete(t):e[dist_esm_m]=null,e.observerRemoved&&e.observerRemoved(n,t)}}var Ee=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0});var O=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,esm_Oe=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,K=new RegExp(`(${O.source})(%|[a-z]+)`,"i"),we=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,dist_esm_b=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;var esm_N=e=>{let[t,r]=We(e);if(!t||dist_esm_h())return e;let n=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(n)return n.trim();if(r&&r.startsWith("--")){let f=window.getComputedStyle(document.documentElement).getPropertyValue(r);return f||e}else{if(r&&dist_esm_b.test(r))return esm_N(r);if(r)return r}return e},We=e=>{let t=dist_esm_b.exec(e);if(!t)return[,];let[,r,n]=t;return[r,n]};var _,esm_Ke=(e,t,r,n,f)=>`rgba(${Math.round(t)}, ${Math.round(r)}, ${Math.round(n)}, ${f})`,Xt=e=>{_||(_=dist_esm_c?new RegExp(`(${Object.keys(dist_esm_c).join("|")})(?!\\w)`,"g"):/^\b$/);let t=e.output.map(o=>ve(o).replace(dist_esm_b,esm_N).replace(esm_Oe,D).replace(_,D)),r=t.map(o=>o.match(O).map(Number)),f=r[0].map((o,i)=>r.map(s=>{if(!(i in s))throw Error('The arity of each "output" value must be equal');return s[i]})).map(o=>W({...e,output:o}));return o=>{let i=!K.test(t[0])&&t.find(x=>K.test(x))?.replace(O,""),s=0;return t[0].replace(O,()=>`${f[s++](o)}${i||""}`).replace(we,esm_Ke)}};var Z="react-spring: ",Te=e=>{let t=e,r=!1;if(typeof t!="function")throw new TypeError(`${Z}once requires a function parameter`);return(...n)=>{r||(t(...n),r=!0)}},Ne=Te(console.warn);function Jt(){Ne(`${Z}The "interpolate" function is deprecated in v9 (use "to" instead)`)}var _e=Te(console.warn);function er(){_e(`${Z}Directly calling start instead of using the api object is deprecated in v9 (use ".start" instead), this will be removed in later 0.X.0 versions`)}function esm_or(e){return dist_esm_l.str(e)&&(e[0]=="#"||/\d/.test(e)||!dist_esm_h()&&dist_esm_b.test(e)||e in(dist_esm_c||{}))}var dist_esm_v,q=new WeakMap,Ze=e=>e.forEach(({target:t,contentRect:r})=>q.get(t)?.forEach(n=>n(r)));function Fe(e,t){dist_esm_v||typeof ResizeObserver<"u"&&(dist_esm_v=new ResizeObserver(Ze));let r=q.get(t);return r||(r=new Set,q.set(t,r)),r.add(e),dist_esm_v&&dist_esm_v.observe(t),()=>{let n=q.get(t);!n||(n.delete(e),!n.size&&dist_esm_v&&dist_esm_v.unobserve(t))}}var esm_$=new Set,dist_esm_w,esm_Xe=()=>{let e=()=>{esm_$.forEach(t=>t({width:window.innerWidth,height:window.innerHeight}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},Ie=e=>(esm_$.add(e),dist_esm_w||(dist_esm_w=esm_Xe()),()=>{esm_$.delete(e),!esm_$.size&&dist_esm_w&&(dist_esm_w(),dist_esm_w=void 0)});var ke=(e,{container:t=document.documentElement}={})=>t===document.documentElement?Ie(e):Fe(e,t);var Se=(e,t,r)=>t-e===0?1:(r-e)/(t-e);var esm_Ye={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}},esm_G=class{callback;container;info;constructor(t,r){this.callback=t,this.container=r,this.info={time:0,x:this.createAxis(),y:this.createAxis()}}createAxis=()=>({current:0,progress:0,scrollLength:0});updateAxis=t=>{let r=this.info[t],{length:n,position:f}=esm_Ye[t];r.current=this.container[`scroll${f}`],r.scrollLength=this.container["scroll"+n]-this.container["client"+n],r.progress=Se(0,r.scrollLength,r.current)};update=()=>{this.updateAxis("x"),this.updateAxis("y")};sendEvent=()=>{this.callback(this.info)};advance=()=>{this.update(),this.sendEvent()}};var esm_T=new WeakMap,Ae=new WeakMap,X=new WeakMap,Me=e=>e===document.documentElement?window:e,yr=(e,{container:t=document.documentElement}={})=>{let r=X.get(t);r||(r=new Set,X.set(t,r));let n=new esm_G(e,t);if(r.add(n),!esm_T.has(t)){let o=()=>(r?.forEach(s=>s.advance()),!0);esm_T.set(t,o);let i=Me(t);window.addEventListener("resize",o,{passive:!0}),t!==document.documentElement&&Ae.set(t,ke(o,{container:t})),i.addEventListener("scroll",o,{passive:!0})}let f=esm_T.get(t);return Re(f),()=>{Re.cancel(f);let o=X.get(t);if(!o||(o.delete(n),o.size))return;let i=esm_T.get(t);esm_T.delete(t),i&&(Me(t).removeEventListener("scroll",i),window.removeEventListener("resize",i),Ae.get(t)?.())}};function Er(e){let t=Je(null);return t.current===null&&(t.current=e()),t.current}var esm_Q=dist_esm_h()?external_React_.useEffect:external_React_.useLayoutEffect;var Ce=()=>{let e=(0,external_React_.useRef)(!1);return esm_Q(()=>(e.current=!0,()=>{e.current=!1}),[]),e};function Mr(){let e=(0,external_React_.useState)()[1],t=Ce();return()=>{t.current&&e(Math.random())}}function Lr(e,t){let[r]=(0,external_React_.useState)(()=>({inputs:t,result:e()})),n=(0,external_React_.useRef)(),f=n.current,o=f;return o?Boolean(t&&o.inputs&&it(t,o.inputs))||(o={inputs:t,result:e()}):o=r,(0,external_React_.useEffect)(()=>{n.current=o,f==r&&(r.inputs=r.result=void 0)},[o]),o.result}function it(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}var $r=e=>(0,external_React_.useEffect)(e,ut),ut=[];function Ur(e){let t=ct();return lt(()=>{t.current=e}),t.current}var Wr=()=>{let[e,t]=dt(null);return esm_Q(()=>{let r=window.matchMedia("(prefers-reduced-motion)"),n=f=>{t(f.matches),U({skipAnimation:f.matches})};return n(r),r.addEventListener("change",n),()=>{r.removeEventListener("change",n)}},[]),e};
 
-;// CONCATENATED MODULE: ./node_modules/@react-spring/animated/dist/esm/index.js
+;// ./node_modules/@react-spring/animated/dist/esm/index.js
 var animated_dist_esm_h=Symbol.for("Animated:node"),animated_dist_esm_v=e=>!!e&&e[animated_dist_esm_h]===e,dist_esm_k=e=>e&&e[animated_dist_esm_h],esm_D=(e,t)=>mt(e,animated_dist_esm_h,t),F=e=>e&&e[animated_dist_esm_h]&&e[animated_dist_esm_h].getPayload(),animated_dist_esm_c=class{payload;constructor(){esm_D(this,this)}getPayload(){return this.payload||[]}};var animated_dist_esm_l=class extends animated_dist_esm_c{constructor(r){super();this._value=r;dist_esm_l.num(this._value)&&(this.lastPosition=this._value)}done=!0;elapsedTime;lastPosition;lastVelocity;v0;durationProgress=0;static create(r){return new animated_dist_esm_l(r)}getPayload(){return[this]}getValue(){return this._value}setValue(r,n){return dist_esm_l.num(r)&&(this.lastPosition=r,n&&(r=Math.round(r/n)*n,this.done&&(this.lastPosition=r))),this._value===r?!1:(this._value=r,!0)}reset(){let{done:r}=this;this.done=!1,dist_esm_l.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,r&&(this.lastVelocity=null),this.v0=null)}};var animated_dist_esm_d=class extends animated_dist_esm_l{_string=null;_toString;constructor(t){super(0),this._toString=W({output:[t,t]})}static create(t){return new animated_dist_esm_d(t)}getValue(){let t=this._string;return t??(this._string=this._toString(this._value))}setValue(t){if(dist_esm_l.str(t)){if(t==this._string)return!1;this._string=t,this._value=1}else if(super.setValue(t))this._string=null;else return!1;return!0}reset(t){t&&(this._toString=W({output:[this.getValue(),t]})),this._value=0,super.reset()}};var dist_esm_f={dependencies:null};var animated_dist_esm_u=class extends animated_dist_esm_c{constructor(r){super();this.source=r;this.setValue(r)}getValue(r){let n={};return xt(this.source,(a,i)=>{animated_dist_esm_v(a)?n[i]=a.getValue(r):Pt(a)?n[i]=ve(a):r||(n[i]=a)}),n}setValue(r){this.source=r,this.payload=this._makePayload(r)}reset(){this.payload&&esm_Ve(this.payload,r=>r.reset())}_makePayload(r){if(r){let n=new Set;return xt(r,this._addToPayload,n),Array.from(n)}}_addToPayload(r){dist_esm_f.dependencies&&Pt(r)&&dist_esm_f.dependencies.add(r);let n=F(r);n&&esm_Ve(n,a=>this.add(a))}};var animated_dist_esm_y=class extends animated_dist_esm_u{constructor(t){super(t)}static create(t){return new animated_dist_esm_y(t)}getValue(){return this.source.map(t=>t.getValue())}setValue(t){let r=this.getPayload();return t.length==r.length?r.map((n,a)=>n.setValue(t[a])).some(Boolean):(super.setValue(t.map(dist_esm_z)),!0)}};function dist_esm_z(e){return(esm_or(e)?animated_dist_esm_d:animated_dist_esm_l).create(e)}function esm_Le(e){let t=dist_esm_k(e);return t?t.constructor:dist_esm_l.arr(e)?animated_dist_esm_y:esm_or(e)?animated_dist_esm_d:animated_dist_esm_l}var dist_esm_x=(e,t)=>{let r=!dist_esm_l.fun(e)||e.prototype&&e.prototype.isReactComponent;return (0,external_React_.forwardRef)((n,a)=>{let i=(0,external_React_.useRef)(null),o=r&&(0,external_React_.useCallback)(s=>{i.current=esm_ae(a,s)},[a]),[m,T]=esm_ne(n,t),W=Mr(),P=()=>{let s=i.current;if(r&&!s)return;(s?t.applyAnimatedValues(s,m.getValue(!0)):!1)===!1&&W()},_=new animated_dist_esm_b(P,T),p=(0,external_React_.useRef)();esm_Q(()=>(p.current=_,esm_Ve(T,s=>Gt(s,_)),()=>{p.current&&(esm_Ve(p.current.deps,s=>Qt(s,p.current)),esm_n.cancel(p.current.update))})),(0,external_React_.useEffect)(P,[]),$r(()=>()=>{let s=p.current;esm_Ve(s.deps,S=>Qt(S,s))});let $=t.getComponentProps(m.getValue());return external_React_.createElement(e,{...$,ref:o})})},animated_dist_esm_b=class{constructor(t,r){this.update=t;this.deps=r}eventObserved(t){t.type=="change"&&esm_n.write(this.update)}};function esm_ne(e,t){let r=new Set;return dist_esm_f.dependencies=r,e.style&&(e={...e,style:t.createAnimatedStyle(e.style)}),e=new animated_dist_esm_u(e),dist_esm_f.dependencies=null,[e,r]}function esm_ae(e,t){return e&&(dist_esm_l.fun(e)?e(t):e.current=t),t}var dist_esm_j=Symbol.for("AnimatedComponent"),dist_esm_Ke=(e,{applyAnimatedValues:t=()=>!1,createAnimatedStyle:r=a=>new animated_dist_esm_u(a),getComponentProps:n=a=>a}={})=>{let a={applyAnimatedValues:t,createAnimatedStyle:r,getComponentProps:n},i=o=>{let m=esm_I(o)||"Anonymous";return dist_esm_l.str(o)?o=i[o]||(i[o]=dist_esm_x(o,a)):o=o[dist_esm_j]||(o[dist_esm_j]=dist_esm_x(o,a)),o.displayName=`Animated(${m})`,o};return xt(e,(o,m)=>{dist_esm_l.arr(e)&&(m=esm_I(o)),i[m]=i(o)}),{animated:i}},esm_I=e=>dist_esm_l.str(e)?e:e&&dist_esm_l.str(e.displayName)?e.displayName:dist_esm_l.fun(e)&&e.name||null;
 
-;// CONCATENATED MODULE: ./node_modules/@react-spring/core/dist/esm/index.js
+;// ./node_modules/@react-spring/core/dist/esm/index.js
 function dist_esm_I(t,...e){return dist_esm_l.fun(t)?t(...e):t}var esm_te=(t,e)=>t===!0||!!(e&&t&&(dist_esm_l.fun(t)?t(e):ht(t).includes(e))),et=(t,e)=>dist_esm_l.obj(t)?e&&t[e]:t;var esm_ke=(t,e)=>t.default===!0?t[e]:t.default?t.default[e]:void 0,nn=t=>t,dist_esm_ne=(t,e=nn)=>{let n=rn;t.default&&t.default!==!0&&(t=t.default,n=Object.keys(t));let r={};for(let o of n){let s=e(t[o],o);dist_esm_l.und(s)||(r[o]=s)}return r},rn=["config","onProps","onStart","onChange","onPause","onResume","onRest"],on={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function sn(t){let e={},n=0;if(xt(t,(r,o)=>{on[o]||(e[o]=r,n++)}),n)return e}function esm_de(t){let e=sn(t);if(e){let n={to:e};return xt(t,(r,o)=>o in e||(n[o]=r)),n}return{...t}}function esm_me(t){return t=ve(t),dist_esm_l.arr(t)?t.map(esm_me):esm_or(t)?dist_esm_p.createStringInterpolator({range:[0,1],output:[t,t]})(1):t}function esm_Ue(t){for(let e in t)return!0;return!1}function esm_Ee(t){return dist_esm_l.fun(t)||dist_esm_l.arr(t)&&dist_esm_l.obj(t[0])}function esm_xe(t,e){t.ref?.delete(t),e?.delete(t)}function esm_he(t,e){e&&t.ref!==e&&(t.ref?.delete(t),e.add(t),t.ref=e)}function wr(t,e,n=1e3){an(()=>{if(e){let r=0;ge(t,(o,s)=>{let a=o.current;if(a.length){let i=n*e[s];isNaN(i)?i=r:r=i,ge(a,u=>{ge(u.queue,p=>{let f=p.delay;p.delay=d=>i+dist_esm_I(f||0,d)})}),o.start()}})}else{let r=Promise.resolve();ge(t,o=>{let s=o.current;if(s.length){let a=s.map(i=>{let u=i.queue;return i.queue=[],u});r=r.then(()=>(ge(s,(i,u)=>ge(a[u]||[],p=>i.queue.push(p))),Promise.all(o.start())))}})}})}var esm_mt={default:{tension:170,friction:26},gentle:{tension:120,friction:14},wobbly:{tension:180,friction:12},stiff:{tension:210,friction:20},slow:{tension:280,friction:60},molasses:{tension:280,friction:120}};var tt={...esm_mt.default,mass:1,damping:1,easing:Lt.linear,clamp:!1},esm_we=class{tension;friction;frequency;damping;mass;velocity=0;restVelocity;precision;progress;duration;easing;clamp;bounce;decay;round;constructor(){Object.assign(this,tt)}};function gt(t,e,n){n&&(n={...n},esm_ht(n,e),e={...n,...e}),esm_ht(t,e),Object.assign(t,e);for(let a in tt)t[a]==null&&(t[a]=tt[a]);let{mass:r,frequency:o,damping:s}=t;return dist_esm_l.und(o)||(o<.01&&(o=.01),s<0&&(s=0),t.tension=Math.pow(2*Math.PI/o,2)*r,t.friction=4*Math.PI*s*r/o),t}function esm_ht(t,e){if(!dist_esm_l.und(e.decay))t.duration=void 0;else{let n=!dist_esm_l.und(e.tension)||!dist_esm_l.und(e.friction);(n||!dist_esm_l.und(e.frequency)||!dist_esm_l.und(e.damping)||!dist_esm_l.und(e.mass))&&(t.duration=void 0,t.decay=void 0),n&&(t.frequency=void 0)}}var esm_yt=[],dist_esm_Le=class{changed=!1;values=esm_yt;toValues=null;fromValues=esm_yt;to;from;config=new esm_we;immediate=!1};function esm_Me(t,{key:e,props:n,defaultProps:r,state:o,actions:s}){return new Promise((a,i)=>{let u,p,f=esm_te(n.cancel??r?.cancel,e);if(f)b();else{dist_esm_l.und(n.pause)||(o.paused=esm_te(n.pause,e));let c=r?.pause;c!==!0&&(c=o.paused||esm_te(c,e)),u=dist_esm_I(n.delay||0,e),c?(o.resumeQueue.add(m),s.pause()):(s.resume(),m())}function d(){o.resumeQueue.add(m),o.timeouts.delete(p),p.cancel(),u=p.time-esm_n.now()}function m(){u>0&&!dist_esm_p.skipAnimation?(o.delayed=!0,p=esm_n.setTimeout(b,u),o.pauseQueue.add(d),o.timeouts.add(p)):b()}function b(){o.delayed&&(o.delayed=!1),o.pauseQueue.delete(d),o.timeouts.delete(p),t<=(o.cancelId||0)&&(f=!0);try{s.start({...n,callId:t,cancel:f},a)}catch(c){i(c)}}})}var esm_be=(t,e)=>e.length==1?e[0]:e.some(n=>n.cancelled)?esm_q(t.get()):e.every(n=>n.noop)?nt(t.get()):dist_esm_E(t.get(),e.every(n=>n.finished)),nt=t=>({value:t,noop:!0,finished:!0,cancelled:!1}),dist_esm_E=(t,e,n=!1)=>({value:t,finished:e,cancelled:n}),esm_q=t=>({value:t,cancelled:!0,finished:!1});function esm_De(t,e,n,r){let{callId:o,parentId:s,onRest:a}=e,{asyncTo:i,promise:u}=n;return!s&&t===i&&!e.reset?u:n.promise=(async()=>{n.asyncId=o,n.asyncTo=t;let p=dist_esm_ne(e,(l,h)=>h==="onRest"?void 0:l),f,d,m=new Promise((l,h)=>(f=l,d=h)),b=l=>{let h=o<=(n.cancelId||0)&&esm_q(r)||o!==n.asyncId&&dist_esm_E(r,!1);if(h)throw l.result=h,d(l),l},c=(l,h)=>{let g=new esm_Ae,x=new esm_Ne;return(async()=>{if(dist_esm_p.skipAnimation)throw esm_oe(n),x.result=dist_esm_E(r,!1),d(x),x;b(g);let S=dist_esm_l.obj(l)?{...l}:{...h,to:l};S.parentId=o,xt(p,(V,_)=>{dist_esm_l.und(S[_])&&(S[_]=V)});let A=await r.start(S);return b(g),n.paused&&await new Promise(V=>{n.resumeQueue.add(V)}),A})()},P;if(dist_esm_p.skipAnimation)return esm_oe(n),dist_esm_E(r,!1);try{let l;dist_esm_l.arr(t)?l=(async h=>{for(let g of h)await c(g)})(t):l=Promise.resolve(t(c,r.stop.bind(r))),await Promise.all([l.then(f),m]),P=dist_esm_E(r.get(),!0,!1)}catch(l){if(l instanceof esm_Ae)P=l.result;else if(l instanceof esm_Ne)P=l.result;else throw l}finally{o==n.asyncId&&(n.asyncId=s,n.asyncTo=s?i:void 0,n.promise=s?u:void 0)}return dist_esm_l.fun(a)&&esm_n.batchedUpdates(()=>{a(P,r,r.item)}),P})()}function esm_oe(t,e){Pe(t.timeouts,n=>n.cancel()),t.pauseQueue.clear(),t.resumeQueue.clear(),t.asyncId=t.asyncTo=t.promise=void 0,e&&(t.cancelId=e)}var esm_Ae=class extends Error{result;constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise.")}},esm_Ne=class extends Error{result;constructor(){super("SkipAnimationSignal")}};var esm_Re=t=>t instanceof esm_X,Sn=1,esm_X=class extends esm_ge{id=Sn++;_priority=0;get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){let e=dist_esm_k(this);return e&&e.getValue()}to(...e){return dist_esm_p.to(this,e)}interpolate(...e){return Jt(),dist_esm_p.to(this,e)}toJSON(){return this.get()}observerAdded(e){e==1&&this._attach()}observerRemoved(e){e==0&&this._detach()}_attach(){}_detach(){}_onChange(e,n=!1){$t(this,{type:"change",parent:this,value:e,idle:n})}_onPriorityChange(e){this.idle||qe.sort(this),$t(this,{type:"priority",parent:this,priority:e})}};var esm_se=Symbol.for("SpringPhase"),esm_bt=1,rt=2,ot=4,esm_qe=t=>(t[esm_se]&esm_bt)>0,dist_esm_Q=t=>(t[esm_se]&rt)>0,esm_ye=t=>(t[esm_se]&ot)>0,st=(t,e)=>e?t[esm_se]|=rt|esm_bt:t[esm_se]&=~rt,esm_it=(t,e)=>e?t[esm_se]|=ot:t[esm_se]&=~ot;var esm_ue=class extends esm_X{key;animation=new dist_esm_Le;queue;defaultProps={};_state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_pendingCalls=new Set;_lastCallId=0;_lastToId=0;_memoizedDuration=0;constructor(e,n){if(super(),!dist_esm_l.und(e)||!dist_esm_l.und(n)){let r=dist_esm_l.obj(e)?{...e}:{...n,from:e};dist_esm_l.und(r.default)&&(r.default=!0),this.start(r)}}get idle(){return!(dist_esm_Q(this)||this._state.asyncTo)||esm_ye(this)}get goal(){return ve(this.animation.to)}get velocity(){let e=dist_esm_k(this);return e instanceof animated_dist_esm_l?e.lastVelocity||0:e.getPayload().map(n=>n.lastVelocity||0)}get hasAnimated(){return esm_qe(this)}get isAnimating(){return dist_esm_Q(this)}get isPaused(){return esm_ye(this)}get isDelayed(){return this._state.delayed}advance(e){let n=!0,r=!1,o=this.animation,{config:s,toValues:a}=o,i=F(o.to);!i&&Pt(o.to)&&(a=ht(ve(o.to))),o.values.forEach((f,d)=>{if(f.done)return;let m=f.constructor==animated_dist_esm_d?1:i?i[d].lastPosition:a[d],b=o.immediate,c=m;if(!b){if(c=f.lastPosition,s.tension<=0){f.done=!0;return}let P=f.elapsedTime+=e,l=o.fromValues[d],h=f.v0!=null?f.v0:f.v0=dist_esm_l.arr(s.velocity)?s.velocity[d]:s.velocity,g,x=s.precision||(l==m?.005:Math.min(1,Math.abs(m-l)*.001));if(dist_esm_l.und(s.duration))if(s.decay){let S=s.decay===!0?.998:s.decay,A=Math.exp(-(1-S)*P);c=l+h/(1-S)*(1-A),b=Math.abs(f.lastPosition-c)<=x,g=h*A}else{g=f.lastVelocity==null?h:f.lastVelocity;let S=s.restVelocity||x/10,A=s.clamp?0:s.bounce,V=!dist_esm_l.und(A),_=l==m?f.v0>0:l<m,v,w=!1,C=1,$=Math.ceil(e/C);for(let L=0;L<$&&(v=Math.abs(g)>S,!(!v&&(b=Math.abs(m-c)<=x,b)));++L){V&&(w=c==m||c>m==_,w&&(g=-g*A,c=m));let N=-s.tension*1e-6*(c-m),y=-s.friction*.001*g,T=(N+y)/s.mass;g=g+T*C,c=c+g*C}}else{let S=1;s.duration>0&&(this._memoizedDuration!==s.duration&&(this._memoizedDuration=s.duration,f.durationProgress>0&&(f.elapsedTime=s.duration*f.durationProgress,P=f.elapsedTime+=e)),S=(s.progress||0)+P/this._memoizedDuration,S=S>1?1:S<0?0:S,f.durationProgress=S),c=l+s.easing(S)*(m-l),g=(c-f.lastPosition)/e,b=S==1}f.lastVelocity=g,Number.isNaN(c)&&(console.warn("Got NaN while animating:",this),b=!0)}i&&!i[d].done&&(b=!1),b?f.done=!0:n=!1,f.setValue(c,s.round)&&(r=!0)});let u=dist_esm_k(this),p=u.getValue();if(n){let f=ve(o.to);(p!==f||r)&&!s.decay?(u.setValue(f),this._onChange(f)):r&&s.decay&&this._onChange(p),this._stop()}else r&&this._onChange(p)}set(e){return esm_n.batchedUpdates(()=>{this._stop(),this._focus(e),this._set(e)}),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(dist_esm_Q(this)){let{to:e,config:n}=this.animation;esm_n.batchedUpdates(()=>{this._onStart(),n.decay||this._set(e,!1),this._stop()})}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,n){let r;return dist_esm_l.und(e)?(r=this.queue||[],this.queue=[]):r=[dist_esm_l.obj(e)?e:{...n,to:e}],Promise.all(r.map(o=>this._update(o))).then(o=>esm_be(this,o))}stop(e){let{to:n}=this.animation;return this._focus(this.get()),esm_oe(this._state,e&&this._lastCallId),esm_n.batchedUpdates(()=>this._stop(n,e)),this}reset(){this._update({reset:!0})}eventObserved(e){e.type=="change"?this._start():e.type=="priority"&&(this.priority=e.priority+1)}_prepareNode(e){let n=this.key||"",{to:r,from:o}=e;r=dist_esm_l.obj(r)?r[n]:r,(r==null||esm_Ee(r))&&(r=void 0),o=dist_esm_l.obj(o)?o[n]:o,o==null&&(o=void 0);let s={to:r,from:o};return esm_qe(this)||(e.reverse&&([r,o]=[o,r]),o=ve(o),dist_esm_l.und(o)?dist_esm_k(this)||this._set(r):this._set(o)),s}_update({...e},n){let{key:r,defaultProps:o}=this;e.default&&Object.assign(o,dist_esm_ne(e,(i,u)=>/^on/.test(u)?et(i,r):i)),_t(this,e,"onProps"),esm_Ie(this,"onProps",e,this);let s=this._prepareNode(e);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");let a=this._state;return esm_Me(++this._lastCallId,{key:r,props:e,defaultProps:o,state:a,actions:{pause:()=>{esm_ye(this)||(esm_it(this,!0),yt(a.pauseQueue),esm_Ie(this,"onPause",dist_esm_E(this,esm_Ce(this,this.animation.to)),this))},resume:()=>{esm_ye(this)&&(esm_it(this,!1),dist_esm_Q(this)&&this._resume(),yt(a.resumeQueue),esm_Ie(this,"onResume",dist_esm_E(this,esm_Ce(this,this.animation.to)),this))},start:this._merge.bind(this,s)}}).then(i=>{if(e.loop&&i.finished&&!(n&&i.noop)){let u=at(e);if(u)return this._update(u,!0)}return i})}_merge(e,n,r){if(n.cancel)return this.stop(!0),r(esm_q(this));let o=!dist_esm_l.und(e.to),s=!dist_esm_l.und(e.from);if(o||s)if(n.callId>this._lastToId)this._lastToId=n.callId;else return r(esm_q(this));let{key:a,defaultProps:i,animation:u}=this,{to:p,from:f}=u,{to:d=p,from:m=f}=e;s&&!o&&(!n.default||dist_esm_l.und(d))&&(d=m),n.reverse&&([d,m]=[m,d]);let b=!bt(m,f);b&&(u.from=m),m=ve(m);let c=!bt(d,p);c&&this._focus(d);let P=esm_Ee(n.to),{config:l}=u,{decay:h,velocity:g}=l;(o||s)&&(l.velocity=0),n.config&&!P&&gt(l,dist_esm_I(n.config,a),n.config!==i.config?dist_esm_I(i.config,a):void 0);let x=dist_esm_k(this);if(!x||dist_esm_l.und(d))return r(dist_esm_E(this,!0));let S=dist_esm_l.und(n.reset)?s&&!n.default:!dist_esm_l.und(m)&&esm_te(n.reset,a),A=S?m:this.get(),V=esm_me(d),_=dist_esm_l.num(V)||dist_esm_l.arr(V)||esm_or(V),v=!P&&(!_||esm_te(i.immediate||n.immediate,a));if(c){let L=esm_Le(d);if(L!==x.constructor)if(v)x=this._set(V);else throw Error(`Cannot animate between ${x.constructor.name} and ${L.name}, as the "to" prop suggests`)}let w=x.constructor,C=Pt(d),$=!1;if(!C){let L=S||!esm_qe(this)&&b;(c||L)&&($=bt(esm_me(A),V),C=!$),(!bt(u.immediate,v)&&!v||!bt(l.decay,h)||!bt(l.velocity,g))&&(C=!0)}if($&&dist_esm_Q(this)&&(u.changed&&!S?C=!0:C||this._stop(p)),!P&&((C||Pt(p))&&(u.values=x.getPayload(),u.toValues=Pt(d)?null:w==animated_dist_esm_d?[1]:ht(V)),u.immediate!=v&&(u.immediate=v,!v&&!S&&this._set(p)),C)){let{onRest:L}=u;esm_Ve(_n,y=>_t(this,n,y));let N=dist_esm_E(this,esm_Ce(this,p));yt(this._pendingCalls,N),this._pendingCalls.add(r),u.changed&&esm_n.batchedUpdates(()=>{u.changed=!S,L?.(N,this),S?dist_esm_I(i.onRest,N):u.onStart?.(N,this)})}S&&this._set(A),P?r(esm_De(n.to,n,this._state,this)):C?this._start():dist_esm_Q(this)&&!c?this._pendingCalls.add(r):r(nt(A))}_focus(e){let n=this.animation;e!==n.to&&(esm_qt(this)&&this._detach(),n.to=e,esm_qt(this)&&this._attach())}_attach(){let e=0,{to:n}=this.animation;Pt(n)&&(Gt(n,this),esm_Re(n)&&(e=n.priority+1)),this.priority=e}_detach(){let{to:e}=this.animation;Pt(e)&&Qt(e,this)}_set(e,n=!0){let r=ve(e);if(!dist_esm_l.und(r)){let o=dist_esm_k(this);if(!o||!bt(r,o.getValue())){let s=esm_Le(r);!o||o.constructor!=s?esm_D(this,s.create(r)):o.setValue(r),o&&esm_n.batchedUpdates(()=>{this._onChange(r,n)})}}return dist_esm_k(this)}_onStart(){let e=this.animation;e.changed||(e.changed=!0,esm_Ie(this,"onStart",dist_esm_E(this,esm_Ce(this,e.to)),this))}_onChange(e,n){n||(this._onStart(),dist_esm_I(this.animation.onChange,e,this)),dist_esm_I(this.defaultProps.onChange,e,this),super._onChange(e,n)}_start(){let e=this.animation;dist_esm_k(this).reset(ve(e.to)),e.immediate||(e.fromValues=e.values.map(n=>n.lastPosition)),dist_esm_Q(this)||(st(this,!0),esm_ye(this)||this._resume())}_resume(){dist_esm_p.skipAnimation?this.finish():qe.start(this)}_stop(e,n){if(dist_esm_Q(this)){st(this,!1);let r=this.animation;esm_Ve(r.values,s=>{s.done=!0}),r.toValues&&(r.onChange=r.onPause=r.onResume=void 0),$t(this,{type:"idle",parent:this});let o=n?esm_q(this.get()):dist_esm_E(this.get(),esm_Ce(this,e??r.to));yt(this._pendingCalls,o),r.changed&&(r.changed=!1,esm_Ie(this,"onRest",o,this))}}};function esm_Ce(t,e){let n=esm_me(e),r=esm_me(t.get());return bt(r,n)}function at(t,e=t.loop,n=t.to){let r=dist_esm_I(e);if(r){let o=r!==!0&&esm_de(r),s=(o||t).reverse,a=!o||o.reset;return esm_Pe({...t,loop:e,default:!1,pause:void 0,to:!s||esm_Ee(n)?n:void 0,from:a?t.from:void 0,reset:a,...o})}}function esm_Pe(t){let{to:e,from:n}=t=esm_de(t),r=new Set;return dist_esm_l.obj(e)&&Vt(e,r),dist_esm_l.obj(n)&&Vt(n,r),t.keys=r.size?Array.from(r):null,t}function Ot(t){let e=esm_Pe(t);return R.und(e.default)&&(e.default=dist_esm_ne(e)),e}function Vt(t,e){xt(t,(n,r)=>n!=null&&e.add(r))}var _n=["onStart","onRest","onChange","onPause","onResume"];function _t(t,e,n){t.animation[n]=e[n]!==esm_ke(e,n)?et(e[n],t.key):void 0}function esm_Ie(t,e,...n){t.animation[e]?.(...n),t.defaultProps[e]?.(...n)}var Fn=["onStart","onChange","onRest"],kn=1,esm_le=class{id=kn++;springs={};queue=[];ref;_flush;_initialProps;_lastAsyncId=0;_active=new Set;_changed=new Set;_started=!1;_item;_state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_events={onStart:new Map,onChange:new Map,onRest:new Map};constructor(e,n){this._onFrame=this._onFrame.bind(this),n&&(this._flush=n),e&&this.start({default:!0,...e})}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every(e=>e.idle&&!e.isDelayed&&!e.isPaused)}get item(){return this._item}set item(e){this._item=e}get(){let e={};return this.each((n,r)=>e[r]=n.get()),e}set(e){for(let n in e){let r=e[n];dist_esm_l.und(r)||this.springs[n].set(r)}}update(e){return e&&this.queue.push(esm_Pe(e)),this}start(e){let{queue:n}=this;return e?n=ht(e).map(esm_Pe):this.queue=[],this._flush?this._flush(this,n):(jt(this,n),esm_ze(this,n))}stop(e,n){if(e!==!!e&&(n=e),n){let r=this.springs;esm_Ve(ht(n),o=>r[o].stop(!!e))}else esm_oe(this._state,this._lastAsyncId),this.each(r=>r.stop(!!e));return this}pause(e){if(dist_esm_l.und(e))this.start({pause:!0});else{let n=this.springs;esm_Ve(ht(e),r=>n[r].pause())}return this}resume(e){if(dist_esm_l.und(e))this.start({pause:!1});else{let n=this.springs;esm_Ve(ht(e),r=>n[r].resume())}return this}each(e){xt(this.springs,e)}_onFrame(){let{onStart:e,onChange:n,onRest:r}=this._events,o=this._active.size>0,s=this._changed.size>0;(o&&!this._started||s&&!this._started)&&(this._started=!0,Pe(e,([u,p])=>{p.value=this.get(),u(p,this,this._item)}));let a=!o&&this._started,i=s||a&&r.size?this.get():null;s&&n.size&&Pe(n,([u,p])=>{p.value=i,u(p,this,this._item)}),a&&(this._started=!1,Pe(r,([u,p])=>{p.value=i,u(p,this,this._item)}))}eventObserved(e){if(e.type=="change")this._changed.add(e.parent),e.idle||this._active.add(e.parent);else if(e.type=="idle")this._active.delete(e.parent);else return;esm_n.onFrame(this._onFrame)}};function esm_ze(t,e){return Promise.all(e.map(n=>wt(t,n))).then(n=>esm_be(t,n))}async function wt(t,e,n){let{keys:r,to:o,from:s,loop:a,onRest:i,onResolve:u}=e,p=dist_esm_l.obj(e.default)&&e.default;a&&(e.loop=!1),o===!1&&(e.to=null),s===!1&&(e.from=null);let f=dist_esm_l.arr(o)||dist_esm_l.fun(o)?o:void 0;f?(e.to=void 0,e.onRest=void 0,p&&(p.onRest=void 0)):esm_Ve(Fn,P=>{let l=e[P];if(dist_esm_l.fun(l)){let h=t._events[P];e[P]=({finished:g,cancelled:x})=>{let S=h.get(l);S?(g||(S.finished=!1),x&&(S.cancelled=!0)):h.set(l,{value:null,finished:g||!1,cancelled:x||!1})},p&&(p[P]=e[P])}});let d=t._state;e.pause===!d.paused?(d.paused=e.pause,yt(e.pause?d.pauseQueue:d.resumeQueue)):d.paused&&(e.pause=!0);let m=(r||Object.keys(t.springs)).map(P=>t.springs[P].start(e)),b=e.cancel===!0||esm_ke(e,"cancel")===!0;(f||b&&d.asyncId)&&m.push(esm_Me(++t._lastAsyncId,{props:e,state:d,actions:{pause:Y,resume:Y,start(P,l){b?(esm_oe(d,t._lastAsyncId),l(esm_q(t))):(P.onRest=i,l(esm_De(f,P,d,t)))}}})),d.paused&&await new Promise(P=>{d.resumeQueue.add(P)});let c=esm_be(t,await Promise.all(m));if(a&&c.finished&&!(n&&c.noop)){let P=at(e,a,o);if(P)return jt(t,[P]),wt(t,P,!0)}return u&&esm_n.batchedUpdates(()=>u(c,t,t.item)),c}function esm_e(t,e){let n={...t.springs};return e&&pe(Ve(e),r=>{z.und(r.keys)&&(r=esm_Pe(r)),z.obj(r.to)||(r={...r,to:void 0}),Mt(n,r,o=>esm_Lt(o))}),pt(t,n),n}function pt(t,e){Ut(e,(n,r)=>{t.springs[r]||(t.springs[r]=n,Et(n,t))})}function esm_Lt(t,e){let n=new esm_ue;return n.key=t,e&&Gt(n,e),n}function Mt(t,e,n){e.keys&&esm_Ve(e.keys,r=>{(t[r]||(t[r]=n(r)))._prepareNode(e)})}function jt(t,e){esm_Ve(e,n=>{Mt(t.springs,n,r=>esm_Lt(r,t))})}var dist_esm_H=({children:t,...e})=>{let n=(0,external_React_.useContext)(esm_Ge),r=e.pause||!!n.pause,o=e.immediate||!!n.immediate;e=Lr(()=>({pause:r,immediate:o}),[r,o]);let{Provider:s}=esm_Ge;return external_React_.createElement(s,{value:e},t)},esm_Ge=wn(dist_esm_H,{});dist_esm_H.Provider=esm_Ge.Provider;dist_esm_H.Consumer=esm_Ge.Consumer;function wn(t,e){return Object.assign(t,external_React_.createContext(e)),t.Provider._context=t,t.Consumer._context=t,t}var esm_fe=()=>{let t=[],e=function(r){Ln();let o=[];return ce(t,(s,a)=>{if(Ke.und(r))o.push(s.start());else{let i=n(r,s,a);i&&o.push(s.start(i))}}),o};e.current=t,e.add=function(r){t.includes(r)||t.push(r)},e.delete=function(r){let o=t.indexOf(r);~o&&t.splice(o,1)},e.pause=function(){return ce(t,r=>r.pause(...arguments)),this},e.resume=function(){return ce(t,r=>r.resume(...arguments)),this},e.set=function(r){ce(t,(o,s)=>{let a=Ke.fun(r)?r(s,o):r;a&&o.set(a)})},e.start=function(r){let o=[];return ce(t,(s,a)=>{if(Ke.und(r))o.push(s.start());else{let i=this._getProps(r,s,a);i&&o.push(s.start(i))}}),o},e.stop=function(){return ce(t,r=>r.stop(...arguments)),this},e.update=function(r){return ce(t,(o,s)=>o.update(this._getProps(r,o,s))),this};let n=function(r,o,s){return Ke.fun(r)?r(s,o):r};return e._getProps=n,e};function esm_He(t,e,n){let r=jn.fun(e)&&e;r&&!n&&(n=[]);let o=Xe(()=>r||arguments.length==3?esm_fe():void 0,[]),s=Nt(0),a=Dn(),i=Xe(()=>({ctrls:[],queue:[],flush(h,g){let x=esm_e(h,g);return s.current>0&&!i.queue.length&&!Object.keys(x).some(A=>!h.springs[A])?esm_ze(h,g):new Promise(A=>{pt(h,x),i.queue.push(()=>{A(esm_ze(h,g))}),a()})}}),[]),u=Nt([...i.ctrls]),p=[],f=Dt(t)||0;Xe(()=>{Ye(u.current.slice(t,f),h=>{esm_xe(h,o),h.stop(!0)}),u.current.length=t,d(f,t)},[t]),Xe(()=>{d(0,Math.min(f,t))},n);function d(h,g){for(let x=h;x<g;x++){let S=u.current[x]||(u.current[x]=new esm_le(null,i.flush)),A=r?r(x,S):e[x];A&&(p[x]=Ot(A))}}let m=u.current.map((h,g)=>esm_e(h,p[g])),b=Mn(dist_esm_H),c=Dt(b),P=b!==c&&esm_Ue(b);qn(()=>{s.current++,i.ctrls=u.current;let{queue:h}=i;h.length&&(i.queue=[],Ye(h,g=>g())),Ye(u.current,(g,x)=>{o?.add(g),P&&g.start({default:b});let S=p[x];S&&(esm_he(g,S.ref),g.ref?g.queue.push(S):g.start(S))})}),Nn(()=>()=>{Ye(i.ctrls,h=>h.stop(!0))});let l=m.map(h=>({...h}));return o?[l,o]:l}function esm_J(t,e){let n=Qn.fun(t),[[r],o]=esm_He(1,n?t:[t],n?e||[]:e);return n||arguments.length==2?[r,o]:r}var Gn=()=>esm_fe(),Xo=()=>zn(Gn)[0];var Wo=(t,e)=>{let n=Bn(()=>new esm_ue(t,e));return Kn(()=>()=>{n.stop()}),n};function esm_Qt(t,e,n){let r=qt.fun(e)&&e;r&&!n&&(n=[]);let o=!0,s,a=esm_He(t,(i,u)=>{let p=r?r(i,u):e;return s=p.ref,o=o&&p.reverse,p},n||[{}]);if(Yn(()=>{Xn(a[1].current,(i,u)=>{let p=a[1].current[u+(o?1:-1)];if(esm_he(i,s),i.ref){p&&i.update({to:p.springs});return}p?i.start({to:p.springs}):i.start()})},n),r||arguments.length==3){let i=s??a[1];return i._getProps=(u,p,f)=>{let d=qt.fun(u)?u(f,p):u;if(d){let m=i.current[f+(d.reverse?1:-1)];return m&&(d.to=m.springs),d}},a}return a[0]}function esm_Gt(t,e,n){let r=G.fun(e)&&e,{reset:o,sort:s,trail:a=0,expires:i=!0,exitBeforeEnter:u=!1,onDestroyed:p,ref:f,config:d}=r?r():e,m=Jn(()=>r||arguments.length==3?esm_fe():void 0,[]),b=zt(t),c=[],P=lt(null),l=o?null:P.current;Je(()=>{P.current=c}),$n(()=>(j(c,y=>{m?.add(y.ctrl),y.ctrl.ref=m}),()=>{j(P.current,y=>{y.expired&&clearTimeout(y.expirationId),esm_xe(y.ctrl,m),y.ctrl.stop(!0)})}));let h=tr(b,r?r():e,l),g=o&&P.current||[];Je(()=>j(g,({ctrl:y,item:T,key:F})=>{esm_xe(y,m),dist_esm_I(p,T,F)}));let x=[];if(l&&j(l,(y,T)=>{y.expired?(clearTimeout(y.expirationId),g.push(y)):(T=x[T]=h.indexOf(y.key),~T&&(c[T]=y))}),j(b,(y,T)=>{c[T]||(c[T]={key:h[T],item:y,phase:"mount",ctrl:new esm_le},c[T].ctrl.item=y)}),x.length){let y=-1,{leave:T}=r?r():e;j(x,(F,k)=>{let O=l[k];~F?(y=c.indexOf(O),c[y]={...O,item:b[F]}):T&&c.splice(++y,0,O)})}G.fun(s)&&c.sort((y,T)=>s(y.item,T.item));let S=-a,A=Wn(),V=dist_esm_ne(e),_=new Map,v=lt(new Map),w=lt(!1);j(c,(y,T)=>{let F=y.key,k=y.phase,O=r?r():e,U,D,Jt=dist_esm_I(O.delay||0,F);if(k=="mount")U=O.enter,D="enter";else{let M=h.indexOf(F)<0;if(k!="leave")if(M)U=O.leave,D="leave";else if(U=O.update)D="update";else return;else if(!M)U=O.enter,D="enter";else return}if(U=dist_esm_I(U,y.item,T),U=G.obj(U)?esm_de(U):{to:U},!U.config){let M=d||V.config;U.config=dist_esm_I(M,y.item,T,D)}S+=a;let Z={...V,delay:Jt+S,ref:f,immediate:O.immediate,reset:!1,...U};if(D=="enter"&&G.und(Z.from)){let M=r?r():e,Te=G.und(M.initial)||l?M.from:M.initial;Z.from=dist_esm_I(Te,y.item,T)}let{onResolve:Wt}=Z;Z.onResolve=M=>{dist_esm_I(Wt,M);let Te=P.current,B=Te.find(Fe=>Fe.key===F);if(!!B&&!(M.cancelled&&B.phase!="update")&&B.ctrl.idle){let Fe=Te.every(ee=>ee.ctrl.idle);if(B.phase=="leave"){let ee=dist_esm_I(i,B.item);if(ee!==!1){let Ze=ee===!0?0:ee;if(B.expired=!0,!Fe&&Ze>0){Ze<=2147483647&&(B.expirationId=setTimeout(A,Ze));return}}}Fe&&Te.some(ee=>ee.expired)&&(v.current.delete(B),u&&(w.current=!0),A())}};let ft=esm_e(y.ctrl,Z);D==="leave"&&u?v.current.set(y,{phase:D,springs:ft,payload:Z}):_.set(y,{phase:D,springs:ft,payload:Z})});let C=Hn(dist_esm_H),$=Zn(C),L=C!==$&&esm_Ue(C);Je(()=>{L&&j(c,y=>{y.ctrl.start({default:C})})},[C]),j(_,(y,T)=>{if(v.current.size){let F=c.findIndex(k=>k.key===T.key);c.splice(F,1)}}),Je(()=>{j(v.current.size?v.current:_,({phase:y,payload:T},F)=>{let{ctrl:k}=F;F.phase=y,m?.add(k),L&&y=="enter"&&k.start({default:C}),T&&(esm_he(k,T.ref),(k.ref||m)&&!w.current?k.update(T):(k.start(T),w.current&&(w.current=!1)))})},o?void 0:n);let N=y=>Oe.createElement(Oe.Fragment,null,c.map((T,F)=>{let{springs:k}=_.get(T)||T.ctrl,O=y({...k},T.item,T,F);return O&&O.type?Oe.createElement(O.type,{...O.props,key:G.str(T.key)||G.num(T.key)?T.key:T.ctrl.id,ref:O.ref}):O}));return m?[N,m]:N}var esm_er=1;function tr(t,{key:e,keys:n=e},r){if(n===null){let o=new Set;return t.map(s=>{let a=r&&r.find(i=>i.item===s&&i.phase!=="leave"&&!o.has(i));return a?(o.add(a),a.key):esm_er++})}return G.und(n)?t:G.fun(n)?t.map(n):zt(n)}var hs=({container:t,...e}={})=>{let[n,r]=esm_J(()=>({scrollX:0,scrollY:0,scrollXProgress:0,scrollYProgress:0,...e}),[]);return or(()=>{let o=rr(({x:s,y:a})=>{r.start({scrollX:s.current,scrollXProgress:s.progress,scrollY:a.current,scrollYProgress:a.progress})},{container:t?.current||void 0});return()=>{nr(Object.values(n),s=>s.stop()),o()}},[]),n};var Ps=({container:t,...e})=>{let[n,r]=esm_J(()=>({width:0,height:0,...e}),[]);return ar(()=>{let o=sr(({width:s,height:a})=>{r.start({width:s,height:a,immediate:n.width.get()===0||n.height.get()===0})},{container:t?.current||void 0});return()=>{ir(Object.values(n),s=>s.stop()),o()}},[]),n};var cr={any:0,all:1};function Cs(t,e){let[n,r]=pr(!1),o=ur(),s=Bt.fun(t)&&t,a=s?s():{},{to:i={},from:u={},...p}=a,f=s?e:t,[d,m]=esm_J(()=>({from:u,...p}),[]);return lr(()=>{let b=o.current,{root:c,once:P,amount:l="any",...h}=f??{};if(!b||P&&n||typeof IntersectionObserver>"u")return;let g=new WeakMap,x=()=>(i&&m.start(i),r(!0),P?void 0:()=>{u&&m.start(u),r(!1)}),S=V=>{V.forEach(_=>{let v=g.get(_.target);if(_.isIntersecting!==Boolean(v))if(_.isIntersecting){let w=x();Bt.fun(w)?g.set(_.target,w):A.unobserve(_.target)}else v&&(v(),g.delete(_.target))})},A=new IntersectionObserver(S,{root:c&&c.current||void 0,threshold:typeof l=="number"||Array.isArray(l)?l:cr[l],...h});return A.observe(b),()=>A.unobserve(b)},[f]),s?[o,d]:[o,n]}function qs({children:t,...e}){return t(esm_J(e))}function Bs({items:t,children:e,...n}){let r=esm_Qt(t.length,n);return t.map((o,s)=>{let a=e(o,s);return fr.fun(a)?a(r[s]):a})}function Ys({items:t,children:e,...n}){return esm_Gt(t,n)(e)}var esm_W=class extends esm_X{constructor(n,r){super();this.source=n;this.calc=W(...r);let o=this._get(),s=esm_Le(o);esm_D(this,s.create(o))}key;idle=!0;calc;_active=new Set;advance(n){let r=this._get(),o=this.get();bt(r,o)||(dist_esm_k(this).setValue(r),this._onChange(r,this.idle)),!this.idle&&Yt(this._active)&&esm_ct(this)}_get(){let n=dist_esm_l.arr(this.source)?this.source.map(ve):ht(ve(this.source));return this.calc(...n)}_start(){this.idle&&!Yt(this._active)&&(this.idle=!1,esm_Ve(F(this),n=>{n.done=!1}),dist_esm_p.skipAnimation?(esm_n.batchedUpdates(()=>this.advance()),esm_ct(this)):qe.start(this))}_attach(){let n=1;esm_Ve(ht(this.source),r=>{Pt(r)&&Gt(r,this),esm_Re(r)&&(r.idle||this._active.add(r),n=Math.max(n,r.priority+1))}),this.priority=n,this._start()}_detach(){esm_Ve(ht(this.source),n=>{Pt(n)&&Qt(n,this)}),this._active.clear(),esm_ct(this)}eventObserved(n){n.type=="change"?n.idle?this.advance():(this._active.add(n.parent),this._start()):n.type=="idle"?this._active.delete(n.parent):n.type=="priority"&&(this.priority=ht(this.source).reduce((r,o)=>Math.max(r,(esm_Re(o)?o.priority:0)+1),0))}};function vr(t){return t.idle!==!1}function Yt(t){return!t.size||Array.from(t).every(vr)}function esm_ct(t){t.idle||(t.idle=!0,esm_Ve(F(t),e=>{e.done=!0}),$t(t,{type:"idle",parent:t}))}var esm_ui=(t,...e)=>new esm_W(t,e),pi=(t,...e)=>(Cr(),new esm_W(t,e));dist_esm_p.assign({createStringInterpolator:Xt,to:(t,e)=>new esm_W(t,e)});var di=qe.advance;
 
-;// CONCATENATED MODULE: external "ReactDOM"
+;// external "ReactDOM"
 const external_ReactDOM_namespaceObject = window["ReactDOM"];
-;// CONCATENATED MODULE: ./node_modules/@react-spring/web/dist/esm/index.js
+;// ./node_modules/@react-spring/web/dist/esm/index.js
 var web_dist_esm_k=/^--/;function web_dist_esm_I(t,e){return e==null||typeof e=="boolean"||e===""?"":typeof e=="number"&&e!==0&&!web_dist_esm_k.test(t)&&!(web_dist_esm_c.hasOwnProperty(t)&&web_dist_esm_c[t])?e+"px":(""+e).trim()}var web_dist_esm_v={};function esm_V(t,e){if(!t.nodeType||!t.setAttribute)return!1;let r=t.nodeName==="filter"||t.parentNode&&t.parentNode.nodeName==="filter",{style:i,children:s,scrollTop:u,scrollLeft:l,viewBox:a,...n}=e,d=Object.values(n),m=Object.keys(n).map(o=>r||t.hasAttribute(o)?o:web_dist_esm_v[o]||(web_dist_esm_v[o]=o.replace(/([A-Z])/g,p=>"-"+p.toLowerCase())));s!==void 0&&(t.textContent=s);for(let o in i)if(i.hasOwnProperty(o)){let p=web_dist_esm_I(o,i[o]);web_dist_esm_k.test(o)?t.style.setProperty(o,p):t.style[o]=p}m.forEach((o,p)=>{t.setAttribute(o,d[p])}),u!==void 0&&(t.scrollTop=u),l!==void 0&&(t.scrollLeft=l),a!==void 0&&t.setAttribute("viewBox",a)}var web_dist_esm_c={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},esm_F=(t,e)=>t+e.charAt(0).toUpperCase()+e.substring(1),esm_L=["Webkit","Ms","Moz","O"];web_dist_esm_c=Object.keys(web_dist_esm_c).reduce((t,e)=>(esm_L.forEach(r=>t[esm_F(r,e)]=t[e]),t),web_dist_esm_c);var esm_=/^(matrix|translate|scale|rotate|skew)/,dist_esm_$=/^(translate)/,dist_esm_G=/^(rotate|skew)/,web_dist_esm_y=(t,e)=>dist_esm_l.num(t)&&t!==0?t+e:t,web_dist_esm_h=(t,e)=>dist_esm_l.arr(t)?t.every(r=>web_dist_esm_h(r,e)):dist_esm_l.num(t)?t===e:parseFloat(t)===e,dist_esm_g=class extends animated_dist_esm_u{constructor({x:e,y:r,z:i,...s}){let u=[],l=[];(e||r||i)&&(u.push([e||0,r||0,i||0]),l.push(a=>[`translate3d(${a.map(n=>web_dist_esm_y(n,"px")).join(",")})`,web_dist_esm_h(a,0)])),xt(s,(a,n)=>{if(n==="transform")u.push([a||""]),l.push(d=>[d,d===""]);else if(esm_.test(n)){if(delete s[n],dist_esm_l.und(a))return;let d=dist_esm_$.test(n)?"px":dist_esm_G.test(n)?"deg":"";u.push(ht(a)),l.push(n==="rotate3d"?([m,o,p,O])=>[`rotate3d(${m},${o},${p},${web_dist_esm_y(O,d)})`,web_dist_esm_h(O,0)]:m=>[`${n}(${m.map(o=>web_dist_esm_y(o,d)).join(",")})`,web_dist_esm_h(m,n.startsWith("scale")?1:0)])}}),u.length&&(s.transform=new web_dist_esm_x(u,l)),super(s)}},web_dist_esm_x=class extends esm_ge{constructor(r,i){super();this.inputs=r;this.transforms=i}_value=null;get(){return this._value||(this._value=this._get())}_get(){let r="",i=!0;return esm_Ve(this.inputs,(s,u)=>{let l=ve(s[0]),[a,n]=this.transforms[u](dist_esm_l.arr(l)?l:s.map(ve));r+=" "+a,i=i&&n}),i?"none":r}observerAdded(r){r==1&&esm_Ve(this.inputs,i=>esm_Ve(i,s=>Pt(s)&&Gt(s,this)))}observerRemoved(r){r==0&&esm_Ve(this.inputs,i=>esm_Ve(i,s=>Pt(s)&&Qt(s,this)))}eventObserved(r){r.type=="change"&&(this._value=null),$t(this,r)}};var esm_C=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"];dist_esm_p.assign({batchedUpdates:external_ReactDOM_namespaceObject.unstable_batchedUpdates,createStringInterpolator:Xt,colors:It});var dist_esm_q=dist_esm_Ke(esm_C,{applyAnimatedValues:esm_V,createAnimatedStyle:t=>new dist_esm_g(t),getComponentProps:({scrollTop:t,scrollLeft:e,...r})=>r}),dist_esm_it=dist_esm_q.animated;
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-moving-animation/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-moving-animation/index.js
 /**
  * External dependencies
  */
@@ -39792,7 +40318,8 @@
     isBlockSelected,
     isFirstMultiSelectedBlock,
     isBlockMultiSelected,
-    isAncestorMultiSelected
+    isAncestorMultiSelected,
+    isDraggingBlocks
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
 
   // Whenever the trigger changes, we need to take a snapshot of the current
@@ -39803,9 +40330,7 @@
   } = (0,external_wp_element_namespaceObject.useMemo)(() => ({
     previous: ref.current && getAbsolutePosition(ref.current),
     prevRect: ref.current && ref.current.getBoundingClientRect()
-  }),
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  [triggerAnimationOnChange]);
+  }), [triggerAnimationOnChange]);
   (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
     if (!previous || !ref.current) {
       return;
@@ -39813,7 +40338,12 @@
     const scrollContainer = (0,external_wp_dom_namespaceObject.getScrollContainer)(ref.current);
     const isSelected = isBlockSelected(clientId);
     const adjustScrolling = isSelected || isFirstMultiSelectedBlock(clientId);
+    const isDragging = isDraggingBlocks();
     function preserveScrollPosition() {
+      // The user already scrolled when dragging blocks.
+      if (isDragging) {
+        return;
+      }
       if (adjustScrolling && prevRect) {
         const blockRect = ref.current.getBoundingClientRect();
         const diff = blockRect.top - prevRect.top;
@@ -39827,7 +40357,7 @@
     // motion, if the user is typing (insertion by Enter), or if the block
     // count exceeds the threshold (insertion caused all the blocks that
     // follow to animate).
-    // To do: consider enableing the _moving_ animation even for large
+    // To do: consider enabling the _moving_ animation even for large
     // posts, while only disabling the _insertion_ animation?
     const disableAnimation = window.matchMedia('(prefers-reduced-motion: reduce)').matches || isTyping() || getGlobalBlockCount() > BLOCK_ANIMATION_THRESHOLD;
     if (disableAnimation) {
@@ -39837,6 +40367,13 @@
       return;
     }
     const isPartOfSelection = isSelected || isBlockMultiSelected(clientId) || isAncestorMultiSelected(clientId);
+
+    // The user already dragged the blocks to the new position, so don't
+    // animate the dragged blocks.
+    if (isPartOfSelection && isDragging) {
+      return;
+    }
+
     // Make sure the other blocks move under the selected block(s).
     const zIndex = isPartOfSelection ? '1' : '';
     const controller = new esm_le({
@@ -39886,77 +40423,23 @@
         y: 0
       });
     };
-  }, [previous, prevRect, clientId, isTyping, getGlobalBlockCount, isBlockSelected, isFirstMultiSelectedBlock, isBlockMultiSelected, isAncestorMultiSelected]);
+  }, [previous, prevRect, clientId, isTyping, getGlobalBlockCount, isBlockSelected, isFirstMultiSelectedBlock, isBlockMultiSelected, isAncestorMultiSelected, isDraggingBlocks]);
   return ref;
 }
 /* harmony default export */ const use_moving_animation = (useMovingAnimation);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/dom.js
-const BLOCK_SELECTOR = '.block-editor-block-list__block';
-const APPENDER_SELECTOR = '.block-list-appender';
-const BLOCK_APPENDER_CLASS = '.block-editor-button-block-appender';
-
-/**
- * Returns true if two elements are contained within the same block.
- *
- * @param {Element} a First element.
- * @param {Element} b Second element.
- *
- * @return {boolean} Whether elements are in the same block.
- */
-function isInSameBlock(a, b) {
-  return a.closest(BLOCK_SELECTOR) === b.closest(BLOCK_SELECTOR);
-}
-
-/**
- * Returns true if an element is considered part of the block and not its inner
- * blocks or appender.
- *
- * @param {Element} blockElement Block container element.
- * @param {Element} element      Element.
- *
- * @return {boolean} Whether an element is considered part of the block and not
- *                   its inner blocks or appender.
- */
-function isInsideRootBlock(blockElement, element) {
-  const parentBlock = element.closest([BLOCK_SELECTOR, APPENDER_SELECTOR, BLOCK_APPENDER_CLASS].join(','));
-  return parentBlock === blockElement;
-}
-
-/**
- * Finds the block client ID given any DOM node inside the block.
- *
- * @param {Node?} node DOM node.
- *
- * @return {string|undefined} Client ID or undefined if the node is not part of
- *                            a block.
- */
-function getBlockClientId(node) {
-  while (node && node.nodeType !== node.ELEMENT_NODE) {
-    node = node.parentNode;
-  }
-  if (!node) {
-    return;
-  }
-  const elementNode = /** @type {Element} */node;
-  const blockNode = elementNode.closest(BLOCK_SELECTOR);
-  if (!blockNode) {
-    return;
-  }
-  return blockNode.id.slice('block-'.length);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-focus-first-element.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-focus-first-element.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -39978,11 +40461,11 @@
   const {
     isBlockSelected,
     isMultiSelecting,
-    __unstableGetEditorMode
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+    isZoomOut
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     // Check if the block is still selected at the time this effect runs.
-    if (!isBlockSelected(clientId) || isMultiSelecting() || __unstableGetEditorMode() === 'zoom-out') {
+    if (!isBlockSelected(clientId) || isMultiSelecting() || isZoomOut()) {
       return;
     }
     if (initialPosition === undefined || initialPosition === null) {
@@ -40026,25 +40509,41 @@
   return ref;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-is-hovered.js
-/**
- * WordPress dependencies
- */
-
-function listener(event) {
-  if (event.defaultPrevented) {
-    return;
-  }
-  const action = event.type === 'mouseover' ? 'add' : 'remove';
-  event.preventDefault();
-  event.currentTarget.classList[action]('is-hovered');
-}
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-is-hovered.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 /*
  * Adds `is-hovered` class when the block is hovered and in navigation or
  * outline mode.
  */
-function useIsHovered() {
+function useIsHovered({
+  clientId
+}) {
+  const {
+    hoverBlock
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  function listener(event) {
+    if (event.defaultPrevented) {
+      return;
+    }
+    const action = event.type === 'mouseover' ? 'add' : 'remove';
+    event.preventDefault();
+    event.currentTarget.classList[action]('is-hovered');
+    if (action === 'add') {
+      hoverBlock(clientId);
+    } else {
+      hoverBlock(null);
+    }
+  }
   return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
     node.addEventListener('mouseout', listener);
     node.addEventListener('mouseover', listener);
@@ -40054,11 +40553,12 @@
 
       // Remove class in case it lingers.
       node.classList.remove('is-hovered');
+      hoverBlock(null);
     };
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-focus-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-focus-handler.js
 /**
  * WordPress dependencies
  */
@@ -40110,7 +40610,7 @@
         return;
       }
 
-      // If an inner block is focussed, that block is resposible for
+      // If an inner block is focussed, that block is responsible for
       // setting the selected block.
       if (!isInsideRootBlock(node, event.target)) {
         return;
@@ -40124,18 +40624,87 @@
   }, [isBlockSelected, selectBlock]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/icons/build-module/library/drag-handle.js
+/**
+ * WordPress dependencies
+ */
+
+
+const dragHandle = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  width: "24",
+  height: "24",
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M8 7h2V5H8v2zm0 6h2v-2H8v2zm0 6h2v-2H8v2zm6-14v2h2V5h-2zm0 8h2v-2h-2v2zm0 6h2v-2h-2v2z"
+  })
+});
+/* harmony default export */ const drag_handle = (dragHandle);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/draggable-chip.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function BlockDraggableChip({
+  count,
+  icon,
+  isPattern,
+  fadeWhenDisabled
+}) {
+  const patternLabel = isPattern && (0,external_wp_i18n_namespaceObject.__)('Pattern');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    className: "block-editor-block-draggable-chip-wrapper",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      className: "block-editor-block-draggable-chip",
+      "data-testid": "block-draggable-chip",
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
+        justify: "center",
+        className: "block-editor-block-draggable-chip__content",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          children: icon ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+            icon: icon
+          }) : patternLabel || (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: Number of blocks. */
+          (0,external_wp_i18n_namespaceObject._n)('%d block', '%d blocks', count), count)
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+            icon: drag_handle
+          })
+        }), fadeWhenDisabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          className: "block-editor-block-draggable-chip__disabled",
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+            className: "block-editor-block-draggable-chip__disabled-icon"
+          })
+        })]
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
 
 
 /**
@@ -40146,18 +40715,27 @@
  *
  * @param {string} clientId Block client ID.
  */
+
 function useEventHandlers({
   clientId,
   isSelected
 }) {
   const {
+    getBlockType
+  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
+  const {
     getBlockRootClientId,
-    getBlockIndex
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+    isZoomOut,
+    hasMultiSelection,
+    getBlockName
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
   const {
     insertAfterBlock,
-    removeBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+    removeBlock,
+    resetZoomLevel,
+    startDraggingBlocks,
+    stopDraggingBlocks
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
   return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
     if (!isSelected) {
       return;
@@ -40184,7 +40762,9 @@
         return;
       }
       event.preventDefault();
-      if (keyCode === external_wp_keycodes_namespaceObject.ENTER) {
+      if (keyCode === external_wp_keycodes_namespaceObject.ENTER && isZoomOut()) {
+        resetZoomLevel();
+      } else if (keyCode === external_wp_keycodes_namespaceObject.ENTER) {
         insertAfterBlock(clientId);
       } else {
         removeBlock(clientId);
@@ -40198,7 +40778,89 @@
      * @param {DragEvent} event Drag event.
      */
     function onDragStart(event) {
-      event.preventDefault();
+      if (node !== event.target || node.isContentEditable || node.ownerDocument.activeElement !== node || hasMultiSelection()) {
+        event.preventDefault();
+        return;
+      }
+      const data = JSON.stringify({
+        type: 'block',
+        srcClientIds: [clientId],
+        srcRootClientId: getBlockRootClientId(clientId)
+      });
+      event.dataTransfer.effectAllowed = 'move'; // remove "+" cursor
+      event.dataTransfer.clearData();
+      event.dataTransfer.setData('wp-blocks', data);
+      const {
+        ownerDocument
+      } = node;
+      const {
+        defaultView
+      } = ownerDocument;
+      const selection = defaultView.getSelection();
+      selection.removeAllRanges();
+      const domNode = document.createElement('div');
+      const root = (0,external_wp_element_namespaceObject.createRoot)(domNode);
+      root.render(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockDraggableChip, {
+        icon: getBlockType(getBlockName(clientId)).icon
+      }));
+      document.body.appendChild(domNode);
+      domNode.style.position = 'absolute';
+      domNode.style.top = '0';
+      domNode.style.left = '0';
+      domNode.style.zIndex = '1000';
+      domNode.style.pointerEvents = 'none';
+
+      // Setting the drag chip as the drag image actually works, but
+      // the behaviour is slightly different in every browser. In
+      // Safari, it animates, in Firefox it's slightly transparent...
+      // So we set a fake drag image and have to reposition it
+      // ourselves.
+      const dragElement = ownerDocument.createElement('div');
+      // Chrome will show a globe icon if the drag element does not
+      // have dimensions.
+      dragElement.style.width = '1px';
+      dragElement.style.height = '1px';
+      dragElement.style.position = 'fixed';
+      dragElement.style.visibility = 'hidden';
+      ownerDocument.body.appendChild(dragElement);
+      event.dataTransfer.setDragImage(dragElement, 0, 0);
+      let offset = {
+        x: 0,
+        y: 0
+      };
+      if (document !== ownerDocument) {
+        const frame = defaultView.frameElement;
+        if (frame) {
+          const rect = frame.getBoundingClientRect();
+          offset = {
+            x: rect.left,
+            y: rect.top
+          };
+        }
+      }
+
+      // chip handle offset
+      offset.x -= 58;
+      function over(e) {
+        domNode.style.transform = `translate( ${e.clientX + offset.x}px, ${e.clientY + offset.y}px )`;
+      }
+      over(event);
+      function end() {
+        ownerDocument.removeEventListener('dragover', over);
+        ownerDocument.removeEventListener('dragend', end);
+        domNode.remove();
+        dragElement.remove();
+        stopDraggingBlocks();
+        document.body.classList.remove('is-dragging-components-draggable');
+        ownerDocument.documentElement.classList.remove('is-dragging');
+      }
+      ownerDocument.addEventListener('dragover', over);
+      ownerDocument.addEventListener('dragend', end);
+      ownerDocument.addEventListener('drop', end);
+      startDraggingBlocks([clientId]);
+      // Important because it hides the block toolbar.
+      document.body.classList.add('is-dragging-components-draggable');
+      ownerDocument.documentElement.classList.add('is-dragging');
     }
     node.addEventListener('keydown', onKeyDown);
     node.addEventListener('dragstart', onDragStart);
@@ -40206,59 +40868,10 @@
       node.removeEventListener('keydown', onKeyDown);
       node.removeEventListener('dragstart', onDragStart);
     };
-  }, [clientId, isSelected, getBlockRootClientId, getBlockIndex, insertAfterBlock, removeBlock]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-nav-mode-exit.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Allows navigation mode to be exited by clicking in the selected block.
- *
- * @param {string} clientId Block client ID.
- */
-function useNavModeExit(clientId) {
-  const {
-    isNavigationMode,
-    isBlockSelected
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    setNavigationMode,
-    selectBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    function onMouseDown(event) {
-      // Don't select a block if it's already handled by a child
-      // block.
-      if (isNavigationMode() && !event.defaultPrevented) {
-        // Prevent focus from moving to the block.
-        event.preventDefault();
-
-        // When clicking on a selected block, exit navigation mode.
-        if (isBlockSelected(clientId)) {
-          setNavigationMode(false);
-        } else {
-          selectBlock(clientId);
-        }
-      }
-    }
-    node.addEventListener('mousedown', onMouseDown);
-    return () => {
-      node.removeEventListener('mousedown', onMouseDown);
-    };
-  }, [clientId, isNavigationMode, isBlockSelected, setNavigationMode]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-intersection-observer.js
+  }, [clientId, isSelected, getBlockRootClientId, insertAfterBlock, removeBlock, isZoomOut, resetZoomLevel, hasMultiSelection, startDraggingBlocks, stopDraggingBlocks]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-intersection-observer.js
 /**
  * WordPress dependencies
  */
@@ -40281,7 +40894,7 @@
   }, [observer]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-scroll-into-view.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-scroll-into-view.js
 /**
  * WordPress dependencies
  */
@@ -40319,7 +40932,7 @@
   }, [isSelected]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-flash-editable-blocks/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-flash-editable-blocks/index.js
 /**
  * WordPress dependencies
  */
@@ -40373,7 +40986,91 @@
   }, [isEnabled]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/use-firefox-draggable-compatibility.js
+/**
+ * WordPress dependencies
+ */
+
+const nodesByDocument = new Map();
+function add(doc, node) {
+  let set = nodesByDocument.get(doc);
+  if (!set) {
+    set = new Set();
+    nodesByDocument.set(doc, set);
+    doc.addEventListener('pointerdown', down);
+  }
+  set.add(node);
+}
+function remove(doc, node) {
+  const set = nodesByDocument.get(doc);
+  if (set) {
+    set.delete(node);
+    restore(node);
+    if (set.size === 0) {
+      nodesByDocument.delete(doc);
+      doc.removeEventListener('pointerdown', down);
+    }
+  }
+}
+function restore(node) {
+  const prevDraggable = node.getAttribute('data-draggable');
+  if (prevDraggable) {
+    node.removeAttribute('data-draggable');
+    // Only restore if `draggable` is still removed. It could have been
+    // changed by React in the meantime.
+    if (prevDraggable === 'true' && !node.getAttribute('draggable')) {
+      node.setAttribute('draggable', 'true');
+    }
+  }
+}
+function down(event) {
+  const {
+    target
+  } = event;
+  const {
+    ownerDocument,
+    isContentEditable,
+    tagName
+  } = target;
+  const isInputOrTextArea = ['INPUT', 'TEXTAREA'].includes(tagName);
+  const nodes = nodesByDocument.get(ownerDocument);
+  if (isContentEditable || isInputOrTextArea) {
+    // Whenever an editable element or an input or textarea is clicked,
+    // check which draggable blocks contain this element, and temporarily
+    // disable draggability.
+    for (const node of nodes) {
+      if (node.getAttribute('draggable') === 'true' && node.contains(target)) {
+        node.removeAttribute('draggable');
+        node.setAttribute('data-draggable', 'true');
+      }
+    }
+  } else {
+    // Whenever a non-editable element or an input or textarea is clicked,
+    // re-enable draggability for any blocks that were previously disabled.
+    for (const node of nodes) {
+      restore(node);
+    }
+  }
+}
+
+/**
+ * In Firefox, the `draggable` and `contenteditable` or `input` or `textarea`
+ * elements don't play well together. When these elements are within a
+ * `draggable` element, selection doesn't get set in the right place. The only
+ * solution is to temporarily remove the `draggable` attribute clicking inside
+ * these elements.
+ * @return {Function} Cleanup function.
+ */
+function useFirefoxDraggableCompatibility() {
+  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
+    add(node.ownerDocument, node);
+    return () => {
+      remove(node.ownerDocument, node);
+    };
+  }, []);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-block-props/index.js
 /**
  * External dependencies
  */
@@ -40422,13 +41119,13 @@
  *
  * export default function Edit() {
  *
- *   const blockProps = useBlockProps(
+ *   const blockProps = useBlockProps( {
  *     className: 'my-custom-class',
  *     style: {
  *       color: '#222222',
  *       backgroundColor: '#eeeeee'
  *     }
- *   )
+ *   } )
  *
  *   return (
  *	    <div { ...blockProps }>
@@ -40471,35 +41168,37 @@
     isReusable,
     isDragging,
     hasChildSelected,
-    isBlockMovingMode,
-    canInsertMovingBlock,
     isEditingDisabled,
     hasEditableOutline,
     isTemporarilyEditingAsBlocks,
     defaultClassName,
-    templateLock
+    isSectionBlock,
+    canMove
   } = (0,external_wp_element_namespaceObject.useContext)(PrivateBlockContext);
 
   // translators: %s: Type of block (i.e. Text, Image etc)
   const blockLabel = (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Block: %s'), blockTitle);
   const htmlSuffix = mode === 'html' && !__unstableIsHtml ? '-visual' : '';
+  const ffDragRef = useFirefoxDraggableCompatibility();
   const mergedRefs = (0,external_wp_compose_namespaceObject.useMergeRefs)([props.ref, useFocusFirstElement({
     clientId,
     initialPosition
   }), useBlockRefProvider(clientId), useFocusHandler(clientId), useEventHandlers({
     clientId,
     isSelected
-  }), useNavModeExit(clientId), useIsHovered(), useIntersectionObserver(), use_moving_animation({
+  }), useIsHovered({
+    clientId
+  }), useIntersectionObserver(), use_moving_animation({
     triggerAnimationOnChange: index,
     clientId
   }), (0,external_wp_compose_namespaceObject.useDisabled)({
     isDisabled: !hasOverlay
   }), useFlashEditableBlocks({
     clientId,
-    isEnabled: name === 'core/block' || templateLock === 'contentOnly'
+    isEnabled: isSectionBlock
   }), useScrollIntoView({
     isSelected
-  })]);
+  }), canMove ? ffDragRef : undefined]);
   const blockEditContext = useBlockEditContext();
   const hasBlockBindings = !!blockEditContext[blockBindingsKey];
   const bindingsStyle = hasBlockBindings && canBindBlock(name) ? {
@@ -40517,6 +41216,7 @@
   }
   return {
     tabIndex: blockEditingMode === 'disabled' ? -1 : 0,
+    draggable: canMove && !hasChildSelected ? true : undefined,
     ...wrapperProps,
     ...props,
     ref: mergedRefs,
@@ -40538,8 +41238,6 @@
       'is-reusable': isReusable,
       'is-dragging': isDragging,
       'has-child-selected': hasChildSelected,
-      'is-block-moving-mode': isBlockMovingMode,
-      'can-insert-moving-block': canInsertMovingBlock,
       'is-editing-disabled': isEditingDisabled,
       'has-editable-outline': hasEditableOutline,
       'has-negative-margin': hasNegativeMargin,
@@ -40560,7 +41258,7 @@
  */
 use_block_props_useBlockProps.save = external_wp_blocks_namespaceObject.__unstableGetBlockProps;
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/block.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/block.js
 /**
  * External dependencies
  */
@@ -40599,8 +41297,6 @@
  * @return {Object} Merged props.
  */
 
-
-
 function mergeWrapperProps(propsA, propsB) {
   const newProps = {
     ...propsA,
@@ -40649,6 +41345,7 @@
   wrapperProps,
   setAttributes,
   onReplace,
+  onRemove,
   onInsertBlocksAfter,
   onMerge,
   toggleSelection
@@ -40660,10 +41357,6 @@
     themeSupportsLayout,
     ...context
   } = (0,external_wp_element_namespaceObject.useContext)(PrivateBlockContext);
-  const {
-    removeBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const onRemove = (0,external_wp_element_namespaceObject.useCallback)(() => removeBlock(clientId), [clientId, removeBlock]);
   const parentLayout = useLayout() || {};
 
   // We wrap the BlockEdit component in a div that hides it when editing in
@@ -40845,6 +41538,7 @@
       function switchToDefaultOrRemove() {
         const block = getBlock(clientId);
         const defaultBlockName = (0,external_wp_blocks_namespaceObject.getDefaultBlockName)();
+        const defaultBlockType = (0,external_wp_blocks_namespaceObject.getBlockType)(defaultBlockName);
         if (getBlockName(clientId) !== defaultBlockName) {
           const replacement = (0,external_wp_blocks_namespaceObject.switchToBlockType)(block, defaultBlockName);
           if (replacement && replacement.length) {
@@ -40858,6 +41552,9 @@
               selectBlock(nextBlockClientId);
             });
           }
+        } else if (defaultBlockType.merge) {
+          const attributes = defaultBlockType.merge({}, block.attributes);
+          replaceBlocks([clientId], [(0,external_wp_blocks_namespaceObject.createBlock)(defaultBlockName, attributes)]);
         }
       }
 
@@ -40871,12 +41568,15 @@
        *                                  to the moved block.
        */
       function moveFirstItemUp(_clientId, changeSelection = true) {
+        const wrapperBlockName = getBlockName(_clientId);
+        const wrapperBlockType = (0,external_wp_blocks_namespaceObject.getBlockType)(wrapperBlockName);
+        const isTextualWrapper = wrapperBlockType.category === 'text';
         const targetRootClientId = getBlockRootClientId(_clientId);
         const blockOrder = getBlockOrder(_clientId);
         const [firstClientId] = blockOrder;
         if (blockOrder.length === 1 && (0,external_wp_blocks_namespaceObject.isUnmodifiedBlock)(getBlock(firstClientId))) {
           removeBlock(_clientId);
-        } else {
+        } else if (isTextualWrapper) {
           registry.batch(() => {
             if (canInsertBlockType(getBlockName(firstClientId), targetRootClientId)) {
               moveBlocksToPosition([firstClientId], _clientId, targetRootClientId, getBlockIndex(_clientId));
@@ -40893,6 +41593,8 @@
               removeBlock(_clientId, false);
             }
           });
+        } else {
+          switchToDefaultOrRemove();
         }
       }
 
@@ -40964,6 +41666,9 @@
       const replacementBlocks = blocks?.length === 1 && Array.isArray(blocks[0]) ? blocks[0] : blocks;
       replaceBlocks([ownProps.clientId], replacementBlocks, indexToSelect, initialPosition);
     },
+    onRemove() {
+      removeBlock(ownProps.clientId);
+    },
     toggleSelection(selectionEnabled) {
       toggleSelection(selectionEnabled);
     }
@@ -40991,6 +41696,7 @@
       getBlockMode,
       isSelectionEnabled,
       getTemplateLock,
+      isSectionBlock: _isSectionBlock,
       getBlockWithoutAttributes,
       getBlockAttributes,
       canRemoveBlock,
@@ -41011,10 +41717,7 @@
       __unstableSelectionHasUnmergeableBlock,
       isBlockBeingDragged,
       isDragging,
-      hasBlockMovingClientId,
-      canInsertBlockType,
       __unstableHasActiveBlockOverlayActive,
-      __unstableGetEditorMode,
       getSelectedBlocksInitialCaretPosition
     } = unlock(select(store));
     const blockWithoutAttributes = getBlockWithoutAttributes(clientId);
@@ -41038,7 +41741,7 @@
     const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName);
     const {
       supportsLayout,
-      __unstableIsPreviewMode: isPreviewMode
+      isPreviewMode
     } = getSettings();
     const hasLightBlockWrapper = blockType?.apiVersion > 1;
     const previewContext = {
@@ -41067,7 +41770,6 @@
     const isMultiSelected = isBlockMultiSelected(clientId);
     const checkDeep = true;
     const isAncestorOfSelectedBlock = hasSelectedInnerBlock(clientId, checkDeep);
-    const movingClientId = hasBlockMovingClientId();
     const blockEditingMode = getBlockEditingMode(clientId);
     const multiple = (0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockName, 'multiple', true);
 
@@ -41080,7 +41782,7 @@
       mode: getBlockMode(clientId),
       isSelectionEnabled: isSelectionEnabled(),
       isLocked: !!getTemplateLock(rootClientId),
-      templateLock: getTemplateLock(clientId),
+      isSectionBlock: _isSectionBlock(clientId),
       canRemove,
       canMove,
       isSelected: _isSelected,
@@ -41092,15 +41794,12 @@
       blockTitle: match?.title || blockType?.title,
       isSubtreeDisabled: blockEditingMode === 'disabled' && isBlockSubtreeDisabled(clientId),
       hasOverlay: __unstableHasActiveBlockOverlayActive(clientId) && !isDragging(),
-      initialPosition: _isSelected && (__unstableGetEditorMode() === 'edit' || __unstableGetEditorMode() === 'zoom-out') // Don't recalculate the initialPosition when toggling in/out of zoom-out mode
-      ? getSelectedBlocksInitialCaretPosition() : undefined,
+      initialPosition: _isSelected ? getSelectedBlocksInitialCaretPosition() : undefined,
       isHighlighted: isBlockHighlighted(clientId),
       isMultiSelected,
       isPartiallySelected: isMultiSelected && !__unstableIsFullySelected() && !__unstableSelectionHasUnmergeableBlock(),
       isDragging: isBlockBeingDragged(clientId),
       hasChildSelected: isAncestorOfSelectedBlock,
-      isBlockMovingMode: !!movingClientId,
-      canInsertMovingBlock: movingClientId && canInsertBlockType(getBlockName(movingClientId), rootClientId),
       isEditingDisabled: blockEditingMode === 'disabled',
       hasEditableOutline: blockEditingMode !== 'disabled' && getBlockEditingMode(rootClientId) === 'disabled',
       originalBlockClientId: isInvalid ? blocksWithSameName[0] : false
@@ -41137,9 +41836,7 @@
     isReusable,
     isDragging,
     hasChildSelected,
-    isBlockMovingMode,
-    canInsertMovingBlock,
-    templateLock,
+    isSectionBlock,
     isEditingDisabled,
     hasEditableOutline,
     className,
@@ -41182,9 +41879,7 @@
     isReusable,
     isDragging,
     hasChildSelected,
-    isBlockMovingMode,
-    canInsertMovingBlock,
-    templateLock,
+    isSectionBlock,
     isEditingDisabled,
     hasEditableOutline,
     isTemporarilyEditingAsBlocks,
@@ -41192,7 +41887,8 @@
     mayDisplayControls,
     mayDisplayParentControls,
     originalBlockClientId,
-    themeSupportsLayout
+    themeSupportsLayout,
+    canMove
   };
 
   // Here we separate between the props passed to BlockListBlock and any other
@@ -41225,680 +41921,831 @@
     })
   });
 }
-/* harmony default export */ const block_list_block = ((0,external_wp_element_namespaceObject.memo)(BlockListBlockProvider));
-
-;// CONCATENATED MODULE: external ["wp","htmlEntities"]
+/* harmony default export */ const block = ((0,external_wp_element_namespaceObject.memo)(BlockListBlockProvider));
+
+;// external ["wp","htmlEntities"]
 const external_wp_htmlEntities_namespaceObject = window["wp"]["htmlEntities"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/tips.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-const globalTips = [(0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('While writing, you can press <kbd>/</kbd> to quickly insert new blocks.'), {
-  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
-}), (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Indent a list by pressing <kbd>space</kbd> at the beginning of a line.'), {
-  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
-}), (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Outdent a list by pressing <kbd>backspace</kbd> at the beginning of a line.'), {
-  kbd: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("kbd", {})
-}), (0,external_wp_i18n_namespaceObject.__)('Drag files into the editor to automatically insert media blocks.'), (0,external_wp_i18n_namespaceObject.__)("Change a block's type by pressing the block icon on the toolbar.")];
-function Tips() {
-  const [randomIndex] = (0,external_wp_element_namespaceObject.useState)(
-  // Disable Reason: I'm not generating an HTML id.
-  // eslint-disable-next-line no-restricted-syntax
-  Math.floor(Math.random() * globalTips.length));
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tip, {
-    children: globalTips[randomIndex]
-  });
-}
-/* harmony default export */ const tips = (Tips);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-right.js
-/**
- * WordPress dependencies
- */
-
-
-const chevronRight = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"
-  })
-});
-/* harmony default export */ const chevron_right = (chevronRight);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-left.js
-/**
- * WordPress dependencies
- */
-
-
-const chevronLeft = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"
-  })
-});
-/* harmony default export */ const chevron_left = (chevronLeft);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-card/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-function BlockCard({
-  title,
-  icon,
-  description,
-  blockType,
-  className
-}) {
-  if (blockType) {
-    external_wp_deprecated_default()('`blockType` property in `BlockCard component`', {
-      since: '5.7',
-      alternative: '`title, icon and description` properties'
-    });
-    ({
-      title,
-      icon,
-      description
-    } = blockType);
-  }
-  const {
-    parentNavBlockClientId
+;// ./node_modules/@wordpress/block-editor/build-module/components/default-block-appender/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Zero width non-breaking space, used as padding for the paragraph when it is
+ * empty.
+ */
+
+const ZWNBSP = '\ufeff';
+function DefaultBlockAppender({
+  rootClientId
+}) {
+  const {
+    showPrompt,
+    isLocked,
+    placeholder,
+    isManualGrid
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getSelectedBlockClientId,
-      getBlockParentsByBlockName
+      getBlockCount,
+      getSettings,
+      getTemplateLock,
+      getBlockAttributes
+    } = select(store);
+    const isEmpty = !getBlockCount(rootClientId);
+    const {
+      bodyPlaceholder
+    } = getSettings();
+    return {
+      showPrompt: isEmpty,
+      isLocked: !!getTemplateLock(rootClientId),
+      placeholder: bodyPlaceholder,
+      isManualGrid: getBlockAttributes(rootClientId)?.layout?.isManualPlacement
+    };
+  }, [rootClientId]);
+  const {
+    insertDefaultBlock,
+    startTyping
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  if (isLocked || isManualGrid) {
+    return null;
+  }
+  const value = (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(placeholder) || (0,external_wp_i18n_namespaceObject.__)('Type / to choose a block');
+  const onAppend = () => {
+    insertDefaultBlock(undefined, rootClientId);
+    startTyping();
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    "data-root-client-id": rootClientId || '',
+    className: dist_clsx('block-editor-default-block-appender', {
+      'has-visible-prompt': showPrompt
+    }),
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
+      tabIndex: "0"
+      // We want this element to be styled as a paragraph by themes.
+      // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
+      ,
+      role: "button",
+      "aria-label": (0,external_wp_i18n_namespaceObject.__)('Add default block')
+      // A wrapping container for this one already has the wp-block className.
+      ,
+      className: "block-editor-default-block-appender__content",
+      onKeyDown: event => {
+        if (external_wp_keycodes_namespaceObject.ENTER === event.keyCode || external_wp_keycodes_namespaceObject.SPACE === event.keyCode) {
+          onAppend();
+        }
+      },
+      onClick: () => onAppend(),
+      onFocus: () => {
+        if (showPrompt) {
+          onAppend();
+        }
+      },
+      children: showPrompt ? value : ZWNBSP
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter, {
+      rootClientId: rootClientId,
+      position: "bottom right",
+      isAppender: true,
+      __experimentalIsQuick: true
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list-appender/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+function DefaultAppender({
+  rootClientId
+}) {
+  const canInsertDefaultBlock = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).canInsertBlockType((0,external_wp_blocks_namespaceObject.getDefaultBlockName)(), rootClientId));
+  if (canInsertDefaultBlock) {
+    // Render the default block appender if the context supports use
+    // of the default appender.
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultBlockAppender, {
+      rootClientId: rootClientId
+    });
+  }
+
+  // Fallback in case the default block can't be inserted.
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(button_block_appender, {
+    rootClientId: rootClientId,
+    className: "block-list-appender__toggle"
+  });
+}
+function BlockListAppender({
+  rootClientId,
+  CustomAppender,
+  className,
+  tagName: TagName = 'div'
+}) {
+  const isDragOver = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockInsertionPoint,
+      isBlockInsertionPointVisible,
+      getBlockCount
     } = select(store);
-    const _selectedBlockClientId = getSelectedBlockClientId();
-    return {
-      parentNavBlockClientId: getBlockParentsByBlockName(_selectedBlockClientId, 'core/navigation', true)[0]
+    const insertionPoint = getBlockInsertionPoint();
+    // Ideally we should also check for `isDragging` but currently it
+    // requires a lot more setup. We can revisit this once we refactor
+    // the DnD utility hooks.
+    return isBlockInsertionPointVisible() && rootClientId === insertionPoint?.rootClientId && getBlockCount(rootClientId) === 0;
+  }, [rootClientId]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TagName
+  // A `tabIndex` is used on the wrapping `div` element in order to
+  // force a focus event to occur when an appender `button` element
+  // is clicked. In some browsers (Firefox, Safari), button clicks do
+  // not emit a focus event, which could cause this event to propagate
+  // unexpectedly. The `tabIndex` ensures that the interaction is
+  // captured as a focus, without also adding an extra tab stop.
+  //
+  // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
+  , {
+    tabIndex: -1,
+    className: dist_clsx('block-list-appender wp-block', className, {
+      'is-drag-over': isDragOver
+    })
+    // Needed in case the whole editor is content editable (for multi
+    // selection). It fixes an edge case where ArrowDown and ArrowRight
+    // should collapse the selection to the end of that selection and
+    // not into the appender.
+    ,
+    contentEditable: false
+    // The appender exists to let you add the first Paragraph before
+    // any is inserted. To that end, this appender should visually be
+    // presented as a block. That means theme CSS should style it as if
+    // it were an empty paragraph block. That means a `wp-block` class to
+    // ensure the width is correct, and a [data-block] attribute to ensure
+    // the correct margin is applied, especially for classic themes which
+    // have commonly targeted that attribute for margins.
+    ,
+    "data-block": true,
+    children: CustomAppender ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomAppender, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultAppender, {
+      rootClientId: rootClientId
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-popover/inbetween.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const inbetween_MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;
+const InsertionPointOpenRef = (0,external_wp_element_namespaceObject.createContext)();
+function BlockPopoverInbetween({
+  previousClientId,
+  nextClientId,
+  children,
+  __unstablePopoverSlot,
+  __unstableContentRef,
+  operation = 'insert',
+  nearestSide = 'right',
+  ...props
+}) {
+  // This is a temporary hack to get the inbetween inserter to recompute properly.
+  const [popoverRecomputeCounter, forcePopoverRecompute] = (0,external_wp_element_namespaceObject.useReducer)(
+  // Module is there to make sure that the counter doesn't overflow.
+  s => (s + 1) % inbetween_MAX_POPOVER_RECOMPUTE_COUNTER, 0);
+  const {
+    orientation,
+    rootClientId,
+    isVisible
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockListSettings,
+      getBlockRootClientId,
+      isBlockVisible
+    } = select(store);
+    const _rootClientId = getBlockRootClientId(previousClientId !== null && previousClientId !== void 0 ? previousClientId : nextClientId);
+    return {
+      orientation: getBlockListSettings(_rootClientId)?.orientation || 'vertical',
+      rootClientId: _rootClientId,
+      isVisible: isBlockVisible(previousClientId) && isBlockVisible(nextClientId)
+    };
+  }, [previousClientId, nextClientId]);
+  const previousElement = useBlockElement(previousClientId);
+  const nextElement = useBlockElement(nextClientId);
+  const isVertical = orientation === 'vertical';
+  const popoverAnchor = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    if (
+    // popoverRecomputeCounter is by definition always equal or greater than 0.
+    // This check is only there to satisfy the correctness of the
+    // exhaustive-deps rule for the `useMemo` hook.
+    popoverRecomputeCounter < 0 || !previousElement && !nextElement || !isVisible) {
+      return undefined;
+    }
+    const contextElement = operation === 'group' ? nextElement || previousElement : previousElement || nextElement;
+    return {
+      contextElement,
+      getBoundingClientRect() {
+        const previousRect = previousElement ? previousElement.getBoundingClientRect() : null;
+        const nextRect = nextElement ? nextElement.getBoundingClientRect() : null;
+        let left = 0;
+        let top = 0;
+        let width = 0;
+        let height = 0;
+        if (operation === 'group') {
+          const targetRect = nextRect || previousRect;
+          top = targetRect.top;
+          // No spacing is likely around blocks in this operation.
+          // So width of the inserter containing rect is set to 0.
+          width = 0;
+          height = targetRect.bottom - targetRect.top;
+          // Popover calculates its distance from mid-block so some
+          // adjustments are needed to make it appear in the right place.
+          left = nearestSide === 'left' ? targetRect.left - 2 : targetRect.right - 2;
+        } else if (isVertical) {
+          // vertical
+          top = previousRect ? previousRect.bottom : nextRect.top;
+          width = previousRect ? previousRect.width : nextRect.width;
+          height = nextRect && previousRect ? nextRect.top - previousRect.bottom : 0;
+          left = previousRect ? previousRect.left : nextRect.left;
+        } else {
+          top = previousRect ? previousRect.top : nextRect.top;
+          height = previousRect ? previousRect.height : nextRect.height;
+          if ((0,external_wp_i18n_namespaceObject.isRTL)()) {
+            // non vertical, rtl
+            left = nextRect ? nextRect.right : previousRect.left;
+            width = previousRect && nextRect ? previousRect.left - nextRect.right : 0;
+          } else {
+            // non vertical, ltr
+            left = previousRect ? previousRect.right : nextRect.left;
+            width = previousRect && nextRect ? nextRect.left - previousRect.right : 0;
+          }
+
+          // Avoid a negative width which happens when the next rect
+          // is on the next line.
+          width = Math.max(width, 0);
+        }
+        return new window.DOMRect(left, top, width, height);
+      }
+    };
+  }, [previousElement, nextElement, popoverRecomputeCounter, isVertical, isVisible, operation, nearestSide]);
+  const popoverScrollRef = use_popover_scroll(__unstableContentRef);
+
+  // This is only needed for a smooth transition when moving blocks.
+  // When blocks are moved up/down, their position can be set by
+  // updating the `transform` property manually (i.e. without using CSS
+  // transitions or animations). The animation, which can also scroll the block
+  // editor, can sometimes cause the position of the Popover to get out of sync.
+  // A MutationObserver is therefore used to make sure that changes to the
+  // selectedElement's attribute (i.e. `transform`) can be tracked and used to
+  // trigger the Popover to rerender.
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    if (!previousElement) {
+      return;
+    }
+    const observer = new window.MutationObserver(forcePopoverRecompute);
+    observer.observe(previousElement, {
+      attributes: true
+    });
+    return () => {
+      observer.disconnect();
+    };
+  }, [previousElement]);
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    if (!nextElement) {
+      return;
+    }
+    const observer = new window.MutationObserver(forcePopoverRecompute);
+    observer.observe(nextElement, {
+      attributes: true
+    });
+    return () => {
+      observer.disconnect();
+    };
+  }, [nextElement]);
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    if (!previousElement) {
+      return;
+    }
+    previousElement.ownerDocument.defaultView.addEventListener('resize', forcePopoverRecompute);
+    return () => {
+      previousElement.ownerDocument.defaultView?.removeEventListener('resize', forcePopoverRecompute);
+    };
+  }, [previousElement]);
+
+  // If there's either a previous or a next element, show the inbetween popover.
+  // Note that drag and drop uses the inbetween popover to show the drop indicator
+  // before the first block and after the last block.
+  if (!previousElement && !nextElement || !isVisible) {
+    return null;
+  }
+
+  /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
+  // While ideally it would be enough to capture the
+  // bubbling focus event from the Inserter, due to the
+  // characteristics of click focusing of `button`s in
+  // Firefox and Safari, it is not reliable.
+  //
+  // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
+    ref: popoverScrollRef,
+    animate: false,
+    anchor: popoverAnchor,
+    focusOnMount: false
+    // Render in the old slot if needed for backward compatibility,
+    // otherwise render in place (not in the default popover slot).
+    ,
+    __unstableSlotName: __unstablePopoverSlot,
+    inline: !__unstablePopoverSlot
+    // Forces a remount of the popover when its position changes
+    // This makes sure the popover doesn't animate from its previous position.
+    ,
+    ...props,
+    className: dist_clsx('block-editor-block-popover', 'block-editor-block-popover__inbetween', props.className),
+    resize: false,
+    flip: false,
+    placement: "overlay",
+    variant: "unstyled",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      className: "block-editor-block-popover__inbetween-container",
+      children: children
+    })
+  }, nextClientId + '--' + rootClientId);
+  /* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
+}
+/* harmony default export */ const inbetween = (BlockPopoverInbetween);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-popover/drop-zone.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+const animateVariants = {
+  hide: {
+    opacity: 0,
+    scaleY: 0.75
+  },
+  show: {
+    opacity: 1,
+    scaleY: 1
+  },
+  exit: {
+    opacity: 0,
+    scaleY: 0.9
+  }
+};
+function BlockDropZonePopover({
+  __unstablePopoverSlot,
+  __unstableContentRef
+}) {
+  const {
+    clientId
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockOrder,
+      getBlockInsertionPoint
+    } = select(store);
+    const insertionPoint = getBlockInsertionPoint();
+    const order = getBlockOrder(insertionPoint.rootClientId);
+    if (!order.length) {
+      return {};
+    }
+    return {
+      clientId: order[insertionPoint.index]
     };
   }, []);
-  const {
-    selectBlock
+  const reducedMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
+    clientId: clientId,
+    __unstablePopoverSlot: __unstablePopoverSlot,
+    __unstableContentRef: __unstableContentRef,
+    className: "block-editor-block-popover__drop-zone",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+      "data-testid": "block-popover-drop-zone",
+      initial: reducedMotion ? animateVariants.show : animateVariants.hide,
+      animate: animateVariants.show,
+      exit: reducedMotion ? animateVariants.show : animateVariants.exit,
+      className: "block-editor-block-popover__drop-zone-foreground"
+    })
+  });
+}
+/* harmony default export */ const drop_zone = (BlockDropZonePopover);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/insertion-point.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+const insertion_point_InsertionPointOpenRef = (0,external_wp_element_namespaceObject.createContext)();
+function InbetweenInsertionPointPopover({
+  __unstablePopoverSlot,
+  __unstableContentRef,
+  operation = 'insert',
+  nearestSide = 'right'
+}) {
+  const {
+    selectBlock,
+    hideInsertionPoint
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-    className: dist_clsx('block-editor-block-card', className),
-    children: [parentNavBlockClientId &&
-    /*#__PURE__*/
-    // This is only used by the Navigation block for now. It's not ideal having Navigation block specific code here.
-    (0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      onClick: () => selectBlock(parentNavBlockClientId),
-      label: (0,external_wp_i18n_namespaceObject.__)('Go to parent Navigation block'),
-      style:
-      // TODO: This style override is also used in ToolsPanelHeader.
-      // It should be supported out-of-the-box by Button.
-      {
-        minWidth: 24,
-        padding: 0
-      },
-      icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
-      size: "small"
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-      icon: icon,
-      showColors: true
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
-      spacing: 1,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h2", {
-        className: "block-editor-block-card__title",
-        children: title
-      }), description && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
-        className: "block-editor-block-card__description",
-        children: description
-      })]
-    })]
-  });
-}
-/* harmony default export */ const block_card = (BlockCard);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/with-registry-provider.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function getSubRegistry(subRegistries, registry, useSubRegistry) {
-  if (!useSubRegistry) {
-    return registry;
-  }
-  let subRegistry = subRegistries.get(registry);
-  if (!subRegistry) {
-    subRegistry = (0,external_wp_data_namespaceObject.createRegistry)({}, registry);
-    subRegistry.registerStore(STORE_NAME, storeConfig);
-    subRegistries.set(registry, subRegistry);
-  }
-  return subRegistry;
-}
-const withRegistryProvider = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => ({
-  useSubRegistry = true,
-  ...props
-}) => {
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const [subRegistries] = (0,external_wp_element_namespaceObject.useState)(() => new WeakMap());
-  const subRegistry = getSubRegistry(subRegistries, registry, useSubRegistry);
-  if (subRegistry === registry) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-      registry: registry,
-      ...props
-    });
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.RegistryProvider, {
-    value: subRegistry,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-      registry: subRegistry,
-      ...props
-    })
-  });
-}, 'withRegistryProvider');
-/* harmony default export */ const with_registry_provider = (withRegistryProvider);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/use-block-sync.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const use_block_sync_noop = () => {};
-
-/**
- * A function to call when the block value has been updated in the block-editor
- * store.
- *
- * @callback onBlockUpdate
- * @param {Object[]} blocks  The updated blocks.
- * @param {Object}   options The updated block options, such as selectionStart
- *                           and selectionEnd.
- */
-
-/**
- * useBlockSync is a side effect which handles bidirectional sync between the
- * block-editor store and a controlling data source which provides blocks. This
- * is most commonly used by the BlockEditorProvider to synchronize the contents
- * of the block-editor store with the root entity, like a post.
- *
- * Another example would be the template part block, which provides blocks from
- * a separate entity data source than a root entity. This hook syncs edits to
- * the template part in the block editor back to the entity and vice-versa.
- *
- * Here are some of its basic functions:
- * - Initalizes the block-editor store for the given clientID to the blocks
- *   given via props.
- * - Adds incoming changes (like undo) to the block-editor store.
- * - Adds outgoing changes (like editing content) to the controlling entity,
- *   determining if a change should be considered persistent or not.
- * - Handles edge cases and race conditions which occur in those operations.
- * - Ignores changes which happen to other entities (like nested inner block
- *   controllers.
- * - Passes selection state from the block-editor store to the controlling entity.
- *
- * @param {Object}        props           Props for the block sync hook
- * @param {string}        props.clientId  The client ID of the inner block controller.
- *                                        If none is passed, then it is assumed to be a
- *                                        root controller rather than an inner block
- *                                        controller.
- * @param {Object[]}      props.value     The control value for the blocks. This value
- *                                        is used to initalize the block-editor store
- *                                        and for resetting the blocks to incoming
- *                                        changes like undo.
- * @param {Object}        props.selection The selection state responsible to restore the selection on undo/redo.
- * @param {onBlockUpdate} props.onChange  Function to call when a persistent
- *                                        change has been made in the block-editor blocks
- *                                        for the given clientId. For example, after
- *                                        this function is called, an entity is marked
- *                                        dirty because it has changes to save.
- * @param {onBlockUpdate} props.onInput   Function to call when a non-persistent
- *                                        change has been made in the block-editor blocks
- *                                        for the given clientId. When this is called,
- *                                        controlling sources do not become dirty.
- */
-function useBlockSync({
-  clientId = null,
-  value: controlledBlocks,
-  selection: controlledSelection,
-  onChange = use_block_sync_noop,
-  onInput = use_block_sync_noop
-}) {
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const {
-    resetBlocks,
-    resetSelection,
-    replaceInnerBlocks,
-    setHasControlledInnerBlocks,
-    __unstableMarkNextChangeAsNotPersistent
-  } = registry.dispatch(store);
-  const {
-    getBlockName,
-    getBlocks,
-    getSelectionStart,
-    getSelectionEnd
-  } = registry.select(store);
-  const isControlled = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    return !clientId || select(store).areInnerBlocksControlled(clientId);
-  }, [clientId]);
-  const pendingChanges = (0,external_wp_element_namespaceObject.useRef)({
-    incoming: null,
-    outgoing: []
-  });
-  const subscribed = (0,external_wp_element_namespaceObject.useRef)(false);
-  const setControlledBlocks = () => {
-    if (!controlledBlocks) {
-      return;
-    }
-
-    // We don't need to persist this change because we only replace
-    // controlled inner blocks when the change was caused by an entity,
-    // and so it would already be persisted.
-    __unstableMarkNextChangeAsNotPersistent();
-    if (clientId) {
-      // It is important to batch here because otherwise,
-      // as soon as `setHasControlledInnerBlocks` is called
-      // the effect to restore might be triggered
-      // before the actual blocks get set properly in state.
-      registry.batch(() => {
-        setHasControlledInnerBlocks(clientId, true);
-        const storeBlocks = controlledBlocks.map(block => (0,external_wp_blocks_namespaceObject.cloneBlock)(block));
-        if (subscribed.current) {
-          pendingChanges.current.incoming = storeBlocks;
-        }
-        __unstableMarkNextChangeAsNotPersistent();
-        replaceInnerBlocks(clientId, storeBlocks);
-      });
-    } else {
-      if (subscribed.current) {
-        pendingChanges.current.incoming = controlledBlocks;
-      }
-      resetBlocks(controlledBlocks);
-    }
-  };
-
-  // Clean up the changes made by setControlledBlocks() when the component
-  // containing useBlockSync() unmounts.
-  const unsetControlledBlocks = () => {
-    __unstableMarkNextChangeAsNotPersistent();
-    if (clientId) {
-      setHasControlledInnerBlocks(clientId, false);
-      __unstableMarkNextChangeAsNotPersistent();
-      replaceInnerBlocks(clientId, []);
-    } else {
-      resetBlocks([]);
-    }
-  };
-
-  // Add a subscription to the block-editor registry to detect when changes
-  // have been made. This lets us inform the data source of changes. This
-  // is an effect so that the subscriber can run synchronously without
-  // waiting for React renders for changes.
-  const onInputRef = (0,external_wp_element_namespaceObject.useRef)(onInput);
-  const onChangeRef = (0,external_wp_element_namespaceObject.useRef)(onChange);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    onInputRef.current = onInput;
-    onChangeRef.current = onChange;
-  }, [onInput, onChange]);
-
-  // Determine if blocks need to be reset when they change.
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (pendingChanges.current.outgoing.includes(controlledBlocks)) {
-      // Skip block reset if the value matches expected outbound sync
-      // triggered by this component by a preceding change detection.
-      // Only skip if the value matches expectation, since a reset should
-      // still occur if the value is modified (not equal by reference),
-      // to allow that the consumer may apply modifications to reflect
-      // back on the editor.
-      if (pendingChanges.current.outgoing[pendingChanges.current.outgoing.length - 1] === controlledBlocks) {
-        pendingChanges.current.outgoing = [];
-      }
-    } else if (getBlocks(clientId) !== controlledBlocks) {
-      // Reset changing value in all other cases than the sync described
-      // above. Since this can be reached in an update following an out-
-      // bound sync, unset the outbound value to avoid considering it in
-      // subsequent renders.
-      pendingChanges.current.outgoing = [];
-      setControlledBlocks();
-      if (controlledSelection) {
-        resetSelection(controlledSelection.selectionStart, controlledSelection.selectionEnd, controlledSelection.initialPosition);
-      }
-    }
-  }, [controlledBlocks, clientId]);
-  const isMounted = (0,external_wp_element_namespaceObject.useRef)(false);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    // On mount, controlled blocks are already set in the effect above.
-    if (!isMounted.current) {
-      isMounted.current = true;
-      return;
-    }
-
-    // When the block becomes uncontrolled, it means its inner state has been reset
-    // we need to take the blocks again from the external value property.
-    if (!isControlled) {
-      pendingChanges.current.outgoing = [];
-      setControlledBlocks();
-    }
-  }, [isControlled]);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    const {
-      getSelectedBlocksInitialCaretPosition,
-      isLastBlockChangePersistent,
-      __unstableIsLastBlockChangeIgnored,
-      areInnerBlocksControlled
-    } = registry.select(store);
-    let blocks = getBlocks(clientId);
-    let isPersistent = isLastBlockChangePersistent();
-    let previousAreBlocksDifferent = false;
-    subscribed.current = true;
-    const unsubscribe = registry.subscribe(() => {
-      // Sometimes, when changing block lists, lingering subscriptions
-      // might trigger before they are cleaned up. If the block for which
-      // the subscription runs is no longer in the store, this would clear
-      // its parent entity's block list. To avoid this, we bail out if
-      // the subscription is triggering for a block (`clientId !== null`)
-      // and its block name can't be found because it's not on the list.
-      // (`getBlockName( clientId ) === null`).
-      if (clientId !== null && getBlockName(clientId) === null) {
-        return;
-      }
-
-      // When RESET_BLOCKS on parent blocks get called, the controlled blocks
-      // can reset to uncontrolled, in these situations, it means we need to populate
-      // the blocks again from the external blocks (the value property here)
-      // and we should stop triggering onChange
-      const isStillControlled = !clientId || areInnerBlocksControlled(clientId);
-      if (!isStillControlled) {
-        return;
-      }
-      const newIsPersistent = isLastBlockChangePersistent();
-      const newBlocks = getBlocks(clientId);
-      const areBlocksDifferent = newBlocks !== blocks;
-      blocks = newBlocks;
-      if (areBlocksDifferent && (pendingChanges.current.incoming || __unstableIsLastBlockChangeIgnored())) {
-        pendingChanges.current.incoming = null;
-        isPersistent = newIsPersistent;
-        return;
-      }
-
-      // Since we often dispatch an action to mark the previous action as
-      // persistent, we need to make sure that the blocks changed on the
-      // previous action before committing the change.
-      const didPersistenceChange = previousAreBlocksDifferent && !areBlocksDifferent && newIsPersistent && !isPersistent;
-      if (areBlocksDifferent || didPersistenceChange) {
-        isPersistent = newIsPersistent;
-        // We know that onChange/onInput will update controlledBlocks.
-        // We need to be aware that it was caused by an outgoing change
-        // so that we do not treat it as an incoming change later on,
-        // which would cause a block reset.
-        pendingChanges.current.outgoing.push(blocks);
-
-        // Inform the controlling entity that changes have been made to
-        // the block-editor store they should be aware about.
-        const updateParent = isPersistent ? onChangeRef.current : onInputRef.current;
-        const undoIgnore = undoIgnoreBlocks.has(blocks);
-        if (undoIgnore) {
-          undoIgnoreBlocks.delete(blocks);
-        }
-        updateParent(blocks, {
-          selection: {
-            selectionStart: getSelectionStart(),
-            selectionEnd: getSelectionEnd(),
-            initialPosition: getSelectedBlocksInitialCaretPosition()
-          },
-          undoIgnore
-        });
-      }
-      previousAreBlocksDifferent = areBlocksDifferent;
-    }, store);
-    return () => {
-      subscribed.current = false;
-      unsubscribe();
-    };
-  }, [registry, clientId]);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    return () => {
-      unsetControlledBlocks();
+  const openRef = (0,external_wp_element_namespaceObject.useContext)(insertion_point_InsertionPointOpenRef);
+  const ref = (0,external_wp_element_namespaceObject.useRef)();
+  const {
+    orientation,
+    previousClientId,
+    nextClientId,
+    rootClientId,
+    isInserterShown,
+    isDistractionFree,
+    isZoomOutMode
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockOrder,
+      getBlockListSettings,
+      getBlockInsertionPoint,
+      isBlockBeingDragged,
+      getPreviousBlockClientId,
+      getNextBlockClientId,
+      getSettings,
+      isZoomOut
+    } = unlock(select(store));
+    const insertionPoint = getBlockInsertionPoint();
+    const order = getBlockOrder(insertionPoint.rootClientId);
+    if (!order.length) {
+      return {};
+    }
+    let _previousClientId = order[insertionPoint.index - 1];
+    let _nextClientId = order[insertionPoint.index];
+    while (isBlockBeingDragged(_previousClientId)) {
+      _previousClientId = getPreviousBlockClientId(_previousClientId);
+    }
+    while (isBlockBeingDragged(_nextClientId)) {
+      _nextClientId = getNextBlockClientId(_nextClientId);
+    }
+    const settings = getSettings();
+    return {
+      previousClientId: _previousClientId,
+      nextClientId: _nextClientId,
+      orientation: getBlockListSettings(insertionPoint.rootClientId)?.orientation || 'vertical',
+      rootClientId: insertionPoint.rootClientId,
+      isDistractionFree: settings.isDistractionFree,
+      isInserterShown: insertionPoint?.__unstableWithInserter,
+      isZoomOutMode: isZoomOut()
     };
   }, []);
-}
-
-;// CONCATENATED MODULE: external ["wp","keyboardShortcuts"]
-const external_wp_keyboardShortcuts_namespaceObject = window["wp"]["keyboardShortcuts"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/keyboard-shortcuts/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-function KeyboardShortcuts() {
-  return null;
-}
-function KeyboardShortcutsRegister() {
-  // Registering the shortcuts.
-  const {
-    registerShortcut
-  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_keyboardShortcuts_namespaceObject.store);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    registerShortcut({
-      name: 'core/block-editor/duplicate',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Duplicate the selected block(s).'),
-      keyCombination: {
-        modifier: 'primaryShift',
-        character: 'd'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/remove',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Remove the selected block(s).'),
-      keyCombination: {
-        modifier: 'access',
-        character: 'z'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/insert-before',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Insert a new block before the selected block(s).'),
-      keyCombination: {
-        modifier: 'primaryAlt',
-        character: 't'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/insert-after',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Insert a new block after the selected block(s).'),
-      keyCombination: {
-        modifier: 'primaryAlt',
-        character: 'y'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/delete-multi-selection',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Delete selection.'),
-      keyCombination: {
-        character: 'del'
-      },
-      aliases: [{
-        character: 'backspace'
-      }]
-    });
-    registerShortcut({
-      name: 'core/block-editor/select-all',
-      category: 'selection',
-      description: (0,external_wp_i18n_namespaceObject.__)('Select all text when typing. Press again to select all blocks.'),
-      keyCombination: {
-        modifier: 'primary',
-        character: 'a'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/unselect',
-      category: 'selection',
-      description: (0,external_wp_i18n_namespaceObject.__)('Clear selection.'),
-      keyCombination: {
-        character: 'escape'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/multi-text-selection',
-      category: 'selection',
-      description: (0,external_wp_i18n_namespaceObject.__)('Select text across multiple blocks.'),
-      keyCombination: {
-        modifier: 'shift',
-        character: 'arrow'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/focus-toolbar',
-      category: 'global',
-      description: (0,external_wp_i18n_namespaceObject.__)('Navigate to the nearest toolbar.'),
-      keyCombination: {
-        modifier: 'alt',
-        character: 'F10'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/move-up',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Move the selected block(s) up.'),
-      keyCombination: {
-        modifier: 'secondary',
-        character: 't'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/move-down',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Move the selected block(s) down.'),
-      keyCombination: {
-        modifier: 'secondary',
-        character: 'y'
-      }
-    });
-
-    // List view shortcuts.
-    registerShortcut({
-      name: 'core/block-editor/collapse-list-view',
-      category: 'list-view',
-      description: (0,external_wp_i18n_namespaceObject.__)('Collapse all other items.'),
-      keyCombination: {
-        modifier: 'alt',
-        character: 'l'
-      }
-    });
-    registerShortcut({
-      name: 'core/block-editor/group',
-      category: 'block',
-      description: (0,external_wp_i18n_namespaceObject.__)('Create a group block from the selected multiple blocks.'),
-      keyCombination: {
-        modifier: 'primary',
-        character: 'g'
-      }
-    });
-  }, [registerShortcut]);
-  return null;
-}
-KeyboardShortcuts.Register = KeyboardShortcutsRegister;
-/* harmony default export */ const keyboard_shortcuts = (KeyboardShortcuts);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/provider/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-/** @typedef {import('@wordpress/data').WPDataRegistry} WPDataRegistry */
-
-
-const ExperimentalBlockEditorProvider = with_registry_provider(props => {
-  const {
-    children,
-    settings,
-    stripExperimentalSettings = false
-  } = props;
-  const {
-    __experimentalUpdateSettings
-  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    __experimentalUpdateSettings({
-      ...settings,
-      __internalIsInitialized: true
-    }, {
-      stripExperimentalSettings,
-      reset: true
-    });
-  }, [settings, stripExperimentalSettings, __experimentalUpdateSettings]);
-
-  // Syncs the entity provider with changes in the block-editor store.
-  useBlockSync(props);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.SlotFillProvider, {
-    passthrough: true,
-    children: [!settings?.__unstableIsPreviewMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(keyboard_shortcuts.Register, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRefsProvider, {
-      children: children
-    })]
-  });
-});
-const BlockEditorProvider = props => {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ExperimentalBlockEditorProvider, {
-    ...props,
-    stripExperimentalSettings: true,
-    children: props.children
-  });
-};
-/* harmony default export */ const provider = (BlockEditorProvider);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-selection-clearer/index.js
+  const {
+    getBlockEditingMode
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
+  function onClick(event) {
+    if (event.target === ref.current && nextClientId && getBlockEditingMode(nextClientId) !== 'disabled') {
+      selectBlock(nextClientId, -1);
+    }
+  }
+  function maybeHideInserterPoint(event) {
+    // Only hide the inserter if it's triggered on the wrapper,
+    // and the inserter is not open.
+    if (event.target === ref.current && !openRef.current) {
+      hideInsertionPoint();
+    }
+  }
+  function onFocus(event) {
+    // Only handle click on the wrapper specifically, and not an event
+    // bubbled from the inserter itself.
+    if (event.target !== ref.current) {
+      openRef.current = true;
+    }
+  }
+  const lineVariants = {
+    // Initial position starts from the center and invisible.
+    start: {
+      opacity: 0,
+      scale: 0
+    },
+    // The line expands to fill the container. If the inserter is visible it
+    // is delayed so it appears orchestrated.
+    rest: {
+      opacity: 1,
+      scale: 1,
+      transition: {
+        delay: isInserterShown ? 0.5 : 0,
+        type: 'tween'
+      }
+    },
+    hover: {
+      opacity: 1,
+      scale: 1,
+      transition: {
+        delay: 0.5,
+        type: 'tween'
+      }
+    }
+  };
+  const inserterVariants = {
+    start: {
+      scale: disableMotion ? 1 : 0
+    },
+    rest: {
+      scale: 1,
+      transition: {
+        delay: 0.4,
+        type: 'tween'
+      }
+    }
+  };
+  if (isDistractionFree) {
+    return null;
+  }
+
+  // Zoom out mode should only show the insertion point for the insert operation.
+  // Other operations such as "group" are when the editor tries to create a row
+  // block by grouping the block being dragged with the block it's being dropped
+  // onto.
+  if (isZoomOutMode && operation !== 'insert') {
+    return null;
+  }
+  const orientationClassname = orientation === 'horizontal' || operation === 'group' ? 'is-horizontal' : 'is-vertical';
+  const className = dist_clsx('block-editor-block-list__insertion-point', orientationClassname);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inbetween, {
+    previousClientId: previousClientId,
+    nextClientId: nextClientId,
+    __unstablePopoverSlot: __unstablePopoverSlot,
+    __unstableContentRef: __unstableContentRef,
+    operation: operation,
+    nearestSide: nearestSide,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__unstableMotion.div, {
+      layout: !disableMotion,
+      initial: disableMotion ? 'rest' : 'start',
+      animate: "rest",
+      whileHover: "hover",
+      whileTap: "pressed",
+      exit: "start",
+      ref: ref,
+      tabIndex: -1,
+      onClick: onClick,
+      onFocus: onFocus,
+      className: dist_clsx(className, {
+        'is-with-inserter': isInserterShown
+      }),
+      onHoverEnd: maybeHideInserterPoint,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+        variants: lineVariants,
+        className: "block-editor-block-list__insertion-point-indicator",
+        "data-testid": "block-list-insertion-point-indicator"
+      }), isInserterShown && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+        variants: inserterVariants,
+        className: dist_clsx('block-editor-block-list__insertion-point-inserter'),
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter, {
+          position: "bottom center",
+          clientId: nextClientId,
+          rootClientId: rootClientId,
+          __experimentalIsQuick: true,
+          onToggle: isOpen => {
+            openRef.current = isOpen;
+          },
+          onSelectOrClose: () => {
+            openRef.current = false;
+          }
+        })
+      })]
+    })
+  });
+}
+function InsertionPoint(props) {
+  const {
+    insertionPoint,
+    isVisible,
+    isBlockListEmpty
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockInsertionPoint,
+      isBlockInsertionPointVisible,
+      getBlockCount
+    } = select(store);
+    const blockInsertionPoint = getBlockInsertionPoint();
+    return {
+      insertionPoint: blockInsertionPoint,
+      isVisible: isBlockInsertionPointVisible(),
+      isBlockListEmpty: getBlockCount(blockInsertionPoint?.rootClientId) === 0
+    };
+  }, []);
+  if (!isVisible ||
+  // Don't render the insertion point if the block list is empty.
+  // The insertion point will be represented by the appender instead.
+  isBlockListEmpty) {
+    return null;
+  }
+
+  /**
+   * Render a popover that overlays the block when the desired operation is to replace it.
+   * Otherwise, render a popover in between blocks for the indication of inserting between them.
+   */
+  return insertionPoint.operation === 'replace' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(drop_zone
+  // Force remount to trigger the animation.
+  , {
+    ...props
+  }, `${insertionPoint.rootClientId}-${insertionPoint.index}`) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InbetweenInsertionPointPopover, {
+    operation: insertionPoint.operation,
+    nearestSide: insertionPoint.nearestSide,
+    ...props
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-in-between-inserter.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function useInBetweenInserter() {
+  const openRef = (0,external_wp_element_namespaceObject.useContext)(insertion_point_InsertionPointOpenRef);
+  const isInBetweenInserterDisabled = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings().isDistractionFree || unlock(select(store)).isZoomOut(), []);
+  const {
+    getBlockListSettings,
+    getBlockIndex,
+    isMultiSelecting,
+    getSelectedBlockClientIds,
+    getSettings,
+    getTemplateLock,
+    __unstableIsWithinBlockOverlay,
+    getBlockEditingMode,
+    getBlockName,
+    getBlockAttributes,
+    getParentSectionBlock
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
+  const {
+    showInsertionPoint,
+    hideInsertionPoint
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
+    if (isInBetweenInserterDisabled) {
+      return;
+    }
+    function onMouseMove(event) {
+      // openRef is the reference to the insertion point between blocks.
+      // If the reference is not set or the insertion point is already open, return.
+      if (openRef === undefined || openRef.current) {
+        return;
+      }
+
+      // Ignore text nodes sometimes detected in FireFox.
+      if (event.target.nodeType === event.target.TEXT_NODE) {
+        return;
+      }
+      if (isMultiSelecting()) {
+        return;
+      }
+      if (!event.target.classList.contains('block-editor-block-list__layout')) {
+        hideInsertionPoint();
+        return;
+      }
+      let rootClientId;
+      if (!event.target.classList.contains('is-root-container')) {
+        const blockElement = !!event.target.getAttribute('data-block') ? event.target : event.target.closest('[data-block]');
+        rootClientId = blockElement.getAttribute('data-block');
+      }
+      if (getTemplateLock(rootClientId) || getBlockEditingMode(rootClientId) === 'disabled' || getBlockName(rootClientId) === 'core/block' || rootClientId && getBlockAttributes(rootClientId).layout?.isManualPlacement) {
+        return;
+      }
+      const blockListSettings = getBlockListSettings(rootClientId);
+      const orientation = blockListSettings?.orientation || 'vertical';
+      const captureToolbars = !!blockListSettings?.__experimentalCaptureToolbars;
+      const offsetTop = event.clientY;
+      const offsetLeft = event.clientX;
+      const children = Array.from(event.target.children);
+      let element = children.find(blockEl => {
+        const blockElRect = blockEl.getBoundingClientRect();
+        return blockEl.classList.contains('wp-block') && orientation === 'vertical' && blockElRect.top > offsetTop || blockEl.classList.contains('wp-block') && orientation === 'horizontal' && ((0,external_wp_i18n_namespaceObject.isRTL)() ? blockElRect.right < offsetLeft : blockElRect.left > offsetLeft);
+      });
+      if (!element) {
+        hideInsertionPoint();
+        return;
+      }
+
+      // The block may be in an alignment wrapper, so check the first direct
+      // child if the element has no ID.
+      if (!element.id) {
+        element = element.firstElementChild;
+        if (!element) {
+          hideInsertionPoint();
+          return;
+        }
+      }
+
+      // Don't show the insertion point if a parent block has an "overlay"
+      // See https://github.com/WordPress/gutenberg/pull/34012#pullrequestreview-727762337
+      const clientId = element.id.slice('block-'.length);
+      if (!clientId || __unstableIsWithinBlockOverlay(clientId) || !!getParentSectionBlock(clientId)) {
+        return;
+      }
+
+      // Don't show the inserter if the following conditions are met,
+      // as it conflicts with the block toolbar:
+      // 1. when hovering above or inside selected block(s)
+      // 2. when the orientation is vertical
+      // 3. when the __experimentalCaptureToolbars is not enabled
+      // 4. when the Top Toolbar is not disabled
+      if (getSelectedBlockClientIds().includes(clientId) && orientation === 'vertical' && !captureToolbars && !getSettings().hasFixedToolbar) {
+        return;
+      }
+      const elementRect = element.getBoundingClientRect();
+      if (orientation === 'horizontal' && (event.clientY > elementRect.bottom || event.clientY < elementRect.top) || orientation === 'vertical' && (event.clientX > elementRect.right || event.clientX < elementRect.left)) {
+        hideInsertionPoint();
+        return;
+      }
+      const index = getBlockIndex(clientId);
+
+      // Don't show the in-between inserter before the first block in
+      // the list (preserves the original behaviour).
+      if (index === 0) {
+        hideInsertionPoint();
+        return;
+      }
+      showInsertionPoint(rootClientId, index, {
+        __unstableWithInserter: true
+      });
+    }
+    node.addEventListener('mousemove', onMouseMove);
+    return () => {
+      node.removeEventListener('mousemove', onMouseMove);
+    };
+  }, [openRef, getBlockListSettings, getBlockIndex, isMultiSelecting, showInsertionPoint, hideInsertionPoint, getSelectedBlockClientIds, isInBetweenInserterDisabled]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-selection-clearer/index.js
 /**
  * WordPress dependencies
  */
@@ -41958,7 +42805,1924 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-multi-selection.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/button-block-appender.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function ButtonBlockAppender({
+  showSeparator,
+  isFloating,
+  onAddBlock,
+  isToggle
+}) {
+  const {
+    clientId
+  } = useBlockEditContext();
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(button_block_appender, {
+    className: dist_clsx({
+      'block-list-appender__toggle': isToggle
+    }),
+    rootClientId: clientId,
+    showSeparator: showSeparator,
+    isFloating: isFloating,
+    onAddBlock: onAddBlock
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/default-block-appender.js
+/**
+ * Internal dependencies
+ */
+
+
+
+function default_block_appender_DefaultBlockAppender() {
+  const {
+    clientId
+  } = useBlockEditContext();
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultBlockAppender, {
+    rootClientId: clientId
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-nested-settings-update.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/** @typedef {import('../../selectors').WPDirectInsertBlock } WPDirectInsertBlock */
+
+const pendingSettingsUpdates = new WeakMap();
+
+// Creates a memoizing caching function that remembers the last value and keeps returning it
+// as long as the new values are shallowly equal. Helps keep dependencies stable.
+function createShallowMemo() {
+  let value;
+  return newValue => {
+    if (value === undefined || !external_wp_isShallowEqual_default()(value, newValue)) {
+      value = newValue;
+    }
+    return value;
+  };
+}
+function useShallowMemo(value) {
+  const [memo] = (0,external_wp_element_namespaceObject.useState)(createShallowMemo);
+  return memo(value);
+}
+
+/**
+ * This hook is a side effect which updates the block-editor store when changes
+ * happen to inner block settings. The given props are transformed into a
+ * settings object, and if that is different from the current settings object in
+ * the block-editor store, then the store is updated with the new settings which
+ * came from props.
+ *
+ * @param {string}               clientId                   The client ID of the block to update.
+ * @param {string}               parentLock
+ * @param {string[]}             allowedBlocks              An array of block names which are permitted
+ *                                                          in inner blocks.
+ * @param {string[]}             prioritizedInserterBlocks  Block names and/or block variations to be prioritized in the inserter, in the format {blockName}/{variationName}.
+ * @param {?WPDirectInsertBlock} defaultBlock               The default block to insert: [ blockName, { blockAttributes } ].
+ * @param {?boolean}             directInsert               If a default block should be inserted directly by the appender.
+ *
+ * @param {?WPDirectInsertBlock} __experimentalDefaultBlock A deprecated prop for the default block to insert: [ blockName, { blockAttributes } ]. Use `defaultBlock` instead.
+ *
+ * @param {?boolean}             __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.
+ *
+ * @param {string}               [templateLock]             The template lock specified for the inner
+ *                                                          blocks component. (e.g. "all")
+ * @param {boolean}              captureToolbars            Whether or children toolbars should be shown
+ *                                                          in the inner blocks component rather than on
+ *                                                          the child block.
+ * @param {string}               orientation                The direction in which the block
+ *                                                          should face.
+ * @param {Object}               layout                     The layout object for the block container.
+ */
+function useNestedSettingsUpdate(clientId, parentLock, allowedBlocks, prioritizedInserterBlocks, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, templateLock, captureToolbars, orientation, layout) {
+  // Instead of adding a useSelect mapping here, please add to the useSelect
+  // mapping in InnerBlocks! Every subscription impacts performance.
+
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+
+  // Implementors often pass a new array on every render,
+  // and the contents of the arrays are just strings, so the entire array
+  // can be passed as dependencies but We need to include the length of the array,
+  // otherwise if the arrays change length but the first elements are equal the comparison,
+  // does not works as expected.
+  const _allowedBlocks = useShallowMemo(allowedBlocks);
+  const _prioritizedInserterBlocks = useShallowMemo(prioritizedInserterBlocks);
+  const _templateLock = templateLock === undefined || parentLock === 'contentOnly' ? parentLock : templateLock;
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    const newSettings = {
+      allowedBlocks: _allowedBlocks,
+      prioritizedInserterBlocks: _prioritizedInserterBlocks,
+      templateLock: _templateLock
+    };
+
+    // These values are not defined for RN, so only include them if they
+    // are defined.
+    if (captureToolbars !== undefined) {
+      newSettings.__experimentalCaptureToolbars = captureToolbars;
+    }
+
+    // Orientation depends on layout,
+    // ideally the separate orientation prop should be deprecated.
+    if (orientation !== undefined) {
+      newSettings.orientation = orientation;
+    } else {
+      const layoutType = getLayoutType(layout?.type);
+      newSettings.orientation = layoutType.getOrientation(layout);
+    }
+    if (__experimentalDefaultBlock !== undefined) {
+      external_wp_deprecated_default()('__experimentalDefaultBlock', {
+        alternative: 'defaultBlock',
+        since: '6.3',
+        version: '6.4'
+      });
+      newSettings.defaultBlock = __experimentalDefaultBlock;
+    }
+    if (defaultBlock !== undefined) {
+      newSettings.defaultBlock = defaultBlock;
+    }
+    if (__experimentalDirectInsert !== undefined) {
+      external_wp_deprecated_default()('__experimentalDirectInsert', {
+        alternative: 'directInsert',
+        since: '6.3',
+        version: '6.4'
+      });
+      newSettings.directInsert = __experimentalDirectInsert;
+    }
+    if (directInsert !== undefined) {
+      newSettings.directInsert = directInsert;
+    }
+    if (newSettings.directInsert !== undefined && typeof newSettings.directInsert !== 'boolean') {
+      external_wp_deprecated_default()('Using `Function` as a `directInsert` argument', {
+        alternative: '`boolean` values',
+        since: '6.5'
+      });
+    }
+
+    // Batch updates to block list settings to avoid triggering cascading renders
+    // for each container block included in a tree and optimize initial render.
+    // To avoid triggering updateBlockListSettings for each container block
+    // causing X re-renderings for X container blocks,
+    // we batch all the updatedBlockListSettings in a single "data" batch
+    // which results in a single re-render.
+    if (!pendingSettingsUpdates.get(registry)) {
+      pendingSettingsUpdates.set(registry, {});
+    }
+    pendingSettingsUpdates.get(registry)[clientId] = newSettings;
+    window.queueMicrotask(() => {
+      const settings = pendingSettingsUpdates.get(registry);
+      if (Object.keys(settings).length) {
+        const {
+          updateBlockListSettings
+        } = registry.dispatch(store);
+        updateBlockListSettings(settings);
+        pendingSettingsUpdates.set(registry, {});
+      }
+    });
+  }, [clientId, _allowedBlocks, _prioritizedInserterBlocks, _templateLock, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, captureToolbars, orientation, layout, registry]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-inner-block-template-sync.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * This hook makes sure that a block's inner blocks stay in sync with the given
+ * block "template". The template is a block hierarchy to which inner blocks must
+ * conform. If the blocks get "out of sync" with the template and the template
+ * is meant to be locked (e.g. templateLock = "all" or templateLock = "contentOnly"),
+ * then we replace the inner blocks with the correct value after synchronizing it with the template.
+ *
+ * @param {string}  clientId                       The block client ID.
+ * @param {Object}  template                       The template to match.
+ * @param {string}  templateLock                   The template lock state for the inner blocks. For
+ *                                                 example, if the template lock is set to "all",
+ *                                                 then the inner blocks will stay in sync with the
+ *                                                 template. If not defined or set to false, then
+ *                                                 the inner blocks will not be synchronized with
+ *                                                 the given template.
+ * @param {boolean} templateInsertUpdatesSelection Whether or not to update the
+ *                                                 block-editor selection state when inner blocks
+ *                                                 are replaced after template synchronization.
+ */
+function useInnerBlockTemplateSync(clientId, template, templateLock, templateInsertUpdatesSelection) {
+  // Instead of adding a useSelect mapping here, please add to the useSelect
+  // mapping in InnerBlocks! Every subscription impacts performance.
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+
+  // Maintain a reference to the previous value so we can do a deep equality check.
+  const existingTemplateRef = (0,external_wp_element_namespaceObject.useRef)(null);
+  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
+    let isCancelled = false;
+    const {
+      getBlocks,
+      getSelectedBlocksInitialCaretPosition,
+      isBlockSelected
+    } = registry.select(store);
+    const {
+      replaceInnerBlocks,
+      __unstableMarkNextChangeAsNotPersistent
+    } = registry.dispatch(store);
+
+    // There's an implicit dependency between useInnerBlockTemplateSync and useNestedSettingsUpdate
+    // The former needs to happen after the latter and since the latter is using microtasks to batch updates (performance optimization),
+    // we need to schedule this one in a microtask as well.
+    // Example: If you remove queueMicrotask here, ctrl + click to insert quote block won't close the inserter.
+    window.queueMicrotask(() => {
+      if (isCancelled) {
+        return;
+      }
+
+      // Only synchronize innerBlocks with template if innerBlocks are empty
+      // or a locking "all" or "contentOnly" exists directly on the block.
+      const currentInnerBlocks = getBlocks(clientId);
+      const shouldApplyTemplate = currentInnerBlocks.length === 0 || templateLock === 'all' || templateLock === 'contentOnly';
+      const hasTemplateChanged = !es6_default()(template, existingTemplateRef.current);
+      if (!shouldApplyTemplate || !hasTemplateChanged) {
+        return;
+      }
+      existingTemplateRef.current = template;
+      const nextBlocks = (0,external_wp_blocks_namespaceObject.synchronizeBlocksWithTemplate)(currentInnerBlocks, template);
+      if (!es6_default()(nextBlocks, currentInnerBlocks)) {
+        __unstableMarkNextChangeAsNotPersistent();
+        replaceInnerBlocks(clientId, nextBlocks, currentInnerBlocks.length === 0 && templateInsertUpdatesSelection && nextBlocks.length !== 0 && isBlockSelected(clientId),
+        // This ensures the "initialPosition" doesn't change when applying the template
+        // If we're supposed to focus the block, we'll focus the first inner block
+        // otherwise, we won't apply any auto-focus.
+        // This ensures for instance that the focus stays in the inserter when inserting the "buttons" block.
+        getSelectedBlocksInitialCaretPosition());
+      }
+    });
+    return () => {
+      isCancelled = true;
+    };
+  }, [template, templateLock, clientId, registry, templateInsertUpdatesSelection]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-block-context.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Returns a context object for a given block.
+ *
+ * @param {string} clientId The block client ID.
+ *
+ * @return {Record<string,*>} Context value.
+ */
+function useBlockContext(clientId) {
+  return (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const block = select(store).getBlock(clientId);
+    if (!block) {
+      return undefined;
+    }
+    const blockType = select(external_wp_blocks_namespaceObject.store).getBlockType(block.name);
+    if (!blockType) {
+      return undefined;
+    }
+    if (Object.keys(blockType.providesContext).length === 0) {
+      return undefined;
+    }
+    return Object.fromEntries(Object.entries(blockType.providesContext).map(([contextName, attributeName]) => [contextName, block.attributes[attributeName]]));
+  }, [clientId]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-on-block-drop/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/** @typedef {import('react').SyntheticEvent} SyntheticEvent */
+/** @typedef {import('./types').WPDropOperation} WPDropOperation */
+
+/**
+ * Retrieve the data for a block drop event.
+ *
+ * @param {SyntheticEvent} event The drop event.
+ *
+ * @return {Object} An object with block drag and drop data.
+ */
+function parseDropEvent(event) {
+  let result = {
+    srcRootClientId: null,
+    srcClientIds: null,
+    srcIndex: null,
+    type: null,
+    blocks: null
+  };
+  if (!event.dataTransfer) {
+    return result;
+  }
+  try {
+    result = Object.assign(result, JSON.parse(event.dataTransfer.getData('wp-blocks')));
+  } catch (err) {
+    return result;
+  }
+  return result;
+}
+
+/**
+ * A function that returns an event handler function for block drop events.
+ *
+ * @param {string}   targetRootClientId        The root client id where the block(s) will be inserted.
+ * @param {number}   targetBlockIndex          The index where the block(s) will be inserted.
+ * @param {Function} getBlockIndex             A function that gets the index of a block.
+ * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.
+ * @param {Function} moveBlocks                A function that moves blocks.
+ * @param {Function} insertOrReplaceBlocks     A function that inserts or replaces blocks.
+ * @param {Function} clearSelectedBlock        A function that clears block selection.
+ * @param {string}   operation                 The type of operation to perform on drop. Could be `insert` or `replace` or `group`.
+ * @param {Function} getBlock                  A function that returns a block given its client id.
+ * @return {Function} The event handler for a block drop event.
+ */
+function onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getClientIdsOfDescendants, moveBlocks, insertOrReplaceBlocks, clearSelectedBlock, operation, getBlock) {
+  return event => {
+    const {
+      srcRootClientId: sourceRootClientId,
+      srcClientIds: sourceClientIds,
+      type: dropType,
+      blocks
+    } = parseDropEvent(event);
+
+    // If the user is inserting a block.
+    if (dropType === 'inserter') {
+      clearSelectedBlock();
+      const blocksToInsert = blocks.map(block => (0,external_wp_blocks_namespaceObject.cloneBlock)(block));
+      insertOrReplaceBlocks(blocksToInsert, true, null);
+    }
+
+    // If the user is moving a block.
+    if (dropType === 'block') {
+      const sourceBlockIndex = getBlockIndex(sourceClientIds[0]);
+
+      // If the user is dropping to the same position, return early.
+      if (sourceRootClientId === targetRootClientId && sourceBlockIndex === targetBlockIndex) {
+        return;
+      }
+
+      // If the user is attempting to drop a block within its own
+      // nested blocks, return early as this would create infinite
+      // recursion.
+      if (sourceClientIds.includes(targetRootClientId) || getClientIdsOfDescendants(sourceClientIds).some(id => id === targetRootClientId)) {
+        return;
+      }
+
+      // If the user is dropping a block over another block, replace both blocks
+      // with a group block containing them
+      if (operation === 'group') {
+        const blocksToInsert = sourceClientIds.map(clientId => getBlock(clientId));
+        insertOrReplaceBlocks(blocksToInsert, true, null, sourceClientIds);
+        return;
+      }
+      const isAtSameLevel = sourceRootClientId === targetRootClientId;
+      const draggedBlockCount = sourceClientIds.length;
+
+      // If the block is kept at the same level and moved downwards,
+      // subtract to take into account that the blocks being dragged
+      // were removed from the block list above the insertion point.
+      const insertIndex = isAtSameLevel && sourceBlockIndex < targetBlockIndex ? targetBlockIndex - draggedBlockCount : targetBlockIndex;
+      moveBlocks(sourceClientIds, sourceRootClientId, insertIndex);
+    }
+  };
+}
+
+/**
+ * A function that returns an event handler function for block-related file drop events.
+ *
+ * @param {string}   targetRootClientId    The root client id where the block(s) will be inserted.
+ * @param {Function} getSettings           A function that gets the block editor settings.
+ * @param {Function} updateBlockAttributes A function that updates a block's attributes.
+ * @param {Function} canInsertBlockType    A function that returns checks whether a block type can be inserted.
+ * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.
+ *
+ * @return {Function} The event handler for a block-related file drop event.
+ */
+function onFilesDrop(targetRootClientId, getSettings, updateBlockAttributes, canInsertBlockType, insertOrReplaceBlocks) {
+  return files => {
+    if (!getSettings().mediaUpload) {
+      return;
+    }
+    const transformation = (0,external_wp_blocks_namespaceObject.findTransform)((0,external_wp_blocks_namespaceObject.getBlockTransforms)('from'), transform => transform.type === 'files' && canInsertBlockType(transform.blockName, targetRootClientId) && transform.isMatch(files));
+    if (transformation) {
+      const blocks = transformation.transform(files, updateBlockAttributes);
+      insertOrReplaceBlocks(blocks);
+    }
+  };
+}
+
+/**
+ * A function that returns an event handler function for block-related HTML drop events.
+ *
+ * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.
+ *
+ * @return {Function} The event handler for a block-related HTML drop event.
+ */
+function onHTMLDrop(insertOrReplaceBlocks) {
+  return HTML => {
+    const blocks = (0,external_wp_blocks_namespaceObject.pasteHandler)({
+      HTML,
+      mode: 'BLOCKS'
+    });
+    if (blocks.length) {
+      insertOrReplaceBlocks(blocks);
+    }
+  };
+}
+
+/**
+ * A React hook for handling block drop events.
+ *
+ * @param {string}          targetRootClientId  The root client id where the block(s) will be inserted.
+ * @param {number}          targetBlockIndex    The index where the block(s) will be inserted.
+ * @param {Object}          options             The optional options.
+ * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.
+ *
+ * @return {Function} A function to be passed to the onDrop handler.
+ */
+function useOnBlockDrop(targetRootClientId, targetBlockIndex, options = {}) {
+  const {
+    operation = 'insert',
+    nearestSide = 'right'
+  } = options;
+  const {
+    canInsertBlockType,
+    getBlockIndex,
+    getClientIdsOfDescendants,
+    getBlockOrder,
+    getBlocksByClientId,
+    getSettings,
+    getBlock
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const {
+    getGroupingBlockName
+  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
+  const {
+    insertBlocks,
+    moveBlocksToPosition,
+    updateBlockAttributes,
+    clearSelectedBlock,
+    replaceBlocks,
+    removeBlocks
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const insertOrReplaceBlocks = (0,external_wp_element_namespaceObject.useCallback)((blocks, updateSelection = true, initialPosition = 0, clientIdsToReplace = []) => {
+    if (!Array.isArray(blocks)) {
+      blocks = [blocks];
+    }
+    const clientIds = getBlockOrder(targetRootClientId);
+    const clientId = clientIds[targetBlockIndex];
+    if (operation === 'replace') {
+      replaceBlocks(clientId, blocks, undefined, initialPosition);
+    } else if (operation === 'group') {
+      const targetBlock = getBlock(clientId);
+      if (nearestSide === 'left') {
+        blocks.push(targetBlock);
+      } else {
+        blocks.unshift(targetBlock);
+      }
+      const groupInnerBlocks = blocks.map(block => {
+        return (0,external_wp_blocks_namespaceObject.createBlock)(block.name, block.attributes, block.innerBlocks);
+      });
+      const areAllImages = blocks.every(block => {
+        return block.name === 'core/image';
+      });
+      const galleryBlock = canInsertBlockType('core/gallery', targetRootClientId);
+      const wrappedBlocks = (0,external_wp_blocks_namespaceObject.createBlock)(areAllImages && galleryBlock ? 'core/gallery' : getGroupingBlockName(), {
+        layout: {
+          type: 'flex',
+          flexWrap: areAllImages && galleryBlock ? null : 'nowrap'
+        }
+      }, groupInnerBlocks);
+      // Need to make sure both the target block and the block being dragged are replaced
+      // otherwise the dragged block will be duplicated.
+      replaceBlocks([clientId, ...clientIdsToReplace], wrappedBlocks, undefined, initialPosition);
+    } else {
+      insertBlocks(blocks, targetBlockIndex, targetRootClientId, updateSelection, initialPosition);
+    }
+  }, [getBlockOrder, targetRootClientId, targetBlockIndex, operation, replaceBlocks, getBlock, nearestSide, canInsertBlockType, getGroupingBlockName, insertBlocks]);
+  const moveBlocks = (0,external_wp_element_namespaceObject.useCallback)((sourceClientIds, sourceRootClientId, insertIndex) => {
+    if (operation === 'replace') {
+      const sourceBlocks = getBlocksByClientId(sourceClientIds);
+      const targetBlockClientIds = getBlockOrder(targetRootClientId);
+      const targetBlockClientId = targetBlockClientIds[targetBlockIndex];
+      registry.batch(() => {
+        // Remove the source blocks.
+        removeBlocks(sourceClientIds, false);
+        // Replace the target block with the source blocks.
+        replaceBlocks(targetBlockClientId, sourceBlocks, undefined, 0);
+      });
+    } else {
+      moveBlocksToPosition(sourceClientIds, sourceRootClientId, targetRootClientId, insertIndex);
+    }
+  }, [operation, getBlockOrder, getBlocksByClientId, moveBlocksToPosition, registry, removeBlocks, replaceBlocks, targetBlockIndex, targetRootClientId]);
+  const _onDrop = onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getClientIdsOfDescendants, moveBlocks, insertOrReplaceBlocks, clearSelectedBlock, operation, getBlock);
+  const _onFilesDrop = onFilesDrop(targetRootClientId, getSettings, updateBlockAttributes, canInsertBlockType, insertOrReplaceBlocks);
+  const _onHTMLDrop = onHTMLDrop(insertOrReplaceBlocks);
+  return event => {
+    const files = (0,external_wp_dom_namespaceObject.getFilesFromDataTransfer)(event.dataTransfer);
+    const html = event.dataTransfer.getData('text/html');
+
+    /**
+     * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.
+     * The order of the checks is important to recognise the HTML drop.
+     */
+    if (html) {
+      _onHTMLDrop(html);
+    } else if (files.length) {
+      _onFilesDrop(files);
+    } else {
+      _onDrop(event);
+    }
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/math.js
+/**
+ * A string representing the name of an edge.
+ *
+ * @typedef {'top'|'right'|'bottom'|'left'} WPEdgeName
+ */
+
+/**
+ * @typedef  {Object} WPPoint
+ * @property {number} x The horizontal position.
+ * @property {number} y The vertical position.
+ */
+
+/**
+ * Given a point, a DOMRect and the name of an edge, returns the distance to
+ * that edge of the rect.
+ *
+ * This function works for edges that are horizontal or vertical (e.g. not
+ * rotated), the following terms are used so that the function works in both
+ * orientations:
+ *
+ * - Forward, meaning the axis running horizontally when an edge is vertical
+ *   and vertically when an edge is horizontal.
+ * - Lateral, meaning the axis running vertically when an edge is vertical
+ *   and horizontally when an edge is horizontal.
+ *
+ * @param {WPPoint}    point The point to measure distance from.
+ * @param {DOMRect}    rect  A DOM Rect containing edge positions.
+ * @param {WPEdgeName} edge  The edge to measure to.
+ */
+function getDistanceFromPointToEdge(point, rect, edge) {
+  const isHorizontal = edge === 'top' || edge === 'bottom';
+  const {
+    x,
+    y
+  } = point;
+  const pointLateralPosition = isHorizontal ? x : y;
+  const pointForwardPosition = isHorizontal ? y : x;
+  const edgeStart = isHorizontal ? rect.left : rect.top;
+  const edgeEnd = isHorizontal ? rect.right : rect.bottom;
+  const edgeForwardPosition = rect[edge];
+
+  // Measure the straight line distance to the edge of the rect, when the
+  // point is adjacent to the edge.
+  // Else, if the point is positioned diagonally to the edge of the rect,
+  // measure diagonally to the nearest corner that the edge meets.
+  let edgeLateralPosition;
+  if (pointLateralPosition >= edgeStart && pointLateralPosition <= edgeEnd) {
+    edgeLateralPosition = pointLateralPosition;
+  } else if (pointLateralPosition < edgeEnd) {
+    edgeLateralPosition = edgeStart;
+  } else {
+    edgeLateralPosition = edgeEnd;
+  }
+  return Math.sqrt((pointLateralPosition - edgeLateralPosition) ** 2 + (pointForwardPosition - edgeForwardPosition) ** 2);
+}
+
+/**
+ * Given a point, a DOMRect and a list of allowed edges returns the name of and
+ * distance to the nearest edge.
+ *
+ * @param {WPPoint}      point        The point to measure distance from.
+ * @param {DOMRect}      rect         A DOM Rect containing edge positions.
+ * @param {WPEdgeName[]} allowedEdges A list of the edges included in the
+ *                                    calculation. Defaults to all edges.
+ *
+ * @return {[number, string]} An array where the first value is the distance
+ *                              and a second is the edge name.
+ */
+function getDistanceToNearestEdge(point, rect, allowedEdges = ['top', 'bottom', 'left', 'right']) {
+  let candidateDistance;
+  let candidateEdge;
+  allowedEdges.forEach(edge => {
+    const distance = getDistanceFromPointToEdge(point, rect, edge);
+    if (candidateDistance === undefined || distance < candidateDistance) {
+      candidateDistance = distance;
+      candidateEdge = edge;
+    }
+  });
+  return [candidateDistance, candidateEdge];
+}
+
+/**
+ * Is the point contained by the rectangle.
+ *
+ * @param {WPPoint} point The point.
+ * @param {DOMRect} rect  The rectangle.
+ *
+ * @return {boolean} True if the point is contained by the rectangle, false otherwise.
+ */
+function isPointContainedByRect(point, rect) {
+  return rect.left <= point.x && rect.right >= point.x && rect.top <= point.y && rect.bottom >= point.y;
+}
+
+/**
+ * Is the point within the top and bottom boundaries of the rectangle.
+ *
+ * @param {WPPoint} point The point.
+ * @param {DOMRect} rect  The rectangle.
+ *
+ * @return {boolean} True if the point is within top and bottom of rectangle, false otherwise.
+ */
+function isPointWithinTopAndBottomBoundariesOfRect(point, rect) {
+  return rect.top <= point.y && rect.bottom >= point.y;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-block-drop-zone/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const THRESHOLD_DISTANCE = 30;
+const MINIMUM_HEIGHT_FOR_THRESHOLD = 120;
+const MINIMUM_WIDTH_FOR_THRESHOLD = 120;
+
+/** @typedef {import('../../utils/math').WPPoint} WPPoint */
+/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */
+
+/**
+ * The orientation of a block list.
+ *
+ * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation
+ */
+
+/**
+ * The insert position when dropping a block.
+ *
+ * @typedef {'before'|'after'} WPInsertPosition
+ */
+
+/**
+ * @typedef {Object} WPBlockData
+ * @property {boolean}       isUnmodifiedDefaultBlock Is the block unmodified default block.
+ * @property {() => DOMRect} getBoundingClientRect    Get the bounding client rect of the block.
+ * @property {number}        blockIndex               The index of the block.
+ */
+
+/**
+ * Get the drop target position from a given drop point and the orientation.
+ *
+ * @param {WPBlockData[]}          blocksData  The block data list.
+ * @param {WPPoint}                position    The position of the item being dragged.
+ * @param {WPBlockListOrientation} orientation The orientation of the block list.
+ * @param {Object}                 options     Additional options.
+ * @return {[number, WPDropOperation]} The drop target position.
+ */
+function getDropTargetPosition(blocksData, position, orientation = 'vertical', options = {}) {
+  const allowedEdges = orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'];
+  let nearestIndex = 0;
+  let insertPosition = 'before';
+  let minDistance = Infinity;
+  let targetBlockIndex = null;
+  let nearestSide = 'right';
+  const {
+    dropZoneElement,
+    parentBlockOrientation,
+    rootBlockIndex = 0
+  } = options;
+
+  // Allow before/after when dragging over the top/bottom edges of the drop zone.
+  if (dropZoneElement && parentBlockOrientation !== 'horizontal') {
+    const rect = dropZoneElement.getBoundingClientRect();
+    const [distance, edge] = getDistanceToNearestEdge(position, rect, ['top', 'bottom']);
+
+    // If dragging over the top or bottom of the drop zone, insert the block
+    // before or after the parent block. This only applies to blocks that use
+    // a drop zone element, typically container blocks such as Group or Cover.
+    if (rect.height > MINIMUM_HEIGHT_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
+      if (edge === 'top') {
+        return [rootBlockIndex, 'before'];
+      }
+      if (edge === 'bottom') {
+        return [rootBlockIndex + 1, 'after'];
+      }
+    }
+  }
+  const isRightToLeft = (0,external_wp_i18n_namespaceObject.isRTL)();
+
+  // Allow before/after when dragging over the left/right edges of the drop zone.
+  if (dropZoneElement && parentBlockOrientation === 'horizontal') {
+    const rect = dropZoneElement.getBoundingClientRect();
+    const [distance, edge] = getDistanceToNearestEdge(position, rect, ['left', 'right']);
+
+    // If dragging over the left or right of the drop zone, insert the block
+    // before or after the parent block. This only applies to blocks that use
+    // a drop zone element, typically container blocks such as Group.
+    if (rect.width > MINIMUM_WIDTH_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
+      if (isRightToLeft && edge === 'right' || !isRightToLeft && edge === 'left') {
+        return [rootBlockIndex, 'before'];
+      }
+      if (isRightToLeft && edge === 'left' || !isRightToLeft && edge === 'right') {
+        return [rootBlockIndex + 1, 'after'];
+      }
+    }
+  }
+  blocksData.forEach(({
+    isUnmodifiedDefaultBlock,
+    getBoundingClientRect,
+    blockIndex,
+    blockOrientation
+  }) => {
+    const rect = getBoundingClientRect();
+    let [distance, edge] = getDistanceToNearestEdge(position, rect, allowedEdges);
+    // If the the point is close to a side, prioritize that side.
+    const [sideDistance, sideEdge] = getDistanceToNearestEdge(position, rect, ['left', 'right']);
+    const isPointInsideRect = isPointContainedByRect(position, rect);
+
+    // Prioritize the element if the point is inside of an unmodified default block.
+    if (isUnmodifiedDefaultBlock && isPointInsideRect) {
+      distance = 0;
+    } else if (orientation === 'vertical' && blockOrientation !== 'horizontal' && (isPointInsideRect && sideDistance < THRESHOLD_DISTANCE || !isPointInsideRect && isPointWithinTopAndBottomBoundariesOfRect(position, rect))) {
+      /**
+       * This condition should only apply when the layout is vertical (otherwise there's
+       * no need to create a Row) and dropzones should only activate when the block is
+       * either within and close to the sides of the target block or on its outer sides.
+       */
+      targetBlockIndex = blockIndex;
+      nearestSide = sideEdge;
+    }
+    if (distance < minDistance) {
+      // Where the dropped block will be inserted on the nearest block.
+      insertPosition = edge === 'bottom' || !isRightToLeft && edge === 'right' || isRightToLeft && edge === 'left' ? 'after' : 'before';
+
+      // Update the currently known best candidate.
+      minDistance = distance;
+      nearestIndex = blockIndex;
+    }
+  });
+  const adjacentIndex = nearestIndex + (insertPosition === 'after' ? 1 : -1);
+  const isNearestBlockUnmodifiedDefaultBlock = !!blocksData[nearestIndex]?.isUnmodifiedDefaultBlock;
+  const isAdjacentBlockUnmodifiedDefaultBlock = !!blocksData[adjacentIndex]?.isUnmodifiedDefaultBlock;
+
+  // If the target index is set then group with the block at that index.
+  if (targetBlockIndex !== null) {
+    return [targetBlockIndex, 'group', nearestSide];
+  }
+  // If both blocks are not unmodified default blocks then just insert between them.
+  if (!isNearestBlockUnmodifiedDefaultBlock && !isAdjacentBlockUnmodifiedDefaultBlock) {
+    // If the user is dropping to the trailing edge of the block
+    // add 1 to the index to represent dragging after.
+    const insertionIndex = insertPosition === 'after' ? nearestIndex + 1 : nearestIndex;
+    return [insertionIndex, 'insert'];
+  }
+
+  // Otherwise, replace the nearest unmodified default block.
+  return [isNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex, 'replace'];
+}
+
+/**
+ * Check if the dragged blocks can be dropped on the target.
+ * @param {Function} getBlockType
+ * @param {Object[]} allowedBlocks
+ * @param {string[]} draggedBlockNames
+ * @param {string}   targetBlockName
+ * @return {boolean} Whether the dragged blocks can be dropped on the target.
+ */
+function isDropTargetValid(getBlockType, allowedBlocks, draggedBlockNames, targetBlockName) {
+  // At root level allowedBlocks is undefined and all blocks are allowed.
+  // Otherwise, check if all dragged blocks are allowed.
+  let areBlocksAllowed = true;
+  if (allowedBlocks) {
+    const allowedBlockNames = allowedBlocks?.map(({
+      name
+    }) => name);
+    areBlocksAllowed = draggedBlockNames.every(name => allowedBlockNames?.includes(name));
+  }
+
+  // Work out if dragged blocks have an allowed parent and if so
+  // check target block matches the allowed parent.
+  const draggedBlockTypes = draggedBlockNames.map(name => getBlockType(name));
+  const targetMatchesDraggedBlockParents = draggedBlockTypes.every(block => {
+    const [allowedParentName] = block?.parent || [];
+    if (!allowedParentName) {
+      return true;
+    }
+    return allowedParentName === targetBlockName;
+  });
+  return areBlocksAllowed && targetMatchesDraggedBlockParents;
+}
+
+/**
+ * Checks if the given element is an insertion point.
+ *
+ * @param {EventTarget|null} targetToCheck - The element to check.
+ * @param {Document}         ownerDocument - The owner document of the element.
+ * @return {boolean} True if the element is a insertion point, false otherwise.
+ */
+function isInsertionPoint(targetToCheck, ownerDocument) {
+  const {
+    defaultView
+  } = ownerDocument;
+  return !!(defaultView && targetToCheck instanceof defaultView.HTMLElement && targetToCheck.closest('[data-is-insertion-point]'));
+}
+
+/**
+ * @typedef  {Object} WPBlockDropZoneConfig
+ * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.
+ * @property {string}       rootClientId    The root client id for the block list.
+ */
+
+/**
+ * A React hook that can be used to make a block list handle drag and drop.
+ *
+ * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.
+ */
+function useBlockDropZone({
+  dropZoneElement,
+  // An undefined value represents a top-level block. Default to an empty
+  // string for this so that `targetRootClientId` can be easily compared to
+  // values returned by the `getRootBlockClientId` selector, which also uses
+  // an empty string to represent top-level blocks.
+  rootClientId: targetRootClientId = '',
+  parentClientId: parentBlockClientId = '',
+  isDisabled = false
+} = {}) {
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const [dropTarget, setDropTarget] = (0,external_wp_element_namespaceObject.useState)({
+    index: null,
+    operation: 'insert'
+  });
+  const {
+    getBlockType,
+    getBlockVariations,
+    getGroupingBlockName
+  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
+  const {
+    canInsertBlockType,
+    getBlockListSettings,
+    getBlocks,
+    getBlockIndex,
+    getDraggedBlockClientIds,
+    getBlockNamesByClientId,
+    getAllowedBlocks,
+    isDragging,
+    isGroupable,
+    isZoomOut,
+    getSectionRootClientId,
+    getBlockParents
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
+  const {
+    showInsertionPoint,
+    hideInsertionPoint,
+    startDragging,
+    stopDragging
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+  const onBlockDrop = useOnBlockDrop(dropTarget.operation === 'before' || dropTarget.operation === 'after' ? parentBlockClientId : targetRootClientId, dropTarget.index, {
+    operation: dropTarget.operation,
+    nearestSide: dropTarget.nearestSide
+  });
+  const throttled = (0,external_wp_compose_namespaceObject.useThrottle)((0,external_wp_element_namespaceObject.useCallback)((event, ownerDocument) => {
+    if (!isDragging()) {
+      // When dragging from the desktop, no drag start event is fired.
+      // So, ensure that the drag state is set when the user drags over a drop zone.
+      startDragging();
+    }
+    const draggedBlockClientIds = getDraggedBlockClientIds();
+    const targetParents = [targetRootClientId, ...getBlockParents(targetRootClientId, true)];
+
+    // Check if the target is within any of the dragged blocks.
+    const isTargetWithinDraggedBlocks = draggedBlockClientIds.some(clientId => targetParents.includes(clientId));
+    if (isTargetWithinDraggedBlocks) {
+      return;
+    }
+    const allowedBlocks = getAllowedBlocks(targetRootClientId);
+    const targetBlockName = getBlockNamesByClientId([targetRootClientId])[0];
+    const draggedBlockNames = getBlockNamesByClientId(draggedBlockClientIds);
+    const isBlockDroppingAllowed = isDropTargetValid(getBlockType, allowedBlocks, draggedBlockNames, targetBlockName);
+    if (!isBlockDroppingAllowed) {
+      return;
+    }
+    const sectionRootClientId = getSectionRootClientId();
+
+    // In Zoom Out mode, if the target is not the section root provided by settings then
+    // do not allow dropping as the drop target is not within the root (that which is
+    // treated as "the content" by Zoom Out Mode).
+    if (isZoomOut() && sectionRootClientId !== targetRootClientId) {
+      return;
+    }
+    const blocks = getBlocks(targetRootClientId);
+
+    // The block list is empty, don't show the insertion point but still allow dropping.
+    if (blocks.length === 0) {
+      registry.batch(() => {
+        setDropTarget({
+          index: 0,
+          operation: 'insert'
+        });
+        showInsertionPoint(targetRootClientId, 0, {
+          operation: 'insert'
+        });
+      });
+      return;
+    }
+    const blocksData = blocks.map(block => {
+      const clientId = block.clientId;
+      return {
+        isUnmodifiedDefaultBlock: (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(block),
+        getBoundingClientRect: () => ownerDocument.getElementById(`block-${clientId}`).getBoundingClientRect(),
+        blockIndex: getBlockIndex(clientId),
+        blockOrientation: getBlockListSettings(clientId)?.orientation
+      };
+    });
+    const dropTargetPosition = getDropTargetPosition(blocksData, {
+      x: event.clientX,
+      y: event.clientY
+    }, getBlockListSettings(targetRootClientId)?.orientation, {
+      dropZoneElement,
+      parentBlockClientId,
+      parentBlockOrientation: parentBlockClientId ? getBlockListSettings(parentBlockClientId)?.orientation : undefined,
+      rootBlockIndex: getBlockIndex(targetRootClientId)
+    });
+    const [targetIndex, operation, nearestSide] = dropTargetPosition;
+    const isTargetIndexEmptyDefaultBlock = blocksData[targetIndex]?.isUnmodifiedDefaultBlock;
+    if (isZoomOut() && !isTargetIndexEmptyDefaultBlock && operation !== 'insert') {
+      return;
+    }
+    if (operation === 'group') {
+      const targetBlock = blocks[targetIndex];
+      const areAllImages = [targetBlock.name, ...draggedBlockNames].every(name => name === 'core/image');
+      const canInsertGalleryBlock = canInsertBlockType('core/gallery', targetRootClientId);
+      const areGroupableBlocks = isGroupable([targetBlock.clientId, getDraggedBlockClientIds()]);
+      const groupBlockVariations = getBlockVariations(getGroupingBlockName(), 'block');
+      const canInsertRow = groupBlockVariations && groupBlockVariations.find(({
+        name
+      }) => name === 'group-row');
+
+      // If the dragged blocks and the target block are all images,
+      // check if it is creatable either a Row variation or a Gallery block.
+      if (areAllImages && !canInsertGalleryBlock && (!areGroupableBlocks || !canInsertRow)) {
+        return;
+      }
+      // If the dragged blocks and the target block are not all images,
+      // check if it is creatable a Row variation.
+      if (!areAllImages && (!areGroupableBlocks || !canInsertRow)) {
+        return;
+      }
+    }
+    registry.batch(() => {
+      setDropTarget({
+        index: targetIndex,
+        operation,
+        nearestSide
+      });
+      const insertionPointClientId = ['before', 'after'].includes(operation) ? parentBlockClientId : targetRootClientId;
+      showInsertionPoint(insertionPointClientId, targetIndex, {
+        operation,
+        nearestSide
+      });
+    });
+  }, [isDragging, getAllowedBlocks, targetRootClientId, getBlockNamesByClientId, getDraggedBlockClientIds, getBlockType, getSectionRootClientId, isZoomOut, getBlocks, getBlockListSettings, dropZoneElement, parentBlockClientId, getBlockIndex, registry, startDragging, showInsertionPoint, canInsertBlockType, isGroupable, getBlockVariations, getGroupingBlockName]), 200);
+  return (0,external_wp_compose_namespaceObject.__experimentalUseDropZone)({
+    dropZoneElement,
+    isDisabled,
+    onDrop: onBlockDrop,
+    onDragOver(event) {
+      // `currentTarget` is only available while the event is being
+      // handled, so get it now and pass it to the thottled function.
+      // https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
+      throttled(event, event.currentTarget.ownerDocument);
+    },
+    onDragLeave(event) {
+      const {
+        ownerDocument
+      } = event.currentTarget;
+
+      // If the drag event is leaving the drop zone and entering an insertion point,
+      // do not hide the insertion point as it is conceptually within the dropzone.
+      if (isInsertionPoint(event.relatedTarget, ownerDocument) || isInsertionPoint(event.target, ownerDocument)) {
+        return;
+      }
+      throttled.cancel();
+      hideInsertionPoint();
+    },
+    onDragEnd() {
+      throttled.cancel();
+      stopDragging();
+      hideInsertionPoint();
+    }
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+const EMPTY_OBJECT = {};
+function BlockContext({
+  children,
+  clientId
+}) {
+  const context = useBlockContext(clientId);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockContextProvider, {
+    value: context,
+    children: children
+  });
+}
+const BlockListItemsMemo = (0,external_wp_element_namespaceObject.memo)(BlockListItems);
+
+/**
+ * InnerBlocks is a component which allows a single block to have multiple blocks
+ * as children. The UncontrolledInnerBlocks component is used whenever the inner
+ * blocks are not controlled by another entity. In other words, it is normally
+ * used for inner blocks in the post editor
+ *
+ * @param {Object} props The component props.
+ */
+function UncontrolledInnerBlocks(props) {
+  const {
+    clientId,
+    allowedBlocks,
+    prioritizedInserterBlocks,
+    defaultBlock,
+    directInsert,
+    __experimentalDefaultBlock,
+    __experimentalDirectInsert,
+    template,
+    templateLock,
+    wrapperRef,
+    templateInsertUpdatesSelection,
+    __experimentalCaptureToolbars: captureToolbars,
+    __experimentalAppenderTagName,
+    renderAppender,
+    orientation,
+    placeholder,
+    layout,
+    name,
+    blockType,
+    parentLock,
+    defaultLayout
+  } = props;
+  useNestedSettingsUpdate(clientId, parentLock, allowedBlocks, prioritizedInserterBlocks, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, templateLock, captureToolbars, orientation, layout);
+  useInnerBlockTemplateSync(clientId, template, templateLock, templateInsertUpdatesSelection);
+  const defaultLayoutBlockSupport = (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, 'layout') || (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, '__experimentalLayout') || EMPTY_OBJECT;
+  const {
+    allowSizingOnChildren = false
+  } = defaultLayoutBlockSupport;
+  const usedLayout = layout || defaultLayoutBlockSupport;
+  const memoedLayout = (0,external_wp_element_namespaceObject.useMemo)(() => ({
+    // Default layout will know about any content/wide size defined by the theme.
+    ...defaultLayout,
+    ...usedLayout,
+    ...(allowSizingOnChildren && {
+      allowSizingOnChildren: true
+    })
+  }), [defaultLayout, usedLayout, allowSizingOnChildren]);
+
+  // For controlled inner blocks, we don't want a change in blocks to
+  // re-render the blocks list.
+  const items = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListItemsMemo, {
+    rootClientId: clientId,
+    renderAppender: renderAppender,
+    __experimentalAppenderTagName: __experimentalAppenderTagName,
+    layout: memoedLayout,
+    wrapperRef: wrapperRef,
+    placeholder: placeholder
+  });
+  if (!blockType?.providesContext || Object.keys(blockType.providesContext).length === 0) {
+    return items;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockContext, {
+    clientId: clientId,
+    children: items
+  });
+}
+
+/**
+ * The controlled inner blocks component wraps the uncontrolled inner blocks
+ * component with the blockSync hook. This keeps the innerBlocks of the block in
+ * the block-editor store in sync with the blocks of the controlling entity. An
+ * example of an inner block controller is a template part block, which provides
+ * its own blocks from the template part entity data source.
+ *
+ * @param {Object} props The component props.
+ */
+function ControlledInnerBlocks(props) {
+  useBlockSync(props);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(UncontrolledInnerBlocks, {
+    ...props
+  });
+}
+const ForwardedInnerBlocks = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
+  const innerBlocksProps = useInnerBlocksProps({
+    ref
+  }, props);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    className: "block-editor-inner-blocks",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      ...innerBlocksProps
+    })
+  });
+});
+
+/**
+ * This hook is used to lightly mark an element as an inner blocks wrapper
+ * element. Call this hook and pass the returned props to the element to mark as
+ * an inner blocks wrapper, automatically rendering inner blocks as children. If
+ * you define a ref for the element, it is important to pass the ref to this
+ * hook, which the hook in turn will pass to the component through the props it
+ * returns. Optionally, you can also pass any other props through this hook, and
+ * they will be merged and returned.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md
+ *
+ * @param {Object} props   Optional. Props to pass to the element. Must contain
+ *                         the ref if one is defined.
+ * @param {Object} options Optional. Inner blocks options.
+ */
+function useInnerBlocksProps(props = {}, options = {}) {
+  const {
+    __unstableDisableLayoutClassNames,
+    __unstableDisableDropZone,
+    dropZoneElement
+  } = options;
+  const {
+    clientId,
+    layout = null,
+    __unstableLayoutClassNames: layoutClassNames = ''
+  } = useBlockEditContext();
+  const selected = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockName,
+      isZoomOut,
+      getTemplateLock,
+      getBlockRootClientId,
+      getBlockEditingMode,
+      getBlockSettings,
+      getSectionRootClientId
+    } = unlock(select(store));
+    if (!clientId) {
+      const sectionRootClientId = getSectionRootClientId();
+      // Disable the root drop zone when zoomed out and the section root client id
+      // is not the root block list (represented by an empty string).
+      // This avoids drag handling bugs caused by having two block lists acting as
+      // drop zones - the actual 'root' block list and the section root.
+      return {
+        isDropZoneDisabled: isZoomOut() && sectionRootClientId !== ''
+      };
+    }
+    const {
+      hasBlockSupport,
+      getBlockType
+    } = select(external_wp_blocks_namespaceObject.store);
+    const blockName = getBlockName(clientId);
+    const blockEditingMode = getBlockEditingMode(clientId);
+    const parentClientId = getBlockRootClientId(clientId);
+    const [defaultLayout] = getBlockSettings(clientId, 'layout');
+    let _isDropZoneDisabled = blockEditingMode === 'disabled';
+    if (isZoomOut()) {
+      // In zoom out mode, we want to disable the drop zone for the sections.
+      // The inner blocks belonging to the section drop zone is
+      // already disabled by the blocks themselves being disabled.
+      const sectionRootClientId = getSectionRootClientId();
+      _isDropZoneDisabled = clientId !== sectionRootClientId;
+    }
+    return {
+      __experimentalCaptureToolbars: hasBlockSupport(blockName, '__experimentalExposeControlsToChildren', false),
+      name: blockName,
+      blockType: getBlockType(blockName),
+      parentLock: getTemplateLock(parentClientId),
+      parentClientId,
+      isDropZoneDisabled: _isDropZoneDisabled,
+      defaultLayout
+    };
+  }, [clientId]);
+  const {
+    __experimentalCaptureToolbars,
+    name,
+    blockType,
+    parentLock,
+    parentClientId,
+    isDropZoneDisabled,
+    defaultLayout
+  } = selected;
+  const blockDropZoneRef = useBlockDropZone({
+    dropZoneElement,
+    rootClientId: clientId,
+    parentClientId
+  });
+  const ref = (0,external_wp_compose_namespaceObject.useMergeRefs)([props.ref, __unstableDisableDropZone || isDropZoneDisabled || layout?.isManualPlacement && window.__experimentalEnableGridInteractivity ? null : blockDropZoneRef]);
+  const innerBlocksProps = {
+    __experimentalCaptureToolbars,
+    layout,
+    name,
+    blockType,
+    parentLock,
+    defaultLayout,
+    ...options
+  };
+  const InnerBlocks = innerBlocksProps.value && innerBlocksProps.onChange ? ControlledInnerBlocks : UncontrolledInnerBlocks;
+  return {
+    ...props,
+    ref,
+    className: dist_clsx(props.className, 'block-editor-block-list__layout', __unstableDisableLayoutClassNames ? '' : layoutClassNames),
+    children: clientId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InnerBlocks, {
+      ...innerBlocksProps,
+      clientId: clientId
+    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListItems, {
+      ...options
+    })
+  };
+}
+useInnerBlocksProps.save = external_wp_blocks_namespaceObject.__unstableGetInnerBlocksProps;
+
+// Expose default appender placeholders as components.
+ForwardedInnerBlocks.DefaultBlockAppender = default_block_appender_DefaultBlockAppender;
+ForwardedInnerBlocks.ButtonBlockAppender = ButtonBlockAppender;
+ForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md
+ */
+/* harmony default export */ const inner_blocks = (ForwardedInnerBlocks);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/observe-typing/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Set of key codes upon which typing is to be initiated on a keydown event.
+ *
+ * @type {Set<number>}
+ */
+
+const KEY_DOWN_ELIGIBLE_KEY_CODES = new Set([external_wp_keycodes_namespaceObject.UP, external_wp_keycodes_namespaceObject.RIGHT, external_wp_keycodes_namespaceObject.DOWN, external_wp_keycodes_namespaceObject.LEFT, external_wp_keycodes_namespaceObject.ENTER, external_wp_keycodes_namespaceObject.BACKSPACE]);
+
+/**
+ * Returns true if a given keydown event can be inferred as intent to start
+ * typing, or false otherwise. A keydown is considered eligible if it is a
+ * text navigation without shift active.
+ *
+ * @param {KeyboardEvent} event Keydown event to test.
+ *
+ * @return {boolean} Whether event is eligible to start typing.
+ */
+function isKeyDownEligibleForStartTyping(event) {
+  const {
+    keyCode,
+    shiftKey
+  } = event;
+  return !shiftKey && KEY_DOWN_ELIGIBLE_KEY_CODES.has(keyCode);
+}
+
+/**
+ * Removes the `isTyping` flag when the mouse moves in the document of the given
+ * element.
+ */
+function useMouseMoveTypingReset() {
+  const isTyping = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isTyping(), []);
+  const {
+    stopTyping
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
+    if (!isTyping) {
+      return;
+    }
+    const {
+      ownerDocument
+    } = node;
+    let lastClientX;
+    let lastClientY;
+
+    /**
+     * On mouse move, unset typing flag if user has moved cursor.
+     *
+     * @param {MouseEvent} event Mousemove event.
+     */
+    function stopTypingOnMouseMove(event) {
+      const {
+        clientX,
+        clientY
+      } = event;
+
+      // We need to check that the mouse really moved because Safari
+      // triggers mousemove events when shift or ctrl are pressed.
+      if (lastClientX && lastClientY && (lastClientX !== clientX || lastClientY !== clientY)) {
+        stopTyping();
+      }
+      lastClientX = clientX;
+      lastClientY = clientY;
+    }
+    ownerDocument.addEventListener('mousemove', stopTypingOnMouseMove);
+    return () => {
+      ownerDocument.removeEventListener('mousemove', stopTypingOnMouseMove);
+    };
+  }, [isTyping, stopTyping]);
+}
+
+/**
+ * Sets and removes the `isTyping` flag based on user actions:
+ *
+ * - Sets the flag if the user types within the given element.
+ * - Removes the flag when the user selects some text, focuses a non-text
+ *   field, presses ESC or TAB, or moves the mouse in the document.
+ */
+function useTypingObserver() {
+  const {
+    isTyping
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      isTyping: _isTyping
+    } = select(store);
+    return {
+      isTyping: _isTyping()
+    };
+  }, []);
+  const {
+    startTyping,
+    stopTyping
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const ref1 = useMouseMoveTypingReset();
+  const ref2 = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
+    const {
+      ownerDocument
+    } = node;
+    const {
+      defaultView
+    } = ownerDocument;
+    const selection = defaultView.getSelection();
+
+    // Listeners to stop typing should only be added when typing.
+    // Listeners to start typing should only be added when not typing.
+    if (isTyping) {
+      let timerId;
+
+      /**
+       * Stops typing when focus transitions to a non-text field element.
+       *
+       * @param {FocusEvent} event Focus event.
+       */
+      function stopTypingOnNonTextField(event) {
+        const {
+          target
+        } = event;
+
+        // Since focus to a non-text field via arrow key will trigger
+        // before the keydown event, wait until after current stack
+        // before evaluating whether typing is to be stopped. Otherwise,
+        // typing will re-start.
+        timerId = defaultView.setTimeout(() => {
+          if (!(0,external_wp_dom_namespaceObject.isTextField)(target)) {
+            stopTyping();
+          }
+        });
+      }
+
+      /**
+       * Unsets typing flag if user presses Escape while typing flag is
+       * active.
+       *
+       * @param {KeyboardEvent} event Keypress or keydown event to
+       *                              interpret.
+       */
+      function stopTypingOnEscapeKey(event) {
+        const {
+          keyCode
+        } = event;
+        if (keyCode === external_wp_keycodes_namespaceObject.ESCAPE || keyCode === external_wp_keycodes_namespaceObject.TAB) {
+          stopTyping();
+        }
+      }
+
+      /**
+       * On selection change, unset typing flag if user has made an
+       * uncollapsed (shift) selection.
+       */
+      function stopTypingOnSelectionUncollapse() {
+        if (!selection.isCollapsed) {
+          stopTyping();
+        }
+      }
+      node.addEventListener('focus', stopTypingOnNonTextField);
+      node.addEventListener('keydown', stopTypingOnEscapeKey);
+      ownerDocument.addEventListener('selectionchange', stopTypingOnSelectionUncollapse);
+      return () => {
+        defaultView.clearTimeout(timerId);
+        node.removeEventListener('focus', stopTypingOnNonTextField);
+        node.removeEventListener('keydown', stopTypingOnEscapeKey);
+        ownerDocument.removeEventListener('selectionchange', stopTypingOnSelectionUncollapse);
+      };
+    }
+
+    /**
+     * Handles a keypress or keydown event to infer intention to start
+     * typing.
+     *
+     * @param {KeyboardEvent} event Keypress or keydown event to interpret.
+     */
+    function startTypingInTextField(event) {
+      const {
+        type,
+        target
+      } = event;
+
+      // Abort early if already typing, or key press is incurred outside a
+      // text field (e.g. arrow-ing through toolbar buttons).
+      // Ignore typing if outside the current DOM container
+      if (!(0,external_wp_dom_namespaceObject.isTextField)(target) || !node.contains(target)) {
+        return;
+      }
+
+      // Special-case keydown because certain keys do not emit a keypress
+      // event. Conversely avoid keydown as the canonical event since
+      // there are many keydown which are explicitly not targeted for
+      // typing.
+      if (type === 'keydown' && !isKeyDownEligibleForStartTyping(event)) {
+        return;
+      }
+      startTyping();
+    }
+    node.addEventListener('keypress', startTypingInTextField);
+    node.addEventListener('keydown', startTypingInTextField);
+    return () => {
+      node.removeEventListener('keypress', startTypingInTextField);
+      node.removeEventListener('keydown', startTypingInTextField);
+    };
+  }, [isTyping, startTyping, stopTyping]);
+  return (0,external_wp_compose_namespaceObject.useMergeRefs)([ref1, ref2]);
+}
+function ObserveTyping({
+  children
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    ref: useTypingObserver(),
+    children: children
+  });
+}
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/observe-typing/README.md
+ */
+/* harmony default export */ const observe_typing = (ObserveTyping);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/zoom-out-separator.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function ZoomOutSeparator({
+  clientId,
+  rootClientId = '',
+  position = 'top'
+}) {
+  const [isDraggedOver, setIsDraggedOver] = (0,external_wp_element_namespaceObject.useState)(false);
+  const {
+    sectionRootClientId,
+    sectionClientIds,
+    insertionPoint,
+    blockInsertionPointVisible,
+    blockInsertionPoint,
+    blocksBeingDragged
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getInsertionPoint,
+      getBlockOrder,
+      getSectionRootClientId,
+      isBlockInsertionPointVisible,
+      getBlockInsertionPoint,
+      getDraggedBlockClientIds
+    } = unlock(select(store));
+    const root = getSectionRootClientId();
+    const sectionRootClientIds = getBlockOrder(root);
+    return {
+      sectionRootClientId: root,
+      sectionClientIds: sectionRootClientIds,
+      blockOrder: getBlockOrder(root),
+      insertionPoint: getInsertionPoint(),
+      blockInsertionPoint: getBlockInsertionPoint(),
+      blockInsertionPointVisible: isBlockInsertionPointVisible(),
+      blocksBeingDragged: getDraggedBlockClientIds()
+    };
+  }, []);
+  const isReducedMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
+  if (!clientId) {
+    return;
+  }
+  let isVisible = false;
+  const isSectionBlock = rootClientId === sectionRootClientId && sectionClientIds && sectionClientIds.includes(clientId);
+  if (!isSectionBlock) {
+    return null;
+  }
+  const hasTopInsertionPoint = insertionPoint?.index === 0 && clientId === sectionClientIds[insertionPoint.index];
+  const hasBottomInsertionPoint = insertionPoint && insertionPoint.hasOwnProperty('index') && clientId === sectionClientIds[insertionPoint.index - 1];
+
+  // We want to show the zoom out separator in either of these conditions:
+  // 1. If the inserter has an insertion index set
+  // 2. We are dragging a pattern over an insertion point
+  if (position === 'top') {
+    isVisible = hasTopInsertionPoint || blockInsertionPointVisible && blockInsertionPoint.index === 0 && clientId === sectionClientIds[blockInsertionPoint.index];
+  }
+  if (position === 'bottom') {
+    isVisible = hasBottomInsertionPoint || blockInsertionPointVisible && clientId === sectionClientIds[blockInsertionPoint.index - 1];
+  }
+  const blockBeingDraggedClientId = blocksBeingDragged[0];
+  const isCurrentBlockBeingDragged = blocksBeingDragged.includes(clientId);
+  const blockBeingDraggedIndex = sectionClientIds.indexOf(blockBeingDraggedClientId);
+  const blockBeingDraggedPreviousSiblingClientId = blockBeingDraggedIndex > 0 ? sectionClientIds[blockBeingDraggedIndex - 1] : null;
+  const isCurrentBlockPreviousSiblingOfBlockBeingDragged = blockBeingDraggedPreviousSiblingClientId === clientId;
+
+  // The separators are visually top/bottom of the block, but in actual fact
+  // the "top" separator is the "bottom" separator of the previous block.
+  // Therefore, this logic hides the separator if the current block is being dragged
+  // or if the current block is the previous sibling of the block being dragged.
+  if (isCurrentBlockBeingDragged || isCurrentBlockPreviousSiblingOfBlockBeingDragged) {
+    isVisible = false;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableAnimatePresence, {
+    children: isVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+      initial: {
+        height: 0
+      },
+      animate: {
+        // Use a height equal to that of the zoom out frame size.
+        height: 'calc(1 * var(--wp-block-editor-iframe-zoom-out-frame-size) / var(--wp-block-editor-iframe-zoom-out-scale)'
+      },
+      exit: {
+        height: 0
+      },
+      transition: {
+        type: 'tween',
+        duration: isReducedMotion ? 0 : 0.2,
+        ease: [0.6, 0, 0.4, 1]
+      },
+      className: dist_clsx('block-editor-block-list__zoom-out-separator', {
+        'is-dragged-over': isDraggedOver
+      }),
+      "data-is-insertion-point": "true",
+      onDragOver: () => setIsDraggedOver(true),
+      onDragLeave: () => setIsDraggedOver(false),
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+        initial: {
+          opacity: 0
+        },
+        animate: {
+          opacity: 1
+        },
+        exit: {
+          opacity: 0,
+          transition: {
+            delay: -0.125
+          }
+        },
+        transition: {
+          ease: 'linear',
+          duration: 0.1,
+          delay: 0.125
+        },
+        children: (0,external_wp_i18n_namespaceObject.__)('Drop pattern.')
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-list/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+const block_list_IntersectionObserver = (0,external_wp_element_namespaceObject.createContext)();
+const pendingBlockVisibilityUpdatesPerRegistry = new WeakMap();
+function Root({
+  className,
+  ...settings
+}) {
+  const {
+    isOutlineMode,
+    isFocusMode,
+    temporarilyEditingAsBlocks
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getSettings,
+      getTemporarilyEditingAsBlocks,
+      isTyping
+    } = unlock(select(store));
+    const {
+      outlineMode,
+      focusMode
+    } = getSettings();
+    return {
+      isOutlineMode: outlineMode && !isTyping(),
+      isFocusMode: focusMode,
+      temporarilyEditingAsBlocks: getTemporarilyEditingAsBlocks()
+    };
+  }, []);
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
+  const {
+    setBlockVisibility
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const delayedBlockVisibilityUpdates = (0,external_wp_compose_namespaceObject.useDebounce)((0,external_wp_element_namespaceObject.useCallback)(() => {
+    const updates = {};
+    pendingBlockVisibilityUpdatesPerRegistry.get(registry).forEach(([id, isIntersecting]) => {
+      updates[id] = isIntersecting;
+    });
+    setBlockVisibility(updates);
+  }, [registry]), 300, {
+    trailing: true
+  });
+  const intersectionObserver = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    const {
+      IntersectionObserver: Observer
+    } = window;
+    if (!Observer) {
+      return;
+    }
+    return new Observer(entries => {
+      if (!pendingBlockVisibilityUpdatesPerRegistry.get(registry)) {
+        pendingBlockVisibilityUpdatesPerRegistry.set(registry, []);
+      }
+      for (const entry of entries) {
+        const clientId = entry.target.getAttribute('data-block');
+        pendingBlockVisibilityUpdatesPerRegistry.get(registry).push([clientId, entry.isIntersecting]);
+      }
+      delayedBlockVisibilityUpdates();
+    });
+  }, []);
+  const innerBlocksProps = useInnerBlocksProps({
+    ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([useBlockSelectionClearer(), useInBetweenInserter(), useTypingObserver()]),
+    className: dist_clsx('is-root-container', className, {
+      'is-outline-mode': isOutlineMode,
+      'is-focus-mode': isFocusMode
+    })
+  }, settings);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_list_IntersectionObserver.Provider, {
+    value: intersectionObserver,
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      ...innerBlocksProps
+    }), !!temporarilyEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StopEditingAsBlocksOnOutsideSelect, {
+      clientId: temporarilyEditingAsBlocks
+    })]
+  });
+}
+function StopEditingAsBlocksOnOutsideSelect({
+  clientId
+}) {
+  const {
+    stopEditingAsBlocks
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+  const isBlockOrDescendantSelected = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      isBlockSelected,
+      hasSelectedInnerBlock
+    } = select(store);
+    return isBlockSelected(clientId) || hasSelectedInnerBlock(clientId, true);
+  }, [clientId]);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (!isBlockOrDescendantSelected) {
+      stopEditingAsBlocks(clientId);
+    }
+  }, [isBlockOrDescendantSelected, clientId, stopEditingAsBlocks]);
+  return null;
+}
+function BlockList(settings) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Provider, {
+    value: DEFAULT_BLOCK_EDIT_CONTEXT,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Root, {
+      ...settings
+    })
+  });
+}
+const block_list_EMPTY_ARRAY = [];
+const block_list_EMPTY_SET = new Set();
+function Items({
+  placeholder,
+  rootClientId,
+  renderAppender: CustomAppender,
+  __experimentalAppenderTagName,
+  layout = defaultLayout
+}) {
+  // Avoid passing CustomAppender to useSelect because it could be a new
+  // function on every render.
+  const hasAppender = CustomAppender !== false;
+  const hasCustomAppender = !!CustomAppender;
+  const {
+    order,
+    isZoomOut,
+    selectedBlocks,
+    visibleBlocks,
+    shouldRenderAppender
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getSettings,
+      getBlockOrder,
+      getSelectedBlockClientIds,
+      __unstableGetVisibleBlocks,
+      getTemplateLock,
+      getBlockEditingMode,
+      isSectionBlock,
+      isZoomOut: _isZoomOut,
+      canInsertBlockType
+    } = unlock(select(store));
+    const _order = getBlockOrder(rootClientId);
+    if (getSettings().isPreviewMode) {
+      return {
+        order: _order,
+        selectedBlocks: block_list_EMPTY_ARRAY,
+        visibleBlocks: block_list_EMPTY_SET
+      };
+    }
+    const selectedBlockClientIds = getSelectedBlockClientIds();
+    const selectedBlockClientId = selectedBlockClientIds[0];
+    const showRootAppender = !rootClientId && !selectedBlockClientId && (!_order.length || !canInsertBlockType((0,external_wp_blocks_namespaceObject.getDefaultBlockName)(), rootClientId));
+    const hasSelectedRoot = !!(rootClientId && selectedBlockClientId && rootClientId === selectedBlockClientId);
+    return {
+      order: _order,
+      selectedBlocks: selectedBlockClientIds,
+      visibleBlocks: __unstableGetVisibleBlocks(),
+      isZoomOut: _isZoomOut(),
+      shouldRenderAppender: !isSectionBlock(rootClientId) && getBlockEditingMode(rootClientId) !== 'disabled' && !getTemplateLock(rootClientId) && hasAppender && !_isZoomOut() && (hasCustomAppender || hasSelectedRoot || showRootAppender)
+    };
+  }, [rootClientId, hasAppender, hasCustomAppender]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(LayoutProvider, {
+    value: layout,
+    children: [order.map(clientId => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_data_namespaceObject.AsyncModeProvider, {
+      value:
+      // Only provide data asynchronously if the block is
+      // not visible and not selected.
+      !visibleBlocks.has(clientId) && !selectedBlocks.includes(clientId),
+      children: [isZoomOut && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ZoomOutSeparator, {
+        clientId: clientId,
+        rootClientId: rootClientId,
+        position: "top"
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block, {
+        rootClientId: rootClientId,
+        clientId: clientId
+      }), isZoomOut && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ZoomOutSeparator, {
+        clientId: clientId,
+        rootClientId: rootClientId,
+        position: "bottom"
+      })]
+    }, clientId)), order.length < 1 && placeholder, shouldRenderAppender && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListAppender, {
+      tagName: __experimentalAppenderTagName,
+      rootClientId: rootClientId,
+      CustomAppender: CustomAppender
+    })]
+  });
+}
+function BlockListItems(props) {
+  // This component needs to always be synchronous as it's the one changing
+  // the async mode depending on the block selection.
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.AsyncModeProvider, {
+    value: false,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Items, {
+      ...props
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-multi-selection.js
 /**
  * WordPress dependencies
  */
@@ -42041,7 +44805,7 @@
   }, [hasMultiSelection, isMultiSelecting, multiSelectedBlockClientIds, selectedBlockClientId, initialPosition, isFullSelection]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-tab-nav.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-tab-nav.js
 /**
  * WordPress dependencies
  */
@@ -42059,49 +44823,62 @@
 
 
 function useTabNav() {
-  const container = (0,external_wp_element_namespaceObject.useRef)();
+  const containerRef = /** @type {typeof useRef<HTMLElement>} */(0,external_wp_element_namespaceObject.useRef)();
   const focusCaptureBeforeRef = (0,external_wp_element_namespaceObject.useRef)();
   const focusCaptureAfterRef = (0,external_wp_element_namespaceObject.useRef)();
   const {
     hasMultiSelection,
     getSelectedBlockClientId,
-    getBlockCount
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    setNavigationMode,
+    getBlockCount,
+    getBlockOrder,
+    getLastFocus,
+    getSectionRootClientId,
+    isZoomOut
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
+  const {
     setLastFocus
   } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
-  const isNavigationMode = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isNavigationMode(), []);
-  const {
-    getLastFocus
-  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
-
-  // Don't allow tabbing to this element in Navigation mode.
-  const focusCaptureTabIndex = !isNavigationMode ? '0' : undefined;
 
   // Reference that holds the a flag for enabling or disabling
   // capturing on the focus capture elements.
-  const noCapture = (0,external_wp_element_namespaceObject.useRef)();
+  const noCaptureRef = (0,external_wp_element_namespaceObject.useRef)();
   function onFocusCapture(event) {
+    const canvasElement = containerRef.current.ownerDocument === event.target.ownerDocument ? containerRef.current : containerRef.current.ownerDocument.defaultView.frameElement;
+
     // Do not capture incoming focus if set by us in WritingFlow.
-    if (noCapture.current) {
-      noCapture.current = null;
+    if (noCaptureRef.current) {
+      noCaptureRef.current = null;
     } else if (hasMultiSelection()) {
-      container.current.focus();
+      containerRef.current.focus();
     } else if (getSelectedBlockClientId()) {
       if (getLastFocus()?.current) {
         getLastFocus().current.focus();
       } else {
         // Handles when the last focus has not been set yet, or has been cleared by new blocks being added via the inserter.
-        container.current.querySelector(`[data-block="${getSelectedBlockClientId()}"]`).focus();
-      }
-    } else {
-      setNavigationMode(true);
-      const canvasElement = container.current.ownerDocument === event.target.ownerDocument ? container.current : container.current.ownerDocument.defaultView.frameElement;
+        containerRef.current.querySelector(`[data-block="${getSelectedBlockClientId()}"]`).focus();
+      }
+    }
+    // In "compose" mode without a selected ID, we want to place focus on the section root when tabbing to the canvas.
+    else if (isZoomOut()) {
+      const sectionRootClientId = getSectionRootClientId();
+      const sectionBlocks = getBlockOrder(sectionRootClientId);
+
+      // If we have section within the section root, focus the first one.
+      if (sectionBlocks.length) {
+        containerRef.current.querySelector(`[data-block="${sectionBlocks[0]}"]`).focus();
+      }
+      // If we don't have any section blocks, focus the section root.
+      else if (sectionRootClientId) {
+        containerRef.current.querySelector(`[data-block="${sectionRootClientId}"]`).focus();
+      } else {
+        // If we don't have any section root, focus the canvas.
+        canvasElement.focus();
+      }
+    } else {
       const isBefore =
       // eslint-disable-next-line no-bitwise
       event.target.compareDocumentPosition(canvasElement) & event.target.DOCUMENT_POSITION_FOLLOWING;
-      const tabbables = external_wp_dom_namespaceObject.focus.tabbable.find(container.current);
+      const tabbables = external_wp_dom_namespaceObject.focus.tabbable.find(containerRef.current);
       if (tabbables.length) {
         const next = isBefore ? tabbables[0] : tabbables[tabbables.length - 1];
         next.focus();
@@ -42110,12 +44887,12 @@
   }
   const before = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     ref: focusCaptureBeforeRef,
-    tabIndex: focusCaptureTabIndex,
+    tabIndex: "0",
     onFocus: onFocusCapture
   });
   const after = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     ref: focusCaptureAfterRef,
-    tabIndex: focusCaptureTabIndex,
+    tabIndex: "0",
     onFocus: onFocusCapture
   });
   const ref = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
@@ -42123,11 +44900,6 @@
       if (event.defaultPrevented) {
         return;
       }
-      if (event.keyCode === external_wp_keycodes_namespaceObject.ESCAPE && !hasMultiSelection()) {
-        event.preventDefault();
-        setNavigationMode(true);
-        return;
-      }
 
       // In Edit mode, Tab should focus the first tabbable element after
       // the content, which is normally the sidebar (with block controls)
@@ -42138,28 +44910,26 @@
       if (event.keyCode !== external_wp_keycodes_namespaceObject.TAB) {
         return;
       }
-      const isShift = event.shiftKey;
+      if (
+      // Bails in case the focus capture elements aren’t present. They
+      // may be omitted to avoid silent tab stops in preview mode.
+      // See: https://github.com/WordPress/gutenberg/pull/59317
+      !focusCaptureAfterRef.current || !focusCaptureBeforeRef.current) {
+        return;
+      }
+      const {
+        target,
+        shiftKey: isShift
+      } = event;
       const direction = isShift ? 'findPrevious' : 'findNext';
-      if (!hasMultiSelection() && !getSelectedBlockClientId()) {
-        // Preserve the behaviour of entering navigation mode when
-        // tabbing into the content without a block selection.
-        // `onFocusCapture` already did this previously, but we need to
-        // do it again here because after clearing block selection,
-        // focus land on the writing flow container and pressing Tab
-        // will no longer send focus through the focus capture element.
-        if (event.target === node) {
-          setNavigationMode(true);
-        }
-        return;
-      }
-      const nextTabbable = external_wp_dom_namespaceObject.focus.tabbable[direction](event.target);
+      const nextTabbable = external_wp_dom_namespaceObject.focus.tabbable[direction](target);
 
       // We want to constrain the tabbing to the block and its child blocks.
       // If the preceding form element is within a different block,
       // such as two sibling image blocks in the placeholder state,
       // we want shift + tab from the first form element to move to the image
       // block toolbar and not the previous image block's form element.
-      const currentBlock = event.target.closest('[data-block]');
+      const currentBlock = target.closest('[data-block]');
       const isElementPartOfSelectedBlock = currentBlock && nextTabbable && (isInSameBlock(currentBlock, nextTabbable) || isInsideRootBlock(currentBlock, nextTabbable));
 
       // Allow tabbing from the block wrapper to a form element,
@@ -42176,7 +44946,7 @@
       // Disable focus capturing on the focus capture element, so it
       // doesn't refocus this block and so it allows default behaviour
       // (moving focus to the next tabbable element).
-      noCapture.current = true;
+      noCaptureRef.current = true;
 
       // Focusing the focus capture element, which is located above and
       // below the editor, should not scroll the page all the way up or
@@ -42196,7 +44966,7 @@
 
       // If focus disappears due to there being no blocks, move focus to
       // the writing flow wrapper.
-      if (!event.relatedTarget && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
+      if (!event.relatedTarget && event.target.hasAttribute('data-block') && ownerDocument.activeElement === ownerDocument.body && getBlockCount() === 0) {
         node.focus();
       }
     }
@@ -42216,7 +44986,7 @@
       if (event.target?.getAttribute('role') === 'region') {
         return;
       }
-      if (container.current === event.target) {
+      if (containerRef.current === event.target) {
         return;
       }
       const isShift = event.shiftKey;
@@ -42245,11 +45015,11 @@
       node.removeEventListener('focusout', onFocusOut);
     };
   }, []);
-  const mergedRefs = (0,external_wp_compose_namespaceObject.useMergeRefs)([container, ref]);
+  const mergedRefs = (0,external_wp_compose_namespaceObject.useMergeRefs)([containerRef, ref]);
   return [before, mergedRefs, after];
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-arrow-nav.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-arrow-nav.js
 /**
  * WordPress dependencies
  */
@@ -42496,7 +45266,7 @@
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-select-all.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-select-all.js
 /**
  * WordPress dependencies
  */
@@ -42552,7 +45322,7 @@
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-drag-selection.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-drag-selection.js
 /**
  * WordPress dependencies
  */
@@ -42634,11 +45404,21 @@
         }
       });
     }
+    let lastMouseDownTarget;
+    function onMouseDown({
+      target
+    }) {
+      lastMouseDownTarget = target;
+    }
     function onMouseLeave({
       buttons,
       target,
       relatedTarget
     }) {
+      if (!target.contains(lastMouseDownTarget)) {
+        return;
+      }
+
       // If we're moving into a child element, ignore. We're tracking
       // the mouse leaving the element to a parent, no a child.
       if (target.contains(relatedTarget)) {
@@ -42696,6 +45476,7 @@
       setContentEditableWrapper(node, true);
     }
     node.addEventListener('mouseout', onMouseLeave);
+    node.addEventListener('mousedown', onMouseDown);
     return () => {
       node.removeEventListener('mouseout', onMouseLeave);
       defaultView.removeEventListener('mouseup', onMouseUp);
@@ -42704,10 +45485,11 @@
   }, [startMultiSelect, stopMultiSelect, isSelectionEnabled, hasSelectedBlock]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-selection-observer.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-selection-observer.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -42760,6 +45542,15 @@
   if (focusOffset === focusNode.childNodes.length) {
     return focusNode;
   }
+
+  // When the selection is forward (the selection ends with the focus node),
+  // the selection may extend into the next element with an offset of 0. This
+  // may trigger multi selection even though the selection does not visually
+  // end in the next block.
+  if (focusOffset === 0 && (0,external_wp_dom_namespaceObject.isSelectionForward)(selection)) {
+    var _focusNode$previousSi;
+    return (_focusNode$previousSi = focusNode.previousSibling) !== null && _focusNode$previousSi !== void 0 ? _focusNode$previousSi : focusNode.parentElement;
+  }
   return focusNode.childNodes[focusOffset];
 }
 function findDepth(a, b) {
@@ -42927,7 +45718,7 @@
   }, [multiSelect, selectBlock, selectionChange, getBlockParents]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-click-selection.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-click-selection.js
 /**
  * WordPress dependencies
  */
@@ -42980,7 +45771,7 @@
   }, [selectBlock, isSelectionEnabled, getBlockSelectionStart, hasMultiSelection]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-input.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-input.js
 /**
  * WordPress dependencies
  */
@@ -43129,7 +45920,7 @@
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/use-notify-copy.js
+;// ./node_modules/@wordpress/block-editor/build-module/utils/use-notify-copy.js
 /**
  * WordPress dependencies
  */
@@ -43155,28 +45946,36 @@
   } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
   return (0,external_wp_element_namespaceObject.useCallback)((eventType, selectedBlockClientIds) => {
     let notice = '';
-    if (selectedBlockClientIds.length === 1) {
+    if (eventType === 'copyStyles') {
+      notice = (0,external_wp_i18n_namespaceObject.__)('Styles copied to clipboard.');
+    } else if (selectedBlockClientIds.length === 1) {
       const clientId = selectedBlockClientIds[0];
       const title = getBlockType(getBlockName(clientId))?.title;
-      notice = eventType === 'copy' ? (0,external_wp_i18n_namespaceObject.sprintf)(
-      // Translators: Name of the block being copied, e.g. "Paragraph".
-      (0,external_wp_i18n_namespaceObject.__)('Copied "%s" to clipboard.'), title) : (0,external_wp_i18n_namespaceObject.sprintf)(
-      // Translators: Name of the block being cut, e.g. "Paragraph".
-      (0,external_wp_i18n_namespaceObject.__)('Moved "%s" to clipboard.'), title);
-    } else {
-      notice = eventType === 'copy' ? (0,external_wp_i18n_namespaceObject.sprintf)(
+      if (eventType === 'copy') {
+        notice = (0,external_wp_i18n_namespaceObject.sprintf)(
+        // Translators: Name of the block being copied, e.g. "Paragraph".
+        (0,external_wp_i18n_namespaceObject.__)('Copied "%s" to clipboard.'), title);
+      } else {
+        notice = (0,external_wp_i18n_namespaceObject.sprintf)(
+        // Translators: Name of the block being cut, e.g. "Paragraph".
+        (0,external_wp_i18n_namespaceObject.__)('Moved "%s" to clipboard.'), title);
+      }
+    } else if (eventType === 'copy') {
+      notice = (0,external_wp_i18n_namespaceObject.sprintf)(
       // Translators: %d: Number of blocks being copied.
-      (0,external_wp_i18n_namespaceObject._n)('Copied %d block to clipboard.', 'Copied %d blocks to clipboard.', selectedBlockClientIds.length), selectedBlockClientIds.length) : (0,external_wp_i18n_namespaceObject.sprintf)(
-      // Translators: %d: Number of blocks being cut.
+      (0,external_wp_i18n_namespaceObject._n)('Copied %d block to clipboard.', 'Copied %d blocks to clipboard.', selectedBlockClientIds.length), selectedBlockClientIds.length);
+    } else {
+      notice = (0,external_wp_i18n_namespaceObject.sprintf)(
+      // Translators: %d: Number of blocks being moved.
       (0,external_wp_i18n_namespaceObject._n)('Moved %d block to clipboard.', 'Moved %d blocks to clipboard.', selectedBlockClientIds.length), selectedBlockClientIds.length);
     }
     createSuccessNotice(notice, {
       type: 'snackbar'
     });
-  }, []);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/pasting.js
+  }, [createSuccessNotice, getBlockName, getBlockType]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/pasting.js
 /**
  * WordPress dependencies
  */
@@ -43227,22 +46026,14 @@
 }) {
   let plainText = '';
   let html = '';
-
-  // IE11 only supports `Text` as an argument for `getData` and will
-  // otherwise throw an invalid argument error, so we try the standard
-  // arguments first, then fallback to `Text` if they fail.
   try {
     plainText = clipboardData.getData('text/plain');
     html = clipboardData.getData('text/html');
-  } catch (error1) {
-    try {
-      html = clipboardData.getData('Text');
-    } catch (error2) {
-      // Some browsers like UC Browser paste plain text by default and
-      // don't support clipboardData at all, so allow default
-      // behaviour.
-      return;
-    }
+  } catch (error) {
+    // Some browsers like UC Browser paste plain text by default and
+    // don't support clipboardData at all, so allow default
+    // behaviour.
+    return;
   }
 
   // Remove Windows-specific metadata appended within copied HTML text.
@@ -43305,7 +46096,7 @@
   return false;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/utils.js
 /**
  * WordPress dependencies
  */
@@ -43400,7 +46191,7 @@
   return plainText.replace(/\n\n+/g, '\n\n');
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-clipboard-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/use-clipboard-handler.js
 /**
  * WordPress dependencies
  */
@@ -43598,25 +46389,23 @@
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/writing-flow/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -43633,13 +46422,15 @@
   const hasMultiSelection = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).hasMultiSelection(), []);
   return [before, (0,external_wp_compose_namespaceObject.useMergeRefs)([ref, useClipboardHandler(), useInput(), useDragSelection(), useSelectionObserver(), useClickSelection(), useMultiSelection(), useSelectAll(), useArrowNav(), (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
     node.tabIndex = 0;
+    node.dataset.hasMultiSelection = hasMultiSelection;
     if (!hasMultiSelection) {
-      return;
-    }
-    node.classList.add('has-multi-selection');
+      return () => {
+        delete node.dataset.hasMultiSelection;
+      };
+    }
     node.setAttribute('aria-label', (0,external_wp_i18n_namespaceObject.__)('Multiple selected blocks'));
     return () => {
-      node.classList.remove('has-multi-selection');
+      delete node.dataset.hasMultiSelection;
       node.removeAttribute('aria-label');
     };
   }, [hasMultiSelection])]), after];
@@ -43668,12 +46459,12 @@
  */
 /* harmony default export */ const writing_flow = ((0,external_wp_element_namespaceObject.forwardRef)(WritingFlow));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/iframe/get-compatibility-styles.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/iframe/get-compatibility-styles.js
 let compatibilityStyles = null;
 
 /**
  * Returns a list of stylesheets that target the editor canvas. A stylesheet is
- * considered targetting the editor a canvas if it contains the
+ * considered targeting the editor a canvas if it contains the
  * `editor-styles-wrapper`, `wp-block`, or `wp-block-*` class selectors.
  *
  * Ideally, this hook should be removed in the future and styles should be added
@@ -43708,10 +46499,10 @@
       return accumulator;
     }
 
-    // Don't try to add the reset styles, which were removed as a dependency
-    // from `edit-blocks` for the iframe since we don't need to reset admin
-    // styles.
-    if (ownerNode.id === 'wp-reset-editor-styles-css') {
+    // Don't try to add core WP styles. We are responsible for adding
+    // them. This compatibility layer is only meant to add styles added
+    // by plugins or themes.
+    if (ownerNode.id.startsWith('wp-')) {
       return accumulator;
     }
 
@@ -43762,25 +46553,418 @@
   return compatibilityStyles;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/iframe/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/iframe/use-scale-canvas.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * @typedef {Object} TransitionState
+ * @property {number} scaleValue      Scale of the canvas.
+ * @property {number} frameSize       Size of the frame/offset around the canvas.
+ * @property {number} containerHeight containerHeight of the iframe.
+ * @property {number} scrollTop       ScrollTop of the iframe.
+ * @property {number} scrollHeight    ScrollHeight of the iframe.
+ */
+
+/**
+ * Calculate the scale of the canvas.
+ *
+ * @param {Object} options                     Object of options
+ * @param {number} options.frameSize           Size of the frame/offset around the canvas
+ * @param {number} options.containerWidth      Actual width of the canvas container
+ * @param {number} options.maxContainerWidth   Maximum width of the container to use for the scale calculation. This locks the canvas to a maximum width when zooming out.
+ * @param {number} options.scaleContainerWidth Width the of the container wrapping the canvas container
+ * @return {number} Scale value between 0 and/or equal to 1
+ */
+function calculateScale({
+  frameSize,
+  containerWidth,
+  maxContainerWidth,
+  scaleContainerWidth
+}) {
+  return (Math.min(containerWidth, maxContainerWidth) - frameSize * 2) / scaleContainerWidth;
+}
+
+/**
+ * Compute the next scrollHeight based on the transition states.
+ *
+ * @param {TransitionState} transitionFrom Starting point of the transition
+ * @param {TransitionState} transitionTo   Ending state of the transition
+ * @return {number} Next scrollHeight based on scale and frame value changes.
+ */
+function computeScrollHeightNext(transitionFrom, transitionTo) {
+  const {
+    scaleValue: prevScale,
+    scrollHeight: prevScrollHeight
+  } = transitionFrom;
+  const {
+    frameSize,
+    scaleValue
+  } = transitionTo;
+  return prevScrollHeight * (scaleValue / prevScale) + frameSize * 2;
+}
+
+/**
+ * Compute the next scrollTop position after scaling the iframe content.
+ *
+ * @param {TransitionState} transitionFrom Starting point of the transition
+ * @param {TransitionState} transitionTo   Ending state of the transition
+ * @return {number} Next scrollTop position after scaling the iframe content.
+ */
+function computeScrollTopNext(transitionFrom, transitionTo) {
+  const {
+    containerHeight: prevContainerHeight,
+    frameSize: prevFrameSize,
+    scaleValue: prevScale,
+    scrollTop: prevScrollTop
+  } = transitionFrom;
+  const {
+    containerHeight,
+    frameSize,
+    scaleValue,
+    scrollHeight
+  } = transitionTo;
+  // Step 0: Start with the current scrollTop.
+  let scrollTopNext = prevScrollTop;
+  // Step 1: Undo the effects of the previous scale and frame around the
+  // midpoint of the visible area.
+  scrollTopNext = (scrollTopNext + prevContainerHeight / 2 - prevFrameSize) / prevScale - prevContainerHeight / 2;
+
+  // Step 2: Apply the new scale and frame around the midpoint of the
+  // visible area.
+  scrollTopNext = (scrollTopNext + containerHeight / 2) * scaleValue + frameSize - containerHeight / 2;
+
+  // Step 3: Handle an edge case so that you scroll to the top of the
+  // iframe if the top of the iframe content is visible in the container.
+  // The same edge case for the bottom is skipped because changing content
+  // makes calculating it impossible.
+  scrollTopNext = prevScrollTop <= prevFrameSize ? 0 : scrollTopNext;
+
+  // This is the scrollTop value if you are scrolled to the bottom of the
+  // iframe. We can't just let the browser handle it because we need to
+  // animate the scaling.
+  const maxScrollTop = scrollHeight - containerHeight;
+
+  // Step 4: Clamp the scrollTopNext between the minimum and maximum
+  // possible scrollTop positions. Round the value to avoid subpixel
+  // truncation by the browser which sometimes causes a 1px error.
+  return Math.round(Math.min(Math.max(0, scrollTopNext), Math.max(0, maxScrollTop)));
+}
+
+/**
+ * Generate the keyframes to use for the zoom out animation.
+ *
+ * @param {TransitionState} transitionFrom Starting transition state.
+ * @param {TransitionState} transitionTo   Ending transition state.
+ * @return {Object[]} An array of keyframes to use for the animation.
+ */
+function getAnimationKeyframes(transitionFrom, transitionTo) {
+  const {
+    scaleValue: prevScale,
+    frameSize: prevFrameSize,
+    scrollTop
+  } = transitionFrom;
+  const {
+    scaleValue,
+    frameSize,
+    scrollTop: scrollTopNext
+  } = transitionTo;
+  return [{
+    translate: `0 0`,
+    scale: prevScale,
+    paddingTop: `${prevFrameSize / prevScale}px`,
+    paddingBottom: `${prevFrameSize / prevScale}px`
+  }, {
+    translate: `0 ${scrollTop - scrollTopNext}px`,
+    scale: scaleValue,
+    paddingTop: `${frameSize / scaleValue}px`,
+    paddingBottom: `${frameSize / scaleValue}px`
+  }];
+}
+
+/**
+ * @typedef {Object} ScaleCanvasResult
+ * @property {boolean} isZoomedOut             A boolean indicating if the canvas is zoomed out.
+ * @property {number}  scaleContainerWidth     The width of the container used to calculate the scale.
+ * @property {Object}  contentResizeListener   A resize observer for the content.
+ * @property {Object}  containerResizeListener A resize observer for the container.
+ */
+
+/**
+ * Handles scaling the canvas for the zoom out mode and animating between
+ * the states.
+ *
+ * @param {Object}        options                   Object of options.
+ * @param {number}        options.frameSize         Size of the frame around the content.
+ * @param {Document}      options.iframeDocument    Document of the iframe.
+ * @param {number}        options.maxContainerWidth Max width of the canvas to use as the starting scale point. Defaults to 750.
+ * @param {number|string} options.scale             Scale of the canvas. Can be an decimal between 0 and 1, 1, or 'auto-scaled'.
+ * @return {ScaleCanvasResult} Properties of the result.
+ */
+function useScaleCanvas({
+  frameSize,
+  iframeDocument,
+  maxContainerWidth = 750,
+  scale
+}) {
+  const [contentResizeListener, {
+    height: contentHeight
+  }] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
+  const [containerResizeListener, {
+    width: containerWidth,
+    height: containerHeight
+  }] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
+  const initialContainerWidthRef = (0,external_wp_element_namespaceObject.useRef)(0);
+  const isZoomedOut = scale !== 1;
+  const prefersReducedMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
+  const isAutoScaled = scale === 'auto-scaled';
+  // Track if the animation should start when the useEffect runs.
+  const startAnimationRef = (0,external_wp_element_namespaceObject.useRef)(false);
+  // Track the animation so we know if we have an animation running,
+  // and can cancel it, reverse it, call a finish event, etc.
+  const animationRef = (0,external_wp_element_namespaceObject.useRef)(null);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (!isZoomedOut) {
+      initialContainerWidthRef.current = containerWidth;
+    }
+  }, [containerWidth, isZoomedOut]);
+  const scaleContainerWidth = Math.max(initialContainerWidthRef.current, containerWidth);
+  const scaleValue = isAutoScaled ? calculateScale({
+    frameSize,
+    containerWidth,
+    maxContainerWidth,
+    scaleContainerWidth
+  }) : scale;
+
+  /**
+   * The starting transition state for the zoom out animation.
+   * @type {import('react').RefObject<TransitionState>}
+   */
+  const transitionFromRef = (0,external_wp_element_namespaceObject.useRef)({
+    scaleValue,
+    frameSize,
+    containerHeight: 0,
+    scrollTop: 0,
+    scrollHeight: 0
+  });
+
+  /**
+   * The ending transition state for the zoom out animation.
+   * @type {import('react').RefObject<TransitionState>}
+   */
+  const transitionToRef = (0,external_wp_element_namespaceObject.useRef)({
+    scaleValue,
+    frameSize,
+    containerHeight: 0,
+    scrollTop: 0,
+    scrollHeight: 0
+  });
+
+  /**
+   * Start the zoom out animation. This sets the necessary CSS variables
+   * for animating the canvas and returns the Animation object.
+   *
+   * @return {Animation} The animation object for the zoom out animation.
+   */
+  const startZoomOutAnimation = (0,external_wp_element_namespaceObject.useCallback)(() => {
+    const {
+      scrollTop
+    } = transitionFromRef.current;
+    const {
+      scrollTop: scrollTopNext
+    } = transitionToRef.current;
+    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scroll-top', `${scrollTop}px`);
+    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scroll-top-next', `${scrollTopNext}px`);
+
+    // If the container has a scrolllbar, force a scrollbar to prevent the content from shifting while animating.
+    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-overflow-behavior', transitionFromRef.current.scrollHeight === transitionFromRef.current.containerHeight ? 'auto' : 'scroll');
+    iframeDocument.documentElement.classList.add('zoom-out-animation');
+    return iframeDocument.documentElement.animate(getAnimationKeyframes(transitionFromRef.current, transitionToRef.current), {
+      easing: 'cubic-bezier(0.46, 0.03, 0.52, 0.96)',
+      duration: 400
+    });
+  }, [iframeDocument]);
+
+  /**
+   * Callback when the zoom out animation is finished.
+   * - Cleans up animations refs.
+   * - Adds final CSS vars for scale and frame size to preserve the state.
+   * - Removes the 'zoom-out-animation' class (which has the fixed positioning).
+   * - Sets the final scroll position after the canvas is no longer in fixed position.
+   * - Removes CSS vars related to the animation.
+   * - Sets the transitionFrom to the transitionTo state to be ready for the next animation.
+   */
+  const finishZoomOutAnimation = (0,external_wp_element_namespaceObject.useCallback)(() => {
+    startAnimationRef.current = false;
+    animationRef.current = null;
+
+    // Add our final scale and frame size now that the animation is done.
+    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scale', transitionToRef.current.scaleValue);
+    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-frame-size', `${transitionToRef.current.frameSize}px`);
+    iframeDocument.documentElement.classList.remove('zoom-out-animation');
+
+    // Set the final scroll position that was just animated to.
+    // Disable reason: Eslint isn't smart enough to know that this is a
+    // DOM element. https://github.com/facebook/react/issues/31483
+    // eslint-disable-next-line react-compiler/react-compiler
+    iframeDocument.documentElement.scrollTop = transitionToRef.current.scrollTop;
+    iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-scroll-top');
+    iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-scroll-top-next');
+    iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-overflow-behavior');
+
+    // Update previous values.
+    transitionFromRef.current = transitionToRef.current;
+  }, [iframeDocument]);
+  const previousIsZoomedOut = (0,external_wp_element_namespaceObject.useRef)(false);
+
+  /**
+   * Runs when zoom out mode is toggled, and sets the startAnimation flag
+   * so the animation will start when the next useEffect runs. We _only_
+   * want to animate when the zoom out mode is toggled, not when the scale
+   * changes due to the container resizing.
+   */
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const trigger = iframeDocument && previousIsZoomedOut.current !== isZoomedOut;
+    previousIsZoomedOut.current = isZoomedOut;
+    if (!trigger) {
+      return;
+    }
+    startAnimationRef.current = true;
+    if (!isZoomedOut) {
+      return;
+    }
+    iframeDocument.documentElement.classList.add('is-zoomed-out');
+    return () => {
+      iframeDocument.documentElement.classList.remove('is-zoomed-out');
+    };
+  }, [iframeDocument, isZoomedOut]);
+
+  /**
+   * This handles:
+   * 1. Setting the correct scale and vars of the canvas when zoomed out
+   * 2. If zoom out mode has been toggled, runs the animation of zooming in/out
+   */
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (!iframeDocument) {
+      return;
+    }
+
+    // We need to update the appropriate scale to exit from. If sidebars have been opened since setting the
+    // original scale, we will snap to a much smaller scale due to the scale container immediately changing sizes when exiting.
+    if (isAutoScaled && transitionFromRef.current.scaleValue !== 1) {
+      // We use containerWidth as the divisor, as scaleContainerWidth will always match the containerWidth when
+      // exiting.
+      transitionFromRef.current.scaleValue = calculateScale({
+        frameSize: transitionFromRef.current.frameSize,
+        containerWidth,
+        maxContainerWidth,
+        scaleContainerWidth: containerWidth
+      });
+    }
+    if (scaleValue < 1) {
+      // If we are not going to animate the transition, set the scale and frame size directly.
+      // If we are animating, these values will be set when the animation is finished.
+      // Example: Opening sidebars that reduce the scale of the canvas, but we don't want to
+      // animate the transition.
+      if (!startAnimationRef.current) {
+        iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scale', scaleValue);
+        iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-frame-size', `${frameSize}px`);
+      }
+      iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-content-height', `${contentHeight}px`);
+      iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-inner-height', `${containerHeight}px`);
+      iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-container-width', `${containerWidth}px`);
+      iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scale-container-width', `${scaleContainerWidth}px`);
+    }
+
+    /**
+     * Handle the zoom out animation:
+     *
+     * - Get the current scrollTop position.
+     * - Calculate where the same scroll position is after scaling.
+     * - Apply fixed positioning to the canvas with a transform offset
+     *   to keep the canvas centered.
+     * - Animate the scale and padding to the new scale and frame size.
+     * - After the animation is complete, remove the fixed positioning
+     *   and set the scroll position that keeps everything centered.
+     */
+    if (startAnimationRef.current) {
+      // Don't allow a new transition to start again unless it was started by the zoom out mode changing.
+      startAnimationRef.current = false;
+
+      /**
+       * If we already have an animation running, reverse it.
+       */
+      if (animationRef.current) {
+        animationRef.current.reverse();
+        // Swap the transition to/from refs so that we set the correct values when
+        // finishZoomOutAnimation runs.
+        const tempTransitionFrom = transitionFromRef.current;
+        const tempTransitionTo = transitionToRef.current;
+        transitionFromRef.current = tempTransitionTo;
+        transitionToRef.current = tempTransitionFrom;
+      } else {
+        /**
+         * Start a new zoom animation.
+         */
+
+        // We can't trust the set value from contentHeight, as it was measured
+        // before the zoom out mode was changed. After zoom out mode is changed,
+        // appenders may appear or disappear, so we need to get the height from
+        // the iframe at this point when we're about to animate the zoom out.
+        // The iframe scrollTop, scrollHeight, and clientHeight will all be
+        // the most accurate.
+        transitionFromRef.current.scrollTop = iframeDocument.documentElement.scrollTop;
+        transitionFromRef.current.scrollHeight = iframeDocument.documentElement.scrollHeight;
+        // Use containerHeight, as it's the previous container height before the zoom out animation starts.
+        transitionFromRef.current.containerHeight = containerHeight;
+        transitionToRef.current = {
+          scaleValue,
+          frameSize,
+          containerHeight: iframeDocument.documentElement.clientHeight // use clientHeight to get the actual height of the new container after zoom state changes have rendered, as it will be the most up-to-date.
+        };
+        transitionToRef.current.scrollHeight = computeScrollHeightNext(transitionFromRef.current, transitionToRef.current);
+        transitionToRef.current.scrollTop = computeScrollTopNext(transitionFromRef.current, transitionToRef.current);
+        animationRef.current = startZoomOutAnimation();
+
+        // If the user prefers reduced motion, finish the animation immediately and set the final state.
+        if (prefersReducedMotion) {
+          finishZoomOutAnimation();
+        } else {
+          animationRef.current.onfinish = finishZoomOutAnimation;
+        }
+      }
+    }
+  }, [startZoomOutAnimation, finishZoomOutAnimation, prefersReducedMotion, isAutoScaled, scaleValue, frameSize, iframeDocument, contentHeight, containerWidth, containerHeight, maxContainerWidth, scaleContainerWidth]);
+  return {
+    isZoomedOut,
+    scaleContainerWidth,
+    contentResizeListener,
+    containerResizeListener
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/iframe/index.js
+/* wp:polyfill */
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -43876,24 +47060,18 @@
     const settings = getSettings();
     return {
       resolvedAssets: settings.__unstableResolvedAssets,
-      isPreviewMode: settings.__unstableIsPreviewMode
+      isPreviewMode: settings.isPreviewMode
     };
   }, []);
   const {
     styles = '',
     scripts = ''
   } = resolvedAssets;
+  /** @type {[Document, import('react').Dispatch<Document>]} */
   const [iframeDocument, setIframeDocument] = (0,external_wp_element_namespaceObject.useState)();
-  const prevContainerWidth = (0,external_wp_element_namespaceObject.useRef)();
   const [bodyClasses, setBodyClasses] = (0,external_wp_element_namespaceObject.useState)([]);
   const clearerRef = useBlockSelectionClearer();
   const [before, writingFlowRef, after] = useWritingFlow();
-  const [contentResizeListener, {
-    height: contentHeight
-  }] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
-  const [containerResizeListener, {
-    width: containerWidth
-  }] = (0,external_wp_compose_namespaceObject.useResizeObserver)();
   const setRef = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
     node._load = () => {
       setIframeDocument(node.contentDocument);
@@ -43903,10 +47081,17 @@
     function preventFileDropDefault(event) {
       event.preventDefault();
     }
+    const {
+      ownerDocument
+    } = node;
+
+    // Ideally ALL classes that are added through get_body_class should
+    // be added in the editor too, which we'll somehow have to get from
+    // the server in the future (which will run the PHP filters).
+    setBodyClasses(Array.from(ownerDocument.body.classList).filter(name => name.startsWith('admin-color-') || name.startsWith('post-type-') || name === 'wp-embed-responsive'));
     function onLoad() {
       const {
-        contentDocument,
-        ownerDocument
+        contentDocument
       } = node;
       const {
         documentElement
@@ -43914,11 +47099,6 @@
       iFrameDocument = contentDocument;
       documentElement.classList.add('block-editor-iframe__html');
       clearerRef(documentElement);
-
-      // Ideally ALL classes that are added through get_body_class should
-      // be added in the editor too, which we'll somehow have to get from
-      // the server in the future (which will run the PHP filters).
-      setBodyClasses(Array.from(ownerDocument.body.classList).filter(name => name.startsWith('admin-color-') || name.startsWith('post-type-') || name === 'wp-embed-responsive'));
       contentDocument.dir = ownerDocument.dir;
       for (const compatStyle of getCompatibilityStyles()) {
         if (contentDocument.getElementById(compatStyle.id)) {
@@ -43932,6 +47112,21 @@
       }
       iFrameDocument.addEventListener('dragover', preventFileDropDefault, false);
       iFrameDocument.addEventListener('drop', preventFileDropDefault, false);
+      // Prevent clicks on links from navigating away. Note that links
+      // inside `contenteditable` are already disabled by the browser, so
+      // this is for links in blocks outside of `contenteditable`.
+      iFrameDocument.addEventListener('click', event => {
+        if (event.target.tagName === 'A') {
+          event.preventDefault();
+
+          // Appending a hash to the current URL will not reload the
+          // page. This is useful for e.g. footnotes.
+          const href = event.target.getAttribute('href');
+          if (href?.startsWith('#')) {
+            iFrameDocument.defaultView.location.hash = href.slice(1);
+          }
+        }
+      });
     }
     node.addEventListener('load', onLoad);
     return () => {
@@ -43941,44 +47136,20 @@
       iFrameDocument?.removeEventListener('drop', preventFileDropDefault);
     };
   }, []);
-  const [iframeWindowInnerHeight, setIframeWindowInnerHeight] = (0,external_wp_element_namespaceObject.useState)();
-  const iframeResizeRef = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    const nodeWindow = node.ownerDocument.defaultView;
-    setIframeWindowInnerHeight(nodeWindow.innerHeight);
-    const onResize = () => {
-      setIframeWindowInnerHeight(nodeWindow.innerHeight);
-    };
-    nodeWindow.addEventListener('resize', onResize);
-    return () => {
-      nodeWindow.removeEventListener('resize', onResize);
-    };
-  }, []);
-  const [windowInnerWidth, setWindowInnerWidth] = (0,external_wp_element_namespaceObject.useState)();
-  const windowResizeRef = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    const nodeWindow = node.ownerDocument.defaultView;
-    setWindowInnerWidth(nodeWindow.innerWidth);
-    const onResize = () => {
-      setWindowInnerWidth(nodeWindow.innerWidth);
-    };
-    nodeWindow.addEventListener('resize', onResize);
-    return () => {
-      nodeWindow.removeEventListener('resize', onResize);
-    };
-  }, []);
-  const isZoomedOut = scale !== 1;
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!isZoomedOut) {
-      prevContainerWidth.current = containerWidth;
-    }
-  }, [containerWidth, isZoomedOut]);
+  const {
+    contentResizeListener,
+    containerResizeListener,
+    isZoomedOut,
+    scaleContainerWidth
+  } = useScaleCanvas({
+    scale,
+    frameSize: parseInt(frameSize),
+    iframeDocument
+  });
   const disabledRef = (0,external_wp_compose_namespaceObject.useDisabled)({
     isDisabled: !readonly
   });
-  const bodyRef = (0,external_wp_compose_namespaceObject.useMergeRefs)([useBubbleEvents(iframeDocument), contentRef, clearerRef, writingFlowRef, disabledRef,
-  // Avoid resize listeners when not needed, these will trigger
-  // unnecessary re-renders when animating the iframe width, or when
-  // expanding preview iframes.
-  isZoomedOut ? iframeResizeRef : null]);
+  const bodyRef = (0,external_wp_compose_namespaceObject.useMergeRefs)([useBubbleEvents(iframeDocument), contentRef, clearerRef, writingFlowRef, disabledRef]);
 
   // Correct doctype is required to enable rendering in standards
   // mode. Also preload the styles to avoid a flash of unstyled
@@ -43987,6 +47158,7 @@
 <html>
 	<head>
 		<meta charset="utf-8">
+		<base href="${window.location.origin}">
 		<script>window.frameElement._load()</script>
 		<style>
 			html{
@@ -44015,28 +47187,6 @@
     return [_src, () => URL.revokeObjectURL(_src)];
   }, [html]);
   (0,external_wp_element_namespaceObject.useEffect)(() => cleanup, [cleanup]);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!iframeDocument || !isZoomedOut) {
-      return;
-    }
-    iframeDocument.documentElement.classList.add('is-zoomed-out');
-    const maxWidth = 800;
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-scale', scale === 'default' ? Math.min(containerWidth, maxWidth) / prevContainerWidth.current : scale);
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-frame-size', typeof frameSize === 'number' ? `${frameSize}px` : frameSize);
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-content-height', `${contentHeight}px`);
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-inner-height', `${iframeWindowInnerHeight}px`);
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-container-width', `${containerWidth}px`);
-    iframeDocument.documentElement.style.setProperty('--wp-block-editor-iframe-zoom-out-prev-container-width', `${prevContainerWidth.current}px`);
-    return () => {
-      iframeDocument.documentElement.classList.remove('is-zoomed-out');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-scale');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-frame-size');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-content-height');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-inner-height');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-container-width');
-      iframeDocument.documentElement.style.removeProperty('--wp-block-editor-iframe-zoom-out-prev-container-width');
-    };
-  }, [scale, frameSize, iframeDocument, iframeWindowInnerHeight, contentHeight, containerWidth, windowInnerWidth, isZoomedOut]);
 
   // Make sure to not render the before and after focusable div elements in view
   // mode. They're only needed to capture focus in edit mode.
@@ -44045,10 +47195,9 @@
     children: [shouldRenderFocusCaptureElements && before, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("iframe", {
       ...props,
       style: {
-        border: 0,
         ...props.style,
         height: props.style?.height,
-        transition: 'all .3s'
+        border: 0
       },
       ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([ref, setRef]),
       tabIndex: tabIndex
@@ -44085,7 +47234,7 @@
       },
       children: iframeDocument && (0,external_wp_element_namespaceObject.createPortal)(
       /*#__PURE__*/
-      // We want to prevent React events from bubbling throught the iframe
+      // We want to prevent React events from bubbling through the iframe
       // we bubble these manually.
       /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */
       (0,external_ReactJSXRuntime_namespaceObject.jsxs)("body", {
@@ -44100,12 +47249,10 @@
   });
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "block-editor-iframe__container",
-    ref: windowResizeRef,
     children: [containerResizeListener, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: dist_clsx('block-editor-iframe__scale-container', isZoomedOut && 'is-zoomed-out'),
       style: {
-        '--wp-block-editor-iframe-zoom-out-container-width': isZoomedOut && `${containerWidth}px`,
-        '--wp-block-editor-iframe-zoom-out-prev-container-width': isZoomedOut && `${prevContainerWidth.current}px`
+        '--wp-block-editor-iframe-zoom-out-scale-container-width': isZoomedOut && `${scaleContainerWidth}px`
       },
       children: iframe
     })]
@@ -44129,75 +47276,538 @@
 }
 /* harmony default export */ const iframe = ((0,external_wp_element_namespaceObject.forwardRef)(IframeIfReady));
 
-// EXTERNAL MODULE: ./node_modules/postcss/lib/postcss.js
-var postcss = __webpack_require__(4529);
-;// CONCATENATED MODULE: ./node_modules/postcss/lib/postcss.mjs
-
-
-/* harmony default export */ const lib_postcss = (postcss);
-
-const stringify = postcss.stringify
-const fromJSON = postcss.fromJSON
-const postcss_plugin = postcss.plugin
-const parse = postcss.parse
-const list = postcss.list
-
-const postcss_document = postcss.document
-const comment = postcss.comment
-const atRule = postcss.atRule
-const rule = postcss.rule
-const decl = postcss.decl
-const root = postcss.root
-
-const CssSyntaxError = postcss.CssSyntaxError
-const Declaration = postcss.Declaration
-const Container = postcss.Container
-const Processor = postcss.Processor
-const Document = postcss.Document
-const Comment = postcss.Comment
-const postcss_Warning = postcss.Warning
-const AtRule = postcss.AtRule
-const Result = postcss.Result
-const Input = postcss.Input
-const Rule = postcss.Rule
-const Root = postcss.Root
-const Node = postcss.Node
-
-// EXTERNAL MODULE: ./node_modules/postcss-prefixwrap/build/index.js
-var build = __webpack_require__(8036);
-var build_default = /*#__PURE__*/__webpack_require__.n(build);
+;// ./node_modules/parsel-js/dist/parsel.js
+const TOKENS = {
+    attribute: /\[\s*(?:(?<namespace>\*|[-\w\P{ASCII}]*)\|)?(?<name>[-\w\P{ASCII}]+)\s*(?:(?<operator>\W?=)\s*(?<value>.+?)\s*(\s(?<caseSensitive>[iIsS]))?\s*)?\]/gu,
+    id: /#(?<name>[-\w\P{ASCII}]+)/gu,
+    class: /\.(?<name>[-\w\P{ASCII}]+)/gu,
+    comma: /\s*,\s*/g,
+    combinator: /\s*[\s>+~]\s*/g,
+    'pseudo-element': /::(?<name>[-\w\P{ASCII}]+)(?:\((?<argument>¶*)\))?/gu,
+    'pseudo-class': /:(?<name>[-\w\P{ASCII}]+)(?:\((?<argument>¶*)\))?/gu,
+    universal: /(?:(?<namespace>\*|[-\w\P{ASCII}]*)\|)?\*/gu,
+    type: /(?:(?<namespace>\*|[-\w\P{ASCII}]*)\|)?(?<name>[-\w\P{ASCII}]+)/gu, // this must be last
+};
+const TRIM_TOKENS = new Set(['combinator', 'comma']);
+const RECURSIVE_PSEUDO_CLASSES = new Set([
+    'not',
+    'is',
+    'where',
+    'has',
+    'matches',
+    '-moz-any',
+    '-webkit-any',
+    'nth-child',
+    'nth-last-child',
+]);
+const nthChildRegExp = /(?<index>[\dn+-]+)\s+of\s+(?<subtree>.+)/;
+const RECURSIVE_PSEUDO_CLASSES_ARGS = {
+    'nth-child': nthChildRegExp,
+    'nth-last-child': nthChildRegExp,
+};
+const getArgumentPatternByType = (type) => {
+    switch (type) {
+        case 'pseudo-element':
+        case 'pseudo-class':
+            return new RegExp(TOKENS[type].source.replace('(?<argument>¶*)', '(?<argument>.*)'), 'gu');
+        default:
+            return TOKENS[type];
+    }
+};
+function gobbleParens(text, offset) {
+    let nesting = 0;
+    let result = '';
+    for (; offset < text.length; offset++) {
+        const char = text[offset];
+        switch (char) {
+            case '(':
+                ++nesting;
+                break;
+            case ')':
+                --nesting;
+                break;
+        }
+        result += char;
+        if (nesting === 0) {
+            return result;
+        }
+    }
+    return result;
+}
+function tokenizeBy(text, grammar = TOKENS) {
+    if (!text) {
+        return [];
+    }
+    const tokens = [text];
+    for (const [type, pattern] of Object.entries(grammar)) {
+        for (let i = 0; i < tokens.length; i++) {
+            const token = tokens[i];
+            if (typeof token !== 'string') {
+                continue;
+            }
+            pattern.lastIndex = 0;
+            const match = pattern.exec(token);
+            if (!match) {
+                continue;
+            }
+            const from = match.index - 1;
+            const args = [];
+            const content = match[0];
+            const before = token.slice(0, from + 1);
+            if (before) {
+                args.push(before);
+            }
+            args.push({
+                ...match.groups,
+                type,
+                content,
+            });
+            const after = token.slice(from + content.length + 1);
+            if (after) {
+                args.push(after);
+            }
+            tokens.splice(i, 1, ...args);
+        }
+    }
+    let offset = 0;
+    for (const token of tokens) {
+        switch (typeof token) {
+            case 'string':
+                throw new Error(`Unexpected sequence ${token} found at index ${offset}`);
+            case 'object':
+                offset += token.content.length;
+                token.pos = [offset - token.content.length, offset];
+                if (TRIM_TOKENS.has(token.type)) {
+                    token.content = token.content.trim() || ' ';
+                }
+                break;
+        }
+    }
+    return tokens;
+}
+const STRING_PATTERN = /(['"])([^\\\n]+?)\1/g;
+const ESCAPE_PATTERN = /\\./g;
+function parsel_tokenize(selector, grammar = TOKENS) {
+    // Prevent leading/trailing whitespaces from being interpreted as combinators
+    selector = selector.trim();
+    if (selector === '') {
+        return [];
+    }
+    const replacements = [];
+    // Replace escapes with placeholders.
+    selector = selector.replace(ESCAPE_PATTERN, (value, offset) => {
+        replacements.push({ value, offset });
+        return '\uE000'.repeat(value.length);
+    });
+    // Replace strings with placeholders.
+    selector = selector.replace(STRING_PATTERN, (value, quote, content, offset) => {
+        replacements.push({ value, offset });
+        return `${quote}${'\uE001'.repeat(content.length)}${quote}`;
+    });
+    // Replace parentheses with placeholders.
+    {
+        let pos = 0;
+        let offset;
+        while ((offset = selector.indexOf('(', pos)) > -1) {
+            const value = gobbleParens(selector, offset);
+            replacements.push({ value, offset });
+            selector = `${selector.substring(0, offset)}(${'¶'.repeat(value.length - 2)})${selector.substring(offset + value.length)}`;
+            pos = offset + value.length;
+        }
+    }
+    // Now we have no nested structures and we can parse with regexes
+    const tokens = tokenizeBy(selector, grammar);
+    // Replace placeholders in reverse order.
+    const changedTokens = new Set();
+    for (const replacement of replacements.reverse()) {
+        for (const token of tokens) {
+            const { offset, value } = replacement;
+            if (!(token.pos[0] <= offset &&
+                offset + value.length <= token.pos[1])) {
+                continue;
+            }
+            const { content } = token;
+            const tokenOffset = offset - token.pos[0];
+            token.content =
+                content.slice(0, tokenOffset) +
+                    value +
+                    content.slice(tokenOffset + value.length);
+            if (token.content !== content) {
+                changedTokens.add(token);
+            }
+        }
+    }
+    // Update changed tokens.
+    for (const token of changedTokens) {
+        const pattern = getArgumentPatternByType(token.type);
+        if (!pattern) {
+            throw new Error(`Unknown token type: ${token.type}`);
+        }
+        pattern.lastIndex = 0;
+        const match = pattern.exec(token.content);
+        if (!match) {
+            throw new Error(`Unable to parse content for ${token.type}: ${token.content}`);
+        }
+        Object.assign(token, match.groups);
+    }
+    return tokens;
+}
+/**
+ *  Convert a flat list of tokens into a tree of complex & compound selectors
+ */
+function nestTokens(tokens, { list = true } = {}) {
+    if (list && tokens.find((t) => t.type === 'comma')) {
+        const selectors = [];
+        const temp = [];
+        for (let i = 0; i < tokens.length; i++) {
+            if (tokens[i].type === 'comma') {
+                if (temp.length === 0) {
+                    throw new Error('Incorrect comma at ' + i);
+                }
+                selectors.push(nestTokens(temp, { list: false }));
+                temp.length = 0;
+            }
+            else {
+                temp.push(tokens[i]);
+            }
+        }
+        if (temp.length === 0) {
+            throw new Error('Trailing comma');
+        }
+        else {
+            selectors.push(nestTokens(temp, { list: false }));
+        }
+        return { type: 'list', list: selectors };
+    }
+    for (let i = tokens.length - 1; i >= 0; i--) {
+        let token = tokens[i];
+        if (token.type === 'combinator') {
+            let left = tokens.slice(0, i);
+            let right = tokens.slice(i + 1);
+            return {
+                type: 'complex',
+                combinator: token.content,
+                left: nestTokens(left),
+                right: nestTokens(right),
+            };
+        }
+    }
+    switch (tokens.length) {
+        case 0:
+            throw new Error('Could not build AST.');
+        case 1:
+            // If we're here, there are no combinators, so it's just a list.
+            return tokens[0];
+        default:
+            return {
+                type: 'compound',
+                list: [...tokens], // clone to avoid pointers messing up the AST
+            };
+    }
+}
+/**
+ * Traverse an AST in depth-first order
+ */
+function* flatten(node, 
+/**
+ * @internal
+ */
+parent) {
+    switch (node.type) {
+        case 'list':
+            for (let child of node.list) {
+                yield* flatten(child, node);
+            }
+            break;
+        case 'complex':
+            yield* flatten(node.left, node);
+            yield* flatten(node.right, node);
+            break;
+        case 'compound':
+            yield* node.list.map((token) => [token, node]);
+            break;
+        default:
+            yield [node, parent];
+    }
+}
+/**
+ * Traverse an AST (or part thereof), in depth-first order
+ */
+function walk(node, visit, 
+/**
+ * @internal
+ */
+parent) {
+    if (!node) {
+        return;
+    }
+    for (const [token, ast] of flatten(node, parent)) {
+        visit(token, ast);
+    }
+}
+/**
+ * Parse a CSS selector
+ *
+ * @param selector - The selector to parse
+ * @param options.recursive - Whether to parse the arguments of pseudo-classes like :is(), :has() etc. Defaults to true.
+ * @param options.list - Whether this can be a selector list (A, B, C etc). Defaults to true.
+ */
+function parse(selector, { recursive = true, list = true } = {}) {
+    const tokens = parsel_tokenize(selector);
+    if (!tokens) {
+        return;
+    }
+    const ast = nestTokens(tokens, { list });
+    if (!recursive) {
+        return ast;
+    }
+    for (const [token] of flatten(ast)) {
+        if (token.type !== 'pseudo-class' || !token.argument) {
+            continue;
+        }
+        if (!RECURSIVE_PSEUDO_CLASSES.has(token.name)) {
+            continue;
+        }
+        let argument = token.argument;
+        const childArg = RECURSIVE_PSEUDO_CLASSES_ARGS[token.name];
+        if (childArg) {
+            const match = childArg.exec(argument);
+            if (!match) {
+                continue;
+            }
+            Object.assign(token, match.groups);
+            argument = match.groups['subtree'];
+        }
+        if (!argument) {
+            continue;
+        }
+        Object.assign(token, {
+            subtree: parse(argument, {
+                recursive: true,
+                list: true,
+            }),
+        });
+    }
+    return ast;
+}
+/**
+ * Converts the given list or (sub)tree to a string.
+ */
+function parsel_stringify(listOrNode) {
+    let tokens;
+    if (Array.isArray(listOrNode)) {
+        tokens = listOrNode;
+    }
+    else {
+        tokens = [...flatten(listOrNode)].map(([token]) => token);
+    }
+    return tokens.map(token => token.content).join('');
+}
+/**
+ * To convert the specificity array to a number
+ */
+function specificityToNumber(specificity, base) {
+    base = base || Math.max(...specificity) + 1;
+    return (specificity[0] * (base << 1) + specificity[1] * base + specificity[2]);
+}
+/**
+ * Calculate specificity of a selector.
+ *
+ * If the selector is a list, the max specificity is returned.
+ */
+function specificity(selector) {
+    let ast = selector;
+    if (typeof ast === 'string') {
+        ast = parse(ast, { recursive: true });
+    }
+    if (!ast) {
+        return [];
+    }
+    if (ast.type === 'list' && 'list' in ast) {
+        let base = 10;
+        const specificities = ast.list.map((ast) => {
+            const sp = specificity(ast);
+            base = Math.max(base, ...specificity(ast));
+            return sp;
+        });
+        const numbers = specificities.map((ast) => specificityToNumber(ast, base));
+        return specificities[numbers.indexOf(Math.max(...numbers))];
+    }
+    const ret = [0, 0, 0];
+    for (const [token] of flatten(ast)) {
+        switch (token.type) {
+            case 'id':
+                ret[0]++;
+                break;
+            case 'class':
+            case 'attribute':
+                ret[1]++;
+                break;
+            case 'pseudo-element':
+            case 'type':
+                ret[2]++;
+                break;
+            case 'pseudo-class':
+                if (token.name === 'where') {
+                    break;
+                }
+                if (!RECURSIVE_PSEUDO_CLASSES.has(token.name) ||
+                    !token.subtree) {
+                    ret[1]++;
+                    break;
+                }
+                const sub = specificity(token.subtree);
+                sub.forEach((s, i) => (ret[i] += s));
+                // :nth-child() & :nth-last-child() add (0, 1, 0) to the specificity of their most complex selector
+                if (token.name === 'nth-child' ||
+                    token.name === 'nth-last-child') {
+                    ret[1]++;
+                }
+        }
+    }
+    return ret;
+}
+
+
+
+// EXTERNAL MODULE: ./node_modules/postcss/lib/processor.js
+var processor = __webpack_require__(9656);
+var processor_default = /*#__PURE__*/__webpack_require__.n(processor);
+// EXTERNAL MODULE: ./node_modules/postcss/lib/css-syntax-error.js
+var css_syntax_error = __webpack_require__(356);
+var css_syntax_error_default = /*#__PURE__*/__webpack_require__.n(css_syntax_error);
+// EXTERNAL MODULE: ./node_modules/postcss-prefix-selector/index.js
+var postcss_prefix_selector = __webpack_require__(1443);
+var postcss_prefix_selector_default = /*#__PURE__*/__webpack_require__.n(postcss_prefix_selector);
 // EXTERNAL MODULE: ./node_modules/postcss-urlrebase/index.js
 var postcss_urlrebase = __webpack_require__(5404);
 var postcss_urlrebase_default = /*#__PURE__*/__webpack_require__.n(postcss_urlrebase);
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/index.js
-/**
- * External dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/utils/transform-styles/index.js
+/**
+ * External dependencies
+ */
+
+
 
 
 
 const cacheByWrapperSelector = new Map();
+const ROOT_SELECTOR_TOKENS = [{
+  type: 'type',
+  content: 'body'
+}, {
+  type: 'type',
+  content: 'html'
+}, {
+  type: 'pseudo-class',
+  content: ':root'
+}, {
+  type: 'pseudo-class',
+  content: ':where(body)'
+}, {
+  type: 'pseudo-class',
+  content: ':where(:root)'
+}, {
+  type: 'pseudo-class',
+  content: ':where(html)'
+}];
+
+/**
+ * Prefixes root selectors in a way that ensures consistent specificity.
+ * This requires special handling, since prefixing a classname before
+ * html, body, or :root will generally result in an invalid selector.
+ *
+ * Some libraries will simply replace the root selector with the prefix
+ * instead, but this results in inconsistent specificity.
+ *
+ * This function instead inserts the prefix after the root tags but before
+ * any other part of the selector. This results in consistent specificity:
+ * - If a `:where()` selector is used for the prefix, all selectors output
+ *   by `transformStyles` will have no specificity increase.
+ * - If a classname, id, or something else is used as the prefix, all selectors
+ *   will have the same specificity bump when transformed.
+ *
+ * @param {string} prefix   The prefix.
+ * @param {string} selector The selector.
+ *
+ * @return {string} The prefixed root selector.
+ */
+function prefixRootSelector(prefix, selector) {
+  // Use a tokenizer, since regular expressions are unreliable.
+  const tokenized = parsel_tokenize(selector);
+
+  // Find the last token that contains a root selector by walking back
+  // through the tokens.
+  const lastRootIndex = tokenized.findLastIndex(({
+    content,
+    type
+  }) => {
+    return ROOT_SELECTOR_TOKENS.some(rootSelector => content === rootSelector.content && type === rootSelector.type);
+  });
+
+  // Walk forwards to find the combinator after the last root.
+  // This is where the root ends and the rest of the selector begins,
+  // and the index to insert before.
+  // Doing it this way takes into account that a root selector like
+  // 'body' may have additional id/class/pseudo-class/attribute-selector
+  // parts chained to it, which is difficult to quantify using a regex.
+  let insertionPoint = -1;
+  for (let i = lastRootIndex + 1; i < tokenized.length; i++) {
+    if (tokenized[i].type === 'combinator') {
+      insertionPoint = i;
+      break;
+    }
+  }
+
+  // Tokenize and insert the prefix with a ' ' combinator before it.
+  const tokenizedPrefix = parsel_tokenize(prefix);
+  tokenized.splice(
+  // Insert at the insertion point, or the end.
+  insertionPoint === -1 ? tokenized.length : insertionPoint, 0, {
+    type: 'combinator',
+    content: ' '
+  }, ...tokenizedPrefix);
+  return parsel_stringify(tokenized);
+}
 function transformStyle({
   css,
   ignoredSelectors = [],
   baseURL
-}, wrapperSelector = '') {
-  // When there is no wrapper selector or base URL, there is no need
+}, wrapperSelector = '', transformOptions) {
+  // When there is no wrapper selector and no base URL, there is no need
   // to transform the CSS. This is most cases because in the default
   // iframed editor, no wrapping is needed, and not many styles
   // provide a base URL.
   if (!wrapperSelector && !baseURL) {
     return css;
   }
-  const postcssFriendlyCSS = css.replace(/:root :where\(body\)/g, 'body').replace(/:where\(body\)/g, 'body');
   try {
-    return lib_postcss([wrapperSelector && build_default()(wrapperSelector, {
-      ignoredSelectors: [...ignoredSelectors, wrapperSelector]
+    var _transformOptions$ign;
+    const excludedSelectors = [...ignoredSelectors, ...((_transformOptions$ign = transformOptions?.ignoredSelectors) !== null && _transformOptions$ign !== void 0 ? _transformOptions$ign : []), wrapperSelector];
+    return new (processor_default())([wrapperSelector && postcss_prefix_selector_default()({
+      prefix: wrapperSelector,
+      transform(prefix, selector, prefixedSelector) {
+        // For backwards compatibility, don't use the `exclude` option
+        // of postcss-prefix-selector, instead handle it here to match
+        // the behavior of the old library (postcss-prefix-wrap) that
+        // `transformStyle` previously used.
+        if (excludedSelectors.some(excludedSelector => excludedSelector instanceof RegExp ? selector.match(excludedSelector) : selector.includes(excludedSelector))) {
+          return selector;
+        }
+        const hasRootSelector = ROOT_SELECTOR_TOKENS.some(rootSelector => selector.startsWith(rootSelector.content));
+
+        // Reorganize root selectors such that the root part comes before the prefix,
+        // but the prefix still comes before the remaining part of the selector.
+        if (hasRootSelector) {
+          return prefixRootSelector(prefix, selector);
+        }
+        return prefixedSelector;
+      }
     }), baseURL && postcss_urlrebase_default()({
       rootUrl: baseURL
-    })].filter(Boolean)).process(postcssFriendlyCSS, {}).css; // use sync PostCSS API
+    })].filter(Boolean)).process(css, {}).css; // use sync PostCSS API
   } catch (error) {
-    if (error instanceof CssSyntaxError) {
+    if (error instanceof (css_syntax_error_default())) {
       // eslint-disable-next-line no-console
       console.warn('wp.blockEditor.transformStyles Failed to transform CSS.', error.message + '\n' + error.showSourceCode(false));
     } else {
@@ -44209,18 +47819,26 @@
 }
 
 /**
+ * @typedef {Object} EditorStyle
+ * @property {string}    css              the CSS block(s), as a single string.
+ * @property {?string}   baseURL          the base URL to be used as the reference when rewriting urls.
+ * @property {?string[]} ignoredSelectors the selectors not to wrap.
+ */
+
+/**
+ * @typedef {Object} TransformOptions
+ * @property {?string[]} ignoredSelectors the selectors not to wrap.
+ */
+
+/**
  * Applies a series of CSS rule transforms to wrap selectors inside a given class and/or rewrite URLs depending on the parameters passed.
  *
- * @typedef {Object} EditorStyle
- * @property {string}        css              the CSS block(s), as a single string.
- * @property {?string}       baseURL          the base URL to be used as the reference when rewritting urls.
- * @property {?string[]}     ignoredSelectors the selectors not to wrap.
- *
- * @param    {EditorStyle[]} styles           CSS rules.
- * @param    {string}        wrapperSelector  Wrapper selector.
+ * @param {EditorStyle[]}    styles           CSS rules.
+ * @param {string}           wrapperSelector  Wrapper selector.
+ * @param {TransformOptions} transformOptions Additional options for style transformation.
  * @return {Array} converted rules.
  */
-const transform_styles_transformStyles = (styles, wrapperSelector = '') => {
+const transform_styles_transformStyles = (styles, wrapperSelector = '', transformOptions) => {
   let cache = cacheByWrapperSelector.get(wrapperSelector);
   if (!cache) {
     cache = new WeakMap();
@@ -44229,7 +47847,7 @@
   return styles.map(style => {
     let css = cache.get(style);
     if (!css) {
-      css = transformStyle(style, wrapperSelector);
+      css = transformStyle(style, wrapperSelector, transformOptions);
       cache.set(style, css);
     }
     return css;
@@ -44237,26 +47855,24 @@
 };
 /* harmony default export */ const transform_styles = (transform_styles_transformStyles);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/editor-styles/index.js
-/**
- * External dependencies
- */
-
-
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/editor-styles/index.js
+/**
+ * External dependencies
+ */
+
+
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -44299,7 +47915,8 @@
 }
 function EditorStyles({
   styles,
-  scope
+  scope,
+  transformOptions
 }) {
   const overrides = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getStyleOverrides(), []);
   const [transformedStyles, transformedSvgs] = (0,external_wp_element_namespaceObject.useMemo)(() => {
@@ -44318,8 +47935,8 @@
         _styles[index] = overrideWithId;
       }
     }
-    return [transform_styles(_styles.filter(style => style?.css), scope), _styles.filter(style => style.__unstableType === 'svgs').map(style => style.assets).join('')];
-  }, [styles, overrides, scope]);
+    return [transform_styles(_styles.filter(style => style?.css), scope, transformOptions), _styles.filter(style => style.__unstableType === 'svgs').map(style => style.assets).join('')];
+  }, [styles, overrides, scope, transformOptions]);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("style", {
       ref: useDarkThemeBodyClassName(transformedStyles, scope)
@@ -44345,7 +47962,7 @@
 }
 /* harmony default export */ const editor_styles = ((0,external_wp_element_namespaceObject.memo)(EditorStyles));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-preview/auto.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-preview/auto.js
 /**
  * WordPress dependencies
  */
@@ -44364,9 +47981,7 @@
 
 // This is used to avoid rendering the block list if the sizes change.
 
-
-
-let MemoizedBlockList;
+const MemoizedBlockList = (0,external_wp_element_namespaceObject.memo)(BlockList);
 const MAX_HEIGHT = 2000;
 const EMPTY_ADDITIONAL_STYLES = [];
 function ScaledBlockPreview({
@@ -44400,9 +48015,6 @@
     }
     return styles;
   }, [styles, additionalStyles]);
-
-  // Initialize on render instead of module top level, to avoid circular dependency issues.
-  MemoizedBlockList = MemoizedBlockList || (0,external_wp_element_namespaceObject.memo)(BlockList);
   const scale = containerWidth / viewportWidth;
   const aspectRatio = contentHeight ? containerWidth / (contentHeight * scale) : 0;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Disabled, {
@@ -44475,7 +48087,54 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-preview/index.js
+;// external ["wp","priorityQueue"]
+const external_wp_priorityQueue_namespaceObject = window["wp"]["priorityQueue"];
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-preview/async.js
+/**
+ * WordPress dependencies
+ */
+
+
+const blockPreviewQueue = (0,external_wp_priorityQueue_namespaceObject.createQueue)();
+
+/**
+ * Renders a component at the next idle time.
+ * @param {*} props
+ */
+function Async({
+  children,
+  placeholder
+}) {
+  const [shouldRender, setShouldRender] = (0,external_wp_element_namespaceObject.useState)(false);
+
+  // In the future, we could try to use startTransition here, but currently
+  // react will batch all transitions, which means all previews will be
+  // rendered at the same time.
+  // https://react.dev/reference/react/startTransition#caveats
+  // > If there are multiple ongoing Transitions, React currently batches them
+  // > together. This is a limitation that will likely be removed in a future
+  // > release.
+
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const context = {};
+    blockPreviewQueue.add(context, () => {
+      // Synchronously run all renders so it consumes timeRemaining.
+      // See https://github.com/WordPress/gutenberg/pull/48238
+      (0,external_wp_element_namespaceObject.flushSync)(() => {
+        setShouldRender(true);
+      });
+    });
+    return () => {
+      blockPreviewQueue.cancel(context);
+    };
+  }, []);
+  if (!shouldRender) {
+    return placeholder;
+  }
+  return children;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-preview/index.js
 /**
  * External dependencies
  */
@@ -44532,7 +48191,7 @@
     ...originalSettings,
     focusMode: false,
     // Disable "Spotlight mode".
-    __unstableIsPreviewMode: true
+    isPreviewMode: true
   }), [originalSettings]);
   const renderedBlocks = (0,external_wp_element_namespaceObject.useMemo)(() => Array.isArray(blocks) ? blocks : [blocks], [blocks]);
   if (!blocks || blocks.length === 0) {
@@ -44548,6 +48207,8 @@
     })
   });
 }
+const MemoizedBlockPreview = (0,external_wp_element_namespaceObject.memo)(BlockPreview);
+MemoizedBlockPreview.Async = Async;
 
 /**
  * BlockPreview renders a preview of a block or array of blocks.
@@ -44560,7 +48221,7 @@
  *
  * @return {Component} The component to be rendered.
  */
-/* harmony default export */ const block_preview = ((0,external_wp_element_namespaceObject.memo)(BlockPreview));
+/* harmony default export */ const block_preview = (MemoizedBlockPreview);
 
 /**
  * This hook is used to lightly mark an element as a block preview wrapper
@@ -44589,7 +48250,7 @@
     // Clear styles included by the parent settings, as they are already output by the parent's EditorStyles.
     focusMode: false,
     // Disable "Spotlight mode".
-    __unstableIsPreviewMode: true
+    isPreviewMode: true
   }), [originalSettings]);
   const disabledRef = (0,external_wp_compose_namespaceObject.useDisabled)();
   const ref = (0,external_wp_compose_namespaceObject.useMergeRefs)([props.ref, disabledRef]);
@@ -44610,18 +48271,17 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/preview-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/preview-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -44650,6 +48310,12 @@
       innerBlocks: example.innerBlocks
     });
   }, [name, example, initialAttributes]);
+  // Same as height of BlockPreviewPanel.
+  const previewHeight = 144;
+  const sidebarWidth = 280;
+  const viewportWidth = (_example$viewportWidt = example?.viewportWidth) !== null && _example$viewportWidt !== void 0 ? _example$viewportWidt : 500;
+  const scale = sidebarWidth / viewportWidth;
+  const minHeight = scale !== 0 && scale < 1 && previewHeight ? previewHeight / scale : previewHeight;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "block-editor-inserter__preview-container",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
@@ -44658,9 +48324,20 @@
         className: "block-editor-inserter__preview-content",
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview, {
           blocks: blocks,
-          viewportWidth: (_example$viewportWidt = example?.viewportWidth) !== null && _example$viewportWidt !== void 0 ? _example$viewportWidt : 500,
-          additionalStyles: [{
-            css: 'body { padding: 24px; }'
+          viewportWidth: viewportWidth,
+          minHeight: previewHeight,
+          additionalStyles:
+          //We want this CSS to be in sync with the one in BlockPreviewPanel.
+          [{
+            css: `
+										body { 
+											padding: 24px;
+											min-height:${Math.round(minHeight)}px;
+											display:flex;
+											align-items:center;
+										}
+										.is-root-container { width: 100%; }
+									`
           }]
         })
       }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
@@ -44676,31 +48353,23 @@
 }
 /* harmony default export */ const preview_panel = (InserterPreviewPanel);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/item.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const {
-  CompositeItemV2: item_CompositeItem
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/item.js
+/**
+ * WordPress dependencies
+ */
+
+
+
 function InserterListboxItem({
   isFirst,
   as: Component,
   children,
   ...props
 }, ref) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(item_CompositeItem, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
     ref: ref,
     role: "option"
-    // Use the CompositeItem `accessibleWhenDisabled` prop
+    // Use the Composite.Item `accessibleWhenDisabled` prop
     // over Button's `isFocusable`. The latter was shown to
     // cause an issue with tab order in the inserter list.
     ,
@@ -44721,6 +48390,7 @@
         return children(propsWithTabIndex);
       }
       return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         ...propsWithTabIndex,
         children: children
       });
@@ -44729,76 +48399,11 @@
 }
 /* harmony default export */ const inserter_listbox_item = ((0,external_wp_element_namespaceObject.forwardRef)(InserterListboxItem));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/drag-handle.js
-/**
- * WordPress dependencies
- */
-
-
-const dragHandle = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  width: "24",
-  height: "24",
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M8 7h2V5H8v2zm0 6h2v-2H8v2zm0 6h2v-2H8v2zm6-14v2h2V5h-2zm0 8h2v-2h-2v2zm0 6h2v-2h-2v2z"
-  })
-});
-/* harmony default export */ const drag_handle = (dragHandle);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/draggable-chip.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function BlockDraggableChip({
-  count,
-  icon,
-  isPattern,
-  fadeWhenDisabled
-}) {
-  const patternLabel = isPattern && (0,external_wp_i18n_namespaceObject.__)('Pattern');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: "block-editor-block-draggable-chip-wrapper",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-block-draggable-chip",
-      "data-testid": "block-draggable-chip",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-        justify: "center",
-        className: "block-editor-block-draggable-chip__content",
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: icon ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-            icon: icon
-          }) : patternLabel || (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: Number of blocks. */
-          (0,external_wp_i18n_namespaceObject._n)('%d block', '%d blocks', count), count)
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-            icon: drag_handle
-          })
-        }), fadeWhenDisabled && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-          className: "block-editor-block-draggable-chip__disabled",
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-            className: "block-editor-block-draggable-chip__disabled-icon"
-          })
-        })]
-      })
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-draggable-blocks/index.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-draggable-blocks/index.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -44818,10 +48423,6 @@
   children,
   pattern
 }) => {
-  const transferData = {
-    type: 'inserter',
-    blocks
-  };
   const blockTypeIcon = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getBlockType
@@ -44832,15 +48433,35 @@
     startDragging,
     stopDragging
   } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+  const patternBlock = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    return pattern?.type === INSERTER_PATTERN_TYPES.user && pattern?.syncStatus !== 'unsynced' ? [(0,external_wp_blocks_namespaceObject.createBlock)('core/block', {
+      ref: pattern.id
+    })] : undefined;
+  }, [pattern?.type, pattern?.syncStatus, pattern?.id]);
+  if (!isEnabled) {
+    return children({
+      draggable: false,
+      onDragStart: undefined,
+      onDragEnd: undefined
+    });
+  }
+  const draggableBlocks = patternBlock !== null && patternBlock !== void 0 ? patternBlock : blocks;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Draggable, {
     __experimentalTransferDataType: "wp-blocks",
-    transferData: transferData,
+    transferData: {
+      type: 'inserter',
+      blocks: draggableBlocks
+    },
     onDragStart: event => {
       startDragging();
-      const parsedBlocks = pattern?.type === INSERTER_PATTERN_TYPES.user && pattern?.syncStatus !== 'unsynced' ? [(0,external_wp_blocks_namespaceObject.createBlock)('core/block', {
-        ref: pattern.id
-      })] : blocks;
-      event.dataTransfer.setData('text/html', (0,external_wp_blocks_namespaceObject.serialize)(parsedBlocks));
+      for (const block of draggableBlocks) {
+        const type = `wp-block:${block.name}`;
+        // This will fill in the dataTransfer.types array so that
+        // the drop zone can check if the draggable is eligible.
+        // Unfortuantely, on drag start, we don't have access to the
+        // actual data, only the data keys/types.
+        event.dataTransfer.items.add('', type);
+      }
     },
     onDragEnd: () => {
       stopDragging();
@@ -44855,33 +48476,32 @@
       onDraggableEnd
     }) => {
       return children({
-        draggable: isEnabled,
-        onDragStart: isEnabled ? onDraggableStart : undefined,
-        onDragEnd: isEnabled ? onDraggableEnd : undefined
+        draggable: true,
+        onDragStart: onDraggableStart,
+        onDragEnd: onDraggableEnd
       });
     }
   });
 };
 /* harmony default export */ const inserter_draggable_blocks = (InserterDraggableBlocks);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-list-item/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-list-item/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -44895,7 +48515,7 @@
   isDraggable,
   ...props
 }) {
-  const isDragging = (0,external_wp_element_namespaceObject.useRef)(false);
+  const isDraggingRef = (0,external_wp_element_namespaceObject.useRef)(false);
   const itemIconStyle = item.icon ? {
     backgroundColor: item.icon.background,
     color: item.icon.foreground
@@ -44916,14 +48536,14 @@
       }),
       draggable: draggable,
       onDragStart: event => {
-        isDragging.current = true;
+        isDraggingRef.current = true;
         if (onDragStart) {
           onHover(null);
           onDragStart(event);
         }
       },
       onDragEnd: event => {
-        isDragging.current = false;
+        isDraggingRef.current = false;
         if (onDragEnd) {
           onDragEnd(event);
         }
@@ -44948,7 +48568,7 @@
           }
         },
         onMouseEnter: () => {
-          if (isDragging.current) {
+          if (isDraggingRef.current) {
             return;
           }
           onHover(item);
@@ -44975,7 +48595,7 @@
 }
 /* harmony default export */ const inserter_list_item = ((0,external_wp_element_namespaceObject.memo)(InserterListItem));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/group.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/group.js
 /**
  * WordPress dependencies
  */
@@ -45008,23 +48628,15 @@
 }
 /* harmony default export */ const group = ((0,external_wp_element_namespaceObject.forwardRef)(InserterListboxGroup));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/row.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const {
-  CompositeGroupV2: CompositeGroup
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/row.js
+/**
+ * WordPress dependencies
+ */
+
+
+
 function InserterListboxRow(props, ref) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CompositeGroup, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Group, {
     role: "presentation",
     ref: ref,
     ...props
@@ -45032,17 +48644,16 @@
 }
 /* harmony default export */ const inserter_listbox_row = ((0,external_wp_element_namespaceObject.forwardRef)(InserterListboxRow));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-types-list/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-types-list/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -45081,12 +48692,10 @@
 }
 /* harmony default export */ const block_types_list = (BlockTypesList);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/panel.js
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/panel.js
+/**
+ * WordPress dependencies
+ */
 
 
 function InserterPanel({
@@ -45111,74 +48720,128 @@
 }
 /* harmony default export */ const panel = (InserterPanel);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/index.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-const {
-  CompositeV2: inserter_listbox_Composite,
-  useCompositeStoreV2: inserter_listbox_useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-block-types-state.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+/**
+ * Retrieves the block types inserter state.
+ *
+ * @param {string=}  rootClientId Insertion's root client ID.
+ * @param {Function} onInsert     function called when inserter a list of blocks.
+ * @param {boolean}  isQuick
+ * @return {Array} Returns the block types state. (block types, categories, collections, onSelect handler)
+ */
+const useBlockTypesState = (rootClientId, onInsert, isQuick) => {
+  const options = (0,external_wp_element_namespaceObject.useMemo)(() => ({
+    [isFiltered]: !!isQuick
+  }), [isQuick]);
+  const [items] = (0,external_wp_data_namespaceObject.useSelect)(select => [select(store).getInserterItems(rootClientId, options)], [rootClientId, options]);
+  const {
+    getClosestAllowedInsertionPoint
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
+  const {
+    createErrorNotice
+  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
+  const [categories, collections] = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getCategories,
+      getCollections
+    } = select(external_wp_blocks_namespaceObject.store);
+    return [getCategories(), getCollections()];
+  }, []);
+  const onSelectItem = (0,external_wp_element_namespaceObject.useCallback)(({
+    name,
+    initialAttributes,
+    innerBlocks,
+    syncStatus,
+    content
+  }, shouldFocusBlock) => {
+    const destinationClientId = getClosestAllowedInsertionPoint(name, rootClientId);
+    if (destinationClientId === null) {
+      var _getBlockType$title;
+      const title = (_getBlockType$title = (0,external_wp_blocks_namespaceObject.getBlockType)(name)?.title) !== null && _getBlockType$title !== void 0 ? _getBlockType$title : name;
+      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: block pattern title. */
+      (0,external_wp_i18n_namespaceObject.__)('Block "%s" can\'t be inserted.'), title), {
+        type: 'snackbar',
+        id: 'inserter-notice'
+      });
+      return;
+    }
+    const insertedBlock = syncStatus === 'unsynced' ? (0,external_wp_blocks_namespaceObject.parse)(content, {
+      __unstableSkipMigrationLogs: true
+    }) : (0,external_wp_blocks_namespaceObject.createBlock)(name, initialAttributes, (0,external_wp_blocks_namespaceObject.createBlocksFromInnerBlocksTemplate)(innerBlocks));
+    onInsert(insertedBlock, undefined, shouldFocusBlock, destinationClientId);
+  }, [getClosestAllowedInsertionPoint, rootClientId, onInsert, createErrorNotice]);
+  return [items, categories, collections, onSelectItem];
+};
+/* harmony default export */ const use_block_types_state = (useBlockTypesState);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-listbox/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
 function InserterListbox({
   children
 }) {
-  const store = inserter_listbox_useCompositeStore({
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
     focusShift: true,
-    focusWrap: 'horizontal'
-  });
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter_listbox_Composite, {
-    store: store,
+    focusWrap: "horizontal",
     render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {}),
     children: children
   });
 }
 /* harmony default export */ const inserter_listbox = (InserterListbox);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/no-results.js
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/no-results.js
+/**
+ * WordPress dependencies
+ */
 
 
 function InserterNoResults() {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: "block-editor-inserter__no-results",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-      className: "block-editor-inserter__no-results-icon",
-      icon: block_default
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
       children: (0,external_wp_i18n_namespaceObject.__)('No results found.')
-    })]
+    })
   });
 }
 /* harmony default export */ const no_results = (InserterNoResults);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-types-tab.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-types-tab.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -45314,7 +48977,7 @@
     if (item.category === 'reusable') {
       continue;
     }
-    if (rootClientId && item.rootClientId === rootClientId) {
+    if (item.isAllowedInCurrentRoot) {
       itemsForCurrentRoot.push(item);
     } else {
       itemsRemaining.push(item);
@@ -45347,11 +49010,10 @@
 }
 /* harmony default export */ const block_types_tab = ((0,external_wp_element_namespaceObject.forwardRef)(BlockTypesTab));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/pattern-explorer-sidebar.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -45368,6 +49030,7 @@
       label
     }) => {
       return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         label: label,
         className: `${baseClassName}__categories-list__item`,
         isPressed: selectedCategory === name,
@@ -45390,7 +49053,7 @@
       __nextHasNoMarginBottom: true,
       onChange: setSearchValue,
       value: searchValue,
-      label: (0,external_wp_i18n_namespaceObject.__)('Search for patterns'),
+      label: (0,external_wp_i18n_namespaceObject.__)('Search'),
       placeholder: (0,external_wp_i18n_namespaceObject.__)('Search')
     })
   });
@@ -45417,11 +49080,10 @@
 }
 /* harmony default export */ const pattern_explorer_sidebar = (PatternExplorerSidebar);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-patterns-paging/index.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-patterns-paging/index.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -45435,9 +49097,7 @@
     className: "block-editor-patterns__grid-pagination-wrapper",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
       variant: "muted",
-      children:
-      // translators: %s: Total number of patterns.
-      (0,external_wp_i18n_namespaceObject.sprintf)(
+      children: (0,external_wp_i18n_namespaceObject.sprintf)(
       // translators: %s: Total number of patterns.
       (0,external_wp_i18n_namespaceObject._n)('%s item', '%s items', totalItems), totalItems)
     }), numPages > 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
@@ -45454,7 +49114,9 @@
           onClick: () => changePage(1),
           disabled: currentPage === 1,
           "aria-label": (0,external_wp_i18n_namespaceObject.__)('First page'),
-          __experimentalIsFocusable: true,
+          size: "compact",
+          accessibleWhenDisabled: true,
+          className: "block-editor-patterns__grid-pagination-button",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
             children: "\xAB"
           })
@@ -45463,7 +49125,9 @@
           onClick: () => changePage(currentPage - 1),
           disabled: currentPage === 1,
           "aria-label": (0,external_wp_i18n_namespaceObject.__)('Previous page'),
-          __experimentalIsFocusable: true,
+          size: "compact",
+          accessibleWhenDisabled: true,
+          className: "block-editor-patterns__grid-pagination-button",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
             children: "\u2039"
           })
@@ -45471,7 +49135,7 @@
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
         variant: "muted",
         children: (0,external_wp_i18n_namespaceObject.sprintf)(
-        // translators: %1$s: Current page number, %2$s: Total number of pages.
+        // translators: 1: Current page number. 2: Total number of pages.
         (0,external_wp_i18n_namespaceObject._x)('%1$s of %2$s', 'paging'), currentPage, numPages)
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
         expanded: false,
@@ -45482,7 +49146,9 @@
           onClick: () => changePage(currentPage + 1),
           disabled: currentPage === numPages,
           "aria-label": (0,external_wp_i18n_namespaceObject.__)('Next page'),
-          __experimentalIsFocusable: true,
+          size: "compact",
+          accessibleWhenDisabled: true,
+          className: "block-editor-patterns__grid-pagination-button",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
             children: "\u203A"
           })
@@ -45491,8 +49157,9 @@
           onClick: () => changePage(numPages),
           disabled: currentPage === numPages,
           "aria-label": (0,external_wp_i18n_namespaceObject.__)('Last page'),
-          size: "default",
-          __experimentalIsFocusable: true,
+          size: "compact",
+          accessibleWhenDisabled: true,
+          className: "block-editor-patterns__grid-pagination-button",
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
             children: "\xBB"
           })
@@ -45502,38 +49169,30 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-patterns-list/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-const {
-  CompositeV2: block_patterns_list_Composite,
-  CompositeItemV2: block_patterns_list_CompositeItem,
-  useCompositeStoreV2: block_patterns_list_useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-patterns-list/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
 const WithToolTip = ({
   showTooltip,
   title,
@@ -45555,9 +49214,9 @@
   pattern,
   onClick,
   onHover,
-  showTitle = true,
-  showTooltip,
-  category
+  showTitlesAsTooltip,
+  category,
+  isSelected
 }) {
   const [isDragging, setIsDragging] = (0,external_wp_element_namespaceObject.useState)(false);
   const {
@@ -45566,6 +49225,7 @@
   } = pattern;
   const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(BlockPattern);
   const descriptionId = `block-editor-block-patterns-list__item-description-${instanceId}`;
+  const isUserPattern = pattern.type === INSERTER_PATTERN_TYPES.user;
 
   // When we have a selected category and the pattern is draggable, we need to update the
   // pattern's categories in metadata to only contain the selected category, and pass this to
@@ -45608,15 +49268,16 @@
         }
       },
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WithToolTip, {
-        showTooltip: showTooltip && !pattern.type !== INSERTER_PATTERN_TYPES.user,
+        showTooltip: showTitlesAsTooltip && !isUserPattern,
         title: pattern.title,
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_patterns_list_CompositeItem, {
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
           render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
             role: "option",
             "aria-label": pattern.title,
             "aria-describedby": pattern.description ? descriptionId : undefined,
             className: dist_clsx('block-editor-block-patterns-list__item', {
-              'block-editor-block-patterns-list__list-item-synced': pattern.type === INSERTER_PATTERN_TYPES.user && !pattern.syncStatus
+              'block-editor-block-patterns-list__list-item-synced': pattern.type === INSERTER_PATTERN_TYPES.user && !pattern.syncStatus,
+              'is-selected': isSelected
             })
           }),
           id: id,
@@ -45631,19 +49292,22 @@
             onHover?.(pattern);
           },
           onMouseLeave: () => onHover?.(null),
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview, {
-            blocks: blocks,
-            viewportWidth: viewportWidth
-          }), showTitle && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview.Async, {
+            placeholder: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockPatternPlaceholder, {}),
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview, {
+              blocks: blocks,
+              viewportWidth: viewportWidth
+            })
+          }), (!showTitlesAsTooltip || isUserPattern) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
             className: "block-editor-patterns__pattern-details",
             spacing: 2,
-            children: [pattern.type === INSERTER_PATTERN_TYPES.user && !pattern.syncStatus && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+            children: [isUserPattern && !pattern.syncStatus && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
               className: "block-editor-patterns__pattern-icon-wrapper",
               children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
                 className: "block-editor-patterns__pattern-icon",
                 icon: library_symbol
               })
-            }), (!showTooltip || pattern.type === INSERTER_PATTERN_TYPES.user) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
               className: "block-editor-block-patterns-list__item-title",
               children: pattern.title
             })]
@@ -45664,54 +49328,53 @@
 function BlockPatternsList({
   isDraggable,
   blockPatterns,
-  shownPatterns,
   onHover,
   onClickPattern,
   orientation,
   label = (0,external_wp_i18n_namespaceObject.__)('Block patterns'),
   category,
-  showTitle = true,
   showTitlesAsTooltip,
   pagingProps
 }, ref) {
-  const compositeStore = block_patterns_list_useCompositeStore({
-    orientation
-  });
-  const {
-    setActiveId
-  } = compositeStore;
+  const [activeCompositeId, setActiveCompositeId] = (0,external_wp_element_namespaceObject.useState)(undefined);
+  const [activePattern, setActivePattern] = (0,external_wp_element_namespaceObject.useState)(null); // State to track active pattern
+
   (0,external_wp_element_namespaceObject.useEffect)(() => {
-    // We reset the active composite item whenever the
-    // available patterns change, to make sure that
-    // focus is put back to the start.
-    setActiveId(undefined);
-  }, [setActiveId, shownPatterns, blockPatterns]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_patterns_list_Composite, {
-    store: compositeStore,
+    // Reset the active composite item whenever the available patterns change,
+    // to make sure that Composite widget can receive focus correctly when its
+    // composite items change. The first composite item will receive focus.
+    const firstCompositeItemId = blockPatterns[0]?.name;
+    setActiveCompositeId(firstCompositeItemId);
+  }, [blockPatterns]);
+  const handleClickPattern = (pattern, blocks) => {
+    setActivePattern(pattern.name);
+    onClickPattern(pattern, blocks);
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite, {
+    orientation: orientation,
+    activeId: activeCompositeId,
+    setActiveId: setActiveCompositeId,
     role: "listbox",
     className: "block-editor-block-patterns-list",
     "aria-label": label,
     ref: ref,
-    children: [blockPatterns.map(pattern => {
-      const isShown = shownPatterns.includes(pattern);
-      return isShown ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockPattern, {
-        id: pattern.name,
-        pattern: pattern,
-        onClick: onClickPattern,
-        onHover: onHover,
-        isDraggable: isDraggable,
-        showTitle: showTitle,
-        showTooltip: showTitlesAsTooltip,
-        category: category
-      }, pattern.name) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockPatternPlaceholder, {}, pattern.name);
-    }), pagingProps && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Pagination, {
+    children: [blockPatterns.map(pattern => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockPattern, {
+      id: pattern.name,
+      pattern: pattern,
+      onClick: handleClickPattern,
+      onHover: onHover,
+      isDraggable: isDraggable,
+      showTitlesAsTooltip: showTitlesAsTooltip,
+      category: category,
+      isSelected: !!activePattern && activePattern === pattern.name
+    }, pattern.name)), pagingProps && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Pagination, {
       ...pagingProps
     })]
   });
 }
 /* harmony default export */ const block_patterns_list = ((0,external_wp_element_namespaceObject.forwardRef)(BlockPatternsList));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-insertion-point.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-insertion-point.js
 /**
  * WordPress dependencies
  */
@@ -45774,8 +49437,10 @@
 }) {
   const registry = (0,external_wp_data_namespaceObject.useRegistry)();
   const {
-    getSelectedBlock
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+    getSelectedBlock,
+    getClosestAllowedInsertionPoint,
+    isBlockInsertionPointVisible
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
   const {
     destinationRootClientId,
     destinationIndex
@@ -45784,14 +49449,19 @@
       getSelectedBlockClientId,
       getBlockRootClientId,
       getBlockIndex,
-      getBlockOrder
-    } = select(store);
+      getBlockOrder,
+      getInsertionPoint
+    } = unlock(select(store));
     const selectedBlockClientId = getSelectedBlockClientId();
     let _destinationRootClientId = rootClientId;
     let _destinationIndex;
+    const insertionPoint = getInsertionPoint();
     if (insertionIndex !== undefined) {
       // Insert into a specific index.
       _destinationIndex = insertionIndex;
+    } else if (insertionPoint && insertionPoint.hasOwnProperty('index')) {
+      _destinationRootClientId = insertionPoint?.rootClientId ? insertionPoint.rootClientId : rootClientId;
+      _destinationIndex = insertionPoint.index;
     } else if (clientId) {
       // Insert after a specific client ID.
       _destinationIndex = getBlockIndex(clientId);
@@ -45843,34 +49513,39 @@
     }
   }, [isAppender, getSelectedBlock, replaceBlocks, insertBlocks, destinationRootClientId, destinationIndex, onSelect, shouldFocusBlock, selectBlockOnInsert]);
   const onToggleInsertionPoint = (0,external_wp_element_namespaceObject.useCallback)(item => {
-    if (item?.hasOwnProperty('rootClientId')) {
-      showInsertionPoint(item.rootClientId, getIndex({
-        destinationRootClientId,
-        destinationIndex,
-        rootClientId: item.rootClientId,
-        registry
-      }));
+    if (item && !isBlockInsertionPointVisible()) {
+      const allowedDestinationRootClientId = getClosestAllowedInsertionPoint(item.name, destinationRootClientId);
+      if (allowedDestinationRootClientId !== null) {
+        showInsertionPoint(allowedDestinationRootClientId, getIndex({
+          destinationRootClientId,
+          destinationIndex,
+          rootClientId: allowedDestinationRootClientId,
+          registry
+        }));
+      }
     } else {
       hideInsertionPoint();
     }
-  }, [showInsertionPoint, hideInsertionPoint, destinationRootClientId, destinationIndex]);
+  }, [getClosestAllowedInsertionPoint, isBlockInsertionPointVisible, showInsertionPoint, hideInsertionPoint, destinationRootClientId, destinationIndex]);
   return [destinationRootClientId, onInsertBlocks, onToggleInsertionPoint];
 }
 /* harmony default export */ const use_insertion_point = (useInsertionPoint);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-patterns-state.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-patterns-state.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
 
 
 
@@ -45879,30 +49554,37 @@
  *
  * @param {Function} onInsert         function called when inserter a list of blocks.
  * @param {string=}  rootClientId     Insertion's root client ID.
- *
  * @param {string}   selectedCategory The selected pattern category.
+ * @param {boolean}  isQuick          For the quick inserter render only allowed patterns.
+ *
  * @return {Array} Returns the patterns state. (patterns, categories, onSelect handler)
  */
-const usePatternsState = (onInsert, rootClientId, selectedCategory) => {
+const usePatternsState = (onInsert, rootClientId, selectedCategory, isQuick) => {
+  const options = (0,external_wp_element_namespaceObject.useMemo)(() => ({
+    [isFiltered]: !!isQuick
+  }), [isQuick]);
   const {
     patternCategories,
     patterns,
     userPatternCategories
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      __experimentalGetAllowedPatterns,
-      getSettings
-    } = select(store);
+      getSettings,
+      __experimentalGetAllowedPatterns
+    } = unlock(select(store));
     const {
       __experimentalUserPatternCategories,
       __experimentalBlockPatternCategories
     } = getSettings();
     return {
-      patterns: __experimentalGetAllowedPatterns(rootClientId),
+      patterns: __experimentalGetAllowedPatterns(rootClientId, options),
       userPatternCategories: __experimentalUserPatternCategories,
       patternCategories: __experimentalBlockPatternCategories
     };
-  }, [rootClientId]);
+  }, [rootClientId, options]);
+  const {
+    getClosestAllowedInsertionPointForPattern
+  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
   const allCategories = (0,external_wp_element_namespaceObject.useMemo)(() => {
     const categories = [...patternCategories];
     userPatternCategories?.forEach(userCategory => {
@@ -45916,6 +49598,10 @@
     createSuccessNotice
   } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
   const onClickPattern = (0,external_wp_element_namespaceObject.useCallback)((pattern, blocks) => {
+    const destinationRootClientId = isQuick ? rootClientId : getClosestAllowedInsertionPointForPattern(pattern, rootClientId);
+    if (destinationRootClientId === null) {
+      return;
+    }
     const patternBlocks = pattern.type === INSERTER_PATTERN_TYPES.user && pattern.syncStatus !== 'unsynced' ? [(0,external_wp_blocks_namespaceObject.createBlock)('core/block', {
       ref: pattern.id
     })] : blocks;
@@ -45925,18 +49611,277 @@
         clonedBlock.attributes.metadata.categories = [selectedCategory];
       }
       return clonedBlock;
-    }), pattern.name);
-    createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: block pattern title. */
+    }), pattern.name, false, destinationRootClientId);
+    createSuccessNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: block pattern title. */
     (0,external_wp_i18n_namespaceObject.__)('Block pattern "%s" inserted.'), pattern.title), {
       type: 'snackbar',
-      id: 'block-pattern-inserted-notice'
-    });
-  }, [createSuccessNotice, onInsert, selectedCategory]);
+      id: 'inserter-notice'
+    });
+  }, [createSuccessNotice, onInsert, selectedCategory, rootClientId, getClosestAllowedInsertionPointForPattern, isQuick]);
   return [patterns, allCategories, onClickPattern];
 };
 /* harmony default export */ const use_patterns_state = (usePatternsState);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-patterns-paging.js
+// EXTERNAL MODULE: ./node_modules/remove-accents/index.js
+var remove_accents = __webpack_require__(9681);
+var remove_accents_default = /*#__PURE__*/__webpack_require__.n(remove_accents);
+;// ./node_modules/lower-case/dist.es2015/index.js
+/**
+ * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
+ */
+var SUPPORTED_LOCALE = {
+    tr: {
+        regexp: /\u0130|\u0049|\u0049\u0307/g,
+        map: {
+            İ: "\u0069",
+            I: "\u0131",
+            İ: "\u0069",
+        },
+    },
+    az: {
+        regexp: /\u0130/g,
+        map: {
+            İ: "\u0069",
+            I: "\u0131",
+            İ: "\u0069",
+        },
+    },
+    lt: {
+        regexp: /\u0049|\u004A|\u012E|\u00CC|\u00CD|\u0128/g,
+        map: {
+            I: "\u0069\u0307",
+            J: "\u006A\u0307",
+            Į: "\u012F\u0307",
+            Ì: "\u0069\u0307\u0300",
+            Í: "\u0069\u0307\u0301",
+            Ĩ: "\u0069\u0307\u0303",
+        },
+    },
+};
+/**
+ * Localized lower case.
+ */
+function localeLowerCase(str, locale) {
+    var lang = SUPPORTED_LOCALE[locale.toLowerCase()];
+    if (lang)
+        return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));
+    return lowerCase(str);
+}
+/**
+ * Lower case as a function.
+ */
+function lowerCase(str) {
+    return str.toLowerCase();
+}
+
+;// ./node_modules/no-case/dist.es2015/index.js
+
+// Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
+var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
+// Remove all non-word characters.
+var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
+/**
+ * Normalize the string into something other libraries can manipulate easier.
+ */
+function noCase(input, options) {
+    if (options === void 0) { options = {}; }
+    var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d;
+    var result = dist_es2015_replace(dist_es2015_replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
+    var start = 0;
+    var end = result.length;
+    // Trim the delimiter from around the output string.
+    while (result.charAt(start) === "\0")
+        start++;
+    while (result.charAt(end - 1) === "\0")
+        end--;
+    // Transform each token independently.
+    return result.slice(start, end).split("\0").map(transform).join(delimiter);
+}
+/**
+ * Replace `re` in the input string with the replacement value.
+ */
+function dist_es2015_replace(input, re, value) {
+    if (re instanceof RegExp)
+        return input.replace(re, value);
+    return re.reduce(function (input, re) { return input.replace(re, value); }, input);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/search-items.js
+/**
+ * External dependencies
+ */
+
+
+
+// Default search helpers.
+const defaultGetName = item => item.name || '';
+const defaultGetTitle = item => item.title;
+const defaultGetDescription = item => item.description || '';
+const defaultGetKeywords = item => item.keywords || [];
+const defaultGetCategory = item => item.category;
+const defaultGetCollection = () => null;
+
+// Normalization regexes
+const splitRegexp = [/([\p{Ll}\p{Lo}\p{N}])([\p{Lu}\p{Lt}])/gu,
+// One lowercase or digit, followed by one uppercase.
+/([\p{Lu}\p{Lt}])([\p{Lu}\p{Lt}][\p{Ll}\p{Lo}])/gu // One uppercase followed by one uppercase and one lowercase.
+];
+const stripRegexp = /(\p{C}|\p{P}|\p{S})+/giu; // Anything that's not a punctuation, symbol or control/format character.
+
+// Normalization cache
+const extractedWords = new Map();
+const normalizedStrings = new Map();
+
+/**
+ * Extracts words from an input string.
+ *
+ * @param {string} input The input string.
+ *
+ * @return {Array} Words, extracted from the input string.
+ */
+function extractWords(input = '') {
+  if (extractedWords.has(input)) {
+    return extractedWords.get(input);
+  }
+  const result = noCase(input, {
+    splitRegexp,
+    stripRegexp
+  }).split(' ').filter(Boolean);
+  extractedWords.set(input, result);
+  return result;
+}
+
+/**
+ * Sanitizes the search input string.
+ *
+ * @param {string} input The search input to normalize.
+ *
+ * @return {string} The normalized search input.
+ */
+function normalizeString(input = '') {
+  if (normalizedStrings.has(input)) {
+    return normalizedStrings.get(input);
+  }
+
+  // Disregard diacritics.
+  //  Input: "média"
+  let result = remove_accents_default()(input);
+
+  // Accommodate leading slash, matching autocomplete expectations.
+  //  Input: "/media"
+  result = result.replace(/^\//, '');
+
+  // Lowercase.
+  //  Input: "MEDIA"
+  result = result.toLowerCase();
+  normalizedStrings.set(input, result);
+  return result;
+}
+
+/**
+ * Converts the search term into a list of normalized terms.
+ *
+ * @param {string} input The search term to normalize.
+ *
+ * @return {string[]} The normalized list of search terms.
+ */
+const getNormalizedSearchTerms = (input = '') => {
+  return extractWords(normalizeString(input));
+};
+const removeMatchingTerms = (unmatchedTerms, unprocessedTerms) => {
+  return unmatchedTerms.filter(term => !getNormalizedSearchTerms(unprocessedTerms).some(unprocessedTerm => unprocessedTerm.includes(term)));
+};
+const searchBlockItems = (items, categories, collections, searchInput) => {
+  const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);
+  if (normalizedSearchTerms.length === 0) {
+    return items;
+  }
+  const config = {
+    getCategory: item => categories.find(({
+      slug
+    }) => slug === item.category)?.title,
+    getCollection: item => collections[item.name.split('/')[0]]?.title
+  };
+  return searchItems(items, searchInput, config);
+};
+
+/**
+ * Filters an item list given a search term.
+ *
+ * @param {Array}  items       Item list
+ * @param {string} searchInput Search input.
+ * @param {Object} config      Search Config.
+ *
+ * @return {Array} Filtered item list.
+ */
+const searchItems = (items = [], searchInput = '', config = {}) => {
+  const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);
+  if (normalizedSearchTerms.length === 0) {
+    return items;
+  }
+  const rankedItems = items.map(item => {
+    return [item, getItemSearchRank(item, searchInput, config)];
+  }).filter(([, rank]) => rank > 0);
+  rankedItems.sort(([, rank1], [, rank2]) => rank2 - rank1);
+  return rankedItems.map(([item]) => item);
+};
+
+/**
+ * Get the search rank for a given item and a specific search term.
+ * The better the match, the higher the rank.
+ * If the rank equals 0, it should be excluded from the results.
+ *
+ * @param {Object} item       Item to filter.
+ * @param {string} searchTerm Search term.
+ * @param {Object} config     Search Config.
+ *
+ * @return {number} Search Rank.
+ */
+function getItemSearchRank(item, searchTerm, config = {}) {
+  const {
+    getName = defaultGetName,
+    getTitle = defaultGetTitle,
+    getDescription = defaultGetDescription,
+    getKeywords = defaultGetKeywords,
+    getCategory = defaultGetCategory,
+    getCollection = defaultGetCollection
+  } = config;
+  const name = getName(item);
+  const title = getTitle(item);
+  const description = getDescription(item);
+  const keywords = getKeywords(item);
+  const category = getCategory(item);
+  const collection = getCollection(item);
+  const normalizedSearchInput = normalizeString(searchTerm);
+  const normalizedTitle = normalizeString(title);
+  let rank = 0;
+
+  // Prefers exact matches
+  // Then prefers if the beginning of the title matches the search term
+  // name, keywords, categories, collection, variations match come later.
+  if (normalizedSearchInput === normalizedTitle) {
+    rank += 30;
+  } else if (normalizedTitle.startsWith(normalizedSearchInput)) {
+    rank += 20;
+  } else {
+    const terms = [name, title, description, ...keywords, category, collection].join(' ');
+    const normalizedSearchTerms = extractWords(normalizedSearchInput);
+    const unmatchedTerms = removeMatchingTerms(normalizedSearchTerms, terms);
+    if (unmatchedTerms.length === 0) {
+      rank += 10;
+    }
+  }
+
+  // Give a better rank to "core" namespaced items.
+  if (rank !== 0 && name.startsWith('core/')) {
+    const isCoreBlockVariation = name !== item.id;
+    // Give a bit better rank to "core" blocks over "core" block variations.
+    rank += isCoreBlockVariation ? 1 : 2;
+  }
+  return rank;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/hooks/use-patterns-paging.js
 /**
  * WordPress dependencies
  */
@@ -45944,7 +49889,6 @@
 
 
 const PAGE_SIZE = 20;
-const INITIAL_INSERTER_RESULTS = 5;
 
 /**
  * Supplies values needed to page the patterns list client side.
@@ -45968,9 +49912,6 @@
   const categoryPatterns = (0,external_wp_element_namespaceObject.useMemo)(() => {
     return currentCategoryPatterns.slice(pageIndex * PAGE_SIZE, pageIndex * PAGE_SIZE + PAGE_SIZE);
   }, [pageIndex, currentCategoryPatterns]);
-  const categoryPatternsAsyncList = (0,external_wp_compose_namespaceObject.useAsyncList)(categoryPatterns, {
-    step: INITIAL_INSERTER_RESULTS
-  });
   const numPages = Math.ceil(currentCategoryPatterns.length / PAGE_SIZE);
   const changePage = page => {
     const scrollContainer = (0,external_wp_dom_namespaceObject.getScrollContainer)(scrollContainerRef?.current);
@@ -45984,28 +49925,25 @@
   return {
     totalItems,
     categoryPatterns,
-    categoryPatternsAsyncList,
     numPages,
     changePage,
     currentPage
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/pattern-list.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/pattern-list.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -46026,7 +49964,7 @@
     level: 2,
     lineHeight: "48px",
     className: "block-editor-block-patterns-explorer__search-results-count",
-    children: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of patterns. */
+    children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of patterns. */
     (0,external_wp_i18n_namespaceObject._n)('%d pattern found', '%d patterns found', filteredBlockPatternsLength), filteredBlockPatternsLength)
   });
 }
@@ -46034,7 +49972,8 @@
   searchValue,
   selectedCategory,
   patternCategories,
-  rootClientId
+  rootClientId,
+  onModalClose
 }) {
   const container = (0,external_wp_element_namespaceObject.useRef)();
   const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500);
@@ -46052,8 +49991,12 @@
       if (selectedCategory === myPatternsCategory.name && pattern.type === INSERTER_PATTERN_TYPES.user) {
         return true;
       }
+      if (selectedCategory === starterPatternsCategory.name && pattern.blockTypes?.includes('core/post-content')) {
+        return true;
+      }
       if (selectedCategory === 'uncategorized') {
-        const hasKnownCategory = pattern.categories.some(category => registeredPatternCategories.includes(category));
+        var _pattern$categories$s;
+        const hasKnownCategory = (_pattern$categories$s = pattern.categories?.some(category => registeredPatternCategories.includes(category))) !== null && _pattern$categories$s !== void 0 ? _pattern$categories$s : false;
         return !pattern.categories?.length || !hasKnownCategory;
       }
       return pattern.categories?.includes(selectedCategory);
@@ -46070,7 +50013,7 @@
       return;
     }
     const count = filteredBlockPatterns.length;
-    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of results. */
+    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of results. */
     (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', count), count);
     debouncedSpeak(resultsFoundMessage);
   }, [searchValue, debouncedSpeak, filteredBlockPatterns.length]);
@@ -46092,9 +50035,11 @@
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter_listbox, {
       children: hasItems && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_list, {
-          shownPatterns: pagingProps.categoryPatternsAsyncList,
           blockPatterns: pagingProps.categoryPatterns,
-          onClickPattern: onClickPattern,
+          onClickPattern: (pattern, blocks) => {
+            onClickPattern(pattern, blocks);
+            onModalClose();
+          },
           isDraggable: false
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Pagination, {
           ...pagingProps
@@ -46105,7 +50050,7 @@
 }
 /* harmony default export */ const pattern_list = (PatternList);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/use-pattern-categories.js
 /**
  * WordPress dependencies
  */
@@ -46137,6 +50082,9 @@
         label: (0,external_wp_i18n_namespaceObject._x)('Uncategorized')
       });
     }
+    if (filteredPatterns.some(pattern => pattern.blockTypes?.includes('core/post-content'))) {
+      categories.unshift(starterPatternsCategory);
+    }
     if (filteredPatterns.some(pattern => pattern.type === INSERTER_PATTERN_TYPES.user)) {
       categories.unshift(myPatternsCategory);
     }
@@ -46146,32 +50094,32 @@
         label: allPatternsCategory.label
       });
     }
-    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of categories . */
+    (0,external_wp_a11y_namespaceObject.speak)((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of categories . */
     (0,external_wp_i18n_namespaceObject._n)('%d category button displayed.', '%d category buttons displayed.', categories.length), categories.length));
     return categories;
   }, [allCategories, filteredPatterns]);
   return populatedCategories;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-explorer/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
 
 function PatternsExplorer({
   initialCategory,
-  rootClientId
+  rootClientId,
+  onModalClose
 }) {
   const [searchValue, setSearchValue] = (0,external_wp_element_namespaceObject.useState)('');
   const [selectedCategory, setSelectedCategory] = (0,external_wp_element_namespaceObject.useState)(initialCategory?.name);
@@ -46188,7 +50136,8 @@
       searchValue: searchValue,
       selectedCategory: selectedCategory,
       patternCategories: patternCategories,
-      rootClientId: rootClientId
+      rootClientId: rootClientId,
+      onModalClose: onModalClose
     })]
   });
 }
@@ -46201,17 +50150,17 @@
     onRequestClose: onModalClose,
     isFullScreen: true,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternsExplorer, {
+      onModalClose: onModalClose,
       ...restProps
     })
   });
 }
 /* harmony default export */ const block_patterns_explorer = (PatternsExplorerModal);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/mobile-tab-navigation.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/mobile-tab-navigation.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -46228,7 +50177,7 @@
         paddingY: 3,
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
           spacing: 2,
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNavigatorBackButton, {
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.BackButton, {
             style:
             // TODO: This style override is also used in ToolsPanelHeader.
             // It should be supported out-of-the-box by Button.
@@ -46254,13 +50203,13 @@
   categories,
   children
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalNavigatorProvider, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator, {
     initialPath: "/",
     className: "block-editor-inserter__mobile-tab-navigation",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNavigatorScreen, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.Screen, {
       path: "/",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
-        children: categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalNavigatorButton, {
+        children: categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Navigator.Button, {
           path: `/category/${category.name}`,
           as: external_wp_components_namespaceObject.__experimentalItem,
           isAction: true,
@@ -46273,7 +50222,7 @@
           })
         }, category.name))
       })
-    }), categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalNavigatorScreen, {
+    }), categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Navigator.Screen, {
       path: `/category/${category.name}`,
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScreenHeader, {
         title: (0,external_wp_i18n_namespaceObject.__)('Back')
@@ -46282,26 +50231,37 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/patterns-filter.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const getShouldDisableSyncFilter = sourceFilter => sourceFilter !== 'all';
-const getShouldDisableNonUserSources = category => {
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/patterns-filter.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+const getShouldDisableSyncFilter = sourceFilter => sourceFilter !== 'all' && sourceFilter !== 'user';
+const getShouldHideSourcesFilter = category => {
   return category.name === myPatternsCategory.name;
 };
+const PATTERN_SOURCE_MENU_OPTIONS = [{
+  value: 'all',
+  label: (0,external_wp_i18n_namespaceObject._x)('All', 'patterns')
+}, {
+  value: INSERTER_PATTERN_TYPES.directory,
+  label: (0,external_wp_i18n_namespaceObject.__)('Pattern Directory')
+}, {
+  value: INSERTER_PATTERN_TYPES.theme,
+  label: (0,external_wp_i18n_namespaceObject.__)('Theme & Plugins')
+}, {
+  value: INSERTER_PATTERN_TYPES.user,
+  label: (0,external_wp_i18n_namespaceObject.__)('User')
+}];
 function PatternsFilter({
   setPatternSyncFilter,
   setPatternSourceFilter,
@@ -46312,7 +50272,7 @@
 }) {
   // If the category is `myPatterns` then we need to set the source filter to `user`, but
   // we do this by deriving from props rather than calling setPatternSourceFilter otherwise
-  // the user may be confused when switching to another category if the haven't explicity set
+  // the user may be confused when switching to another category if the haven't explicitly set
   // this filter themselves.
   const currentPatternSourceFilter = category.name === myPatternsCategory.name ? INSERTER_PATTERN_TYPES.user : patternSourceFilter;
 
@@ -46320,9 +50280,9 @@
   // otherwise applying them will just result in no patterns being shown.
   const shouldDisableSyncFilter = getShouldDisableSyncFilter(currentPatternSourceFilter);
 
-  // We also need to disable the directory and theme source filter options if the category
-  // is `myPatterns` otherwise applying them will also just result in no patterns being shown.
-  const shouldDisableNonUserSources = getShouldDisableNonUserSources(category);
+  // We also hide the directory and theme source filter if the category is `myPatterns`
+  // otherwise there will only be one option available.
+  const shouldHideSourcesFilter = getShouldHideSourcesFilter(category);
   const patternSyncMenuOptions = (0,external_wp_element_namespaceObject.useMemo)(() => [{
     value: 'all',
     label: (0,external_wp_i18n_namespaceObject._x)('All', 'patterns')
@@ -46335,22 +50295,6 @@
     label: (0,external_wp_i18n_namespaceObject._x)('Not synced', 'patterns'),
     disabled: shouldDisableSyncFilter
   }], [shouldDisableSyncFilter]);
-  const patternSourceMenuOptions = (0,external_wp_element_namespaceObject.useMemo)(() => [{
-    value: 'all',
-    label: (0,external_wp_i18n_namespaceObject._x)('All', 'patterns'),
-    disabled: shouldDisableNonUserSources
-  }, {
-    value: INSERTER_PATTERN_TYPES.directory,
-    label: (0,external_wp_i18n_namespaceObject.__)('Pattern Directory'),
-    disabled: shouldDisableNonUserSources
-  }, {
-    value: INSERTER_PATTERN_TYPES.theme,
-    label: (0,external_wp_i18n_namespaceObject.__)('Theme & Plugins'),
-    disabled: shouldDisableNonUserSources
-  }, {
-    value: INSERTER_PATTERN_TYPES.user,
-    label: (0,external_wp_i18n_namespaceObject.__)('User')
-  }], [shouldDisableNonUserSources]);
   function handleSetSourceFilterChange(newSourceFilter) {
     setPatternSourceFilter(newSourceFilter);
     if (getShouldDisableSyncFilter(newSourceFilter)) {
@@ -46380,10 +50324,10 @@
         })
       }),
       children: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
+        children: [!shouldHideSourcesFilter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
           label: (0,external_wp_i18n_namespaceObject.__)('Source'),
           children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItemsChoice, {
-            choices: patternSourceMenuOptions,
+            choices: PATTERN_SOURCE_MENU_OPTIONS,
             onSelect: value => {
               handleSetSourceFilterChange(value);
               scrollContainerRef.current?.scrollTo(0, 0);
@@ -46401,7 +50345,7 @@
             value: patternSyncFilter
           })
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-          className: "block-editor-tool-selector__help",
+          className: "block-editor-inserter__patterns-filter-help",
           children: (0,external_wp_element_namespaceObject.createInterpolateElement)((0,external_wp_i18n_namespaceObject.__)('Patterns are available from the <Link>WordPress.org Pattern Directory</Link>, bundled in the active theme, or created by users on this site. Only patterns created on this site can be synced.'), {
             Link: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ExternalLink, {
               href: (0,external_wp_i18n_namespaceObject.__)('https://wordpress.org/patterns/')
@@ -46413,19 +50357,17 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/pattern-category-previews.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -46456,6 +50398,9 @@
     if (category.name === myPatternsCategory.name && pattern.type === INSERTER_PATTERN_TYPES.user) {
       return true;
     }
+    if (category.name === starterPatternsCategory.name && pattern.blockTypes?.includes('core/post-content')) {
+      return true;
+    }
     if (category.name === 'uncategorized') {
       // The uncategorized category should show all the patterns without any category...
       if (!pattern.categories) {
@@ -46473,7 +50418,6 @@
   } = pagingProps;
 
   // Hide block pattern preview on unmount.
-  // eslint-disable-next-line react-hooks/exhaustive-deps
   (0,external_wp_element_namespaceObject.useEffect)(() => () => onHover(null), []);
   const onSetPatternSyncFilter = (0,external_wp_element_namespaceObject.useCallback)(value => {
     setPatternSyncFilter(value);
@@ -46509,35 +50453,40 @@
         className: "block-editor-inserter__patterns-category-no-results",
         children: (0,external_wp_i18n_namespaceObject.__)('No results found')
       })]
-    }), currentCategoryPatterns.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_list, {
-      ref: scrollContainerRef,
-      shownPatterns: pagingProps.categoryPatternsAsyncList,
-      blockPatterns: pagingProps.categoryPatterns,
-      onClickPattern: onClickPattern,
-      onHover: onHover,
-      label: category.label,
-      orientation: "vertical",
-      category: category.name,
-      isDraggable: true,
-      showTitlesAsTooltip: showTitlesAsTooltip,
-      patternFilter: patternSourceFilter,
-      pagingProps: pagingProps
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/category-tabs/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+    }), currentCategoryPatterns.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
+        size: "12",
+        as: "p",
+        className: "block-editor-inserter__help-text",
+        children: (0,external_wp_i18n_namespaceObject.__)('Drag and drop patterns into the canvas.')
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_list, {
+        ref: scrollContainerRef,
+        blockPatterns: pagingProps.categoryPatterns,
+        onClickPattern: onClickPattern,
+        onHover: onHover,
+        label: category.label,
+        orientation: "vertical",
+        category: category.name,
+        isDraggable: true,
+        showTitlesAsTooltip: showTitlesAsTooltip,
+        patternFilter: patternSourceFilter,
+        pagingProps: pagingProps
+      })]
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/category-tabs/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const {
@@ -46549,57 +50498,81 @@
   onSelectCategory,
   children
 }) {
+  // Copied from InterfaceSkeleton.
+  const ANIMATION_DURATION = 0.25;
+  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
+  const defaultTransition = {
+    type: 'tween',
+    duration: disableMotion ? 0 : ANIMATION_DURATION,
+    ease: [0.6, 0, 0.4, 1]
+  };
+  const previousSelectedCategory = (0,external_wp_compose_namespaceObject.usePrevious)(selectedCategory);
+  const selectedTabId = selectedCategory ? selectedCategory.name : null;
+  const [activeTabId, setActiveId] = (0,external_wp_element_namespaceObject.useState)();
+  const firstTabId = categories?.[0]?.name;
+
+  // If there is no active tab, make the first tab the active tab, so that
+  // when focus is moved to the tablist, the first tab will be focused
+  // despite not being selected
+  if (selectedTabId === null && !activeTabId && firstTabId) {
+    setActiveId(firstTabId);
+  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(category_tabs_Tabs, {
-    className: "block-editor-inserter__category-tabs",
     selectOnMove: false,
-    selectedTabId: selectedCategory ? selectedCategory.name : null,
+    selectedTabId: selectedTabId,
     orientation: "vertical",
     onSelect: categoryId => {
       // Pass the full category object
       onSelectCategory(categories.find(category => category.name === categoryId));
     },
+    activeTabId: activeTabId,
+    onActiveTabIdChange: setActiveId,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(category_tabs_Tabs.TabList, {
       className: "block-editor-inserter__category-tablist",
       children: categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(category_tabs_Tabs.Tab, {
         tabId: category.name,
-        className: "block-editor-inserter__category-tab",
-        "aria-label": category.label,
         "aria-current": category === selectedCategory ? 'true' : undefined,
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexBlock, {
-            children: category.label
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
-            icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right
-          })]
-        })
+        children: category.label
       }, category.name))
     }), categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(category_tabs_Tabs.TabPanel, {
       tabId: category.name,
       focusable: false,
-      className: "block-editor-inserter__category-panel",
-      children: children
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
+        className: "block-editor-inserter__category-panel",
+        initial: !previousSelectedCategory ? 'closed' : 'open',
+        animate: "open",
+        variants: {
+          open: {
+            transform: 'translateX( 0 )',
+            transitionEnd: {
+              zIndex: '1'
+            }
+          },
+          closed: {
+            transform: 'translateX( -100% )',
+            zIndex: '-1'
+          }
+        },
+        transition: defaultTransition,
+        children: children
+      })
     }, category.name))]
   });
 }
 /* harmony default export */ const category_tabs = (CategoryTabs);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -46617,13 +50590,6 @@
   const [showPatternsExplorer, setShowPatternsExplorer] = (0,external_wp_element_namespaceObject.useState)(false);
   const categories = usePatternCategories(rootClientId);
   const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
-  const isResolvingPatterns = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).isResolvingPatterns(), []);
-  if (isResolvingPatterns) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-inserter__patterns-loading",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Spinner, {})
-    });
-  }
   if (!categories.length) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(no_results, {});
   }
@@ -46636,6 +50602,7 @@
         onSelectCategory: onSelectCategory,
         children: children
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         className: "block-editor-inserter__patterns-explore-button",
         onClick: () => setShowPatternsExplorer(true),
         variant: "secondary",
@@ -46648,8 +50615,7 @@
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviews, {
           onInsert: onInsert,
           rootClientId: rootClientId,
-          category: category,
-          showTitlesAsTooltip: false
+          category: category
         }, category.name)
       })
     }), showPatternsExplorer && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_explorer, {
@@ -46662,49 +50628,7 @@
 }
 /* harmony default export */ const block_patterns_tab = (BlockPatternsTab);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/block-patterns-tab/pattern-category-preview-panel.js
-/**
- * Internal dependencies
- */
-
-
-
-function PatternCategoryPreviewPanelInner({
-  rootClientId,
-  onInsert,
-  onHover,
-  category,
-  showTitlesAsTooltip,
-  patternFilter
-}) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviews, {
-    rootClientId: rootClientId,
-    onInsert: onInsert,
-    onHover: onHover,
-    category: category,
-    showTitlesAsTooltip: showTitlesAsTooltip,
-    patternFilter: patternFilter
-  }, category.name);
-}
-function PatternCategoryPreviewPanelWithZoomOut(props) {
-  useZoomOut();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviewPanelInner, {
-    ...props
-  });
-}
-function PatternCategoryPreviewPanel(props) {
-  // When the pattern panel is showing, we want to use zoom out mode
-  if (window.__experimentalEnableZoomedOutPatternsTab) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviewPanelWithZoomOut, {
-      ...props
-    });
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviewPanelInner, {
-    ...props
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/external.js
+;// ./node_modules/@wordpress/icons/build-module/library/external.js
 /**
  * WordPress dependencies
  */
@@ -46719,7 +50643,7 @@
 });
 /* harmony default export */ const library_external = (external);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/utils.js
 /**
  * WordPress dependencies
  */
@@ -46772,43 +50696,37 @@
   return [(0,external_wp_blocks_namespaceObject.createBlock)(`core/${mediaType}`, attributes), preview];
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-preview.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-preview.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
 
 const ALLOWED_MEDIA_TYPES = ['image'];
-const MAXIMUM_TITLE_LENGTH = 25;
 const MEDIA_OPTIONS_POPOVER_PROPS = {
   position: 'bottom left',
   className: 'block-editor-inserter__media-list__item-preview-options__popover'
 };
-const {
-  CompositeItemV2: media_preview_CompositeItem
-} = unlock(external_wp_components_namespaceObject.privateApis);
 function MediaPreviewOptions({
   category,
   media
@@ -46826,7 +50744,7 @@
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
         onClick: () => window.open(reportUrl, '_blank').focus(),
         icon: library_external,
-        children: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: The media type to report e.g: "image", "video", "audio" */
+        children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: The media type to report e.g: "image", "video", "audio" */
         (0,external_wp_i18n_namespaceObject.__)('Report %s'), category.mediaType)
       })
     })
@@ -46853,12 +50771,14 @@
       expanded: false,
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+          __next40pxDefaultSize: true,
           variant: "tertiary",
           onClick: onClose,
           children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
         })
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+          __next40pxDefaultSize: true,
           variant: "primary",
           onClick: onSubmit,
           children: (0,external_wp_i18n_namespaceObject.__)('Insert')
@@ -46881,8 +50801,12 @@
     createSuccessNotice
   } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
   const {
-    getSettings
+    getSettings,
+    getBlock
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
   const onMediaInsert = (0,external_wp_element_namespaceObject.useCallback)(previewBlock => {
     // Prevent multiple uploads when we're in the process of inserting.
     if (isInserting) {
@@ -46914,8 +50838,12 @@
     // If this happens, we insert the image block using the external
     // URL and let the user know about the possible implications.
     window.fetch(url).then(response => response.blob()).then(blob => {
+      const fileName = (0,external_wp_url_namespaceObject.getFilename)(url) || 'image.jpg';
+      const file = new File([blob], fileName, {
+        type: blob.type
+      });
       settings.mediaUpload({
-        filesList: [blob],
+        filesList: [file],
         additionalData: {
           caption
         },
@@ -46923,23 +50851,35 @@
           if ((0,external_wp_blob_namespaceObject.isBlobURL)(img.url)) {
             return;
           }
-          onClick({
-            ...clonedBlock,
-            attributes: {
+          if (!getBlock(clonedBlock.clientId)) {
+            // Ensure the block is only inserted once.
+            onClick({
+              ...clonedBlock,
+              attributes: {
+                ...clonedBlock.attributes,
+                id: img.id,
+                url: img.url
+              }
+            });
+            createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Image uploaded and inserted.'), {
+              type: 'snackbar',
+              id: 'inserter-notice'
+            });
+          } else {
+            // For subsequent calls, update the existing block.
+            updateBlockAttributes(clonedBlock.clientId, {
               ...clonedBlock.attributes,
               id: img.id,
               url: img.url
-            }
-          });
-          createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Image uploaded and inserted.'), {
-            type: 'snackbar'
-          });
+            });
+          }
           setIsInserting(false);
         },
         allowedTypes: ALLOWED_MEDIA_TYPES,
         onError(message) {
           createErrorNotice(message, {
-            type: 'snackbar'
+            type: 'snackbar',
+            id: 'inserter-notice'
           });
           setIsInserting(false);
         }
@@ -46948,13 +50888,8 @@
       setShowExternalUploadModal(true);
       setIsInserting(false);
     });
-  }, [isInserting, getSettings, onClick, createSuccessNotice, createErrorNotice]);
+  }, [isInserting, getSettings, onClick, createSuccessNotice, updateBlockAttributes, createErrorNotice, getBlock]);
   const title = typeof media.title === 'string' ? media.title : media.title?.rendered || (0,external_wp_i18n_namespaceObject.__)('no title');
-  let truncatedTitle;
-  if (title.length > MAXIMUM_TITLE_LENGTH) {
-    const omission = '...';
-    truncatedTitle = title.slice(0, MAXIMUM_TITLE_LENGTH - omission.length) + omission;
-  }
   const onMouseEnter = (0,external_wp_element_namespaceObject.useCallback)(() => setIsHovered(true), []);
   const onMouseLeave = (0,external_wp_element_namespaceObject.useCallback)(() => setIsHovered(false), []);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
@@ -46976,8 +50911,8 @@
           onMouseEnter: onMouseEnter,
           onMouseLeave: onMouseLeave,
           children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
-            text: truncatedTitle || title,
-            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(media_preview_CompositeItem, {
+            text: title,
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite.Item, {
               render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
                 "aria-label": title,
                 role: "option",
@@ -47003,7 +50938,8 @@
       onSubmit: () => {
         onClick((0,external_wp_blocks_namespaceObject.cloneBlock)(block));
         createSuccessNotice((0,external_wp_i18n_namespaceObject.__)('Image inserted.'), {
-          type: 'snackbar'
+          type: 'snackbar',
+          id: 'inserter-notice'
         });
         setShowExternalUploadModal(false);
       }
@@ -47011,32 +50947,25 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-list.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const {
-  CompositeV2: media_list_Composite,
-  useCompositeStoreV2: media_list_useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-list.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
 function MediaList({
   mediaList,
   category,
   onClick,
   label = (0,external_wp_i18n_namespaceObject.__)('Media List')
 }) {
-  const compositeStore = media_list_useCompositeStore();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(media_list_Composite, {
-    store: compositeStore,
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
     role: "listbox",
     className: "block-editor-inserter__media-list",
     "aria-label": label,
@@ -47049,7 +50978,7 @@
 }
 /* harmony default export */ const media_list = (MediaList);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/hooks.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/hooks.js
 /**
  * WordPress dependencies
  */
@@ -47083,18 +51012,18 @@
   // In the future we could use AbortController to cancel previous
   // requests, but we don't for now as it involves adding support
   // for this to `core-data` package.
-  const lastRequest = (0,external_wp_element_namespaceObject.useRef)();
+  const lastRequestRef = (0,external_wp_element_namespaceObject.useRef)();
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     (async () => {
       const key = JSON.stringify({
         category: category.name,
         ...query
       });
-      lastRequest.current = key;
+      lastRequestRef.current = key;
       setIsLoading(true);
       setMediaList([]); // Empty the previous results.
       const _media = await category.fetch?.(query);
-      if (key === lastRequest.current) {
+      if (key === lastRequestRef.current) {
         setMediaList(_media);
         setIsLoading(false);
       }
@@ -47168,18 +51097,17 @@
   return categories;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -47203,6 +51131,7 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: baseCssClass,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
+      __nextHasNoMarginBottom: true,
       className: `${baseCssClass}-search`,
       onChange: setSearch,
       value: search,
@@ -47220,20 +51149,18 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-tab.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/media-tab/media-tab.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -47284,6 +51211,7 @@
           render: ({
             open
           }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
             onClick: event => {
               // Safari doesn't emit a focus event on button elements when
               // clicked and we need to manually focus the button here.
@@ -47313,48 +51241,81 @@
 }
 /* harmony default export */ const media_tab = (MediaTab);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter-menu-extension/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter-menu-extension/index.js
 /**
  * WordPress dependencies
  */
 
 const {
   Fill: __unstableInserterMenuExtension,
-  Slot: inserter_menu_extension_Slot
+  Slot
 } = (0,external_wp_components_namespaceObject.createSlotFill)('__unstableInserterMenuExtension');
-__unstableInserterMenuExtension.Slot = inserter_menu_extension_Slot;
+__unstableInserterMenuExtension.Slot = Slot;
 /* harmony default export */ const inserter_menu_extension = (__unstableInserterMenuExtension);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/search-results.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-const search_results_INITIAL_INSERTER_RESULTS = 9;
+;// ./node_modules/@wordpress/block-editor/build-module/utils/order-inserter-block-items.js
+/** @typedef {import('../store/selectors').WPEditorInserterItem} WPEditorInserterItem */
+
+/**
+ * Helper function to order inserter block items according to a provided array of prioritized blocks.
+ *
+ * @param {WPEditorInserterItem[]} items    The array of editor inserter block items to be sorted.
+ * @param {string[]}               priority The array of block names to be prioritized.
+ * @return {WPEditorInserterItem[]} The sorted array of editor inserter block items.
+ */
+const orderInserterBlockItems = (items, priority) => {
+  if (!priority) {
+    return items;
+  }
+  items.sort(({
+    id: aName
+  }, {
+    id: bName
+  }) => {
+    // Sort block items according to `priority`.
+    let aIndex = priority.indexOf(aName);
+    let bIndex = priority.indexOf(bName);
+    // All other block items should come after that.
+    if (aIndex < 0) {
+      aIndex = priority.length;
+    }
+    if (bIndex < 0) {
+      bIndex = priority.length;
+    }
+    return aIndex - bIndex;
+  });
+  return items;
+};
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/search-results.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const INITIAL_INSERTER_RESULTS = 9;
 /**
  * Shared reference to an empty array for cases where it is important to avoid
  * returning a new array reference on every invocation and rerendering the component.
@@ -47399,7 +51360,7 @@
     selectBlockOnInsert
   });
   const [blockTypes, blockTypeCategories, blockTypeCollections, onSelectBlockType] = use_block_types_state(destinationRootClientId, onInsertBlocks, isQuick);
-  const [patterns,, onClickPattern] = use_patterns_state(onInsertBlocks, destinationRootClientId);
+  const [patterns,, onClickPattern] = use_patterns_state(onInsertBlocks, destinationRootClientId, undefined, isQuick);
   const filteredBlockPatterns = (0,external_wp_element_namespaceObject.useMemo)(() => {
     if (maxBlockPatterns === 0) {
       return [];
@@ -47430,14 +51391,13 @@
       return;
     }
     const count = filteredBlockTypes.length + filteredBlockPatterns.length;
-    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of results. */
+    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of results. */
     (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', count), count);
     debouncedSpeak(resultsFoundMessage);
   }, [filterValue, debouncedSpeak, filteredBlockTypes, filteredBlockPatterns]);
   const currentShownBlockTypes = (0,external_wp_compose_namespaceObject.useAsyncList)(filteredBlockTypes, {
-    step: search_results_INITIAL_INSERTER_RESULTS
-  });
-  const currentShownPatterns = (0,external_wp_compose_namespaceObject.useAsyncList)(currentShownBlockTypes.length === filteredBlockTypes.length ? filteredBlockPatterns : search_results_EMPTY_ARRAY);
+    step: INITIAL_INSERTER_RESULTS
+  });
   const hasItems = filteredBlockTypes.length > 0 || filteredBlockPatterns.length > 0;
   const blocksUI = !!filteredBlockTypes.length && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(panel, {
     title: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
@@ -47458,7 +51418,6 @@
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-inserter__quick-inserter-patterns",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_list, {
-        shownPatterns: currentShownPatterns,
         blockPatterns: filteredBlockPatterns,
         onClickPattern: onClickPattern,
         onHover: onHoverPattern,
@@ -47489,9 +51448,9 @@
     })]
   });
 }
-/* harmony default export */ const search_results = (InserterSearchResults);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/close-small.js
+/* harmony default export */ const inserter_search_results = (InserterSearchResults);
+
+;// ./node_modules/@wordpress/icons/build-module/library/close-small.js
 /**
  * WordPress dependencies
  */
@@ -47506,80 +51465,184 @@
 });
 /* harmony default export */ const close_small = (closeSmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/tabs.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/tabbed-sidebar/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const {
-  Tabs: tabs_Tabs
+  Tabs: tabbed_sidebar_Tabs
 } = unlock(external_wp_components_namespaceObject.privateApis);
-const blocksTab = {
-  name: 'blocks',
-  /* translators: Blocks tab title in the block inserter. */
-  title: (0,external_wp_i18n_namespaceObject.__)('Blocks')
-};
-const patternsTab = {
-  name: 'patterns',
-  /* translators: Theme and Directory Patterns tab title in the block inserter. */
-  title: (0,external_wp_i18n_namespaceObject.__)('Patterns')
-};
-const mediaTab = {
-  name: 'media',
-  /* translators: Media tab title in the block inserter. */
-  title: (0,external_wp_i18n_namespaceObject.__)('Media')
-};
-function InserterTabs({
+
+/**
+ * A component that creates a tabbed sidebar with a close button.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/tabbed-sidebar/README.md
+ *
+ * @example
+ * ```jsx
+ * function MyTabbedSidebar() {
+ *   return (
+ *     <TabbedSidebar
+ *       tabs={ [
+ *         {
+ *           name: 'tab1',
+ *           title: 'Settings',
+ *           panel: <PanelContents />,
+ *         }
+ *       ] }
+ *       onClose={ () => {} }
+ *       onSelect={ () => {} }
+ *       defaultTabId="tab1"
+ *       selectedTab="tab1"
+ *       closeButtonLabel="Close sidebar"
+ *     />
+ *   );
+ * }
+ * ```
+ *
+ * @param {Object}   props                  Component props.
+ * @param {string}   [props.defaultTabId]   The ID of the tab to be selected by default when the component renders.
+ * @param {Function} props.onClose          Function called when the close button is clicked.
+ * @param {Function} props.onSelect         Function called when a tab is selected. Receives the selected tab's ID as an argument.
+ * @param {string}   props.selectedTab      The ID of the currently selected tab.
+ * @param {Array}    props.tabs             Array of tab objects. Each tab should have: name (string), title (string),
+ *                                          panel (React.Node), and optionally panelRef (React.Ref).
+ * @param {string}   props.closeButtonLabel Accessibility label for the close button.
+ * @param {Object}   ref                    Forward ref to the tabs list element.
+ * @return {Element} The tabbed sidebar component.
+ */
+function TabbedSidebar({
+  defaultTabId,
+  onClose,
   onSelect,
-  children,
-  onClose,
-  selectedTab
+  selectedTab,
+  tabs,
+  closeButtonLabel
 }, ref) {
-  const tabs = [blocksTab, patternsTab, mediaTab];
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: "block-editor-inserter__tabs",
-    ref: ref,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(tabs_Tabs, {
+    className: "block-editor-tabbed-sidebar",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(tabbed_sidebar_Tabs, {
+      selectOnMove: false,
+      defaultTabId: defaultTabId,
       onSelect: onSelect,
       selectedTabId: selectedTab,
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-        className: "block-editor-inserter__tablist-and-close-button",
+        className: "block-editor-tabbed-sidebar__tablist-and-close-button",
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          className: "block-editor-inserter__close-button",
+          className: "block-editor-tabbed-sidebar__close-button",
           icon: close_small,
-          label: (0,external_wp_i18n_namespaceObject.__)('Close block inserter'),
+          label: closeButtonLabel,
           onClick: () => onClose(),
-          size: "small"
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabs_Tabs.TabList, {
-          className: "block-editor-inserter__tablist",
-          children: tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabs_Tabs.Tab, {
+          size: "compact"
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabbed_sidebar_Tabs.TabList, {
+          className: "block-editor-tabbed-sidebar__tablist",
+          ref: ref,
+          children: tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabbed_sidebar_Tabs.Tab, {
             tabId: tab.name,
-            className: "block-editor-inserter__tab",
+            className: "block-editor-tabbed-sidebar__tab",
             children: tab.title
           }, tab.name))
         })]
-      }), tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabs_Tabs.TabPanel, {
+      }), tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabbed_sidebar_Tabs.TabPanel, {
         tabId: tab.name,
         focusable: false,
-        className: "block-editor-inserter__tabpanel",
-        children: children
+        className: "block-editor-tabbed-sidebar__tabpanel",
+        ref: tab.panelRef,
+        children: tab.panel
       }, tab.name))]
     })
   });
 }
-/* harmony default export */ const tabs = ((0,external_wp_element_namespaceObject.forwardRef)(InserterTabs));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/menu.js
+/* harmony default export */ const tabbed_sidebar = ((0,external_wp_element_namespaceObject.forwardRef)(TabbedSidebar));
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-zoom-out.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * A hook used to set the editor mode to zoomed out mode, invoking the hook sets the mode.
+ * Concepts:
+ * - If we most recently changed the zoom level for them (in or out), we always resetZoomLevel() level when unmounting.
+ * - If the user most recently changed the zoom level (manually toggling), we do nothing when unmounting.
+ *
+ * @param {boolean} enabled If we should enter into zoomOut mode or not
+ */
+function useZoomOut(enabled = true) {
+  const {
+    setZoomLevel,
+    resetZoomLevel
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+
+  /**
+   * We need access to both the value and the function. The value is to trigger a useEffect hook
+   * and the function is to check zoom out within another hook without triggering a re-render.
+   */
+  const {
+    isZoomedOut,
+    isZoomOut
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      isZoomOut: _isZoomOut
+    } = unlock(select(store));
+    return {
+      isZoomedOut: _isZoomOut(),
+      isZoomOut: _isZoomOut
+    };
+  }, []);
+  const controlZoomLevelRef = (0,external_wp_element_namespaceObject.useRef)(false);
+  const isEnabledRef = (0,external_wp_element_namespaceObject.useRef)(enabled);
+
+  /**
+   * This hook tracks if the zoom state was changed manually by the user via clicking
+   * the zoom out button. We only want this to run when isZoomedOut changes, so we use
+   * a ref to track the enabled state.
+   */
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    // If the zoom state changed (isZoomOut) and it does not match the requested zoom
+    // state (zoomOut), then it means the user manually changed the zoom state while
+    // this hook was mounted, and we should no longer control the zoom state.
+    if (isZoomedOut !== isEnabledRef.current) {
+      controlZoomLevelRef.current = false;
+    }
+  }, [isZoomedOut]);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    isEnabledRef.current = enabled;
+    if (enabled !== isZoomOut()) {
+      controlZoomLevelRef.current = true;
+      if (enabled) {
+        setZoomLevel('auto-scaled');
+      } else {
+        resetZoomLevel();
+      }
+    }
+    return () => {
+      // If we are controlling zoom level and are zoomed out, reset the zoom level.
+      if (controlZoomLevelRef.current && isZoomOut()) {
+        resetZoomLevel();
+      }
+    };
+  }, [enabled, isZoomOut, resetZoomLevel, setZoomLevel]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/menu.js
 /**
  * External dependencies
  */
@@ -47626,13 +51689,37 @@
   __experimentalInitialTab,
   __experimentalInitialCategory
 }, ref) {
-  const isZoomOutMode = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).__unstableGetEditorMode() === 'zoom-out', []);
+  const {
+    isZoomOutMode,
+    hasSectionRootClientId
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      isZoomOut,
+      getSectionRootClientId
+    } = unlock(select(store));
+    return {
+      isZoomOutMode: isZoomOut(),
+      hasSectionRootClientId: !!getSectionRootClientId()
+    };
+  }, []);
   const [filterValue, setFilterValue, delayedFilterValue] = (0,external_wp_compose_namespaceObject.useDebouncedInput)(__experimentalFilterValue);
   const [hoveredItem, setHoveredItem] = (0,external_wp_element_namespaceObject.useState)(null);
   const [selectedPatternCategory, setSelectedPatternCategory] = (0,external_wp_element_namespaceObject.useState)(__experimentalInitialCategory);
   const [patternFilter, setPatternFilter] = (0,external_wp_element_namespaceObject.useState)('all');
   const [selectedMediaCategory, setSelectedMediaCategory] = (0,external_wp_element_namespaceObject.useState)(null);
-  const [selectedTab, setSelectedTab] = (0,external_wp_element_namespaceObject.useState)(__experimentalInitialTab);
+  const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('large');
+  function getInitialTab() {
+    if (__experimentalInitialTab) {
+      return __experimentalInitialTab;
+    }
+    if (isZoomOutMode) {
+      return 'patterns';
+    }
+    return 'blocks';
+  }
+  const [selectedTab, setSelectedTab] = (0,external_wp_element_namespaceObject.useState)(getInitialTab());
+  const shouldUseZoomOut = hasSectionRootClientId && (selectedTab === 'patterns' || selectedTab === 'media');
+  useZoomOut(shouldUseZoomOut && isLargeViewport);
   const [destinationRootClientId, onInsertBlocks, onToggleInsertionPoint] = use_insertion_point({
     rootClientId,
     clientId,
@@ -47643,29 +51730,27 @@
   const blockTypesTabRef = (0,external_wp_element_namespaceObject.useRef)();
   const onInsert = (0,external_wp_element_namespaceObject.useCallback)((blocks, meta, shouldForceFocusBlock, _rootClientId) => {
     onInsertBlocks(blocks, meta, shouldForceFocusBlock, _rootClientId);
-    onSelect();
+    onSelect(blocks);
 
     // Check for focus loss due to filtering blocks by selected block type
     window.requestAnimationFrame(() => {
-      if (!shouldFocusBlock && !blockTypesTabRef?.current.contains(ref.current.ownerDocument.activeElement)) {
+      if (!shouldFocusBlock && !blockTypesTabRef.current?.contains(ref.current.ownerDocument.activeElement)) {
         // There has been a focus loss, so focus the first button in the block types tab
-        blockTypesTabRef?.current.querySelector('button').focus();
+        blockTypesTabRef.current?.querySelector('button').focus();
       }
     });
   }, [onInsertBlocks, onSelect, shouldFocusBlock]);
-  const onInsertPattern = (0,external_wp_element_namespaceObject.useCallback)((blocks, patternName) => {
+  const onInsertPattern = (0,external_wp_element_namespaceObject.useCallback)((blocks, patternName, ...args) => {
+    onToggleInsertionPoint(false);
     onInsertBlocks(blocks, {
       patternName
-    });
+    }, ...args);
     onSelect();
   }, [onInsertBlocks, onSelect]);
   const onHover = (0,external_wp_element_namespaceObject.useCallback)(item => {
     onToggleInsertionPoint(item);
     setHoveredItem(item);
   }, [onToggleInsertionPoint, setHoveredItem]);
-  const onHoverPattern = (0,external_wp_element_namespaceObject.useCallback)(item => {
-    onToggleInsertionPoint(!!item);
-  }, [onToggleInsertionPoint]);
   const onClickPatternCategory = (0,external_wp_element_namespaceObject.useCallback)((patternCategory, filter) => {
     setSelectedPatternCategory(patternCategory);
     setPatternFilter(filter);
@@ -47688,13 +51773,12 @@
           setFilterValue(value);
         },
         value: filterValue,
-        label: (0,external_wp_i18n_namespaceObject.__)('Search for blocks and patterns'),
+        label: (0,external_wp_i18n_namespaceObject.__)('Search'),
         placeholder: (0,external_wp_i18n_namespaceObject.__)('Search')
-      }), !!delayedFilterValue && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(search_results, {
+      }), !!delayedFilterValue && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter_search_results, {
         filterValue: delayedFilterValue,
         onSelect: onSelect,
         onHover: onHover,
-        onHoverPattern: onHoverPattern,
         rootClientId: rootClientId,
         clientId: clientId,
         isAppender: isAppender,
@@ -47704,7 +51788,7 @@
         prioritizePatterns: selectedTab === 'patterns'
       })]
     });
-  }, [selectedTab, hoveredItem, setHoveredItem, setFilterValue, filterValue, delayedFilterValue, onSelect, onHover, onHoverPattern, shouldFocusBlock, clientId, rootClientId, __experimentalInsertionIndex, isAppender]);
+  }, [selectedTab, hoveredItem, setHoveredItem, setFilterValue, filterValue, delayedFilterValue, onSelect, onHover, shouldFocusBlock, clientId, rootClientId, __experimentalInsertionIndex, isAppender]);
   const blocksTab = (0,external_wp_element_namespaceObject.useMemo)(() => {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
@@ -47731,16 +51815,15 @@
       onInsert: onInsertPattern,
       onSelectCategory: onClickPatternCategory,
       selectedCategory: selectedPatternCategory,
-      children: showPatternPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviewPanel, {
+      children: showPatternPanel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PatternCategoryPreviews, {
         rootClientId: destinationRootClientId,
         onInsert: onInsertPattern,
-        onHover: onHoverPattern,
         category: selectedPatternCategory,
         patternFilter: patternFilter,
         showTitlesAsTooltip: true
       })
     });
-  }, [destinationRootClientId, onHoverPattern, onInsertPattern, onClickPatternCategory, patternFilter, selectedPatternCategory, showPatternPanel]);
+  }, [destinationRootClientId, onInsertPattern, onClickPatternCategory, patternFilter, selectedPatternCategory, showPatternPanel]);
   const mediaTab = (0,external_wp_element_namespaceObject.useMemo)(() => {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(media_tab, {
       rootClientId: destinationRootClientId,
@@ -47779,12 +51862,31 @@
     ref: ref,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-inserter__main-area",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(tabs, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(tabbed_sidebar, {
         ref: tabsRef,
         onSelect: handleSetSelectedTab,
         onClose: onClose,
         selectedTab: selectedTab,
-        children: [inserterSearch, selectedTab === 'blocks' && !delayedFilterValue && blocksTab, selectedTab === 'patterns' && !delayedFilterValue && patternsTab, selectedTab === 'media' && mediaTab]
+        closeButtonLabel: (0,external_wp_i18n_namespaceObject.__)('Close Block Inserter'),
+        tabs: [{
+          name: 'blocks',
+          title: (0,external_wp_i18n_namespaceObject.__)('Blocks'),
+          panel: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+            children: [inserterSearch, selectedTab === 'blocks' && !delayedFilterValue && blocksTab]
+          })
+        }, {
+          name: 'patterns',
+          title: (0,external_wp_i18n_namespaceObject.__)('Patterns'),
+          panel: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+            children: [inserterSearch, selectedTab === 'patterns' && !delayedFilterValue && patternsTab]
+          })
+        }, {
+          name: 'media',
+          title: (0,external_wp_i18n_namespaceObject.__)('Media'),
+          panel: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+            children: [inserterSearch, mediaTab]
+          })
+        }]
       })
     }), showInserterHelpPanel && hoveredItem && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
       className: "block-editor-inserter__preview-container__popover",
@@ -47808,40 +51910,36 @@
 }
 /* harmony default export */ const menu = ((0,external_wp_element_namespaceObject.forwardRef)(PublicInserterMenu));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/quick-inserter.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/quick-inserter.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
 
 
 const SEARCH_THRESHOLD = 6;
-const quick_inserter_SHOWN_BLOCK_TYPES = 6;
+const SHOWN_BLOCK_TYPES = 6;
 const SHOWN_BLOCK_PATTERNS = 2;
-const SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION = 4;
 function QuickInserter({
   onSelect,
   rootClientId,
   clientId,
   isAppender,
-  prioritizePatterns,
   selectBlockOnInsert,
   hasSearch = true
 }) {
@@ -47854,7 +51952,6 @@
     selectBlockOnInsert
   });
   const [blockTypes] = use_block_types_state(destinationRootClientId, onInsertBlocks, true);
-  const [patterns] = use_patterns_state(onInsertBlocks, destinationRootClientId);
   const {
     setInserterIsOpened,
     insertionIndex
@@ -47872,8 +51969,7 @@
       insertionIndex: index === -1 ? blockCount : index
     };
   }, [clientId]);
-  const showPatterns = patterns.length && (!!filterValue || prioritizePatterns);
-  const showSearch = hasSearch && (showPatterns && patterns.length > SEARCH_THRESHOLD || blockTypes.length > SEARCH_THRESHOLD);
+  const showSearch = hasSearch && blockTypes.length > SEARCH_THRESHOLD;
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     if (setInserterIsOpened) {
       setInserterIsOpened(false);
@@ -47884,15 +51980,12 @@
   // the insertion point can work as expected.
   const onBrowseAll = () => {
     setInserterIsOpened({
+      filterValue,
+      onSelect,
       rootClientId,
-      insertionIndex,
-      filterValue
-    });
-  };
-  let maxBlockPatterns = 0;
-  if (showPatterns) {
-    maxBlockPatterns = prioritizePatterns ? SHOWN_BLOCK_PATTERNS_WITH_PRIORITIZATION : SHOWN_BLOCK_PATTERNS;
-  }
+      insertionIndex
+    });
+  };
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: dist_clsx('block-editor-inserter__quick-inserter', {
       'has-search': showSearch,
@@ -47905,24 +51998,24 @@
       onChange: value => {
         setFilterValue(value);
       },
-      label: (0,external_wp_i18n_namespaceObject.__)('Search for blocks and patterns'),
+      label: (0,external_wp_i18n_namespaceObject.__)('Search'),
       placeholder: (0,external_wp_i18n_namespaceObject.__)('Search')
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-inserter__quick-inserter-results",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(search_results, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter_search_results, {
         filterValue: filterValue,
         onSelect: onSelect,
         rootClientId: rootClientId,
         clientId: clientId,
         isAppender: isAppender,
-        maxBlockPatterns: maxBlockPatterns,
-        maxBlockTypes: quick_inserter_SHOWN_BLOCK_TYPES,
+        maxBlockPatterns: !!filterValue ? SHOWN_BLOCK_PATTERNS : 0,
+        maxBlockTypes: SHOWN_BLOCK_TYPES,
         isDraggable: false,
-        prioritizePatterns: prioritizePatterns,
         selectBlockOnInsert: selectBlockOnInsert,
         isQuick: true
       })
     }), setInserterIsOpened && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       className: "block-editor-inserter__quick-inserter-expand",
       onClick: onBrowseAll,
       "aria-label": (0,external_wp_i18n_namespaceObject.__)('Browse all. This will open the main inserter panel in the editor toolbar.'),
@@ -47931,7 +52024,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/index.js
 /**
  * External dependencies
  */
@@ -47962,8 +52055,7 @@
   isOpen,
   blockTitle,
   hasSingleBlockType,
-  toggleProps = {},
-  prioritizePatterns
+  toggleProps = {}
 }) => {
   const {
     as: Wrapper = external_wp_components_namespaceObject.Button,
@@ -47976,8 +52068,6 @@
     label = (0,external_wp_i18n_namespaceObject.sprintf)(
     // translators: %s: the name of the block when there is only one
     (0,external_wp_i18n_namespaceObject._x)('Add %s', 'directly add the only allowed block'), blockTitle);
-  } else if (!label && prioritizePatterns) {
-    label = (0,external_wp_i18n_namespaceObject.__)('Add pattern');
   } else if (!label) {
     label = (0,external_wp_i18n_namespaceObject._x)('Add block', 'Generic label for block inserter button');
   }
@@ -47992,6 +52082,7 @@
     }
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Wrapper, {
+    __next40pxDefaultSize: toggleProps.as ? undefined : true,
     icon: library_plus,
     label: label,
     tooltipPosition: "bottom",
@@ -48003,7 +52094,7 @@
     ...rest
   });
 };
-class PrivateInserter extends external_wp_element_namespaceObject.Component {
+class Inserter extends external_wp_element_namespaceObject.Component {
   constructor() {
     super(...arguments);
     this.onToggle = this.onToggle.bind(this);
@@ -48042,8 +52133,7 @@
       directInsertBlock,
       toggleProps,
       hasItems,
-      renderToggle = defaultRenderToggle,
-      prioritizePatterns
+      renderToggle = defaultRenderToggle
     } = this.props;
     return renderToggle({
       onToggle,
@@ -48052,8 +52142,7 @@
       blockTitle,
       hasSingleBlockType,
       directInsertBlock,
-      toggleProps,
-      prioritizePatterns
+      toggleProps
     });
   }
 
@@ -48077,7 +52166,6 @@
       // This prop is experimental to give some time for the quick inserter to mature
       // Feel free to make them stable after a few releases.
       __experimentalIsQuick: isQuick,
-      prioritizePatterns,
       onSelectOrClose,
       selectBlockOnInsert
     } = this.props;
@@ -48093,7 +52181,6 @@
         rootClientId: rootClientId,
         clientId: clientId,
         isAppender: isAppender,
-        prioritizePatterns: prioritizePatterns,
         selectBlockOnInsert: selectBlockOnInsert
       });
     }
@@ -48139,7 +52226,7 @@
     });
   }
 }
-const ComposedPrivateInserter = (0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, {
+/* harmony default export */ const inserter = ((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_data_namespaceObject.withSelect)((select, {
   clientId,
   rootClientId,
   shouldDirectInsert = true
@@ -48148,8 +52235,7 @@
     getBlockRootClientId,
     hasInserterItems,
     getAllowedBlocks,
-    getDirectInsertBlock,
-    getSettings
+    getDirectInsertBlock
   } = select(store);
   const {
     getBlockVariations
@@ -48157,7 +52243,6 @@
   rootClientId = rootClientId || getBlockRootClientId(clientId) || undefined;
   const allowedBlocks = getAllowedBlocks(rootClientId);
   const directInsertBlock = shouldDirectInsert && getDirectInsertBlock(rootClientId);
-  const settings = getSettings();
   const hasSingleBlockType = allowedBlocks?.length === 1 && getBlockVariations(allowedBlocks[0].name, 'inserter')?.length === 0;
   let allowedBlockType = false;
   if (hasSingleBlockType) {
@@ -48169,8 +52254,7 @@
     blockTitle: allowedBlockType ? allowedBlockType.title : '',
     allowedBlockType,
     directInsertBlock,
-    rootClientId,
-    prioritizePatterns: settings.__experimentalPreferPatternsOnRoot && !rootClientId
+    rootClientId
   };
 }), (0,external_wp_data_namespaceObject.withDispatch)((dispatch, ownProps, {
   select
@@ -48288,144 +52372,44 @@
   isAppender,
   rootClientId,
   clientId
-}) => hasItems || !isAppender && !rootClientId && !clientId)])(PrivateInserter);
-const Inserter = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComposedPrivateInserter, {
-    ref: ref,
-    ...props
-  });
-});
-/* harmony default export */ const inserter = (Inserter);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/default-block-appender/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-/**
- * Zero width non-breaking space, used as padding for the paragraph when it is
- * empty.
- */
-
-
-const ZWNBSP = '\ufeff';
-function DefaultBlockAppender({
-  rootClientId
-}) {
-  const {
-    showPrompt,
-    isLocked,
-    placeholder
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockCount,
-      getSettings,
-      getTemplateLock
-    } = select(store);
-    const isEmpty = !getBlockCount(rootClientId);
-    const {
-      bodyPlaceholder
-    } = getSettings();
-    return {
-      showPrompt: isEmpty,
-      isLocked: !!getTemplateLock(rootClientId),
-      placeholder: bodyPlaceholder
-    };
-  }, [rootClientId]);
-  const {
-    insertDefaultBlock,
-    startTyping
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  if (isLocked) {
-    return null;
-  }
-  const value = (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(placeholder) || (0,external_wp_i18n_namespaceObject.__)('Type / to choose a block');
-  const onAppend = () => {
-    insertDefaultBlock(undefined, rootClientId);
-    startTyping();
-  };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-    "data-root-client-id": rootClientId || '',
-    className: dist_clsx('block-editor-default-block-appender', {
-      'has-visible-prompt': showPrompt
-    }),
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-      tabIndex: "0"
-      // We want this element to be styled as a paragraph by themes.
-      // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role
-      ,
-      role: "button",
-      "aria-label": (0,external_wp_i18n_namespaceObject.__)('Add default block')
-      // A wrapping container for this one already has the wp-block className.
-      ,
-      className: "block-editor-default-block-appender__content",
-      onKeyDown: event => {
-        if (external_wp_keycodes_namespaceObject.ENTER === event.keyCode || external_wp_keycodes_namespaceObject.SPACE === event.keyCode) {
-          onAppend();
-        }
-      },
-      onClick: () => onAppend(),
-      onFocus: () => {
-        if (showPrompt) {
-          onAppend();
-        }
-      },
-      children: showPrompt ? value : ZWNBSP
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter, {
-      rootClientId: rootClientId,
-      position: "bottom right",
-      isAppender: true,
-      __experimentalIsQuick: true
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/button-block-appender/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-function ButtonBlockAppender({
+}) => hasItems || !isAppender && !rootClientId && !clientId)])(Inserter));
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/button-block-appender/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function button_block_appender_ButtonBlockAppender({
   rootClientId,
   className,
   onFocus,
-  tabIndex
+  tabIndex,
+  onSelect
 }, ref) {
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter, {
     position: "bottom center",
     rootClientId: rootClientId,
     __experimentalIsQuick: true,
+    onSelectOrClose: (...args) => {
+      if (onSelect && typeof onSelect === 'function') {
+        onSelect(...args);
+      }
+    },
     renderToggle: ({
       onToggle,
       disabled,
@@ -48433,16 +52417,12 @@
       blockTitle,
       hasSingleBlockType
     }) => {
-      let label;
-      if (hasSingleBlockType) {
-        label = (0,external_wp_i18n_namespaceObject.sprintf)(
-        // translators: %s: the name of the block when there is only one
-        (0,external_wp_i18n_namespaceObject._x)('Add %s', 'directly add the only allowed block'), blockTitle);
-      } else {
-        label = (0,external_wp_i18n_namespaceObject._x)('Add block', 'Generic label for block inserter button');
-      }
       const isToggleButton = !hasSingleBlockType;
-      let inserterButton = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Button, {
+      const label = hasSingleBlockType ? (0,external_wp_i18n_namespaceObject.sprintf)(
+      // translators: %s: the name of the block when there is only one
+      (0,external_wp_i18n_namespaceObject._x)('Add %s', 'directly add the only allowed block'), blockTitle) : (0,external_wp_i18n_namespaceObject._x)('Add block', 'Generic label for block inserter button');
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         ref: ref,
         onFocus: onFocus,
         tabIndex: tabIndex,
@@ -48455,20 +52435,11 @@
         ,
         disabled: disabled,
         label: label,
-        children: [!hasSingleBlockType && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
-          as: "span",
-          children: label
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+        showTooltip: true,
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
           icon: library_plus
-        })]
-      });
-      if (isToggleButton || hasSingleBlockType) {
-        inserterButton = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
-          text: label,
-          children: inserterButton
-        });
-      }
-      return inserterButton;
+        })
+      });
     },
     isAppender: true
   });
@@ -48484,2465 +52455,3135 @@
     alternative: 'wp.blockEditor.ButtonBlockAppender',
     since: '5.9'
   });
-  return ButtonBlockAppender(props, ref);
+  return button_block_appender_ButtonBlockAppender(props, ref);
 });
 
 /**
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/button-block-appender/README.md
  */
-/* harmony default export */ const button_block_appender = ((0,external_wp_element_namespaceObject.forwardRef)(ButtonBlockAppender));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list-appender/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-function DefaultAppender({
-  rootClientId
-}) {
-  const canInsertDefaultBlock = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).canInsertBlockType((0,external_wp_blocks_namespaceObject.getDefaultBlockName)(), rootClientId));
-  if (canInsertDefaultBlock) {
-    // Render the default block appender if the context supports use
-    // of the default appender.
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultBlockAppender, {
-      rootClientId: rootClientId
-    });
-  }
-
-  // Fallback in case the default block can't be inserted.
+/* harmony default export */ const button_block_appender = ((0,external_wp_element_namespaceObject.forwardRef)(button_block_appender_ButtonBlockAppender));
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/grid-visualizer.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+function GridVisualizer({
+  clientId,
+  contentRef,
+  parentLayout
+}) {
+  const isDistractionFree = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings().isDistractionFree, []);
+  const gridElement = useBlockElement(clientId);
+  if (isDistractionFree || !gridElement) {
+    return null;
+  }
+  const isManualGrid = parentLayout?.isManualPlacement && window.__experimentalEnableGridInteractivity;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerGrid, {
+    gridClientId: clientId,
+    gridElement: gridElement,
+    isManualGrid: isManualGrid,
+    ref: contentRef
+  });
+}
+const GridVisualizerGrid = (0,external_wp_element_namespaceObject.forwardRef)(({
+  gridClientId,
+  gridElement,
+  isManualGrid
+}, ref) => {
+  const [gridInfo, setGridInfo] = (0,external_wp_element_namespaceObject.useState)(() => getGridInfo(gridElement));
+  const [isDroppingAllowed, setIsDroppingAllowed] = (0,external_wp_element_namespaceObject.useState)(false);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const resizeCallback = () => setGridInfo(getGridInfo(gridElement));
+    // Both border-box and content-box are observed as they may change
+    // independently. This requires two observers because a single one
+    // can’t be made to monitor both on the same element.
+    const borderBoxSpy = new window.ResizeObserver(resizeCallback);
+    borderBoxSpy.observe(gridElement, {
+      box: 'border-box'
+    });
+    const contentBoxSpy = new window.ResizeObserver(resizeCallback);
+    contentBoxSpy.observe(gridElement);
+    return () => {
+      borderBoxSpy.disconnect();
+      contentBoxSpy.disconnect();
+    };
+  }, [gridElement]);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    function onGlobalDrag() {
+      setIsDroppingAllowed(true);
+    }
+    function onGlobalDragEnd() {
+      setIsDroppingAllowed(false);
+    }
+    document.addEventListener('drag', onGlobalDrag);
+    document.addEventListener('dragend', onGlobalDragEnd);
+    return () => {
+      document.removeEventListener('drag', onGlobalDrag);
+      document.removeEventListener('dragend', onGlobalDragEnd);
+    };
+  }, []);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
+    className: dist_clsx('block-editor-grid-visualizer', {
+      'is-dropping-allowed': isDroppingAllowed
+    }),
+    clientId: gridClientId,
+    __unstablePopoverSlot: "__unstable-block-tools-after",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      ref: ref,
+      className: "block-editor-grid-visualizer__grid",
+      style: gridInfo.style,
+      children: isManualGrid ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ManualGridVisualizer, {
+        gridClientId: gridClientId,
+        gridInfo: gridInfo
+      }) : Array.from({
+        length: gridInfo.numItems
+      }, (_, i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerCell, {
+        color: gridInfo.currentColor
+      }, i))
+    })
+  });
+});
+function ManualGridVisualizer({
+  gridClientId,
+  gridInfo
+}) {
+  const [highlightedRect, setHighlightedRect] = (0,external_wp_element_namespaceObject.useState)(null);
+  const gridItemStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockOrder,
+      getBlockStyles
+    } = unlock(select(store));
+    const blockOrder = getBlockOrder(gridClientId);
+    return getBlockStyles(blockOrder);
+  }, [gridClientId]);
+  const occupiedRects = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    const rects = [];
+    for (const style of Object.values(gridItemStyles)) {
+      var _style$layout;
+      const {
+        columnStart,
+        rowStart,
+        columnSpan = 1,
+        rowSpan = 1
+      } = (_style$layout = style?.layout) !== null && _style$layout !== void 0 ? _style$layout : {};
+      if (!columnStart || !rowStart) {
+        continue;
+      }
+      rects.push(new GridRect({
+        columnStart,
+        rowStart,
+        columnSpan,
+        rowSpan
+      }));
+    }
+    return rects;
+  }, [gridItemStyles]);
+  return range(1, gridInfo.numRows).map(row => range(1, gridInfo.numColumns).map(column => {
+    var _highlightedRect$cont;
+    const isCellOccupied = occupiedRects.some(rect => rect.contains(column, row));
+    const isHighlighted = (_highlightedRect$cont = highlightedRect?.contains(column, row)) !== null && _highlightedRect$cont !== void 0 ? _highlightedRect$cont : false;
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerCell, {
+      color: gridInfo.currentColor,
+      className: isHighlighted && 'is-highlighted',
+      children: isCellOccupied ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerDropZone, {
+        column: column,
+        row: row,
+        gridClientId: gridClientId,
+        gridInfo: gridInfo,
+        setHighlightedRect: setHighlightedRect
+      }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizerAppender, {
+        column: column,
+        row: row,
+        gridClientId: gridClientId,
+        gridInfo: gridInfo,
+        setHighlightedRect: setHighlightedRect
+      })
+    }, `${row}-${column}`);
+  }));
+}
+function GridVisualizerCell({
+  color,
+  children,
+  className
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    className: dist_clsx('block-editor-grid-visualizer__cell', className),
+    style: {
+      boxShadow: `inset 0 0 0 1px color-mix(in srgb, ${color} 20%, #0000)`,
+      color
+    },
+    children: children
+  });
+}
+function useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect) {
+  const {
+    getBlockAttributes,
+    getBlockRootClientId,
+    canInsertBlockType,
+    getBlockName
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const {
+    updateBlockAttributes,
+    moveBlocksToPosition,
+    __unstableMarkNextChangeAsNotPersistent
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, gridInfo.numColumns);
+  return useDropZoneWithValidation({
+    validateDrag(srcClientId) {
+      const blockName = getBlockName(srcClientId);
+      if (!canInsertBlockType(blockName, gridClientId)) {
+        return false;
+      }
+      const attributes = getBlockAttributes(srcClientId);
+      const rect = new GridRect({
+        columnStart: column,
+        rowStart: row,
+        columnSpan: attributes.style?.layout?.columnSpan,
+        rowSpan: attributes.style?.layout?.rowSpan
+      });
+      const isInBounds = new GridRect({
+        columnSpan: gridInfo.numColumns,
+        rowSpan: gridInfo.numRows
+      }).containsRect(rect);
+      return isInBounds;
+    },
+    onDragEnter(srcClientId) {
+      const attributes = getBlockAttributes(srcClientId);
+      setHighlightedRect(new GridRect({
+        columnStart: column,
+        rowStart: row,
+        columnSpan: attributes.style?.layout?.columnSpan,
+        rowSpan: attributes.style?.layout?.rowSpan
+      }));
+    },
+    onDragLeave() {
+      // onDragEnter can be called before onDragLeave if the user moves
+      // their mouse quickly, so only clear the highlight if it was set
+      // by this cell.
+      setHighlightedRect(prevHighlightedRect => prevHighlightedRect?.columnStart === column && prevHighlightedRect?.rowStart === row ? null : prevHighlightedRect);
+    },
+    onDrop(srcClientId) {
+      setHighlightedRect(null);
+      const attributes = getBlockAttributes(srcClientId);
+      updateBlockAttributes(srcClientId, {
+        style: {
+          ...attributes.style,
+          layout: {
+            ...attributes.style?.layout,
+            columnStart: column,
+            rowStart: row
+          }
+        }
+      });
+      __unstableMarkNextChangeAsNotPersistent();
+      moveBlocksToPosition([srcClientId], getBlockRootClientId(srcClientId), gridClientId, getNumberOfBlocksBeforeCell(column, row));
+    }
+  });
+}
+function GridVisualizerDropZone({
+  column,
+  row,
+  gridClientId,
+  gridInfo,
+  setHighlightedRect
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+    className: "block-editor-grid-visualizer__drop-zone",
+    ref: useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect)
+  });
+}
+function GridVisualizerAppender({
+  column,
+  row,
+  gridClientId,
+  gridInfo,
+  setHighlightedRect
+}) {
+  const {
+    updateBlockAttributes,
+    moveBlocksToPosition,
+    __unstableMarkNextChangeAsNotPersistent
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, gridInfo.numColumns);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(button_block_appender, {
-    rootClientId: rootClientId,
-    className: "block-list-appender__toggle"
-  });
-}
-function BlockListAppender({
-  rootClientId,
-  CustomAppender,
+    rootClientId: gridClientId,
+    className: "block-editor-grid-visualizer__appender",
+    ref: useGridVisualizerDropZone(column, row, gridClientId, gridInfo, setHighlightedRect),
+    style: {
+      color: gridInfo.currentColor
+    },
+    onSelect: block => {
+      if (!block) {
+        return;
+      }
+      updateBlockAttributes(block.clientId, {
+        style: {
+          layout: {
+            columnStart: column,
+            rowStart: row
+          }
+        }
+      });
+      __unstableMarkNextChangeAsNotPersistent();
+      moveBlocksToPosition([block.clientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(column, row));
+    }
+  });
+}
+function useDropZoneWithValidation({
+  validateDrag,
+  onDragEnter,
+  onDragLeave,
+  onDrop
+}) {
+  const {
+    getDraggedBlockClientIds
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  return (0,external_wp_compose_namespaceObject.__experimentalUseDropZone)({
+    onDragEnter() {
+      const [srcClientId] = getDraggedBlockClientIds();
+      if (srcClientId && validateDrag(srcClientId)) {
+        onDragEnter(srcClientId);
+      }
+    },
+    onDragLeave() {
+      onDragLeave();
+    },
+    onDrop() {
+      const [srcClientId] = getDraggedBlockClientIds();
+      if (srcClientId && validateDrag(srcClientId)) {
+        onDrop(srcClientId);
+      }
+    }
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/grid-item-resizer.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+function GridItemResizer({
+  clientId,
+  bounds,
+  onChange,
+  parentLayout
+}) {
+  const blockElement = useBlockElement(clientId);
+  const rootBlockElement = blockElement?.parentElement;
+  const {
+    isManualPlacement
+  } = parentLayout;
+  if (!blockElement || !rootBlockElement) {
+    return null;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemResizerInner, {
+    clientId: clientId,
+    bounds: bounds,
+    blockElement: blockElement,
+    rootBlockElement: rootBlockElement,
+    onChange: onChange,
+    isManualGrid: isManualPlacement && window.__experimentalEnableGridInteractivity
+  });
+}
+function GridItemResizerInner({
+  clientId,
+  bounds,
+  blockElement,
+  rootBlockElement,
+  onChange,
+  isManualGrid
+}) {
+  const [resizeDirection, setResizeDirection] = (0,external_wp_element_namespaceObject.useState)(null);
+  const [enableSide, setEnableSide] = (0,external_wp_element_namespaceObject.useState)({
+    top: false,
+    bottom: false,
+    left: false,
+    right: false
+  });
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const observer = new window.ResizeObserver(() => {
+      const blockClientRect = blockElement.getBoundingClientRect();
+      const rootBlockClientRect = rootBlockElement.getBoundingClientRect();
+      setEnableSide({
+        top: blockClientRect.top > rootBlockClientRect.top,
+        bottom: blockClientRect.bottom < rootBlockClientRect.bottom,
+        left: blockClientRect.left > rootBlockClientRect.left,
+        right: blockClientRect.right < rootBlockClientRect.right
+      });
+    });
+    observer.observe(blockElement);
+    return () => observer.disconnect();
+  }, [blockElement, rootBlockElement]);
+  const justification = {
+    right: 'left',
+    left: 'right'
+  };
+  const alignment = {
+    top: 'flex-end',
+    bottom: 'flex-start'
+  };
+  const styles = {
+    display: 'flex',
+    justifyContent: 'center',
+    alignItems: 'center',
+    ...(justification[resizeDirection] && {
+      justifyContent: justification[resizeDirection]
+    }),
+    ...(alignment[resizeDirection] && {
+      alignItems: alignment[resizeDirection]
+    })
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
+    className: "block-editor-grid-item-resizer",
+    clientId: clientId,
+    __unstablePopoverSlot: "__unstable-block-tools-after",
+    additionalStyles: styles,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ResizableBox, {
+      className: "block-editor-grid-item-resizer__box",
+      size: {
+        width: '100%',
+        height: '100%'
+      },
+      enable: {
+        bottom: enableSide.bottom,
+        bottomLeft: false,
+        bottomRight: false,
+        left: enableSide.left,
+        right: enableSide.right,
+        top: enableSide.top,
+        topLeft: false,
+        topRight: false
+      },
+      bounds: bounds,
+      boundsByDirection: true,
+      onPointerDown: ({
+        target,
+        pointerId
+      }) => {
+        /*
+         * Captures the pointer to avoid hiccups while dragging over objects
+         * like iframes and ensures that the event to end the drag is
+         * captured by the target (resize handle) whether or not it’s under
+         * the pointer.
+         */
+        target.setPointerCapture(pointerId);
+      },
+      onResizeStart: (event, direction) => {
+        /*
+         * The container justification and alignment need to be set
+         * according to the direction the resizer is being dragged in,
+         * so that it resizes in the right direction.
+         */
+        setResizeDirection(direction);
+      },
+      onResizeStop: (event, direction, boxElement) => {
+        const columnGap = parseFloat(utils_getComputedCSS(rootBlockElement, 'column-gap'));
+        const rowGap = parseFloat(utils_getComputedCSS(rootBlockElement, 'row-gap'));
+        const gridColumnTracks = getGridTracks(utils_getComputedCSS(rootBlockElement, 'grid-template-columns'), columnGap);
+        const gridRowTracks = getGridTracks(utils_getComputedCSS(rootBlockElement, 'grid-template-rows'), rowGap);
+        const rect = new window.DOMRect(blockElement.offsetLeft + boxElement.offsetLeft, blockElement.offsetTop + boxElement.offsetTop, boxElement.offsetWidth, boxElement.offsetHeight);
+        const columnStart = getClosestTrack(gridColumnTracks, rect.left) + 1;
+        const rowStart = getClosestTrack(gridRowTracks, rect.top) + 1;
+        const columnEnd = getClosestTrack(gridColumnTracks, rect.right, 'end') + 1;
+        const rowEnd = getClosestTrack(gridRowTracks, rect.bottom, 'end') + 1;
+        onChange({
+          columnSpan: columnEnd - columnStart + 1,
+          rowSpan: rowEnd - rowStart + 1,
+          columnStart: isManualGrid ? columnStart : undefined,
+          rowStart: isManualGrid ? rowStart : undefined
+        });
+      }
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-up.js
+/**
+ * WordPress dependencies
+ */
+
+
+const chevronUp = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"
+  })
+});
+/* harmony default export */ const chevron_up = (chevronUp);
+
+;// ./node_modules/@wordpress/icons/build-module/library/chevron-down.js
+/**
+ * WordPress dependencies
+ */
+
+
+const chevronDown = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"
+  })
+});
+/* harmony default export */ const chevron_down = (chevronDown);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/grid-item-movers.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+function GridItemMovers({
+  layout,
+  parentLayout,
+  onChange,
+  gridClientId,
+  blockClientId
+}) {
+  var _layout$columnStart, _layout$rowStart, _layout$columnSpan, _layout$rowSpan;
+  const {
+    moveBlocksToPosition,
+    __unstableMarkNextChangeAsNotPersistent
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const columnStart = (_layout$columnStart = layout?.columnStart) !== null && _layout$columnStart !== void 0 ? _layout$columnStart : 1;
+  const rowStart = (_layout$rowStart = layout?.rowStart) !== null && _layout$rowStart !== void 0 ? _layout$rowStart : 1;
+  const columnSpan = (_layout$columnSpan = layout?.columnSpan) !== null && _layout$columnSpan !== void 0 ? _layout$columnSpan : 1;
+  const rowSpan = (_layout$rowSpan = layout?.rowSpan) !== null && _layout$rowSpan !== void 0 ? _layout$rowSpan : 1;
+  const columnEnd = columnStart + columnSpan - 1;
+  const rowEnd = rowStart + rowSpan - 1;
+  const columnCount = parentLayout?.columnCount;
+  const rowCount = parentLayout?.rowCount;
+  const getNumberOfBlocksBeforeCell = useGetNumberOfBlocksBeforeCell(gridClientId, columnCount);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_controls, {
+    group: "parent",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.ToolbarGroup, {
+      className: "block-editor-grid-item-mover__move-button-container",
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+        className: "block-editor-grid-item-mover__move-horizontal-button-container is-left",
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemMover, {
+          icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
+          label: (0,external_wp_i18n_namespaceObject.__)('Move left'),
+          description: (0,external_wp_i18n_namespaceObject.__)('Move left'),
+          isDisabled: columnStart <= 1,
+          onClick: () => {
+            onChange({
+              columnStart: columnStart - 1
+            });
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([blockClientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(columnStart - 1, rowStart));
+          }
+        })
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+        className: "block-editor-grid-item-mover__move-vertical-button-container",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemMover, {
+          className: "is-up-button",
+          icon: chevron_up,
+          label: (0,external_wp_i18n_namespaceObject.__)('Move up'),
+          description: (0,external_wp_i18n_namespaceObject.__)('Move up'),
+          isDisabled: rowStart <= 1,
+          onClick: () => {
+            onChange({
+              rowStart: rowStart - 1
+            });
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([blockClientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(columnStart, rowStart - 1));
+          }
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemMover, {
+          className: "is-down-button",
+          icon: chevron_down,
+          label: (0,external_wp_i18n_namespaceObject.__)('Move down'),
+          description: (0,external_wp_i18n_namespaceObject.__)('Move down'),
+          isDisabled: rowCount && rowEnd >= rowCount,
+          onClick: () => {
+            onChange({
+              rowStart: rowStart + 1
+            });
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([blockClientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(columnStart, rowStart + 1));
+          }
+        })]
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+        className: "block-editor-grid-item-mover__move-horizontal-button-container is-right",
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemMover, {
+          icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right,
+          label: (0,external_wp_i18n_namespaceObject.__)('Move right'),
+          description: (0,external_wp_i18n_namespaceObject.__)('Move right'),
+          isDisabled: columnCount && columnEnd >= columnCount,
+          onClick: () => {
+            onChange({
+              columnStart: columnStart + 1
+            });
+            __unstableMarkNextChangeAsNotPersistent();
+            moveBlocksToPosition([blockClientId], gridClientId, gridClientId, getNumberOfBlocksBeforeCell(columnStart + 1, rowStart));
+          }
+        })
+      })]
+    })
+  });
+}
+function GridItemMover({
   className,
-  tagName: TagName = 'div'
-}) {
-  const isDragOver = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockInsertionPoint,
-      isBlockInsertionPointVisible,
-      getBlockCount
-    } = select(store);
-    const insertionPoint = getBlockInsertionPoint();
-    // Ideally we should also check for `isDragging` but currently it
-    // requires a lot more setup. We can revisit this once we refactor
-    // the DnD utility hooks.
-    return isBlockInsertionPointVisible() && rootClientId === insertionPoint?.rootClientId && getBlockCount(rootClientId) === 0;
-  }, [rootClientId]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(TagName
-  // A `tabIndex` is used on the wrapping `div` element in order to
-  // force a focus event to occur when an appender `button` element
-  // is clicked. In some browsers (Firefox, Safari), button clicks do
-  // not emit a focus event, which could cause this event to propagate
-  // unexpectedly. The `tabIndex` ensures that the interaction is
-  // captured as a focus, without also adding an extra tab stop.
-  //
-  // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
-  , {
-    tabIndex: -1,
-    className: dist_clsx('block-list-appender wp-block', className, {
-      'is-drag-over': isDragOver
-    })
-    // Needed in case the whole editor is content editable (for multi
-    // selection). It fixes an edge case where ArrowDown and ArrowRight
-    // should collapse the selection to the end of that selection and
-    // not into the appender.
-    ,
-    contentEditable: false
-    // The appender exists to let you add the first Paragraph before
-    // any is inserted. To that end, this appender should visually be
-    // presented as a block. That means theme CSS should style it as if
-    // it were an empty paragraph block. That means a `wp-block` class to
-    // ensure the width is correct, and a [data-block] attribute to ensure
-    // the correct margin is applied, especially for classic themes which
-    // have commonly targeted that attribute for margins.
-    ,
-    "data-block": true,
-    children: CustomAppender ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CustomAppender, {}) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultAppender, {
-      rootClientId: rootClientId
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-popover/inbetween.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const inbetween_MAX_POPOVER_RECOMPUTE_COUNTER = Number.MAX_SAFE_INTEGER;
-const InsertionPointOpenRef = (0,external_wp_element_namespaceObject.createContext)();
-function BlockPopoverInbetween({
-  previousClientId,
-  nextClientId,
-  children,
-  __unstablePopoverSlot,
-  __unstableContentRef,
-  operation = 'insert',
-  nearestSide = 'right',
-  ...props
-}) {
-  // This is a temporary hack to get the inbetween inserter to recompute properly.
-  const [popoverRecomputeCounter, forcePopoverRecompute] = (0,external_wp_element_namespaceObject.useReducer)(
-  // Module is there to make sure that the counter doesn't overflow.
-  s => (s + 1) % inbetween_MAX_POPOVER_RECOMPUTE_COUNTER, 0);
-  const {
-    orientation,
+  icon,
+  label,
+  isDisabled,
+  onClick,
+  description
+}) {
+  const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(GridItemMover);
+  const descriptionId = `block-editor-grid-item-mover-button__description-${instanceId}`;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+      className: dist_clsx('block-editor-grid-item-mover-button', className),
+      icon: icon,
+      label: label,
+      "aria-describedby": descriptionId,
+      onClick: isDisabled ? null : onClick,
+      disabled: isDisabled,
+      accessibleWhenDisabled: true
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
+      id: descriptionId,
+      children: description
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/layout-child.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+// Used for generating the instance ID
+
+const LAYOUT_CHILD_BLOCK_PROPS_REFERENCE = {};
+function useBlockPropsChildLayoutStyles({
+  style
+}) {
+  var _style$layout;
+  const shouldRenderChildLayoutStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    return !select(store).getSettings().disableLayoutStyles;
+  });
+  const layout = (_style$layout = style?.layout) !== null && _style$layout !== void 0 ? _style$layout : {};
+  const {
+    selfStretch,
+    flexSize,
+    columnStart,
+    rowStart,
+    columnSpan,
+    rowSpan
+  } = layout;
+  const parentLayout = useLayout() || {};
+  const {
+    columnCount,
+    minimumColumnWidth
+  } = parentLayout;
+  const id = (0,external_wp_compose_namespaceObject.useInstanceId)(LAYOUT_CHILD_BLOCK_PROPS_REFERENCE);
+  const selector = `.wp-container-content-${id}`;
+
+  // Check that the grid layout attributes are of the correct type, so that we don't accidentally
+  // write code that stores a string attribute instead of a number.
+  if (false) {}
+  let css = '';
+  if (shouldRenderChildLayoutStyles) {
+    if (selfStretch === 'fixed' && flexSize) {
+      css = `${selector} {
+				flex-basis: ${flexSize};
+				box-sizing: border-box;
+			}`;
+    } else if (selfStretch === 'fill') {
+      css = `${selector} {
+				flex-grow: 1;
+			}`;
+    } else if (columnStart && columnSpan) {
+      css = `${selector} {
+				grid-column: ${columnStart} / span ${columnSpan};
+			}`;
+    } else if (columnStart) {
+      css = `${selector} {
+				grid-column: ${columnStart};
+			}`;
+    } else if (columnSpan) {
+      css = `${selector} {
+				grid-column: span ${columnSpan};
+			}`;
+    }
+    if (rowStart && rowSpan) {
+      css += `${selector} {
+				grid-row: ${rowStart} / span ${rowSpan};
+			}`;
+    } else if (rowStart) {
+      css += `${selector} {
+				grid-row: ${rowStart};
+			}`;
+    } else if (rowSpan) {
+      css += `${selector} {
+				grid-row: span ${rowSpan};
+			}`;
+    }
+    /**
+     * If minimumColumnWidth is set on the parent, or if no
+     * columnCount is set, the grid is responsive so a
+     * container query is needed for the span to resize.
+     */
+    if ((columnSpan || columnStart) && (minimumColumnWidth || !columnCount)) {
+      let parentColumnValue = parseFloat(minimumColumnWidth);
+      /**
+       * 12rem is the default minimumColumnWidth value.
+       * If parentColumnValue is not a number, default to 12.
+       */
+      if (isNaN(parentColumnValue)) {
+        parentColumnValue = 12;
+      }
+      let parentColumnUnit = minimumColumnWidth?.replace(parentColumnValue, '');
+      /**
+       * Check that parent column unit is either 'px', 'rem' or 'em'.
+       * If not, default to 'rem'.
+       */
+      if (!['px', 'rem', 'em'].includes(parentColumnUnit)) {
+        parentColumnUnit = 'rem';
+      }
+      let numColsToBreakAt = 2;
+      if (columnSpan && columnStart) {
+        numColsToBreakAt = columnSpan + columnStart - 1;
+      } else if (columnSpan) {
+        numColsToBreakAt = columnSpan;
+      } else {
+        numColsToBreakAt = columnStart;
+      }
+      const defaultGapValue = parentColumnUnit === 'px' ? 24 : 1.5;
+      const containerQueryValue = numColsToBreakAt * parentColumnValue + (numColsToBreakAt - 1) * defaultGapValue;
+      // For blocks that only span one column, we want to remove any rowStart values as
+      // the container reduces in size, so that blocks are still arranged in markup order.
+      const minimumContainerQueryValue = parentColumnValue * 2 + defaultGapValue - 1;
+      // If a span is set we want to preserve it as long as possible, otherwise we just reset the value.
+      const gridColumnValue = columnSpan && columnSpan > 1 ? '1/-1' : 'auto';
+      css += `@container (max-width: ${Math.max(containerQueryValue, minimumContainerQueryValue)}${parentColumnUnit}) {
+				${selector} {
+					grid-column: ${gridColumnValue};
+					grid-row: auto;
+				}
+			}`;
+    }
+  }
+  useStyleOverride({
+    css
+  });
+
+  // Only attach a container class if there is generated CSS to be attached.
+  if (!css) {
+    return;
+  }
+
+  // Attach a `wp-container-content` id-based classname.
+  return {
+    className: `wp-container-content-${id}`
+  };
+}
+function ChildLayoutControlsPure({
+  clientId,
+  style,
+  setAttributes
+}) {
+  const parentLayout = useLayout() || {};
+  const {
+    type: parentLayoutType = 'default',
+    allowSizingOnChildren = false,
+    isManualPlacement
+  } = parentLayout;
+  if (parentLayoutType !== 'grid') {
+    return null;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridTools, {
+    clientId: clientId,
+    style: style,
+    setAttributes: setAttributes,
+    allowSizingOnChildren: allowSizingOnChildren,
+    isManualPlacement: isManualPlacement,
+    parentLayout: parentLayout
+  });
+}
+function GridTools({
+  clientId,
+  style,
+  setAttributes,
+  allowSizingOnChildren,
+  isManualPlacement,
+  parentLayout
+}) {
+  const {
     rootClientId,
     isVisible
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getBlockListSettings,
       getBlockRootClientId,
-      isBlockVisible
-    } = select(store);
-    const _rootClientId = getBlockRootClientId(previousClientId !== null && previousClientId !== void 0 ? previousClientId : nextClientId);
-    return {
-      orientation: getBlockListSettings(_rootClientId)?.orientation || 'vertical',
-      rootClientId: _rootClientId,
-      isVisible: isBlockVisible(previousClientId) && isBlockVisible(nextClientId)
-    };
-  }, [previousClientId, nextClientId]);
-  const previousElement = useBlockElement(previousClientId);
-  const nextElement = useBlockElement(nextClientId);
-  const isVertical = orientation === 'vertical';
-  const popoverAnchor = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    if (
-    // popoverRecomputeCounter is by definition always equal or greater than 0.
-    // This check is only there to satisfy the correctness of the
-    // exhaustive-deps rule for the `useMemo` hook.
-    popoverRecomputeCounter < 0 || !previousElement && !nextElement || !isVisible) {
-      return undefined;
-    }
-    const contextElement = operation === 'group' ? nextElement || previousElement : previousElement || nextElement;
-    return {
-      contextElement,
-      getBoundingClientRect() {
-        const previousRect = previousElement ? previousElement.getBoundingClientRect() : null;
-        const nextRect = nextElement ? nextElement.getBoundingClientRect() : null;
-        let left = 0;
-        let top = 0;
-        let width = 0;
-        let height = 0;
-        if (operation === 'group') {
-          const targetRect = nextRect || previousRect;
-          top = targetRect.top;
-          // No spacing is likely around blocks in this operation.
-          // So width of the inserter containing rect is set to 0.
-          width = 0;
-          height = targetRect.bottom - targetRect.top;
-          // Popover calculates its distance from mid-block so some
-          // adjustments are needed to make it appear in the right place.
-          left = nearestSide === 'left' ? targetRect.left - 2 : targetRect.right - 2;
-        } else if (isVertical) {
-          // vertical
-          top = previousRect ? previousRect.bottom : nextRect.top;
-          width = previousRect ? previousRect.width : nextRect.width;
-          height = nextRect && previousRect ? nextRect.top - previousRect.bottom : 0;
-          left = previousRect ? previousRect.left : nextRect.left;
-        } else {
-          top = previousRect ? previousRect.top : nextRect.top;
-          height = previousRect ? previousRect.height : nextRect.height;
-          if ((0,external_wp_i18n_namespaceObject.isRTL)()) {
-            // non vertical, rtl
-            left = nextRect ? nextRect.right : previousRect.left;
-            width = previousRect && nextRect ? previousRect.left - nextRect.right : 0;
-          } else {
-            // non vertical, ltr
-            left = previousRect ? previousRect.right : nextRect.left;
-            width = previousRect && nextRect ? nextRect.left - previousRect.right : 0;
-          }
-        }
-        return new window.DOMRect(left, top, width, height);
-      }
-    };
-  }, [previousElement, nextElement, popoverRecomputeCounter, isVertical, isVisible, operation, nearestSide]);
-  const popoverScrollRef = use_popover_scroll(__unstableContentRef);
-
-  // This is only needed for a smooth transition when moving blocks.
-  // When blocks are moved up/down, their position can be set by
-  // updating the `transform` property manually (i.e. without using CSS
-  // transitions or animations). The animation, which can also scroll the block
-  // editor, can sometimes cause the position of the Popover to get out of sync.
-  // A MutationObserver is therefore used to make sure that changes to the
-  // selectedElement's attribute (i.e. `transform`) can be tracked and used to
-  // trigger the Popover to rerender.
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    if (!previousElement) {
-      return;
-    }
-    const observer = new window.MutationObserver(forcePopoverRecompute);
-    observer.observe(previousElement, {
-      attributes: true
-    });
-    return () => {
-      observer.disconnect();
-    };
-  }, [previousElement]);
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    if (!nextElement) {
-      return;
-    }
-    const observer = new window.MutationObserver(forcePopoverRecompute);
-    observer.observe(nextElement, {
-      attributes: true
-    });
-    return () => {
-      observer.disconnect();
-    };
-  }, [nextElement]);
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    if (!previousElement) {
-      return;
-    }
-    previousElement.ownerDocument.defaultView.addEventListener('resize', forcePopoverRecompute);
-    return () => {
-      previousElement.ownerDocument.defaultView?.removeEventListener('resize', forcePopoverRecompute);
-    };
-  }, [previousElement]);
-
-  // If there's either a previous or a next element, show the inbetween popover.
-  // Note that drag and drop uses the inbetween popover to show the drop indicator
-  // before the first block and after the last block.
-  if (!previousElement && !nextElement || !isVisible) {
-    return null;
-  }
-
-  /* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
-  // While ideally it would be enough to capture the
-  // bubbling focus event from the Inserter, due to the
-  // characteristics of click focusing of `button`s in
-  // Firefox and Safari, it is not reliable.
-  //
-  // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Clicking_and_focus
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
-    ref: popoverScrollRef,
-    animate: false,
-    anchor: popoverAnchor,
-    focusOnMount: false
-    // Render in the old slot if needed for backward compatibility,
-    // otherwise render in place (not in the default popover slot).
-    ,
-    __unstableSlotName: __unstablePopoverSlot,
-    inline: !__unstablePopoverSlot
-    // Forces a remount of the popover when its position changes
-    // This makes sure the popover doesn't animate from its previous position.
-    ,
-    ...props,
-    className: dist_clsx('block-editor-block-popover', 'block-editor-block-popover__inbetween', props.className),
-    resize: false,
-    flip: false,
-    placement: "overlay",
-    variant: "unstyled",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-block-popover__inbetween-container",
-      children: children
-    })
-  }, nextClientId + '--' + rootClientId);
-  /* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */
-}
-/* harmony default export */ const inbetween = (BlockPopoverInbetween);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-popover/drop-zone.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const animateVariants = {
-  hide: {
-    opacity: 0,
-    scaleY: 0.75
-  },
-  show: {
-    opacity: 1,
-    scaleY: 1
-  },
-  exit: {
-    opacity: 0,
-    scaleY: 0.9
-  }
-};
-function BlockDropZonePopover({
-  __unstablePopoverSlot,
-  __unstableContentRef
-}) {
-  const {
-    clientId
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockOrder,
-      getBlockInsertionPoint
-    } = select(store);
-    const insertionPoint = getBlockInsertionPoint();
-    const order = getBlockOrder(insertionPoint.rootClientId);
-    if (!order.length) {
-      return {};
-    }
-    return {
-      clientId: order[insertionPoint.index]
-    };
-  }, []);
-  const reducedMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(cover, {
-    clientId: clientId,
-    __unstablePopoverSlot: __unstablePopoverSlot,
-    __unstableContentRef: __unstableContentRef,
-    className: "block-editor-block-popover__drop-zone",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
-      "data-testid": "block-popover-drop-zone",
-      initial: reducedMotion ? animateVariants.show : animateVariants.hide,
-      animate: animateVariants.show,
-      exit: reducedMotion ? animateVariants.show : animateVariants.exit,
-      className: "block-editor-block-popover__drop-zone-foreground"
-    })
-  });
-}
-/* harmony default export */ const drop_zone = (BlockDropZonePopover);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/insertion-point.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-const insertion_point_InsertionPointOpenRef = (0,external_wp_element_namespaceObject.createContext)();
-function InbetweenInsertionPointPopover({
-  __unstablePopoverSlot,
-  __unstableContentRef,
-  operation = 'insert',
-  nearestSide = 'right'
-}) {
-  const {
-    selectBlock,
-    hideInsertionPoint
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const openRef = (0,external_wp_element_namespaceObject.useContext)(insertion_point_InsertionPointOpenRef);
-  const ref = (0,external_wp_element_namespaceObject.useRef)();
-  const {
-    orientation,
-    previousClientId,
-    nextClientId,
-    rootClientId,
-    isInserterShown,
-    isDistractionFree,
-    isNavigationMode
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockOrder,
-      getBlockListSettings,
-      getBlockInsertionPoint,
-      isBlockBeingDragged,
-      getPreviousBlockClientId,
-      getNextBlockClientId,
-      getSettings,
-      isNavigationMode: _isNavigationMode
+      getBlockEditingMode,
+      getTemplateLock
     } = select(store);
-    const insertionPoint = getBlockInsertionPoint();
-    const order = getBlockOrder(insertionPoint.rootClientId);
-    if (!order.length) {
-      return {};
-    }
-    let _previousClientId = order[insertionPoint.index - 1];
-    let _nextClientId = order[insertionPoint.index];
-    while (isBlockBeingDragged(_previousClientId)) {
-      _previousClientId = getPreviousBlockClientId(_previousClientId);
-    }
-    while (isBlockBeingDragged(_nextClientId)) {
-      _nextClientId = getNextBlockClientId(_nextClientId);
-    }
-    const settings = getSettings();
-    return {
-      previousClientId: _previousClientId,
-      nextClientId: _nextClientId,
-      orientation: getBlockListSettings(insertionPoint.rootClientId)?.orientation || 'vertical',
-      rootClientId: insertionPoint.rootClientId,
-      isNavigationMode: _isNavigationMode(),
-      isDistractionFree: settings.isDistractionFree,
-      isInserterShown: insertionPoint?.__unstableWithInserter
-    };
-  }, []);
-  const {
-    getBlockEditingMode
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const disableMotion = (0,external_wp_compose_namespaceObject.useReducedMotion)();
-  function onClick(event) {
-    if (event.target === ref.current && nextClientId && getBlockEditingMode(nextClientId) !== 'disabled') {
-      selectBlock(nextClientId, -1);
-    }
-  }
-  function maybeHideInserterPoint(event) {
-    // Only hide the inserter if it's triggered on the wrapper,
-    // and the inserter is not open.
-    if (event.target === ref.current && !openRef.current) {
-      hideInsertionPoint();
-    }
-  }
-  function onFocus(event) {
-    // Only handle click on the wrapper specifically, and not an event
-    // bubbled from the inserter itself.
-    if (event.target !== ref.current) {
-      openRef.current = true;
-    }
-  }
-  const lineVariants = {
-    // Initial position starts from the center and invisible.
-    start: {
-      opacity: 0,
-      scale: 0
-    },
-    // The line expands to fill the container. If the inserter is visible it
-    // is delayed so it appears orchestrated.
-    rest: {
-      opacity: 1,
-      scale: 1,
-      transition: {
-        delay: isInserterShown ? 0.5 : 0,
-        type: 'tween'
-      }
-    },
-    hover: {
-      opacity: 1,
-      scale: 1,
-      transition: {
-        delay: 0.5,
-        type: 'tween'
-      }
-    }
-  };
-  const inserterVariants = {
-    start: {
-      scale: disableMotion ? 1 : 0
-    },
-    rest: {
-      scale: 1,
-      transition: {
-        delay: 0.4,
-        type: 'tween'
-      }
-    }
-  };
-  if (isDistractionFree && !isNavigationMode) {
-    return null;
-  }
-  const orientationClassname = orientation === 'horizontal' || operation === 'group' ? 'is-horizontal' : 'is-vertical';
-  const className = dist_clsx('block-editor-block-list__insertion-point', orientationClassname);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inbetween, {
-    previousClientId: previousClientId,
-    nextClientId: nextClientId,
-    __unstablePopoverSlot: __unstablePopoverSlot,
-    __unstableContentRef: __unstableContentRef,
-    operation: operation,
-    nearestSide: nearestSide,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__unstableMotion.div, {
-      layout: !disableMotion,
-      initial: disableMotion ? 'rest' : 'start',
-      animate: "rest",
-      whileHover: "hover",
-      whileTap: "pressed",
-      exit: "start",
-      ref: ref,
-      tabIndex: -1,
-      onClick: onClick,
-      onFocus: onFocus,
-      className: dist_clsx(className, {
-        'is-with-inserter': isInserterShown
-      }),
-      onHoverEnd: maybeHideInserterPoint,
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
-        variants: lineVariants,
-        className: "block-editor-block-list__insertion-point-indicator",
-        "data-testid": "block-list-insertion-point-indicator"
-      }), isInserterShown && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__unstableMotion.div, {
-        variants: inserterVariants,
-        className: dist_clsx('block-editor-block-list__insertion-point-inserter'),
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inserter, {
-          position: "bottom center",
-          clientId: nextClientId,
-          rootClientId: rootClientId,
-          __experimentalIsQuick: true,
-          onToggle: isOpen => {
-            openRef.current = isOpen;
-          },
-          onSelectOrClose: () => {
-            openRef.current = false;
-          }
-        })
-      })]
-    })
-  });
-}
-function InsertionPoint(props) {
-  const {
-    insertionPoint,
-    isVisible,
-    isBlockListEmpty
+    const _rootClientId = getBlockRootClientId(clientId);
+    if (getTemplateLock(_rootClientId) || getBlockEditingMode(_rootClientId) !== 'default') {
+      return {
+        rootClientId: _rootClientId,
+        isVisible: false
+      };
+    }
+    return {
+      rootClientId: _rootClientId,
+      isVisible: true
+    };
+  }, [clientId]);
+
+  // Use useState() instead of useRef() so that GridItemResizer updates when ref is set.
+  const [resizerBounds, setResizerBounds] = (0,external_wp_element_namespaceObject.useState)();
+  if (!isVisible) {
+    return null;
+  }
+  function updateLayout(layout) {
+    setAttributes({
+      style: {
+        ...style,
+        layout: {
+          ...style?.layout,
+          ...layout
+        }
+      }
+    });
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizer, {
+      clientId: rootClientId,
+      contentRef: setResizerBounds,
+      parentLayout: parentLayout
+    }), allowSizingOnChildren && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemResizer, {
+      clientId: clientId
+      // Don't allow resizing beyond the grid visualizer.
+      ,
+      bounds: resizerBounds,
+      onChange: updateLayout,
+      parentLayout: parentLayout
+    }), isManualPlacement && window.__experimentalEnableGridInteractivity && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridItemMovers, {
+      layout: style?.layout,
+      parentLayout: parentLayout,
+      onChange: updateLayout,
+      gridClientId: rootClientId,
+      blockClientId: clientId
+    })]
+  });
+}
+/* harmony default export */ const layout_child = ({
+  useBlockProps: useBlockPropsChildLayoutStyles,
+  edit: ChildLayoutControlsPure,
+  attributeKeys: ['style'],
+  hasSupport() {
+    return true;
+  }
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/content-lock-ui.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+// The implementation of content locking is mainly in this file, although the mechanism
+// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect
+// at block-editor/src/components/block-list/index.js.
+// Besides the components on this file and the file referenced above the implementation
+// also includes artifacts on the store (actions, reducers, and selector).
+
+function ContentLockControlsPure({
+  clientId
+}) {
+  const {
+    templateLock,
+    isLockedByParent,
+    isEditingAsBlocks
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getBlockInsertionPoint,
-      isBlockInsertionPointVisible,
-      getBlockCount
+      getContentLockingParent,
+      getTemplateLock,
+      getTemporarilyEditingAsBlocks
+    } = unlock(select(store));
+    return {
+      templateLock: getTemplateLock(clientId),
+      isLockedByParent: !!getContentLockingParent(clientId),
+      isEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId
+    };
+  }, [clientId]);
+  const {
+    stopEditingAsBlocks
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
+  const isContentLocked = !isLockedByParent && templateLock === 'contentOnly';
+  const stopEditingAsBlockCallback = (0,external_wp_element_namespaceObject.useCallback)(() => {
+    stopEditingAsBlocks(clientId);
+  }, [clientId, stopEditingAsBlocks]);
+  if (!isContentLocked && !isEditingAsBlocks) {
+    return null;
+  }
+  const showStopEditingAsBlocks = isEditingAsBlocks && !isContentLocked;
+  return showStopEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_controls, {
+    group: "other",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+      onClick: stopEditingAsBlockCallback,
+      children: (0,external_wp_i18n_namespaceObject.__)('Done')
+    })
+  });
+}
+/* harmony default export */ const content_lock_ui = ({
+  edit: ContentLockControlsPure,
+  hasSupport() {
+    return true;
+  }
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/metadata.js
+/**
+ * WordPress dependencies
+ */
+
+const META_ATTRIBUTE_NAME = 'metadata';
+
+/**
+ * Filters registered block settings, extending attributes to include `metadata`.
+ *
+ * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012
+ *
+ * @param {Object} blockTypeSettings Original block settings.
+ * @return {Object} Filtered block settings.
+ */
+function addMetaAttribute(blockTypeSettings) {
+  // Allow blocks to specify their own attribute definition with default values if needed.
+  if (blockTypeSettings?.attributes?.[META_ATTRIBUTE_NAME]?.type) {
+    return blockTypeSettings;
+  }
+  blockTypeSettings.attributes = {
+    ...blockTypeSettings.attributes,
+    [META_ATTRIBUTE_NAME]: {
+      type: 'object'
+    }
+  };
+  return blockTypeSettings;
+}
+(0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/metadata/addMetaAttribute', addMetaAttribute);
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/block-hooks.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+const block_hooks_EMPTY_OBJECT = {};
+function BlockHooksControlPure({
+  name,
+  clientId,
+  metadata: {
+    ignoredHookedBlocks = []
+  } = {}
+}) {
+  const blockTypes = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_blocks_namespaceObject.store).getBlockTypes(), []);
+
+  // A hooked block added via a filter will not be exposed through a block
+  // type's `blockHooks` property; however, if the containing layout has been
+  // modified, it will be present in the anchor block's `ignoredHookedBlocks`
+  // metadata.
+  const hookedBlocksForCurrentBlock = (0,external_wp_element_namespaceObject.useMemo)(() => blockTypes?.filter(({
+    name: blockName,
+    blockHooks
+  }) => blockHooks && name in blockHooks || ignoredHookedBlocks.includes(blockName)), [blockTypes, name, ignoredHookedBlocks]);
+  const hookedBlockClientIds = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlocks,
+      getBlockRootClientId,
+      getGlobalBlockCount
     } = select(store);
-    const blockInsertionPoint = getBlockInsertionPoint();
-    return {
-      insertionPoint: blockInsertionPoint,
-      isVisible: isBlockInsertionPointVisible(),
-      isBlockListEmpty: getBlockCount(blockInsertionPoint?.rootClientId) === 0
-    };
-  }, []);
-  if (!isVisible ||
-  // Don't render the insertion point if the block list is empty.
-  // The insertion point will be represented by the appender instead.
-  isBlockListEmpty) {
-    return null;
-  }
-
-  /**
-   * Render a popover that overlays the block when the desired operation is to replace it.
-   * Otherwise, render a popover in between blocks for the indication of inserting between them.
-   */
-  return insertionPoint.operation === 'replace' ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(drop_zone
-  // Force remount to trigger the animation.
-  , {
-    ...props
-  }, `${insertionPoint.rootClientId}-${insertionPoint.index}`) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InbetweenInsertionPointPopover, {
-    operation: insertionPoint.operation,
-    nearestSide: insertionPoint.nearestSide,
-    ...props
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/use-in-between-inserter.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-function useInBetweenInserter() {
-  const openRef = (0,external_wp_element_namespaceObject.useContext)(insertion_point_InsertionPointOpenRef);
-  const isInBetweenInserterDisabled = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSettings().isDistractionFree || select(store).__unstableGetEditorMode() === 'zoom-out', []);
-  const {
-    getBlockListSettings,
+    const rootClientId = getBlockRootClientId(clientId);
+    const _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce((clientIds, block) => {
+      // If the block doesn't exist anywhere in the block tree,
+      // we know that we have to set the toggle to disabled.
+      if (getGlobalBlockCount(block.name) === 0) {
+        return clientIds;
+      }
+      const relativePosition = block?.blockHooks?.[name];
+      let candidates;
+      switch (relativePosition) {
+        case 'before':
+        case 'after':
+          // Any of the current block's siblings (with the right block type) qualifies
+          // as a hooked block (inserted `before` or `after` the current one), as the block
+          // might've been automatically inserted and then moved around a bit by the user.
+          candidates = getBlocks(rootClientId);
+          break;
+        case 'first_child':
+        case 'last_child':
+          // Any of the current block's child blocks (with the right block type) qualifies
+          // as a hooked first or last child block, as the block might've been automatically
+          // inserted and then moved around a bit by the user.
+          candidates = getBlocks(clientId);
+          break;
+        case undefined:
+          // If we haven't found a blockHooks field with a relative position for the hooked
+          // block, it means that it was added by a filter. In this case, we look for the block
+          // both among the current block's siblings and its children.
+          candidates = [...getBlocks(rootClientId), ...getBlocks(clientId)];
+          break;
+      }
+      const hookedBlock = candidates?.find(candidate => candidate.name === block.name);
+
+      // If the block exists in the designated location, we consider it hooked
+      // and show the toggle as enabled.
+      if (hookedBlock) {
+        return {
+          ...clientIds,
+          [block.name]: hookedBlock.clientId
+        };
+      }
+
+      // If no hooked block was found in any of its designated locations,
+      // we set the toggle to disabled.
+      return clientIds;
+    }, {});
+    if (Object.values(_hookedBlockClientIds).length > 0) {
+      return _hookedBlockClientIds;
+    }
+    return block_hooks_EMPTY_OBJECT;
+  }, [hookedBlocksForCurrentBlock, name, clientId]);
+  const {
     getBlockIndex,
-    isMultiSelecting,
-    getSelectedBlockClientIds,
-    getTemplateLock,
-    __unstableIsWithinBlockOverlay,
-    getBlockEditingMode,
-    getBlockName
+    getBlockCount,
+    getBlockRootClientId
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const {
-    showInsertionPoint,
-    hideInsertionPoint
+    insertBlock,
+    removeBlock
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    if (isInBetweenInserterDisabled) {
-      return;
-    }
-    function onMouseMove(event) {
-      // openRef is the reference to the insertion point between blocks.
-      // If the reference is not set or the insertion point is already open, return.
-      if (openRef === undefined || openRef.current) {
-        return;
-      }
-
-      // Ignore text nodes sometimes detected in FireFox.
-      if (event.target.nodeType === event.target.TEXT_NODE) {
-        return;
-      }
-      if (isMultiSelecting()) {
-        return;
-      }
-      if (!event.target.classList.contains('block-editor-block-list__layout')) {
-        hideInsertionPoint();
-        return;
-      }
-      let rootClientId;
-      if (!event.target.classList.contains('is-root-container')) {
-        const blockElement = !!event.target.getAttribute('data-block') ? event.target : event.target.closest('[data-block]');
-        rootClientId = blockElement.getAttribute('data-block');
-      }
-      if (getTemplateLock(rootClientId) || getBlockEditingMode(rootClientId) === 'disabled' || getBlockName(rootClientId) === 'core/block') {
-        return;
-      }
-      const orientation = getBlockListSettings(rootClientId)?.orientation || 'vertical';
-      const offsetTop = event.clientY;
-      const offsetLeft = event.clientX;
-      const children = Array.from(event.target.children);
-      let element = children.find(blockEl => {
-        const blockElRect = blockEl.getBoundingClientRect();
-        return blockEl.classList.contains('wp-block') && orientation === 'vertical' && blockElRect.top > offsetTop || blockEl.classList.contains('wp-block') && orientation === 'horizontal' && ((0,external_wp_i18n_namespaceObject.isRTL)() ? blockElRect.right < offsetLeft : blockElRect.left > offsetLeft);
-      });
-      if (!element) {
-        hideInsertionPoint();
-        return;
-      }
-
-      // The block may be in an alignment wrapper, so check the first direct
-      // child if the element has no ID.
-      if (!element.id) {
-        element = element.firstElementChild;
-        if (!element) {
-          hideInsertionPoint();
-          return;
-        }
-      }
-
-      // Don't show the insertion point if a parent block has an "overlay"
-      // See https://github.com/WordPress/gutenberg/pull/34012#pullrequestreview-727762337
-      const clientId = element.id.slice('block-'.length);
-      if (!clientId || __unstableIsWithinBlockOverlay(clientId)) {
-        return;
-      }
-
-      // Don't show the inserter when hovering above (conflicts with
-      // block toolbar) or inside selected block(s).
-      if (getSelectedBlockClientIds().includes(clientId)) {
-        return;
-      }
-      const elementRect = element.getBoundingClientRect();
-      if (orientation === 'horizontal' && (event.clientY > elementRect.bottom || event.clientY < elementRect.top) || orientation === 'vertical' && (event.clientX > elementRect.right || event.clientX < elementRect.left)) {
-        hideInsertionPoint();
-        return;
-      }
-      const index = getBlockIndex(clientId);
-
-      // Don't show the in-between inserter before the first block in
-      // the list (preserves the original behaviour).
-      if (index === 0) {
-        hideInsertionPoint();
-        return;
-      }
-      showInsertionPoint(rootClientId, index, {
-        __unstableWithInserter: true
-      });
-    }
-    node.addEventListener('mousemove', onMouseMove);
-    return () => {
-      node.removeEventListener('mousemove', onMouseMove);
-    };
-  }, [openRef, getBlockListSettings, getBlockIndex, isMultiSelecting, showInsertionPoint, hideInsertionPoint, getSelectedBlockClientIds, isInBetweenInserterDisabled]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/with-client-id.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-const withClientId = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => {
+  if (!hookedBlocksForCurrentBlock.length) {
+    return null;
+  }
+
+  // Group by block namespace (i.e. prefix before the slash).
+  const groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce((groups, block) => {
+    const [namespace] = block.name.split('/');
+    if (!groups[namespace]) {
+      groups[namespace] = [];
+    }
+    groups[namespace].push(block);
+    return groups;
+  }, {});
+  const insertBlockIntoDesignatedLocation = (block, relativePosition) => {
+    const blockIndex = getBlockIndex(clientId);
+    const innerBlocksLength = getBlockCount(clientId);
+    const rootClientId = getBlockRootClientId(clientId);
+    switch (relativePosition) {
+      case 'before':
+      case 'after':
+        insertBlock(block, relativePosition === 'after' ? blockIndex + 1 : blockIndex, rootClientId,
+        // Insert as a child of the current block's parent
+        false);
+        break;
+      case 'first_child':
+      case 'last_child':
+        insertBlock(block,
+        // TODO: It'd be great if insertBlock() would accept negative indices for insertion.
+        relativePosition === 'first_child' ? 0 : innerBlocksLength, clientId,
+        // Insert as a child of the current block.
+        false);
+        break;
+      case undefined:
+        // If we do not know the relative position, it is because the block was
+        // added via a filter. In this case, we default to inserting it after the
+        // current block.
+        insertBlock(block, blockIndex + 1, rootClientId,
+        // Insert as a child of the current block's parent
+        false);
+        break;
+    }
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls, {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.PanelBody, {
+      className: "block-editor-hooks__block-hooks",
+      title: (0,external_wp_i18n_namespaceObject.__)('Plugins'),
+      initialOpen: true,
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
+        className: "block-editor-hooks__block-hooks-helptext",
+        children: (0,external_wp_i18n_namespaceObject.__)('Manage the inclusion of blocks added automatically by plugins.')
+      }), Object.keys(groupedHookedBlocks).map(vendor => {
+        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_element_namespaceObject.Fragment, {
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("h3", {
+            children: vendor
+          }), groupedHookedBlocks[vendor].map(block => {
+            const checked = block.name in hookedBlockClientIds;
+            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
+              __nextHasNoMarginBottom: true,
+              checked: checked,
+              label: block.title,
+              onChange: () => {
+                if (!checked) {
+                  // Create and insert block.
+                  const relativePosition = block.blockHooks[name];
+                  insertBlockIntoDesignatedLocation((0,external_wp_blocks_namespaceObject.createBlock)(block.name), relativePosition);
+                  return;
+                }
+
+                // Remove block.
+                removeBlock(hookedBlockClientIds[block.name], false);
+              }
+            }, block.title);
+          })]
+        }, vendor);
+      })]
+    })
+  });
+}
+/* harmony default export */ const block_hooks = ({
+  edit: BlockHooksControlPure,
+  attributeKeys: ['metadata'],
+  hasSupport() {
+    return true;
+  }
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/block-bindings.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+const {
+  Menu
+} = unlock(external_wp_components_namespaceObject.privateApis);
+const block_bindings_EMPTY_OBJECT = {};
+const block_bindings_useToolsPanelDropdownMenuProps = () => {
+  const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
+  return !isMobile ? {
+    popoverProps: {
+      placement: 'left-start',
+      // For non-mobile, inner sidebar width (248px) - button width (24px) - border (1px) + padding (16px) + spacing (20px)
+      offset: 259
+    }
+  } : {};
+};
+function BlockBindingsPanelMenuContent({
+  fieldsList,
+  attribute,
+  binding
+}) {
   const {
     clientId
   } = useBlockEditContext();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
-    ...props,
-    clientId: clientId
-  });
-}, 'withClientId');
-/* harmony default export */ const with_client_id = (withClientId);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/button-block-appender.js
-/**
- * External dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const button_block_appender_ButtonBlockAppender = ({
-  clientId,
-  showSeparator,
-  isFloating,
-  onAddBlock,
-  isToggle
-}) => {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(button_block_appender, {
-    className: dist_clsx({
-      'block-list-appender__toggle': isToggle
-    }),
-    rootClientId: clientId,
-    showSeparator: showSeparator,
-    isFloating: isFloating,
-    onAddBlock: onAddBlock
-  });
-};
-/* harmony default export */ const inner_blocks_button_block_appender = (with_client_id(button_block_appender_ButtonBlockAppender));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/default-block-appender.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const default_block_appender_DefaultBlockAppender = ({
-  clientId
-}) => {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(DefaultBlockAppender, {
-    rootClientId: clientId
-  });
-};
-/* harmony default export */ const default_block_appender = ((0,external_wp_compose_namespaceObject.compose)([with_client_id, (0,external_wp_data_namespaceObject.withSelect)((select, {
-  clientId
+  const registeredSources = (0,external_wp_blocks_namespaceObject.getBlockBindingsSources)();
+  const {
+    updateBlockBindings
+  } = useBlockBindingsUtils();
+  const currentKey = binding?.args?.key;
+  const attributeType = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      name: blockName
+    } = select(store).getBlock(clientId);
+    const _attributeType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName).attributes?.[attribute]?.type;
+    return _attributeType === 'rich-text' ? 'string' : _attributeType;
+  }, [clientId, attribute]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: Object.entries(fieldsList).map(([name, fields], i) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_element_namespaceObject.Fragment, {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Menu.Group, {
+        children: [Object.keys(fieldsList).length > 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.GroupLabel, {
+          children: registeredSources[name].label
+        }), Object.entries(fields).filter(([, args]) => args?.type === attributeType).map(([key, args]) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Menu.RadioItem, {
+          onChange: () => updateBlockBindings({
+            [attribute]: {
+              source: name,
+              args: {
+                key
+              }
+            }
+          }),
+          name: attribute + '-binding',
+          value: key,
+          checked: key === currentKey,
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.ItemLabel, {
+            children: args?.label
+          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.ItemHelpText, {
+            children: args?.value
+          })]
+        }, key))]
+      }), i !== Object.keys(fieldsList).length - 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.Separator, {})]
+    }, name))
+  });
+}
+function BlockBindingsAttribute({
+  attribute,
+  binding,
+  fieldsList
+}) {
+  const {
+    source: sourceName,
+    args
+  } = binding || {};
+  const sourceProps = (0,external_wp_blocks_namespaceObject.getBlockBindingsSource)(sourceName);
+  const isSourceInvalid = !sourceProps;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+    className: "block-editor-bindings__item",
+    spacing: 0,
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
+      truncate: true,
+      children: attribute
+    }), !!binding && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
+      truncate: true,
+      variant: !isSourceInvalid && 'muted',
+      isDestructive: isSourceInvalid,
+      children: isSourceInvalid ? (0,external_wp_i18n_namespaceObject.__)('Invalid source') : fieldsList?.[sourceName]?.[args?.key]?.label || sourceProps?.label || sourceName
+    })]
+  });
+}
+function ReadOnlyBlockBindingsPanelItems({
+  bindings,
+  fieldsList
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: Object.entries(bindings).map(([attribute, binding]) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockBindingsAttribute, {
+        attribute: attribute,
+        binding: binding,
+        fieldsList: fieldsList
+      })
+    }, attribute))
+  });
+}
+function EditableBlockBindingsPanelItems({
+  attributes,
+  bindings,
+  fieldsList
+}) {
+  const {
+    updateBlockBindings
+  } = useBlockBindingsUtils();
+  const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: attributes.map(attribute => {
+      const binding = bindings[attribute];
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
+        hasValue: () => !!binding,
+        label: attribute,
+        onDeselect: () => {
+          updateBlockBindings({
+            [attribute]: undefined
+          });
+        },
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(Menu, {
+          placement: isMobile ? 'bottom-start' : 'left-start',
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.TriggerButton, {
+            render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItem, {}),
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockBindingsAttribute, {
+              attribute: attribute,
+              binding: binding,
+              fieldsList: fieldsList
+            })
+          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Menu.Popover, {
+            gutter: isMobile ? 8 : 36,
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockBindingsPanelMenuContent, {
+              fieldsList: fieldsList,
+              attribute: attribute,
+              binding: binding
+            })
+          })]
+        })
+      }, attribute);
+    })
+  });
+}
+const BlockBindingsPanel = ({
+  name: blockName,
+  metadata
 }) => {
-  const {
-    getBlockOrder
-  } = select(store);
-  const blockClientIds = getBlockOrder(clientId);
-  return {
-    lastBlockClientId: blockClientIds[blockClientIds.length - 1]
-  };
-})])(default_block_appender_DefaultBlockAppender));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-nested-settings-update.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-/** @typedef {import('../../selectors').WPDirectInsertBlock } WPDirectInsertBlock */
-
-const pendingSettingsUpdates = new WeakMap();
-function useShallowMemo(value) {
-  const [prevValue, setPrevValue] = (0,external_wp_element_namespaceObject.useState)(value);
-  if (!external_wp_isShallowEqual_default()(prevValue, value)) {
-    setPrevValue(value);
-  }
-  return prevValue;
-}
-
-/**
- * This hook is a side effect which updates the block-editor store when changes
- * happen to inner block settings. The given props are transformed into a
- * settings object, and if that is different from the current settings object in
- * the block-editor store, then the store is updated with the new settings which
- * came from props.
- *
- * @param {string}               clientId                   The client ID of the block to update.
- * @param {string}               parentLock
- * @param {string[]}             allowedBlocks              An array of block names which are permitted
- *                                                          in inner blocks.
- * @param {string[]}             prioritizedInserterBlocks  Block names and/or block variations to be prioritized in the inserter, in the format {blockName}/{variationName}.
- * @param {?WPDirectInsertBlock} defaultBlock               The default block to insert: [ blockName, { blockAttributes } ].
- * @param {?boolean}             directInsert               If a default block should be inserted directly by the appender.
- *
- * @param {?WPDirectInsertBlock} __experimentalDefaultBlock A deprecated prop for the default block to insert: [ blockName, { blockAttributes } ]. Use `defaultBlock` instead.
- *
- * @param {?boolean}             __experimentalDirectInsert A deprecated prop for whether a default block should be inserted directly by the appender. Use `directInsert` instead.
- *
- * @param {string}               [templateLock]             The template lock specified for the inner
- *                                                          blocks component. (e.g. "all")
- * @param {boolean}              captureToolbars            Whether or children toolbars should be shown
- *                                                          in the inner blocks component rather than on
- *                                                          the child block.
- * @param {string}               orientation                The direction in which the block
- *                                                          should face.
- * @param {Object}               layout                     The layout object for the block container.
- */
-function useNestedSettingsUpdate(clientId, parentLock, allowedBlocks, prioritizedInserterBlocks, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, templateLock, captureToolbars, orientation, layout) {
-  // Instead of adding a useSelect mapping here, please add to the useSelect
-  // mapping in InnerBlocks! Every subscription impacts performance.
-
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-
-  // Implementors often pass a new array on every render,
-  // and the contents of the arrays are just strings, so the entire array
-  // can be passed as dependencies but We need to include the length of the array,
-  // otherwise if the arrays change length but the first elements are equal the comparison,
-  // does not works as expected.
-  const _allowedBlocks = useShallowMemo(allowedBlocks);
-  const _prioritizedInserterBlocks = (0,external_wp_element_namespaceObject.useMemo)(() => prioritizedInserterBlocks,
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  prioritizedInserterBlocks);
-  const _templateLock = templateLock === undefined || parentLock === 'contentOnly' ? parentLock : templateLock;
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    const newSettings = {
-      allowedBlocks: _allowedBlocks,
-      prioritizedInserterBlocks: _prioritizedInserterBlocks,
-      templateLock: _templateLock
-    };
-
-    // These values are not defined for RN, so only include them if they
-    // are defined.
-    if (captureToolbars !== undefined) {
-      newSettings.__experimentalCaptureToolbars = captureToolbars;
-    }
-
-    // Orientation depends on layout,
-    // ideally the separate orientation prop should be deprecated.
-    if (orientation !== undefined) {
-      newSettings.orientation = orientation;
-    } else {
-      const layoutType = getLayoutType(layout?.type);
-      newSettings.orientation = layoutType.getOrientation(layout);
-    }
-    if (__experimentalDefaultBlock !== undefined) {
-      external_wp_deprecated_default()('__experimentalDefaultBlock', {
-        alternative: 'defaultBlock',
-        since: '6.3',
-        version: '6.4'
-      });
-      newSettings.defaultBlock = __experimentalDefaultBlock;
-    }
-    if (defaultBlock !== undefined) {
-      newSettings.defaultBlock = defaultBlock;
-    }
-    if (__experimentalDirectInsert !== undefined) {
-      external_wp_deprecated_default()('__experimentalDirectInsert', {
-        alternative: 'directInsert',
-        since: '6.3',
-        version: '6.4'
-      });
-      newSettings.directInsert = __experimentalDirectInsert;
-    }
-    if (directInsert !== undefined) {
-      newSettings.directInsert = directInsert;
-    }
-    if (newSettings.directInsert !== undefined && typeof newSettings.directInsert !== 'boolean') {
-      external_wp_deprecated_default()('Using `Function` as a `directInsert` argument', {
-        alternative: '`boolean` values',
-        since: '6.5'
-      });
-    }
-
-    // Batch updates to block list settings to avoid triggering cascading renders
-    // for each container block included in a tree and optimize initial render.
-    // To avoid triggering updateBlockListSettings for each container block
-    // causing X re-renderings for X container blocks,
-    // we batch all the updatedBlockListSettings in a single "data" batch
-    // which results in a single re-render.
-    if (!pendingSettingsUpdates.get(registry)) {
-      pendingSettingsUpdates.set(registry, {});
-    }
-    pendingSettingsUpdates.get(registry)[clientId] = newSettings;
-    window.queueMicrotask(() => {
-      const settings = pendingSettingsUpdates.get(registry);
-      if (Object.keys(settings).length) {
-        const {
-          updateBlockListSettings
-        } = registry.dispatch(store);
-        updateBlockListSettings(settings);
-        pendingSettingsUpdates.set(registry, {});
-      }
-    });
-  }, [clientId, _allowedBlocks, _prioritizedInserterBlocks, _templateLock, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, captureToolbars, orientation, layout, registry]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-inner-block-template-sync.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * This hook makes sure that a block's inner blocks stay in sync with the given
- * block "template". The template is a block hierarchy to which inner blocks must
- * conform. If the blocks get "out of sync" with the template and the template
- * is meant to be locked (e.g. templateLock = "all" or templateLock = "contentOnly"),
- * then we replace the inner blocks with the correct value after synchronizing it with the template.
- *
- * @param {string}  clientId                       The block client ID.
- * @param {Object}  template                       The template to match.
- * @param {string}  templateLock                   The template lock state for the inner blocks. For
- *                                                 example, if the template lock is set to "all",
- *                                                 then the inner blocks will stay in sync with the
- *                                                 template. If not defined or set to false, then
- *                                                 the inner blocks will not be synchronized with
- *                                                 the given template.
- * @param {boolean} templateInsertUpdatesSelection Whether or not to update the
- *                                                 block-editor selection state when inner blocks
- *                                                 are replaced after template synchronization.
- */
-function useInnerBlockTemplateSync(clientId, template, templateLock, templateInsertUpdatesSelection) {
-  // Instead of adding a useSelect mapping here, please add to the useSelect
-  // mapping in InnerBlocks! Every subscription impacts performance.
-
-  const {
-    getBlocks,
-    getSelectedBlocksInitialCaretPosition,
-    isBlockSelected
+  const blockContext = (0,external_wp_element_namespaceObject.useContext)(block_context);
+  const {
+    removeAllBlockBindings
+  } = useBlockBindingsUtils();
+  const bindableAttributes = getBindableAttributes(blockName);
+  const dropdownMenuProps = block_bindings_useToolsPanelDropdownMenuProps();
+
+  // `useSelect` is used purposely here to ensure `getFieldsList`
+  // is updated whenever there are updates in block context.
+  // `source.getFieldsList` may also call a selector via `select`.
+  const _fieldsList = {};
+  const {
+    fieldsList,
+    canUpdateBlockBindings
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    if (!bindableAttributes || bindableAttributes.length === 0) {
+      return block_bindings_EMPTY_OBJECT;
+    }
+    const registeredSources = (0,external_wp_blocks_namespaceObject.getBlockBindingsSources)();
+    Object.entries(registeredSources).forEach(([sourceName, {
+      getFieldsList,
+      usesContext
+    }]) => {
+      if (getFieldsList) {
+        // Populate context.
+        const context = {};
+        if (usesContext?.length) {
+          for (const key of usesContext) {
+            context[key] = blockContext[key];
+          }
+        }
+        const sourceList = getFieldsList({
+          select,
+          context
+        });
+        // Only add source if the list is not empty.
+        if (Object.keys(sourceList || {}).length) {
+          _fieldsList[sourceName] = {
+            ...sourceList
+          };
+        }
+      }
+    });
+    return {
+      fieldsList: Object.values(_fieldsList).length > 0 ? _fieldsList : block_bindings_EMPTY_OBJECT,
+      canUpdateBlockBindings: select(store).getSettings().canUpdateBlockBindings
+    };
+  }, [blockContext, bindableAttributes]);
+  // Return early if there are no bindable attributes.
+  if (!bindableAttributes || bindableAttributes.length === 0) {
+    return null;
+  }
+  // Filter bindings to only show bindable attributes and remove pattern overrides.
+  const {
+    bindings
+  } = metadata || {};
+  const filteredBindings = {
+    ...bindings
+  };
+  Object.keys(filteredBindings).forEach(key => {
+    if (!canBindAttribute(blockName, key) || filteredBindings[key].source === 'core/pattern-overrides') {
+      delete filteredBindings[key];
+    }
+  });
+
+  // Lock the UI when the user can't update bindings or there are no fields to connect to.
+  const readOnly = !canUpdateBlockBindings || !Object.keys(fieldsList).length;
+  if (readOnly && Object.keys(filteredBindings).length === 0) {
+    return null;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls, {
+    group: "bindings",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalToolsPanel, {
+      label: (0,external_wp_i18n_namespaceObject.__)('Attributes'),
+      resetAll: () => {
+        removeAllBlockBindings();
+      },
+      dropdownMenuProps: dropdownMenuProps,
+      className: "block-editor-bindings__panel",
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalItemGroup, {
+        isBordered: true,
+        isSeparated: true,
+        children: readOnly ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ReadOnlyBlockBindingsPanelItems, {
+          bindings: filteredBindings,
+          fieldsList: fieldsList
+        }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EditableBlockBindingsPanelItems, {
+          attributes: bindableAttributes,
+          bindings: filteredBindings,
+          fieldsList: fieldsList
+        })
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalText, {
+        as: "div",
+        variant: "muted",
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
+          children: (0,external_wp_i18n_namespaceObject.__)('Attributes connected to custom fields or other dynamic data.')
+        })
+      })]
+    })
+  });
+};
+/* harmony default export */ const block_bindings = ({
+  edit: BlockBindingsPanel,
+  attributeKeys: ['metadata'],
+  hasSupport() {
+    return true;
+  }
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/block-renaming.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Filters registered block settings, adding an `__experimentalLabel` callback if one does not already exist.
+ *
+ * @param {Object} settings Original block settings.
+ *
+ * @return {Object} Filtered block settings.
+ */
+function addLabelCallback(settings) {
+  // If blocks provide their own label callback, do not override it.
+  if (settings.__experimentalLabel) {
+    return settings;
+  }
+  const supportsBlockNaming = (0,external_wp_blocks_namespaceObject.hasBlockSupport)(settings, 'renaming', true // default value
+  );
+
+  // Check whether block metadata is supported before using it.
+  if (supportsBlockNaming) {
+    settings.__experimentalLabel = (attributes, {
+      context
+    }) => {
+      const {
+        metadata
+      } = attributes;
+
+      // In the list view, use the block's name attribute as the label.
+      if (context === 'list-view' && metadata?.name) {
+        return metadata.name;
+      }
+    };
+  }
+  return settings;
+}
+(0,external_wp_hooks_namespaceObject.addFilter)('blocks.registerBlockType', 'core/metadata/addLabelCallback', addLabelCallback);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/grid/use-grid-layout-sync.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function useGridLayoutSync({
+  clientId: gridClientId
+}) {
+  const {
+    gridLayout,
+    blockOrder,
+    selectedBlockLayout
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    var _getBlockAttributes$l;
+    const {
+      getBlockAttributes,
+      getBlockOrder
+    } = select(store);
+    const selectedBlock = select(store).getSelectedBlock();
+    return {
+      gridLayout: (_getBlockAttributes$l = getBlockAttributes(gridClientId).layout) !== null && _getBlockAttributes$l !== void 0 ? _getBlockAttributes$l : {},
+      blockOrder: getBlockOrder(gridClientId),
+      selectedBlockLayout: selectedBlock?.attributes.style?.layout
+    };
+  }, [gridClientId]);
+  const {
+    getBlockAttributes,
+    getBlockRootClientId
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const {
-    replaceInnerBlocks,
+    updateBlockAttributes,
     __unstableMarkNextChangeAsNotPersistent
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-
-  // Maintain a reference to the previous value so we can do a deep equality check.
-  const existingTemplate = (0,external_wp_element_namespaceObject.useRef)(null);
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    let isCancelled = false;
-
-    // There's an implicit dependency between useInnerBlockTemplateSync and useNestedSettingsUpdate
-    // The former needs to happen after the latter and since the latter is using microtasks to batch updates (performance optimization),
-    // we need to schedule this one in a microtask as well.
-    // Example: If you remove queueMicrotask here, ctrl + click to insert quote block won't close the inserter.
-    window.queueMicrotask(() => {
-      if (isCancelled) {
-        return;
-      }
-
-      // Only synchronize innerBlocks with template if innerBlocks are empty
-      // or a locking "all" or "contentOnly" exists directly on the block.
-      const currentInnerBlocks = getBlocks(clientId);
-      const shouldApplyTemplate = currentInnerBlocks.length === 0 || templateLock === 'all' || templateLock === 'contentOnly';
-      const hasTemplateChanged = !es6_default()(template, existingTemplate.current);
-      if (!shouldApplyTemplate || !hasTemplateChanged) {
-        return;
-      }
-      existingTemplate.current = template;
-      const nextBlocks = (0,external_wp_blocks_namespaceObject.synchronizeBlocksWithTemplate)(currentInnerBlocks, template);
-      if (!es6_default()(nextBlocks, currentInnerBlocks)) {
-        __unstableMarkNextChangeAsNotPersistent();
-        replaceInnerBlocks(clientId, nextBlocks, currentInnerBlocks.length === 0 && templateInsertUpdatesSelection && nextBlocks.length !== 0 && isBlockSelected(clientId),
-        // This ensures the "initialPosition" doesn't change when applying the template
-        // If we're supposed to focus the block, we'll focus the first inner block
-        // otherwise, we won't apply any auto-focus.
-        // This ensures for instance that the focus stays in the inserter when inserting the "buttons" block.
-        getSelectedBlocksInitialCaretPosition());
-      }
-    });
-    return () => {
-      isCancelled = true;
-    };
-  }, [template, templateLock, clientId]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/use-block-context.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Returns a context object for a given block.
- *
- * @param {string} clientId The block client ID.
- *
- * @return {Record<string,*>} Context value.
- */
-function useBlockContext(clientId) {
-  return (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const block = select(store).getBlock(clientId);
-    if (!block) {
-      return undefined;
-    }
-    const blockType = select(external_wp_blocks_namespaceObject.store).getBlockType(block.name);
-    if (!blockType) {
-      return undefined;
-    }
-    if (Object.keys(blockType.providesContext).length === 0) {
-      return undefined;
-    }
-    return Object.fromEntries(Object.entries(blockType.providesContext).map(([contextName, attributeName]) => [contextName, block.attributes[attributeName]]));
+  const selectedBlockRect = (0,external_wp_element_namespaceObject.useMemo)(() => selectedBlockLayout ? new GridRect(selectedBlockLayout) : null, [selectedBlockLayout]);
+  const previouslySelectedBlockRect = (0,external_wp_compose_namespaceObject.usePrevious)(selectedBlockRect);
+  const previousIsManualPlacement = (0,external_wp_compose_namespaceObject.usePrevious)(gridLayout.isManualPlacement);
+  const previousBlockOrder = (0,external_wp_compose_namespaceObject.usePrevious)(blockOrder);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    const updates = {};
+    if (gridLayout.isManualPlacement) {
+      const occupiedRects = [];
+
+      // Respect the position of blocks that already have a columnStart and rowStart value.
+      for (const clientId of blockOrder) {
+        var _getBlockAttributes$s;
+        const {
+          columnStart,
+          rowStart,
+          columnSpan = 1,
+          rowSpan = 1
+        } = (_getBlockAttributes$s = getBlockAttributes(clientId).style?.layout) !== null && _getBlockAttributes$s !== void 0 ? _getBlockAttributes$s : {};
+        if (!columnStart || !rowStart) {
+          continue;
+        }
+        occupiedRects.push(new GridRect({
+          columnStart,
+          rowStart,
+          columnSpan,
+          rowSpan
+        }));
+      }
+
+      // When in manual mode, ensure that every block has a columnStart and rowStart value.
+      for (const clientId of blockOrder) {
+        var _attributes$style$lay;
+        const attributes = getBlockAttributes(clientId);
+        const {
+          columnStart,
+          rowStart,
+          columnSpan = 1,
+          rowSpan = 1
+        } = (_attributes$style$lay = attributes.style?.layout) !== null && _attributes$style$lay !== void 0 ? _attributes$style$lay : {};
+        if (columnStart && rowStart) {
+          continue;
+        }
+        const [newColumnStart, newRowStart] = placeBlock(occupiedRects, gridLayout.columnCount, columnSpan, rowSpan, previouslySelectedBlockRect?.columnEnd, previouslySelectedBlockRect?.rowEnd);
+        occupiedRects.push(new GridRect({
+          columnStart: newColumnStart,
+          rowStart: newRowStart,
+          columnSpan,
+          rowSpan
+        }));
+        updates[clientId] = {
+          style: {
+            ...attributes.style,
+            layout: {
+              ...attributes.style?.layout,
+              columnStart: newColumnStart,
+              rowStart: newRowStart
+            }
+          }
+        };
+      }
+
+      // Ensure there's enough rows to fit all blocks.
+      const bottomMostRow = Math.max(...occupiedRects.map(r => r.rowEnd));
+      if (!gridLayout.rowCount || gridLayout.rowCount < bottomMostRow) {
+        updates[gridClientId] = {
+          layout: {
+            ...gridLayout,
+            rowCount: bottomMostRow
+          }
+        };
+      }
+
+      // Unset grid layout attributes for blocks removed from the grid.
+      for (const clientId of previousBlockOrder !== null && previousBlockOrder !== void 0 ? previousBlockOrder : []) {
+        if (!blockOrder.includes(clientId)) {
+          var _attributes$style$lay2;
+          const rootClientId = getBlockRootClientId(clientId);
+
+          // Block was removed from the editor, so nothing to do.
+          if (rootClientId === null) {
+            continue;
+          }
+
+          // Check if the block is being moved to another grid.
+          // If so, do nothing and let the new grid parent handle
+          // the attributes.
+          const rootAttributes = getBlockAttributes(rootClientId);
+          if (rootAttributes?.layout?.type === 'grid') {
+            continue;
+          }
+          const attributes = getBlockAttributes(clientId);
+          const {
+            columnStart,
+            rowStart,
+            columnSpan,
+            rowSpan,
+            ...layout
+          } = (_attributes$style$lay2 = attributes.style?.layout) !== null && _attributes$style$lay2 !== void 0 ? _attributes$style$lay2 : {};
+          if (columnStart || rowStart || columnSpan || rowSpan) {
+            const hasEmptyLayoutAttribute = Object.keys(layout).length === 0;
+            updates[clientId] = setImmutably(attributes, ['style', 'layout'], hasEmptyLayoutAttribute ? undefined : layout);
+          }
+        }
+      }
+    } else {
+      // Remove all of the columnStart and rowStart values
+      // when switching from manual to auto mode,
+      if (previousIsManualPlacement === true) {
+        for (const clientId of blockOrder) {
+          var _attributes$style$lay3;
+          const attributes = getBlockAttributes(clientId);
+          const {
+            columnStart,
+            rowStart,
+            ...layout
+          } = (_attributes$style$lay3 = attributes.style?.layout) !== null && _attributes$style$lay3 !== void 0 ? _attributes$style$lay3 : {};
+          // Only update attributes if columnStart or rowStart are set.
+          if (columnStart || rowStart) {
+            const hasEmptyLayoutAttribute = Object.keys(layout).length === 0;
+            updates[clientId] = setImmutably(attributes, ['style', 'layout'], hasEmptyLayoutAttribute ? undefined : layout);
+          }
+        }
+      }
+
+      // Remove row styles in auto mode
+      if (gridLayout.rowCount) {
+        updates[gridClientId] = {
+          layout: {
+            ...gridLayout,
+            rowCount: undefined
+          }
+        };
+      }
+    }
+    if (Object.keys(updates).length) {
+      __unstableMarkNextChangeAsNotPersistent();
+      updateBlockAttributes(Object.keys(updates), updates, /* uniqueByBlock: */true);
+    }
+  }, [
+  // Actual deps to sync:
+  gridClientId, gridLayout, previousBlockOrder, blockOrder, previouslySelectedBlockRect, previousIsManualPlacement,
+  // These won't change, but the linter thinks they might:
+  __unstableMarkNextChangeAsNotPersistent, getBlockAttributes, getBlockRootClientId, updateBlockAttributes]);
+}
+
+/**
+ * @param {GridRect[]} occupiedRects
+ * @param {number}     gridColumnCount
+ * @param {number}     blockColumnSpan
+ * @param {number}     blockRowSpan
+ * @param {number?}    startColumn
+ * @param {number?}    startRow
+ */
+function placeBlock(occupiedRects, gridColumnCount, blockColumnSpan, blockRowSpan, startColumn = 1, startRow = 1) {
+  for (let row = startRow;; row++) {
+    for (let column = row === startRow ? startColumn : 1; column <= gridColumnCount; column++) {
+      const candidateRect = new GridRect({
+        columnStart: column,
+        rowStart: row,
+        columnSpan: blockColumnSpan,
+        rowSpan: blockRowSpan
+      });
+      if (!occupiedRects.some(r => r.intersectsRect(candidateRect))) {
+        return [column, row];
+      }
+    }
+  }
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/grid-visualizer.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function GridLayoutSync(props) {
+  useGridLayoutSync(props);
+}
+function grid_visualizer_GridTools({
+  clientId,
+  layout
+}) {
+  const isVisible = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      isBlockSelected,
+      isDraggingBlocks,
+      getTemplateLock,
+      getBlockEditingMode
+    } = select(store);
+
+    // These calls are purposely ordered from least expensive to most expensive.
+    // Hides the visualizer in cases where the user is not or cannot interact with it.
+    if (!isDraggingBlocks() && !isBlockSelected(clientId) || getTemplateLock(clientId) || getBlockEditingMode(clientId) !== 'default') {
+      return false;
+    }
+    return true;
   }, [clientId]);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-on-block-drop/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/** @typedef {import('react').SyntheticEvent} SyntheticEvent */
-/** @typedef {import('./types').WPDropOperation} WPDropOperation */
-
-/**
- * Retrieve the data for a block drop event.
- *
- * @param {SyntheticEvent} event The drop event.
- *
- * @return {Object} An object with block drag and drop data.
- */
-function parseDropEvent(event) {
-  let result = {
-    srcRootClientId: null,
-    srcClientIds: null,
-    srcIndex: null,
-    type: null,
-    blocks: null
-  };
-  if (!event.dataTransfer) {
-    return result;
-  }
-  try {
-    result = Object.assign(result, JSON.parse(event.dataTransfer.getData('wp-blocks')));
-  } catch (err) {
-    return result;
-  }
-  return result;
-}
-
-/**
- * A function that returns an event handler function for block drop events.
- *
- * @param {string}   targetRootClientId        The root client id where the block(s) will be inserted.
- * @param {number}   targetBlockIndex          The index where the block(s) will be inserted.
- * @param {Function} getBlockIndex             A function that gets the index of a block.
- * @param {Function} getClientIdsOfDescendants A function that gets the client ids of descendant blocks.
- * @param {Function} moveBlocks                A function that moves blocks.
- * @param {Function} insertOrReplaceBlocks     A function that inserts or replaces blocks.
- * @param {Function} clearSelectedBlock        A function that clears block selection.
- * @param {string}   operation                 The type of operation to perform on drop. Could be `insert` or `replace` or `group`.
- * @param {Function} getBlock                  A function that returns a block given its client id.
- * @return {Function} The event handler for a block drop event.
- */
-function onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getClientIdsOfDescendants, moveBlocks, insertOrReplaceBlocks, clearSelectedBlock, operation, getBlock) {
-  return event => {
-    const {
-      srcRootClientId: sourceRootClientId,
-      srcClientIds: sourceClientIds,
-      type: dropType,
-      blocks
-    } = parseDropEvent(event);
-
-    // If the user is inserting a block.
-    if (dropType === 'inserter') {
-      clearSelectedBlock();
-      const blocksToInsert = blocks.map(block => (0,external_wp_blocks_namespaceObject.cloneBlock)(block));
-      insertOrReplaceBlocks(blocksToInsert, true, null);
-    }
-
-    // If the user is moving a block.
-    if (dropType === 'block') {
-      const sourceBlockIndex = getBlockIndex(sourceClientIds[0]);
-
-      // If the user is dropping to the same position, return early.
-      if (sourceRootClientId === targetRootClientId && sourceBlockIndex === targetBlockIndex) {
-        return;
-      }
-
-      // If the user is attempting to drop a block within its own
-      // nested blocks, return early as this would create infinite
-      // recursion.
-      if (sourceClientIds.includes(targetRootClientId) || getClientIdsOfDescendants(sourceClientIds).some(id => id === targetRootClientId)) {
-        return;
-      }
-
-      // If the user is dropping a block over another block, replace both blocks
-      // with a group block containing them
-      if (operation === 'group') {
-        const blocksToInsert = sourceClientIds.map(clientId => getBlock(clientId));
-        insertOrReplaceBlocks(blocksToInsert, true, null, sourceClientIds);
-        return;
-      }
-      const isAtSameLevel = sourceRootClientId === targetRootClientId;
-      const draggedBlockCount = sourceClientIds.length;
-
-      // If the block is kept at the same level and moved downwards,
-      // subtract to take into account that the blocks being dragged
-      // were removed from the block list above the insertion point.
-      const insertIndex = isAtSameLevel && sourceBlockIndex < targetBlockIndex ? targetBlockIndex - draggedBlockCount : targetBlockIndex;
-      moveBlocks(sourceClientIds, sourceRootClientId, insertIndex);
-    }
-  };
-}
-
-/**
- * A function that returns an event handler function for block-related file drop events.
- *
- * @param {string}   targetRootClientId    The root client id where the block(s) will be inserted.
- * @param {Function} getSettings           A function that gets the block editor settings.
- * @param {Function} updateBlockAttributes A function that updates a block's attributes.
- * @param {Function} canInsertBlockType    A function that returns checks whether a block type can be inserted.
- * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.
- *
- * @return {Function} The event handler for a block-related file drop event.
- */
-function onFilesDrop(targetRootClientId, getSettings, updateBlockAttributes, canInsertBlockType, insertOrReplaceBlocks) {
-  return files => {
-    if (!getSettings().mediaUpload) {
-      return;
-    }
-    const transformation = (0,external_wp_blocks_namespaceObject.findTransform)((0,external_wp_blocks_namespaceObject.getBlockTransforms)('from'), transform => transform.type === 'files' && canInsertBlockType(transform.blockName, targetRootClientId) && transform.isMatch(files));
-    if (transformation) {
-      const blocks = transformation.transform(files, updateBlockAttributes);
-      insertOrReplaceBlocks(blocks);
-    }
-  };
-}
-
-/**
- * A function that returns an event handler function for block-related HTML drop events.
- *
- * @param {Function} insertOrReplaceBlocks A function that inserts or replaces blocks.
- *
- * @return {Function} The event handler for a block-related HTML drop event.
- */
-function onHTMLDrop(insertOrReplaceBlocks) {
-  return HTML => {
-    const blocks = (0,external_wp_blocks_namespaceObject.pasteHandler)({
-      HTML,
-      mode: 'BLOCKS'
-    });
-    if (blocks.length) {
-      insertOrReplaceBlocks(blocks);
-    }
-  };
-}
-
-/**
- * A React hook for handling block drop events.
- *
- * @param {string}          targetRootClientId  The root client id where the block(s) will be inserted.
- * @param {number}          targetBlockIndex    The index where the block(s) will be inserted.
- * @param {Object}          options             The optional options.
- * @param {WPDropOperation} [options.operation] The type of operation to perform on drop. Could be `insert` or `replace` for now.
- *
- * @return {Function} A function to be passed to the onDrop handler.
- */
-function useOnBlockDrop(targetRootClientId, targetBlockIndex, options = {}) {
-  const {
-    operation = 'insert',
-    nearestSide = 'right'
-  } = options;
-  const {
-    canInsertBlockType,
-    getBlockIndex,
-    getClientIdsOfDescendants,
-    getBlockOrder,
-    getBlocksByClientId,
-    getSettings,
-    getBlock,
-    isGroupable
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    getGroupingBlockName
-  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
-  const {
-    insertBlocks,
-    moveBlocksToPosition,
-    updateBlockAttributes,
-    clearSelectedBlock,
-    replaceBlocks,
-    removeBlocks
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridLayoutSync, {
+      clientId: clientId
+    }), isVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(GridVisualizer, {
+      clientId: clientId,
+      parentLayout: layout
+    })]
+  });
+}
+const addGridVisualizerToBlockEdit = (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(BlockEdit => props => {
+  if (props.attributes.layout?.type !== 'grid') {
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEdit, {
+      ...props
+    }, "edit");
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(grid_visualizer_GridTools, {
+      clientId: props.clientId,
+      layout: props.attributes.layout
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEdit, {
+      ...props
+    }, "edit")]
+  });
+}, 'addGridVisualizerToBlockEdit');
+(0,external_wp_hooks_namespaceObject.addFilter)('editor.BlockEdit', 'core/editor/grid-visualizer', addGridVisualizerToBlockEdit);
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-border-props.js
+/**
+ * Internal dependencies
+ */
+
+
+
+
+// This utility is intended to assist where the serialization of the border
+// block support is being skipped for a block but the border related CSS classes
+// & styles still need to be generated so they can be applied to inner elements.
+
+/**
+ * Provides the CSS class names and inline styles for a block's border support
+ * attributes.
+ *
+ * @param {Object} attributes Block attributes.
+ * @return {Object} Border block support derived CSS classes & styles.
+ */
+function getBorderClassesAndStyles(attributes) {
+  const border = attributes.style?.border || {};
+  const className = getBorderClasses(attributes);
+  return {
+    className: className || undefined,
+    style: getInlineStyles({
+      border
+    })
+  };
+}
+
+/**
+ * Derives the border related props for a block from its border block support
+ * attributes.
+ *
+ * Inline styles are forced for named colors to ensure these selections are
+ * reflected when themes do not load their color stylesheets in the editor.
+ *
+ * @param {Object} attributes Block attributes.
+ *
+ * @return {Object} ClassName & style props from border block support.
+ */
+function useBorderProps(attributes) {
+  const {
+    colors
+  } = useMultipleOriginColorsAndGradients();
+  const borderProps = getBorderClassesAndStyles(attributes);
+  const {
+    borderColor
+  } = attributes;
+
+  // Force inline styles to apply named border colors when themes do not load
+  // their color stylesheets in the editor.
+  if (borderColor) {
+    const borderColorObject = getMultiOriginColor({
+      colors,
+      namedColor: borderColor
+    });
+    borderProps.style.borderColor = borderColorObject.color;
+  }
+  return borderProps;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-shadow-props.js
+/**
+ * Internal dependencies
+ */
+
+
+// This utility is intended to assist where the serialization of the shadow
+// block support is being skipped for a block but the shadow related CSS classes
+// & styles still need to be generated so they can be applied to inner elements.
+
+/**
+ * Provides the CSS class names and inline styles for a block's shadow support
+ * attributes.
+ *
+ * @param {Object} attributes Block attributes.
+ * @return {Object} Shadow block support derived CSS classes & styles.
+ */
+function getShadowClassesAndStyles(attributes) {
+  const shadow = attributes.style?.shadow || '';
+  return {
+    style: getInlineStyles({
+      shadow
+    })
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-color-props.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+// The code in this file has largely been lifted from the color block support
+// hook.
+//
+// This utility is intended to assist where the serialization of the colors
+// block support is being skipped for a block but the color related CSS classes
+// & styles still need to be generated so they can be applied to inner elements.
+
+/**
+ * Provides the CSS class names and inline styles for a block's color support
+ * attributes.
+ *
+ * @param {Object} attributes Block attributes.
+ *
+ * @return {Object} Color block support derived CSS classes & styles.
+ */
+function getColorClassesAndStyles(attributes) {
+  const {
+    backgroundColor,
+    textColor,
+    gradient,
+    style
+  } = attributes;
+
+  // Collect color CSS classes.
+  const backgroundClass = getColorClassName('background-color', backgroundColor);
+  const textClass = getColorClassName('color', textColor);
+  const gradientClass = __experimentalGetGradientClass(gradient);
+  const hasGradient = gradientClass || style?.color?.gradient;
+
+  // Determine color CSS class name list.
+  const className = dist_clsx(textClass, gradientClass, {
+    // Don't apply the background class if there's a gradient.
+    [backgroundClass]: !hasGradient && !!backgroundClass,
+    'has-text-color': textColor || style?.color?.text,
+    'has-background': backgroundColor || style?.color?.background || gradient || style?.color?.gradient,
+    'has-link-color': style?.elements?.link?.color
+  });
+
+  // Collect inline styles for colors.
+  const colorStyles = style?.color || {};
+  const styleProp = getInlineStyles({
+    color: colorStyles
+  });
+  return {
+    className: className || undefined,
+    style: styleProp
+  };
+}
+
+/**
+ * Determines the color related props for a block derived from its color block
+ * support attributes.
+ *
+ * Inline styles are forced for named colors to ensure these selections are
+ * reflected when themes do not load their color stylesheets in the editor.
+ *
+ * @param {Object} attributes Block attributes.
+ *
+ * @return {Object} ClassName & style props from colors block support.
+ */
+function useColorProps(attributes) {
+  const {
+    backgroundColor,
+    textColor,
+    gradient
+  } = attributes;
+  const [userPalette, themePalette, defaultPalette, userGradients, themeGradients, defaultGradients] = use_settings_useSettings('color.palette.custom', 'color.palette.theme', 'color.palette.default', 'color.gradients.custom', 'color.gradients.theme', 'color.gradients.default');
+  const colors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userPalette || []), ...(themePalette || []), ...(defaultPalette || [])], [userPalette, themePalette, defaultPalette]);
+  const gradients = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userGradients || []), ...(themeGradients || []), ...(defaultGradients || [])], [userGradients, themeGradients, defaultGradients]);
+  const colorProps = getColorClassesAndStyles(attributes);
+
+  // Force inline styles to apply colors when themes do not load their color
+  // stylesheets in the editor.
+  if (backgroundColor) {
+    const backgroundColorObject = getColorObjectByAttributeValues(colors, backgroundColor);
+    colorProps.style.backgroundColor = backgroundColorObject.color;
+  }
+  if (gradient) {
+    colorProps.style.background = getGradientValueBySlug(gradients, gradient);
+  }
+  if (textColor) {
+    const textColorObject = getColorObjectByAttributeValues(colors, textColor);
+    colorProps.style.color = textColorObject.color;
+  }
+  return colorProps;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-spacing-props.js
+/**
+ * Internal dependencies
+ */
+
+
+// This utility is intended to assist where the serialization of the spacing
+// block support is being skipped for a block but the spacing related CSS
+// styles still need to be generated so they can be applied to inner elements.
+
+/**
+ * Provides the CSS class names and inline styles for a block's spacing support
+ * attributes.
+ *
+ * @param {Object} attributes Block attributes.
+ *
+ * @return {Object} Spacing block support derived CSS classes & styles.
+ */
+function getSpacingClassesAndStyles(attributes) {
+  const {
+    style
+  } = attributes;
+
+  // Collect inline styles for spacing.
+  const spacingStyles = style?.spacing || {};
+  const styleProp = getInlineStyles({
+    spacing: spacingStyles
+  });
+  return {
+    style: styleProp
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-typography-props.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const {
+  kebabCase: use_typography_props_kebabCase
+} = unlock(external_wp_components_namespaceObject.privateApis);
+
+/*
+ * This utility is intended to assist where the serialization of the typography
+ * block support is being skipped for a block but the typography related CSS
+ * styles still need to be generated so they can be applied to inner elements.
+ */
+/**
+ * Provides the CSS class names and inline styles for a block's typography support
+ * attributes.
+ *
+ * @param {Object}         attributes Block attributes.
+ * @param {Object|boolean} settings   Merged theme.json settings
+ *
+ * @return {Object} Typography block support derived CSS classes & styles.
+ */
+function getTypographyClassesAndStyles(attributes, settings) {
+  let typographyStyles = attributes?.style?.typography || {};
+  typographyStyles = {
+    ...typographyStyles,
+    fontSize: getTypographyFontSizeValue({
+      size: attributes?.style?.typography?.fontSize
+    }, settings)
+  };
+  const style = getInlineStyles({
+    typography: typographyStyles
+  });
+  const fontFamilyClassName = !!attributes?.fontFamily ? `has-${use_typography_props_kebabCase(attributes.fontFamily)}-font-family` : '';
+  const textAlignClassName = !!attributes?.style?.typography?.textAlign ? `has-text-align-${attributes?.style?.typography?.textAlign}` : '';
+  const className = dist_clsx(fontFamilyClassName, textAlignClassName, getFontSizeClass(attributes?.fontSize));
+  return {
+    className,
+    style
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/use-cached-truthy.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Keeps an up-to-date copy of the passed value and returns it. If value becomes falsy, it will return the last truthy copy.
+ *
+ * @param {any} value
+ * @return {any} value
+ */
+function useCachedTruthy(value) {
+  const [cachedValue, setCachedValue] = (0,external_wp_element_namespaceObject.useState)(value);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (value) {
+      setCachedValue(value);
+    }
+  }, [value]);
+  return cachedValue;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/index.js
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+createBlockEditFilter([align, text_align, hooks_anchor, custom_class_name, style, duotone, position, layout, content_lock_ui, block_hooks, block_bindings, layout_child].filter(Boolean));
+createBlockListBlockFilter([align, text_align, background, style, color, dimensions, duotone, font_family, font_size, border, position, block_style_variation, layout_child]);
+createBlockSaveFilter([align, text_align, hooks_anchor, aria_label, custom_class_name, border, color, style, font_family, font_size]);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors/with-colors.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+const {
+  kebabCase: with_colors_kebabCase
+} = unlock(external_wp_components_namespaceObject.privateApis);
+
+/**
+ * Capitalizes the first letter in a string.
+ *
+ * @param {string} str The string whose first letter the function will capitalize.
+ *
+ * @return {string} Capitalized string.
+ */
+const upperFirst = ([firstLetter, ...rest]) => firstLetter.toUpperCase() + rest.join('');
+
+/**
+ * Higher order component factory for injecting the `colorsArray` argument as
+ * the colors prop in the `withCustomColors` HOC.
+ *
+ * @param {Array} colorsArray An array of color objects.
+ *
+ * @return {Function} The higher order component.
+ */
+const withCustomColorPalette = colorsArray => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+  ...props,
+  colors: colorsArray
+}), 'withCustomColorPalette');
+
+/**
+ * Higher order component factory for injecting the editor colors as the
+ * `colors` prop in the `withColors` HOC.
+ *
+ * @return {Function} The higher order component.
+ */
+const withEditorColorPalette = () => (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => {
+  const [userPalette, themePalette, defaultPalette] = use_settings_useSettings('color.palette.custom', 'color.palette.theme', 'color.palette.default');
+  const allColors = (0,external_wp_element_namespaceObject.useMemo)(() => [...(userPalette || []), ...(themePalette || []), ...(defaultPalette || [])], [userPalette, themePalette, defaultPalette]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+    ...props,
+    colors: allColors
+  });
+}, 'withEditorColorPalette');
+
+/**
+ * Helper function used with `createHigherOrderComponent` to create
+ * higher order components for managing color logic.
+ *
+ * @param {Array}    colorTypes       An array of color types (e.g. 'backgroundColor, borderColor).
+ * @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.
+ *
+ * @return {Component} The component that can be used as a HOC.
+ */
+function createColorHOC(colorTypes, withColorPalette) {
+  const colorMap = colorTypes.reduce((colorObject, colorType) => {
+    return {
+      ...colorObject,
+      ...(typeof colorType === 'string' ? {
+        [colorType]: with_colors_kebabCase(colorType)
+      } : colorType)
+    };
+  }, {});
+  return (0,external_wp_compose_namespaceObject.compose)([withColorPalette, WrappedComponent => {
+    return class extends external_wp_element_namespaceObject.Component {
+      constructor(props) {
+        super(props);
+        this.setters = this.createSetters();
+        this.colorUtils = {
+          getMostReadableColor: this.getMostReadableColor.bind(this)
+        };
+        this.state = {};
+      }
+      getMostReadableColor(colorValue) {
+        const {
+          colors
+        } = this.props;
+        return getMostReadableColor(colors, colorValue);
+      }
+      createSetters() {
+        return Object.keys(colorMap).reduce((settersAccumulator, colorAttributeName) => {
+          const upperFirstColorAttributeName = upperFirst(colorAttributeName);
+          const customColorAttributeName = `custom${upperFirstColorAttributeName}`;
+          settersAccumulator[`set${upperFirstColorAttributeName}`] = this.createSetColor(colorAttributeName, customColorAttributeName);
+          return settersAccumulator;
+        }, {});
+      }
+      createSetColor(colorAttributeName, customColorAttributeName) {
+        return colorValue => {
+          const colorObject = getColorObjectByColorValue(this.props.colors, colorValue);
+          this.props.setAttributes({
+            [colorAttributeName]: colorObject && colorObject.slug ? colorObject.slug : undefined,
+            [customColorAttributeName]: colorObject && colorObject.slug ? undefined : colorValue
+          });
+        };
+      }
+      static getDerivedStateFromProps({
+        attributes,
+        colors
+      }, previousState) {
+        return Object.entries(colorMap).reduce((newState, [colorAttributeName, colorContext]) => {
+          const colorObject = getColorObjectByAttributeValues(colors, attributes[colorAttributeName], attributes[`custom${upperFirst(colorAttributeName)}`]);
+          const previousColorObject = previousState[colorAttributeName];
+          const previousColor = previousColorObject?.color;
+          /**
+           * The "and previousColorObject" condition checks that a previous color object was already computed.
+           * At the start previousColorObject and colorValue are both equal to undefined
+           * bus as previousColorObject does not exist we should compute the object.
+           */
+          if (previousColor === colorObject.color && previousColorObject) {
+            newState[colorAttributeName] = previousColorObject;
+          } else {
+            newState[colorAttributeName] = {
+              ...colorObject,
+              class: getColorClassName(colorContext, colorObject.slug)
+            };
+          }
+          return newState;
+        }, {});
+      }
+      render() {
+        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+          ...this.props,
+          colors: undefined,
+          ...this.state,
+          ...this.setters,
+          colorUtils: this.colorUtils
+        });
+      }
+    };
+  }]);
+}
+
+/**
+ * A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic
+ * for class generation color value, retrieval and color attribute setting.
+ *
+ * Use this higher-order component to work with a custom set of colors.
+ *
+ * @example
+ *
+ * ```jsx
+ * const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];
+ * const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );
+ * // ...
+ * export default compose(
+ *     withCustomColors( 'backgroundColor', 'borderColor' ),
+ *     MyColorfulComponent,
+ * );
+ * ```
+ *
+ * @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).
+ *
+ * @return {Function} Higher-order component.
+ */
+function createCustomColorsHOC(colorsArray) {
+  return (...colorTypes) => {
+    const withColorPalette = withCustomColorPalette(colorsArray);
+    return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(createColorHOC(colorTypes, withColorPalette), 'withCustomColors');
+  };
+}
+
+/**
+ * A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.
+ *
+ * For use with the default editor/theme color palette.
+ *
+ * @example
+ *
+ * ```jsx
+ * export default compose(
+ *     withColors( 'backgroundColor', { textColor: 'color' } ),
+ *     MyColorfulComponent,
+ * );
+ * ```
+ *
+ * @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,
+ *                                        it should contain the color attribute name as key and the color context as value.
+ *                                        If the argument is a string the value should be the color attribute name,
+ *                                        the color context is computed by applying a kebab case transform to the value.
+ *                                        Color context represents the context/place where the color is going to be used.
+ *                                        The class name of the color is generated using 'has' followed by the color name
+ *                                        and ending with the color context all in kebab case e.g: has-green-background-color.
+ *
+ * @return {Function} Higher-order component.
+ */
+function withColors(...colorTypes) {
+  const withColorPalette = withEditorColorPalette();
+  return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)(createColorHOC(colorTypes, withColorPalette), 'withColors');
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors/index.js
+
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/gradients/index.js
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/font-size-picker.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function font_size_picker_FontSizePicker(props) {
+  const [fontSizes, customFontSize] = use_settings_useSettings('typography.fontSizes', 'typography.customFontSize');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FontSizePicker, {
+    ...props,
+    fontSizes: fontSizes,
+    disableCustomFontSizes: !customFontSize
+  });
+}
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/font-sizes/README.md
+ */
+/* harmony default export */ const font_size_picker = (font_size_picker_FontSizePicker);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/with-font-sizes.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+const DEFAULT_FONT_SIZES = [];
+
+/**
+ * Capitalizes the first letter in a string.
+ *
+ * @param {string} str The string whose first letter the function will capitalize.
+ *
+ * @return {string} Capitalized string.
+ */
+const with_font_sizes_upperFirst = ([firstLetter, ...rest]) => firstLetter.toUpperCase() + rest.join('');
+
+/**
+ * Higher-order component, which handles font size logic for class generation,
+ * font size value retrieval, and font size change handling.
+ *
+ * @param {...(Object|string)} fontSizeNames The arguments should all be strings.
+ *                                           Each string contains the font size
+ *                                           attribute name e.g: 'fontSize'.
+ *
+ * @return {Function} Higher-order component.
+ */
+/* harmony default export */ const with_font_sizes = ((...fontSizeNames) => {
+  /*
+   * Computes an object whose key is the font size attribute name as passed in the array,
+   * and the value is the custom font size attribute name.
+   * Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.
+   */
+  const fontSizeAttributeNames = fontSizeNames.reduce((fontSizeAttributeNamesAccumulator, fontSizeAttributeName) => {
+    fontSizeAttributeNamesAccumulator[fontSizeAttributeName] = `custom${with_font_sizes_upperFirst(fontSizeAttributeName)}`;
+    return fontSizeAttributeNamesAccumulator;
+  }, {});
+  return (0,external_wp_compose_namespaceObject.createHigherOrderComponent)((0,external_wp_compose_namespaceObject.compose)([(0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => props => {
+    const [fontSizes] = use_settings_useSettings('typography.fontSizes');
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+      ...props,
+      fontSizes: fontSizes || DEFAULT_FONT_SIZES
+    });
+  }, 'withFontSizes'), WrappedComponent => {
+    return class extends external_wp_element_namespaceObject.Component {
+      constructor(props) {
+        super(props);
+        this.setters = this.createSetters();
+        this.state = {};
+      }
+      createSetters() {
+        return Object.entries(fontSizeAttributeNames).reduce((settersAccumulator, [fontSizeAttributeName, customFontSizeAttributeName]) => {
+          const upperFirstFontSizeAttributeName = with_font_sizes_upperFirst(fontSizeAttributeName);
+          settersAccumulator[`set${upperFirstFontSizeAttributeName}`] = this.createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName);
+          return settersAccumulator;
+        }, {});
+      }
+      createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName) {
+        return fontSizeValue => {
+          const fontSizeObject = this.props.fontSizes?.find(({
+            size
+          }) => size === Number(fontSizeValue));
+          this.props.setAttributes({
+            [fontSizeAttributeName]: fontSizeObject && fontSizeObject.slug ? fontSizeObject.slug : undefined,
+            [customFontSizeAttributeName]: fontSizeObject && fontSizeObject.slug ? undefined : fontSizeValue
+          });
+        };
+      }
+      static getDerivedStateFromProps({
+        attributes,
+        fontSizes
+      }, previousState) {
+        const didAttributesChange = (customFontSizeAttributeName, fontSizeAttributeName) => {
+          if (previousState[fontSizeAttributeName]) {
+            // If new font size is name compare with the previous slug.
+            if (attributes[fontSizeAttributeName]) {
+              return attributes[fontSizeAttributeName] !== previousState[fontSizeAttributeName].slug;
+            }
+            // If font size is not named, update when the font size value changes.
+            return previousState[fontSizeAttributeName].size !== attributes[customFontSizeAttributeName];
+          }
+          // In this case we need to build the font size object.
+          return true;
+        };
+        if (!Object.values(fontSizeAttributeNames).some(didAttributesChange)) {
+          return null;
+        }
+        const newState = Object.entries(fontSizeAttributeNames).filter(([key, value]) => didAttributesChange(value, key)).reduce((newStateAccumulator, [fontSizeAttributeName, customFontSizeAttributeName]) => {
+          const fontSizeAttributeValue = attributes[fontSizeAttributeName];
+          const fontSizeObject = utils_getFontSize(fontSizes, fontSizeAttributeValue, attributes[customFontSizeAttributeName]);
+          newStateAccumulator[fontSizeAttributeName] = {
+            ...fontSizeObject,
+            class: getFontSizeClass(fontSizeAttributeValue)
+          };
+          return newStateAccumulator;
+        }, {});
+        return {
+          ...previousState,
+          ...newState
+        };
+      }
+      render() {
+        return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WrappedComponent, {
+          ...this.props,
+          fontSizes: undefined,
+          ...this.state,
+          ...this.setters
+        });
+      }
+    };
+  }]), 'withFontSizes');
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/index.js
+
+
+
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/autocompleters/block.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+const block_noop = () => {};
+const block_SHOWN_BLOCK_TYPES = 9;
+
+/**
+ * Creates a blocks repeater for replacing the current block with a selected block type.
+ *
+ * @return {Object} A blocks completer.
+ */
+function createBlockCompleter() {
+  return {
+    name: 'blocks',
+    className: 'block-editor-autocompleters__block',
+    triggerPrefix: '/',
+    useItems(filterValue) {
+      const {
+        rootClientId,
+        selectedBlockId,
+        prioritizedBlocks
+      } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+        const {
+          getSelectedBlockClientId,
+          getBlock,
+          getBlockListSettings,
+          getBlockRootClientId
+        } = select(store);
+        const {
+          getActiveBlockVariation
+        } = select(external_wp_blocks_namespaceObject.store);
+        const selectedBlockClientId = getSelectedBlockClientId();
+        const {
+          name: blockName,
+          attributes
+        } = getBlock(selectedBlockClientId);
+        const activeBlockVariation = getActiveBlockVariation(blockName, attributes);
+        const _rootClientId = getBlockRootClientId(selectedBlockClientId);
+        return {
+          selectedBlockId: activeBlockVariation ? `${blockName}/${activeBlockVariation.name}` : blockName,
+          rootClientId: _rootClientId,
+          prioritizedBlocks: getBlockListSettings(_rootClientId)?.prioritizedInserterBlocks
+        };
+      }, []);
+      const [items, categories, collections] = use_block_types_state(rootClientId, block_noop, true);
+      const filteredItems = (0,external_wp_element_namespaceObject.useMemo)(() => {
+        const initialFilteredItems = !!filterValue.trim() ? searchBlockItems(items, categories, collections, filterValue) : orderInserterBlockItems(orderBy(items, 'frecency', 'desc'), prioritizedBlocks);
+        return initialFilteredItems.filter(item => item.id !== selectedBlockId).slice(0, block_SHOWN_BLOCK_TYPES);
+      }, [filterValue, selectedBlockId, items, categories, collections, prioritizedBlocks]);
+      const options = (0,external_wp_element_namespaceObject.useMemo)(() => filteredItems.map(blockItem => {
+        const {
+          title,
+          icon,
+          isDisabled
+        } = blockItem;
+        return {
+          key: `block-${blockItem.id}`,
+          value: blockItem,
+          label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+              icon: icon,
+              showColors: true
+            }, "icon"), title]
+          }),
+          isDisabled
+        };
+      }), [filteredItems]);
+      return [options];
+    },
+    allowContext(before, after) {
+      return !(/\S/.test(before) || /\S/.test(after));
+    },
+    getOptionCompletion(inserterItem) {
+      const {
+        name,
+        initialAttributes,
+        innerBlocks,
+        syncStatus,
+        content
+      } = inserterItem;
+      return {
+        action: 'replace',
+        value: syncStatus === 'unsynced' ? (0,external_wp_blocks_namespaceObject.parse)(content, {
+          __unstableSkipMigrationLogs: true
+        }) : (0,external_wp_blocks_namespaceObject.createBlock)(name, initialAttributes, (0,external_wp_blocks_namespaceObject.createBlocksFromInnerBlocksTemplate)(innerBlocks))
+      };
+    }
+  };
+}
+
+/**
+ * Creates a blocks repeater for replacing the current block with a selected block type.
+ *
+ * @return {Object} A blocks completer.
+ */
+/* harmony default export */ const autocompleters_block = (createBlockCompleter());
+
+;// external ["wp","apiFetch"]
+const external_wp_apiFetch_namespaceObject = window["wp"]["apiFetch"];
+var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_namespaceObject);
+;// ./node_modules/@wordpress/icons/build-module/library/post.js
+/**
+ * WordPress dependencies
+ */
+
+
+const post = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "m7.3 9.7 1.4 1.4c.2-.2.3-.3.4-.5 0 0 0-.1.1-.1.3-.5.4-1.1.3-1.6L12 7 9 4 7.2 6.5c-.6-.1-1.1 0-1.6.3 0 0-.1 0-.1.1-.3.1-.4.2-.6.4l1.4 1.4L4 11v1h1l2.3-2.3zM4 20h9v-1.5H4V20zm0-5.5V16h16v-1.5H4z"
+  })
+});
+/* harmony default export */ const library_post = (post);
+
+;// ./node_modules/@wordpress/block-editor/build-module/autocompleters/link.js
+/**
+ * WordPress dependencies
+ */
+// Disable Reason: Needs to be refactored.
+// eslint-disable-next-line no-restricted-imports
+
+
+
+
+
+const SHOWN_SUGGESTIONS = 10;
+
+/**
+ * Creates a suggestion list for links to posts or pages.
+ *
+ * @return {Object} A links completer.
+ */
+function createLinkCompleter() {
+  return {
+    name: 'links',
+    className: 'block-editor-autocompleters__link',
+    triggerPrefix: '[[',
+    options: async letters => {
+      let options = await external_wp_apiFetch_default()({
+        path: (0,external_wp_url_namespaceObject.addQueryArgs)('/wp/v2/search', {
+          per_page: SHOWN_SUGGESTIONS,
+          search: letters,
+          type: 'post',
+          order_by: 'menu_order'
+        })
+      });
+      options = options.filter(option => option.title !== '');
+      return options;
+    },
+    getOptionKeywords(item) {
+      const expansionWords = item.title.split(/\s+/);
+      return [...expansionWords];
+    },
+    getOptionLabel(item) {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+          icon: item.subtype === 'page' ? library_page : library_post
+        }, "icon"), (0,external_wp_htmlEntities_namespaceObject.decodeEntities)(item.title)]
+      });
+    },
+    getOptionCompletion(item) {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("a", {
+        href: item.url,
+        children: item.title
+      });
+    }
+  };
+}
+
+/**
+ * Creates a suggestion list for links to posts or pages..
+ *
+ * @return {Object} A link completer.
+ */
+/* harmony default export */ const autocompleters_link = (createLinkCompleter());
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/autocomplete/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+/**
+ * Shared reference to an empty array for cases where it is important to avoid
+ * returning a new array reference on every invocation.
+ *
+ * @type {Array}
+ */
+
+const autocomplete_EMPTY_ARRAY = [];
+function useCompleters({
+  completers = autocomplete_EMPTY_ARRAY
+}) {
+  const {
+    name
+  } = useBlockEditContext();
+  return (0,external_wp_element_namespaceObject.useMemo)(() => {
+    let filteredCompleters = [...completers, autocompleters_link];
+    if (name === (0,external_wp_blocks_namespaceObject.getDefaultBlockName)() || (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, '__experimentalSlashInserter', false)) {
+      filteredCompleters = [...filteredCompleters, autocompleters_block];
+    }
+    if ((0,external_wp_hooks_namespaceObject.hasFilter)('editor.Autocomplete.completers')) {
+      // Provide copies so filters may directly modify them.
+      if (filteredCompleters === completers) {
+        filteredCompleters = filteredCompleters.map(completer => ({
+          ...completer
+        }));
+      }
+      filteredCompleters = (0,external_wp_hooks_namespaceObject.applyFilters)('editor.Autocomplete.completers', filteredCompleters, name);
+    }
+    return filteredCompleters;
+  }, [completers, name]);
+}
+function useBlockEditorAutocompleteProps(props) {
+  return (0,external_wp_components_namespaceObject.__unstableUseAutocompleteProps)({
+    ...props,
+    completers: useCompleters(props)
+  });
+}
+
+/**
+ * Wrap the default Autocomplete component with one that supports a filter hook
+ * for customizing its list of autocompleters.
+ *
+ * @type {import('react').FC}
+ */
+function BlockEditorAutocomplete(props) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Autocomplete, {
+    ...props,
+    completers: useCompleters(props)
+  });
+}
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/autocomplete/README.md
+ */
+/* harmony default export */ const autocomplete = (BlockEditorAutocomplete);
+
+;// ./node_modules/@wordpress/icons/build-module/library/fullscreen.js
+/**
+ * WordPress dependencies
+ */
+
+
+const fullscreen = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M6 4a2 2 0 0 0-2 2v3h1.5V6a.5.5 0 0 1 .5-.5h3V4H6Zm3 14.5H6a.5.5 0 0 1-.5-.5v-3H4v3a2 2 0 0 0 2 2h3v-1.5Zm6 1.5v-1.5h3a.5.5 0 0 0 .5-.5v-3H20v3a2 2 0 0 1-2 2h-3Zm3-16a2 2 0 0 1 2 2v3h-1.5V6a.5.5 0 0 0-.5-.5h-3V4h3Z"
+  })
+});
+/* harmony default export */ const library_fullscreen = (fullscreen);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-full-height-alignment-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+function BlockFullHeightAlignmentControl({
+  isActive,
+  label = (0,external_wp_i18n_namespaceObject.__)('Full height'),
+  onToggle,
+  isDisabled
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+    isActive: isActive,
+    icon: library_fullscreen,
+    label: label,
+    onClick: () => onToggle(!isActive),
+    disabled: isDisabled
+  });
+}
+/* harmony default export */ const block_full_height_alignment_control = (BlockFullHeightAlignmentControl);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-matrix-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+const block_alignment_matrix_control_noop = () => {};
+
+/**
+ * The alignment matrix control allows users to quickly adjust inner block alignment.
+ *
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-matrix-control/README.md
+ *
+ * @example
+ * ```jsx
+ * function Example() {
+ *   return (
+ *     <BlockControls>
+ *       <BlockAlignmentMatrixControl
+ *         label={ __( 'Change content position' ) }
+ *         value="center"
+ *         onChange={ ( nextPosition ) =>
+ *           setAttributes( { contentPosition: nextPosition } )
+ *         }
+ *       />
+ *     </BlockControls>
+ *   );
+ * }
+ * ```
+ *
+ * @param {Object}   props            Component props.
+ * @param {string}   props.label      Label for the control. Defaults to 'Change matrix alignment'.
+ * @param {Function} props.onChange   Function to execute upon change of matrix state.
+ * @param {string}   props.value      Content alignment location. One of: 'center', 'center center',
+ *                                    'center left', 'center right', 'top center', 'top left',
+ *                                    'top right', 'bottom center', 'bottom left', 'bottom right'.
+ * @param {boolean}  props.isDisabled Whether the control should be disabled.
+ * @return {Element} The BlockAlignmentMatrixControl component.
+ */
+function BlockAlignmentMatrixControl(props) {
+  const {
+    label = (0,external_wp_i18n_namespaceObject.__)('Change matrix alignment'),
+    onChange = block_alignment_matrix_control_noop,
+    value = 'center',
+    isDisabled
+  } = props;
+  const icon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.AlignmentMatrixControl.Icon, {
+    value: value
+  });
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
+    popoverProps: {
+      placement: 'bottom-start'
+    },
+    renderToggle: ({
+      onToggle,
+      isOpen
+    }) => {
+      const openOnArrowDown = event => {
+        if (!isOpen && event.keyCode === external_wp_keycodes_namespaceObject.DOWN) {
+          event.preventDefault();
+          onToggle();
+        }
+      };
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+        onClick: onToggle,
+        "aria-haspopup": "true",
+        "aria-expanded": isOpen,
+        onKeyDown: openOnArrowDown,
+        label: label,
+        icon: icon,
+        showTooltip: true,
+        disabled: isDisabled
+      });
+    },
+    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.AlignmentMatrixControl, {
+      hasFocusBorder: false,
+      onChange: onChange,
+      value: value
+    })
+  });
+}
+/* harmony default export */ const block_alignment_matrix_control = (BlockAlignmentMatrixControl);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-title/use-block-display-title.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Returns the block's configured title as a string, or empty if the title
+ * cannot be determined.
+ *
+ * @example
+ *
+ * ```js
+ * useBlockDisplayTitle( { clientId: 'afd1cb17-2c08-4e7a-91be-007ba7ddc3a1', maximumLength: 17 } );
+ * ```
+ *
+ * @param {Object}           props
+ * @param {string}           props.clientId      Client ID of block.
+ * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
+ * @param {string|undefined} props.context       The context to pass to `getBlockLabel`.
+ * @return {?string} Block title.
+ */
+function useBlockDisplayTitle({
+  clientId,
+  maximumLength,
+  context
+}) {
+  const blockTitle = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    if (!clientId) {
+      return null;
+    }
+    const {
+      getBlockName,
+      getBlockAttributes
+    } = select(store);
+    const {
+      getBlockType,
+      getActiveBlockVariation
+    } = select(external_wp_blocks_namespaceObject.store);
+    const blockName = getBlockName(clientId);
+    const blockType = getBlockType(blockName);
+    if (!blockType) {
+      return null;
+    }
+    const attributes = getBlockAttributes(clientId);
+    const label = (0,external_wp_blocks_namespaceObject.__experimentalGetBlockLabel)(blockType, attributes, context);
+    // If the label is defined we prioritize it over a possible block variation title match.
+    if (label !== blockType.title) {
+      return label;
+    }
+    const match = getActiveBlockVariation(blockName, attributes);
+    // Label will fallback to the title if no label is defined for the current label context.
+    return match?.title || blockType.title;
+  }, [clientId, context]);
+  if (!blockTitle) {
+    return null;
+  }
+  if (maximumLength && maximumLength > 0 && blockTitle.length > maximumLength) {
+    const omission = '...';
+    return blockTitle.slice(0, maximumLength - omission.length) + omission;
+  }
+  return blockTitle;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-title/index.js
+/**
+ * Internal dependencies
+ */
+
+
+
+/**
+ * Renders the block's configured title as a string, or empty if the title
+ * cannot be determined.
+ *
+ * @example
+ *
+ * ```jsx
+ * <BlockTitle clientId="afd1cb17-2c08-4e7a-91be-007ba7ddc3a1" maximumLength={ 17 }/>
+ * ```
+ *
+ * @param {Object}           props
+ * @param {string}           props.clientId      Client ID of block.
+ * @param {number|undefined} props.maximumLength The maximum length that the block title string may be before truncated.
+ * @param {string|undefined} props.context       The context to pass to `getBlockLabel`.
+ *
+ * @return {JSX.Element} Block title.
+ */
+function BlockTitle({
+  clientId,
+  maximumLength,
+  context
+}) {
+  return useBlockDisplayTitle({
+    clientId,
+    maximumLength,
+    context
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/utils/get-editor-region.js
+/**
+ * Gets the editor region for a given editor canvas element or
+ * returns the passed element if no region is found
+ *
+ * @param { Object } editor The editor canvas element.
+ * @return { Object } The editor region or given editor element
+ */
+function getEditorRegion(editor) {
+  var _Array$from$find, _editorCanvas$closest;
+  if (!editor) {
+    return null;
+  }
+
+  // If there are multiple editors, we need to find the iframe that contains our contentRef to make sure
+  // we're focusing the region that contains this editor.
+  const editorCanvas = (_Array$from$find = Array.from(document.querySelectorAll('iframe[name="editor-canvas"]').values()).find(iframe => {
+    // Find the iframe that contains our contentRef
+    const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
+    return iframeDocument === editor.ownerDocument;
+  })) !== null && _Array$from$find !== void 0 ? _Array$from$find : editor;
+
+  // The region is provided by the editor, not the block-editor.
+  // We should send focus to the region if one is available to reuse the
+  // same interface for navigating landmarks. If no region is available,
+  // use the canvas instead.
+  return (_editorCanvas$closest = editorCanvas?.closest('[role="region"]')) !== null && _editorCanvas$closest !== void 0 ? _editorCanvas$closest : editorCanvas;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-breadcrumb/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+/**
+ * Block breadcrumb component, displaying the hierarchy of the current block selection as a breadcrumb.
+ *
+ * @param {Object} props               Component props.
+ * @param {string} props.rootLabelText Translated label for the root element of the breadcrumb trail.
+ * @return {Element}                   Block Breadcrumb.
+ */
+
+function BlockBreadcrumb({
+  rootLabelText
+}) {
+  const {
+    selectBlock,
+    clearSelectedBlock
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const insertOrReplaceBlocks = (0,external_wp_element_namespaceObject.useCallback)((blocks, updateSelection = true, initialPosition = 0, clientIdsToReplace = []) => {
-    if (!Array.isArray(blocks)) {
-      blocks = [blocks];
-    }
-    const clientIds = getBlockOrder(targetRootClientId);
-    const clientId = clientIds[targetBlockIndex];
-    const blocksClientIds = blocks.map(block => block.clientId);
-    const areGroupableBlocks = isGroupable([...blocksClientIds, clientId]);
-    if (operation === 'replace') {
-      replaceBlocks(clientId, blocks, undefined, initialPosition);
-    } else if (operation === 'group' && areGroupableBlocks) {
-      const targetBlock = getBlock(clientId);
-      if (nearestSide === 'left') {
-        blocks.push(targetBlock);
-      } else {
-        blocks.unshift(targetBlock);
-      }
-      const groupInnerBlocks = blocks.map(block => {
-        return (0,external_wp_blocks_namespaceObject.createBlock)(block.name, block.attributes, block.innerBlocks);
-      });
-      const areAllImages = blocks.every(block => {
-        return block.name === 'core/image';
-      });
-      const galleryBlock = canInsertBlockType('core/gallery', targetRootClientId);
-      const wrappedBlocks = (0,external_wp_blocks_namespaceObject.createBlock)(areAllImages && galleryBlock ? 'core/gallery' : getGroupingBlockName(), {
-        layout: {
-          type: 'flex',
-          flexWrap: areAllImages && galleryBlock ? null : 'nowrap'
-        }
-      }, groupInnerBlocks);
-      // Need to make sure both the target block and the block being dragged are replaced
-      // otherwise the dragged block will be duplicated.
-      replaceBlocks([clientId, ...clientIdsToReplace], wrappedBlocks, undefined, initialPosition);
-    } else {
-      insertBlocks(blocks, targetBlockIndex, targetRootClientId, updateSelection, initialPosition);
-    }
-  }, [getBlockOrder, targetRootClientId, targetBlockIndex, isGroupable, operation, replaceBlocks, getBlock, nearestSide, canInsertBlockType, getGroupingBlockName, insertBlocks]);
-  const moveBlocks = (0,external_wp_element_namespaceObject.useCallback)((sourceClientIds, sourceRootClientId, insertIndex) => {
-    if (operation === 'replace') {
-      const sourceBlocks = getBlocksByClientId(sourceClientIds);
-      const targetBlockClientIds = getBlockOrder(targetRootClientId);
-      const targetBlockClientId = targetBlockClientIds[targetBlockIndex];
-      registry.batch(() => {
-        // Remove the source blocks.
-        removeBlocks(sourceClientIds, false);
-        // Replace the target block with the source blocks.
-        replaceBlocks(targetBlockClientId, sourceBlocks, undefined, 0);
-      });
-    } else {
-      moveBlocksToPosition(sourceClientIds, sourceRootClientId, targetRootClientId, insertIndex);
-    }
-  }, [operation, getBlockOrder, getBlocksByClientId, moveBlocksToPosition, registry, removeBlocks, replaceBlocks, targetBlockIndex, targetRootClientId]);
-  const _onDrop = onBlockDrop(targetRootClientId, targetBlockIndex, getBlockIndex, getClientIdsOfDescendants, moveBlocks, insertOrReplaceBlocks, clearSelectedBlock, operation, getBlock);
-  const _onFilesDrop = onFilesDrop(targetRootClientId, getSettings, updateBlockAttributes, canInsertBlockType, insertOrReplaceBlocks);
-  const _onHTMLDrop = onHTMLDrop(insertOrReplaceBlocks);
-  return event => {
-    const files = (0,external_wp_dom_namespaceObject.getFilesFromDataTransfer)(event.dataTransfer);
-    const html = event.dataTransfer.getData('text/html');
-
-    /**
-     * From Windows Chrome 96, the `event.dataTransfer` returns both file object and HTML.
-     * The order of the checks is important to recognise the HTML drop.
-     */
-    if (html) {
-      _onHTMLDrop(html);
-    } else if (files.length) {
-      _onFilesDrop(files);
-    } else {
-      _onDrop(event);
-    }
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/math.js
-/**
- * A string representing the name of an edge.
- *
- * @typedef {'top'|'right'|'bottom'|'left'} WPEdgeName
- */
-
-/**
- * @typedef  {Object} WPPoint
- * @property {number} x The horizontal position.
- * @property {number} y The vertical position.
- */
-
-/**
- * Given a point, a DOMRect and the name of an edge, returns the distance to
- * that edge of the rect.
- *
- * This function works for edges that are horizontal or vertical (e.g. not
- * rotated), the following terms are used so that the function works in both
- * orientations:
- *
- * - Forward, meaning the axis running horizontally when an edge is vertical
- *   and vertically when an edge is horizontal.
- * - Lateral, meaning the axis running vertically when an edge is vertical
- *   and horizontally when an edge is horizontal.
- *
- * @param {WPPoint}    point The point to measure distance from.
- * @param {DOMRect}    rect  A DOM Rect containing edge positions.
- * @param {WPEdgeName} edge  The edge to measure to.
- */
-function getDistanceFromPointToEdge(point, rect, edge) {
-  const isHorizontal = edge === 'top' || edge === 'bottom';
-  const {
-    x,
-    y
-  } = point;
-  const pointLateralPosition = isHorizontal ? x : y;
-  const pointForwardPosition = isHorizontal ? y : x;
-  const edgeStart = isHorizontal ? rect.left : rect.top;
-  const edgeEnd = isHorizontal ? rect.right : rect.bottom;
-  const edgeForwardPosition = rect[edge];
-
-  // Measure the straight line distance to the edge of the rect, when the
-  // point is adjacent to the edge.
-  // Else, if the point is positioned diagonally to the edge of the rect,
-  // measure diagonally to the nearest corner that the edge meets.
-  let edgeLateralPosition;
-  if (pointLateralPosition >= edgeStart && pointLateralPosition <= edgeEnd) {
-    edgeLateralPosition = pointLateralPosition;
-  } else if (pointLateralPosition < edgeEnd) {
-    edgeLateralPosition = edgeStart;
-  } else {
-    edgeLateralPosition = edgeEnd;
-  }
-  return Math.sqrt((pointLateralPosition - edgeLateralPosition) ** 2 + (pointForwardPosition - edgeForwardPosition) ** 2);
-}
-
-/**
- * Given a point, a DOMRect and a list of allowed edges returns the name of and
- * distance to the nearest edge.
- *
- * @param {WPPoint}      point        The point to measure distance from.
- * @param {DOMRect}      rect         A DOM Rect containing edge positions.
- * @param {WPEdgeName[]} allowedEdges A list of the edges included in the
- *                                    calculation. Defaults to all edges.
- *
- * @return {[number, string]} An array where the first value is the distance
- *                              and a second is the edge name.
- */
-function getDistanceToNearestEdge(point, rect, allowedEdges = ['top', 'bottom', 'left', 'right']) {
-  let candidateDistance;
-  let candidateEdge;
-  allowedEdges.forEach(edge => {
-    const distance = getDistanceFromPointToEdge(point, rect, edge);
-    if (candidateDistance === undefined || distance < candidateDistance) {
-      candidateDistance = distance;
-      candidateEdge = edge;
-    }
-  });
-  return [candidateDistance, candidateEdge];
-}
-
-/**
- * Is the point contained by the rectangle.
- *
- * @param {WPPoint} point The point.
- * @param {DOMRect} rect  The rectangle.
- *
- * @return {boolean} True if the point is contained by the rectangle, false otherwise.
- */
-function isPointContainedByRect(point, rect) {
-  return rect.left <= point.x && rect.right >= point.x && rect.top <= point.y && rect.bottom >= point.y;
-}
-
-/**
- * Is the point within the top and bottom boundaries of the rectangle.
- *
- * @param {WPPoint} point The point.
- * @param {DOMRect} rect  The rectangle.
- *
- * @return {boolean} True if the point is within top and bottom of rectangle, false otherwise.
- */
-function isPointWithinTopAndBottomBoundariesOfRect(point, rect) {
-  return rect.top <= point.y && rect.bottom >= point.y;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-block-drop-zone/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-const THRESHOLD_DISTANCE = 30;
-const MINIMUM_HEIGHT_FOR_THRESHOLD = 120;
-const MINIMUM_WIDTH_FOR_THRESHOLD = 120;
-
-/** @typedef {import('../../utils/math').WPPoint} WPPoint */
-/** @typedef {import('../use-on-block-drop/types').WPDropOperation} WPDropOperation */
-
-/**
- * The orientation of a block list.
- *
- * @typedef {'horizontal'|'vertical'|undefined} WPBlockListOrientation
- */
-
-/**
- * The insert position when dropping a block.
- *
- * @typedef {'before'|'after'} WPInsertPosition
- */
-
-/**
- * @typedef {Object} WPBlockData
- * @property {boolean}       isUnmodifiedDefaultBlock Is the block unmodified default block.
- * @property {() => DOMRect} getBoundingClientRect    Get the bounding client rect of the block.
- * @property {number}        blockIndex               The index of the block.
- */
-
-/**
- * Get the drop target position from a given drop point and the orientation.
- *
- * @param {WPBlockData[]}          blocksData  The block data list.
- * @param {WPPoint}                position    The position of the item being dragged.
- * @param {WPBlockListOrientation} orientation The orientation of the block list.
- * @param {Object}                 options     Additional options.
- * @return {[number, WPDropOperation]} The drop target position.
- */
-function getDropTargetPosition(blocksData, position, orientation = 'vertical', options = {}) {
-  const allowedEdges = orientation === 'horizontal' ? ['left', 'right'] : ['top', 'bottom'];
-  let nearestIndex = 0;
-  let insertPosition = 'before';
-  let minDistance = Infinity;
-  let targetBlockIndex = null;
-  let nearestSide = 'right';
-  const {
-    dropZoneElement,
-    parentBlockOrientation,
-    rootBlockIndex = 0
-  } = options;
-
-  // Allow before/after when dragging over the top/bottom edges of the drop zone.
-  if (dropZoneElement && parentBlockOrientation !== 'horizontal') {
-    const rect = dropZoneElement.getBoundingClientRect();
-    const [distance, edge] = getDistanceToNearestEdge(position, rect, ['top', 'bottom']);
-
-    // If dragging over the top or bottom of the drop zone, insert the block
-    // before or after the parent block. This only applies to blocks that use
-    // a drop zone element, typically container blocks such as Group or Cover.
-    if (rect.height > MINIMUM_HEIGHT_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
-      if (edge === 'top') {
-        return [rootBlockIndex, 'before'];
-      }
-      if (edge === 'bottom') {
-        return [rootBlockIndex + 1, 'after'];
-      }
-    }
-  }
-  const isRightToLeft = (0,external_wp_i18n_namespaceObject.isRTL)();
-
-  // Allow before/after when dragging over the left/right edges of the drop zone.
-  if (dropZoneElement && parentBlockOrientation === 'horizontal') {
-    const rect = dropZoneElement.getBoundingClientRect();
-    const [distance, edge] = getDistanceToNearestEdge(position, rect, ['left', 'right']);
-
-    // If dragging over the left or right of the drop zone, insert the block
-    // before or after the parent block. This only applies to blocks that use
-    // a drop zone element, typically container blocks such as Group.
-    if (rect.width > MINIMUM_WIDTH_FOR_THRESHOLD && distance < THRESHOLD_DISTANCE) {
-      if (isRightToLeft && edge === 'right' || !isRightToLeft && edge === 'left') {
-        return [rootBlockIndex, 'before'];
-      }
-      if (isRightToLeft && edge === 'left' || !isRightToLeft && edge === 'right') {
-        return [rootBlockIndex + 1, 'after'];
-      }
-    }
-  }
-  blocksData.forEach(({
-    isUnmodifiedDefaultBlock,
-    getBoundingClientRect,
-    blockIndex,
-    blockOrientation
-  }) => {
-    const rect = getBoundingClientRect();
-    let [distance, edge] = getDistanceToNearestEdge(position, rect, allowedEdges);
-    // If the the point is close to a side, prioritize that side.
-    const [sideDistance, sideEdge] = getDistanceToNearestEdge(position, rect, ['left', 'right']);
-    const isPointInsideRect = isPointContainedByRect(position, rect);
-
-    // Prioritize the element if the point is inside of an unmodified default block.
-    if (isUnmodifiedDefaultBlock && isPointInsideRect) {
-      distance = 0;
-    } else if (orientation === 'vertical' && blockOrientation !== 'horizontal' && (isPointInsideRect && sideDistance < THRESHOLD_DISTANCE || !isPointInsideRect && isPointWithinTopAndBottomBoundariesOfRect(position, rect))) {
-      /**
-       * This condition should only apply when the layout is vertical (otherwise there's
-       * no need to create a Row) and dropzones should only activate when the block is
-       * either within and close to the sides of the target block or on its outer sides.
-       */
-      targetBlockIndex = blockIndex;
-      nearestSide = sideEdge;
-    }
-    if (distance < minDistance) {
-      // Where the dropped block will be inserted on the nearest block.
-      insertPosition = edge === 'bottom' || !isRightToLeft && edge === 'right' || isRightToLeft && edge === 'left' ? 'after' : 'before';
-
-      // Update the currently known best candidate.
-      minDistance = distance;
-      nearestIndex = blockIndex;
-    }
-  });
-  const adjacentIndex = nearestIndex + (insertPosition === 'after' ? 1 : -1);
-  const isNearestBlockUnmodifiedDefaultBlock = !!blocksData[nearestIndex]?.isUnmodifiedDefaultBlock;
-  const isAdjacentBlockUnmodifiedDefaultBlock = !!blocksData[adjacentIndex]?.isUnmodifiedDefaultBlock;
-
-  // If the target index is set then group with the block at that index.
-  if (targetBlockIndex !== null) {
-    return [targetBlockIndex, 'group', nearestSide];
-  }
-  // If both blocks are not unmodified default blocks then just insert between them.
-  if (!isNearestBlockUnmodifiedDefaultBlock && !isAdjacentBlockUnmodifiedDefaultBlock) {
-    // If the user is dropping to the trailing edge of the block
-    // add 1 to the index to represent dragging after.
-    const insertionIndex = insertPosition === 'after' ? nearestIndex + 1 : nearestIndex;
-    return [insertionIndex, 'insert'];
-  }
-
-  // Otherwise, replace the nearest unmodified default block.
-  return [isNearestBlockUnmodifiedDefaultBlock ? nearestIndex : adjacentIndex, 'replace'];
-}
-
-/**
- * Check if the dragged blocks can be dropped on the target.
- * @param {Function} getBlockType
- * @param {Object[]} allowedBlocks
- * @param {string[]} draggedBlockNames
- * @param {string}   targetBlockName
- * @return {boolean} Whether the dragged blocks can be dropped on the target.
- */
-function isDropTargetValid(getBlockType, allowedBlocks, draggedBlockNames, targetBlockName) {
-  // At root level allowedBlocks is undefined and all blocks are allowed.
-  // Otherwise, check if all dragged blocks are allowed.
-  let areBlocksAllowed = true;
-  if (allowedBlocks) {
-    const allowedBlockNames = allowedBlocks?.map(({
-      name
-    }) => name);
-    areBlocksAllowed = draggedBlockNames.every(name => allowedBlockNames?.includes(name));
-  }
-
-  // Work out if dragged blocks have an allowed parent and if so
-  // check target block matches the allowed parent.
-  const draggedBlockTypes = draggedBlockNames.map(name => getBlockType(name));
-  const targetMatchesDraggedBlockParents = draggedBlockTypes.every(block => {
-    const [allowedParentName] = block?.parent || [];
-    if (!allowedParentName) {
-      return true;
-    }
-    return allowedParentName === targetBlockName;
-  });
-  return areBlocksAllowed && targetMatchesDraggedBlockParents;
-}
-
-/**
- * @typedef  {Object} WPBlockDropZoneConfig
- * @property {?HTMLElement} dropZoneElement Optional element to be used as the drop zone.
- * @property {string}       rootClientId    The root client id for the block list.
- */
-
-/**
- * A React hook that can be used to make a block list handle drag and drop.
- *
- * @param {WPBlockDropZoneConfig} dropZoneConfig configuration data for the drop zone.
- */
-function useBlockDropZone({
-  dropZoneElement,
-  // An undefined value represents a top-level block. Default to an empty
-  // string for this so that `targetRootClientId` can be easily compared to
-  // values returned by the `getRootBlockClientId` selector, which also uses
-  // an empty string to represent top-level blocks.
-  rootClientId: targetRootClientId = '',
-  parentClientId: parentBlockClientId = '',
-  isDisabled = false
-} = {}) {
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const [dropTarget, setDropTarget] = (0,external_wp_element_namespaceObject.useState)({
-    index: null,
-    operation: 'insert'
-  });
-  const {
-    getBlockType
-  } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
-  const {
-    getBlockListSettings,
-    getBlocks,
-    getBlockIndex,
-    getDraggedBlockClientIds,
-    getBlockNamesByClientId,
-    getAllowedBlocks,
-    isDragging
-  } = unlock((0,external_wp_data_namespaceObject.useSelect)(store));
-  const {
-    showInsertionPoint,
-    hideInsertionPoint,
-    startDragging,
-    stopDragging
-  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
-  const onBlockDrop = useOnBlockDrop(dropTarget.operation === 'before' || dropTarget.operation === 'after' ? parentBlockClientId : targetRootClientId, dropTarget.index, {
-    operation: dropTarget.operation,
-    nearestSide: dropTarget.nearestSide
-  });
-  const throttled = (0,external_wp_compose_namespaceObject.useThrottle)((0,external_wp_element_namespaceObject.useCallback)((event, ownerDocument) => {
-    if (!isDragging()) {
-      // When dragging from the desktop, no drag start event is fired.
-      // So, ensure that the drag state is set when the user drags over a drop zone.
-      startDragging();
-    }
-    const allowedBlocks = getAllowedBlocks(targetRootClientId);
-    const targetBlockName = getBlockNamesByClientId([targetRootClientId])[0];
-    const draggedBlockNames = getBlockNamesByClientId(getDraggedBlockClientIds());
-    const isBlockDroppingAllowed = isDropTargetValid(getBlockType, allowedBlocks, draggedBlockNames, targetBlockName);
-    if (!isBlockDroppingAllowed) {
-      return;
-    }
-    const blocks = getBlocks(targetRootClientId);
-
-    // The block list is empty, don't show the insertion point but still allow dropping.
-    if (blocks.length === 0) {
-      registry.batch(() => {
-        setDropTarget({
-          index: 0,
-          operation: 'insert'
-        });
-        showInsertionPoint(targetRootClientId, 0, {
-          operation: 'insert'
-        });
-      });
-      return;
-    }
-    const blocksData = blocks.map(block => {
-      const clientId = block.clientId;
-      return {
-        isUnmodifiedDefaultBlock: (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(block),
-        getBoundingClientRect: () => ownerDocument.getElementById(`block-${clientId}`).getBoundingClientRect(),
-        blockIndex: getBlockIndex(clientId),
-        blockOrientation: getBlockListSettings(clientId)?.orientation
-      };
-    });
-    const [targetIndex, operation, nearestSide] = getDropTargetPosition(blocksData, {
-      x: event.clientX,
-      y: event.clientY
-    }, getBlockListSettings(targetRootClientId)?.orientation, {
-      dropZoneElement,
-      parentBlockClientId,
-      parentBlockOrientation: parentBlockClientId ? getBlockListSettings(parentBlockClientId)?.orientation : undefined,
-      rootBlockIndex: getBlockIndex(targetRootClientId)
-    });
-    registry.batch(() => {
-      setDropTarget({
-        index: targetIndex,
-        operation,
-        nearestSide
-      });
-      const insertionPointClientId = ['before', 'after'].includes(operation) ? parentBlockClientId : targetRootClientId;
-      showInsertionPoint(insertionPointClientId, targetIndex, {
-        operation,
-        nearestSide
-      });
-    });
-  }, [getAllowedBlocks, targetRootClientId, getBlockNamesByClientId, getDraggedBlockClientIds, getBlockType, getBlocks, getBlockListSettings, dropZoneElement, parentBlockClientId, getBlockIndex, registry, showInsertionPoint, isDragging, startDragging]), 200);
-  return (0,external_wp_compose_namespaceObject.__experimentalUseDropZone)({
-    dropZoneElement,
-    isDisabled,
-    onDrop: onBlockDrop,
-    onDragOver(event) {
-      // `currentTarget` is only available while the event is being
-      // handled, so get it now and pass it to the thottled function.
-      // https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
-      throttled(event, event.currentTarget.ownerDocument);
-    },
-    onDragLeave() {
-      throttled.cancel();
-      hideInsertionPoint();
-    },
-    onDragEnd() {
-      throttled.cancel();
-      stopDragging();
-      hideInsertionPoint();
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inner-blocks/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-const inner_blocks_EMPTY_OBJECT = {};
-function BlockContext({
-  children,
-  clientId
-}) {
-  const context = useBlockContext(clientId);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockContextProvider, {
-    value: context,
-    children: children
-  });
-}
-const BlockListItemsMemo = (0,external_wp_element_namespaceObject.memo)(BlockListItems);
-
-/**
- * InnerBlocks is a component which allows a single block to have multiple blocks
- * as children. The UncontrolledInnerBlocks component is used whenever the inner
- * blocks are not controlled by another entity. In other words, it is normally
- * used for inner blocks in the post editor
- *
- * @param {Object} props The component props.
- */
-function UncontrolledInnerBlocks(props) {
   const {
     clientId,
-    allowedBlocks,
-    prioritizedInserterBlocks,
-    defaultBlock,
-    directInsert,
-    __experimentalDefaultBlock,
-    __experimentalDirectInsert,
-    template,
-    templateLock,
-    wrapperRef,
-    templateInsertUpdatesSelection,
-    __experimentalCaptureToolbars: captureToolbars,
-    __experimentalAppenderTagName,
-    renderAppender,
-    orientation,
-    placeholder,
-    layout,
-    name,
-    blockType,
-    parentLock,
-    defaultLayout
-  } = props;
-  useNestedSettingsUpdate(clientId, parentLock, allowedBlocks, prioritizedInserterBlocks, defaultBlock, directInsert, __experimentalDefaultBlock, __experimentalDirectInsert, templateLock, captureToolbars, orientation, layout);
-  useInnerBlockTemplateSync(clientId, template, templateLock, templateInsertUpdatesSelection);
-  const defaultLayoutBlockSupport = (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, 'layout') || (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, '__experimentalLayout') || inner_blocks_EMPTY_OBJECT;
-  const {
-    allowSizingOnChildren = false
-  } = defaultLayoutBlockSupport;
-  const usedLayout = layout || defaultLayoutBlockSupport;
-  const memoedLayout = (0,external_wp_element_namespaceObject.useMemo)(() => ({
-    // Default layout will know about any content/wide size defined by the theme.
-    ...defaultLayout,
-    ...usedLayout,
-    ...(allowSizingOnChildren && {
-      allowSizingOnChildren: true
-    })
-  }), [defaultLayout, usedLayout, allowSizingOnChildren]);
-
-  // For controlled inner blocks, we don't want a change in blocks to
-  // re-render the blocks list.
-  const items = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListItemsMemo, {
-    rootClientId: clientId,
-    renderAppender: renderAppender,
-    __experimentalAppenderTagName: __experimentalAppenderTagName,
-    layout: memoedLayout,
-    wrapperRef: wrapperRef,
-    placeholder: placeholder
-  });
-  if (Object.keys(blockType.providesContext).length === 0) {
-    return items;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockContext, {
-    clientId: clientId,
-    children: items
-  });
-}
-
-/**
- * The controlled inner blocks component wraps the uncontrolled inner blocks
- * component with the blockSync hook. This keeps the innerBlocks of the block in
- * the block-editor store in sync with the blocks of the controlling entity. An
- * example of an inner block controller is a template part block, which provides
- * its own blocks from the template part entity data source.
- *
- * @param {Object} props The component props.
- */
-function ControlledInnerBlocks(props) {
-  useBlockSync(props);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(UncontrolledInnerBlocks, {
-    ...props
-  });
-}
-const ForwardedInnerBlocks = (0,external_wp_element_namespaceObject.forwardRef)((props, ref) => {
-  const innerBlocksProps = useInnerBlocksProps({
-    ref
-  }, props);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: "block-editor-inner-blocks",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      ...innerBlocksProps
-    })
-  });
-});
-
-/**
- * This hook is used to lightly mark an element as an inner blocks wrapper
- * element. Call this hook and pass the returned props to the element to mark as
- * an inner blocks wrapper, automatically rendering inner blocks as children. If
- * you define a ref for the element, it is important to pass the ref to this
- * hook, which the hook in turn will pass to the component through the props it
- * returns. Optionally, you can also pass any other props through this hook, and
- * they will be merged and returned.
- *
- * @param {Object} props   Optional. Props to pass to the element. Must contain
- *                         the ref if one is defined.
- * @param {Object} options Optional. Inner blocks options.
- *
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md
- */
-function useInnerBlocksProps(props = {}, options = {}) {
-  const {
-    __unstableDisableLayoutClassNames,
-    __unstableDisableDropZone,
-    dropZoneElement
-  } = options;
-  const {
-    clientId,
-    layout = null,
-    __unstableLayoutClassNames: layoutClassNames = ''
-  } = useBlockEditContext();
-  const selected = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockName,
-      isBlockSelected,
-      hasSelectedInnerBlock,
-      __unstableGetEditorMode,
-      getTemplateLock,
-      getBlockRootClientId,
-      getBlockEditingMode,
-      getBlockSettings,
-      isDragging,
-      getSettings
+    parents,
+    hasSelection
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getSelectionStart,
+      getSelectedBlockClientId,
+      getEnabledBlockParents
     } = unlock(select(store));
-    let _isDropZoneDisabled;
-    // In zoom out mode, we want to disable the drop zone for the sections.
-    // The inner blocks belonging to the section drop zone is
-    // already disabled by the blocks themselves being disabled.
-    if (__unstableGetEditorMode() === 'zoom-out') {
-      const {
-        sectionRootClientId
-      } = unlock(getSettings());
-      _isDropZoneDisabled = clientId !== sectionRootClientId;
-    }
-    if (!clientId) {
-      return {
-        isDropZoneDisabled: _isDropZoneDisabled
-      };
-    }
-    const {
-      hasBlockSupport,
-      getBlockType
-    } = select(external_wp_blocks_namespaceObject.store);
-    const blockName = getBlockName(clientId);
-    const enableClickThrough = __unstableGetEditorMode() === 'navigation';
-    const blockEditingMode = getBlockEditingMode(clientId);
-    const parentClientId = getBlockRootClientId(clientId);
-    const [defaultLayout] = getBlockSettings(clientId, 'layout');
-    if (_isDropZoneDisabled !== undefined) {
-      _isDropZoneDisabled = blockEditingMode === 'disabled';
-    }
-    return {
-      __experimentalCaptureToolbars: hasBlockSupport(blockName, '__experimentalExposeControlsToChildren', false),
-      hasOverlay: blockName !== 'core/template' && !isBlockSelected(clientId) && !hasSelectedInnerBlock(clientId, true) && enableClickThrough && !isDragging(),
-      name: blockName,
-      blockType: getBlockType(blockName),
-      parentLock: getTemplateLock(parentClientId),
-      parentClientId,
-      isDropZoneDisabled: _isDropZoneDisabled,
-      defaultLayout
-    };
-  }, [clientId]);
-  const {
-    __experimentalCaptureToolbars,
-    hasOverlay,
-    name,
-    blockType,
-    parentLock,
-    parentClientId,
-    isDropZoneDisabled,
-    defaultLayout
-  } = selected;
-  const blockDropZoneRef = useBlockDropZone({
-    dropZoneElement,
-    rootClientId: clientId,
-    parentClientId
-  });
-  const ref = (0,external_wp_compose_namespaceObject.useMergeRefs)([props.ref, __unstableDisableDropZone || isDropZoneDisabled ? null : blockDropZoneRef]);
-  const innerBlocksProps = {
-    __experimentalCaptureToolbars,
-    layout,
-    name,
-    blockType,
-    parentLock,
-    defaultLayout,
-    ...options
-  };
-  const InnerBlocks = innerBlocksProps.value && innerBlocksProps.onChange ? ControlledInnerBlocks : UncontrolledInnerBlocks;
-  return {
-    ...props,
-    ref,
-    className: dist_clsx(props.className, 'block-editor-block-list__layout', __unstableDisableLayoutClassNames ? '' : layoutClassNames, {
-      'has-overlay': hasOverlay
-    }),
-    children: clientId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InnerBlocks, {
-      ...innerBlocksProps,
-      clientId: clientId
-    }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListItems, {
-      ...options
-    })
-  };
-}
-useInnerBlocksProps.save = external_wp_blocks_namespaceObject.__unstableGetInnerBlocksProps;
-
-// Expose default appender placeholders as components.
-ForwardedInnerBlocks.DefaultBlockAppender = default_block_appender;
-ForwardedInnerBlocks.ButtonBlockAppender = inner_blocks_button_block_appender;
-ForwardedInnerBlocks.Content = () => useInnerBlocksProps.save().children;
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/inner-blocks/README.md
- */
-/* harmony default export */ const inner_blocks = (ForwardedInnerBlocks);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/observe-typing/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
- * Set of key codes upon which typing is to be initiated on a keydown event.
- *
- * @type {Set<number>}
- */
-
-const KEY_DOWN_ELIGIBLE_KEY_CODES = new Set([external_wp_keycodes_namespaceObject.UP, external_wp_keycodes_namespaceObject.RIGHT, external_wp_keycodes_namespaceObject.DOWN, external_wp_keycodes_namespaceObject.LEFT, external_wp_keycodes_namespaceObject.ENTER, external_wp_keycodes_namespaceObject.BACKSPACE]);
-
-/**
- * Returns true if a given keydown event can be inferred as intent to start
- * typing, or false otherwise. A keydown is considered eligible if it is a
- * text navigation without shift active.
- *
- * @param {KeyboardEvent} event Keydown event to test.
- *
- * @return {boolean} Whether event is eligible to start typing.
- */
-function isKeyDownEligibleForStartTyping(event) {
-  const {
-    keyCode,
-    shiftKey
-  } = event;
-  return !shiftKey && KEY_DOWN_ELIGIBLE_KEY_CODES.has(keyCode);
-}
-
-/**
- * Removes the `isTyping` flag when the mouse moves in the document of the given
- * element.
- */
-function useMouseMoveTypingReset() {
-  const isTyping = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).isTyping(), []);
-  const {
-    stopTyping
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  return (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    if (!isTyping) {
-      return;
-    }
-    const {
-      ownerDocument
-    } = node;
-    let lastClientX;
-    let lastClientY;
-
-    /**
-     * On mouse move, unset typing flag if user has moved cursor.
-     *
-     * @param {MouseEvent} event Mousemove event.
-     */
-    function stopTypingOnMouseMove(event) {
-      const {
-        clientX,
-        clientY
-      } = event;
-
-      // We need to check that the mouse really moved because Safari
-      // triggers mousemove events when shift or ctrl are pressed.
-      if (lastClientX && lastClientY && (lastClientX !== clientX || lastClientY !== clientY)) {
-        stopTyping();
-      }
-      lastClientX = clientX;
-      lastClientY = clientY;
-    }
-    ownerDocument.addEventListener('mousemove', stopTypingOnMouseMove);
-    return () => {
-      ownerDocument.removeEventListener('mousemove', stopTypingOnMouseMove);
-    };
-  }, [isTyping, stopTyping]);
-}
-
-/**
- * Sets and removes the `isTyping` flag based on user actions:
- *
- * - Sets the flag if the user types within the given element.
- * - Removes the flag when the user selects some text, focusses a non-text
- *   field, presses ESC or TAB, or moves the mouse in the document.
- */
-function useTypingObserver() {
-  const {
-    isTyping
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      isTyping: _isTyping
-    } = select(store);
-    return {
-      isTyping: _isTyping()
+    const selectedBlockClientId = getSelectedBlockClientId();
+    return {
+      parents: getEnabledBlockParents(selectedBlockClientId),
+      clientId: selectedBlockClientId,
+      hasSelection: !!getSelectionStart().clientId
     };
   }, []);
-  const {
-    startTyping,
-    stopTyping
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const ref1 = useMouseMoveTypingReset();
-  const ref2 = (0,external_wp_compose_namespaceObject.useRefEffect)(node => {
-    const {
-      ownerDocument
-    } = node;
-    const {
-      defaultView
-    } = ownerDocument;
-    const selection = defaultView.getSelection();
-
-    // Listeners to stop typing should only be added when typing.
-    // Listeners to start typing should only be added when not typing.
-    if (isTyping) {
-      let timerId;
-
-      /**
-       * Stops typing when focus transitions to a non-text field element.
-       *
-       * @param {FocusEvent} event Focus event.
-       */
-      function stopTypingOnNonTextField(event) {
-        const {
-          target
-        } = event;
-
-        // Since focus to a non-text field via arrow key will trigger
-        // before the keydown event, wait until after current stack
-        // before evaluating whether typing is to be stopped. Otherwise,
-        // typing will re-start.
-        timerId = defaultView.setTimeout(() => {
-          if (!(0,external_wp_dom_namespaceObject.isTextField)(target)) {
-            stopTyping();
-          }
-        });
-      }
-
-      /**
-       * Unsets typing flag if user presses Escape while typing flag is
-       * active.
-       *
-       * @param {KeyboardEvent} event Keypress or keydown event to
-       *                              interpret.
-       */
-      function stopTypingOnEscapeKey(event) {
-        const {
-          keyCode
-        } = event;
-        if (keyCode === external_wp_keycodes_namespaceObject.ESCAPE || keyCode === external_wp_keycodes_namespaceObject.TAB) {
-          stopTyping();
-        }
-      }
-
-      /**
-       * On selection change, unset typing flag if user has made an
-       * uncollapsed (shift) selection.
-       */
-      function stopTypingOnSelectionUncollapse() {
-        if (!selection.isCollapsed) {
-          stopTyping();
-        }
-      }
-      node.addEventListener('focus', stopTypingOnNonTextField);
-      node.addEventListener('keydown', stopTypingOnEscapeKey);
-      ownerDocument.addEventListener('selectionchange', stopTypingOnSelectionUncollapse);
-      return () => {
-        defaultView.clearTimeout(timerId);
-        node.removeEventListener('focus', stopTypingOnNonTextField);
-        node.removeEventListener('keydown', stopTypingOnEscapeKey);
-        ownerDocument.removeEventListener('selectionchange', stopTypingOnSelectionUncollapse);
-      };
-    }
-
-    /**
-     * Handles a keypress or keydown event to infer intention to start
-     * typing.
-     *
-     * @param {KeyboardEvent} event Keypress or keydown event to interpret.
-     */
-    function startTypingInTextField(event) {
-      const {
-        type,
-        target
-      } = event;
-
-      // Abort early if already typing, or key press is incurred outside a
-      // text field (e.g. arrow-ing through toolbar buttons).
-      // Ignore typing if outside the current DOM container
-      if (!(0,external_wp_dom_namespaceObject.isTextField)(target) || !node.contains(target)) {
-        return;
-      }
-
-      // Special-case keydown because certain keys do not emit a keypress
-      // event. Conversely avoid keydown as the canonical event since
-      // there are many keydown which are explicitly not targeted for
-      // typing.
-      if (type === 'keydown' && !isKeyDownEligibleForStartTyping(event)) {
-        return;
-      }
-      startTyping();
-    }
-    node.addEventListener('keypress', startTypingInTextField);
-    node.addEventListener('keydown', startTypingInTextField);
-    return () => {
-      node.removeEventListener('keypress', startTypingInTextField);
-      node.removeEventListener('keydown', startTypingInTextField);
-    };
-  }, [isTyping, startTyping, stopTyping]);
-  return (0,external_wp_compose_namespaceObject.useMergeRefs)([ref1, ref2]);
-}
-function ObserveTyping({
-  children
-}) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    ref: useTypingObserver(),
-    children: children
-  });
-}
-
-/**
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/observe-typing/README.md
- */
-/* harmony default export */ const observe_typing = (ObserveTyping);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-list/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-const block_list_IntersectionObserver = (0,external_wp_element_namespaceObject.createContext)();
-const pendingBlockVisibilityUpdatesPerRegistry = new WeakMap();
-function block_list_Root({
-  className,
-  ...settings
-}) {
-  const isLargeViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium');
-  const {
-    isOutlineMode,
-    isFocusMode,
-    editorMode,
-    temporarilyEditingAsBlocks
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getSettings,
-      __unstableGetEditorMode,
-      getTemporarilyEditingAsBlocks,
-      isTyping
-    } = unlock(select(store));
-    const {
-      outlineMode,
-      focusMode
-    } = getSettings();
-    return {
-      isOutlineMode: outlineMode && !isTyping(),
-      isFocusMode: focusMode,
-      editorMode: __unstableGetEditorMode(),
-      temporarilyEditingAsBlocks: getTemporarilyEditingAsBlocks()
-    };
-  }, []);
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
-  const {
-    setBlockVisibility
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const delayedBlockVisibilityUpdates = (0,external_wp_compose_namespaceObject.useDebounce)((0,external_wp_element_namespaceObject.useCallback)(() => {
-    const updates = {};
-    pendingBlockVisibilityUpdatesPerRegistry.get(registry).forEach(([id, isIntersecting]) => {
-      updates[id] = isIntersecting;
-    });
-    setBlockVisibility(updates);
-  }, [registry]), 300, {
-    trailing: true
-  });
-  const intersectionObserver = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    const {
-      IntersectionObserver: Observer
-    } = window;
-    if (!Observer) {
-      return;
-    }
-    return new Observer(entries => {
-      if (!pendingBlockVisibilityUpdatesPerRegistry.get(registry)) {
-        pendingBlockVisibilityUpdatesPerRegistry.set(registry, []);
-      }
-      for (const entry of entries) {
-        const clientId = entry.target.getAttribute('data-block');
-        pendingBlockVisibilityUpdatesPerRegistry.get(registry).push([clientId, entry.isIntersecting]);
-      }
-      delayedBlockVisibilityUpdates();
-    });
-  }, []);
-  const innerBlocksProps = useInnerBlocksProps({
-    ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([useBlockSelectionClearer(), useInBetweenInserter(), useTypingObserver()]),
-    className: dist_clsx('is-root-container', className, {
-      'is-outline-mode': isOutlineMode,
-      'is-focus-mode': isFocusMode && isLargeViewport,
-      'is-navigate-mode': editorMode === 'navigation'
-    })
-  }, settings);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_list_IntersectionObserver.Provider, {
-    value: intersectionObserver,
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      ...innerBlocksProps
-    }), !!temporarilyEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(StopEditingAsBlocksOnOutsideSelect, {
-      clientId: temporarilyEditingAsBlocks
-    })]
-  });
-}
-function StopEditingAsBlocksOnOutsideSelect({
-  clientId
-}) {
-  const {
-    stopEditingAsBlocks
-  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
-  const isBlockOrDescendantSelected = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      isBlockSelected,
-      hasSelectedInnerBlock
+  const rootLabel = rootLabelText || (0,external_wp_i18n_namespaceObject.__)('Document');
+
+  // We don't care about this specific ref, but this is a way
+  // to get a ref within the editor canvas so we can focus it later.
+  const blockRef = (0,external_wp_element_namespaceObject.useRef)();
+  useBlockElementRef(clientId, blockRef);
+
+  /*
+   * Disable reason: The `list` ARIA role is redundant but
+   * Safari+VoiceOver won't announce the list otherwise.
+   */
+  /* eslint-disable jsx-a11y/no-redundant-roles */
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("ul", {
+    className: "block-editor-block-breadcrumb",
+    role: "list",
+    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Block breadcrumb'),
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+      className: !hasSelection ? 'block-editor-block-breadcrumb__current' : undefined,
+      "aria-current": !hasSelection ? 'true' : undefined,
+      children: [hasSelection && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        size: "small",
+        className: "block-editor-block-breadcrumb__button",
+        onClick: () => {
+          // Find the block editor wrapper for the selected block
+          const blockEditor = blockRef.current?.closest('.editor-styles-wrapper');
+          clearSelectedBlock();
+          getEditorRegion(blockEditor)?.focus();
+        },
+        children: rootLabel
+      }), !hasSelection && rootLabel, !!clientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+        icon: chevron_right_small,
+        className: "block-editor-block-breadcrumb__separator"
+      })]
+    }), parents.map(parentClientId => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        size: "small",
+        className: "block-editor-block-breadcrumb__button",
+        onClick: () => selectBlock(parentClientId),
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
+          clientId: parentClientId,
+          maximumLength: 35
+        })
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
+        icon: chevron_right_small,
+        className: "block-editor-block-breadcrumb__separator"
+      })]
+    }, parentClientId)), !!clientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("li", {
+      className: "block-editor-block-breadcrumb__current",
+      "aria-current": "true",
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
+        clientId: clientId,
+        maximumLength: 35
+      })
+    })]
+  })
+  /* eslint-enable jsx-a11y/no-redundant-roles */;
+}
+/* harmony default export */ const block_breadcrumb = (BlockBreadcrumb);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-content-overlay/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+function useBlockOverlayActive(clientId) {
+  return (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      __unstableHasActiveBlockOverlayActive
     } = select(store);
-    return isBlockSelected(clientId) || hasSelectedInnerBlock(clientId, true);
+    return __unstableHasActiveBlockOverlayActive(clientId);
   }, [clientId]);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!isBlockOrDescendantSelected) {
-      stopEditingAsBlocks(clientId);
-    }
-  }, [isBlockOrDescendantSelected, clientId, stopEditingAsBlocks]);
-  return null;
-}
-function BlockList(settings) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Provider, {
-    value: DEFAULT_BLOCK_EDIT_CONTEXT,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_list_Root, {
-      ...settings
-    })
-  });
-}
-const block_list_EMPTY_ARRAY = [];
-const block_list_EMPTY_SET = new Set();
-function Items({
-  placeholder,
-  rootClientId,
-  renderAppender: CustomAppender,
-  __experimentalAppenderTagName,
-  layout = defaultLayout
-}) {
-  // Avoid passing CustomAppender to useSelect because it could be a new
-  // function on every render.
-  const hasAppender = CustomAppender !== false;
-  const hasCustomAppender = !!CustomAppender;
-  const {
-    order,
-    selectedBlocks,
-    visibleBlocks,
-    shouldRenderAppender
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getSettings,
-      getBlockOrder,
-      getSelectedBlockClientId,
-      getSelectedBlockClientIds,
-      __unstableGetVisibleBlocks,
-      getTemplateLock,
-      getBlockEditingMode,
-      __unstableGetEditorMode
-    } = select(store);
-    const _order = getBlockOrder(rootClientId);
-    if (getSettings().__unstableIsPreviewMode) {
-      return {
-        order: _order,
-        selectedBlocks: block_list_EMPTY_ARRAY,
-        visibleBlocks: block_list_EMPTY_SET
-      };
-    }
-    const selectedBlockClientId = getSelectedBlockClientId();
-    return {
-      order: _order,
-      selectedBlocks: getSelectedBlockClientIds(),
-      visibleBlocks: __unstableGetVisibleBlocks(),
-      shouldRenderAppender: hasAppender && __unstableGetEditorMode() !== 'zoom-out' && (hasCustomAppender ? !getTemplateLock(rootClientId) && getBlockEditingMode(rootClientId) !== 'disabled' : rootClientId === selectedBlockClientId || !rootClientId && !selectedBlockClientId && !_order.length)
-    };
-  }, [rootClientId, hasAppender, hasCustomAppender]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(LayoutProvider, {
-    value: layout,
-    children: [order.map(clientId => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.AsyncModeProvider, {
-      value:
-      // Only provide data asynchronously if the block is
-      // not visible and not selected.
-      !visibleBlocks.has(clientId) && !selectedBlocks.includes(clientId),
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_list_block, {
-        rootClientId: rootClientId,
-        clientId: clientId
-      })
-    }, clientId)), order.length < 1 && placeholder, shouldRenderAppender && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockListAppender, {
-      tagName: __experimentalAppenderTagName,
-      rootClientId: rootClientId,
-      CustomAppender: CustomAppender
-    })]
-  });
-}
-function BlockListItems(props) {
-  // This component needs to always be synchronous as it's the one changing
-  // the async mode depending on the block selection.
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_data_namespaceObject.AsyncModeProvider, {
-    value: false,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Items, {
-      ...props
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-block-toolbar-popover-props.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-block-toolbar-popover-props.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -50988,7 +55629,7 @@
 
   // Get how far the content area has been scrolled.
   const scrollTop = scrollContainer?.scrollTop || 0;
-  const blockRect = selectedBlockElement.getBoundingClientRect();
+  const blockRect = getElementBounds(selectedBlockElement);
   const contentRect = contentElement.getBoundingClientRect();
 
   // Get the vertical position of top of the visible content area.
@@ -51086,7 +55727,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-selected-block-tool-props.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-selected-block-tool-props.js
 /**
  * WordPress dependencies
  */
@@ -51137,7 +55778,7 @@
   return selectedBlockProps;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/empty-block-inserter.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/empty-block-inserter.js
 /**
  * External dependencies
  */
@@ -51185,7 +55826,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/use-scroll-when-dragging.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/use-scroll-when-dragging.js
 /**
  * WordPress dependencies
  */
@@ -51204,70 +55845,70 @@
  *                      and `onDragEnd` events respectively.
  */
 function useScrollWhenDragging() {
-  const dragStartY = (0,external_wp_element_namespaceObject.useRef)(null);
-  const velocityY = (0,external_wp_element_namespaceObject.useRef)(null);
-  const scrollParentY = (0,external_wp_element_namespaceObject.useRef)(null);
-  const scrollEditorInterval = (0,external_wp_element_namespaceObject.useRef)(null);
+  const dragStartYRef = (0,external_wp_element_namespaceObject.useRef)(null);
+  const velocityYRef = (0,external_wp_element_namespaceObject.useRef)(null);
+  const scrollParentYRef = (0,external_wp_element_namespaceObject.useRef)(null);
+  const scrollEditorIntervalRef = (0,external_wp_element_namespaceObject.useRef)(null);
 
   // Clear interval when unmounting.
   (0,external_wp_element_namespaceObject.useEffect)(() => () => {
-    if (scrollEditorInterval.current) {
-      clearInterval(scrollEditorInterval.current);
-      scrollEditorInterval.current = null;
+    if (scrollEditorIntervalRef.current) {
+      clearInterval(scrollEditorIntervalRef.current);
+      scrollEditorIntervalRef.current = null;
     }
   }, []);
   const startScrolling = (0,external_wp_element_namespaceObject.useCallback)(event => {
-    dragStartY.current = event.clientY;
+    dragStartYRef.current = event.clientY;
 
     // Find nearest parent(s) to scroll.
-    scrollParentY.current = (0,external_wp_dom_namespaceObject.getScrollContainer)(event.target);
-    scrollEditorInterval.current = setInterval(() => {
-      if (scrollParentY.current && velocityY.current) {
-        const newTop = scrollParentY.current.scrollTop + velocityY.current;
+    scrollParentYRef.current = (0,external_wp_dom_namespaceObject.getScrollContainer)(event.target);
+    scrollEditorIntervalRef.current = setInterval(() => {
+      if (scrollParentYRef.current && velocityYRef.current) {
+        const newTop = scrollParentYRef.current.scrollTop + velocityYRef.current;
 
         // Setting `behavior: 'smooth'` as a scroll property seems to hurt performance.
         // Better to use a small scroll interval.
-        scrollParentY.current.scroll({
+        scrollParentYRef.current.scroll({
           top: newTop
         });
       }
     }, SCROLL_INTERVAL_MS);
   }, []);
   const scrollOnDragOver = (0,external_wp_element_namespaceObject.useCallback)(event => {
-    if (!scrollParentY.current) {
-      return;
-    }
-    const scrollParentHeight = scrollParentY.current.offsetHeight;
-    const offsetDragStartPosition = dragStartY.current - scrollParentY.current.offsetTop;
-    const offsetDragPosition = event.clientY - scrollParentY.current.offsetTop;
+    if (!scrollParentYRef.current) {
+      return;
+    }
+    const scrollParentHeight = scrollParentYRef.current.offsetHeight;
+    const offsetDragStartPosition = dragStartYRef.current - scrollParentYRef.current.offsetTop;
+    const offsetDragPosition = event.clientY - scrollParentYRef.current.offsetTop;
     if (event.clientY > offsetDragStartPosition) {
       // User is dragging downwards.
       const moveableDistance = Math.max(scrollParentHeight - offsetDragStartPosition - SCROLL_INACTIVE_DISTANCE_PX, 0);
       const dragDistance = Math.max(offsetDragPosition - offsetDragStartPosition - SCROLL_INACTIVE_DISTANCE_PX, 0);
       const distancePercentage = moveableDistance === 0 || dragDistance === 0 ? 0 : dragDistance / moveableDistance;
-      velocityY.current = VELOCITY_MULTIPLIER * distancePercentage;
+      velocityYRef.current = VELOCITY_MULTIPLIER * distancePercentage;
     } else if (event.clientY < offsetDragStartPosition) {
       // User is dragging upwards.
       const moveableDistance = Math.max(offsetDragStartPosition - SCROLL_INACTIVE_DISTANCE_PX, 0);
       const dragDistance = Math.max(offsetDragStartPosition - offsetDragPosition - SCROLL_INACTIVE_DISTANCE_PX, 0);
       const distancePercentage = moveableDistance === 0 || dragDistance === 0 ? 0 : dragDistance / moveableDistance;
-      velocityY.current = -VELOCITY_MULTIPLIER * distancePercentage;
-    } else {
-      velocityY.current = 0;
+      velocityYRef.current = -VELOCITY_MULTIPLIER * distancePercentage;
+    } else {
+      velocityYRef.current = 0;
     }
   }, []);
   const stopScrolling = () => {
-    dragStartY.current = null;
-    scrollParentY.current = null;
-    if (scrollEditorInterval.current) {
-      clearInterval(scrollEditorInterval.current);
-      scrollEditorInterval.current = null;
+    dragStartYRef.current = null;
+    scrollParentYRef.current = null;
+    if (scrollEditorIntervalRef.current) {
+      clearInterval(scrollEditorIntervalRef.current);
+      scrollEditorIntervalRef.current = null;
     }
   };
   return [startScrolling, scrollOnDragOver, stopScrolling];
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-draggable/index.js
 /**
  * WordPress dependencies
  */
@@ -51326,7 +55967,7 @@
       getBlockType: _getBlockType
     };
   }, [clientIds]);
-  const isDragging = (0,external_wp_element_namespaceObject.useRef)(false);
+  const isDraggingRef = (0,external_wp_element_namespaceObject.useRef)(false);
   const [startScrolling, scrollOnDragOver, stopScrolling] = useScrollWhenDragging();
   const {
     getAllowedBlocks,
@@ -51341,15 +55982,15 @@
   // Stop dragging blocks if the block draggable is unmounted.
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     return () => {
-      if (isDragging.current) {
+      if (isDraggingRef.current) {
         stopDraggingBlocks();
       }
     };
   }, []);
 
   // Find the root of the editor iframe.
-  const blockRef = useBlockRef(clientIds[0]);
-  const editorRoot = blockRef.current?.closest('body');
+  const blockEl = useBlockElement(clientIds[0]);
+  const editorRoot = blockEl?.closest('body');
 
   /*
    * Add a dragover event listener to the editor root to track the blocks being dragged over.
@@ -51421,7 +56062,7 @@
       // frame to enable dragging.
       window.requestAnimationFrame(() => {
         startDraggingBlocks(clientIds);
-        isDragging.current = true;
+        isDraggingRef.current = true;
         startScrolling(event);
         if (onDragStart) {
           onDragStart();
@@ -51431,7 +56072,7 @@
     onDragOver: scrollOnDragOver,
     onDragEnd: () => {
       stopDraggingBlocks();
-      isDragging.current = false;
+      isDraggingRef.current = false;
       stopScrolling();
       if (onDragEnd) {
         onDragEnd();
@@ -51460,37 +56101,7 @@
 };
 /* harmony default export */ const block_draggable = (BlockDraggable);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-up.js
-/**
- * WordPress dependencies
- */
-
-
-const chevronUp = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/svg",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"
-  })
-});
-/* harmony default export */ const chevron_up = (chevronUp);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/chevron-down.js
-/**
- * WordPress dependencies
- */
-
-
-const chevronDown = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/svg",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"
-  })
-});
-/* harmony default export */ const chevron_down = (chevronDown);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/mover-description.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-mover/mover-description.js
 /**
  * WordPress dependencies
  */
@@ -51700,27 +56311,25 @@
   }
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/button.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-mover/button.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -51816,6 +56425,7 @@
   const descriptionId = `block-editor-block-mover-button__description-${instanceId}`;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       ref: ref,
       className: dist_clsx('block-editor-block-mover-button', `is-${direction}-button`),
       icon: getArrowIcon(direction, orientation),
@@ -51824,7 +56434,7 @@
       ...props,
       onClick: isDisabled ? null : onClick,
       disabled: isDisabled,
-      __experimentalIsFocusable: true
+      accessibleWhenDisabled: true
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
       id: descriptionId,
       children: getBlockMoverDescription(blocksCount, blockType && blockType.title, firstIndex, isFirst, isLast, direction === 'up' ? -1 : 1, orientation)
@@ -51846,25 +56456,24 @@
   });
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-mover/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-mover/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -51880,14 +56489,17 @@
     rootClientId,
     isFirst,
     isLast,
-    orientation
+    orientation,
+    isManualGrid
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    var _getBlockAttributes;
     const {
       getBlockIndex,
       getBlockListSettings,
       canMoveBlocks,
       getBlockOrder,
-      getBlockRootClientId
+      getBlockRootClientId,
+      getBlockAttributes
     } = select(store);
     const normalizedClientIds = Array.isArray(clientIds) ? clientIds : [clientIds];
     const firstClientId = normalizedClientIds[0];
@@ -51895,18 +56507,21 @@
     const firstIndex = getBlockIndex(firstClientId);
     const lastIndex = getBlockIndex(normalizedClientIds[normalizedClientIds.length - 1]);
     const blockOrder = getBlockOrder(_rootClientId);
+    const {
+      layout = {}
+    } = (_getBlockAttributes = getBlockAttributes(_rootClientId)) !== null && _getBlockAttributes !== void 0 ? _getBlockAttributes : {};
     return {
       canMove: canMoveBlocks(clientIds),
       rootClientId: _rootClientId,
       isFirst: firstIndex === 0,
       isLast: lastIndex === blockOrder.length - 1,
-      orientation: getBlockListSettings(_rootClientId)?.orientation
+      orientation: getBlockListSettings(_rootClientId)?.orientation,
+      isManualGrid: layout.type === 'grid' && layout.isManualPlacement && window.__experimentalEnableGridInteractivity
     };
   }, [clientIds]);
-  if (!canMove || isFirst && isLast && !rootClientId) {
-    return null;
-  }
-  const dragHandleLabel = (0,external_wp_i18n_namespaceObject.__)('Drag');
+  if (!canMove || isFirst && isLast && !rootClientId || hideDragHandle && isManualGrid) {
+    return null;
+  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.ToolbarGroup, {
     className: dist_clsx('block-editor-block-mover', {
       'is-horizontal': orientation === 'horizontal'
@@ -51915,17 +56530,17 @@
       clientIds: clientIds,
       fadeWhenDisabled: true,
       children: draggableProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         icon: drag_handle,
         className: "block-editor-block-mover__drag-handle",
-        "aria-hidden": "true",
-        label: dragHandleLabel
+        label: (0,external_wp_i18n_namespaceObject.__)('Drag')
         // Should not be able to tab to drag handle as this
         // button can only be used with a pointer device.
         ,
         tabIndex: "-1",
         ...draggableProps
       })
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    }), !isManualGrid && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
       className: "block-editor-block-mover__move-button-container",
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, {
         children: itemProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockMoverUpButton, {
@@ -51949,7 +56564,7 @@
  */
 /* harmony default export */ const block_mover = (BlockMover);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/utils.js
 /**
  * WordPress dependencies
  */
@@ -52109,19 +56724,19 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-parent-selector/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-parent-selector/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
@@ -52139,29 +56754,22 @@
     selectBlock
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
   const {
-    firstParentClientId,
-    isVisible
+    parentClientId
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getBlockName,
       getBlockParents,
       getSelectedBlockClientId,
-      getBlockEditingMode
-    } = select(store);
-    const {
-      hasBlockSupport
-    } = select(external_wp_blocks_namespaceObject.store);
+      getParentSectionBlock
+    } = unlock(select(store));
     const selectedBlockClientId = getSelectedBlockClientId();
+    const parentSection = getParentSectionBlock(selectedBlockClientId);
     const parents = getBlockParents(selectedBlockClientId);
-    const _firstParentClientId = parents[parents.length - 1];
-    const parentBlockName = getBlockName(_firstParentClientId);
-    const _parentBlockType = (0,external_wp_blocks_namespaceObject.getBlockType)(parentBlockName);
-    return {
-      firstParentClientId: _firstParentClientId,
-      isVisible: _firstParentClientId && getBlockEditingMode(_firstParentClientId) === 'default' && hasBlockSupport(_parentBlockType, '__experimentalParentSelector', true)
+    const _parentClientId = parentSection !== null && parentSection !== void 0 ? parentSection : parents[parents.length - 1];
+    return {
+      parentClientId: _parentClientId
     };
   }, []);
-  const blockInformation = useBlockDisplayInformation(firstParentClientId);
+  const blockInformation = useBlockDisplayInformation(parentClientId);
 
   // Allows highlighting the parent block outline when focusing or hovering
   // the parent block selector within the child.
@@ -52170,27 +56778,24 @@
     ref: nodeRef,
     highlightParent: true
   });
-  if (!isVisible) {
-    return null;
-  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: "block-editor-block-parent-selector",
     ref: nodeRef,
     ...showHoveredOrFocusedGestures,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
       className: "block-editor-block-parent-selector__button",
-      onClick: () => selectBlock(firstParentClientId),
-      label: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Name of the block's parent. */
+      onClick: () => selectBlock(parentClientId),
+      label: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the block's parent. */
       (0,external_wp_i18n_namespaceObject.__)('Select parent block: %s'), blockInformation?.title),
       showTooltip: true,
       icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
         icon: blockInformation?.icon
       })
     })
-  }, firstParentClientId);
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/copy.js
+  }, parentClientId);
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/copy.js
 /**
  * WordPress dependencies
  */
@@ -52207,59 +56812,59 @@
 });
 /* harmony default export */ const library_copy = (copy_copy);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/preview-block-popover.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/preview-block-popover.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function PreviewBlockPopover({
   blocks
 }) {
+  const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
+  if (isMobile) {
+    return null;
+  }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: "block-editor-block-switcher__popover__preview__parent",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-block-switcher__popover__preview__container",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
-        className: "block-editor-block-switcher__preview__popover",
-        placement: "bottom-start",
-        focusOnMount: false,
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-          className: "block-editor-block-switcher__preview",
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-            className: "block-editor-block-switcher__preview-title",
-            children: (0,external_wp_i18n_namespaceObject.__)('Preview')
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview, {
-            viewportWidth: 500,
-            blocks: blocks
-          })]
-        })
-      })
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-variation-transformations.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+    className: "block-editor-block-switcher__popover-preview-container",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
+      className: "block-editor-block-switcher__popover-preview",
+      placement: "right-start",
+      focusOnMount: false,
+      offset: 16,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+        className: "block-editor-block-switcher__preview",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+          className: "block-editor-block-switcher__preview-title",
+          children: (0,external_wp_i18n_namespaceObject.__)('Preview')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_preview, {
+          viewportWidth: 500,
+          blocks: blocks
+        })]
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-variation-transformations.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -52310,14 +56915,14 @@
       blocks: (0,external_wp_blocks_namespaceObject.cloneBlock)(blocks[0], transformations.find(({
         name
       }) => name === hoveredTransformItemName).attributes)
-    }), transformations?.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockVariationTranformationItem, {
+    }), transformations?.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockVariationTransformationItem, {
       item: item,
       onSelect: onSelect,
       setHoveredTransformItemName: setHoveredTransformItemName
     }, item.name))]
   });
 };
-function BlockVariationTranformationItem({
+function BlockVariationTransformationItem({
   item,
   onSelect,
   setHoveredTransformItemName
@@ -52343,7 +56948,7 @@
 }
 /* harmony default export */ const block_variation_transformations = (BlockVariationTransformations);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-transformations-menu.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-transformations-menu.js
 /**
  * WordPress dependencies
  */
@@ -52370,22 +56975,20 @@
  * @return {Record<string, Object[]>} The grouped block transformations.
  */
 
-
-
 function useGroupedTransforms(possibleBlockTransformations) {
-  const priorityContentTranformationBlocks = {
+  const priorityContentTransformationBlocks = {
     'core/paragraph': 1,
     'core/heading': 2,
     'core/list': 3,
     'core/quote': 4
   };
   const transformations = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    const priorityTextTranformsNames = Object.keys(priorityContentTranformationBlocks);
+    const priorityTextTransformsNames = Object.keys(priorityContentTransformationBlocks);
     const groupedPossibleTransforms = possibleBlockTransformations.reduce((accumulator, item) => {
       const {
         name
       } = item;
-      if (priorityTextTranformsNames.includes(name)) {
+      if (priorityTextTransformsNames.includes(name)) {
         accumulator.priorityTextTransformations.push(item);
       } else {
         accumulator.restTransformations.push(item);
@@ -52414,7 +57017,7 @@
   }, {
     name: nextName
   }) => {
-    return priorityContentTranformationBlocks[currentName] < priorityContentTranformationBlocks[nextName] ? -1 : 1;
+    return priorityContentTransformationBlocks[currentName] < priorityContentTransformationBlocks[nextName] ? -1 : 1;
   });
   return transformations;
 }
@@ -52449,7 +57052,7 @@
         transformations: possibleBlockVariationTransformations,
         blocks: blocks,
         onSelect: onSelectVariation
-      }), priorityTextTransformations.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTranformationItem, {
+      }), priorityTextTransformations.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTransformationItem, {
         item: item,
         onSelect: onSelect,
         setHoveredTransformItemName: setHoveredTransformItemName
@@ -52465,13 +57068,13 @@
   onSelect,
   setHoveredTransformItemName
 }) {
-  return restTransformations.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTranformationItem, {
+  return restTransformations.map(item => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTransformationItem, {
     item: item,
     onSelect: onSelect,
     setHoveredTransformItemName: setHoveredTransformItemName
   }, item.name));
 }
-function BlockTranformationItem({
+function BlockTransformationItem({
   item,
   onSelect,
   setHoveredTransformItemName
@@ -52499,7 +57102,7 @@
 }
 /* harmony default export */ const block_transformations_menu = (BlockTransformationsMenu);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-styles/utils.js
 /**
  * WordPress dependencies
  */
@@ -52512,7 +57115,7 @@
  * @param {Array}  styles    Block styles.
  * @param {string} className Class name
  *
- * @return {Object?} The active style.
+ * @return {?Object} The active style.
  */
 function getActiveStyle(styles, className) {
   for (const style of new (external_wp_tokenList_default())(className).values()) {
@@ -52534,7 +57137,7 @@
  * Replaces the active style in the block's className.
  *
  * @param {string}  className   Class name.
- * @param {Object?} activeStyle The replaced style.
+ * @param {?Object} activeStyle The replaced style.
  * @param {Object}  newStyle    The replacing style.
  *
  * @return {string} The updated className.
@@ -52574,13 +57177,13 @@
  *
  * @param {Array} styles Block styles.
  *
- * @return {Object?}        The default style object, if found.
+ * @return {?Object}        The default style object, if found.
  */
 function getDefaultStyle(styles) {
   return styles?.find(style => style.isDefault);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/use-styles-for-block.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-styles/use-styles-for-block.js
 /**
  * WordPress dependencies
  */
@@ -52678,17 +57281,16 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/menu-items.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-styles/menu-items.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const menu_items_noop = () => {};
@@ -52725,7 +57327,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-styles-menu.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/block-styles-menu.js
 /**
  * WordPress dependencies
  */
@@ -52754,7 +57356,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/utils.js
 /**
  * WordPress dependencies
  */
@@ -52805,7 +57407,7 @@
  * @return {Object} The block's attributes to retain.
  */
 const getRetainedBlockAttributes = (name, attributes) => {
-  const contentAttributes = (0,external_wp_blocks_namespaceObject.__experimentalGetBlockAttributesNamesByRole)(name, 'content');
+  const contentAttributes = (0,external_wp_blocks_namespaceObject.getBlockAttributesNamesByRole)(name, 'content');
   if (!contentAttributes?.length) {
     return attributes;
   }
@@ -52817,7 +57419,7 @@
   }, {});
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/use-transformed-patterns.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/use-transformed-patterns.js
 /**
  * WordPress dependencies
  */
@@ -52880,7 +57482,7 @@
       // No need to loop through other pattern's blocks.
       break;
     }
-    // Bail eary if a selected block has not been matched.
+    // Bail early if a selected block has not been matched.
     if (!isMatch) {
       return;
     }
@@ -52918,29 +57520,22 @@
 };
 /* harmony default export */ const use_transformed_patterns = (useTransformedPatterns);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/pattern-transformations-menu.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-const {
-  CompositeV2: pattern_transformations_menu_Composite,
-  CompositeItemV2: pattern_transformations_menu_CompositeItem,
-  useCompositeStoreV2: pattern_transformations_menu_useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/pattern-transformations-menu.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
 function PatternTransformationsMenu({
   blocks,
   patterns: statePatterns,
@@ -52970,19 +57565,18 @@
   patterns,
   onSelect
 }) {
+  const isMobile = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: "block-editor-block-switcher__popover__preview__parent",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-block-switcher__popover__preview__container",
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
-        className: "block-editor-block-switcher__preview__popover",
-        position: "bottom right",
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-          className: "block-editor-block-switcher__preview is-pattern-list-preview",
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(pattern_transformations_menu_BlockPatternsList, {
-            patterns: patterns,
-            onSelect: onSelect
-          })
+    className: "block-editor-block-switcher__popover-preview-container",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover, {
+      className: "block-editor-block-switcher__popover-preview",
+      placement: isMobile ? 'bottom' : 'right-start',
+      offset: 16,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+        className: "block-editor-block-switcher__preview is-pattern-list-preview",
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(pattern_transformations_menu_BlockPatternsList, {
+          patterns: patterns,
+          onSelect: onSelect
         })
       })
     })
@@ -52992,9 +57586,7 @@
   patterns,
   onSelect
 }) {
-  const composite = pattern_transformations_menu_useCompositeStore();
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(pattern_transformations_menu_Composite, {
-    store: composite,
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
     role: "listbox",
     className: "block-editor-block-switcher__preview-patterns-container",
     "aria-label": (0,external_wp_i18n_namespaceObject.__)('Patterns list'),
@@ -53013,7 +57605,7 @@
   const descriptionId = (0,external_wp_compose_namespaceObject.useInstanceId)(pattern_transformations_menu_BlockPattern, `${baseClassName}-list__item-description`);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: `${baseClassName}-list__list-item`,
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(pattern_transformations_menu_CompositeItem, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
       render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         role: "option",
         "aria-label": pattern.title,
@@ -53036,21 +57628,20 @@
 }
 /* harmony default export */ const pattern_transformations_menu = (PatternTransformationsMenu);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-switcher/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -53063,8 +57654,7 @@
   onClose,
   clientIds,
   hasBlockStyles,
-  canRemove,
-  isUsingBindings
+  canRemove
 }) {
   const {
     replaceBlocks,
@@ -53074,20 +57664,23 @@
   const {
     possibleBlockTransformations,
     patterns,
-    blocks
+    blocks,
+    isUsingBindings
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
+      getBlockAttributes,
       getBlocksByClientId,
       getBlockRootClientId,
       getBlockTransformItems,
       __experimentalGetPatternTransformItems
     } = select(store);
-    const rootClientId = getBlockRootClientId(Array.isArray(clientIds) ? clientIds[0] : clientIds);
+    const rootClientId = getBlockRootClientId(clientIds[0]);
     const _blocks = getBlocksByClientId(clientIds);
     return {
       blocks: _blocks,
       possibleBlockTransformations: getBlockTransformItems(_blocks, rootClientId),
-      patterns: __experimentalGetPatternTransformItems(_blocks, rootClientId)
+      patterns: __experimentalGetPatternTransformItems(_blocks, rootClientId),
+      isUsingBindings: clientIds.every(clientId => !!getBlockAttributes(clientId)?.metadata?.bindings)
     };
   }, [clientIds]);
   const blockVariationTransformations = useBlockVariationTransforms({
@@ -53099,7 +57692,7 @@
       multiSelect(insertedBlocks[0].clientId, insertedBlocks[insertedBlocks.length - 1].clientId);
     }
   }
-  // Simple block tranformation based on the `Block Transforms` API.
+  // Simple block transformation based on the `Block Transforms` API.
   function onBlockTransform(name) {
     const newBlocks = (0,external_wp_blocks_namespaceObject.switchToBlockType)(blocks, name);
     replaceBlocks(clientIds, newBlocks);
@@ -53170,22 +57763,24 @@
   });
 }
 const BlockSwitcher = ({
-  clientIds,
-  disabled,
-  isUsingBindings
+  clientIds
 }) => {
   const {
+    hasContentOnlyLocking,
     canRemove,
     hasBlockStyles,
     icon,
     invalidBlocks,
     isReusable,
-    isTemplate
+    isTemplate,
+    isDisabled
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
+      getTemplateLock,
       getBlocksByClientId,
       getBlockAttributes,
-      canRemoveBlocks
+      canRemoveBlocks,
+      getBlockEditingMode
     } = select(store);
     const {
       getBlockStyles,
@@ -53203,15 +57798,19 @@
     }] = _blocks;
     const _isSingleBlockSelected = _blocks.length === 1;
     const blockType = getBlockType(firstBlockName);
+    const editingMode = getBlockEditingMode(clientIds[0]);
     let _icon;
+    let _hasTemplateLock;
     if (_isSingleBlockSelected) {
       const match = getActiveBlockVariation(firstBlockName, getBlockAttributes(clientIds[0]));
       // Take into account active block variations.
       _icon = match?.icon || blockType.icon;
+      _hasTemplateLock = getTemplateLock(clientIds[0]) === 'contentOnly';
     } else {
       const isSelectionOfSameType = new Set(_blocks.map(({
         name
       }) => name)).size === 1;
+      _hasTemplateLock = clientIds.some(id => getTemplateLock(id) === 'contentOnly');
       // When selection consists of blocks of multiple types, display an
       // appropriate icon to communicate the non-uniformity.
       _icon = isSelectionOfSameType ? blockType.icon : library_copy;
@@ -53221,38 +57820,39 @@
       hasBlockStyles: _isSingleBlockSelected && !!getBlockStyles(firstBlockName)?.length,
       icon: _icon,
       isReusable: _isSingleBlockSelected && (0,external_wp_blocks_namespaceObject.isReusableBlock)(_blocks[0]),
-      isTemplate: _isSingleBlockSelected && (0,external_wp_blocks_namespaceObject.isTemplatePart)(_blocks[0])
+      isTemplate: _isSingleBlockSelected && (0,external_wp_blocks_namespaceObject.isTemplatePart)(_blocks[0]),
+      hasContentOnlyLocking: _hasTemplateLock,
+      isDisabled: editingMode !== 'default'
     };
   }, [clientIds]);
   const blockTitle = useBlockDisplayTitle({
     clientId: clientIds?.[0],
     maximumLength: 35
   });
+  const showIconLabels = (0,external_wp_data_namespaceObject.useSelect)(select => select(external_wp_preferences_namespaceObject.store).get('core', 'showIconLabels'), []);
   if (invalidBlocks) {
     return null;
   }
   const isSingleBlock = clientIds.length === 1;
   const blockSwitcherLabel = isSingleBlock ? blockTitle : (0,external_wp_i18n_namespaceObject.__)('Multiple blocks selected');
-  const hideDropdown = disabled || !hasBlockStyles && !canRemove;
+  const blockIndicatorText = (isReusable || isTemplate) && !showIconLabels && blockTitle ? blockTitle : undefined;
+  const hideDropdown = isDisabled || !hasBlockStyles && !canRemove || hasContentOnlyLocking;
   if (hideDropdown) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
         disabled: true,
         className: "block-editor-block-switcher__no-switcher-icon",
         title: blockSwitcherLabel,
-        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-            icon: icon,
-            showColors: true
-          }), (isReusable || isTemplate) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-            className: "block-editor-block-switcher__toggle-text",
-            children: blockTitle
-          })]
-        })
-      })
-    });
-  }
-  const blockSwitcherDescription = isSingleBlock ? (0,external_wp_i18n_namespaceObject.__)('Change block type or style') : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of blocks. */
+        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+          className: "block-editor-block-switcher__toggle",
+          icon: icon,
+          showColors: true
+        }),
+        text: blockIndicatorText
+      })
+    });
+  }
+  const blockSwitcherDescription = isSingleBlock ? (0,external_wp_i18n_namespaceObject.__)('Change block type or style') : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of blocks. */
   (0,external_wp_i18n_namespaceObject._n)('Change type of %d block', 'Change type of %d blocks', clientIds.length), clientIds.length);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, {
@@ -53263,18 +57863,14 @@
           placement: 'bottom-start',
           className: 'block-editor-block-switcher__popover'
         },
-        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-            icon: icon,
-            className: "block-editor-block-switcher__toggle",
-            showColors: true
-          }), (isReusable || isTemplate) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-            className: "block-editor-block-switcher__toggle-text",
-            children: blockTitle
-          })]
+        icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+          className: "block-editor-block-switcher__toggle",
+          icon: icon,
+          showColors: true
         }),
+        text: blockIndicatorText,
         toggleProps: {
-          describedBy: blockSwitcherDescription,
+          description: blockSwitcherDescription,
           ...toggleProps
         },
         menuProps: {
@@ -53286,8 +57882,7 @@
           onClose: onClose,
           clientIds: clientIds,
           hasBlockStyles: hasBlockStyles,
-          canRemove: canRemove,
-          isUsingBindings: isUsingBindings
+          canRemove: canRemove
         })
       })
     })
@@ -53295,7 +57890,7 @@
 };
 /* harmony default export */ const block_switcher = (BlockSwitcher);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/block-toolbar-last-item.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/block-toolbar-last-item.js
 /**
  * WordPress dependencies
  */
@@ -53307,7 +57902,7 @@
 __unstableBlockToolbarLastItem.Slot = block_toolbar_last_item_Slot;
 /* harmony default export */ const block_toolbar_last_item = (__unstableBlockToolbarLastItem);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/hooks/supports.js
+;// ./node_modules/@wordpress/block-editor/build-module/hooks/supports.js
 /**
  * WordPress dependencies
  */
@@ -53586,7 +58181,7 @@
  */
 const supports_hasStyleSupport = nameOrType => supports_styleSupportKeys.some(key => (0,external_wp_blocks_namespaceObject.hasBlockSupport)(nameOrType, key));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-paste-styles/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-paste-styles/index.js
 /**
  * WordPress dependencies
  */
@@ -53749,17 +58344,16 @@
   }, [registry.batch, updateBlockAttributes, createSuccessNotice, createWarningNotice, createErrorNotice]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-actions/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-actions/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function BlockActions({
@@ -53777,7 +58371,6 @@
       getBlockRootClientId,
       getBlocksByClientId,
       getDirectInsertBlock,
-      canMoveBlocks,
       canRemoveBlocks
     } = select(store);
     const blocks = getBlocksByClientId(clientIds);
@@ -53785,7 +58378,6 @@
     const canInsertDefaultBlock = canInsertBlockType(getDefaultBlockName(), rootClientId);
     const directInsertBlock = rootClientId ? getDirectInsertBlock(rootClientId) : null;
     return {
-      canMove: canMoveBlocks(clientIds),
       canRemove: canRemoveBlocks(clientIds),
       canInsertBlock: canInsertDefaultBlock || !!directInsertBlock,
       canCopyStyles: blocks.every(block => {
@@ -53801,7 +58393,6 @@
     getBlocks
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const {
-    canMove,
     canRemove,
     canInsertBlock,
     canCopyStyles,
@@ -53813,18 +58404,13 @@
     duplicateBlocks,
     insertAfterBlock,
     insertBeforeBlock,
-    flashBlock,
-    setBlockMovingClientId,
-    setNavigationMode,
-    selectBlock
+    flashBlock
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const notifyCopy = useNotifyCopy();
   const pasteStyles = usePasteStyles();
   return children({
     canCopyStyles,
     canDuplicate,
     canInsertBlock,
-    canMove,
     canRemove,
     onDuplicate() {
       return duplicateBlocks(clientIds, updateSelection);
@@ -53838,11 +58424,6 @@
     onInsertAfter() {
       insertAfterBlock(clientIds[clientIds.length - 1]);
     },
-    onMoveTo() {
-      setNavigationMode(true);
-      selectBlock(clientIds[0]);
-      setBlockMovingClientId(clientIds[0]);
-    },
     onGroup() {
       if (!clientIds.length) {
         return;
@@ -53870,7 +58451,6 @@
       if (clientIds.length === 1) {
         flashBlock(clientIds[0]);
       }
-      notifyCopy('copy', clientIds);
     },
     async onPasteStyles() {
       await pasteStyles(getBlocksByClientId(clientIds));
@@ -53878,7 +58458,15 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-html-convert-button.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/collab/block-comment-icon-slot.js
+/**
+ * WordPress dependencies
+ */
+
+const CommentIconSlotFill = (0,external_wp_components_namespaceObject.createSlotFill)(Symbol('CommentIconSlotFill'));
+/* harmony default export */ const block_comment_icon_slot = (CommentIconSlotFill);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-html-convert-button.js
 /**
  * WordPress dependencies
  */
@@ -53911,7 +58499,7 @@
 }
 /* harmony default export */ const block_html_convert_button = (BlockHTMLConvertButton);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-menu-first-item.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-menu-first-item.js
 /**
  * WordPress dependencies
  */
@@ -53923,7 +58511,837 @@
 __unstableBlockSettingsMenuFirstItem.Slot = block_settings_menu_first_item_Slot;
 /* harmony default export */ const block_settings_menu_first_item = (__unstableBlockSettingsMenuFirstItem);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-parent-selector-menu-item.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/use-convert-to-group-button-props.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Contains the properties `ConvertToGroupButton` component needs.
+ *
+ * @typedef {Object} ConvertToGroupButtonProps
+ * @property {string[]}  clientIds         An array of the selected client ids.
+ * @property {boolean}   isGroupable       Indicates if the selected blocks can be grouped.
+ * @property {boolean}   isUngroupable     Indicates if the selected blocks can be ungrouped.
+ * @property {WPBlock[]} blocksSelection   An array of the selected blocks.
+ * @property {string}    groupingBlockName The name of block used for handling grouping interactions.
+ */
+
+/**
+ * Returns the properties `ConvertToGroupButton` component needs to work properly.
+ * It is used in `BlockSettingsMenuControls` to know if `ConvertToGroupButton`
+ * should be rendered, to avoid ending up with an empty MenuGroup.
+ *
+ * @param {?string[]} selectedClientIds An optional array of clientIds to group. The selected blocks
+ *                                      from the block editor store are used if this is not provided.
+ *
+ * @return {ConvertToGroupButtonProps} Returns the properties needed by `ConvertToGroupButton`.
+ */
+function useConvertToGroupButtonProps(selectedClientIds) {
+  return (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlocksByClientId,
+      getSelectedBlockClientIds,
+      isUngroupable,
+      isGroupable
+    } = select(store);
+    const {
+      getGroupingBlockName,
+      getBlockType
+    } = select(external_wp_blocks_namespaceObject.store);
+    const clientIds = selectedClientIds?.length ? selectedClientIds : getSelectedBlockClientIds();
+    const blocksSelection = getBlocksByClientId(clientIds);
+    const [firstSelectedBlock] = blocksSelection;
+    const _isUngroupable = clientIds.length === 1 && isUngroupable(clientIds[0]);
+    return {
+      clientIds,
+      isGroupable: isGroupable(clientIds),
+      isUngroupable: _isUngroupable,
+      blocksSelection,
+      groupingBlockName: getGroupingBlockName(),
+      onUngroup: _isUngroupable && getBlockType(firstSelectedBlock.name)?.transforms?.ungroup
+    };
+  }, [selectedClientIds]);
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+function ConvertToGroupButton({
+  clientIds,
+  isGroupable,
+  isUngroupable,
+  onUngroup,
+  blocksSelection,
+  groupingBlockName,
+  onClose = () => {}
+}) {
+  const {
+    getSelectedBlockClientIds
+  } = (0,external_wp_data_namespaceObject.useSelect)(store);
+  const {
+    replaceBlocks
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const onConvertToGroup = () => {
+    // Activate the `transform` on the Grouping Block which does the conversion.
+    const newBlocks = (0,external_wp_blocks_namespaceObject.switchToBlockType)(blocksSelection, groupingBlockName);
+    if (newBlocks) {
+      replaceBlocks(clientIds, newBlocks);
+    }
+  };
+  const onConvertFromGroup = () => {
+    let innerBlocks = blocksSelection[0].innerBlocks;
+    if (!innerBlocks.length) {
+      return;
+    }
+    if (onUngroup) {
+      innerBlocks = onUngroup(blocksSelection[0].attributes, blocksSelection[0].innerBlocks);
+    }
+    replaceBlocks(clientIds, innerBlocks);
+  };
+  if (!isGroupable && !isUngroupable) {
+    return null;
+  }
+  const selectedBlockClientIds = getSelectedBlockClientIds();
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [isGroupable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+      shortcut: selectedBlockClientIds.length > 1 ? external_wp_keycodes_namespaceObject.displayShortcut.primary('g') : undefined,
+      onClick: () => {
+        onConvertToGroup();
+        onClose();
+      },
+      children: (0,external_wp_i18n_namespaceObject._x)('Group', 'verb')
+    }), isUngroupable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+      onClick: () => {
+        onConvertFromGroup();
+        onClose();
+      },
+      children: (0,external_wp_i18n_namespaceObject._x)('Ungroup', 'Ungrouping blocks from within a grouping block back into individual blocks within the Editor')
+    })]
+  });
+}
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-lock/use-block-lock.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Return details about the block lock status.
+ *
+ * @param {string} clientId The block client Id.
+ *
+ * @return {Object} Block lock status
+ */
+function useBlockLock(clientId) {
+  return (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      canEditBlock,
+      canMoveBlock,
+      canRemoveBlock,
+      canLockBlockType,
+      getBlockName,
+      getTemplateLock
+    } = select(store);
+    const canEdit = canEditBlock(clientId);
+    const canMove = canMoveBlock(clientId);
+    const canRemove = canRemoveBlock(clientId);
+    return {
+      canEdit,
+      canMove,
+      canRemove,
+      canLock: canLockBlockType(getBlockName(clientId)),
+      isContentLocked: getTemplateLock(clientId) === 'contentOnly',
+      isLocked: !canEdit || !canMove || !canRemove
+    };
+  }, [clientId]);
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/unlock.js
+/**
+ * WordPress dependencies
+ */
+
+
+const unlock_unlock = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8h1.5c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1z"
+  })
+});
+/* harmony default export */ const library_unlock = (unlock_unlock);
+
+;// ./node_modules/@wordpress/icons/build-module/library/lock-outline.js
+/**
+ * WordPress dependencies
+ */
+
+
+const lockOutline = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zM9.8 7c0-1.2 1-2.2 2.2-2.2 1.2 0 2.2 1 2.2 2.2v3H9.8V7zm6.7 11.5h-9v-7h9v7z"
+  })
+});
+/* harmony default export */ const lock_outline = (lockOutline);
+
+;// ./node_modules/@wordpress/icons/build-module/library/lock.js
+/**
+ * WordPress dependencies
+ */
+
+
+const lock_lock = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    d: "M17 10h-1.2V7c0-2.1-1.7-3.8-3.8-3.8-2.1 0-3.8 1.7-3.8 3.8v3H7c-.6 0-1 .4-1 1v8c0 .6.4 1 1 1h10c.6 0 1-.4 1-1v-8c0-.6-.4-1-1-1zm-2.8 0H9.8V7c0-1.2 1-2.2 2.2-2.2s2.2 1 2.2 2.2v3z"
+  })
+});
+/* harmony default export */ const library_lock = (lock_lock);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-lock/modal.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+// Entity based blocks which allow edit locking
+
+const ALLOWS_EDIT_LOCKING = ['core/navigation'];
+function getTemplateLockValue(lock) {
+  // Prevents all operations.
+  if (lock.remove && lock.move) {
+    return 'all';
+  }
+
+  // Prevents inserting or removing blocks, but allows moving existing blocks.
+  if (lock.remove && !lock.move) {
+    return 'insert';
+  }
+  return false;
+}
+function BlockLockModal({
+  clientId,
+  onClose
+}) {
+  const [lock, setLock] = (0,external_wp_element_namespaceObject.useState)({
+    move: false,
+    remove: false
+  });
+  const {
+    canEdit,
+    canMove,
+    canRemove
+  } = useBlockLock(clientId);
+  const {
+    allowsEditLocking,
+    templateLock,
+    hasTemplateLock
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockName,
+      getBlockAttributes
+    } = select(store);
+    const blockName = getBlockName(clientId);
+    const blockType = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName);
+    return {
+      allowsEditLocking: ALLOWS_EDIT_LOCKING.includes(blockName),
+      templateLock: getBlockAttributes(clientId)?.templateLock,
+      hasTemplateLock: !!blockType?.attributes?.templateLock
+    };
+  }, [clientId]);
+  const [applyTemplateLock, setApplyTemplateLock] = (0,external_wp_element_namespaceObject.useState)(!!templateLock);
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const blockInformation = useBlockDisplayInformation(clientId);
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    setLock({
+      move: !canMove,
+      remove: !canRemove,
+      ...(allowsEditLocking ? {
+        edit: !canEdit
+      } : {})
+    });
+  }, [canEdit, canMove, canRemove, allowsEditLocking]);
+  const isAllChecked = Object.values(lock).every(Boolean);
+  const isMixed = Object.values(lock).some(Boolean) && !isAllChecked;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
+    title: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the block. */
+    (0,external_wp_i18n_namespaceObject.__)('Lock %s'), blockInformation.title),
+    overlayClassName: "block-editor-block-lock-modal",
+    onRequestClose: onClose,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
+      onSubmit: event => {
+        event.preventDefault();
+        updateBlockAttributes([clientId], {
+          lock,
+          templateLock: applyTemplateLock ? getTemplateLockValue(lock) : undefined
+        });
+        onClose();
+      },
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
+        className: "block-editor-block-lock-modal__options",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("legend", {
+          children: (0,external_wp_i18n_namespaceObject.__)('Select the features you want to lock')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
+          role: "list",
+          className: "block-editor-block-lock-modal__checklist",
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+              __nextHasNoMarginBottom: true,
+              className: "block-editor-block-lock-modal__options-all",
+              label: (0,external_wp_i18n_namespaceObject.__)('Lock all'),
+              checked: isAllChecked,
+              indeterminate: isMixed,
+              onChange: newValue => setLock({
+                move: newValue,
+                remove: newValue,
+                ...(allowsEditLocking ? {
+                  edit: newValue
+                } : {})
+              })
+            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("ul", {
+              role: "list",
+              className: "block-editor-block-lock-modal__checklist",
+              children: [allowsEditLocking && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+                className: "block-editor-block-lock-modal__checklist-item",
+                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+                  __nextHasNoMarginBottom: true,
+                  label: (0,external_wp_i18n_namespaceObject.__)('Lock editing'),
+                  checked: !!lock.edit,
+                  onChange: edit => setLock(prevLock => ({
+                    ...prevLock,
+                    edit
+                  }))
+                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
+                  className: "block-editor-block-lock-modal__lock-icon",
+                  icon: lock.edit ? library_lock : library_unlock
+                })]
+              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+                className: "block-editor-block-lock-modal__checklist-item",
+                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+                  __nextHasNoMarginBottom: true,
+                  label: (0,external_wp_i18n_namespaceObject.__)('Lock movement'),
+                  checked: lock.move,
+                  onChange: move => setLock(prevLock => ({
+                    ...prevLock,
+                    move
+                  }))
+                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
+                  className: "block-editor-block-lock-modal__lock-icon",
+                  icon: lock.move ? library_lock : library_unlock
+                })]
+              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+                className: "block-editor-block-lock-modal__checklist-item",
+                children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+                  __nextHasNoMarginBottom: true,
+                  label: (0,external_wp_i18n_namespaceObject.__)('Lock removal'),
+                  checked: lock.remove,
+                  onChange: remove => setLock(prevLock => ({
+                    ...prevLock,
+                    remove
+                  }))
+                }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
+                  className: "block-editor-block-lock-modal__lock-icon",
+                  icon: lock.remove ? library_lock : library_unlock
+                })]
+              })]
+            })]
+          })
+        }), hasTemplateLock && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
+          __nextHasNoMarginBottom: true,
+          className: "block-editor-block-lock-modal__template-lock",
+          label: (0,external_wp_i18n_namespaceObject.__)('Apply to all blocks inside'),
+          checked: applyTemplateLock,
+          disabled: lock.move && !lock.remove,
+          onChange: () => setApplyTemplateLock(!applyTemplateLock)
+        })]
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
+        className: "block-editor-block-lock-modal__actions",
+        justify: "flex-end",
+        expanded: false,
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            variant: "tertiary",
+            onClick: onClose,
+            __next40pxDefaultSize: true,
+            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
+          })
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            variant: "primary",
+            type: "submit",
+            __next40pxDefaultSize: true,
+            children: (0,external_wp_i18n_namespaceObject.__)('Apply')
+          })
+        })]
+      })]
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-lock/menu-item.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function BlockLockMenuItem({
+  clientId
+}) {
+  const {
+    canLock,
+    isLocked
+  } = useBlockLock(clientId);
+  const [isModalOpen, toggleModal] = (0,external_wp_element_namespaceObject.useReducer)(isActive => !isActive, false);
+  if (!canLock) {
+    return null;
+  }
+  const label = isLocked ? (0,external_wp_i18n_namespaceObject.__)('Unlock') : (0,external_wp_i18n_namespaceObject.__)('Lock');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+      icon: isLocked ? library_unlock : lock_outline,
+      onClick: toggleModal,
+      "aria-expanded": isModalOpen,
+      "aria-haspopup": "dialog",
+      children: label
+    }), isModalOpen && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockModal, {
+      clientId: clientId,
+      onClose: toggleModal
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-mode-toggle.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+const block_mode_toggle_noop = () => {};
+function BlockModeToggle({
+  clientId,
+  onToggle = block_mode_toggle_noop
+}) {
+  const {
+    blockType,
+    mode,
+    isCodeEditingEnabled
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlock,
+      getBlockMode,
+      getSettings
+    } = select(store);
+    const block = getBlock(clientId);
+    return {
+      mode: getBlockMode(clientId),
+      blockType: block ? (0,external_wp_blocks_namespaceObject.getBlockType)(block.name) : null,
+      isCodeEditingEnabled: getSettings().codeEditingEnabled
+    };
+  }, [clientId]);
+  const {
+    toggleBlockMode
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  if (!blockType || !(0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockType, 'html', true) || !isCodeEditingEnabled) {
+    return null;
+  }
+  const label = mode === 'visual' ? (0,external_wp_i18n_namespaceObject.__)('Edit as HTML') : (0,external_wp_i18n_namespaceObject.__)('Edit visually');
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+    onClick: () => {
+      toggleBlockMode(clientId);
+      onToggle();
+    },
+    children: label
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/content-lock/modify-content-lock-menu-item.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+// The implementation of content locking is mainly in this file, although the mechanism
+// to stop temporarily editing as blocks when an outside block is selected is on component StopEditingAsBlocksOnOutsideSelect
+// at block-editor/src/components/block-list/index.js.
+// Besides the components on this file and the file referenced above the implementation
+// also includes artifacts on the store (actions, reducers, and selector).
+
+function ModifyContentLockMenuItem({
+  clientId,
+  onClose
+}) {
+  const {
+    templateLock,
+    isLockedByParent,
+    isEditingAsBlocks
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getContentLockingParent,
+      getTemplateLock,
+      getTemporarilyEditingAsBlocks
+    } = unlock(select(store));
+    return {
+      templateLock: getTemplateLock(clientId),
+      isLockedByParent: !!getContentLockingParent(clientId),
+      isEditingAsBlocks: getTemporarilyEditingAsBlocks() === clientId
+    };
+  }, [clientId]);
+  const blockEditorActions = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const isContentLocked = !isLockedByParent && templateLock === 'contentOnly';
+  if (!isContentLocked && !isEditingAsBlocks) {
+    return null;
+  }
+  const {
+    modifyContentLockBlock
+  } = unlock(blockEditorActions);
+  const showStartEditingAsBlocks = !isEditingAsBlocks && isContentLocked;
+  return showStartEditingAsBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+    onClick: () => {
+      modifyContentLockBlock(clientId);
+      onClose();
+    },
+    children: (0,external_wp_i18n_namespaceObject._x)('Modify', 'Unlock content locked blocks')
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-rename/use-block-rename.js
+/**
+ * WordPress dependencies
+ */
+
+function useBlockRename(name) {
+  return {
+    canRename: (0,external_wp_blocks_namespaceObject.getBlockSupport)(name, 'renaming', true)
+  };
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-rename/is-empty-string.js
+function isEmptyString(testString) {
+  return testString?.trim()?.length === 0;
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-rename/modal.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+function BlockRenameModal({
+  clientId,
+  onClose
+}) {
+  const [editedBlockName, setEditedBlockName] = (0,external_wp_element_namespaceObject.useState)();
+  const blockInformation = useBlockDisplayInformation(clientId);
+  const {
+    metadata
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockAttributes
+    } = select(store);
+    return {
+      metadata: getBlockAttributes(clientId)?.metadata
+    };
+  }, [clientId]);
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const blockName = metadata?.name || '';
+  const originalBlockName = blockInformation?.title;
+  // Pattern Overrides is a WordPress-only feature but it also uses the Block Binding API.
+  // Ideally this should not be inside the block editor package, but we keep it here for simplicity.
+  const hasOverridesWarning = !!blockName && !!metadata?.bindings && Object.values(metadata.bindings).some(binding => binding.source === 'core/pattern-overrides');
+  const nameHasChanged = editedBlockName !== undefined && editedBlockName !== blockName;
+  const nameIsOriginal = editedBlockName === originalBlockName;
+  const nameIsEmpty = isEmptyString(editedBlockName);
+  const isNameValid = nameHasChanged || nameIsOriginal;
+  const autoSelectInputText = event => event.target.select();
+  const handleSubmit = () => {
+    const newName = nameIsOriginal || nameIsEmpty ? undefined : editedBlockName;
+    const message = nameIsOriginal || nameIsEmpty ? (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: new name/label for the block */
+    (0,external_wp_i18n_namespaceObject.__)('Block name reset to: "%s".'), editedBlockName) : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: new name/label for the block */
+    (0,external_wp_i18n_namespaceObject.__)('Block name changed to: "%s".'), editedBlockName);
+
+    // Must be assertive to immediately announce change.
+    (0,external_wp_a11y_namespaceObject.speak)(message, 'assertive');
+    updateBlockAttributes([clientId], {
+      metadata: {
+        ...metadata,
+        name: newName
+      }
+    });
+
+    // Immediate close avoids ability to hit save multiple times.
+    onClose();
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Modal, {
+    title: (0,external_wp_i18n_namespaceObject.__)('Rename'),
+    onRequestClose: onClose,
+    overlayClassName: "block-editor-block-rename-modal",
+    focusOnMount: "firstContentElement",
+    size: "small",
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
+      onSubmit: e => {
+        e.preventDefault();
+        if (!isNameValid) {
+          return;
+        }
+        handleSubmit();
+      },
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+        spacing: "3",
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
+          __nextHasNoMarginBottom: true,
+          __next40pxDefaultSize: true,
+          value: editedBlockName !== null && editedBlockName !== void 0 ? editedBlockName : blockName,
+          label: (0,external_wp_i18n_namespaceObject.__)('Name'),
+          help: hasOverridesWarning ? (0,external_wp_i18n_namespaceObject.__)('This block allows overrides. Changing the name can cause problems with content entered into instances of this pattern.') : undefined,
+          placeholder: originalBlockName,
+          onChange: setEditedBlockName,
+          onFocus: autoSelectInputText
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
+          justify: "right",
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
+            variant: "tertiary",
+            onClick: onClose,
+            children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
+          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
+            accessibleWhenDisabled: true,
+            disabled: !isNameValid,
+            variant: "primary",
+            type: "submit",
+            children: (0,external_wp_i18n_namespaceObject.__)('Save')
+          })]
+        })]
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-rename/rename-control.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function BlockRenameControl({
+  clientId
+}) {
+  const [renamingBlock, setRenamingBlock] = (0,external_wp_element_namespaceObject.useState)(false);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+      onClick: () => {
+        setRenamingBlock(true);
+      },
+      "aria-expanded": renamingBlock,
+      "aria-haspopup": "dialog",
+      children: (0,external_wp_i18n_namespaceObject.__)('Rename')
+    }), renamingBlock && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRenameModal, {
+      clientId: clientId,
+      onClose: () => setRenamingBlock(false)
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu-controls/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+const {
+  Fill,
+  Slot: block_settings_menu_controls_Slot
+} = (0,external_wp_components_namespaceObject.createSlotFill)('BlockSettingsMenuControls');
+const BlockSettingsMenuControlsSlot = ({
+  fillProps,
+  clientIds = null
+}) => {
+  const {
+    selectedBlocks,
+    selectedClientIds,
+    isContentOnly
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockNamesByClientId,
+      getSelectedBlockClientIds,
+      getBlockEditingMode
+    } = select(store);
+    const ids = clientIds !== null ? clientIds : getSelectedBlockClientIds();
+    return {
+      selectedBlocks: getBlockNamesByClientId(ids),
+      selectedClientIds: ids,
+      isContentOnly: getBlockEditingMode(ids[0]) === 'contentOnly'
+    };
+  }, [clientIds]);
+  const {
+    canLock
+  } = useBlockLock(selectedClientIds[0]);
+  const {
+    canRename
+  } = useBlockRename(selectedBlocks[0]);
+  const showLockButton = selectedClientIds.length === 1 && canLock && !isContentOnly;
+  const showRenameButton = selectedClientIds.length === 1 && canRename && !isContentOnly;
+
+  // Check if current selection of blocks is Groupable or Ungroupable
+  // and pass this props down to ConvertToGroupButton.
+  const convertToGroupButtonProps = useConvertToGroupButtonProps(selectedClientIds);
+  const {
+    isGroupable,
+    isUngroupable
+  } = convertToGroupButtonProps;
+  const showConvertToGroupButton = (isGroupable || isUngroupable) && !isContentOnly;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_controls_Slot, {
+    fillProps: {
+      ...fillProps,
+      selectedBlocks,
+      selectedClientIds
+    },
+    children: fills => {
+      if (!fills?.length > 0 && !showConvertToGroupButton && !showLockButton) {
+        return null;
+      }
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
+        children: [showConvertToGroupButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ConvertToGroupButton, {
+          ...convertToGroupButtonProps,
+          onClose: fillProps?.onClose
+        }), showLockButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockMenuItem, {
+          clientId: selectedClientIds[0]
+        }), showRenameButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockRenameControl, {
+          clientId: selectedClientIds[0]
+        }), fills, selectedClientIds.length === 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ModifyContentLockMenuItem, {
+          clientId: selectedClientIds[0],
+          onClose: fillProps?.onClose
+        }), fillProps?.count === 1 && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockModeToggle, {
+          clientId: fillProps?.firstBlockClientId,
+          onToggle: fillProps?.onClose
+        })]
+      });
+    }
+  });
+};
+
+/**
+ * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-settings-menu-controls/README.md
+ *
+ * @param {Object} props Fill props.
+ * @return {Element} Element.
+ */
+function BlockSettingsMenuControls({
+  ...props
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalStyleProvider, {
+    document: document,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Fill, {
+      ...props
+    })
+  });
+}
+BlockSettingsMenuControls.Slot = BlockSettingsMenuControlsSlot;
+/* harmony default export */ const block_settings_menu_controls = (BlockSettingsMenuControls);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-parent-selector-menu-item.js
 /**
  * WordPress dependencies
  */
@@ -53966,16 +59384,15 @@
       icon: parentBlockType.icon
     }),
     onClick: () => selectBlock(parentClientId),
-    children: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Name of the block's parent. */
+    children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Name of the block's parent. */
     (0,external_wp_i18n_namespaceObject.__)('Select parent block (%s)'), parentBlockType.title)
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-dropdown.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/block-settings-dropdown.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -54006,12 +59423,32 @@
   clientIds,
   onCopy,
   label,
-  shortcut
+  shortcut,
+  eventType = 'copy',
+  __experimentalUpdateSelection: updateSelection = false
 }) {
   const {
     getBlocksByClientId
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(() => (0,external_wp_blocks_namespaceObject.serialize)(getBlocksByClientId(clientIds)), onCopy);
+  const {
+    removeBlocks
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const notifyCopy = useNotifyCopy();
+  const ref = (0,external_wp_compose_namespaceObject.useCopyToClipboard)(() => (0,external_wp_blocks_namespaceObject.serialize)(getBlocksByClientId(clientIds)), () => {
+    switch (eventType) {
+      case 'copy':
+      case 'copyStyles':
+        onCopy();
+        notifyCopy(eventType, clientIds);
+        break;
+      case 'cut':
+        notifyCopy(eventType, clientIds);
+        removeBlocks(clientIds, updateSelection);
+        break;
+      default:
+        break;
+    }
+  });
   const copyMenuItemLabel = label ? label : (0,external_wp_i18n_namespaceObject.__)('Copy');
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
     ref: ref,
@@ -54032,7 +59469,6 @@
   const firstBlockClientId = clientIds[0];
   const {
     firstParentClientId,
-    onlyBlock,
     parentBlockType,
     previousBlockClientId,
     selectedBlockClientIds,
@@ -54040,7 +59476,6 @@
     isContentOnly
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getBlockCount,
       getBlockName,
       getBlockRootClientId,
       getPreviousBlockClientId,
@@ -54056,7 +59491,6 @@
     const parentBlockName = _firstParentClientId && getBlockName(_firstParentClientId);
     return {
       firstParentClientId: _firstParentClientId,
-      onlyBlock: 1 === getBlockCount(_firstParentClientId),
       parentBlockType: _firstParentClientId && (getActiveBlockVariation(parentBlockName, getBlockAttributes(_firstParentClientId)) || (0,external_wp_blocks_namespaceObject.getBlockType)(parentBlockName)),
       previousBlockClientId: getPreviousBlockClientId(firstBlockClientId),
       selectedBlockClientIds: getSelectedBlockClientIds(),
@@ -54076,6 +59510,8 @@
       getShortcutRepresentation
     } = select(external_wp_keyboardShortcuts_namespaceObject.store);
     return {
+      copy: getShortcutRepresentation('core/block-editor/copy'),
+      cut: getShortcutRepresentation('core/block-editor/cut'),
       duplicate: getShortcutRepresentation('core/block-editor/duplicate'),
       remove: getShortcutRepresentation('core/block-editor/remove'),
       insertAfter: getShortcutRepresentation('core/block-editor/insert-after'),
@@ -54127,6 +59563,7 @@
       setOpenedBlockSettingsMenu(undefined);
     }
   }
+  const shouldShowBlockParentMenuItem = !parentBlockIsSelected && !!firstParentClientId;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockActions, {
     clientIds: clientIds,
     __experimentalUpdateSelection: !__experimentalSelectBlock,
@@ -54134,133 +59571,156 @@
       canCopyStyles,
       canDuplicate,
       canInsertBlock,
-      canMove,
       canRemove,
       onDuplicate,
       onInsertAfter,
       onInsertBefore,
       onRemove,
       onCopy,
-      onPasteStyles,
-      onMoveTo
-    }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
-      icon: more_vertical,
-      label: (0,external_wp_i18n_namespaceObject.__)('Options'),
-      className: "block-editor-block-settings-menu",
-      popoverProps: block_settings_dropdown_POPOVER_PROPS,
-      open: open,
-      onToggle: onToggle,
-      noIcons: true,
-      ...props,
-      children: ({
-        onClose
-      }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_first_item.Slot, {
-            fillProps: {
-              onClose
-            }
-          }), !parentBlockIsSelected && !!firstParentClientId && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockParentSelectorMenuItem, {
-            parentClientId: firstParentClientId,
-            parentBlockType: parentBlockType
-          }), count === 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_html_convert_button, {
-            clientId: firstBlockClientId
-          }), !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyMenuItem, {
-            clientIds: clientIds,
-            onCopy: onCopy,
-            shortcut: external_wp_keycodes_namespaceObject.displayShortcut.primary('c')
-          }), canDuplicate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-            onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onDuplicate, updateSelectionAfterDuplicate),
-            shortcut: shortcuts.duplicate,
-            children: (0,external_wp_i18n_namespaceObject.__)('Duplicate')
-          }), canInsertBlock && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-              onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onInsertBefore),
-              shortcut: shortcuts.insertBefore,
-              children: (0,external_wp_i18n_namespaceObject.__)('Add before')
+      onPasteStyles
+    }) => {
+      // It is possible that some plugins register fills for this menu
+      // even if Core doesn't render anything in the block settings menu.
+      // in which case, we may want to render the menu anyway.
+      // That said for now, we can start more conservative.
+      const isEmpty = !canRemove && !canDuplicate && !canInsertBlock && isContentOnly;
+      if (isEmpty) {
+        return null;
+      }
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropdownMenu, {
+        icon: more_vertical,
+        label: (0,external_wp_i18n_namespaceObject.__)('Options'),
+        className: "block-editor-block-settings-menu",
+        popoverProps: block_settings_dropdown_POPOVER_PROPS,
+        open: open,
+        onToggle: onToggle,
+        noIcons: true,
+        ...props,
+        children: ({
+          onClose
+        }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
+            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_first_item.Slot, {
+              fillProps: {
+                onClose
+              }
+            }), shouldShowBlockParentMenuItem && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockParentSelectorMenuItem, {
+              parentClientId: firstParentClientId,
+              parentBlockType: parentBlockType
+            }), count === 1 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_html_convert_button, {
+              clientId: firstBlockClientId
+            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyMenuItem, {
+              clientIds: clientIds,
+              onCopy: onCopy,
+              shortcut: shortcuts.copy
+            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyMenuItem, {
+              clientIds: clientIds,
+              label: (0,external_wp_i18n_namespaceObject.__)('Cut'),
+              eventType: "cut",
+              shortcut: shortcuts.cut,
+              __experimentalUpdateSelection: !__experimentalSelectBlock
+            }), canDuplicate && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+              onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onDuplicate, updateSelectionAfterDuplicate),
+              shortcut: shortcuts.duplicate,
+              children: (0,external_wp_i18n_namespaceObject.__)('Duplicate')
+            }), canInsertBlock && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+              children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+                onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onInsertBefore),
+                shortcut: shortcuts.insertBefore,
+                children: (0,external_wp_i18n_namespaceObject.__)('Add before')
+              }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+                onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onInsertAfter),
+                shortcut: shortcuts.insertAfter,
+                children: (0,external_wp_i18n_namespaceObject.__)('Add after')
+              })]
+            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_comment_icon_slot.Slot, {
+              fillProps: {
+                onClose
+              }
+            })]
+          }), canCopyStyles && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
+            children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyMenuItem, {
+              clientIds: clientIds,
+              onCopy: onCopy,
+              label: (0,external_wp_i18n_namespaceObject.__)('Copy styles'),
+              eventType: "copyStyles"
             }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-              onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onInsertAfter),
-              shortcut: shortcuts.insertAfter,
-              children: (0,external_wp_i18n_namespaceObject.__)('Add after')
+              onClick: onPasteStyles,
+              children: (0,external_wp_i18n_namespaceObject.__)('Paste styles')
             })]
-          })]
-        }), canCopyStyles && !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.MenuGroup, {
-          children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(CopyMenuItem, {
-            clientIds: clientIds,
-            onCopy: onCopy,
-            label: (0,external_wp_i18n_namespaceObject.__)('Copy styles')
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-            onClick: onPasteStyles,
-            children: (0,external_wp_i18n_namespaceObject.__)('Paste styles')
+          }), !isContentOnly && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_controls.Slot, {
+            fillProps: {
+              onClose,
+              count,
+              firstBlockClientId
+            },
+            clientIds: clientIds
+          }), typeof children === 'function' ? children({
+            onClose
+          }) : external_wp_element_namespaceObject.Children.map(child => (0,external_wp_element_namespaceObject.cloneElement)(child, {
+            onClose
+          })), canRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
+              onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onRemove, updateSelectionAfterRemove),
+              shortcut: shortcuts.remove,
+              children: (0,external_wp_i18n_namespaceObject.__)('Delete')
+            })
           })]
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu_controls.Slot, {
-          fillProps: {
-            onClose,
-            canMove,
-            onMoveTo,
-            onlyBlock,
-            count,
-            firstBlockClientId
-          },
-          clientIds: clientIds
-        }), typeof children === 'function' ? children({
-          onClose
-        }) : external_wp_element_namespaceObject.Children.map(child => (0,external_wp_element_namespaceObject.cloneElement)(child, {
-          onClose
-        })), canRemove && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuGroup, {
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItem, {
-            onClick: (0,external_wp_compose_namespaceObject.pipe)(onClose, onRemove, updateSelectionAfterRemove),
-            shortcut: shortcuts.remove,
-            children: (0,external_wp_i18n_namespaceObject.__)('Delete')
-          })
-        })]
-      })
-    })
+        })
+      });
+    }
   });
 }
 /* harmony default export */ const block_settings_dropdown = (BlockSettingsDropdown);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/index.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/collab/block-comment-icon-toolbar-slot.js
+/**
+ * WordPress dependencies
+ */
+
+const CommentIconToolbarSlotFill = (0,external_wp_components_namespaceObject.createSlotFill)(Symbol('CommentIconToolbarSlotFill'));
+/* harmony default export */ const block_comment_icon_toolbar_slot = (CommentIconToolbarSlotFill);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-settings-menu/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 function BlockSettingsMenu({
   clientIds,
   ...props
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.ToolbarGroup, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_comment_icon_toolbar_slot.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarItem, {
       children: toggleProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_dropdown, {
         clientIds: clientIds,
         toggleProps: toggleProps,
         ...props
       })
-    })
+    })]
   });
 }
 /* harmony default export */ const block_settings_menu = (BlockSettingsMenu);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-lock/toolbar.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-lock/toolbar.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -54272,7 +59732,7 @@
     isLocked
   } = useBlockLock(clientId);
   const [isModalOpen, toggleModal] = (0,external_wp_element_namespaceObject.useReducer)(isActive => !isActive, false);
-  const hasLockButtonShown = (0,external_wp_element_namespaceObject.useRef)(false);
+  const hasLockButtonShownRef = (0,external_wp_element_namespaceObject.useRef)(false);
 
   // If the block lock button has been shown, we don't want to remove it
   // from the toolbar until the toolbar is rendered again without it.
@@ -54281,10 +59741,10 @@
   // whence it came, and to do that, we need to leave the button in the toolbar.
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     if (isLocked) {
-      hasLockButtonShown.current = true;
+      hasLockButtonShownRef.current = true;
     }
   }, [isLocked]);
-  if (!isLocked && !hasLockButtonShown.current) {
+  if (!isLocked && !hasLockButtonShownRef.current) {
     return null;
   }
   let label = isLocked ? (0,external_wp_i18n_namespaceObject.__)('Unlock') : (0,external_wp_i18n_namespaceObject.__)('Lock');
@@ -54295,7 +59755,6 @@
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
       className: "block-editor-block-lock-toolbar",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-        accessibleWhenDisabled: true,
         disabled: !canLock,
         icon: isLocked ? library_lock : library_unlock,
         label: label,
@@ -54310,7 +59769,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/group.js
+;// ./node_modules/@wordpress/icons/build-module/library/group.js
 /**
  * WordPress dependencies
  */
@@ -54325,7 +59784,7 @@
 });
 /* harmony default export */ const library_group = (group_group);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/row.js
+;// ./node_modules/@wordpress/icons/build-module/library/row.js
 /**
  * WordPress dependencies
  */
@@ -54340,7 +59799,7 @@
 });
 /* harmony default export */ const library_row = (row);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/stack.js
+;// ./node_modules/@wordpress/icons/build-module/library/stack.js
 /**
  * WordPress dependencies
  */
@@ -54355,7 +59814,7 @@
 });
 /* harmony default export */ const library_stack = (stack);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/grid.js
+;// ./node_modules/@wordpress/icons/build-module/library/grid.js
 /**
  * WordPress dependencies
  */
@@ -54372,20 +59831,19 @@
 });
 /* harmony default export */ const library_grid = (grid_grid);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/toolbar.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/convert-to-group-buttons/toolbar.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -54465,26 +59923,26 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.ToolbarGroup, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
       icon: library_group,
-      label: (0,external_wp_i18n_namespaceObject._x)('Group', 'verb'),
+      label: (0,external_wp_i18n_namespaceObject._x)('Group', 'action: convert blocks to group'),
       onClick: onConvertToGroup
     }), canInsertRow && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
       icon: library_row,
-      label: (0,external_wp_i18n_namespaceObject._x)('Row', 'single horizontal line'),
+      label: (0,external_wp_i18n_namespaceObject._x)('Row', 'action: convert blocks to row'),
       onClick: onConvertToRow
     }), canInsertStack && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
       icon: library_stack,
-      label: (0,external_wp_i18n_namespaceObject._x)('Stack', 'verb'),
+      label: (0,external_wp_i18n_namespaceObject._x)('Stack', 'action: convert blocks to stack'),
       onClick: onConvertToStack
     }), canInsertGrid && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
       icon: library_grid,
-      label: (0,external_wp_i18n_namespaceObject._x)('Grid', 'verb'),
+      label: (0,external_wp_i18n_namespaceObject._x)('Grid', 'action: convert blocks to grid'),
       onClick: onConvertToGrid
     })]
   });
 }
 /* harmony default export */ const toolbar = (BlockGroupToolbar);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit-visually-button/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-edit-visually-button/index.js
 /**
  * WordPress dependencies
  */
@@ -54519,7 +59977,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/block-name-context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/block-name-context.js
 /**
  * WordPress dependencies
  */
@@ -54527,7 +59985,7 @@
 const __unstableBlockNameContext = (0,external_wp_element_namespaceObject.createContext)('');
 /* harmony default export */ const block_name_context = (__unstableBlockNameContext);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/navigable-toolbar/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/navigable-toolbar/index.js
 /**
  * WordPress dependencies
  */
@@ -54706,6 +60164,7 @@
   shouldUseKeyboardFocusShortcut = true,
   __experimentalInitialIndex: initialIndex,
   __experimentalOnIndexChange: onIndexChange,
+  orientation = 'horizontal',
   ...props
 }) {
   const toolbarRef = (0,external_wp_element_namespaceObject.useRef)();
@@ -54723,12 +60182,13 @@
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Toolbar, {
       label: props['aria-label'],
       ref: toolbarRef,
+      orientation: orientation,
       ...props,
       children: children
     });
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.NavigableMenu, {
-    orientation: "horizontal",
+    orientation: orientation,
     role: "toolbar",
     ref: toolbarRef,
     ...props,
@@ -54736,162 +60196,15 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/shuffle.js
-/**
- * WordPress dependencies
- */
-
-
-const shuffle = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  viewBox: "0 0 24 24",
-  xmlns: "http://www.w3.org/2000/SVG",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M17.192 6.75L15.47 5.03l1.06-1.06 3.537 3.53-3.537 3.53-1.06-1.06 1.723-1.72h-3.19c-.602 0-.993.202-1.28.498-.309.319-.538.792-.695 1.383-.13.488-.222 1.023-.296 1.508-.034.664-.116 1.413-.303 2.117-.193.721-.513 1.467-1.068 2.04-.575.594-1.359.954-2.357.954H4v-1.5h4.003c.601 0 .993-.202 1.28-.498.308-.319.538-.792.695-1.383.149-.557.216-1.093.288-1.662l.039-.31a9.653 9.653 0 0 1 .272-1.653c.193-.722.513-1.467 1.067-2.04.576-.594 1.36-.954 2.358-.954h3.19zM8.004 6.75c.8 0 1.46.23 1.988.628a6.24 6.24 0 0 0-.684 1.396 1.725 1.725 0 0 0-.024-.026c-.287-.296-.679-.498-1.28-.498H4v-1.5h4.003zM12.699 14.726c-.161.459-.38.94-.684 1.396.527.397 1.188.628 1.988.628h3.19l-1.722 1.72 1.06 1.06L20.067 16l-3.537-3.53-1.06 1.06 1.723 1.72h-3.19c-.602 0-.993-.202-1.28-.498a1.96 1.96 0 0 1-.024-.026z"
-  })
-});
-/* harmony default export */ const library_shuffle = (shuffle);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/shuffle.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-const shuffle_EMPTY_ARRAY = [];
-function shuffle_Container(props) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-      ...props
-    })
-  });
-}
-function Shuffle({
-  clientId,
-  as = shuffle_Container
-}) {
-  const {
-    categories,
-    patterns,
-    patternName
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlockAttributes,
-      getBlockRootClientId,
-      __experimentalGetAllowedPatterns
-    } = select(store);
-    const attributes = getBlockAttributes(clientId);
-    const _categories = attributes?.metadata?.categories || shuffle_EMPTY_ARRAY;
-    const _patternName = attributes?.metadata?.patternName;
-    const rootBlock = getBlockRootClientId(clientId);
-    const _patterns = __experimentalGetAllowedPatterns(rootBlock);
-    return {
-      categories: _categories,
-      patterns: _patterns,
-      patternName: _patternName
-    };
-  }, [clientId]);
-  const {
-    replaceBlocks
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const sameCategoryPatternsWithSingleWrapper = (0,external_wp_element_namespaceObject.useMemo)(() => {
-    if (!categories || categories.length === 0 || !patterns || patterns.length === 0) {
-      return shuffle_EMPTY_ARRAY;
-    }
-    return patterns.filter(pattern => {
-      return (
-        // Check if the pattern has only one top level block,
-        // otherwise we may shuffle to pattern that will not allow to continue shuffling.
-        pattern.blocks.length === 1 && pattern.categories?.some(category => {
-          return categories.includes(category);
-        }) && (
-        // Check if the pattern is not a synced pattern.
-        pattern.syncStatus === 'unsynced' || !pattern.id)
-      );
-    });
-  }, [categories, patterns]);
-  if (sameCategoryPatternsWithSingleWrapper.length < 2) {
-    return null;
-  }
-  function getNextPattern() {
-    const numberOfPatterns = sameCategoryPatternsWithSingleWrapper.length;
-    const patternIndex = sameCategoryPatternsWithSingleWrapper.findIndex(({
-      name
-    }) => name === patternName);
-    const nextPatternIndex = patternIndex + 1 < numberOfPatterns ? patternIndex + 1 : 0;
-    return sameCategoryPatternsWithSingleWrapper[nextPatternIndex];
-  }
-  const ComponentToUse = as;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ComponentToUse, {
-    label: (0,external_wp_i18n_namespaceObject.__)('Shuffle'),
-    icon: library_shuffle,
-    onClick: () => {
-      const nextPattern = getNextPattern();
-      nextPattern.blocks[0].attributes = {
-        ...nextPattern.blocks[0].attributes,
-        metadata: {
-          ...nextPattern.blocks[0].attributes.metadata,
-          categories
-        }
-      };
-      replaceBlocks(clientId, nextPattern.blocks);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/use-has-block-controls.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-function useHasAnyBlockControls() {
-  let hasAnyBlockControls = false;
-  for (const group in block_controls_groups) {
-    // It is safe to violate the rules of hooks here as the `groups` object
-    // is static and will not change length between renders. Do not return
-    // early as that will cause the hook to be called a different number of
-    // times between renders.
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    if (useHasBlockControls(group)) {
-      hasAnyBlockControls = true;
-    }
-  }
-  return hasAnyBlockControls;
-}
-function useHasBlockControls(group = 'default') {
-  const Slot = block_controls_groups[group]?.Slot;
-  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(Slot?.__unstableName);
-  if (!Slot) {
-     true ? external_wp_warning_default()(`Unknown BlockControls group "${group}" provided.`) : 0;
-    return null;
-  }
-  return !!fills?.length;
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/use-has-block-toolbar.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/use-has-block-toolbar.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
 
 
 /**
@@ -54902,7 +60215,7 @@
 function useHasBlockToolbar() {
   const {
     isToolbarEnabled,
-    isDefaultEditingMode
+    isBlockDisabled
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getBlockEditingMode,
@@ -54917,35 +60230,246 @@
     const blockType = selectedBlockClientId && (0,external_wp_blocks_namespaceObject.getBlockType)(getBlockName(selectedBlockClientId));
     return {
       isToolbarEnabled: blockType && (0,external_wp_blocks_namespaceObject.hasBlockSupport)(blockType, '__experimentalToolbar', true),
-      isDefaultEditingMode: getBlockEditingMode(selectedBlockClientId) === 'default'
+      isBlockDisabled: getBlockEditingMode(selectedBlockClientId) === 'disabled'
     };
   }, []);
-  const hasAnyBlockControls = useHasAnyBlockControls();
-  if (!isToolbarEnabled || !isDefaultEditingMode && !hasAnyBlockControls) {
+  if (!isToolbarEnabled || isBlockDisabled) {
     return false;
   }
   return true;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/change-design.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+const change_design_EMPTY_ARRAY = [];
+const MAX_PATTERNS_TO_SHOW = 6;
+const change_design_POPOVER_PROPS = {
+  placement: 'bottom-start'
+};
+function ChangeDesign({
+  clientId
+}) {
+  const {
+    categories,
+    currentPatternName,
+    patterns
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const {
+      getBlockAttributes,
+      getBlockRootClientId,
+      __experimentalGetAllowedPatterns
+    } = select(store);
+    const attributes = getBlockAttributes(clientId);
+    const _categories = attributes?.metadata?.categories || change_design_EMPTY_ARRAY;
+    const rootBlock = getBlockRootClientId(clientId);
+
+    // Calling `__experimentalGetAllowedPatterns` is expensive.
+    // Checking if the block can be changed prevents unnecessary selector calls.
+    // See: https://github.com/WordPress/gutenberg/pull/64736.
+    const _patterns = _categories.length > 0 ? __experimentalGetAllowedPatterns(rootBlock) : change_design_EMPTY_ARRAY;
+    return {
+      categories: _categories,
+      currentPatternName: attributes?.metadata?.patternName,
+      patterns: _patterns
+    };
+  }, [clientId]);
+  const {
+    replaceBlocks
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const sameCategoryPatternsWithSingleWrapper = (0,external_wp_element_namespaceObject.useMemo)(() => {
+    if (categories.length === 0 || !patterns || patterns.length === 0) {
+      return change_design_EMPTY_ARRAY;
+    }
+    return patterns.filter(pattern => {
+      const isCorePattern = pattern.source === 'core' || pattern.source?.startsWith('pattern-directory') && pattern.source !== 'pattern-directory/theme';
+      return (
+        // Check if the pattern has only one top level block,
+        // otherwise we may switch to a pattern that doesn't have replacement suggestions.
+        pattern.blocks.length === 1 &&
+        // We exclude the core patterns and pattern directory patterns that are not theme patterns.
+        !isCorePattern &&
+        // Exclude current pattern.
+        currentPatternName !== pattern.name && pattern.categories?.some(category => {
+          return categories.includes(category);
+        }) && (
+        // Check if the pattern is not a synced pattern.
+        pattern.syncStatus === 'unsynced' || !pattern.id)
+      );
+    }).slice(0, MAX_PATTERNS_TO_SHOW);
+  }, [categories, currentPatternName, patterns]);
+  if (sameCategoryPatternsWithSingleWrapper.length < 2) {
+    return null;
+  }
+  const onClickPattern = pattern => {
+    var _pattern$blocks;
+    const newBlocks = ((_pattern$blocks = pattern.blocks) !== null && _pattern$blocks !== void 0 ? _pattern$blocks : []).map(block => {
+      return (0,external_wp_blocks_namespaceObject.cloneBlock)(block);
+    });
+    newBlocks[0].attributes.metadata = {
+      ...newBlocks[0].attributes.metadata,
+      categories
+    };
+    replaceBlocks(clientId, newBlocks);
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
+    popoverProps: change_design_POPOVER_PROPS,
+    renderToggle: ({
+      onToggle,
+      isOpen
+    }) => {
+      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+          onClick: () => onToggle(!isOpen),
+          "aria-expanded": isOpen,
+          children: (0,external_wp_i18n_namespaceObject.__)('Change design')
+        })
+      });
+    },
+    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
+      className: "block-editor-block-toolbar-change-design-content-wrapper",
+      paddingSize: "none",
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_patterns_list, {
+        blockPatterns: sameCategoryPatternsWithSingleWrapper,
+        onClickPattern: onClickPattern,
+        showTitlesAsTooltip: true
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/switch-section-style.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+const styleIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.SVG, {
+  viewBox: "0 0 24 24",
+  xmlns: "http://www.w3.org/2000/svg",
+  width: "24",
+  height: "24",
+  "aria-hidden": "true",
+  focusable: "false",
+  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
+    d: "M17.2 10.9c-.5-1-1.2-2.1-2.1-3.2-.6-.9-1.3-1.7-2.1-2.6L12 4l-1 1.1c-.6.9-1.3 1.7-2 2.6-.8 1.2-1.5 2.3-2 3.2-.6 1.2-1 2.2-1 3 0 3.4 2.7 6.1 6.1 6.1s6.1-2.7 6.1-6.1c0-.8-.3-1.8-1-3z"
+  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Path, {
+    stroke: "currentColor",
+    strokeWidth: "1.5",
+    d: "M17.2 10.9c-.5-1-1.2-2.1-2.1-3.2-.6-.9-1.3-1.7-2.1-2.6L12 4l-1 1.1c-.6.9-1.3 1.7-2 2.6-.8 1.2-1.5 2.3-2 3.2-.6 1.2-1 2.2-1 3 0 3.4 2.7 6.1 6.1 6.1s6.1-2.7 6.1-6.1c0-.8-.3-1.8-1-3z"
+  })]
+});
+function SwitchSectionStyle({
+  clientId
+}) {
+  var _mergedConfig$setting, _mergedConfig$styles;
+  const {
+    stylesToRender,
+    activeStyle,
+    className
+  } = useStylesForBlocks({
+    clientId
+  });
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+
+  // Get global styles data
+  const {
+    merged: mergedConfig
+  } = (0,external_wp_element_namespaceObject.useContext)(GlobalStylesContext);
+  const {
+    globalSettings,
+    globalStyles,
+    blockName
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    const settings = select(store).getSettings();
+    return {
+      globalSettings: settings.__experimentalFeatures,
+      globalStyles: settings[globalStylesDataKey],
+      blockName: select(store).getBlockName(clientId)
+    };
+  }, [clientId]);
+
+  // Get the background color for the active style
+  const activeStyleBackground = activeStyle?.name ? getVariationStylesWithRefValues({
+    settings: (_mergedConfig$setting = mergedConfig?.settings) !== null && _mergedConfig$setting !== void 0 ? _mergedConfig$setting : globalSettings,
+    styles: (_mergedConfig$styles = mergedConfig?.styles) !== null && _mergedConfig$styles !== void 0 ? _mergedConfig$styles : globalStyles
+  }, blockName, activeStyle.name)?.color?.background : undefined;
+  if (!stylesToRender || stylesToRender.length === 0) {
+    return null;
+  }
+  const handleStyleSwitch = () => {
+    const currentIndex = stylesToRender.findIndex(style => style.name === activeStyle.name);
+    const nextIndex = (currentIndex + 1) % stylesToRender.length;
+    const nextStyle = stylesToRender[nextIndex];
+    const styleClassName = replaceActiveStyle(className, activeStyle, nextStyle);
+    updateBlockAttributes(clientId, {
+      className: styleClassName
+    });
+  };
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarGroup, {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
+      onClick: handleStyleSwitch,
+      label: (0,external_wp_i18n_namespaceObject.__)('Shuffle styles'),
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
+        icon: styleIcon,
+        style: {
+          fill: activeStyleBackground || 'transparent'
+        }
+      })
+    })
+  });
+}
+/* harmony default export */ const switch_section_style = (SwitchSectionStyle);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-toolbar/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
 
 
 
@@ -54975,8 +60499,6 @@
  * @param {string}   props.variant                     Style variant of the toolbar, also passed to the Dropdowns rendered from Block Toolbar Buttons.
  */
 
-
-
 function PrivateBlockToolbar({
   hideDragHandle,
   focusOnMount,
@@ -54992,7 +60514,16 @@
     toolbarKey,
     shouldShowVisualToolbar,
     showParentSelector,
-    isUsingBindings
+    isUsingBindings,
+    hasParentPattern,
+    hasContentOnlyLocking,
+    showShuffleButton,
+    showSlots,
+    showGroupButtons,
+    showLockButtons,
+    showSwitchSectionStyleButton,
+    hasFixedToolbar,
+    isNavigationMode
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getBlockName,
@@ -55000,32 +60531,51 @@
       getBlockParents,
       getSelectedBlockClientIds,
       isBlockValid,
-      getBlockRootClientId,
       getBlockEditingMode,
-      getBlockAttributes
-    } = select(store);
+      getBlockAttributes,
+      getBlockParentsByBlockName,
+      getTemplateLock,
+      getSettings,
+      getParentSectionBlock,
+      isZoomOut,
+      isNavigationMode: _isNavigationMode
+    } = unlock(select(store));
     const selectedBlockClientIds = getSelectedBlockClientIds();
     const selectedBlockClientId = selectedBlockClientIds[0];
-    const blockRootClientId = getBlockRootClientId(selectedBlockClientId);
     const parents = getBlockParents(selectedBlockClientId);
-    const firstParentClientId = parents[parents.length - 1];
-    const parentBlockName = getBlockName(firstParentClientId);
+    const parentSection = getParentSectionBlock(selectedBlockClientId);
+    const parentClientId = parentSection !== null && parentSection !== void 0 ? parentSection : parents[parents.length - 1];
+    const parentBlockName = getBlockName(parentClientId);
     const parentBlockType = (0,external_wp_blocks_namespaceObject.getBlockType)(parentBlockName);
-    const _isDefaultEditingMode = getBlockEditingMode(selectedBlockClientId) === 'default';
+    const editingMode = getBlockEditingMode(selectedBlockClientId);
+    const _isDefaultEditingMode = editingMode === 'default';
     const _blockName = getBlockName(selectedBlockClientId);
     const isValid = selectedBlockClientIds.every(id => isBlockValid(id));
     const isVisual = selectedBlockClientIds.every(id => getBlockMode(id) === 'visual');
     const _isUsingBindings = selectedBlockClientIds.every(clientId => !!getBlockAttributes(clientId)?.metadata?.bindings);
+    const _hasParentPattern = selectedBlockClientIds.every(clientId => getBlockParentsByBlockName(clientId, 'core/block', true).length > 0);
+
+    // If one or more selected blocks are locked, do not show the BlockGroupToolbar.
+    const _hasTemplateLock = selectedBlockClientIds.some(id => getTemplateLock(id) === 'contentOnly');
+    const _isZoomOut = isZoomOut();
     return {
       blockClientId: selectedBlockClientId,
       blockClientIds: selectedBlockClientIds,
       isDefaultEditingMode: _isDefaultEditingMode,
       blockType: selectedBlockClientId && (0,external_wp_blocks_namespaceObject.getBlockType)(_blockName),
       shouldShowVisualToolbar: isValid && isVisual,
-      rootClientId: blockRootClientId,
-      toolbarKey: `${selectedBlockClientId}${firstParentClientId}`,
-      showParentSelector: parentBlockType && getBlockEditingMode(firstParentClientId) === 'default' && (0,external_wp_blocks_namespaceObject.hasBlockSupport)(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1 && _isDefaultEditingMode,
-      isUsingBindings: _isUsingBindings
+      toolbarKey: `${selectedBlockClientId}${parentClientId}`,
+      showParentSelector: !_isZoomOut && parentBlockType && editingMode !== 'contentOnly' && getBlockEditingMode(parentClientId) !== 'disabled' && (0,external_wp_blocks_namespaceObject.hasBlockSupport)(parentBlockType, '__experimentalParentSelector', true) && selectedBlockClientIds.length === 1,
+      isUsingBindings: _isUsingBindings,
+      hasParentPattern: _hasParentPattern,
+      hasContentOnlyLocking: _hasTemplateLock,
+      showShuffleButton: _isZoomOut,
+      showSlots: !_isZoomOut,
+      showGroupButtons: !_isZoomOut,
+      showLockButtons: !_isZoomOut,
+      showSwitchSectionStyleButton: _isZoomOut,
+      hasFixedToolbar: getSettings().hasFixedToolbar,
+      isNavigationMode: _isNavigationMode()
     };
   }, []);
   const toolbarWrapperRef = (0,external_wp_element_namespaceObject.useRef)(null);
@@ -55046,7 +60596,8 @@
 
   // Shifts the toolbar to make room for the parent block selector.
   const classes = dist_clsx('block-editor-block-contextual-toolbar', {
-    'has-parent': showParentSelector
+    'has-parent': showParentSelector,
+    'is-inverted-toolbar': isNavigationMode && !hasFixedToolbar
   });
   const innerClasses = dist_clsx('block-editor-block-toolbar', {
     'is-synced': isSynced,
@@ -55069,27 +60620,25 @@
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
       ref: toolbarWrapperRef,
       className: innerClasses,
-      children: [!isMultiToolbar && isLargeViewport && isDefaultEditingMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockParentSelector, {}), (shouldShowVisualToolbar || isMultiToolbar) && (isDefaultEditingMode || isSynced) && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      children: [showParentSelector && !isMultiToolbar && isLargeViewport && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockParentSelector, {}), (shouldShowVisualToolbar || isMultiToolbar) && !hasParentPattern && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         ref: nodeRef,
         ...showHoveredOrFocusedGestures,
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.ToolbarGroup, {
           className: "block-editor-block-toolbar__block-controls",
           children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_switcher, {
+            clientIds: blockClientIds
+          }), !isMultiToolbar && isDefaultEditingMode && showLockButtons && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockToolbar, {
+            clientId: blockClientId
+          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_mover, {
             clientIds: blockClientIds,
-            disabled: !isDefaultEditingMode,
-            isUsingBindings: isUsingBindings
-          }), isDefaultEditingMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-            children: [!isMultiToolbar && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockLockToolbar, {
-              clientId: blockClientId
-            }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_mover, {
-              clientIds: blockClientIds,
-              hideDragHandle: hideDragHandle
-            })]
+            hideDragHandle: hideDragHandle
           })]
         })
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Shuffle, {
-        clientId: blockClientId
-      }), shouldShowVisualToolbar && isMultiToolbar && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(toolbar, {}), shouldShowVisualToolbar && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+      }), !hasContentOnlyLocking && shouldShowVisualToolbar && isMultiToolbar && showGroupButtons && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(toolbar, {}), showShuffleButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ChangeDesign, {
+        clientId: blockClientIds[0]
+      }), showSwitchSectionStyleButton && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(switch_section_style, {
+        clientId: blockClientIds[0]
+      }), shouldShowVisualToolbar && showSlots && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_controls.Slot, {
           group: "parent",
           className: "block-editor-block-toolbar__slot"
@@ -55110,7 +60659,7 @@
         })]
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockEditVisuallyButton, {
         clientIds: blockClientIds
-      }), isDefaultEditingMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu, {
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_settings_menu, {
         clientIds: blockClientIds
       })]
     })
@@ -55139,7 +60688,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/block-toolbar-popover.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/block-toolbar-popover.js
 /**
  * External dependencies
  */
@@ -55181,31 +60730,36 @@
   const {
     stopTyping
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const isToolbarForced = (0,external_wp_element_namespaceObject.useRef)(false);
+  const isToolbarForcedRef = (0,external_wp_element_namespaceObject.useRef)(false);
   (0,external_wp_keyboardShortcuts_namespaceObject.useShortcut)('core/block-editor/focus-toolbar', () => {
-    isToolbarForced.current = true;
+    isToolbarForcedRef.current = true;
     stopTyping(true);
   });
   (0,external_wp_element_namespaceObject.useEffect)(() => {
-    isToolbarForced.current = false;
-  });
+    isToolbarForcedRef.current = false;
+  });
+
+  // If the block has a parent with __experimentalCaptureToolbars enabled,
+  // the toolbar should be positioned over the topmost capturing parent.
+  const clientIdToPositionOver = capturingClientId || clientId;
   const popoverProps = useBlockToolbarPopoverProps({
     contentElement: __unstableContentRef?.current,
-    clientId
-  });
-  return !isTyping && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_popover, {
-    clientId: capturingClientId || clientId,
+    clientId: clientIdToPositionOver
+  });
+  return !isTyping && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
+    clientId: clientIdToPositionOver,
     bottomClientId: lastClientId,
     className: dist_clsx('block-editor-block-list__block-popover', {
       'is-insertion-point-visible': isInsertionPointVisible
     }),
     resize: false,
     ...popoverProps,
+    __unstableContentRef: __unstableContentRef,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockToolbar
     // If the toolbar is being shown because of being forced
     // it should focus the toolbar right after the mount.
     , {
-      focusOnMount: isToolbarForced.current,
+      focusOnMount: isToolbarForcedRef.current,
       __experimentalInitialIndex: initialToolbarItemIndexRef.current,
       __experimentalOnIndexChange: index => {
         initialToolbarItemIndexRef.current = index;
@@ -55215,374 +60769,37 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/trash.js
-/**
- * WordPress dependencies
- */
-
-
-const trash = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"
-  })
-});
-/* harmony default export */ const library_trash = (trash);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/block-selection-button.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-/**
- * Block selection button component, displaying the label of the block. If the block
- * descends from a root block, a button is displayed enabling the user to select
- * the root block.
- *
- * @param {string} props          Component props.
- * @param {string} props.clientId Client ID of block.
- *
- * @return {Component} The component to be rendered.
- */
-
-
-function BlockSelectionButton({
-  clientId,
-  rootClientId
-}) {
-  const selected = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getBlock,
-      getBlockIndex,
-      hasBlockMovingClientId,
-      getBlockListSettings,
-      __unstableGetEditorMode,
-      getNextBlockClientId,
-      getPreviousBlockClientId,
-      canRemoveBlock,
-      canMoveBlock
-    } = select(store);
-    const {
-      getActiveBlockVariation,
-      getBlockType
-    } = select(external_wp_blocks_namespaceObject.store);
-    const index = getBlockIndex(clientId);
-    const {
-      name,
-      attributes
-    } = getBlock(clientId);
-    const blockType = getBlockType(name);
-    const orientation = getBlockListSettings(rootClientId)?.orientation;
-    const match = getActiveBlockVariation(name, attributes);
-    const isBlockTemplatePart = blockType?.name === 'core/template-part';
-    let isNextBlockTemplatePart = false;
-    const nextClientId = getNextBlockClientId();
-    if (nextClientId) {
-      const {
-        name: nextName
-      } = getBlock(nextClientId);
-      const nextBlockType = getBlockType(nextName);
-      isNextBlockTemplatePart = nextBlockType?.name === 'core/template-part';
-    }
-    let isPrevBlockTemplatePart = false;
-    const prevClientId = getPreviousBlockClientId();
-    if (prevClientId) {
-      const {
-        name: prevName
-      } = getBlock(prevClientId);
-      const prevBlockType = getBlockType(prevName);
-      isPrevBlockTemplatePart = prevBlockType?.name === 'core/template-part';
-    }
-    return {
-      blockMovingMode: hasBlockMovingClientId(),
-      editorMode: __unstableGetEditorMode(),
-      icon: match?.icon || blockType.icon,
-      label: (0,external_wp_blocks_namespaceObject.__experimentalGetAccessibleBlockLabel)(blockType, attributes, index + 1, orientation),
-      isBlockTemplatePart,
-      isNextBlockTemplatePart,
-      isPrevBlockTemplatePart,
-      canRemove: canRemoveBlock(clientId),
-      canMove: canMoveBlock(clientId)
-    };
-  }, [clientId, rootClientId]);
-  const {
-    label,
-    icon,
-    blockMovingMode,
-    editorMode,
-    isBlockTemplatePart,
-    isNextBlockTemplatePart,
-    isPrevBlockTemplatePart,
-    canRemove,
-    canMove
-  } = selected;
-  const {
-    setNavigationMode,
-    removeBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  const ref = (0,external_wp_element_namespaceObject.useRef)();
-
-  // Focus the breadcrumb in navigation mode.
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (editorMode === 'navigation') {
-      ref.current.focus();
-      (0,external_wp_a11y_namespaceObject.speak)(label);
-    }
-  }, [label, editorMode]);
-  const blockElement = useBlockElement(clientId);
-  const {
-    hasBlockMovingClientId,
-    getBlockIndex,
-    getBlockRootClientId,
-    getClientIdsOfDescendants,
-    getSelectedBlockClientId,
-    getMultiSelectedBlocksEndClientId,
-    getPreviousBlockClientId,
-    getNextBlockClientId
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    selectBlock,
-    clearSelectedBlock,
-    setBlockMovingClientId,
-    moveBlockToPosition
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  function onKeyDown(event) {
-    const {
-      keyCode
-    } = event;
-    const isUp = keyCode === external_wp_keycodes_namespaceObject.UP;
-    const isDown = keyCode === external_wp_keycodes_namespaceObject.DOWN;
-    const isLeft = keyCode === external_wp_keycodes_namespaceObject.LEFT;
-    const isRight = keyCode === external_wp_keycodes_namespaceObject.RIGHT;
-    const isTab = keyCode === external_wp_keycodes_namespaceObject.TAB;
-    const isEscape = keyCode === external_wp_keycodes_namespaceObject.ESCAPE;
-    const isEnter = keyCode === external_wp_keycodes_namespaceObject.ENTER;
-    const isSpace = keyCode === external_wp_keycodes_namespaceObject.SPACE;
-    const isShift = event.shiftKey;
-    if (isEscape && editorMode === 'navigation') {
-      setNavigationMode(false);
-      event.preventDefault();
-      return;
-    }
-    if (keyCode === external_wp_keycodes_namespaceObject.BACKSPACE || keyCode === external_wp_keycodes_namespaceObject.DELETE) {
-      removeBlock(clientId);
-      event.preventDefault();
-      return;
-    }
-    const selectedBlockClientId = getSelectedBlockClientId();
-    const selectionEndClientId = getMultiSelectedBlocksEndClientId();
-    const selectionBeforeEndClientId = getPreviousBlockClientId(selectionEndClientId || selectedBlockClientId);
-    const selectionAfterEndClientId = getNextBlockClientId(selectionEndClientId || selectedBlockClientId);
-    const navigateUp = isTab && isShift || isUp;
-    const navigateDown = isTab && !isShift || isDown;
-    // Move out of current nesting level (no effect if at root level).
-    const navigateOut = isLeft;
-    // Move into next nesting level (no effect if the current block has no innerBlocks).
-    const navigateIn = isRight;
-    let focusedBlockUid;
-    if (navigateUp) {
-      focusedBlockUid = selectionBeforeEndClientId;
-    } else if (navigateDown) {
-      focusedBlockUid = selectionAfterEndClientId;
-    } else if (navigateOut) {
-      var _getBlockRootClientId;
-      focusedBlockUid = (_getBlockRootClientId = getBlockRootClientId(selectedBlockClientId)) !== null && _getBlockRootClientId !== void 0 ? _getBlockRootClientId : selectedBlockClientId;
-    } else if (navigateIn) {
-      var _getClientIdsOfDescen;
-      focusedBlockUid = (_getClientIdsOfDescen = getClientIdsOfDescendants(selectedBlockClientId)[0]) !== null && _getClientIdsOfDescen !== void 0 ? _getClientIdsOfDescen : selectedBlockClientId;
-    }
-    const startingBlockClientId = hasBlockMovingClientId();
-    if (isEscape && startingBlockClientId && !event.defaultPrevented) {
-      setBlockMovingClientId(null);
-      event.preventDefault();
-    }
-    if ((isEnter || isSpace) && startingBlockClientId) {
-      const sourceRoot = getBlockRootClientId(startingBlockClientId);
-      const destRoot = getBlockRootClientId(selectedBlockClientId);
-      const sourceBlockIndex = getBlockIndex(startingBlockClientId);
-      let destinationBlockIndex = getBlockIndex(selectedBlockClientId);
-      if (sourceBlockIndex < destinationBlockIndex && sourceRoot === destRoot) {
-        destinationBlockIndex -= 1;
-      }
-      moveBlockToPosition(startingBlockClientId, sourceRoot, destRoot, destinationBlockIndex);
-      selectBlock(startingBlockClientId);
-      setBlockMovingClientId(null);
-    }
-    // Prevent the block from being moved into itself.
-    if (startingBlockClientId && selectedBlockClientId === startingBlockClientId && navigateIn) {
-      return;
-    }
-    if (navigateDown || navigateUp || navigateOut || navigateIn) {
-      if (focusedBlockUid) {
-        event.preventDefault();
-        selectBlock(focusedBlockUid);
-      } else if (isTab && selectedBlockClientId) {
-        let nextTabbable;
-        if (navigateDown) {
-          nextTabbable = blockElement;
-          do {
-            nextTabbable = external_wp_dom_namespaceObject.focus.tabbable.findNext(nextTabbable);
-          } while (nextTabbable && blockElement.contains(nextTabbable));
-          if (!nextTabbable) {
-            nextTabbable = blockElement.ownerDocument.defaultView.frameElement;
-            nextTabbable = external_wp_dom_namespaceObject.focus.tabbable.findNext(nextTabbable);
-          }
-        } else {
-          nextTabbable = external_wp_dom_namespaceObject.focus.tabbable.findPrevious(blockElement);
-        }
-        if (nextTabbable) {
-          event.preventDefault();
-          nextTabbable.focus();
-          clearSelectedBlock();
-        }
-      }
-    }
-  }
-  const classNames = dist_clsx('block-editor-block-list__block-selection-button', {
-    'is-block-moving-mode': !!blockMovingMode
-  });
-  const dragHandleLabel = (0,external_wp_i18n_namespaceObject.__)('Drag');
-  const showBlockDraggable = canMove && editorMode === 'navigation' || editorMode === 'zoom-out' && canMove && !isBlockTemplatePart;
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-    className: classNames,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
-      justify: "center",
-      className: "block-editor-block-list__block-selection-button__content",
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-          icon: icon,
-          showColors: true
-        })
-      }), showBlockDraggable && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_draggable, {
-          clientIds: [clientId],
-          children: draggableProps => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            icon: drag_handle,
-            className: "block-selection-button_drag-handle",
-            "aria-hidden": "true",
-            label: dragHandleLabel
-            // Should not be able to tab to drag handle as this
-            // button can only be used with a pointer device.
-            ,
-            tabIndex: "-1",
-            ...draggableProps
-          })
-        })
-      }), editorMode === 'zoom-out' && !isBlockTemplatePart && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_mover, {
-          clientIds: [clientId],
-          hideDragHandle: true,
-          isBlockMoverUpButtonDisabled: isPrevBlockTemplatePart,
-          isBlockMoverDownButtonDisabled: isNextBlockTemplatePart
-        })
-      }), canMove && canRemove && editorMode === 'zoom-out' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(Shuffle, {
-        clientId: clientId,
-        as: external_wp_components_namespaceObject.Button
-      }), canRemove && editorMode === 'zoom-out' && !isBlockTemplatePart && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarButton, {
-          icon: library_trash,
-          label: "Delete",
-          onClick: () => {
-            removeBlock(clientId);
-          }
-        })
-      }), editorMode === 'navigation' && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          ref: ref,
-          onClick: editorMode === 'navigation' ? () => setNavigationMode(false) : undefined,
-          onKeyDown: onKeyDown,
-          label: label,
-          showTooltip: false,
-          className: "block-selection-button_select-button",
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockTitle, {
-            clientId: clientId,
-            maximumLength: 35
-          })
-        })
-      })]
-    })
-  });
-}
-/* harmony default export */ const block_selection_button = (BlockSelectionButton);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/block-toolbar-breadcrumb.js
-/**
- * External dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-function BlockToolbarBreadcrumb({
-  clientId,
-  __unstableContentRef
-}) {
-  const {
-    capturingClientId,
-    isInsertionPointVisible,
-    lastClientId,
-    rootClientId
-  } = useSelectedBlockToolProps(clientId);
-  const popoverProps = useBlockToolbarPopoverProps({
-    contentElement: __unstableContentRef?.current,
-    clientId
-  });
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(PrivateBlockPopover, {
-    clientId: capturingClientId || clientId,
-    bottomClientId: lastClientId,
-    className: dist_clsx('block-editor-block-list__block-popover', {
-      'is-insertion-point-visible': isInsertionPointVisible
-    }),
-    resize: false,
-    ...popoverProps,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_selection_button, {
-      clientId: clientId,
-      rootClientId: rootClientId
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/zoom-out-mode-inserters.js
-/**
- * WordPress dependencies
- */
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/zoom-out-mode-inserter-button.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+function ZoomOutModeInserterButton({
+  onClick
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    variant: "primary",
+    icon: library_plus,
+    size: "compact",
+    className: dist_clsx('block-editor-button-pattern-inserter__button', 'block-editor-block-tools__zoom-out-mode-inserter-button'),
+    onClick: onClick,
+    label: (0,external_wp_i18n_namespaceObject._x)('Add pattern', 'Generic label for pattern inserter button')
+  });
+}
+/* harmony default export */ const zoom_out_mode_inserter_button = (ZoomOutModeInserterButton);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/zoom-out-mode-inserters.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -55597,43 +60814,39 @@
 function ZoomOutModeInserters() {
   const [isReady, setIsReady] = (0,external_wp_element_namespaceObject.useState)(false);
   const {
+    hasSelection,
     blockOrder,
+    setInserterIsOpened,
     sectionRootClientId,
-    insertionPoint,
-    setInserterIsOpened,
-    selectedSection
+    selectedBlockClientId,
+    blockInsertionPoint,
+    insertionPointVisible
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getSettings,
-      getBlockOrder
-    } = select(store);
-    const {
-      sectionRootClientId: root
-    } = unlock(getSettings());
-    // To do: move ZoomOutModeInserters to core/editor.
-    // Or we perhaps we should move the insertion point state to the
-    // block-editor store. I'm not sure what it was ever moved to the editor
-    // store, because all the inserter components all live in the
-    // block-editor package.
-    // eslint-disable-next-line @wordpress/data-no-store-string-literals
-    const editor = select('core/editor');
-    return {
-      selectedSection: editor.getSelectedBlock(),
+      getBlockOrder,
+      getSelectionStart,
+      getSelectedBlockClientId,
+      getSectionRootClientId,
+      getBlockInsertionPoint,
+      isBlockInsertionPointVisible
+    } = unlock(select(store));
+    const root = getSectionRootClientId();
+    return {
+      hasSelection: !!getSelectionStart().clientId,
       blockOrder: getBlockOrder(root),
-      insertionPoint: unlock(editor).getInsertionPoint(),
       sectionRootClientId: root,
-      setInserterIsOpened: getSettings().__experimentalSetIsInserterOpened
+      setInserterIsOpened: getSettings().__experimentalSetIsInserterOpened,
+      selectedBlockClientId: getSelectedBlockClientId(),
+      blockInsertionPoint: getBlockInsertionPoint(),
+      insertionPointVisible: isBlockInsertionPointVisible()
     };
   }, []);
-  const isMounted = (0,external_wp_element_namespaceObject.useRef)(false);
-  (0,external_wp_element_namespaceObject.useEffect)(() => {
-    if (!isMounted.current) {
-      isMounted.current = true;
-      return;
-    }
-    // reset insertion point when the block order changes
-    setInserterIsOpened(true);
-  }, [blockOrder, setInserterIsOpened]);
+
+  // eslint-disable-next-line @wordpress/no-unused-vars-before-return
+  const {
+    showInsertionPoint
+  } = unlock((0,external_wp_data_namespaceObject.useDispatch)(store));
 
   // Defer the initial rendering to avoid the jumps due to the animation.
   (0,external_wp_element_namespaceObject.useEffect)(() => {
@@ -55644,52 +60857,50 @@
       clearTimeout(timeout);
     };
   }, []);
-  if (!isReady || !selectedSection) {
-    return null;
-  }
-  return [undefined, ...blockOrder].map((clientId, index) => {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(inbetween, {
-      previousClientId: clientId,
-      nextClientId: blockOrder[index],
-      children: [insertionPoint.insertionIndex === index && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-        style: {
-          borderRadius: '0',
-          height: '12px',
-          opacity: 1,
-          transform: 'translateY(-50%)',
-          width: '100%'
-        },
-        className: "block-editor-block-list__insertion-point-indicator"
-      }), insertionPoint.insertionIndex !== index && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-        variant: "primary",
-        icon: library_plus,
-        size: "compact",
-        className: "block-editor-button-pattern-inserter__button",
-        onClick: () => {
-          setInserterIsOpened({
-            rootClientId: sectionRootClientId,
-            insertionIndex: index,
-            tab: 'patterns',
-            category: 'all'
-          });
-        },
-        label: (0,external_wp_i18n_namespaceObject._x)('Add pattern', 'Generic label for pattern inserter button')
-      })]
-    }, index);
+  if (!isReady || !hasSelection) {
+    return null;
+  }
+  const previousClientId = selectedBlockClientId;
+  const index = blockOrder.findIndex(clientId => selectedBlockClientId === clientId);
+  const insertionIndex = index + 1;
+  const nextClientId = blockOrder[insertionIndex];
+
+  // If the block insertion point is visible, and the insertion
+  // Indices match then we don't need to render the inserter.
+  if (insertionPointVisible && blockInsertionPoint?.index === insertionIndex) {
+    return null;
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inbetween, {
+    previousClientId: previousClientId,
+    nextClientId: nextClientId,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(zoom_out_mode_inserter_button, {
+      onClick: () => {
+        setInserterIsOpened({
+          rootClientId: sectionRootClientId,
+          insertionIndex,
+          tab: 'patterns',
+          category: 'all'
+        });
+        showInsertionPoint(sectionRootClientId, insertionIndex, {
+          operation: 'insert'
+        });
+      }
+    })
   });
 }
 /* harmony default export */ const zoom_out_mode_inserters = (ZoomOutModeInserters);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-show-block-tools.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/use-show-block-tools.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 /**
@@ -55703,47 +60914,44 @@
       getSelectedBlockClientId,
       getFirstMultiSelectedBlockClientId,
       getBlock,
+      getBlockMode,
       getSettings,
-      hasMultiSelection,
       __unstableGetEditorMode,
       isTyping
-    } = select(store);
+    } = unlock(select(store));
     const clientId = getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
-    const block = getBlock(clientId) || {
-      name: '',
-      attributes: {}
-    };
+    const block = getBlock(clientId);
     const editorMode = __unstableGetEditorMode();
-    const hasSelectedBlock = clientId && block?.name;
-    const isEmptyDefaultBlock = (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(block);
-    const _showEmptyBlockSideInserter = clientId && !isTyping() && editorMode === 'edit' && isEmptyDefaultBlock;
-    const maybeShowBreadcrumb = hasSelectedBlock && !hasMultiSelection() && (editorMode === 'navigation' || editorMode === 'zoom-out');
+    const hasSelectedBlock = !!clientId && !!block;
+    const isEmptyDefaultBlock = hasSelectedBlock && (0,external_wp_blocks_namespaceObject.isUnmodifiedDefaultBlock)(block) && getBlockMode(clientId) !== 'html';
+    const _showEmptyBlockSideInserter = clientId && !isTyping() &&
+    // Hide the block inserter on the navigation mode.
+    // See https://github.com/WordPress/gutenberg/pull/66636#discussion_r1824728483.
+    editorMode !== 'navigation' && isEmptyDefaultBlock;
+    const _showBlockToolbarPopover = !getSettings().hasFixedToolbar && !_showEmptyBlockSideInserter && hasSelectedBlock && !isEmptyDefaultBlock;
     return {
       showEmptyBlockSideInserter: _showEmptyBlockSideInserter,
-      showBreadcrumb: !_showEmptyBlockSideInserter && maybeShowBreadcrumb,
-      showBlockToolbarPopover: !getSettings().hasFixedToolbar && !_showEmptyBlockSideInserter && hasSelectedBlock && !isEmptyDefaultBlock && !maybeShowBreadcrumb
+      showBlockToolbarPopover: _showBlockToolbarPopover
     };
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-tools/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-tools/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -55758,16 +60966,17 @@
     getSelectedBlockClientId,
     getFirstMultiSelectedBlockClientId,
     getSettings,
-    __unstableGetEditorMode,
-    isTyping
-  } = select(store);
+    isTyping,
+    isDragging,
+    isZoomOut
+  } = unlock(select(store));
   const clientId = getSelectedBlockClientId() || getFirstMultiSelectedBlockClientId();
-  const editorMode = __unstableGetEditorMode();
   return {
     clientId,
     hasFixedToolbar: getSettings().hasFixedToolbar,
     isTyping: isTyping(),
-    isZoomOutMode: editorMode === 'zoom-out'
+    isZoomOutMode: isZoomOut(),
+    isDragging: isDragging()
   };
 }
 
@@ -55789,7 +60998,8 @@
     clientId,
     hasFixedToolbar,
     isTyping,
-    isZoomOutMode
+    isZoomOutMode,
+    isDragging
   } = (0,external_wp_data_namespaceObject.useSelect)(block_tools_selector, []);
   const isMatch = (0,external_wp_keyboardShortcuts_namespaceObject.__unstableUseShortcutEventMatch)();
   const {
@@ -55803,7 +61013,6 @@
   } = (0,external_wp_data_namespaceObject.useSelect)(external_wp_blocks_namespaceObject.store);
   const {
     showEmptyBlockSideInserter,
-    showBreadcrumb,
     showBlockToolbarPopover
   } = useShowBlockTools();
   const {
@@ -55821,19 +61030,22 @@
     if (event.defaultPrevented) {
       return;
     }
-    if (isMatch('core/block-editor/move-up', event)) {
+    if (isMatch('core/block-editor/move-up', event) || isMatch('core/block-editor/move-down', event)) {
       const clientIds = getSelectedBlockClientIds();
       if (clientIds.length) {
         event.preventDefault();
         const rootClientId = getBlockRootClientId(clientIds[0]);
-        moveBlocksUp(clientIds, rootClientId);
-      }
-    } else if (isMatch('core/block-editor/move-down', event)) {
-      const clientIds = getSelectedBlockClientIds();
-      if (clientIds.length) {
-        event.preventDefault();
-        const rootClientId = getBlockRootClientId(clientIds[0]);
-        moveBlocksDown(clientIds, rootClientId);
+        const direction = isMatch('core/block-editor/move-up', event) ? 'up' : 'down';
+        if (direction === 'up') {
+          moveBlocksUp(clientIds, rootClientId);
+        } else {
+          moveBlocksDown(clientIds, rootClientId);
+        }
+        const blockLength = Array.isArray(clientIds) ? clientIds.length : 1;
+        const message = (0,external_wp_i18n_namespaceObject.sprintf)(
+        // translators: %d: the name of the block that has been moved
+        (0,external_wp_i18n_namespaceObject._n)('%d block moved.', '%d blocks moved.', clientIds.length), blockLength);
+        (0,external_wp_a11y_namespaceObject.speak)(message);
       }
     } else if (isMatch('core/block-editor/duplicate', event)) {
       const clientIds = getSelectedBlockClientIds();
@@ -55907,7 +61119,7 @@
       onKeyDown: onKeyDown,
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(insertion_point_InsertionPointOpenRef.Provider, {
         value: (0,external_wp_element_namespaceObject.useRef)(false),
-        children: [!isTyping && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InsertionPoint, {
+        children: [!isTyping && !isZoomOutMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InsertionPoint, {
           __unstableContentRef: __unstableContentRef
         }), showEmptyBlockSideInserter && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(EmptyBlockInserter, {
           __unstableContentRef: __unstableContentRef,
@@ -55916,16 +61128,13 @@
           __unstableContentRef: __unstableContentRef,
           clientId: clientId,
           isTyping: isTyping
-        }), showBreadcrumb && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockToolbarBreadcrumb, {
-          __unstableContentRef: __unstableContentRef,
-          clientId: clientId
         }), !isZoomOutMode && !hasFixedToolbar && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover.Slot, {
           name: "block-toolbar",
           ref: blockToolbarRef
         }), children, /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Popover.Slot, {
           name: "__unstable-block-tools-after",
           ref: blockToolbarAfterRef
-        }), window.__experimentalEnableZoomedOutPatternsTab && isZoomOutMode && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(zoom_out_mode_inserters, {
+        }), isZoomOutMode && !isDragging && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(zoom_out_mode_inserters, {
           __unstableContentRef: __unstableContentRef
         })]
       })
@@ -55933,24 +61142,9 @@
   );
 }
 
-;// CONCATENATED MODULE: external ["wp","commands"]
+;// external ["wp","commands"]
 const external_wp_commands_namespaceObject = window["wp"]["commands"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/move-to.js
-/**
- * WordPress dependencies
- */
-
-
-const move_to_moveTo = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M19.75 9c0-1.257-.565-2.197-1.39-2.858-.797-.64-1.827-1.017-2.815-1.247-1.802-.42-3.703-.403-4.383-.396L11 4.5V6l.177-.001c.696-.006 2.416-.02 4.028.356.887.207 1.67.518 2.216.957.52.416.829.945.829 1.688 0 .592-.167.966-.407 1.23-.255.281-.656.508-1.236.674-1.19.34-2.82.346-4.607.346h-.077c-1.692 0-3.527 0-4.942.404-.732.209-1.424.545-1.935 1.108-.526.579-.796 1.33-.796 2.238 0 1.257.565 2.197 1.39 2.858.797.64 1.827 1.017 2.815 1.247 1.802.42 3.703.403 4.383.396L13 19.5h.714V22L18 18.5 13.714 15v3H13l-.177.001c-.696.006-2.416.02-4.028-.356-.887-.207-1.67-.518-2.216-.957-.52-.416-.829-.945-.829-1.688 0-.592.167-.966.407-1.23.255-.281.656-.508 1.237-.674 1.189-.34 2.819-.346 4.606-.346h.077c1.692 0 3.527 0 4.941-.404.732-.209 1.425-.545 1.936-1.108.526-.579.796-1.33.796-2.238z"
-  })
-});
-/* harmony default export */ const move_to = (move_to_moveTo);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/ungroup.js
+;// ./node_modules/@wordpress/icons/build-module/library/ungroup.js
 /**
  * WordPress dependencies
  */
@@ -55965,23 +61159,40 @@
 });
 /* harmony default export */ const library_ungroup = (ungroup);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-block-commands/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const useTransformCommands = () => {
+;// ./node_modules/@wordpress/icons/build-module/library/trash.js
+/**
+ * WordPress dependencies
+ */
+
+
+const trash = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
+  xmlns: "http://www.w3.org/2000/svg",
+  viewBox: "0 0 24 24",
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
+    fillRule: "evenodd",
+    clipRule: "evenodd",
+    d: "M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"
+  })
+});
+/* harmony default export */ const library_trash = (trash);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-block-commands/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+const getTransformCommands = () => function useTransformCommands() {
   const {
     replaceBlocks,
     multiSelect
@@ -56034,7 +61245,7 @@
     }
   }
 
-  // Simple block tranformation based on the `Block Transforms` API.
+  // Simple block transformation based on the `Block Transforms` API.
   function onBlockTransform(name) {
     const newBlocks = (0,external_wp_blocks_namespaceObject.switchToBlockType)(blocks, name);
     replaceBlocks(clientIds, newBlocks);
@@ -56061,7 +61272,7 @@
     } = transformation;
     return {
       name: 'core/block-editor/transform-to-' + name.replace('/', '-'),
-      // translators: %s: block title/name.
+      /* translators: %s: Block or block variation name. */
       label: (0,external_wp_i18n_namespaceObject.sprintf)((0,external_wp_i18n_namespaceObject.__)('Transform to %s'), title),
       icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
         icon: icon
@@ -56079,64 +61290,7 @@
     commands
   };
 };
-const useActionsCommands = () => {
-  const {
-    clientIds
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getSelectedBlockClientIds
-    } = select(store);
-    const selectedBlockClientIds = getSelectedBlockClientIds();
-    return {
-      clientIds: selectedBlockClientIds
-    };
-  }, []);
-  const {
-    getBlockRootClientId,
-    canMoveBlocks,
-    getBlockCount
-  } = (0,external_wp_data_namespaceObject.useSelect)(store);
-  const {
-    setBlockMovingClientId,
-    setNavigationMode,
-    selectBlock
-  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
-  if (!clientIds || clientIds.length < 1) {
-    return {
-      isLoading: false,
-      commands: []
-    };
-  }
-  const rootClientId = getBlockRootClientId(clientIds[0]);
-  const canMove = canMoveBlocks(clientIds) && getBlockCount(rootClientId) !== 1;
-  const commands = [];
-  if (canMove) {
-    commands.push({
-      name: 'move-to',
-      label: (0,external_wp_i18n_namespaceObject.__)('Move to'),
-      callback: () => {
-        setNavigationMode(true);
-        selectBlock(clientIds[0]);
-        setBlockMovingClientId(clientIds[0]);
-      },
-      icon: move_to
-    });
-  }
-  return {
-    isLoading: false,
-    commands: commands.map(command => ({
-      ...command,
-      name: 'core/block-editor/action-' + command.name,
-      callback: ({
-        close
-      }) => {
-        command.callback();
-        close();
-      }
-    }))
-  };
-};
-const useQuickActionsCommands = () => {
+const getQuickActionsCommands = () => function useQuickActionsCommands() {
   const {
     clientIds,
     isUngroupable,
@@ -56276,39 +61430,44 @@
 const useBlockCommands = () => {
   (0,external_wp_commands_namespaceObject.useCommandLoader)({
     name: 'core/block-editor/blockTransforms',
-    hook: useTransformCommands
-  });
-  (0,external_wp_commands_namespaceObject.useCommandLoader)({
-    name: 'core/block-editor/blockActions',
-    hook: useActionsCommands
+    hook: getTransformCommands()
   });
   (0,external_wp_commands_namespaceObject.useCommandLoader)({
     name: 'core/block-editor/blockQuickActions',
-    hook: useQuickActionsCommands,
+    hook: getQuickActionsCommands(),
     context: 'block-selection-edit'
   });
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-canvas/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-canvas/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+// EditorStyles is a memoized component, so avoid passing a new
+// object reference on each render.
+
+const EDITOR_STYLE_TRANSFORM_OPTIONS = {
+  // Don't transform selectors that already specify `.editor-styles-wrapper`.
+  ignoredSelectors: [/\.editor-styles-wrapper/gi]
+};
 function ExperimentalBlockCanvas({
   shouldIframe = true,
   height = '300px',
@@ -56318,10 +61477,16 @@
   iframeProps
 }) {
   useBlockCommands();
+  const isTabletViewport = (0,external_wp_compose_namespaceObject.useViewportMatch)('medium', '<');
   const resetTypingRef = useMouseMoveTypingReset();
   const clearerRef = useBlockSelectionClearer();
   const localRef = (0,external_wp_element_namespaceObject.useRef)();
   const contentRef = (0,external_wp_compose_namespaceObject.useMergeRefs)([contentRefProp, clearerRef, localRef]);
+  const zoomLevel = (0,external_wp_data_namespaceObject.useSelect)(select => unlock(select(store)).getZoomLevel(), []);
+  const zoomOutIframeProps = zoomLevel !== 100 && !isTabletViewport ? {
+    scale: zoomLevel,
+    frameSize: '40px'
+  } : {};
   if (!shouldIframe) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(BlockTools, {
       __unstableContentRef: localRef,
@@ -56331,7 +61496,8 @@
       },
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(editor_styles, {
         styles: styles,
-        scope: ".editor-styles-wrapper"
+        scope: ":where(.editor-styles-wrapper)",
+        transformOptions: EDITOR_STYLE_TRANSFORM_OPTIONS
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(writing_flow, {
         ref: contentRef,
         className: "editor-styles-wrapper",
@@ -56352,6 +61518,7 @@
     },
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(iframe, {
       ...iframeProps,
+      ...zoomOutIframeProps,
       ref: resetTypingRef,
       contentRef: contentRef,
       style: {
@@ -56407,7 +61574,7 @@
 }
 /* harmony default export */ const block_canvas = (BlockCanvas);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-style-selector/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/color-style-selector/index.js
 /**
  * WordPress dependencies
  */
@@ -56504,7 +61671,7 @@
 };
 /* harmony default export */ const color_style_selector = (BlockColorsStyleSelector);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/list-view.js
+;// ./node_modules/@wordpress/icons/build-module/library/list-view.js
 /**
  * WordPress dependencies
  */
@@ -56519,7 +61686,7 @@
 });
 /* harmony default export */ const list_view = (listView);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/context.js
 /**
  * WordPress dependencies
  */
@@ -56527,7 +61694,7 @@
 const ListViewContext = (0,external_wp_element_namespaceObject.createContext)({});
 const useListViewContext = () => (0,external_wp_element_namespaceObject.useContext)(ListViewContext);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/aria-referenced-text.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/aria-referenced-text.js
 /**
  * WordPress dependencies
  */
@@ -56562,7 +61729,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/appender.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/appender.js
 /**
  * WordPress dependencies
  */
@@ -56596,9 +61763,9 @@
   const hideInserter = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getTemplateLock,
-      __unstableGetEditorMode
-    } = select(store);
-    return !!getTemplateLock(clientId) || __unstableGetEditorMode() === 'zoom-out';
+      isZoomOut
+    } = unlock(select(store));
+    return !!getTemplateLock(clientId) || isZoomOut();
   }, [clientId]);
   const blockTitle = useBlockDisplayTitle({
     clientId,
@@ -56620,7 +61787,7 @@
     return null;
   }
   const descriptionId = `list-view-appender__${instanceId}`;
-  const description = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */
+  const description = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: The name of the block. 2: The numerical position of the block. 3: The level of nesting for the block. */
   (0,external_wp_i18n_namespaceObject.__)('Append to %1$s block at position %2$d, Level %3$d'), blockTitle, blockCount + 1, nestingLevel);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "list-view-appender",
@@ -56648,7 +61815,7 @@
   });
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/leaf.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/leaf.js
 /**
  * External dependencies
  */
@@ -56698,7 +61865,7 @@
 });
 /* harmony default export */ const leaf = (ListViewLeaf);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-scroll-into-view.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-scroll-into-view.js
 /**
  * WordPress dependencies
  */
@@ -56740,7 +61907,7 @@
   }, [isSelected, isSingleSelection, rowItemRef]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/pin-small.js
+;// ./node_modules/@wordpress/icons/build-module/library/pin-small.js
 /**
  * WordPress dependencies
  */
@@ -56757,7 +61924,7 @@
 });
 /* harmony default export */ const pin_small = (pinSmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/lock-small.js
+;// ./node_modules/@wordpress/icons/build-module/library/lock-small.js
 /**
  * WordPress dependencies
  */
@@ -56774,7 +61941,7 @@
 });
 /* harmony default export */ const lock_small = (lockSmall);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/expander.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/expander.js
 /**
  * WordPress dependencies
  */
@@ -56809,7 +61976,7 @@
   );
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-images.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-images.js
 /**
  * WordPress dependencies
  */
@@ -56889,34 +62056,36 @@
   return images;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/block-select-button.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/block-select-button.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+const {
+  Badge: block_select_button_Badge
+} = unlock(external_wp_components_namespaceObject.privateApis);
 function ListViewBlockSelectButton({
   className,
   block: {
@@ -56953,9 +62122,6 @@
     clientId,
     isExpanded
   });
-  const positionLabel = blockInformation?.positionLabel ? (0,external_wp_i18n_namespaceObject.sprintf)(
-  // translators: 1: Position of selected block, e.g. "Sticky" or "Fixed".
-  (0,external_wp_i18n_namespaceObject.__)('Position: %1$s'), blockInformation.positionLabel) : '';
 
   // The `href` attribute triggers the browser's native HTML drag operations.
   // When the link is dragged, the element's outerHTML is set in DataTransfer object as text/html.
@@ -56974,7 +62140,7 @@
       onClick(event);
     }
   }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Button, {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("a", {
     className: dist_clsx('block-editor-list-view-block-select-button', className),
     onClick: onClick,
     onContextMenu: onContextMenu,
@@ -57008,13 +62174,12 @@
         })
       }), blockInformation?.anchor && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
         className: "block-editor-list-view-block-select-button__anchor-wrapper",
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalTruncate, {
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_select_button_Badge, {
           className: "block-editor-list-view-block-select-button__anchor",
-          ellipsizeMode: "auto",
           children: blockInformation.anchor
         })
-      }), positionLabel && isSticky && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
-        text: positionLabel,
+      }), isSticky && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+        className: "block-editor-list-view-block-select-button__sticky",
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
           icon: pin_small
         })
@@ -57039,24 +62204,15 @@
 }
 /* harmony default export */ const block_select_button = ((0,external_wp_element_namespaceObject.forwardRef)(ListViewBlockSelectButton));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/block-contents.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/block-contents.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -57077,27 +62233,10 @@
     clientId
   } = block;
   const {
-    blockMovingClientId,
-    selectedBlockInBlockEditor
-  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      hasBlockMovingClientId,
-      getSelectedBlockClientId
-    } = select(store);
-    return {
-      blockMovingClientId: hasBlockMovingClientId(),
-      selectedBlockInBlockEditor: getSelectedBlockClientId()
-    };
-  }, []);
-  const {
     AdditionalBlockContent,
     insertedBlock,
     setInsertedBlock
   } = useListViewContext();
-  const isBlockMoveTarget = blockMovingClientId && selectedBlockInBlockEditor === clientId;
-  const className = dist_clsx('block-editor-list-view-block-contents', {
-    'is-dropping-before': isBlockMoveTarget
-  });
 
   // Only include all selected blocks if the currently clicked on block
   // is one of the selected blocks. This ensures that if a user attempts
@@ -57119,7 +62258,7 @@
         onDragEnd
       }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_select_button, {
         ref: ref,
-        className: className,
+        className: "block-editor-list-view-block-contents",
         block: block,
         onClick: onClick,
         onToggleExpanded: onToggleExpanded,
@@ -57138,15 +62277,17 @@
 });
 /* harmony default export */ const block_contents = (ListViewBlockContents);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/utils.js
-/**
- * WordPress dependencies
- */
-
-
-const getBlockPositionDescription = (position, siblingCount, level) => (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1: The numerical position of the block. 2: The total number of blocks. 3. The level of nesting for the block. */
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/utils.js
+/**
+ * WordPress dependencies
+ */
+
+
+const getBlockPositionDescription = (position, siblingCount, level) => (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: The numerical position of the block. 2: The total number of blocks. 3. The level of nesting for the block. */
 (0,external_wp_i18n_namespaceObject.__)('Block %1$d of %2$d, Level %3$d.'), position, siblingCount, level);
-const getBlockPropertiesDescription = isLocked => isLocked ? (0,external_wp_i18n_namespaceObject.__)('This block is locked.') : '';
+const getBlockPropertiesDescription = (blockInformation, isLocked) => [blockInformation?.positionLabel ? `${(0,external_wp_i18n_namespaceObject.sprintf)(
+// translators: %s: Position of selected block, e.g. "Sticky" or "Fixed".
+(0,external_wp_i18n_namespaceObject.__)('Position: %s'), blockInformation.positionLabel)}.` : undefined, isLocked ? (0,external_wp_i18n_namespaceObject.__)('This block is locked.') : undefined].filter(Boolean).join(' ');
 
 /**
  * Returns true if the client ID occurs within the block selection or multi-selection,
@@ -57310,32 +62451,30 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/block.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/block.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -57689,7 +62828,7 @@
     return null;
   }
   const blockPositionDescription = getBlockPositionDescription(position, siblingBlockCount, level);
-  const blockPropertiesDescription = getBlockPropertiesDescription(isLocked);
+  const blockPropertiesDescription = getBlockPropertiesDescription(blockInformation, isLocked);
   const hasSiblings = siblingBlockCount > 0;
   const hasRenderedMovers = showBlockMovers && hasSiblings;
   const moverCellClassName = dist_clsx('block-editor-list-view-block__mover-cell', {
@@ -57774,7 +62913,7 @@
           ariaDescribedBy: descriptionId
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AriaReferencedText, {
           id: descriptionId,
-          children: `${blockPositionDescription} ${blockPropertiesDescription}`
+          children: [blockPositionDescription, blockPropertiesDescription].filter(Boolean).join(' ')
         })]
       })
     }), hasRenderedMovers && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
@@ -57841,7 +62980,7 @@
 }
 /* harmony default export */ const list_view_block = ((0,external_wp_element_namespaceObject.memo)(ListViewBlock));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/branch.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/branch.js
 /**
  * WordPress dependencies
  */
@@ -57873,8 +63012,6 @@
  * @return {number} block count
  */
 
-
-
 function countBlocks(block, expandedState, draggedClientIds, isExpandedByDefault) {
   var _expandedState$block$;
   const isDragged = draggedClientIds?.includes(block.clientId);
@@ -57933,6 +63070,7 @@
     expandedState,
     draggedClientIds
   } = useListViewContext();
+  const nextPositionRef = (0,external_wp_element_namespaceObject.useRef)();
   if (!canParentExpand) {
     return null;
   }
@@ -57943,7 +63081,7 @@
   const blockCount = filteredBlocks.length;
   // The appender means an extra row in List View, so add 1 to the row count.
   const rowCount = showAppender ? blockCount + 1 : blockCount;
-  let nextPosition = listPosition;
+  nextPositionRef.current = listPosition;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [filteredBlocks.map((block, index) => {
       var _expandedState$client;
@@ -57952,7 +63090,7 @@
         innerBlocks
       } = block;
       if (index > 0) {
-        nextPosition += countBlocks(filteredBlocks[index - 1], expandedState, draggedClientIds, isExpanded);
+        nextPositionRef.current += countBlocks(filteredBlocks[index - 1], expandedState, draggedClientIds, isExpanded);
       }
       const isDragged = !!draggedClientIds?.includes(clientId);
 
@@ -57974,7 +63112,7 @@
       const {
         itemInView
       } = fixedListWindow;
-      const blockInView = itemInView(nextPosition);
+      const blockInView = itemInView(nextPositionRef.current);
       const position = index + 1;
       const updatedPath = path.length > 0 ? `${path}_${position}` : `${position}`;
       const hasNestedBlocks = !!innerBlocks?.length;
@@ -58009,7 +63147,7 @@
           showBlockMovers: showBlockMovers,
           path: updatedPath,
           isExpanded: isDragged ? false : shouldExpand,
-          listPosition: nextPosition,
+          listPosition: nextPositionRef.current,
           selectedClientIds: selectedClientIds,
           isSyncedBranch: syncedBranch,
           displacement: displacement,
@@ -58026,7 +63164,7 @@
           showBlockMovers: showBlockMovers,
           level: level + 1,
           path: updatedPath,
-          listPosition: nextPosition + 1,
+          listPosition: nextPositionRef.current + 1,
           fixedListWindow: fixedListWindow,
           isBranchSelected: isSelectedBranch,
           selectedClientIds: selectedClientIds,
@@ -58052,24 +63190,23 @@
 }
 /* harmony default export */ const branch = ((0,external_wp_element_namespaceObject.memo)(ListViewBranch));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/drop-indicator.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/drop-indicator.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -58305,7 +63442,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-block-selection.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-block-selection.js
 /**
  * WordPress dependencies
  */
@@ -58409,11 +63546,11 @@
     if (selectionDiff.length === 1) {
       const title = getBlockType(getBlockName(selectionDiff[0]))?.title;
       if (title) {
-        label = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: block name */
+        label = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: block name */
         (0,external_wp_i18n_namespaceObject.__)('%s deselected.'), title);
       }
     } else if (selectionDiff.length > 1) {
-      label = (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: number of deselected blocks */
+      label = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: number of deselected blocks */
       (0,external_wp_i18n_namespaceObject.__)('%s blocks deselected.'), selectionDiff.length);
     }
     if (label) {
@@ -58425,7 +63562,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-block-indexes.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-block-indexes.js
 /**
  * WordPress dependencies
  */
@@ -58449,7 +63586,7 @@
   return blockIndexes;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-client-ids.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-client-ids.js
 /**
  * WordPress dependencies
  */
@@ -58479,7 +63616,7 @@
   }, [blocks, rootClientId]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-collapse-items.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-collapse-items.js
 /**
  * WordPress dependencies
  */
@@ -58520,7 +63657,7 @@
   }, [collapseAll, expand, expandedBlock, getBlockParents]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-drop-zone.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-drop-zone.js
 /**
  * WordPress dependencies
  */
@@ -58959,7 +64096,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-expand-selected-item.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-list-view-expand-selected-item.js
 /**
  * WordPress dependencies
  */
@@ -59009,7 +64146,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-clipboard-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/use-clipboard-handler.js
 /**
  * WordPress dependencies
  */
@@ -59164,26 +64301,25 @@
   }, []);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/list-view/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/list-view/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -59269,18 +64405,15 @@
     getBlock
   } = (0,external_wp_data_namespaceObject.useSelect)(store);
   const {
-    visibleBlockCount,
-    shouldShowInnerBlocks
+    visibleBlockCount
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getGlobalBlockCount,
-      getClientIdsOfDescendants,
-      __unstableGetEditorMode
+      getClientIdsOfDescendants
     } = select(store);
     const draggedBlockCount = draggedClientIds?.length > 0 ? getClientIdsOfDescendants(draggedClientIds).length + 1 : 0;
     return {
-      visibleBlockCount: getGlobalBlockCount() - draggedBlockCount,
-      shouldShowInnerBlocks: __unstableGetEditorMode() !== 'zoom-out'
+      visibleBlockCount: getGlobalBlockCount() - draggedBlockCount
     };
   }, [draggedClientIds]);
   const {
@@ -59328,8 +64461,7 @@
     if (selectedClientIds?.length) {
       focusListItem(selectedClientIds[0], elementRef?.current);
     }
-    // Disable reason: Only focus on the selected item when the list view is mounted.
-    // eslint-disable-next-line react-hooks/exhaustive-deps
+    // Only focus on the selected item when the list view is mounted.
   }, []);
   const expand = (0,external_wp_element_namespaceObject.useCallback)(clientId => {
     if (!clientId) {
@@ -59471,7 +64603,6 @@
           fixedListWindow: fixedListWindow,
           selectedClientIds: selectedClientIds,
           isExpanded: isExpanded,
-          shouldShowInnerBlocks: shouldShowInnerBlocks,
           showAppender: showAppender
         })
       })
@@ -59497,25 +64628,24 @@
   });
 }));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/dropdown.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/dropdown.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -59527,6 +64657,7 @@
   ...props
 }) {
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    __next40pxDefaultSize: true,
     ...props,
     ref: innerRef,
     icon: list_view,
@@ -59575,7 +64706,7 @@
 }
 /* harmony default export */ const dropdown = ((0,external_wp_element_namespaceObject.forwardRef)(BlockNavigationDropdown));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/preview-panel.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-styles/preview-panel.js
 /**
  * WordPress dependencies
  */
@@ -59613,23 +64744,22 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-styles/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-styles/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -59717,7 +64847,7 @@
 }
 /* harmony default export */ const block_styles = (BlockStyles);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/paragraph.js
+;// ./node_modules/@wordpress/icons/build-module/library/paragraph.js
 /**
  * WordPress dependencies
  */
@@ -59732,7 +64862,7 @@
 });
 /* harmony default export */ const library_paragraph = (paragraph);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-1.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-1.js
 /**
  * WordPress dependencies
  */
@@ -59747,7 +64877,7 @@
 });
 /* harmony default export */ const heading_level_1 = (headingLevel1);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-2.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-2.js
 /**
  * WordPress dependencies
  */
@@ -59762,7 +64892,7 @@
 });
 /* harmony default export */ const heading_level_2 = (headingLevel2);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-3.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-3.js
 /**
  * WordPress dependencies
  */
@@ -59777,7 +64907,7 @@
 });
 /* harmony default export */ const heading_level_3 = (headingLevel3);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-4.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-4.js
 /**
  * WordPress dependencies
  */
@@ -59792,7 +64922,7 @@
 });
 /* harmony default export */ const heading_level_4 = (headingLevel4);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-5.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-5.js
 /**
  * WordPress dependencies
  */
@@ -59807,7 +64937,7 @@
 });
 /* harmony default export */ const heading_level_5 = (headingLevel5);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/heading-level-6.js
+;// ./node_modules/@wordpress/icons/build-module/library/heading-level-6.js
 /**
  * WordPress dependencies
  */
@@ -59822,7 +64952,7 @@
 });
 /* harmony default export */ const heading_level_6 = (headingLevel6);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-heading-level-dropdown/heading-level-icon.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-heading-level-dropdown/heading-level-icon.js
 /**
  * WordPress dependencies
  */
@@ -59867,7 +64997,7 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-heading-level-dropdown/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-heading-level-dropdown/index.js
 /**
  * WordPress dependencies
  */
@@ -59909,13 +65039,15 @@
   value,
   onChange
 }) {
+  const validOptions = options.filter(option => option === 0 || HEADING_LEVELS.includes(option)).sort((a, b) => a - b); // Sorts numerically in ascending order;
+
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToolbarDropdownMenu, {
     popoverProps: block_heading_level_dropdown_POPOVER_PROPS,
     icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HeadingLevelIcon, {
       level: value
     }),
     label: (0,external_wp_i18n_namespaceObject.__)('Change level'),
-    controls: options.map(targetLevel => {
+    controls: validOptions.map(targetLevel => {
       const isActive = targetLevel === value;
       return {
         icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(HeadingLevelIcon, {
@@ -59934,7 +65066,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/layout.js
+;// ./node_modules/@wordpress/icons/build-module/library/layout.js
 /**
  * WordPress dependencies
  */
@@ -59949,16 +65081,15 @@
 });
 /* harmony default export */ const library_layout = (layout_layout);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-variation-picker/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-variation-picker/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -60000,6 +65131,7 @@
     }), allowSkip && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-block-variation-picker__skip",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         variant: "link",
         onClick: () => onSelect(),
         children: (0,external_wp_i18n_namespaceObject.__)('Skip')
@@ -60009,24 +65141,23 @@
 }
 /* harmony default export */ const block_variation_picker = (BlockVariationPicker);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/constants.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/constants.js
 const VIEWMODES = {
   carousel: 'carousel',
   grid: 'grid'
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/setup-toolbar.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/setup-toolbar.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const Actions = ({
@@ -60034,6 +65165,7 @@
 }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
   className: "block-editor-block-pattern-setup__actions",
   children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    __next40pxDefaultSize: true,
     variant: "primary",
     onClick: onBlockPatternSelect,
     children: (0,external_wp_i18n_namespaceObject.__)('Choose')
@@ -60047,17 +65179,19 @@
 }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
   className: "block-editor-block-pattern-setup__navigation",
   children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-    icon: chevron_left,
+    size: "compact",
+    icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_right : chevron_left,
     label: (0,external_wp_i18n_namespaceObject.__)('Previous pattern'),
     onClick: handlePrevious,
     disabled: activeSlide === 0,
-    __experimentalIsFocusable: true
+    accessibleWhenDisabled: true
   }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-    icon: chevron_right,
+    size: "compact",
+    icon: (0,external_wp_i18n_namespaceObject.isRTL)() ? chevron_left : chevron_right,
     label: (0,external_wp_i18n_namespaceObject.__)('Next pattern'),
     onClick: handleNext,
     disabled: activeSlide === totalSlides - 1,
-    __experimentalIsFocusable: true
+    accessibleWhenDisabled: true
   })]
 });
 const SetupToolbar = ({
@@ -60073,11 +65207,13 @@
   const displayControls = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "block-editor-block-pattern-setup__display-controls",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      size: "compact",
       icon: stretch_full_width,
       label: (0,external_wp_i18n_namespaceObject.__)('Carousel view'),
       onClick: () => setViewMode(VIEWMODES.carousel),
       isPressed: isCarouselView
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      size: "compact",
       icon: library_grid,
       label: (0,external_wp_i18n_namespaceObject.__)('Grid view'),
       onClick: () => setViewMode(VIEWMODES.grid),
@@ -60098,7 +65234,7 @@
 };
 /* harmony default export */ const setup_toolbar = (SetupToolbar);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/use-patterns-setup.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/use-patterns-setup.js
 /**
  * WordPress dependencies
  */
@@ -60124,34 +65260,26 @@
 }
 /* harmony default export */ const use_patterns_setup = (usePatternsSetup);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-const {
-  CompositeV2: block_pattern_setup_Composite,
-  CompositeItemV2: block_pattern_setup_CompositeItem,
-  useCompositeStoreV2: block_pattern_setup_useCompositeStore
-} = unlock(external_wp_components_namespaceObject.privateApis);
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-pattern-setup/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
 const SetupContent = ({
   viewMode,
   activeSlide,
@@ -60159,7 +65287,6 @@
   onBlockPatternSelect,
   showTitles
 }) => {
-  const compositeStore = block_pattern_setup_useCompositeStore();
   const containerClass = 'block-editor-block-pattern-setup__container';
   if (viewMode === VIEWMODES.carousel) {
     const slideClass = new Map([[activeSlide, 'active-slide'], [activeSlide - 1, 'previous-slide'], [activeSlide + 1, 'next-slide']]);
@@ -60180,8 +65307,7 @@
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: "block-editor-block-pattern-setup__grid",
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_pattern_setup_Composite, {
-      store: compositeStore,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Composite, {
       role: "listbox",
       className: containerClass,
       "aria-label": (0,external_wp_i18n_namespaceObject.__)('Patterns list'),
@@ -60207,7 +65333,7 @@
   const descriptionId = (0,external_wp_compose_namespaceObject.useInstanceId)(block_pattern_setup_BlockPattern, `${baseClassName}__item-description`);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     className: `${baseClassName}__list-item`,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(block_pattern_setup_CompositeItem, {
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Composite.Item, {
       render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         "aria-describedby": description ? descriptionId : undefined,
         "aria-label": pattern.title,
@@ -60307,7 +65433,7 @@
 };
 /* harmony default export */ const block_pattern_setup = (BlockPatternSetup);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-variation-transforms/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-variation-transforms/index.js
 /**
  * WordPress dependencies
  */
@@ -60337,12 +65463,14 @@
       as: "legend",
       children: (0,external_wp_i18n_namespaceObject.__)('Transform to variation')
     }), variations.map(variation => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
+      size: "compact",
       icon: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
         icon: variation.icon,
         showColors: true
       }),
       isPressed: selectedValue === variation.name,
-      label: selectedValue === variation.name ? variation.title : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Name of the block variation */
+      label: selectedValue === variation.name ? variation.title : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Block or block variation name. */
       (0,external_wp_i18n_namespaceObject.__)('Transform to %s'), variation.title),
       onClick: () => onSelectVariation(variation.name),
       "aria-label": variation.title,
@@ -60410,7 +65538,7 @@
           showColors: true
         }),
         value: variation.name,
-        label: selectedValue === variation.name ? variation.title : (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Name of the block variation */
+        label: selectedValue === variation.name ? variation.title : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Block or block variation name. */
         (0,external_wp_i18n_namespaceObject.__)('Transform to %s'), variation.title)
       }, variation.name))
     })
@@ -60424,7 +65552,8 @@
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
   const {
     activeBlockVariation,
-    variations
+    variations,
+    isContentOnly
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getActiveBlockVariation,
@@ -60432,12 +65561,18 @@
     } = select(external_wp_blocks_namespaceObject.store);
     const {
       getBlockName,
-      getBlockAttributes
+      getBlockAttributes,
+      getBlockEditingMode
     } = select(store);
     const name = blockClientId && getBlockName(blockClientId);
+    const {
+      hasContentRoleAttribute
+    } = unlock(select(external_wp_blocks_namespaceObject.store));
+    const isContentBlock = hasContentRoleAttribute(name);
     return {
       activeBlockVariation: getActiveBlockVariation(name, getBlockAttributes(blockClientId)),
-      variations: name && getBlockVariations(name, 'transform')
+      variations: name && getBlockVariations(name, 'transform'),
+      isContentOnly: getBlockEditingMode(blockClientId) === 'contentOnly' && !isContentBlock
     };
   }, [blockClientId]);
   const selectedValue = activeBlockVariation?.name;
@@ -60462,9 +65597,7 @@
       }) => name === variationName).attributes
     });
   };
-
-  // Skip rendering if there are no variations
-  if (!variations?.length) {
+  if (!variations?.length || isContentOnly) {
     return null;
   }
   const baseClass = 'block-editor-block-variation-transforms';
@@ -60482,7 +65615,7 @@
 }
 /* harmony default export */ const block_variation_transforms = (__experimentalBlockVariationTransforms);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/with-color-context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/color-palette/with-color-context.js
 /**
  * WordPress dependencies
  */
@@ -60495,9 +65628,11 @@
 
 /* harmony default export */ const with_color_context = ((0,external_wp_compose_namespaceObject.createHigherOrderComponent)(WrappedComponent => {
   return props => {
-    const [colorsFeature, enableCustomColors] = use_settings_useSettings('color.palette', 'color.custom');
-    const {
-      colors = colorsFeature,
+    // Get the default colors, theme colors, and custom colors
+    const [defaultColors, themeColors, customColors, enableCustomColors, enableDefaultColors] = use_settings_useSettings('color.palette.default', 'color.palette.theme', 'color.palette.custom', 'color.custom', 'color.defaultPalette');
+    const _colors = enableDefaultColors ? [...(themeColors || []), ...(defaultColors || []), ...(customColors || [])] : [...(themeColors || []), ...(customColors || [])];
+    const {
+      colors = _colors,
       disableCustomColors = !enableCustomColors
     } = props;
     const hasColorsToChoose = colors && colors.length > 0 || !disableCustomColors;
@@ -60510,7 +65645,7 @@
   };
 }, 'withColorContext'));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/color-palette/index.js
 /**
  * WordPress dependencies
  */
@@ -60522,7 +65657,7 @@
 
 /* harmony default export */ const color_palette = (with_color_context(external_wp_components_namespaceObject.ColorPalette));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/color-palette/control.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/color-palette/control.js
 /**
  * Internal dependencies
  */
@@ -60542,24 +65677,27 @@
   });
 }
 
-;// CONCATENATED MODULE: external ["wp","date"]
+;// external ["wp","date"]
 const external_wp_date_namespaceObject = window["wp"]["date"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/date-format-picker/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-// So that we can illustrate the different formats in the dropdown properly,
-// show a date that has a day greater than 12 and a month with more than three
-// letters. Here we're using 2022-01-25 which is when WordPress 5.9 was
-// released.
-
-
-const EXAMPLE_DATE = new Date(2022, 0, 25);
+;// ./node_modules/@wordpress/block-editor/build-module/components/date-format-picker/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+// So that we illustrate the different formats in the dropdown properly, show a date that is
+// somewhat recent, has a day greater than 12, and a month with more than three letters.
+
+const exampleDate = new Date();
+exampleDate.setDate(20);
+exampleDate.setMonth(exampleDate.getMonth() - 3);
+if (exampleDate.getMonth() === 4) {
+  // May has three letters, so use March.
+  exampleDate.setMonth(3);
+}
 
 /**
  * The `DateFormatPicker` component renders controls that let the user choose a
@@ -60567,28 +65705,19 @@
  *
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/date-format-picker/README.md
  *
- * @param {Object}                          props
- * @param {string|null}                     props.format        The selected date
- *                                                              format. If
- *                                                              `null`,
- *                                                              _Default_ is
- *                                                              selected.
- * @param {string}                          props.defaultFormat The date format that
- *                                                              will be used if the
- *                                                              user selects
- *                                                              'Default'.
- * @param {( format: string|null ) => void} props.onChange      Called when a
- *                                                              selection is
- *                                                              made. If `null`,
- *                                                              _Default_ is
- *                                                              selected.
+ * @param {Object}      props
+ * @param {string|null} props.format        The selected date format. If `null`, _Default_ is selected.
+ * @param {string}      props.defaultFormat The date format that will be used if the user selects 'Default'.
+ * @param {Function}    props.onChange      Called when a selection is made. If `null`, _Default_ is selected.
  */
 function DateFormatPicker({
   format,
   defaultFormat,
   onChange
 }) {
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("fieldset", {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
+    as: "fieldset",
+    spacing: 4,
     className: "block-editor-date-format-picker",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.VisuallyHidden, {
       as: "legend",
@@ -60596,7 +65725,7 @@
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
       __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Default format'),
-      help: `${(0,external_wp_i18n_namespaceObject.__)('Example:')}  ${(0,external_wp_date_namespaceObject.dateI18n)(defaultFormat, EXAMPLE_DATE)}`,
+      help: `${(0,external_wp_i18n_namespaceObject.__)('Example:')}  ${(0,external_wp_date_namespaceObject.dateI18n)(defaultFormat, exampleDate)}`,
       checked: !format,
       onChange: checked => onChange(checked ? null : defaultFormat)
     }), format && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(NonDefaultControls, {
@@ -60625,20 +65754,25 @@
   (0,external_wp_i18n_namespaceObject._x)('M j, Y g:i A', 'medium date format with time'), /* translators: See https://www.php.net/manual/datetime.format.php */
   (0,external_wp_i18n_namespaceObject._x)('F j, Y', 'long date format'), /* translators: See https://www.php.net/manual/datetime.format.php */
   (0,external_wp_i18n_namespaceObject._x)('M j', 'short date format without the year')])];
-  const suggestedOptions = suggestedFormats.map((suggestedFormat, index) => ({
+  const suggestedOptions = [...suggestedFormats.map((suggestedFormat, index) => ({
     key: `suggested-${index}`,
-    name: (0,external_wp_date_namespaceObject.dateI18n)(suggestedFormat, EXAMPLE_DATE),
+    name: (0,external_wp_date_namespaceObject.dateI18n)(suggestedFormat, exampleDate),
     format: suggestedFormat
-  }));
+  })), {
+    key: 'human-diff',
+    name: (0,external_wp_date_namespaceObject.humanTimeDiff)(exampleDate),
+    format: 'human-diff'
+  }];
   const customOption = {
     key: 'custom',
     name: (0,external_wp_i18n_namespaceObject.__)('Custom'),
     className: 'block-editor-date-format-picker__custom-format-select-control__custom-option',
-    __experimentalHint: (0,external_wp_i18n_namespaceObject.__)('Enter your own date format')
-  };
-  const [isCustom, setIsCustom] = (0,external_wp_element_namespaceObject.useState)(() => !!format && !suggestedFormats.includes(format));
+    hint: (0,external_wp_i18n_namespaceObject.__)('Enter your own date format')
+  };
+  const [isCustom, setIsCustom] = (0,external_wp_element_namespaceObject.useState)(() => !!format && !suggestedOptions.some(option => option.format === format));
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalVStack, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CustomSelectControl, {
+      __next40pxDefaultSize: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Choose a format'),
       options: [...suggestedOptions, customOption],
       value: isCustom ? customOption : (_suggestedOptions$fin = suggestedOptions.find(option => option.format === format)) !== null && _suggestedOptions$fin !== void 0 ? _suggestedOptions$fin : customOption,
@@ -60653,6 +65787,7 @@
         }
       }
     }), isCustom && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
+      __next40pxDefaultSize: true,
       __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Custom format'),
       hideLabelFromVision: true,
@@ -60667,14 +65802,21 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/dropdown.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/dropdown.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
  */
 
 
@@ -60686,8 +65828,6 @@
 // When the `ColorGradientSettingsDropdown` controls are being rendered to a
 // `ToolsPanel` they must be wrapped in a `ToolsPanelItem`.
 
-
-
 const WithToolsPanelItem = ({
   setting,
   children,
@@ -60736,27 +65876,58 @@
 // Renders a color dropdown's toggle as an `Item` if it is within an `ItemGroup`
 // or as a `Button` if it isn't e.g. the controls are being rendered in
 // a `ToolsPanel`.
-const renderToggle = settings => ({
+const dropdown_renderToggle = settings => ({
   onToggle,
   isOpen
 }) => {
   const {
+    clearable,
     colorValue,
+    gradientValue,
+    onColorChange,
+    onGradientChange,
     label
   } = settings;
+  const colorButtonRef = (0,external_wp_element_namespaceObject.useRef)(undefined);
   const toggleProps = {
     onClick: onToggle,
     className: dist_clsx('block-editor-panel-color-gradient-settings__dropdown', {
       'is-open': isOpen
     }),
-    'aria-expanded': isOpen
-  };
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-    ...toggleProps,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dropdown_LabeledColorIndicator, {
-      colorValue: colorValue,
-      label: label
-    })
+    'aria-expanded': isOpen,
+    ref: colorButtonRef
+  };
+  const clearValue = () => {
+    if (colorValue) {
+      onColorChange();
+    } else if (gradientValue) {
+      onGradientChange();
+    }
+  };
+  const value = colorValue !== null && colorValue !== void 0 ? colorValue : gradientValue;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
+      ...toggleProps,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(dropdown_LabeledColorIndicator, {
+        colorValue: value,
+        label: label
+      })
+    }), clearable && value && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
+      label: (0,external_wp_i18n_namespaceObject.__)('Reset'),
+      className: "block-editor-panel-color-gradient-settings__reset",
+      size: "small",
+      icon: library_reset,
+      onClick: () => {
+        clearValue();
+        if (isOpen) {
+          onToggle();
+        }
+        // Return focus to parent button
+        colorButtonRef.current?.focus();
+      }
+    })]
   });
 };
 
@@ -60787,7 +65958,6 @@
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: settings.map((setting, index) => {
-      var _setting$gradientValu;
       const controlProps = {
         clearable: false,
         colorValue: setting.colorValue,
@@ -60805,8 +65975,12 @@
         ...setting
       };
       const toggleSettings = {
-        colorValue: (_setting$gradientValu = setting.gradientValue) !== null && _setting$gradientValu !== void 0 ? _setting$gradientValu : setting.colorValue,
-        label: setting.label
+        clearable: setting.clearable,
+        label: setting.label,
+        colorValue: setting.colorValue,
+        gradientValue: setting.gradientValue,
+        onColorChange: setting.onColorChange,
+        onGradientChange: setting.onGradientChange
       };
       return setting &&
       /*#__PURE__*/
@@ -60818,7 +65992,7 @@
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Dropdown, {
           popoverProps: popoverProps,
           className: "block-editor-tools-panel-color-gradient-settings__dropdown",
-          renderToggle: renderToggle(toggleSettings),
+          renderToggle: dropdown_renderToggle(toggleSettings),
           renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
             paddingSize: "none",
             children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
@@ -60834,24 +66008,22 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/panel-color-gradient-settings.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/colors-gradients/panel-color-gradient-settings.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -60933,7 +66105,7 @@
 };
 /* harmony default export */ const panel_color_gradient_settings = (PanelColorGradientSettings);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/aspect-ratio.js
+;// ./node_modules/@wordpress/icons/build-module/library/aspect-ratio.js
 /**
  * WordPress dependencies
  */
@@ -60948,14 +66120,14 @@
 });
 /* harmony default export */ const aspect_ratio = (aspectRatio);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/constants.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/constants.js
 const MIN_ZOOM = 100;
 const MAX_ZOOM = 300;
 const constants_POPOVER_PROPS = {
   placement: 'bottom-start'
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/use-save-image.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/use-save-image.js
 /**
  * WordPress dependencies
  */
@@ -60967,6 +66139,11 @@
 
 
 
+const messages = {
+  crop: (0,external_wp_i18n_namespaceObject.__)('Image cropped.'),
+  rotate: (0,external_wp_i18n_namespaceObject.__)('Image rotated.'),
+  cropAndRotate: (0,external_wp_i18n_namespaceObject.__)('Image cropped and rotated.')
+};
 function useSaveImage({
   crop,
   rotation,
@@ -60976,7 +66153,8 @@
   onFinishEditing
 }) {
   const {
-    createErrorNotice
+    createErrorNotice,
+    createSuccessNotice
   } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_notices_namespaceObject.store);
   const [isInProgress, setIsInProgress] = (0,external_wp_element_namespaceObject.useState)(false);
   const cancel = (0,external_wp_element_namespaceObject.useCallback)(() => {
@@ -61008,6 +66186,13 @@
         }
       });
     }
+    if (modifiers.length === 0) {
+      // No changes to apply.
+      setIsInProgress(false);
+      onFinishEditing();
+      return;
+    }
+    const modifierType = modifiers.length === 1 ? modifiers[0].type : 'cropAndRotate';
     external_wp_apiFetch_default()({
       path: `/wp/v2/media/${id}/edit`,
       method: 'POST',
@@ -61020,8 +66205,20 @@
         id: response.id,
         url: response.source_url
       });
+      createSuccessNotice(messages[modifierType], {
+        type: 'snackbar',
+        actions: [{
+          label: (0,external_wp_i18n_namespaceObject.__)('Undo'),
+          onClick: () => {
+            onSaveImage({
+              id,
+              url
+            });
+          }
+        }]
+      });
     }).catch(error => {
-      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1. Error message */
+      createErrorNotice((0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Error message. */
       (0,external_wp_i18n_namespaceObject.__)('Could not edit image. %s'), (0,external_wp_dom_namespaceObject.__unstableStripHTML)(error.message)), {
         id: 'image-editing-error',
         type: 'snackbar'
@@ -61030,7 +66227,7 @@
       setIsInProgress(false);
       onFinishEditing();
     });
-  }, [crop, rotation, id, url, onSaveImage, createErrorNotice, onFinishEditing]);
+  }, [crop, rotation, id, url, onSaveImage, createErrorNotice, createSuccessNotice, onFinishEditing]);
   return (0,external_wp_element_namespaceObject.useMemo)(() => ({
     isInProgress,
     apply,
@@ -61038,7 +66235,8 @@
   }), [isInProgress, apply, cancel]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/use-transform-image.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/use-transform-image.js
+/* wp:polyfill */
 /**
  * WordPress dependencies
  */
@@ -61132,7 +66330,7 @@
   }), [editedUrl, crop, position, zoom, rotation, rotateClockwise, aspect, defaultAspect]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/context.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/context.js
 /**
  * WordPress dependencies
  */
@@ -61177,19 +66375,17 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/aspect-ratio-dropdown.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/aspect-ratio-dropdown.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -61267,7 +66463,7 @@
         {
           slug: 'original',
           name: (0,external_wp_i18n_namespaceObject.__)('Original'),
-          aspect: defaultAspect
+          ratio: defaultAspect
         }, ...(showDefaultRatios ? defaultRatios.map(presetRatioAsNumber).filter(({
           ratio
         }) => ratio === 1) : [])]
@@ -61307,7 +66503,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/tslib/tslib.es6.mjs
+;// ./node_modules/tslib/tslib.es6.mjs
 /******************************************************************************
 Copyright (c) Microsoft Corporation.
 
@@ -61322,7 +66518,7 @@
 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 PERFORMANCE OF THIS SOFTWARE.
 ***************************************************************************** */
-/* global Reflect, Promise, SuppressedError, Symbol */
+/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
 
 var extendStatics = function(d, b) {
   extendStatics = Object.setPrototypeOf ||
@@ -61433,8 +66629,8 @@
 }
 
 function __generator(thisArg, body) {
-  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
-  return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
+  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
   function verb(n) { return function (v) { return step([n, v]); }; }
   function step(op) {
       if (f) throw new TypeError("Generator is already executing.");
@@ -61538,8 +66734,9 @@
 function __asyncGenerator(thisArg, _arguments, generator) {
   if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
   var g = generator.apply(thisArg, _arguments || []), i, q = [];
-  return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
-  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
+  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
+  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
+  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
   function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
   function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
   function fulfill(value) { resume("next", value); }
@@ -61572,10 +66769,19 @@
   o["default"] = v;
 };
 
+var ownKeys = function(o) {
+  ownKeys = Object.getOwnPropertyNames || function (o) {
+    var ar = [];
+    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+    return ar;
+  };
+  return ownKeys(o);
+};
+
 function __importStar(mod) {
   if (mod && mod.__esModule) return mod;
   var result = {};
-  if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
   __setModuleDefault(result, mod);
   return result;
 }
@@ -61605,16 +66811,18 @@
 function __addDisposableResource(env, value, async) {
   if (value !== null && value !== void 0) {
     if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
-    var dispose;
+    var dispose, inner;
     if (async) {
-        if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
-        dispose = value[Symbol.asyncDispose];
+      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
+      dispose = value[Symbol.asyncDispose];
     }
     if (dispose === void 0) {
-        if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
-        dispose = value[Symbol.dispose];
+      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
+      dispose = value[Symbol.dispose];
+      if (async) inner = dispose;
     }
     if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
+    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
     env.stack.push({ value: value, dispose: dispose, async: async });
   }
   else if (async) {
@@ -61633,28 +66841,46 @@
     env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
     env.hasError = true;
   }
+  var r, s = 0;
   function next() {
-    while (env.stack.length) {
-      var rec = env.stack.pop();
+    while (r = env.stack.pop()) {
       try {
-        var result = rec.dispose && rec.dispose.call(rec.value);
-        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
+        if (r.dispose) {
+          var result = r.dispose.call(r.value);
+          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+        }
+        else s |= 1;
       }
       catch (e) {
-          fail(e);
-      }
-    }
+        fail(e);
+      }
+    }
+    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
     if (env.hasError) throw env.error;
   }
   return next();
 }
 
+function __rewriteRelativeImportExtension(path, preserveJsx) {
+  if (typeof path === "string" && /^\.\.?\//.test(path)) {
+      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
+          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
+      });
+  }
+  return path;
+}
+
 /* harmony default export */ const tslib_es6 = ({
   __extends,
   __assign,
   __rest,
   __decorate,
   __param,
+  __esDecorate,
+  __runInitializers,
+  __propKey,
+  __setFunctionName,
   __metadata,
   __awaiter,
   __generator,
@@ -61677,12 +66903,13 @@
   __classPrivateFieldIn,
   __addDisposableResource,
   __disposeResources,
+  __rewriteRelativeImportExtension,
 });
 
 // EXTERNAL MODULE: ./node_modules/normalize-wheel/index.js
 var normalize_wheel = __webpack_require__(7520);
 var normalize_wheel_default = /*#__PURE__*/__webpack_require__.n(normalize_wheel);
-;// CONCATENATED MODULE: ./node_modules/react-easy-crop/index.module.js
+;// ./node_modules/react-easy-crop/index.module.js
 
 
 
@@ -62530,24 +67757,22 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/cropper.js
-/**
- * External dependencies
- */
-
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/cropper.js
+/**
+ * External dependencies
+ */
+
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -62610,7 +67835,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/search.js
+;// ./node_modules/@wordpress/icons/build-module/library/search.js
 /**
  * WordPress dependencies
  */
@@ -62625,7 +67850,7 @@
 });
 /* harmony default export */ const library_search = (search);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/zoom-dropdown.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/zoom-dropdown.js
 /**
  * WordPress dependencies
  */
@@ -62658,18 +67883,22 @@
       "aria-expanded": isOpen,
       disabled: isInProgress
     }),
-    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
-      __nextHasNoMarginBottom: true,
-      label: (0,external_wp_i18n_namespaceObject.__)('Zoom'),
-      min: MIN_ZOOM,
-      max: MAX_ZOOM,
-      value: Math.round(zoom),
-      onChange: setZoom
-    })
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/rotate-right.js
+    renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalDropdownContentWrapper, {
+      paddingSize: "medium",
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.RangeControl, {
+        __next40pxDefaultSize: true,
+        __nextHasNoMarginBottom: true,
+        label: (0,external_wp_i18n_namespaceObject.__)('Zoom'),
+        min: MIN_ZOOM,
+        max: MAX_ZOOM,
+        value: Math.round(zoom),
+        onChange: setZoom
+      })
+    })
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/rotate-right.js
 /**
  * WordPress dependencies
  */
@@ -62684,7 +67913,7 @@
 });
 /* harmony default export */ const rotate_right = (rotateRight);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/rotation-button.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/rotation-button.js
 /**
  * WordPress dependencies
  */
@@ -62711,18 +67940,16 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/form-controls.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/form-controls.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function FormControls() {
@@ -62743,16 +67970,15 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-editor/index.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-editor/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -62800,7 +68026,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-size-control/use-dimension-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-size-control/use-dimension-handler.js
 /**
  * WordPress dependencies
  */
@@ -62859,22 +68085,38 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/image-size-control/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/image-size-control/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const IMAGE_SIZE_PRESETS = [25, 50, 75, 100];
 const image_size_control_noop = () => {};
+
+/**
+ * Get scaled width and height for the given scale.
+ *
+ * @param {number} scale       The scale to get the scaled width and height for.
+ * @param {number} imageWidth  The image width.
+ * @param {number} imageHeight The image height.
+ *
+ * @return {Object} The scaled width and height.
+ */
+function getScaledWidthAndHeight(scale, imageWidth, imageHeight) {
+  const scaledWidth = Math.round(imageWidth * (scale / 100));
+  const scaledHeight = Math.round(imageHeight * (scale / 100));
+  return {
+    scaledWidth,
+    scaledHeight
+  };
+}
 function ImageSizeControl({
   imageSizeHelp,
   imageWidth,
@@ -62893,6 +68135,35 @@
     updateDimension,
     updateDimensions
   } = useDimensionHandler(height, width, imageHeight, imageWidth, onChange);
+
+  /**
+   * Updates the dimensions for the given scale.
+   * Handler for toggle group control change.
+   *
+   * @param {number} scale The scale to update the dimensions for.
+   */
+  const handleUpdateDimensions = scale => {
+    if (undefined === scale) {
+      updateDimensions();
+      return;
+    }
+    const {
+      scaledWidth,
+      scaledHeight
+    } = getScaledWidthAndHeight(scale, imageWidth, imageHeight);
+    updateDimensions(scaledHeight, scaledWidth);
+  };
+
+  /**
+   * Add the stored image preset value to toggle group control.
+   */
+  const selectedValue = IMAGE_SIZE_PRESETS.find(scale => {
+    const {
+      scaledWidth,
+      scaledHeight
+    } = getScaledWidthAndHeight(scale, imageWidth, imageHeight);
+    return currentWidth === scaledWidth && currentHeight === scaledHeight;
+  });
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [imageSizeOptions && imageSizeOptions.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
       __nextHasNoMarginBottom: true,
@@ -62922,32 +68193,27 @@
           onChange: value => updateDimension('height', value),
           size: "__unstable-large"
         })]
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
-        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ButtonGroup, {
-          "aria-label": (0,external_wp_i18n_namespaceObject.__)('Image size presets'),
-          children: IMAGE_SIZE_PRESETS.map(scale => {
-            const scaledWidth = Math.round(imageWidth * (scale / 100));
-            const scaledHeight = Math.round(imageHeight * (scale / 100));
-            const isCurrent = currentWidth === scaledWidth && currentHeight === scaledHeight;
-            return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Button, {
-              size: "small",
-              variant: isCurrent ? 'primary' : undefined,
-              isPressed: isCurrent,
-              onClick: () => updateDimensions(scaledHeight, scaledWidth),
-              children: [scale, "%"]
-            }, scale);
-          })
-        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-          size: "small",
-          onClick: () => updateDimensions(),
-          children: (0,external_wp_i18n_namespaceObject.__)('Reset')
-        })]
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+        label: (0,external_wp_i18n_namespaceObject.__)('Image size presets'),
+        hideLabelFromVision: true,
+        onChange: handleUpdateDimensions,
+        value: selectedValue,
+        isBlock: true,
+        __next40pxDefaultSize: true,
+        __nextHasNoMarginBottom: true,
+        children: IMAGE_SIZE_PRESETS.map(scale => {
+          return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControlOption, {
+            value: scale,
+            label: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: Percentage value. */
+            (0,external_wp_i18n_namespaceObject.__)('%d%%'), scale)
+          }, scale);
+        })
       })]
     })]
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-viewer-url.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-viewer-url.js
 /**
  * External dependencies
  */
@@ -62977,23 +68243,22 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-viewer.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-viewer.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function LinkViewer({
@@ -63020,23 +68285,22 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-editor.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-popover/link-editor.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function LinkEditor({
@@ -63050,7 +68314,6 @@
     className: dist_clsx('block-editor-url-popover__link-editor', className),
     ...props,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(url_input, {
-      __nextHasNoMarginBottom: true,
       value: value,
       onChange: onChangeInputValue,
       autocompleteRef: autocompleteRef
@@ -63063,20 +68326,19 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-popover/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -63122,6 +68384,9 @@
   };
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Popover, {
     ref: ref,
+    role: "dialog",
+    "aria-modal": "true",
+    "aria-label": (0,external_wp_i18n_namespaceObject.__)('Edit URL'),
     className: "block-editor-url-popover",
     focusOnMount: focusOnMount,
     placement: computedPlacement,
@@ -63158,27 +68423,25 @@
  */
 /* harmony default export */ const url_popover = (URLPopover);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-placeholder/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/media-placeholder/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -63195,43 +68458,63 @@
 }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(url_popover, {
   anchor: popoverAnchor,
   onClose: onClose,
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("form", {
+  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("form", {
     className: "block-editor-media-placeholder__url-input-form",
     onSubmit: onSubmit,
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("input", {
-      className: "block-editor-media-placeholder__url-input-field",
-      type: "text",
-      "aria-label": (0,external_wp_i18n_namespaceObject.__)('URL'),
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControl, {
+      __next40pxDefaultSize: true,
+      label: (0,external_wp_i18n_namespaceObject.__)('URL'),
+      type: "text" // Use text instead of URL to allow relative paths (e.g., /image/image.jpg)
+      ,
+      hideLabelFromVision: true,
       placeholder: (0,external_wp_i18n_namespaceObject.__)('Paste or type URL'),
       onChange: onChange,
-      value: src
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      className: "block-editor-media-placeholder__url-input-submit-button",
-      icon: keyboard_return,
-      label: (0,external_wp_i18n_namespaceObject.__)('Apply'),
-      type: "submit"
-    })]
+      value: src,
+      suffix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlSuffixWrapper, {
+        variant: "control",
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+          size: "small",
+          icon: keyboard_return,
+          label: (0,external_wp_i18n_namespaceObject.__)('Apply'),
+          type: "submit"
+        })
+      })
+    })
   })
 });
 const URLSelectionUI = ({
-  isURLInputVisible,
   src,
   onChangeSrc,
-  onSubmitSrc,
-  openURLInput,
-  closeURLInput
+  onSelectURL
 }) => {
   // Use internal state instead of a ref to make sure that the component
   // re-renders when the popover's anchor updates.
   const [popoverAnchor, setPopoverAnchor] = (0,external_wp_element_namespaceObject.useState)(null);
+  const [isURLInputVisible, setIsURLInputVisible] = (0,external_wp_element_namespaceObject.useState)(false);
+  const openURLInput = () => {
+    setIsURLInputVisible(true);
+  };
+  const closeURLInput = () => {
+    setIsURLInputVisible(false);
+    popoverAnchor?.focus();
+  };
+  const onSubmitSrc = event => {
+    event.preventDefault();
+    if (src && onSelectURL) {
+      onSelectURL(src);
+      closeURLInput();
+    }
+  };
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "block-editor-media-placeholder__url-input-container",
-    ref: setPopoverAnchor,
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       className: "block-editor-media-placeholder__button",
       onClick: openURLInput,
       isPressed: isURLInputVisible,
       variant: "secondary",
+      "aria-haspopup": "dialog",
+      ref: setPopoverAnchor,
       children: (0,external_wp_i18n_namespaceObject.__)('Insert from URL')
     }), isURLInputVisible && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InsertFromURLPopover, {
       src: src,
@@ -63283,7 +68566,6 @@
     return getSettings().mediaUpload;
   }, []);
   const [src, setSrc] = (0,external_wp_element_namespaceObject.useState)('');
-  const [isURLInputVisible, setIsURLInputVisible] = (0,external_wp_element_namespaceObject.useState)(false);
   (0,external_wp_element_namespaceObject.useEffect)(() => {
     var _value$src;
     setSrc((_value$src = value?.src) !== null && _value$src !== void 0 ? _value$src : '');
@@ -63294,24 +68576,8 @@
     }
     return allowedTypes.every(allowedType => allowedType === 'image' || allowedType.startsWith('image/'));
   };
-  const onChangeSrc = event => {
-    setSrc(event.target.value);
-  };
-  const openURLInput = () => {
-    setIsURLInputVisible(true);
-  };
-  const closeURLInput = () => {
-    setIsURLInputVisible(false);
-  };
-  const onSubmitSrc = event => {
-    event.preventDefault();
-    if (src && onSelectURL) {
-      onSelectURL(src);
-      closeURLInput();
-    }
-  };
   const onFilesUpload = files => {
-    if (!handleUpload) {
+    if (!handleUpload || typeof handleUpload === 'function' && !handleUpload(files)) {
       return onSelect(files);
     }
     onFilesPreUpload(files);
@@ -63366,49 +68632,48 @@
       allowedTypes,
       filesList: files,
       onFileChange: setMedia,
-      onError
-    });
-  };
-  async function handleBlocksDrop(blocks) {
-    if (!blocks || !Array.isArray(blocks)) {
-      return;
-    }
-    function recursivelyFindMediaFromBlocks(_blocks) {
-      return _blocks.flatMap(block => (block.name === 'core/image' || block.name === 'core/audio' || block.name === 'core/video') && block.attributes.url ? [block] : recursivelyFindMediaFromBlocks(block.innerBlocks));
-    }
-    const mediaBlocks = recursivelyFindMediaFromBlocks(blocks);
-    if (!mediaBlocks.length) {
-      return;
-    }
-    const uploadedMediaList = await Promise.all(mediaBlocks.map(block => block.attributes.id ? block.attributes : new Promise((resolve, reject) => {
-      window.fetch(block.attributes.url).then(response => response.blob()).then(blob => mediaUpload({
-        filesList: [blob],
-        additionalData: {
-          title: block.attributes.title,
-          alt_text: block.attributes.alt,
-          caption: block.attributes.caption
-        },
-        onFileChange: ([media]) => {
-          if (media.id) {
-            resolve(media);
-          }
-        },
-        allowedTypes,
-        onError: reject
-      })).catch(() => resolve(block.attributes.url));
-    }))).catch(err => onError(err));
+      onError,
+      multiple
+    });
+  };
+  async function handleBlocksDrop(event) {
+    const {
+      blocks
+    } = parseDropEvent(event);
+    if (!blocks?.length) {
+      return;
+    }
+    const uploadedMediaList = await Promise.all(blocks.map(block => {
+      const blockType = block.name.split('/')[1];
+      if (block.attributes.id) {
+        block.attributes.type = blockType;
+        return block.attributes;
+      }
+      return new Promise((resolve, reject) => {
+        window.fetch(block.attributes.url).then(response => response.blob()).then(blob => mediaUpload({
+          filesList: [blob],
+          additionalData: {
+            title: block.attributes.title,
+            alt_text: block.attributes.alt,
+            caption: block.attributes.caption,
+            type: blockType
+          },
+          onFileChange: ([media]) => {
+            if (media.id) {
+              resolve(media);
+            }
+          },
+          allowedTypes,
+          onError: reject
+        })).catch(() => resolve(block.attributes.url));
+      });
+    })).catch(err => onError(err));
     if (multiple) {
       onSelect(uploadedMediaList);
     } else {
       onSelect(uploadedMediaList[0]);
     }
   }
-  async function onHTMLDrop(HTML) {
-    const blocks = (0,external_wp_blocks_namespaceObject.pasteHandler)({
-      HTML
-    });
-    return await handleBlocksDrop(blocks);
-  }
   const onUpload = event => {
     onFilesUpload(event.target.files);
   };
@@ -63428,13 +68693,13 @@
       const isImage = isOneType && 'image' === firstAllowedType;
       const isVideo = isOneType && 'video' === firstAllowedType;
       if (instructions === undefined && mediaUpload) {
-        instructions = (0,external_wp_i18n_namespaceObject.__)('Upload a media file or pick one from your media library.');
+        instructions = (0,external_wp_i18n_namespaceObject.__)('Drag and drop an image or video, upload, or choose from your library.');
         if (isAudio) {
-          instructions = (0,external_wp_i18n_namespaceObject.__)('Upload an audio file, pick one from your media library, or add one with a URL.');
+          instructions = (0,external_wp_i18n_namespaceObject.__)('Drag and drop an audio file, upload, or choose from your library.');
         } else if (isImage) {
-          instructions = (0,external_wp_i18n_namespaceObject.__)('Upload an image file, pick one from your media library, or add one with a URL.');
+          instructions = (0,external_wp_i18n_namespaceObject.__)('Drag and drop an image, upload, or choose from your library.');
         } else if (isVideo) {
-          instructions = (0,external_wp_i18n_namespaceObject.__)('Upload a video file, pick one from your media library, or add one with a URL.');
+          instructions = (0,external_wp_i18n_namespaceObject.__)('Drag and drop a video, upload, or choose from your library.');
         }
       }
       if (title === undefined) {
@@ -63470,11 +68735,22 @@
     }
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.DropZone, {
       onFilesDrop: onFilesUpload,
-      onHTMLDrop: onHTMLDrop
+      onDrop: handleBlocksDrop,
+      isEligible: dataTransfer => {
+        const prefix = 'wp-block:core/';
+        const types = [];
+        for (const type of dataTransfer.types) {
+          if (type.startsWith(prefix)) {
+            types.push(type.slice(prefix.length));
+          }
+        }
+        return types.every(type => allowedTypes.includes(type)) && (multiple ? true : types.length === 1);
+      }
     });
   };
   const renderCancelLink = () => {
     return onCancel && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      __next40pxDefaultSize: true,
       className: "block-editor-media-placeholder__cancel-button",
       title: (0,external_wp_i18n_namespaceObject.__)('Cancel'),
       variant: "link",
@@ -63484,18 +68760,16 @@
   };
   const renderUrlSelectionUI = () => {
     return onSelectURL && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(URLSelectionUI, {
-      isURLInputVisible: isURLInputVisible,
       src: src,
-      onChangeSrc: onChangeSrc,
-      onSubmitSrc: onSubmitSrc,
-      openURLInput: openURLInput,
-      closeURLInput: closeURLInput
+      onChangeSrc: setSrc,
+      onSelectURL: onSelectURL
     });
   };
   const renderFeaturedImageToggle = () => {
     return onToggleFeaturedImage && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
       className: "block-editor-media-placeholder__url-input-container",
       children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         className: "block-editor-media-placeholder__button",
         onClick: onToggleFeaturedImage,
         variant: "secondary",
@@ -63508,6 +68782,7 @@
       open
     }) => {
       return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
         variant: "secondary",
         onClick: () => {
           open();
@@ -63539,10 +68814,11 @@
           }) => {
             const content = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
               children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+                __next40pxDefaultSize: true,
                 variant: "primary",
                 className: dist_clsx('block-editor-media-placeholder__button', 'block-editor-media-placeholder__upload-button'),
                 onClick: openFileDialog,
-                children: (0,external_wp_i18n_namespaceObject.__)('Upload')
+                children: (0,external_wp_i18n_namespaceObject._x)('Upload', 'verb')
               }), uploadMediaLibraryButton, renderUrlSelectionUI(), renderFeaturedImageToggle(), renderCancelLink()]
             });
             return renderPlaceholder(content);
@@ -63553,12 +68829,18 @@
     if (mediaUpload) {
       const content = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
         children: [renderDropZone(), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FormFileUpload, {
-          variant: "primary",
-          className: dist_clsx('block-editor-media-placeholder__button', 'block-editor-media-placeholder__upload-button'),
+          render: ({
+            openFileDialog
+          }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
+            onClick: openFileDialog,
+            variant: "primary",
+            className: dist_clsx('block-editor-media-placeholder__button', 'block-editor-media-placeholder__upload-button'),
+            children: (0,external_wp_i18n_namespaceObject._x)('Upload', 'verb')
+          }),
           onChange: onUpload,
           accept: accept,
-          multiple: !!multiple,
-          children: (0,external_wp_i18n_namespaceObject.__)('Upload')
+          multiple: !!multiple
         }), uploadMediaLibraryButton, renderUrlSelectionUI(), renderFeaturedImageToggle(), renderCancelLink()]
       });
       return renderPlaceholder(content);
@@ -63581,7 +68863,7 @@
  */
 /* harmony default export */ const media_placeholder = ((0,external_wp_components_namespaceObject.withFilters)('editor.MediaPlaceholder')(MediaPlaceholder));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/panel-color-settings/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/panel-color-settings/index.js
 /**
  * Internal dependencies
  */
@@ -63615,24 +68897,22 @@
 };
 /* harmony default export */ const panel_color_settings = (PanelColorSettings);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-toolbar/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-toolbar/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const format_toolbar_POPOVER_PROPS = {
@@ -63664,7 +68944,7 @@
               className: dist_clsx(toggleProps.className, {
                 'is-pressed': hasActive
               }),
-              describedBy: (0,external_wp_i18n_namespaceObject.__)('Displays more block tools')
+              description: (0,external_wp_i18n_namespaceObject.__)('Displays more block tools')
             },
             controls: orderBy(fills.map(([{
               props
@@ -63678,7 +68958,7 @@
 };
 /* harmony default export */ const format_toolbar = (FormatToolbar);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-toolbar-container.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-toolbar-container.js
 /**
  * WordPress dependencies
  */
@@ -63729,7 +69009,7 @@
 };
 /* harmony default export */ const format_toolbar_container = (FormatToolbarContainer);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/use-mark-persistent.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/use-mark-persistent.js
 /**
  * WordPress dependencies
  */
@@ -63744,7 +69024,7 @@
   html,
   value
 }) {
-  const previousText = (0,external_wp_element_namespaceObject.useRef)();
+  const previousTextRef = (0,external_wp_element_namespaceObject.useRef)();
   const hasActiveFormats = !!value.activeFormats?.length;
   const {
     __unstableMarkLastChangeAsPersistent
@@ -63753,18 +69033,18 @@
   // Must be set synchronously to make sure it applies to the last change.
   (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
     // Ignore mount.
-    if (!previousText.current) {
-      previousText.current = value.text;
+    if (!previousTextRef.current) {
+      previousTextRef.current = value.text;
       return;
     }
 
     // Text input, so don't create an undo level for every character.
     // Create an undo level after 1 second of no input.
-    if (previousText.current !== value.text) {
+    if (previousTextRef.current !== value.text) {
       const timeout = window.setTimeout(() => {
         __unstableMarkLastChangeAsPersistent();
       }, 1000);
-      previousText.current = value.text;
+      previousTextRef.current = value.text;
       return () => {
         window.clearTimeout(timeout);
       };
@@ -63773,7 +69053,7 @@
   }, [html, hasActiveFormats]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/use-format-types.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/use-format-types.js
 /**
  * WordPress dependencies
  */
@@ -63815,7 +69095,7 @@
  * @param {Object}  $0                              Options
  * @param {string}  $0.clientId                     Block client ID.
  * @param {string}  $0.identifier                   Block attribute.
- * @param {boolean} $0.withoutInteractiveFormatting Whether to clean the interactive formattings or not.
+ * @param {boolean} $0.withoutInteractiveFormatting Whether to clean the interactive formatting or not.
  * @param {Array}   $0.allowedFormats               Allowed formats
  */
 function useFormatTypes({
@@ -63899,7 +69179,7 @@
   };
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/before-input-rules.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/before-input-rules.js
 /**
  * WordPress dependencies
  */
@@ -63986,7 +69266,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/prevent-event-discovery.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/prevent-event-discovery.js
 /**
  * WordPress dependencies
  */
@@ -64008,7 +69288,7 @@
   return (0,external_wp_richText_namespaceObject.insert)(value, addText);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/input-rules.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/input-rules.js
 /**
  * WordPress dependencies
  */
@@ -64107,13 +69387,13 @@
       return;
     }
     const value = getValue();
-    const transformed = formatTypes.reduce((accumlator, {
+    const transformed = formatTypes.reduce((accumulator, {
       __unstableInputRule
     }) => {
       if (__unstableInputRule) {
-        accumlator = __unstableInputRule(accumlator);
-      }
-      return accumlator;
+        accumulator = __unstableInputRule(accumulator);
+      }
+      return accumulator;
     }, preventEventDiscovery(value));
     const {
       __unstableMarkLastChangeAsPersistent,
@@ -64136,7 +69416,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/insert-replacement-text.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/insert-replacement-text.js
 /**
  * Internal dependencies
  */
@@ -64164,7 +69444,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.js
 /**
  * WordPress dependencies
  */
@@ -64186,7 +69466,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/shortcuts.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/shortcuts.js
 /* harmony default export */ const shortcuts = (props => element => {
   const {
     keyboardShortcuts
@@ -64202,7 +69482,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/input-events.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/input-events.js
 /* harmony default export */ const input_events = (props => element => {
   const {
     inputEvents
@@ -64218,7 +69498,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/undo-automatic-change.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/undo-automatic-change.js
 /**
  * WordPress dependencies
  */
@@ -64264,7 +69544,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/utils.js
 /**
  * WordPress dependencies
  */
@@ -64321,7 +69601,7 @@
   }));
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/paste-handler.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/paste-handler.js
 /**
  * WordPress dependencies
  */
@@ -64352,8 +69632,8 @@
     } = props.current;
 
     // The event listener is attached to the window, so we need to check if
-    // the target is the element.
-    if (event.target !== element) {
+    // the target is the element or inside the element.
+    if (!element.contains(event.target)) {
       return;
     }
     if (event.defaultPrevented) {
@@ -64444,7 +69724,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/delete.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/delete.js
 /**
  * WordPress dependencies
  */
@@ -64496,7 +69776,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/enter.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/enter.js
 /**
  * WordPress dependencies
  */
@@ -64579,7 +69859,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/firefox-compat.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/firefox-compat.js
 /**
  * Internal dependencies
  */
@@ -64609,7 +69889,7 @@
   };
 });
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/event-listeners/index.js
 /**
  * WordPress dependencies
  */
@@ -64633,7 +69913,9 @@
 const allEventListeners = [before_input_rules, input_rules, insert_replacement_text, remove_browser_shortcuts, shortcuts, input_events, undo_automatic_change, paste_handler, event_listeners_delete, enter, firefox_compat];
 function useEventListeners(props) {
   const propsRef = (0,external_wp_element_namespaceObject.useRef)(props);
-  propsRef.current = props;
+  (0,external_wp_element_namespaceObject.useInsertionEffect)(() => {
+    propsRef.current = props;
+  });
   const refEffects = (0,external_wp_element_namespaceObject.useMemo)(() => allEventListeners.map(refEffect => refEffect(propsRef)), [propsRef]);
   return (0,external_wp_compose_namespaceObject.useRefEffect)(element => {
     if (!props.isSelected) {
@@ -64646,7 +69928,7 @@
   }, [refEffects, props.isSelected]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-edit.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/format-edit.js
 /**
  * WordPress dependencies
  */
@@ -64709,7 +69991,7 @@
   }));
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/content.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/content.js
 /**
  * WordPress dependencies
  */
@@ -64768,7 +70050,7 @@
   }) : value;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/multiline.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/multiline.js
 /**
  * WordPress dependencies
  */
@@ -64888,7 +70170,7 @@
 }
 /* harmony default export */ const multiline = ((0,external_wp_element_namespaceObject.forwardRef)(RichTextMultiline));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/with-deprecations.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/with-deprecations.js
 /**
  * WordPress dependencies
  */
@@ -64928,29 +70210,27 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -65045,6 +70325,7 @@
   } = context;
   const blockBindings = context[blockBindingsKey];
   const blockContext = (0,external_wp_element_namespaceObject.useContext)(block_context);
+  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
   const selector = select => {
     // Avoid subscribing to the block editor store if the block is not
     // selected.
@@ -65076,34 +70357,58 @@
     selectionEnd,
     isSelected
   } = (0,external_wp_data_namespaceObject.useSelect)(selector, [clientId, identifier, instanceId, originalIsSelected, isBlockSelected]);
-  const disableBoundBlocks = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    // Disable Rich Text editing if block bindings specify that.
-    let _disableBoundBlocks = false;
-    if (blockBindings && canBindBlock(blockName)) {
-      const blockTypeAttributes = (0,external_wp_blocks_namespaceObject.getBlockType)(blockName).attributes;
-      const {
-        getBlockBindingsSource
-      } = unlock(select(external_wp_blocks_namespaceObject.store));
-      for (const [attribute, binding] of Object.entries(blockBindings)) {
-        if (blockTypeAttributes?.[attribute]?.source !== 'rich-text') {
-          break;
-        }
-
-        // If the source is not defined, or if its value of `canUserEditValue` is `false`, disable it.
-        const blockBindingsSource = getBlockBindingsSource(binding.source);
-        if (!blockBindingsSource?.canUserEditValue({
-          select,
-          context: blockContext,
-          args: binding.args
-        })) {
-          _disableBoundBlocks = true;
-          break;
-        }
-      }
-    }
-    return _disableBoundBlocks;
-  }, [blockBindings, blockName]);
-  const shouldDisableEditing = readOnly || disableBoundBlocks;
+  const {
+    disableBoundBlock,
+    bindingsPlaceholder,
+    bindingsLabel
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    var _fieldsList$relatedBi;
+    if (!blockBindings?.[identifier] || !canBindBlock(blockName)) {
+      return {};
+    }
+    const relatedBinding = blockBindings[identifier];
+    const blockBindingsSource = (0,external_wp_blocks_namespaceObject.getBlockBindingsSource)(relatedBinding.source);
+    const blockBindingsContext = {};
+    if (blockBindingsSource?.usesContext?.length) {
+      for (const key of blockBindingsSource.usesContext) {
+        blockBindingsContext[key] = blockContext[key];
+      }
+    }
+    const _disableBoundBlock = !blockBindingsSource?.canUserEditValue?.({
+      select,
+      context: blockBindingsContext,
+      args: relatedBinding.args
+    });
+
+    // Don't modify placeholders if value is not empty.
+    if (adjustedValue.length > 0) {
+      return {
+        disableBoundBlock: _disableBoundBlock,
+        // Null values will make them fall back to the default behavior.
+        bindingsPlaceholder: null,
+        bindingsLabel: null
+      };
+    }
+    const {
+      getBlockAttributes
+    } = select(store);
+    const blockAttributes = getBlockAttributes(clientId);
+    const fieldsList = blockBindingsSource?.getFieldsList?.({
+      select,
+      context: blockBindingsContext
+    });
+    const bindingKey = (_fieldsList$relatedBi = fieldsList?.[relatedBinding?.args?.key]?.label) !== null && _fieldsList$relatedBi !== void 0 ? _fieldsList$relatedBi : blockBindingsSource?.label;
+    const _bindingsPlaceholder = _disableBoundBlock ? bindingKey : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: connected field label or source label */
+    (0,external_wp_i18n_namespaceObject.__)('Add %s'), bindingKey);
+    const _bindingsLabel = _disableBoundBlock ? relatedBinding?.args?.key || blockBindingsSource?.label : (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: source label or key */
+    (0,external_wp_i18n_namespaceObject.__)('Empty %s; start writing to edit its value'), relatedBinding?.args?.key || blockBindingsSource?.label);
+    return {
+      disableBoundBlock: _disableBoundBlock,
+      bindingsPlaceholder: blockAttributes?.placeholder || _bindingsPlaceholder,
+      bindingsLabel: _bindingsLabel
+    };
+  }, [blockBindings, identifier, blockName, adjustedValue, clientId, blockContext]);
+  const shouldDisableEditing = readOnly || disableBoundBlock;
   const {
     getSelectionStart,
     getSelectionEnd,
@@ -65194,7 +70499,7 @@
     selectionStart,
     selectionEnd,
     onSelectionChange,
-    placeholder,
+    placeholder: bindingsPlaceholder || placeholder,
     __unstableIsSelected: isSelected,
     __unstableDisableFormats: disableFormats,
     preserveWhiteSpace,
@@ -65218,7 +70523,6 @@
   function onFocus() {
     anchorRef.current?.focus();
   }
-  const registry = (0,external_wp_data_namespaceObject.useRegistry)();
   const TagName = tagName;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [isSelected && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(keyboardShortcutContext.Provider, {
@@ -65248,9 +70552,14 @@
     , {
       role: "textbox",
       "aria-multiline": !disableLineBreaks,
-      "aria-label": placeholder,
       "aria-readonly": shouldDisableEditing,
       ...props,
+      // Unset draggable (coming from block props) for contentEditable
+      // elements because it will interfere with multi block selection
+      // when the contentEditable and draggable elements are the same
+      // element.
+      draggable: undefined,
+      "aria-label": bindingsLabel || props['aria-label'] || placeholder,
       ...autocompleteProps,
       ref: (0,external_wp_compose_namespaceObject.useMergeRefs)([
       // Rich text ref must be first because its focus listener
@@ -65365,7 +70674,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/editable-text/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/editable-text/index.js
 /**
  * WordPress dependencies
  */
@@ -65399,25 +70708,59 @@
  */
 /* harmony default export */ const editable_text = (EditableText);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/plain-text/index.js
-/**
- * External dependencies
- */
-
-
-
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-/**
+;// ./node_modules/@wordpress/block-editor/build-module/components/plain-text/index.js
+/**
+ * External dependencies
+ */
+
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Render an auto-growing textarea allow users to fill any textual content.
+ *
  * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/plain-text/README.md
+ *
+ * @example
+ * ```jsx
+ * import { registerBlockType } from '@wordpress/blocks';
+ * import { PlainText } from '@wordpress/block-editor';
+ *
+ * registerBlockType( 'my-plugin/example-block', {
+ *   // ...
+ *
+ *   attributes: {
+ *     content: {
+ *       type: 'string',
+ *     },
+ *   },
+ *
+ *   edit( { className, attributes, setAttributes } ) {
+ *     return (
+ *       <PlainText
+ *         className={ className }
+ *         value={ attributes.content }
+ *         onChange={ ( content ) => setAttributes( { content } ) }
+ *       />
+ *     );
+ *   },
+ * } );
+ * ````
+ *
+ * @param {Object}   props          Component props.
+ * @param {string}   props.value    String value of the textarea.
+ * @param {Function} props.onChange Function called when the text value changes.
+ * @param {Object}   [props.ref]    The component forwards the `ref` property to the `TextareaAutosize` component.
+ * @return {Element} Plain text component
  */
 
 const PlainText = (0,external_wp_element_namespaceObject.forwardRef)(({
@@ -65444,12 +70787,10 @@
 });
 /* harmony default export */ const plain_text = (PlainText);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/responsive-block-control/label.js
-/**
- * WordPress dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/responsive-block-control/label.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -65460,7 +70801,7 @@
   desc
 }) {
   const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(ResponsiveBlockControlLabel);
-  const accessibleLabel = desc || (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: 1: property name. 2: viewport name. */
+  const accessibleLabel = desc || (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: 1: property name. 2: viewport name. */
   (0,external_wp_i18n_namespaceObject._x)('Controls the %1$s property for %2$s viewports.', 'Text labelling a interface as controlling a given layout property (eg: margin) for a given screen size.'), property, viewport.label);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
@@ -65474,23 +70815,22 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/responsive-block-control/index.js
-/**
- * External dependencies
- */
-
-
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/responsive-block-control/index.js
+/**
+ * External dependencies
+ */
+
+
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function ResponsiveBlockControl(props) {
@@ -65520,16 +70860,16 @@
   if (!title || !property || !renderDefaultControl) {
     return null;
   }
-  const toggleControlLabel = toggleLabel || (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %s: Property value for the control (eg: margin, padding, etc.). */
+  const toggleControlLabel = toggleLabel || (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %s: Property value for the control (eg: margin, padding, etc.). */
   (0,external_wp_i18n_namespaceObject.__)('Use the same %s on all screen sizes.'), property);
-  const toggleHelpText = (0,external_wp_i18n_namespaceObject.__)('Toggle between using the same value for all screen sizes or using a unique value per screen size.');
-  const defaultControl = renderDefaultControl( /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResponsiveBlockControlLabel, {
+  const toggleHelpText = (0,external_wp_i18n_namespaceObject.__)('Choose whether to use the same value for all screen sizes or a unique value for each screen size.');
+  const defaultControl = renderDefaultControl(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResponsiveBlockControlLabel, {
     property: property,
     viewport: defaultLabel
   }), defaultLabel);
   const defaultResponsiveControls = () => {
     return viewports.map(viewport => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_element_namespaceObject.Fragment, {
-      children: renderDefaultControl( /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResponsiveBlockControlLabel, {
+      children: renderDefaultControl(/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ResponsiveBlockControlLabel, {
         property: property,
         viewport: viewport
       }), viewport)
@@ -65560,7 +70900,7 @@
 }
 /* harmony default export */ const responsive_block_control = (ResponsiveBlockControl);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/shortcut.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/shortcut.js
 /**
  * WordPress dependencies
  */
@@ -65594,7 +70934,7 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/toolbar-button.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/toolbar-button.js
 /**
  * WordPress dependencies
  */
@@ -65624,7 +70964,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/input-event.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/input-event.js
 /**
  * WordPress dependencies
  */
@@ -65656,21 +70996,19 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/tool-selector/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/tool-selector/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const selectIcon = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SVG, {
@@ -65692,9 +71030,10 @@
       isOpen,
       onToggle
     }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+      size: "compact",
       ...props,
       ref: ref,
-      icon: mode === 'navigation' ? selectIcon : edit,
+      icon: mode === 'navigation' ? edit : selectIcon,
       "aria-expanded": isOpen,
       "aria-haspopup": "true",
       onClick: onToggle
@@ -65706,35 +71045,42 @@
     },
     renderContent: () => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.NavigableMenu, {
+        className: "block-editor-tool-selector__menu",
         role: "menu",
         "aria-label": (0,external_wp_i18n_namespaceObject.__)('Tools'),
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.MenuItemsChoice, {
           value: mode === 'navigation' ? 'navigation' : 'edit',
-          onSelect: __unstableSetEditorMode,
+          onSelect: newMode => {
+            __unstableSetEditorMode(newMode);
+          },
           choices: [{
-            value: 'edit',
+            value: 'navigation',
             label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
               children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(build_module_icon, {
                 icon: edit
-              }), (0,external_wp_i18n_namespaceObject.__)('Edit')]
-            })
+              }), (0,external_wp_i18n_namespaceObject.__)('Write')]
+            }),
+            info: (0,external_wp_i18n_namespaceObject.__)('Focus on content.'),
+            'aria-label': (0,external_wp_i18n_namespaceObject.__)('Write')
           }, {
-            value: 'navigation',
+            value: 'edit',
             label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-              children: [selectIcon, (0,external_wp_i18n_namespaceObject.__)('Select')]
-            })
+              children: [selectIcon, (0,external_wp_i18n_namespaceObject.__)('Design')]
+            }),
+            info: (0,external_wp_i18n_namespaceObject.__)('Edit layout and styles.'),
+            'aria-label': (0,external_wp_i18n_namespaceObject.__)('Design')
           }]
         })
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
         className: "block-editor-tool-selector__help",
-        children: (0,external_wp_i18n_namespaceObject.__)('Tools provide different interactions for selecting, navigating, and editing blocks. Toggle between select and edit by pressing Escape and Enter.')
+        children: (0,external_wp_i18n_namespaceObject.__)('Tools provide different sets of interactions for blocks. Choose between simplified content tools (Write) and advanced visual editing tools (Design).')
       })]
     })
   });
 }
 /* harmony default export */ const tool_selector = ((0,external_wp_element_namespaceObject.forwardRef)(ToolSelector));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/unit-control/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/unit-control/index.js
 /**
  * WordPress dependencies
  */
@@ -65760,7 +71106,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/arrow-left.js
+;// ./node_modules/@wordpress/icons/build-module/library/arrow-left.js
 /**
  * WordPress dependencies
  */
@@ -65775,19 +71121,18 @@
 });
 /* harmony default export */ const arrow_left = (arrowLeft);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-input/button.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-input/button.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 class URLInputButton extends external_wp_element_namespaceObject.Component {
@@ -65820,6 +71165,7 @@
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
       className: "block-editor-url-input__button",
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        size: "compact",
         icon: library_link,
         label: buttonLabel,
         onClick: this.toggle,
@@ -65831,18 +71177,23 @@
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
           className: "block-editor-url-input__button-modal-line",
           children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+            __next40pxDefaultSize: true,
             className: "block-editor-url-input__back",
             icon: arrow_left,
             label: (0,external_wp_i18n_namespaceObject.__)('Close'),
             onClick: this.toggle
           }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(url_input, {
-            __nextHasNoMarginBottom: true,
             value: url || '',
-            onChange: onChange
-          }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            icon: keyboard_return,
-            label: (0,external_wp_i18n_namespaceObject.__)('Submit'),
-            type: "submit"
+            onChange: onChange,
+            suffix: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalInputControlSuffixWrapper, {
+              variant: "control",
+              children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+                size: "small",
+                icon: keyboard_return,
+                label: (0,external_wp_i18n_namespaceObject.__)('Submit'),
+                type: "submit"
+              })
+            })
           })]
         })
       })]
@@ -65855,7 +71206,7 @@
  */
 /* harmony default export */ const url_input_button = (URLInputButton);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/image.js
+;// ./node_modules/@wordpress/icons/build-module/library/image.js
 /**
  * WordPress dependencies
  */
@@ -65870,21 +71221,19 @@
 });
 /* harmony default export */ const library_image = (image_image);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/url-popover/image-url-input-ui.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/url-popover/image-url-input-ui.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 const LINK_DESTINATION_NONE = 'none';
@@ -66055,11 +71404,13 @@
       onChange: onSetNewTab,
       checked: linkTarget === '_blank'
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
+      __next40pxDefaultSize: true,
       __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Link rel'),
       value: rel !== null && rel !== void 0 ? rel : '',
       onChange: onSetLinkRel
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.TextControl, {
+      __next40pxDefaultSize: true,
       __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Link CSS class'),
       value: linkClass || '',
@@ -66079,16 +71430,16 @@
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
           className: "text",
           children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
-            children: (0,external_wp_i18n_namespaceObject.__)('Expand on click')
+            children: (0,external_wp_i18n_namespaceObject.__)('Enlarge on click')
           }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
             className: "description",
             children: (0,external_wp_i18n_namespaceObject.__)('Scales the image with a lightbox effect')
           })]
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
           icon: link_off,
-          label: (0,external_wp_i18n_namespaceObject.__)('Disable expand on click'),
+          label: (0,external_wp_i18n_namespaceObject.__)('Disable enlarge on click'),
           onClick: () => {
-            onSetLightbox(false);
+            onSetLightbox?.(false);
           },
           size: "compact"
         })]
@@ -66113,7 +71464,7 @@
           label: (0,external_wp_i18n_namespaceObject.__)('Remove link'),
           onClick: () => {
             onLinkRemove();
-            resetLightbox();
+            resetLightbox?.();
           },
           size: "compact"
         })]
@@ -66156,10 +71507,10 @@
               linkDestination: LINK_DESTINATION_NONE,
               href: ''
             });
-            onSetLightbox(true);
+            onSetLightbox?.(true);
             stopEditLink();
           },
-          children: (0,external_wp_i18n_namespaceObject.__)('Expand on click')
+          children: (0,external_wp_i18n_namespaceObject.__)('Enlarge on click')
         }, "expand-on-click")]
       }),
       offset: 13,
@@ -66169,7 +71520,7 @@
 };
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/preview-options/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/preview-options/index.js
 /**
  * WordPress dependencies
  */
@@ -66181,7 +71532,7 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/use-resize-canvas/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/use-resize-canvas/index.js
 /**
  * WordPress dependencies
  */
@@ -66220,10 +71571,9 @@
     }
     return deviceWidth < actualWidth ? deviceWidth : actualWidth;
   };
-  const marginValue = () => window.innerHeight < 800 ? 36 : 72;
   const contentInlineStyles = device => {
     const height = device === 'Mobile' ? '768px' : '1024px';
-    const marginVertical = marginValue() + 'px';
+    const marginVertical = '40px';
     const marginHorizontal = 'auto';
     switch (device) {
       case 'Tablet':
@@ -66237,8 +71587,6 @@
           marginLeft: marginHorizontal,
           marginRight: marginHorizontal,
           height,
-          borderRadius: '2px 2px 2px 2px',
-          border: '1px solid #ddd',
           overflowY: 'auto'
         };
       default:
@@ -66251,10 +71599,11 @@
   return contentInlineStyles(deviceType);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/skip-to-selected-block/index.js
-/**
- * WordPress dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/skip-to-selected-block/index.js
+/**
+ * WordPress dependencies
+ */
+
 
 
 
@@ -66271,11 +71620,13 @@
 
 function SkipToSelectedBlock() {
   const selectedBlockClientId = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getBlockSelectionStart(), []);
-  const ref = useBlockRef(selectedBlockClientId);
+  const ref = (0,external_wp_element_namespaceObject.useRef)();
+  useBlockElementRef(selectedBlockClientId, ref);
   const onClick = () => {
-    ref.current.focus();
+    ref.current?.focus();
   };
   return selectedBlockClientId ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    __next40pxDefaultSize: true,
     variant: "secondary",
     className: "block-editor-skip-to-selected-block",
     onClick: onClick,
@@ -66283,58 +71634,39 @@
   }) : null;
 }
 
-;// CONCATENATED MODULE: external ["wp","wordcount"]
-const external_wp_wordcount_namespaceObject = window["wp"]["wordcount"];
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/multi-selection-inspector/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-function MultiSelectionInspector({
-  blocks
-}) {
-  const words = (0,external_wp_wordcount_namespaceObject.count)((0,external_wp_blocks_namespaceObject.serialize)(blocks), 'words');
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+;// ./node_modules/@wordpress/block-editor/build-module/components/multi-selection-inspector/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+function MultiSelectionInspector() {
+  const selectedBlockCount = (0,external_wp_data_namespaceObject.useSelect)(select => select(store).getSelectedBlockCount(), []);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.__experimentalHStack, {
+    justify: "flex-start",
+    spacing: 2,
     className: "block-editor-multi-selection-inspector__card",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
       icon: library_copy,
       showColors: true
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-      className: "block-editor-multi-selection-inspector__card-content",
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-        className: "block-editor-multi-selection-inspector__card-title",
-        children: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of blocks */
-        (0,external_wp_i18n_namespaceObject._n)('%d Block', '%d Blocks', blocks.length), blocks.length)
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-        className: "block-editor-multi-selection-inspector__card-description",
-        children: (0,external_wp_i18n_namespaceObject.sprintf)( /* translators: %d: number of words */
-        (0,external_wp_i18n_namespaceObject._n)('%d word selected.', '%d words selected.', words), words)
-      })]
-    })]
-  });
-}
-/* harmony default export */ const multi_selection_inspector = ((0,external_wp_data_namespaceObject.withSelect)(select => {
-  const {
-    getMultiSelectedBlocks
-  } = select(store);
-  return {
-    blocks: getMultiSelectedBlocks()
-  };
-})(MultiSelectionInspector));
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/cog.js
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+      className: "block-editor-multi-selection-inspector__card-title",
+      children: (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of blocks */
+      (0,external_wp_i18n_namespaceObject._n)('%d Block', '%d Blocks', selectedBlockCount), selectedBlockCount)
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/icons/build-module/library/cog.js
 /**
  * WordPress dependencies
  */
@@ -66351,7 +71683,7 @@
 });
 /* harmony default export */ const library_cog = (cog);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/styles.js
+;// ./node_modules/@wordpress/icons/build-module/library/styles.js
 /**
  * WordPress dependencies
  */
@@ -66361,12 +71693,14 @@
   viewBox: "0 0 24 24",
   xmlns: "http://www.w3.org/2000/svg",
   children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M12 4c-4.4 0-8 3.6-8 8v.1c0 4.1 3.2 7.5 7.2 7.9h.8c4.4 0 8-3.6 8-8s-3.6-8-8-8zm0 15V5c3.9 0 7 3.1 7 7s-3.1 7-7 7z"
+    fillRule: "evenodd",
+    clipRule: "evenodd",
+    d: "M20 12a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-1.5 0a6.5 6.5 0 0 1-6.5 6.5v-13a6.5 6.5 0 0 1 6.5 6.5Z"
   })
 });
 /* harmony default export */ const library_styles = (styles);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/utils.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/utils.js
 /**
  * WordPress dependencies
  */
@@ -66376,25 +71710,22 @@
   name: 'settings',
   title: (0,external_wp_i18n_namespaceObject.__)('Settings'),
   value: 'settings',
-  icon: library_cog,
-  className: 'block-editor-block-inspector__tab-item'
+  icon: library_cog
 };
 const TAB_STYLES = {
   name: 'styles',
   title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
   value: 'styles',
-  icon: library_styles,
-  className: 'block-editor-block-inspector__tab-item'
+  icon: library_styles
 };
 const TAB_LIST_VIEW = {
   name: 'list',
   title: (0,external_wp_i18n_namespaceObject.__)('List View'),
   value: 'list-view',
-  icon: list_view,
-  className: 'block-editor-block-inspector__tab-item'
-};
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/advanced-controls-panel.js
+  icon: list_view
+};
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/advanced-controls-panel.js
 /**
  * WordPress dependencies
  */
@@ -66423,58 +71754,87 @@
 };
 /* harmony default export */ const advanced_controls_panel = (AdvancedControls);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/position-controls-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/position-controls-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
 
 
 
 
 const PositionControlsPanel = () => {
-  const [initialOpen, setInitialOpen] = (0,external_wp_element_namespaceObject.useState)();
-
-  // Determine whether the panel should be expanded.
-  const {
-    multiSelectedBlocks
+  const {
+    selectedClientIds,
+    selectedBlocks,
+    hasPositionAttribute
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getBlocksByClientId,
       getSelectedBlockClientIds
     } = select(store);
-    const clientIds = getSelectedBlockClientIds();
-    return {
-      multiSelectedBlocks: getBlocksByClientId(clientIds)
+    const selectedBlockClientIds = getSelectedBlockClientIds();
+    const _selectedBlocks = getBlocksByClientId(selectedBlockClientIds);
+    return {
+      selectedClientIds: selectedBlockClientIds,
+      selectedBlocks: _selectedBlocks,
+      hasPositionAttribute: _selectedBlocks?.some(({
+        attributes
+      }) => !!attributes?.style?.position?.type)
     };
   }, []);
-  (0,external_wp_element_namespaceObject.useLayoutEffect)(() => {
-    // If any selected block has a position set, open the panel by default.
-    // The first block's value will still be used within the control though.
-    if (initialOpen === undefined) {
-      setInitialOpen(multiSelectedBlocks.some(({
-        attributes
-      }) => !!attributes?.style?.position?.type));
-    }
-  }, [initialOpen, multiSelectedBlocks, setInitialOpen]);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
+  const {
+    updateBlockAttributes
+  } = (0,external_wp_data_namespaceObject.useDispatch)(store);
+  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
+  function resetPosition() {
+    if (!selectedClientIds?.length || !selectedBlocks?.length) {
+      return;
+    }
+    const attributesByClientId = Object.fromEntries(selectedBlocks?.map(({
+      clientId,
+      attributes
+    }) => [clientId, {
+      style: utils_cleanEmptyObject({
+        ...attributes?.style,
+        position: {
+          ...attributes?.style?.position,
+          type: undefined,
+          top: undefined,
+          right: undefined,
+          bottom: undefined,
+          left: undefined
+        }
+      })
+    }]));
+    updateBlockAttributes(selectedClientIds, attributesByClientId, true);
+  }
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanel, {
     className: "block-editor-block-inspector__position",
-    title: (0,external_wp_i18n_namespaceObject.__)('Position'),
-    initialOpen: initialOpen !== null && initialOpen !== void 0 ? initialOpen : false,
-    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-      group: "position"
+    label: (0,external_wp_i18n_namespaceObject.__)('Position'),
+    resetAll: resetPosition,
+    dropdownMenuProps: dropdownMenuProps,
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
+      isShownByDefault: hasPositionAttribute,
+      label: (0,external_wp_i18n_namespaceObject.__)('Position'),
+      hasValue: () => hasPositionAttribute,
+      onDeselect: resetPosition,
+      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+        group: "position"
+      })
     })
   });
 };
 const PositionControls = () => {
-  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(inspector_controls_groups.position.Slot.__unstableName);
+  const fills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(inspector_controls_groups.position.name);
   const hasFills = Boolean(fills && fills.length);
   if (!hasFills) {
     return null;
@@ -66483,76 +71843,10 @@
 };
 /* harmony default export */ const position_controls_panel = (PositionControls);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/close.js
-/**
- * WordPress dependencies
- */
-
-
-const close_close = /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.SVG, {
-  xmlns: "http://www.w3.org/2000/svg",
-  viewBox: "0 0 24 24",
-  children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_primitives_namespaceObject.Path, {
-    d: "M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"
-  })
-});
-/* harmony default export */ const library_close = (close_close);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/settings-tab-hint.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-const PREFERENCE_NAME = 'isInspectorControlsTabsHintVisible';
-function InspectorControlsTabsHint() {
-  const isInspectorControlsTabsHintVisible = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    var _select$get;
-    return (_select$get = select(external_wp_preferences_namespaceObject.store).get('core', PREFERENCE_NAME)) !== null && _select$get !== void 0 ? _select$get : true;
-  }, []);
-  const ref = (0,external_wp_element_namespaceObject.useRef)();
-  const {
-    set: setPreference
-  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
-  if (!isInspectorControlsTabsHintVisible) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-    ref: ref,
-    className: "block-editor-inspector-controls-tabs__hint",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "block-editor-inspector-controls-tabs__hint-content",
-      children: (0,external_wp_i18n_namespaceObject.__)("Looking for other block settings? They've moved to the styles tab.")
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      className: "block-editor-inspector-controls-tabs__hint-dismiss",
-      icon: library_close,
-      iconSize: "16",
-      label: (0,external_wp_i18n_namespaceObject.__)('Dismiss hint'),
-      onClick: () => {
-        // Retain focus when dismissing the element.
-        const previousElement = external_wp_dom_namespaceObject.focus.tabbable.findPrevious(ref.current);
-        previousElement?.focus();
-        setPreference('core', PREFERENCE_NAME, false);
-      },
-      showTooltip: false
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/settings-tab.js
-/**
- * Internal dependencies
- */
-
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/settings-tab.js
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -66560,24 +71854,24 @@
 const SettingsTab = ({
   showAdvancedControls = false
 }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(position_controls_panel, {}), showAdvancedControls && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+  children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(position_controls_panel, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+    group: "bindings"
+  }), showAdvancedControls && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(advanced_controls_panel, {})
-  }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorControlsTabsHint, {})]
+  })]
 });
 /* harmony default export */ const settings_tab = (SettingsTab);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/styles-tab.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/styles-tab.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -66623,7 +71917,7 @@
 };
 /* harmony default export */ const styles_tab = (StylesTab);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/use-is-list-view-tab-disabled.js
 // List view tab restricts the blocks that may render to it via the
 // allowlist below.
 const allowlist = ['core/navigation'];
@@ -66632,18 +71926,17 @@
 };
 /* harmony default export */ const use_is_list_view_tab_disabled = (useIsListViewTabDisabled);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -66675,13 +71968,17 @@
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(inspector_controls_tabs_Tabs, {
       defaultTabId: initialTabName,
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls_tabs_Tabs.TabList, {
-        children: tabs.map(tab => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls_tabs_Tabs.Tab, {
+        children: tabs.map(tab => showIconLabels ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls_tabs_Tabs.Tab, {
           tabId: tab.name,
-          render: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-            icon: !showIconLabels ? tab.icon : undefined,
-            label: !showIconLabels ? tab.title : undefined,
-            className: tab.className,
-            children: showIconLabels && tab.title
+          children: tab.title
+        }, tab.name) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Tooltip, {
+          text: tab.title,
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls_tabs_Tabs.Tab, {
+            tabId: tab.name,
+            "aria-label": tab.title,
+            children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Icon, {
+              icon: tab.icon
+            })
           })
         }, tab.name))
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls_tabs_Tabs.TabPanel, {
@@ -66709,7 +72006,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js
 /**
  * WordPress dependencies
  */
@@ -66740,6 +72037,7 @@
 function useInspectorControlsTabs(blockName) {
   const tabs = [];
   const {
+    bindings: bindingsGroup,
     border: borderGroup,
     color: colorGroup,
     default: defaultGroup,
@@ -66753,20 +72051,20 @@
 
   // List View Tab: If there are any fills for the list group add that tab.
   const listViewDisabled = use_is_list_view_tab_disabled(blockName);
-  const listFills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(listGroup.Slot.__unstableName);
+  const listFills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(listGroup.name);
   const hasListFills = !listViewDisabled && !!listFills && listFills.length;
 
   // Styles Tab: Add this tab if there are any fills for block supports
   // e.g. border, color, spacing, typography, etc.
-  const styleFills = [...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(borderGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(colorGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(dimensionsGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(stylesGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(typographyGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(effectsGroup.Slot.__unstableName) || [])];
+  const styleFills = [...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(borderGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(colorGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(dimensionsGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(stylesGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(typographyGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(effectsGroup.name) || [])];
   const hasStyleFills = styleFills.length;
 
   // Settings Tab: If we don't have multiple tabs to display
   // (i.e. both list view and styles), check only the default and position
   // InspectorControls slots. If we have multiple tabs, we'll need to check
   // the advanced controls slot as well to ensure they are rendered.
-  const advancedFills = (0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(InspectorAdvancedControls.slotName) || [];
-  const settingsFills = [...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(defaultGroup.Slot.__unstableName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(positionGroup.Slot.__unstableName) || []), ...(hasListFills && hasStyleFills > 1 ? advancedFills : [])];
+  const advancedFills = [...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(InspectorAdvancedControls.slotName) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(bindingsGroup.name) || [])];
+  const settingsFills = [...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(defaultGroup.name) || []), ...((0,external_wp_components_namespaceObject.__experimentalUseSlotFills)(positionGroup.name) || []), ...(hasListFills && hasStyleFills > 1 ? advancedFills : [])];
 
   // Add the tabs in the order that they will default to if available.
   // List View > Settings > Styles.
@@ -66786,7 +72084,7 @@
   return showTabs ? tabs : use_inspector_controls_tabs_EMPTY_ARRAY;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-inspector/useBlockInspectorAnimationSettings.js
 /**
  * WordPress dependencies
  */
@@ -66823,56 +72121,24 @@
   }, [blockType]);
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-info-slot-fill/index.js
-/**
- * WordPress dependencies
- */
-
-
-/**
- * Internal dependencies
- */
-
-
-
-const {
-  createPrivateSlotFill
-} = unlock(external_wp_components_namespaceObject.privateApis);
-const {
-  Fill: block_info_slot_fill_Fill,
-  Slot: block_info_slot_fill_Slot
-} = createPrivateSlotFill('BlockInformation');
-const BlockInfo = props => {
-  const context = useBlockEditContext();
-  if (!context[mayDisplayControlsKey]) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_info_slot_fill_Fill, {
-    ...props
-  });
-};
-BlockInfo.Slot = props => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_info_slot_fill_Slot, {
-  ...props
-});
-/* harmony default export */ const block_info_slot_fill = (BlockInfo);
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-quick-navigation/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-quick-navigation/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
+
 
 
 
 
 function BlockQuickNavigation({
-  clientIds
+  clientIds,
+  onSelect
 }) {
   if (!clientIds.length) {
     return null;
@@ -66880,32 +72146,28 @@
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalVStack, {
     spacing: 1,
     children: clientIds.map(clientId => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockQuickNavigationItem, {
+      onSelect: onSelect,
       clientId: clientId
     }, clientId))
   });
 }
 function BlockQuickNavigationItem({
-  clientId
-}) {
-  const {
-    name,
-    icon,
+  clientId,
+  onSelect
+}) {
+  const blockInformation = useBlockDisplayInformation(clientId);
+  const blockTitle = useBlockDisplayTitle({
+    clientId,
+    context: 'list-view'
+  });
+  const {
     isSelected
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
-      getBlockName,
-      getBlockAttributes,
       isBlockSelected,
       hasSelectedInnerBlock
     } = select(store);
-    const {
-      getBlockType
-    } = select(external_wp_blocks_namespaceObject.store);
-    const blockType = getBlockType(getBlockName(clientId));
-    const attributes = getBlockAttributes(clientId);
-    return {
-      name: blockType && (0,external_wp_blocks_namespaceObject.__experimentalGetBlockLabel)(blockType, attributes, 'list-view'),
-      icon: blockType?.icon,
+    return {
       isSelected: isBlockSelected(clientId) || hasSelectedInnerBlock(clientId, /* deep: */true)
     };
   }, [clientId]);
@@ -66913,110 +72175,95 @@
     selectBlock
   } = (0,external_wp_data_namespaceObject.useDispatch)(store);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+    __next40pxDefaultSize: true,
     isPressed: isSelected,
-    onClick: () => selectBlock(clientId),
+    onClick: async () => {
+      await selectBlock(clientId);
+      if (onSelect) {
+        onSelect(clientId);
+      }
+    },
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_wp_components_namespaceObject.Flex, {
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexItem, {
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
-          icon: icon
+          icon: blockInformation?.icon
         })
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.FlexBlock, {
         style: {
           textAlign: 'left'
         },
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalTruncate, {
-          children: name
+          children: blockTitle
         })
       })]
     })
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-inspector/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-function BlockInspectorLockedBlocks({
-  topLevelLockedBlock
-}) {
-  const contentClientIds = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    const {
-      getClientIdsOfDescendants,
-      getBlockName,
-      getBlockEditingMode
-    } = select(store);
-    return getClientIdsOfDescendants(topLevelLockedBlock).filter(clientId => getBlockName(clientId) !== 'core/list-item' && getBlockEditingMode(clientId) === 'contentOnly');
-  }, [topLevelLockedBlock]);
-  const blockInformation = useBlockDisplayInformation(topLevelLockedBlock);
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-    className: "block-editor-block-inspector",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_card, {
-      ...blockInformation,
-      className: blockInformation.isSynced && 'is-synced'
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_variation_transforms, {
-      blockClientId: topLevelLockedBlock
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_info_slot_fill.Slot, {}), contentClientIds.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
-      title: (0,external_wp_i18n_namespaceObject.__)('Content'),
-      children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockQuickNavigation, {
-        clientIds: contentClientIds
-      })
-    })]
-  });
-}
-const BlockInspector = ({
-  showNoBlockSelectedMessage = true
-}) => {
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-inspector/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function BlockStylesPanel({
+  clientId
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
+    title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
+    children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_styles, {
+      clientId: clientId
+    })
+  });
+}
+function BlockInspector() {
   const {
     count,
     selectedBlockName,
     selectedBlockClientId,
     blockType,
-    topLevelLockedBlock
+    isSectionBlock
   } = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getSelectedBlockClientId,
       getSelectedBlockCount,
       getBlockName,
-      getContentLockingParent,
-      getTemplateLock
+      getParentSectionBlock,
+      isSectionBlock: _isSectionBlock
     } = unlock(select(store));
     const _selectedBlockClientId = getSelectedBlockClientId();
-    const _selectedBlockName = _selectedBlockClientId && getBlockName(_selectedBlockClientId);
+    const renderedBlockClientId = getParentSectionBlock(_selectedBlockClientId) || getSelectedBlockClientId();
+    const _selectedBlockName = renderedBlockClientId && getBlockName(renderedBlockClientId);
     const _blockType = _selectedBlockName && (0,external_wp_blocks_namespaceObject.getBlockType)(_selectedBlockName);
     return {
       count: getSelectedBlockCount(),
-      selectedBlockClientId: _selectedBlockClientId,
+      selectedBlockClientId: renderedBlockClientId,
       selectedBlockName: _selectedBlockName,
       blockType: _blockType,
-      topLevelLockedBlock: getContentLockingParent(_selectedBlockClientId) || (getTemplateLock(_selectedBlockClientId) === 'contentOnly' || _selectedBlockName === 'core/block' ? _selectedBlockClientId : undefined)
+      isSectionBlock: _isSectionBlock(renderedBlockClientId)
     };
   }, []);
   const availableTabs = useInspectorControlsTabs(blockType?.name);
@@ -67032,10 +72279,10 @@
   const borderPanelLabel = useBorderPanelLabel({
     blockName: selectedBlockName
   });
-  if (count > 1) {
+  if (count > 1 && !isSectionBlock) {
     return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
       className: "block-editor-block-inspector",
-      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(multi_selection_inspector, {}), showTabs ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorControlsTabs, {
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(MultiSelectionInspector, {}), showTabs ? /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorControlsTabs, {
         tabs: availableTabs
       }) : /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
         children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
@@ -67043,6 +72290,9 @@
           label: (0,external_wp_i18n_namespaceObject.__)('Color'),
           className: "color-block-support-panel__inner-wrapper"
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "background",
+          label: (0,external_wp_i18n_namespaceObject.__)('Background image')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
           group: "typography",
           label: (0,external_wp_i18n_namespaceObject.__)('Typography')
         }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
@@ -67064,17 +72314,9 @@
    * because we want the user to focus on the unregistered block warning, not block settings.
    */
   if (!blockType || !selectedBlockClientId || isSelectedBlockUnregistered) {
-    if (showNoBlockSelectedMessage) {
-      return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
-        className: "block-editor-block-inspector__no-blocks",
-        children: (0,external_wp_i18n_namespaceObject.__)('No block selected.')
-      });
-    }
-    return null;
-  }
-  if (topLevelLockedBlock) {
-    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockInspectorLockedBlocks, {
-      topLevelLockedBlock: topLevelLockedBlock
+    return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+      className: "block-editor-block-inspector__no-blocks",
+      children: (0,external_wp_i18n_namespaceObject.__)('No block selected.')
     });
   }
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockInspectorSingleBlockWrapper, {
@@ -67086,10 +72328,11 @@
     }),
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockInspectorSingleBlock, {
       clientId: selectedBlockClientId,
-      blockName: blockType.name
-    })
-  });
-};
+      blockName: blockType.name,
+      isSectionBlock: isSectionBlock
+    })
+  });
+}
 const BlockInspectorSingleBlockWrapper = ({
   animate,
   wrapper,
@@ -67121,10 +72364,11 @@
 };
 const BlockInspectorSingleBlock = ({
   clientId,
-  blockName
+  blockName,
+  isSectionBlock
 }) => {
   const availableTabs = useInspectorControlsTabs(blockName);
-  const showTabs = availableTabs?.length > 1;
+  const showTabs = !isSectionBlock && availableTabs?.length > 1;
   const hasBlockStyles = (0,external_wp_data_namespaceObject.useSelect)(select => {
     const {
       getBlockStyles
@@ -67136,6 +72380,18 @@
   const borderPanelLabel = useBorderPanelLabel({
     blockName
   });
+  const contentClientIds = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    // Avoid unnecessary subscription.
+    if (!isSectionBlock) {
+      return;
+    }
+    const {
+      getClientIdsOfDescendants,
+      getBlockName,
+      getBlockEditingMode
+    } = select(store);
+    return getClientIdsOfDescendants(clientId).filter(current => getBlockName(current) !== 'core/list-item' && getBlockEditingMode(current) === 'contentOnly');
+  }, [isSectionBlock, clientId]);
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
     className: "block-editor-block-inspector",
     children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_card, {
@@ -67143,41 +72399,45 @@
       className: blockInformation.isSynced && 'is-synced'
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_variation_transforms, {
       blockClientId: clientId
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_info_slot_fill.Slot, {}), showTabs && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorControlsTabs, {
+    }), showTabs && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(InspectorControlsTabs, {
       hasBlockStyles: hasBlockStyles,
       clientId: clientId,
       blockName: blockName,
       tabs: availableTabs
     }), !showTabs && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-      children: [hasBlockStyles && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
-          title: (0,external_wp_i18n_namespaceObject.__)('Styles'),
-          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_styles, {
-            clientId: clientId
-          })
-        })
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "list"
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "color",
-        label: (0,external_wp_i18n_namespaceObject.__)('Color'),
-        className: "color-block-support-panel__inner-wrapper"
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "typography",
-        label: (0,external_wp_i18n_namespaceObject.__)('Typography')
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "dimensions",
-        label: (0,external_wp_i18n_namespaceObject.__)('Dimensions')
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "border",
-        label: borderPanelLabel
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "styles"
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
-        group: "background",
-        label: (0,external_wp_i18n_namespaceObject.__)('Background image')
-      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(position_controls_panel, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(advanced_controls_panel, {})
+      children: [hasBlockStyles && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockStylesPanel, {
+        clientId: clientId
+      }), contentClientIds && contentClientIds?.length > 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.PanelBody, {
+        title: (0,external_wp_i18n_namespaceObject.__)('Content'),
+        children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(BlockQuickNavigation, {
+          clientIds: contentClientIds
+        })
+      }), !isSectionBlock && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
+        children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "list"
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "color",
+          label: (0,external_wp_i18n_namespaceObject.__)('Color'),
+          className: "color-block-support-panel__inner-wrapper"
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "background",
+          label: (0,external_wp_i18n_namespaceObject.__)('Background image')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "typography",
+          label: (0,external_wp_i18n_namespaceObject.__)('Typography')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "dimensions",
+          label: (0,external_wp_i18n_namespaceObject.__)('Dimensions')
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "border",
+          label: borderPanelLabel
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "styles"
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(position_controls_panel, {}), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(inspector_controls.Slot, {
+          group: "bindings"
+        }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
+          children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(advanced_controls_panel, {})
+        })]
       })]
     }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(SkipToSelectedBlock, {}, "back")]
   });
@@ -67188,7 +72448,7 @@
  */
 /* harmony default export */ const block_inspector = (BlockInspector);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/copy-handler/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/copy-handler/index.js
 /**
  * WordPress dependencies
  */
@@ -67228,7 +72488,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/library.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/inserter/library.js
 /**
  * WordPress dependencies
  */
@@ -67295,7 +72555,7 @@
 }
 /* harmony default export */ const library = ((0,external_wp_element_namespaceObject.forwardRef)(PublicInserterLibrary));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/selection-scroll-into-view/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/selection-scroll-into-view/index.js
 /**
  * WordPress dependencies
  */
@@ -67315,7 +72575,7 @@
   return null;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/typewriter/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/typewriter/index.js
 /**
  * WordPress dependencies
  */
@@ -67474,7 +72734,7 @@
     }
 
     /**
-     * Checks if the current situation is elegible for scroll:
+     * Checks if the current situation is eligible for scroll:
      * - There should be one and only one block selected.
      * - The component must contain the selection.
      * - The active element must be contenteditable.
@@ -67535,7 +72795,7 @@
  */
 /* harmony default export */ const typewriter = (TypewriterOrIEBypass);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/recursion-provider/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/recursion-provider/index.js
 /**
  * WordPress dependencies
  */
@@ -67636,11 +72896,10 @@
   return useHasRecursion(...args);
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inspector-popover-header/index.js
-/**
- * WordPress dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/inspector-popover-header/index.js
+/**
+ * WordPress dependencies
+ */
 
 
 
@@ -67666,6 +72925,7 @@
         icon,
         onClick
       }) => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        size: "small",
         className: "block-editor-inspector-popover-header__action",
         label: label,
         icon: icon,
@@ -67673,6 +72933,7 @@
         onClick: onClick,
         children: !icon && label
       }, label)), onClose && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        size: "small",
         className: "block-editor-inspector-popover-header__action",
         label: (0,external_wp_i18n_namespaceObject.__)('Close'),
         icon: close_small,
@@ -67684,19 +72945,18 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/publish-date-time-picker/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/publish-date-time-picker/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function PublishDateTimePicker({
@@ -67741,72 +73001,7 @@
 }
 /* harmony default export */ const publish_date_time_picker = ((0,external_wp_element_namespaceObject.forwardRef)(PublicPublishDateTimePicker));
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/inserter/reusable-block-rename-hint.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-
-
-
-
-const reusable_block_rename_hint_PREFERENCE_NAME = 'isResuableBlocksrRenameHintVisible';
-/*
- * This hook was added in 6.3 to help users with the transition from Reusable blocks to Patterns.
- * It is only exported for use in the reusable-blocks package as well as block-editor.
- * It will be removed in 6.4. and should not be used in any new code.
- */
-function useReusableBlocksRenameHint() {
-  return (0,external_wp_data_namespaceObject.useSelect)(select => {
-    var _select$get;
-    return (_select$get = select(external_wp_preferences_namespaceObject.store).get('core', reusable_block_rename_hint_PREFERENCE_NAME)) !== null && _select$get !== void 0 ? _select$get : true;
-  }, []);
-}
-
-/*
- * This component was added in 6.3 to help users with the transition from Reusable blocks to Patterns.
- * It is only exported for use in the reusable-blocks package as well as block-editor.
- * It will be removed in 6.4. and should not be used in any new code.
- */
-function ReusableBlocksRenameHint() {
-  const isReusableBlocksRenameHint = (0,external_wp_data_namespaceObject.useSelect)(select => {
-    var _select$get2;
-    return (_select$get2 = select(external_wp_preferences_namespaceObject.store).get('core', reusable_block_rename_hint_PREFERENCE_NAME)) !== null && _select$get2 !== void 0 ? _select$get2 : true;
-  }, []);
-  const ref = (0,external_wp_element_namespaceObject.useRef)();
-  const {
-    set: setPreference
-  } = (0,external_wp_data_namespaceObject.useDispatch)(external_wp_preferences_namespaceObject.store);
-  if (!isReusableBlocksRenameHint) {
-    return null;
-  }
-  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
-    ref: ref,
-    className: "reusable-blocks-menu-items__rename-hint",
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("div", {
-      className: "reusable-blocks-menu-items__rename-hint-content",
-      children: (0,external_wp_i18n_namespaceObject.__)('Reusable blocks are now synced patterns. A synced pattern will behave in exactly the same way as a reusable block.')
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
-      className: "reusable-blocks-menu-items__rename-hint-dismiss",
-      icon: library_close,
-      iconSize: "16",
-      label: (0,external_wp_i18n_namespaceObject.__)('Dismiss hint'),
-      onClick: () => {
-        // Retain focus when dismissing the element.
-        const previousElement = external_wp_dom_namespaceObject.focus.tabbable.findPrevious(ref.current);
-        previousElement?.focus();
-        setPreference('core', reusable_block_rename_hint_PREFERENCE_NAME, false);
-      },
-      showTooltip: false
-    })]
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/index.js
 /*
  * Block Creation Components
  */
@@ -67931,12 +73126,7 @@
 
 
 
-/*
- * The following rename hint component can be removed in 6.4.
- */
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/elements/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/elements/index.js
 const elements_ELEMENT_CLASS_NAMES = {
   button: 'wp-element-button',
   caption: 'wp-element-caption'
@@ -67945,9 +73135,9 @@
   return elements_ELEMENT_CLASS_NAMES[element] ? elements_ELEMENT_CLASS_NAMES[element] : '';
 };
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/get-px-from-css-unit.js
-/**
- * This function was accidentially exposed for mobile/native usage.
+;// ./node_modules/@wordpress/block-editor/build-module/utils/get-px-from-css-unit.js
+/**
+ * This function was accidentally exposed for mobile/native usage.
  *
  * @deprecated
  *
@@ -67955,21 +73145,21 @@
  */
 /* harmony default export */ const get_px_from_css_unit = (() => '');
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/utils/index.js
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/image-settings-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/utils/index.js
+
+
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/image-settings-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function useHasImageSettingsPanel(name, value, inheritedValue) {
@@ -68011,12 +73201,13 @@
       // Global Styles.
       , {
         hasValue: () => !!value?.lightbox,
-        label: (0,external_wp_i18n_namespaceObject.__)('Expand on click'),
+        label: (0,external_wp_i18n_namespaceObject.__)('Enlarge on click'),
         onDeselect: resetLightbox,
         isShownByDefault: true,
         panelId: panelId,
         children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.ToggleControl, {
-          label: (0,external_wp_i18n_namespaceObject.__)('Expand on click'),
+          __nextHasNoMarginBottom: true,
+          label: (0,external_wp_i18n_namespaceObject.__)('Enlarge on click'),
           checked: lightboxChecked,
           onChange: onChangeLightbox
         })
@@ -68025,18 +73216,17 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/advanced-panel.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/advanced-panel.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 function AdvancedPanel({
@@ -68096,7 +73286,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/memize/dist/index.js
+;// ./node_modules/memize/dist/index.js
 /**
  * Memize options object.
  *
@@ -68258,7 +73448,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/get-global-styles-changes.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/get-global-styles-changes.js
 /**
  * External dependencies
  */
@@ -68442,7 +73632,9 @@
       return acc;
     }, {})).map(([key, changeValues]) => {
       const changeValuesLength = changeValues.length;
-      const joinedChangesValue = changeValues.join((0,external_wp_i18n_namespaceObject.__)(', '));
+      const joinedChangesValue = changeValues.join(/* translators: Used between list items, there is a space after the comma. */
+      (0,external_wp_i18n_namespaceObject.__)(', ') // eslint-disable-line @wordpress/i18n-no-flanking-whitespace
+      );
       switch (key) {
         case 'blocks':
           {
@@ -68480,23 +73672,23 @@
   return get_global_styles_changes_EMPTY_ARRAY;
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/global-styles/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/rich-text/get-rich-text-values.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/global-styles/index.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/rich-text/get-rich-text-values.js
 /**
  * WordPress dependencies
  */
@@ -68585,7 +73777,7 @@
   return values.map(value => value instanceof external_wp_richText_namespaceObject.RichTextData ? value : external_wp_richText_namespaceObject.RichTextData.fromHTMLString(value));
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/resizable-box-popover/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/resizable-box-popover/index.js
 /**
  * WordPress dependencies
  */
@@ -68611,19 +73803,226 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-removal-warning-modal/index.js
-/**
- * WordPress dependencies
- */
-
-
-
-
-
-/**
- * Internal dependencies
- */
-
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-manager/checklist.js
+/**
+ * WordPress dependencies
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function BlockTypesChecklist({
+  blockTypes,
+  value,
+  onItemChange
+}) {
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("ul", {
+    className: "block-editor-block-manager__checklist",
+    children: blockTypes.map(blockType => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("li", {
+      className: "block-editor-block-manager__checklist-item",
+      children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+        __nextHasNoMarginBottom: true,
+        label: blockType.title,
+        checked: value.includes(blockType.name),
+        onChange: (...args) => onItemChange(blockType, ...args)
+      }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_icon, {
+        icon: blockType.icon
+      })]
+    }, blockType.name))
+  });
+}
+/* harmony default export */ const checklist = (BlockTypesChecklist);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-manager/category.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+function BlockManagerCategory({
+  title,
+  blockTypes,
+  selectedBlockTypes,
+  onChange
+}) {
+  const instanceId = (0,external_wp_compose_namespaceObject.useInstanceId)(BlockManagerCategory);
+  const toggleVisible = (0,external_wp_element_namespaceObject.useCallback)((blockType, nextIsChecked) => {
+    if (nextIsChecked) {
+      onChange([...selectedBlockTypes, blockType]);
+    } else {
+      onChange(selectedBlockTypes.filter(({
+        name
+      }) => name !== blockType.name));
+    }
+  }, [selectedBlockTypes, onChange]);
+  const toggleAllVisible = (0,external_wp_element_namespaceObject.useCallback)(nextIsChecked => {
+    if (nextIsChecked) {
+      onChange([...selectedBlockTypes, ...blockTypes.filter(blockType => !selectedBlockTypes.find(({
+        name
+      }) => name === blockType.name))]);
+    } else {
+      onChange(selectedBlockTypes.filter(selectedBlockType => !blockTypes.find(({
+        name
+      }) => name === selectedBlockType.name)));
+    }
+  }, [blockTypes, selectedBlockTypes, onChange]);
+  if (!blockTypes.length) {
+    return null;
+  }
+  const checkedBlockNames = blockTypes.map(({
+    name
+  }) => name).filter(type => (selectedBlockTypes !== null && selectedBlockTypes !== void 0 ? selectedBlockTypes : []).some(selectedBlockType => selectedBlockType.name === type));
+  const titleId = 'block-editor-block-manager__category-title-' + instanceId;
+  const isAllChecked = checkedBlockNames.length === blockTypes.length;
+  const isIndeterminate = !isAllChecked && checkedBlockNames.length > 0;
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    role: "group",
+    "aria-labelledby": titleId,
+    className: "block-editor-block-manager__category",
+    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.CheckboxControl, {
+      __nextHasNoMarginBottom: true,
+      checked: isAllChecked,
+      onChange: toggleAllVisible,
+      className: "block-editor-block-manager__category-title",
+      indeterminate: isIndeterminate,
+      label: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("span", {
+        id: titleId,
+        children: title
+      })
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(checklist, {
+      blockTypes: blockTypes,
+      value: checkedBlockNames,
+      onItemChange: toggleVisible
+    })]
+  });
+}
+/* harmony default export */ const block_manager_category = (BlockManagerCategory);
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-manager/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
+
+
+/**
+ * Provides a list of blocks with checkboxes.
+ *
+ * @param {Object}   props                    Props.
+ * @param {Array}    props.blockTypes         An array of blocks.
+ * @param {Array}    props.selectedBlockTypes An array of selected blocks.
+ * @param {Function} props.onChange           Function to be called when the selected blocks change.
+ */
+
+function BlockManager({
+  blockTypes,
+  selectedBlockTypes,
+  onChange
+}) {
+  const debouncedSpeak = (0,external_wp_compose_namespaceObject.useDebounce)(external_wp_a11y_namespaceObject.speak, 500);
+  const [search, setSearch] = (0,external_wp_element_namespaceObject.useState)('');
+  const {
+    categories,
+    isMatchingSearchTerm
+  } = (0,external_wp_data_namespaceObject.useSelect)(select => {
+    return {
+      categories: select(external_wp_blocks_namespaceObject.store).getCategories(),
+      isMatchingSearchTerm: select(external_wp_blocks_namespaceObject.store).isMatchingSearchTerm
+    };
+  }, []);
+  function enableAllBlockTypes() {
+    onChange(blockTypes);
+  }
+  const filteredBlockTypes = blockTypes.filter(blockType => {
+    return !search || isMatchingSearchTerm(blockType, search);
+  });
+  const numberOfHiddenBlocks = blockTypes.length - selectedBlockTypes.length;
+
+  // Announce search results on change
+  (0,external_wp_element_namespaceObject.useEffect)(() => {
+    if (!search) {
+      return;
+    }
+    const count = filteredBlockTypes.length;
+    const resultsFoundMessage = (0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of results. */
+    (0,external_wp_i18n_namespaceObject._n)('%d result found.', '%d results found.', count), count);
+    debouncedSpeak(resultsFoundMessage);
+  }, [filteredBlockTypes?.length, search, debouncedSpeak]);
+  return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+    className: "block-editor-block-manager__content",
+    children: [!!numberOfHiddenBlocks && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+      className: "block-editor-block-manager__disabled-blocks-count",
+      children: [(0,external_wp_i18n_namespaceObject.sprintf)(/* translators: %d: number of blocks. */
+      (0,external_wp_i18n_namespaceObject._n)('%d block is hidden.', '%d blocks are hidden.', numberOfHiddenBlocks), numberOfHiddenBlocks), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
+        __next40pxDefaultSize: true,
+        variant: "link",
+        onClick: enableAllBlockTypes,
+        children: (0,external_wp_i18n_namespaceObject.__)('Reset')
+      })]
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SearchControl, {
+      __nextHasNoMarginBottom: true,
+      label: (0,external_wp_i18n_namespaceObject.__)('Search for a block'),
+      placeholder: (0,external_wp_i18n_namespaceObject.__)('Search for a block'),
+      value: search,
+      onChange: nextSearch => setSearch(nextSearch),
+      className: "block-editor-block-manager__search"
+    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)("div", {
+      tabIndex: "0",
+      role: "region",
+      "aria-label": (0,external_wp_i18n_namespaceObject.__)('Available block types'),
+      className: "block-editor-block-manager__results",
+      children: [filteredBlockTypes.length === 0 && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)("p", {
+        className: "block-editor-block-manager__no-results",
+        children: (0,external_wp_i18n_namespaceObject.__)('No blocks found.')
+      }), categories.map(category => /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_manager_category, {
+        title: category.title,
+        blockTypes: filteredBlockTypes.filter(blockType => blockType.category === category.slug),
+        selectedBlockTypes: selectedBlockTypes,
+        onChange: onChange
+      }, category.slug)), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(block_manager_category, {
+        title: (0,external_wp_i18n_namespaceObject.__)('Uncategorized'),
+        blockTypes: filteredBlockTypes.filter(({
+          category
+        }) => !category),
+        selectedBlockTypes: selectedBlockTypes,
+        onChange: onChange
+      })]
+    })]
+  });
+}
+
+;// ./node_modules/@wordpress/block-editor/build-module/components/block-removal-warning-modal/index.js
+/**
+ * WordPress dependencies
+ */
+
+
+
+
+
+/**
+ * Internal dependencies
+ */
 
 
 
@@ -68667,17 +74066,19 @@
       children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
         variant: "tertiary",
         onClick: clearBlockRemovalPrompt,
+        __next40pxDefaultSize: true,
         children: (0,external_wp_i18n_namespaceObject.__)('Cancel')
       }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.Button, {
         variant: "primary",
         onClick: onConfirmRemoval,
+        __next40pxDefaultSize: true,
         children: (0,external_wp_i18n_namespaceObject.__)('Delete')
       })]
     })]
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/scale-tool.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/scale-tool.js
 /**
  * WordPress dependencies
  */
@@ -68768,6 +74169,7 @@
     onDeselect: () => onChange(defaultValue),
     panelId: panelId,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToggleGroupControl, {
+      __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Scale'),
       isBlock: true,
       help: scaleHelp[displayValue],
@@ -68781,22 +74183,18 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
+;// ./node_modules/@babel/runtime/helpers/esm/extends.js
 function extends_extends() {
-  extends_extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  };
-  return extends_extends.apply(this, arguments);
-}
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
+  return extends_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_extends.apply(null, arguments);
+}
+
+;// ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
 function memoize(fn) {
   var cache = Object.create(null);
   return function (arg) {
@@ -68807,7 +74205,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js
+;// ./node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js
 
 
 var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23
@@ -68824,7 +74222,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js
+;// ./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js
 /*
 
 Based off glamor's StyleSheet, thanks Sunil ❤️
@@ -68966,7 +74364,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Utility.js
+;// ./node_modules/stylis/src/Utility.js
 /**
  * @param {number}
  * @return {number}
@@ -69083,7 +74481,7 @@
 	return array.map(callback).join('')
 }
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Tokenizer.js
+;// ./node_modules/stylis/src/Tokenizer.js
 
 
 var line = 1
@@ -69331,7 +74729,7 @@
 	return slice(index, Tokenizer_position)
 }
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Enum.js
+;// ./node_modules/stylis/src/Enum.js
 var Enum_MS = '-ms-'
 var Enum_MOZ = '-moz-'
 var Enum_WEBKIT = '-webkit-'
@@ -69353,7 +74751,7 @@
 var COUNTER_STYLE = '@counter-style'
 var FONT_FEATURE_VALUES = '@font-feature-values'
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Serializer.js
+;// ./node_modules/stylis/src/Serializer.js
 
 
 
@@ -69390,7 +74788,7 @@
 	return Utility_strlen(children = Serializer_serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''
 }
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Middleware.js
+;// ./node_modules/stylis/src/Middleware.js
 
 
 
@@ -69500,7 +74898,7 @@
 	}
 }
 
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Parser.js
+;// ./node_modules/stylis/src/Parser.js
 
 
 
@@ -69567,7 +74965,7 @@
 			case 47:
 				switch (peek()) {
 					case 42: case 47:
-						Utility_append(Parser_comment(commenter(next(), caret()), root, parent), declarations)
+						Utility_append(comment(commenter(next(), caret()), root, parent), declarations)
 						break
 					default:
 						characters += '/'
@@ -69678,7 +75076,7 @@
  * @param {object?} parent
  * @return {object}
  */
-function Parser_comment (value, root, parent) {
+function comment (value, root, parent) {
 	return node(value, root, parent, COMMENT, Utility_from(Tokenizer_char()), Utility_substr(value, 2, -2), 0)
 }
 
@@ -69693,7 +75091,7 @@
 	return node(value, root, parent, Enum_DECLARATION, Utility_substr(value, 0, length), Utility_substr(value, length + 1, -1), length)
 }
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js
+;// ./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js
 
 
 
@@ -70248,7 +75646,7 @@
 
 /* harmony default export */ const emotion_cache_browser_esm = (createCache);
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/hash/dist/emotion-hash.esm.js
+;// ./node_modules/@emotion/hash/dist/emotion-hash.esm.js
 /* eslint-disable */
 // Inspired by https://github.com/garycourt/murmurhash-js
 // Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86
@@ -70305,7 +75703,7 @@
 
 /* harmony default export */ const emotion_hash_esm = (murmur2);
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js
+;// ./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js
 var unitlessKeys = {
   animationIterationCount: 1,
   borderImageOutset: 1,
@@ -70357,18 +75755,7 @@
 
 /* harmony default export */ const emotion_unitless_esm = (unitlessKeys);
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/serialize/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
-function emotion_memoize_esm_memoize(fn) {
-  var cache = Object.create(null);
-  return function (arg) {
-    if (cache[arg] === undefined) cache[arg] = fn(arg);
-    return cache[arg];
-  };
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js
+;// ./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js
 
 
 
@@ -70386,7 +75773,7 @@
   return value != null && typeof value !== 'boolean';
 };
 
-var processStyleName = /* #__PURE__ */emotion_memoize_esm_memoize(function (styleName) {
+var processStyleName = /* #__PURE__ */memoize(function (styleName) {
   return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();
 });
 
@@ -70617,7 +76004,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js
+;// ./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js
 
 
 
@@ -70631,7 +76018,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js
+;// ./node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js
 
 
 
@@ -70845,7 +76232,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js
+;// ./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js
 var isBrowser = "object" !== 'undefined';
 function emotion_utils_browser_esm_getRegisteredStyles(registered, registeredStyles, classNames) {
   var rawClassName = '';
@@ -70891,7 +76278,7 @@
 
 
 
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js
+;// ./node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js
 
 
 
@@ -71060,7 +76447,7 @@
 
 /* harmony default export */ const emotion_styled_base_browser_esm = (createStyled);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/width-height-tool.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/width-height-tool.js
 
 function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
 /**
@@ -71073,8 +76460,6 @@
 
 
 
-
-
 const SingleColumnToolsPanelItem = /*#__PURE__*/emotion_styled_base_browser_esm(external_wp_components_namespaceObject.__experimentalToolsPanelItem,  true ? {
   target: "ef8pe3d0"
 } : 0)( true ? {
@@ -71174,7 +76559,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/dimensions-tool/index.js
 /**
  * WordPress dependencies
  */
@@ -71227,8 +76612,6 @@
  * @return {Element} The dimensions controls.
  */
 
-
-
 function DimensionsTool({
   panelId,
   value = {},
@@ -71241,7 +76624,9 @@
   // Default options handled by ScaleTool.
   defaultScale = 'fill',
   // Match CSS default value for object-fit.
-  unitsOptions // Default options handled by UnitControl.
+  unitsOptions,
+  // Default options handled by UnitControl.
+  tools = ['aspectRatio', 'widthHeight', 'scale']
 }) {
   // Coerce undefined and CSS default values to be null.
   const width = value.width === undefined || value.width === 'auto' ? null : value.width;
@@ -71261,7 +76646,7 @@
   const aspectRatioValue = width && height ? 'custom' : lastAspectRatio;
   const showScaleControl = aspectRatio || width && height;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsxs)(external_ReactJSXRuntime_namespaceObject.Fragment, {
-    children: [/*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AspectRatioTool, {
+    children: [tools.includes('aspectRatio') && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(AspectRatioTool, {
       panelId: panelId,
       options: aspectRatioOptions,
       defaultValue: defaultAspectRatio,
@@ -71298,7 +76683,7 @@
         }
         onChange(nextValue);
       }
-    }), /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WidthHeightTool, {
+    }), tools.includes('widthHeight') && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(WidthHeightTool, {
       panelId: panelId,
       units: unitsOptions,
       value: {
@@ -71353,7 +76738,7 @@
         }
         onChange(nextValue);
       }
-    }), showScaleControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScaleTool, {
+    }), tools.includes('scale') && showScaleControl && /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(ScaleTool, {
       panelId: panelId,
       options: scaleOptions,
       defaultValue: defaultScale,
@@ -71380,7 +76765,7 @@
 }
 /* harmony default export */ const dimensions_tool = (DimensionsTool);
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/resolution-tool/index.js
+;// ./node_modules/@wordpress/block-editor/build-module/components/resolution-tool/index.js
 /**
  * WordPress dependencies
  */
@@ -71406,7 +76791,8 @@
   onChange,
   options = DEFAULT_SIZE_OPTIONS,
   defaultValue = DEFAULT_SIZE_OPTIONS[0].value,
-  isShownByDefault = true
+  isShownByDefault = true,
+  resetAllFilter
 }) {
   const displayValue = value !== null && value !== void 0 ? value : defaultValue;
   return /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.__experimentalToolsPanelItem, {
@@ -71415,7 +76801,9 @@
     onDeselect: () => onChange(defaultValue),
     isShownByDefault: isShownByDefault,
     panelId: panelId,
+    resetAllFilter: resetAllFilter,
     children: /*#__PURE__*/(0,external_ReactJSXRuntime_namespaceObject.jsx)(external_wp_components_namespaceObject.SelectControl, {
+      __nextHasNoMarginBottom: true,
       label: (0,external_wp_i18n_namespaceObject.__)('Resolution'),
       value: displayValue,
       options: options,
@@ -71426,7 +76814,7 @@
   });
 }
 
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/private-apis.js
+;// ./node_modules/@wordpress/block-editor/build-module/private-apis.js
 /**
  * Internal dependencies
  */
@@ -71473,30 +76861,29 @@
   ExperimentalBlockEditorProvider: ExperimentalBlockEditorProvider,
   getDuotoneFilter: getDuotoneFilter,
   getRichTextValues: getRichTextValues,
-  PrivateInserter: ComposedPrivateInserter,
   PrivateQuickInserter: QuickInserter,
   extractWords: extractWords,
   getNormalizedSearchTerms: getNormalizedSearchTerms,
   normalizeString: normalizeString,
   PrivateListView: PrivateListView,
   ResizableBoxPopover: ResizableBoxPopover,
-  BlockInfo: block_info_slot_fill,
   useHasBlockToolbar: useHasBlockToolbar,
   cleanEmptyObject: utils_cleanEmptyObject,
-  useStyleOverride: useStyleOverride,
   BlockQuickNavigation: BlockQuickNavigation,
   LayoutStyle: LayoutStyle,
+  BlockManager: BlockManager,
   BlockRemovalWarningModal: BlockRemovalWarningModal,
   useLayoutClasses: useLayoutClasses,
   useLayoutStyles: useLayoutStyles,
   DimensionsTool: dimensions_tool,
   ResolutionTool: ResolutionTool,
+  TabbedSidebar: tabbed_sidebar,
   TextAlignmentControl: TextAlignmentControl,
-  ReusableBlocksRenameHint: ReusableBlocksRenameHint,
-  useReusableBlocksRenameHint: useReusableBlocksRenameHint,
   usesContextKey: usesContextKey,
   useFlashEditableBlocks: useFlashEditableBlocks,
+  useZoomOut: useZoomOut,
   globalStylesDataKey: globalStylesDataKey,
+  globalStylesLinksDataKey: globalStylesLinksDataKey,
   selectBlockPatternsKey: selectBlockPatternsKey,
   requiresWrapperOnCopy: requiresWrapperOnCopy,
   PrivateRichText: PrivateRichText,
@@ -71506,10 +76893,14 @@
   PrivatePublishDateTimePicker: PrivatePublishDateTimePicker,
   useSpacingSizes: useSpacingSizes,
   useBlockDisplayTitle: useBlockDisplayTitle,
-  __unstableBlockStyleVariationOverridesWithConfig: __unstableBlockStyleVariationOverridesWithConfig
-});
-
-;// CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/index.js
+  __unstableBlockStyleVariationOverridesWithConfig: __unstableBlockStyleVariationOverridesWithConfig,
+  setBackgroundStyleDefaults: setBackgroundStyleDefaults,
+  sectionRootClientIdKey: sectionRootClientIdKey,
+  CommentIconSlotFill: block_comment_icon_slot,
+  CommentIconToolbarSlotFill: block_comment_icon_toolbar_slot
+});
+
+;// ./node_modules/@wordpress/block-editor/build-module/index.js
 /**
  * Internal dependencies
  */